i18n-validate
A cli tool to find invalid i18n keys, missing variables and many more.
Features
- Written In Typescript
- Offers CLI and API
- Full TypeScript & JavaScript support
- Framework agnostic
- Supports Pluralization
- Fully customizable
- Supports dynamic keys using typescript const types
Usage
npx i18n-validate
Usage: 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-validate
supports typescript
and javascript
(including tsx
and jsx
) source files and json
translation files only.
Ignoring function or file
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.
Dynamic keys
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
const d = `a:${b}`;
t(d);
const e = (`a:${b}`);
t(e);
Use with lint-staged
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": ["i18n-validate"]
}
}
Configuration
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
, cjs
or mjs
file and with any name you want. Just make sure to pass the path of the config file to i18n-validate
using --config
option.
module.exports = {
};
Buy me some doughnuts
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!
Contributors ✨
Thanks goes to these wonderful people: