6.2.4 • Published 2 years ago

format-message-interpret v6.2.4

Weekly downloads
14,911
License
MIT
Repository
github
Last release
2 years ago

format-message-interpret

Convert format-message-parse ast to a function

npm Version JS Standard Style MIT License

Turns a compact format-message ast:

[ "You have ", [ "numBananas", "plural", 0, {
     "=0": [ "no bananas" ],
    "one": [ "a banana" ],
  "other": [ [ '#' ], " bananas" ]
} ], " for sale." ]

into a function:

format({ numBananas:0 })
//-> "You have no bananas for sale."

Quick Examples

npm install format-message-interpret --save

import parse from 'format-message-parse'
import interpret from 'format-message-interpret'

interpret('en', parse('Hello, {name}!'))({ name: 'Jane' })

API

interpret(locales: string | string[], ast: AST, types?: Types)

Generate a function from an ast, using the formatting rules of the locales that accepts an arguments object, and returns a string. You can optionally pass custom types. Any non-standard type found in ast without a corresponding formatter in types will be treated as a simple string type.

type Types = {
  [type: string]: (placeholder: string[], locales: string | string[]) =>
    (value: any, args: Object) => string
}

types is an object with each key being the name of the type as it appears in the message pattern. Each value is a function that takes the locales, and the node from the ast (like [ 'a', 'mytype', 'style' ]), and it returns a function that will be called with the specific value, and the complete arguments object. If the custom type was defined with sub-messages, those will already be converted to functions meant to be called with args.

interpret.toParts(locales: string | string[], ast: AST, types?: Types)

Like, interpret, interpretToParts will generate a function accepting the message arguments. However, it will return an array of message parts, instead of a string. This is intended to help generate rich messages.

interpret.toParts('en', parse('a {b} c'))({ b: 1 }) // [ 'a ', 1, ' c' ]
interpret.toParts('en', parse('Click {a, element, children {here}}'), {
  element: (locales, [ id, type, props ]) =>
    (fn, args) => fn(props.children(args))
})({ a: children => <a>{children}</a> })
// [ 'Click ', <a>here</a> ]

License

This software is free to use under the MIT license. See the LICENSE-MIT file for license text and copyright information.

6.2.4

2 years ago

6.2.3

5 years ago

6.2.2

5 years ago

6.2.0

6 years ago

6.1.0

6 years ago

6.0.4

6 years ago

6.0.3

6 years ago

6.0.0

6 years ago

6.0.0-alpha.2

6 years ago

6.0.0-alpha.1

6 years ago

6.0.0-alpha.0

6 years ago

5.2.1

6 years ago

5.1.2

7 years ago

5.1.0

7 years ago

5.0.0

8 years ago

5.0.0-beta.10

8 years ago

5.0.0-beta.9

8 years ago

5.0.0-beta.8

8 years ago

4.0.1

8 years ago

4.0.0

8 years ago