@ts-intl/dictionary
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

I18n dictionary/messages generator

Generate dictionary/messages by locale object or file, features:

  1. replace subtrees/leaves with fallback locale
  2. file system support
  3. include/exclude support to reduce size of dictionary
// treat top level key as namespace
export type Dictionary = {
  [key: string]: string | Dictionary;
};

Installation

npm install @ts-intl/dictionary

extractDictionary

Interface

const extractDictionary = (targetDict: Dictionary, fallbackDict: Dictionary, include: Trie | NSPath, exclude?: Trie | NSPath, logger?: (path: string) => void) => Dictionary;

Usage

const fallbackDict: Dictionary = {
  a: {
    b: 'i am b',
    c: {
      d: 'i am d',
    },
  },
  e: {
    f: 'i am f',
    g: 'i am g',
  },
};
const targetDict: Dictionary = {
  a: {
    b: 'you are b',
  },
  h: 'you are h',
};
const include: NSPath = ['a', ['b'], 'e'];
const exclude: NSPath = ['e', ['f']];

const extractedDictionary = extractDictionary(targetDict, fallbackDict, include, exclude);
// {
//   'a': {
//     'b': 'you are b'
//   },
//   'e': {
//     'g': 'i am g' // fallback
//   }
// }

Configuration

Property Type Default Description
targetDict Dictionary null original target(current) locale dictionary
fallbackDict Dictionary null the extractedDictionary is based on fallbackDict, fill subtrees/leaves with keys/values if exist in targetDict, normally we provide an en dictionary
include NSPath | Trie null extractedDictionary only include given paths
exclude NSPath | Trie null ignore paths which within in include
logger (path: string) => void undefined log missing keys/values in targetDict

extractDictionaryFs

Interface

type Configs = {
  localePath: string;
  locale: string;
  basicLocale?: string;
  ns: {
    include: NSPath;
    exclude?: NSPath;
  };
  reader?: Reader<Dictionary>;
};
const extractDictionaryFs = (configs: Configs) => Dictionary;

Usage

// auto detect locale files:
// 1. if [localePath]/[locale] exist, merge [localePath]/[locale]/*.json, each json name is namespace.
// 2. if [localePath]/[locale].json exist, just using it.
// 3. otherwise return {}(empty Dictionary).
const extractedDictionary = extractDictionaryFs({
  localePath: '/',
  locale: 'fr',
  basicLocale: 'en',
  ns: {
    include: ['a', ['b'], 'e'],
    exclude: ['e', ['f']],
  },
});

Configuration

Property Type Default Description
localePath string null absolute path of locale directory
locale string null locale, should same as locale file name
basicLocale string undefined fallback locale, should same as fallback locale file name
ns { include: NSPath, exclude?: NSPath } null include and exclude

Extend custom generator

const getDictFromRemote = (locale: string) => Promise<Dictionary>;
const customExtractDictionary = async () => {
  return extractDictionary(await getDictFromRemote('fr'), await getDictFromRemote('en'), ['a'], ['a', ['b', 'c']]);
};

License

License: MIT

Package Sidebar

Install

npm i @ts-intl/dictionary

Weekly Downloads

48

Version

1.1.0

License

MIT

Unpacked Size

37.4 kB

Total Files

46

Last publish

Collaborators

  • hakonleung