- Written In Typescript
- Offers CLI and API
- Full TypeScript & JavaScript support
- Framework agnostic
- Supports Pluralization
- Fully customizable
- Supports dynamic keys using typescript const types
npx i18n-validateUsage: cli [options] <file ...>
Options:
-V, --version output the version number
-c, --config <config> Path to the config file (default:
"./i18n-validate.json")
--log-level <logLevel> Log level
--exclude <exclude...> Exclude files from parsing
--exit-on-error Exit immediately if an error is found
-h, --help display help for command
Examples:
$ i18next-validate "/path/to/src/app.js"
$ i18next-validate --config i18n-validate-custom.json 'src/**/*.{js,jsx}'
$ i18next-validate --exclude "**/node_modules/**" "src/**/*.{js,jsx}"
Note: Currently,
i18n-validatesupportstypescriptandjavascript(includingtsxandjsx) source files andjsontranslation files only.
You can ignore a specific function by adding // i18n-validate-disable-next-line comment before the function call or ignore all the functions in a file by adding /* i18n-validate-disable */ comment at the top of the file.
For dynamic keys, we check the typescript type of the key. If the type is a const type, the type is used as the key. Otherwise, the key is ignored. Type can be an union type or a literal type.
For ts files
const a = 'namespace:key1';
t(a);
const b = `namespace:${b}` as const;
t(b);
t(`namespace:${b}` as const);
declare const c: 'namespace:key3' | 'namespace:key4';
t(c);For js files
/**
* @type {'a:key5' | 'a:key6'}
*/
const d = `a:${b}`;
t(d);
const e = /** @type {'a:key7' | 'a:key8'} */ (`a:${b}`);
t(e);{
"lint-staged": {
"*.{js,jsx,ts,tsx}": ["i18n-validate"]
}
}You can customize the behavior of i18n-validate by adding a i18n-validate.json file to the root of your project.
{
"$schema": "https://raw.githubusercontent.com/imranbarbhuiya/i18n-validate/main/.github/i18n-validate.schema.json"
}Note: You can also use
js,cjsormjsfile and with any name you want. Just make sure to pass the path of the config file toi18n-validateusing--configoption.
/**
* @type {import('i18n-validate').Options}
*/
module.exports = {
// ...
};If you want to support me by donating, you can do so by using any of the following methods. Thank you very much in advance!
- Write unit tests
- Add support for
yaml,json5translation files - Add support for other framework specific source files (e.g.
vue,svelte,angularetc.) - Detect unused translation keys
- A vscode extension
- A github action
- An eslint plugin
- A
--fixflag to remove unused keys and variables
Any help to complete these tasks will be highly appreciated.
Thanks goes to these wonderful people: