i18n JSON Validator - find missing translation keys | POLPROG Skip to content

i18n JSON Validator BETA

Validate your localization files and catch missing keys, inconsistencies and potential issues before release.

Free to use No registration Privacy-first
Files are validated on our servers and never stored or shared.
Supported structure
  • Flat JSON{ "key": "value" }
  • Nested JSON{ "key": { "nested": "value" } }
  • Placeholders{name}, %s, {{value}}
  • HTML tags<b>, <a>, <br> and more

Tip: Name your files with the language code (e.g. en.json, pl.json, de.json) for best results.

Files are validated on our servers. We do not store or share your data.
Use cases

When to validate locale files

Translation drift is silent: the app keeps rendering, just not what you wrote.

Before a release

Catch keys added in one language and never propagated, while the release is still yours to hold.

After a translation hand-off

Confirm that returned files kept every placeholder and every inline tag exactly as the base had them.

Merging two branches

Two people editing the same locale file usually produces duplicates and orphans. This names them.

Scope and limits

What this validator does, and what it will not do

It compares structure. It never rewrites, translates or judges the meaning of your copy.

A validator, not a translation service

Files are compared against a base file and reported on: missing and extra keys, type mismatches, placeholder and inline-tag differences, empty values and strings still identical to the base. No content is translated, suggested or stored, and the files are discarded as soon as the report is built. A string flagged as untranslated may be perfectly correct, as brand and technical terms often are.

Help

FAQ

The questions a validation report tends to raise.

How is the base file chosen?

By default the largest, most complete file in the set, since that is almost always the source language. Every other file is compared against it, so the base is 100% by definition.

What counts as a placeholder mismatch?

The tokens the runtime interpolates, such as {name} or %s, differ between the base string and the translation. That is a real defect: at best the value never appears, at worst the formatter throws.

Why is a key reported as untranslated?

Its value is byte-identical to the base. Often that is a brand name, a code sample or a unit, and it is correct. It is reported separately from hard errors for exactly that reason.

Are my files uploaded and kept?

They are sent to our server to be parsed and compared, then dropped. Nothing is written to disk, indexed or shared.