Catch missing keys and changed placeholders
Translations breaking at runtime? Compare resource keys, placeholders and basic ICU message structure before release.
Translations breaking at runtime? Compare resource keys, placeholders and basic ICU message structure before release. Check locally in your browser. No upload. Jump to: What does it mean?, How to fix it, Break it, Ask your agent.
Example A synthetic French resource changes a placeholder and omits the Continue button.
3 comparison rows inspected. /welcome: Placeholder mismatch. 1 more finding to review.
Checks are lexical, not a full ICU parser or translation review. Plural-category requirements, PO locale plural formulas and XLIFF schema conformance are not validated.
Both resource files stay in your browser. Keys and placeholders are compared here and never uploaded.
Nothing is sent to our server. This tool has no server step.
Findings
Fail /welcome: Placeholder mismatch
Compare the source and translated resource. Placeholder checks are lexical; ICU validation is limited to balanced braces and an other branch.
Fail /button: Missing key
Compare the source and translated resource. Placeholder checks are lexical; ICU validation is limited to balanced braces and an other branch.
Info 3 source keys compared
Translation quality, locale-specific plural categories, ICU quoting and complete resource schema validation are outside this check. JSON duplicate keys follow JSON.parse last-value behavior.
Evidence
Source Hello {name} Target Bonjour {user} Notes Placeholder mismatch Fail /welcome: Placeholder mismatch
Compare the source and translated resource. Placeholder checks are lexical; ICU validation is limited to balanced braces and an other branch.
Source {count, plural, one {One item} other {# items}} Target {count, plural, one {Un article} other {# articles}} Notes None Source Continue Target Not checked Notes Missing key Fail /button: Missing key
Compare the source and translated resource. Placeholder checks are lexical; ICU validation is limited to balanced braces and an other branch.
Resource comparison
Show the resource comparison
[
{
"key": "/welcome",
"state": "fail",
"source": "Hello {name}",
"target": "Bonjour {user}",
"notes": [
"Placeholder mismatch"
]
},
{
"key": "/cart",
"state": "pass",
"source": "{count, plural, one {One item} other {# items}}",
"target": "{count, plural, one {Un article} other {# articles}}",
"notes": []
},
{
"key": "/button",
"state": "fail",
"source": "Continue",
"target": null,
"notes": [
"Missing key"
]
}
]Take it further
What this result means
Written for the example.
Ask for a review of the findings and a test that verifies the proposed fix. Input values are not included automatically.
A synthetic French resource changes a placeholder and omits the Continue button.
A synthetic French resource changes a placeholder and omits the Continue button.
Check representative input and one deliberate failure. Confirm the result in the application that consumes it.
Read the findings before changing the input. Break it lets you inspect a failure, and Heal it restores the previous input.
Checks are lexical, not a full ICU parser or translation review. Plural-category requirements, PO locale plural formulas and XLIFF schema conformance are not validated.
How it works
Locale File Checker reads source resource locally and presents findings with the evidence behind them. A synthetic French resource changes a placeholder and omits the Continue button. The full method, every rule and worked examples are on docs.tamperbox.dev.
Limits and interpretation
Checks are lexical, not a full ICU parser or translation review. Plural-category requirements, PO locale plural formulas and XLIFF schema conformance are not validated. Inputs are limited to 1,000,000 characters per field. Nothing is fetched from addresses embedded in input. Explicit copies and downloads are under your control.
Frequently asked questions
Is my input uploaded?
No. Parsing and output generation run in your browser. Source values are not sent to a server.
What does the opening example demonstrate?
A synthetic French resource changes a placeholder and omits the Continue button. It is synthetic data. Replace it with your own input to inspect a different case.
Does a passing result prove my application works?
No. Checks are lexical, not a full ICU parser or translation review. Plural-category requirements, PO locale plural formulas and XLIFF schema conformance are not validated. Verify the result in your test environment before relying on it.
References
Are you an AI agent? You are in the right place.
Read this tool as plain text with its methods and limits. Use the website interface; no dedicated MCP operation is available.