Skip to content
Localization Planner

Free tool for SaaS developers · no sign-up

Translation JSON Checker: Compare i18n Files and Find Missing Keys

A translation JSON validator that compares your source file with a translated file. It works as an i18n JSON checker and a missing translation keys checker: it finds missing and extra keys, placeholder mismatches and syntax errors, even in nested JSON.

Private by design. Your JSON is checked in your browser and is never uploaded or stored. Limit: 1,000,000 characters per file.

0 / 1,000,000 characters
0 / 1,000,000 characters
Checks

Missing/extra keys, placeholders, duplicate keys and syntax are always checked.

What the checker finds

  • Missing keys: present in the source but absent from the translation, including nested keys and array items.
  • Extra keys: present only in the translation, often left over after a key was renamed or removed.
  • Placeholder mismatches: variables that are missing, added or repeated a different number of times.
  • Tag mismatches: HTML or component tags such as <b> that do not match the source (optional).
  • Type mismatches: a string in the source that is an object or array in the translation, and the reverse.
  • Empty translations and, optionally, strings identical to the source.
  • Duplicate keys inside one file, which most parsers silently overwrite.
  • Syntax errors with the line, column and a short explanation, such as a trailing comma or single quotes.

Supported placeholder formats

The checker recognizes ICU message arguments ({name}, {count, plural, ...}), i18next ({{name}}), printf style (%s, %d, %1$s), Rails (%{name}), Python (%(name)s) and template strings (${name}). Because ICU plural branch labels vary by language, only argument names are compared. For details on plural handling, see the Unicode CLDR plural rules.

How to use it

  1. Paste your source language file, or load it from your computer. Files are read locally.
  2. Paste or load the translated file for one language.
  3. Choose which optional checks to run, then press Check translations.
  4. Fix the errors first, then warnings. Copy the report or download it as text or JSON to share with a translator or attach to a pull request.

Privacy and limits

The check runs entirely in your browser. Your JSON is never uploaded, logged or stored, and results are rendered as plain text. To keep the page responsive the tool accepts up to 1,000,000 characters per file and 50,000 keys. Our analytics only count how often the check button is pressed; see the privacy policy.

Keep translation files in sync automatically

A manual check is useful before a release, but missing keys keep appearing when files are edited by hand. A translation management system can upload source strings and download translations in CI so files stay aligned. The SimpleLocalize CLI and GitHub Actions guide shows a documented workflow, and our translation management systems comparison covers the alternatives. If you want to try it, start a SimpleLocalize project (affiliate link, new tab) and import one language first.

Affiliate link: we may earn a commission if you sign up, at no extra cost to you. This does not affect our rankings or recommendations.

Frequently asked questions

How do I check for missing translation keys?

Paste your source file (for example en.json) on the left and the translated file (for example de.json) on the right, then press Check translations. Keys that exist in the source but not in the translation are listed as errors, including keys inside nested objects and array items.

What counts as a placeholder mismatch?

A variable that appears in the source string but not in the translation, one that appears only in the translation, or one that appears a different number of times. Examples are {name}, {{count}}, %s, %1$d, %{user}, ${total} and, optionally, HTML or component tags such as <b> and <0>.

Does it understand ICU plurals?

It reads the argument names in ICU messages, including arguments nested inside plural and select branches. Branch labels such as one, few and other are not compared, because languages need different plural categories.

Is my JSON uploaded anywhere?

No. The check runs in your browser. The text you paste or load is never sent to a server and is not stored. We only count how often the check button is used, without any content.

Which files are supported?

Standard JSON with string values, nested objects and arrays, as used by i18next, next-intl, react-intl, vue-i18n and similar libraries. Comments and trailing commas are not valid JSON and are reported as syntax errors.

Why is there a size limit?

Checking happens on your device, so the tool accepts up to 1,000,000 characters per file and 50,000 keys to keep your browser responsive. Split larger files and check them in parts.

Related guides and tools

This page contains an affiliate link to SimpleLocalize. Affiliate relationships never affect checker results or our tool comparisons. See the About page.