Convert format-message-parse ast to a function
npm install format-message-interpret> Convert format-message-parse ast to a function
[![npm Version][npm-image]][npm]
[![JS Standard Style][style-image]][style]
[![MIT License][license-image]][LICENSE]
Turns a compact format-message ast:
``js`
[ "You have ", [ "numBananas", "plural", 0, {
"=0": [ "no bananas" ],
"one": [ "a banana" ],
"other": [ [ '#' ], " bananas" ]
} ], " for sale." ]
into a function:
`js`
format({ numBananas:0 })
//-> "You have no bananas for sale."
Quick Examples
--------------
npm install format-message-interpret --save
`js
import parse from 'format-message-parse'
import interpret from 'format-message-interpret'
interpret('en', parse('Hello, {name}!'))({ name: 'Jane' })
`
API
---
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.
`js`
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.
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.
`js``
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 => {children} })
// [ 'Click ', here ]
License
-------
This software is free to use under the MIT license. See the [LICENSE-MIT file][LICENSE] for license text and copyright information.
[logo]: https://format-message.github.io/format-message/logo.svg
[npm]: https://www.npmjs.org/package/format-message-interpret
[npm-image]: https://img.shields.io/npm/v/format-message-interpret.svg
[style]: https://github.com/feross/standard
[style-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg
[license-image]: https://img.shields.io/npm/l/format-message.svg
[LICENSE]: https://github.com/format-message/format-message/blob/master/LICENSE-MIT