What the linter checks
The tool flattens both files to dot-notation keys and compares every target value against its source. Each finding has a severity so you can decide what blocks a release and what is only worth a look:
- Errors: missing keys, empty values, placeholder mismatches (
{name}, {{count}}, %s, %1$d, ${x}, %@), ICU messages that do not parse, and ICU arguments that differ between source and target. - Warnings: keys that exist only in the target file, HTML tags that were dropped or added, leading or trailing whitespace that differs from the source, and a different number of line breaks.
- Info: values identical to the source (often untranslated) and trailing punctuation that does not match.
Why placeholder mismatches matter
A translated string with a renamed placeholder does not fail at build time. It fails at runtime in one language, usually as raw {nam} text on screen or as a crash when a native formatter receives fewer arguments than the format string expects. Android %1$s and iOS %@ specifiers are the classic case: a missing argument throws at runtime and only in the affected locale. Catching this before merge is far cheaper than a bug report from a user in Germany.
ICU plural and select messages
ICU messages such as {count, plural, one {# item} other {# items}} are parsed with the same parser that FormatJS uses. Unbalanced braces, a missing other clause or a translator who changedcount to anzahl are reported as errors. Languages with more plural forms than English (Polish, Russian, Arabic) are allowed to add categories; the check compares argument names, not the list of plural cases.
Running the same checks continuously
This page is a one-off check that runs entirely in your browser. SimpleLocalize runs the same family of QA checks on every translation as it is edited or auto-translated, including placeholder, ICU, HTML, whitespace, length and glossary checks, and can flag problems in the editor or fail an export. Upload your files there when you want the checks to run every time, not just today.