i18next-locales-sync
v2.1.0
Published
Syncs i18next locale resource files against a primary language.
Downloads
16,225
Readme
i18next-locales-sync
Syncs i18next locale resource files against a primary language.
Installation
$ npm install --save-dev i18next-locales-sync
Features
- Supports namespaces.
- Full plural support, based on the real i18next pluralResolver.
- Supports JSON v4
- Sorting secondary locale keys by primary language order.
- Supports multiple locale folder structure,
{lng}/{namespace}
,{namespace}/{lng}
. - Creates missing locale files.
- Allows overriding plural rules.
Usage
1. CLI
$ npx i18next-locales-sync -p he -s en de ja -l path/to/locales/folder --spaces 2
or using config file
// localesSync.config.js
module.exports = {
primaryLanguage: 'he',
secondaryLanguages: ['en', 'de', 'ja'],
localesFolder: './path/to/locales/folder',
overridePluralRules: (pluralResolver) =>
pluralResolver.addRule('he', pluralResolver.getRule('en')), // This is available only when using config file
spaces: 2,
};
$ npx i18next-locales-sync -c ./localesSync.config.js
2. Node
import { syncLocales } from 'i18next-locales-sync';
import path from 'path';
syncLocales({
primaryLanguage: 'en',
secondaryLanguages: ['en', 'de', 'ja'],
localesFolder: path.resolve('./path/to/locales/folder'),
overridePluralRules: (pluralResolver) =>
pluralResolver.addRule('he', pluralResolver.getRule('en')),
});
Options
| Key | Type | Default value |
| ------------------- |-------------------------------------------------------|-----------------|
| primaryLanguage | string
| |
| secondaryLanguages | string[]
| |
| localesFolder | string
| |
| outputFolder | string?
| localesFolder
|
| overridePluralRules | (pluralResolver: PluralResolver)? => PluralResolver
| |
| useEmptyString | boolean
| false
|
| spaces | number
| 2
|
| compatibilityJSON | string
| v4
|
Currently, the lib supports only .json
locale files, PRs are welcome :].
Example
Given these files:
examples
├── en
│ └── namespace.json
├── he
│ └── namespace.json
└── ja
└── namespace.json
// en/namespace.json
{
"foo_male": "bar-male-en",
"room_one": "room",
"room_other": "rooms"
}
// he/namespace.json
{
"room": "חדר",
"foo_male": "bar-male-he",
"room_few": "חדרים"
}
// ja/namespace.json
{
"foo_male": "bar-male-ja",
"room": "部屋",
"room_other": "部屋"
}
Syncying he
& ja
against en
$ npx i18next-locales-sync -p en -s he ja -l ./examples/
Will result with
// en/namespace.json
// `en` remains untouched
{
"foo_male": "bar-male-en",
"room_one": "room",
"room_other": "rooms"
}
// he/namespace.json
// sorted based on the primary lang file
// keeps existing plural form (room_3)
// added missing plural forms
{
"foo_male": "bar-male-he",
"room_one": "חדר",
"room_two": "חדרים",
"room_few": "rooms",
"room_other": "rooms"
}
// ja/namespace.json
// keeps exising fields
// removed plural form since there is no plural form in Japanese
{
"foo_male": "bar-male-ja",
"room": "部屋"
}