Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/imranbarbhuiya/i18n-validate
A cli tool to find invalid i18n keys, missing variables and many more.
https://github.com/imranbarbhuiya/i18n-validate
hacktoberfest
Last synced: about 4 hours ago
JSON representation
A cli tool to find invalid i18n keys, missing variables and many more.
- Host: GitHub
- URL: https://github.com/imranbarbhuiya/i18n-validate
- Owner: imranbarbhuiya
- License: mit
- Created: 2023-07-15T07:02:24.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-29T17:02:36.000Z (17 days ago)
- Last Synced: 2024-10-29T18:29:28.969Z (17 days ago)
- Topics: hacktoberfest
- Language: TypeScript
- Homepage:
- Size: 7.66 MB
- Stars: 10
- Watchers: 2
- Forks: 1
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# i18n-validate
**A cli tool to find invalid i18n keys, missing variables and many more.**
## Packages
[![npm](https://img.shields.io/npm/v/i18n-validate?color=crimson&logo=npm&style=flat-square)](https://www.npmjs.com/package/i18n-validate)
[![npm-i18n-validate](https://img.shields.io/npm/dw/i18n-validate)](https://www.npmjs.com/package/i18n-validate)## 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
```sh
npx i18n-validate
``````sh
Usage: cli [options]Options:
-V, --version output the version number
-c, --config Path to the config file (default:
"./i18n-validate.json")
--log-level Log level
--exclude Exclude files from parsing
--exit-on-error Exit immediately if an error is found
-h, --help display help for commandExamples:
$ 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
```ts
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
```js
/**
* @type {'a:key5' | 'a:key6'}
*/
const d = `a:${b}`;t(d);
const e = /** @type {'a:key7' | 'a:key8'} */ (`a:${b}`);
t(e);
```### Use with lint-staged
```json
{
"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.
```json
{
"$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.
```js
/**
* @type {import('i18n-validate').Options}
*/
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!
## TODO
- [ ] 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._
## Contributors ✨
Thanks goes to these wonderful people: