Syncs i18next locale resource files against a primary language.
$ npm install --save-dev i18next-locales-sync
- 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.
$ 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
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')),
});
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 :].
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": "部屋"
}