The Problem with i18n JSON Files
Building a multi-lingual application using libraries like next-i18next, react-intl, or Vue I18n usually requires maintaining massive, deeply nested JSON files for each supported language. While your base file (e.g., en.json) is constantly updated by developers during feature work, the translation files (e.g., es.json, fr.json) often fall behind.
This results in "translation drift" — where your English interface shows new buttons and tooltips, but your Spanish interface either falls back to English, shows empty strings, or worse, crashes because a nested key is entirely missing.
Missing Keys
Paths that exist in your base file but are completely absent from the translation file. This is the most common cause of fallback text or UI errors.
Empty Values
Keys that exist in the target file, but their value is an empty string "". These occur when translators create placeholders but forget to finish the job.
Extra Bloat
Dead keys in the target file that no longer exist in the base file. Over time, this bloat increases your bundle size and confuses translators.
How Our Deep Comparison Algorithm Works
Standard text diff tools (like Git or basic diff checkers) are terrible at finding missing i18n keys because JSON keys can be arranged in any order. A simple diff will flag thousands of false positives just because the keys were sorted differently.
Our Localization Gap Finder bypasses this by recursively flattening your JSON structures into absolute dot-notation paths (e.g., common.buttons.submit). It then performs a strict set intersection analysis, entirely ignoring the physical order of the keys.
Copy as JSON Structure
When you click "Copy as JSON" on the missing keys, our tool automatically re-inflates the missing dot-notation paths back into a perfectly nested, valid JSON object with empty strings. You can drop this directly into your target translation file!