babel-plugin-transform-typograf
Version:
Automatically formats your translations in JS
113 lines (86 loc) • 2.69 kB
Markdown
<a href="https://amplifr.com/?utm_source=babel-plugin-transform-typograf">
<img width="100" height="140" align="right"
alt="Amplifr Logo" src="https://amplifr-direct.s3-eu-west-1.amazonaws.com/social_images/image/37b580d9-3668-4005-8d5a-137de3a3e77c.png" />
</a>
The plugin automatically formats your translations in JS.
- It uses [Typograf](https://github.com/typograf/typograf) to format
the text;
- Also, it replaces `~` with non-breaking space. It’s easier to use
than UTF-8 character, and it is visible in any editor.
```js
const I18N = {
ru: {
heading: 'Структура должна быть ',
content: 'вот такая. Допускается ' +
'использовать~переносы',
array: [
'Допускается использовать массивы',
[
'И массивы внутри массивов',
'Удобно для списков'
]
]
},
en: {
heading: 'Structure should be ',
content: 'like this. It`s allowed ' +
'to use multiline~translations',
array: [
'You can use arrays',
[
'And arrays inside of arrays',
'It is used as lists in the main'
]
]
}
}
```
:triangular_flag_on_post: Also, you can wrap the translation object with any function if translation
is a first argument of this function:
```js
const I18N = messages({...})
```
```js
const t = I18N[this.context.locale]
h('div', [
h('h1', [t.heading])
h('p', [t.content])
])
```
- Translation should be plain otherwise it won’t be processed;
- But Arrays are supported (used as lists in the main);
- Anyway Functions won’t be processed.
This is mine very first Babel Plugin so please send an Issue
if you have any suggestions how to improve this.
1. First of all, you need to install the package:
```bash
$ yarn add babel-plugin-transform-typograf
```
2. Then you should add the plugin in your Babel config,
for example, `.babelrc`:
```json
"plugins": [
...
"react-hyperscript",
"transform-typograf"
]
```
- It is tested with `ru` :ru: and `en` :us: languages only for now;
- Rules enabled: nbsp, hellip (ellipsis), apostrophe.
Run the following command to run test:
```bash
$ yarn test
```
It compares `actual.js` after transformation with an `expected.js`.
Please note that due to unexpected behavior of Babel (it forces
escaping of Cyrillic symbols), I have to add unescaping function
to the test file.
---
_Special thanks to [Andrey Sitnik](https://github.com/ai)_