# Localization QA 1.0.0 Find missing translations, damaged placeholders, whitespace changes and access-key defects in flat JSON language dictionaries. Includes local browser UI and CLI. Node 20+ only; no npm packages, cloud account, AI model or other product required. ## Start Extract the entire ZIP. Run `node app.mjs` and open the complete local URL printed in the terminal. Load the sample, edit or replace the JSON, run the check and download the full JSON report or findings CSV. Ctrl+C stops the local server. All data remains on your machine; there are no external network calls. Do not expose this local server on a public interface. For scripts: `node cli.mjs examples/input.json new-report.json` or `node cli.mjs examples/input.json new-findings.csv csv`. Existing outputs are refused. Exit 0 means report written, even with findings; exit 2 means invalid input or I/O failure. Check `summary.structuralPass` and the warning count in automation. ## Input and interpretation See examples/input.json. Source maps arbitrary resource IDs to source strings. Translations maps language labels to dictionaries with those same IDs. English-as-key input works by supplying the same English text as each source key and value. Nested objects and arrays are rejected; flatten them before input. Limits: 5 MiB, 50 target languages, 10000 keys per dictionary, 500-character keys and 20000-character values. Choose an explicit placeholder mode: `numbered` for `{0}`, `named` for `{name}`, or `none` for literal text without placeholder validation. Reordering is allowed, but names and occurrence counts must match. Double braces are literal escapes in named and numbered modes. ICU plurals/select expressions, .NET format specifiers, printf and template-language expressions are not supported and must not be treated as validated by this tool. Unsupported brace syntax produces a finding. Set `accessKeys` true for underscore accelerators, false for ordinary underscores. Two consecutive underscores represent one literal underscore and no accelerator. Leading/trailing whitespace must match exactly. Missing, empty, malformed and structurally different strings are errors. Extra keys and unchanged source strings are warnings requiring human review, since names and technical terms can legitimately remain unchanged. JSON preserves exact values; CSV guards formula-like cell prefixes. This tool does not generate or certify translations, check UI layout, or grant release approval. A structural pass can still contain warnings and incorrect translations. ## Verify Run `node --test tests/product.test.mjs`. Tests include CLI output and a temporary loopback HTTP input-to-report workflow. LICENSE permits local commercial use.