2.1.0 • Published 7 months ago
i18next-locales-sync v2.1.0
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": "部屋"
}