Localization Catalog Auditor
Compare nested JSON message catalogs in your browser. The auditor validates bounded ICU MessageFormat 1 patterns, reports key and argument differences, and checks locale-specific plural categories. An optional complete usage manifest supports evidence-backed unused-key review.
Key features
- Compare nested string keys using unambiguous JSON Pointer paths
- Reject duplicate decoded JSON keys and malformed ICU syntax
- Check missing/extra arguments and their formatting kinds
- Inspect select branches and locale-specific plural fallback from runtime Intl.PluralRules
- Mark unused keys only when an explicit complete usage list is supplied
- Download CSV or JSON issue reports without message text
How to use
- Paste or import two to six JSON catalogs and enter BCP 47 locale tags.
- Choose the base locale and optionally provide a complete list of used JSON Pointer paths.
- Run the audit to see parsing, key, ICU argument, select and plural findings.
- Review the exact locale and path for each issue, then export the report.
Use cases
- Review missing strings before a bilingual release
- Catch renamed ICU placeholders in translated messages
- Check plural fallback across English and Korean catalogs
- Audit unused keys against an explicit usage inventory
Frequently asked questions
Does this translate or upload messages?
No. Catalogs are processed in browser memory. It does not call a translation API, fetch remote files or submit message text.
How are unused keys determined?
Only when you supply a complete list of used JSON Pointer paths. Without that evidence, the auditor makes no unused-key claim. The list is your assertion of completeness, not an automatic source-code scan.
Does a missing plural category make the message invalid?
No. ICU requires an other branch. Other locale categories may fall back to it or be matched by an exact-number branch, so the category finding is informational.
Is this a full ICU MessageFormat implementation?
No. It validates a bounded MessageFormat 1 subset: plain arguments, number/date/time, nested plural/select/selectordinal, offsets and apostrophe quoting. Choice and MessageFormat 2 syntax are rejected.
What is exported?
Only locale tags, key counts, JSON Pointer paths and findings. Raw translated message text is omitted; path labels may still reveal information.
Privacy
JSON catalogs and usage paths stay in this browser tab. Reports omit message text. Only choose local files you are allowed to inspect.
Comments & questions