i18n Key Sync

📄

Drop .json files here

or

Nothing leaves your browser

Compare translation files and find every missing i18n key

i18n Key Sync is a free, browser-based tool for auditing JSON localization files side by side. Load your locale files, and it flattens each one into dot-notation key paths, builds a union of every key across every file, and shows you a colour-coded matrix of what is present, blank, absent, or the wrong type. Then it fills the gaps and exports corrected files or merge-ready patches.

It is built for frontend and full-stack developers maintaining multi-language apps, localization managers tracking translation coverage, and QA engineers hunting the missing-string bugs that only appear in production. If you have ever shipped a screen where one locale silently rendered a raw key, this solves that specific problem.

Runs entirely offline

No upload, no account, no server. Your files never leave the tab, so unreleased copy stays private.

Missing keysEmpty valuesType mismatchesICU pluralsDuplicate stringsPatch exportCSV report
01

How to use i18n Key Sync

  1. 1

    Add your translation files

    Drag your locale files anywhere onto the page, or use the add button to pick them. Every file is read in your browser with the File API — nothing is uploaded, so you can safely run this against private product copy.

  2. 2

    Read the comparison matrix

    Each row is a key path in dot notation, each column is one of your files. Cells are colour-coded and labelled four ways: OK, Empty, Missing, or Type mismatch. The key column and header stay pinned while you scroll, so you never lose your place across a dozen locales.

  3. 3

    Narrow down to the real problems

    Search any part of a key path, or tap a status chip to show only rows where at least one file is missing, blank, or the wrong type. Click a column header to sort that locale's worst issues to the top.

  4. 4

    Inspect anything that looks wrong

    Click a cell to see its raw value and resolved type, with a copy button. Strings using ICU plural or select syntax are parsed and flagged when their case sets don't line up, or when the braces don't balance.

  5. 5

    Fill the gaps

    Choose a strategy — copy from a source-of-truth file, use the key path as placeholder text, or insert a [TODO] marker — then fill every missing key at once. The matrix updates instantly so you can confirm the result before exporting.

  6. 6

    Export what you actually need

    Download complete corrected files as properly nested JSON, or export a patch containing only the newly added keys so you can merge without overwriting existing translations. A CSV report of the whole matrix is there for sharing progress with people who don't read JSON.

02

What the four states mean

OK

Key exists with a real value

Empty

Key exists but the string is blank

Missing

Key path is absent from this file

Type

Resolves to a different type than the other files

Status is never carried by colour alone — every cell also shows an icon and a text label, so the matrix stays readable for colour-blind users and in screenshots.

03

Real-world situations it solves

Shipping a feature

A new screen landed in English only

You added forty keys under checkout.* last sprint and nobody backfilled the other locales. Filter to Missing, sort by the locale you care about, fill with [TODO] markers, then export patch files and hand them to your translators. Nothing existing gets clobbered.

Inherited codebase

Nobody knows how bad the drift is

Drop in every locale file you have. The completion percentages tell you in seconds whether German is at 94% or 38%, and the stats view gives you total unique keys and missing counts you can take straight into planning.

Silent bugs

A key exists but resolves to the wrong shape

Someone turned a string into a nested object in one locale only. That never shows up as missing, so it slips past most scripts — the Type mismatch state catches it because the tool compares resolved types across files, not just key presence.

Cleanup

The same sentence lives at five different keys

Duplicate detection groups key paths that share an identical string, which usually means a missed reuse or a copy-paste that was never re-translated. Fixing those shrinks your bundle and your translation bill.

04

Frequently asked questions

Are my translation files uploaded anywhere?

No. Parsing, comparison and export all happen in your browser using the File API. There are no API routes and no network calls, which is why this is safe for unreleased product copy under NDA.

How do I find missing translation keys across multiple JSON files?

Load every locale file at once. The tool builds a union of all key paths found in any file, then marks each key as present, empty, missing or type-mismatched per file. Turning on the Missing filter leaves you with exactly the keys that need work.

Will exporting overwrite my existing translations?

Only if you choose the full export. The patch export contains nothing but keys that were absent from that file, structured for merging into what you already have — it can't touch a translation that already exists.

Does it handle nested objects and arrays?

Yes. Nested objects flatten to dot notation like user.profile.title, and array items become indexed segments like items.0.label. On export the nesting and real arrays are rebuilt, so you never get flat dot-path keys in your output.

What happens if one of my files has a syntax error?

That file is reported inline with the parser's reason, and the other files still load and compare normally. A single malformed file never takes the whole comparison down.

Does it understand ICU plural and select messages?

It detects ICU syntax, extracts the top-level case keys, and flags unbalanced braces or case sets that differ across files. It deliberately treats the text inside each case as opaque, so your interpolations and markup are never rewritten.

How many files and keys can it handle?

The matrix is virtualised, so only visible rows are rendered. Thousands of keys across many locales stay responsive, and both axes scroll independently with the key column and header pinned.

Is it free to use?

Yes, free and unlimited, with no sign-up and no file-size account tier. Because everything runs locally there's no server cost to pass on.

Missing translation keys rarely break a build — they just quietly render a raw key path to a real user in a language you don't read. A two-minute audit before release is cheaper than the bug report that follows it.

UntangleTools Logo
UntangleTools Logo
UntangleTools Logo