- 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-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
supportstypescript
andjavascript
(includingtsx
andjsx
) source files andjson
translation 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
,cjs
ormjs
file and with any name you want. Just make sure to pass the path of the config file toi18n-validate
using--config
option.
/**
* @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
,json5
translation files - Add support for other framework specific source files (e.g.
vue
,svelte
,angular
etc.) - Detect unused translation keys
- A vscode extension
- A github action
- An eslint plugin
- A
--fix
flag to remove unused keys and variables
Any help to complete these tasks will be highly appreciated.
Thanks goes to these wonderful people: