i18n Translation File Diff
Compares two i18n JSON files and reports missing, extra and empty keys plus placeholder mismatches between the two locales.
Coverage
JSON skeleton for the missing keys
What breaks a locale file
A missing key usually shows the raw path on screen, which is ugly but obvious. The quiet failure is the placeholder that changed: if the reference says "Hi {name}" and the translation says "Olá", the interpolation argument is silently dropped and nobody notices until a user asks who the message was addressed to.
Nesting matters too. When one file has menu as an object and the other has menu as a string, most i18n libraries return the object and print [object Object]. That case shows up here as a structure conflict instead of a missing key, because renaming the key is rarely the right fix.
Find what is missing in a locale file
You spent the week editing pt.json and now need to know what en.json still lacks before the deploy. Paste both files and the comparison comes back split into sections: missing keys, extra keys, blank values and a coverage bar in percent. At the end there is a JSON skeleton of the missing keys alone, with the same nested shape and empty values, ready to paste into the other locale file.
Both files are flattened into dot paths before anything is compared, so menu.file.open and items.0 become plain keys and nesting stops getting in the way. On top of that comes the placeholder check, which understands the common formats at once: {name}, {{name}}, {0}, %s, %d, %1$s, ${name}, :name, the numbered Trans tags and the variable name inside ICU plural and select blocks.
The failure that slips through is not the missing key, which usually prints the raw path on screen. It is the placeholder that vanished in translation: if the reference says Hi {name} and the translation says Olá, the argument is dropped in silence. Watch the structure conflicts too, where menu is an object on one side and a string on the other — libraries tend to return the object and the interface shows [object Object].
Frequently asked questions
Does the comparison handle nested files?
What counts as an empty value?
Why did a key show up as possibly untranslated?
Related Tools
JSON Comparator
Compare two JSON objects and visualize differences side by side: added, removed and changed fields. Supports nested structures. Processed in your browser.
JSON Size Analyzer
Analyzes a JSON payload and shows how many bytes each key takes, sorted by weight, with percentage of total and the full path per node.
JSON ↔ CSV Converter
Convert data between JSON (array of objects) and CSV bidirectionally. Paste and convert instantly in the browser, no file upload needed.