Skip to content

felixmosh/i18next-locales-sync

Repository files navigation

i18next-locales-sync

CI npm

Syncs i18next locale resource files against a primary language.

Installation

$ npm install --save-dev i18next-locales-sync

Features

  1. Supports namespaces.
  2. Full plural support, based on the real i18next pluralResolver.
  3. Supports JSON v4
  4. Sorting secondary locale keys by primary language order.
  5. Supports multiple locale folder structure, {lng}/{namespace}, {namespace}/{lng}.
  6. Creates missing locale files.
  7. 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_many": "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": "部屋"
}

Prior art

  1. i18next-json-sync

About

Syncs i18next locale resource files against a primary language.

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published