This package helps to transform resources to be used in a typesafe i18next project.
Source can be loaded via npm.
# npm package
$ npm install -D i18next-resources-for-tsimport { tocForResources } from 'i18next-resources-for-ts'
const nsA = {
name: 'nsA',
path: '/some/path/locales/en/nsA.json'
}
const nsB = {
name: 'nsB',
path: '/some/path/locales/en/nsB.json'
}
const toc = tocForResources([nsA, nsB], '/some/path')
// import nsA from './locales/en/nsA.json';
// import nsB from './locales/en/nsB.json';
//
// const resources = {
// nsA,
// nsB
// };
//
// export default resources;import { mergeResources } from 'i18next-resources-for-ts'
const nsA = {
name: 'nsA',
resources: {
k1: 'v1',
k2: 'v2',
k3: {
d3: 'v3'
}
}
}
const nsB = {
name: 'nsB',
resources: {
k21: 'v21',
k22: 'v22',
k23: {
d23: 'v23'
}
}
}
const merged = mergeResources([nsA, nsB])
// {
// nsA: {
// k1: 'v1',
// k2: 'v2',
// k3: {
// d3: 'v3'
// }
// },
// nsB: {
// k21: 'v21',
// k22: 'v22',
// k23: {
// d23: 'v23'
// }
// }
// }import { mergeResourcesAsInterface } from 'i18next-resources-for-ts'
const nsA = {
name: 'nsA',
resources: {
k1: 'v1',
k2: 'v2',
k3: {
d3: 'v3'
}
}
}
const nsB = {
name: 'nsB',
resources: {
k21: 'v21',
k22: 'v22',
k23: {
d23: 'v23'
}
}
}
// you can optionaly provide a second argument, with options:
// { optimize: boolean } - if true (false is default) it will optimize the interface, to be `enableSelector: "optimize"` compatible (see TypeScript i18next docs)
const definition = mergeResourcesAsInterface([nsA, nsB])
// interface Resources {
// nsA: {
// k1: 'v1',
// k2: 'v2',
// k3: {
// d3: 'v3'
// }
// },
// nsB: {
// k21: 'v21',
// k22: 'v22',
// k23: {
// d23: 'v23'
// }
// }
// }
// export default Resources;# use it with npx
npx i18next-resources-for-ts subcommand -i /Users/user/my/input -o /Users/user/my/output
# or install it globally
npm install i18next-resources-for-ts -g
# subcommand is either toc or merge or interface
# -i is the input path
# -o is the output path
# if the output path is not provided, it will use the input path as base path for the result file
# when using `interface`, you can also set:
# --optimize will make the output compatible with `enableSelector: "optimize"` (see TypeScript i18next docs)
i18next-resources-for-ts toc -i /Users/user/my/input -o /Users/user/my/output.ts
i18next-resources-for-ts interface -i /Users/user/my/input -o /Users/user/my/output.d.ts
i18next-resources-for-ts merge -i /Users/user/my/input -o /Users/user/my/output.json
# i18next-resources-for-ts toc /Users/user/my/input -o /Users/user/my/output
# i18next-resources-for-ts toc -o /Users/user/my/output
# i18next-resources-for-ts toc -i /Users/user/my/input
# i18next-resources-for-ts toc
#
# toc accepts also the optional -cts argument that will automatically convert json to ts files and the optional -d argument that will delete the original json files
# toc and interface accepts also the optional -c argument, that will add a file-level comment on the output file (i.e. -c "This file is generated by i18next-resources-for-ts")The CLI supports a watch mode that regenerates the requested output when translation files change. Use -w or --watch with toc, merge or interface.
Make sure your folder structure contains all relevant namespaces (in your source/reference language):
└── namespace.jsonor
└── namespace.ymlor
└── namespace.yamli.e.
├── translation.json
└── common.jsonor
├── translation.yml
└── common.ymlor
├── translation.yaml
└── common.yamlFrom the creators of i18next: localization as a service - locize.com
A translation management system built around the i18next ecosystem - locize.com.
With using locize you directly support the future of i18next.
