@t18n/unused-strings v0.0.1
Provides a script and tsserver plugin for detecting unused localization strings - this can help detect mistakes (e.g. copy paste errors may leave certain keys unused) or to find places where UI used to exist but has been removed and the strings can be cleaned up, reducing the bundle size and the cost to translate the codebase into new languages.
Typescript Language Service plugin
To see the unused strings highlighted in your editor, you can use this package as a Typescript Language Service plugin:
- Install this package
- Add a plugins config (or add this package to an existing config)
// tsconfig.json
{
"compilerOptions": { /*...*/ }
"plugins": [{ "name": "@t18n/unused-strings" }]
}
- You'll need to make sure your editor is using the workspace-local copy of Typescript: VSCode, for example, by default uses its own internal copy of typescript, which won't have the plugin installed. VSCode docs for using the workspace version instead
Manual CLI script
This package also installs a t18n-unused-strings
script which can be run to check the entire codebase. This can be setup as part of a CI task or git hook
Options
-p
/--project
path to tsconfig - defaults totsconfig.json
in the local directory--silent
- disables any output other than reporting the unused strings (by default the output includes a count of how many strings were checked and how many unused strings were found)--no-color
- disables colored output (may be a good idea for CI builds)
Caveats / Ignoring
This detects whether localization keys have been used based on TS's reference tracking - it's the equivalent of using VSCode's "find references" on each string in each localization file. This works the most common usages but will fail to find cases where the localization string is only used by it's string path - e.g. renderString("foo.bar.baz")
- and dynamic lookup patterns - e.g. t.someObject[someDynamicKey]
.
For these sort of cases, you can add // t18n-ignore-unused
comments above a string (or an entire sub-object of strings) to ignore those strings from the checking
5 months ago