Localizable.strings checker
Drop two or more .strings files and see what is missing, what is duplicated, what was never actually translated, and which lines will not parse. Nothing is uploaded — these are usually production files, and they stay in this page.
The duplicate-value rule
Two keys with the same English value are the bug that keeps coming back. A translator sees the same string twice, translates it twice, and gets two different results — or worse, a language that needs different words for the two contexts gets the same word for both and nobody notices until a native speaker complains. The check normalises case and trailing punctuation, because "Done" and "Done." are the same problem wearing a hat.
Identical is not the same as untranslated
A value that matches the base file usually means nobody got to it. Sometimes it is correct — a brand name, a unit, an abbreviation that stays put in every language. The tool flags them and leaves the judgement to you, because the alternative is either missing real gaps or nagging about every occurrence of OK.
Bad lines are reported, not swallowed
The .strings grammar is small but the edge cases are real: block comments, escaped quotes inside values, a missing semicolon, a smart quote pasted in from a spreadsheet. A parser that silently skips what it cannot read will tell you a file is fine when a key is quietly absent. Every line that does not parse is listed with its number, so you can go and look at it.
UTF-16 too
Xcode has written .strings files in UTF-16 for years, and plenty of repositories still contain them. Files are sniffed for a byte order mark and decoded accordingly, so a UTF-16 file does not arrive as a wall of null bytes and a hundred parse errors.
FAQ
Does it handle .xcstrings?
Not yet. The string catalogue is JSON with a different shape, and it deserves its own handling rather than a translation layer that half works.
Which file should be the base?
Whichever one is authoritative — usually the development language. Everything is compared against it, so a key missing from the base but present elsewhere is reported as extra rather than missing.
What counts as an issue?
A missing key, a duplicated value, a value identical to the base, or a line that will not parse. The count adds those up across every file.
Are my files uploaded?
No. They are read with the browser's file reader and compared here. That matters more than usual for this tool, because these are real product files.
Built by the GO AI team, who kept hitting this. All free tools