Check Locale JSON and XLIFF: Missing Copy, Placeholders and RTL Review
Find missing translations and named-argument mismatches, inspect labeled source fallback and RTL previews, then rebuild JSON and XLIFF from the edited project without a translation API.
Fastest way
Ask your AI to do it
Paste this into the AI agent you already use:
Use Localization QA Studio to review my approved locale catalogs. Preserve stable keys, facts and exact named placeholders. Distinguish missing translation from labeled source fallback, inspect RTL and expanded previews, and leave unsupported framework formats for actual runtime checks. Apply reviewed edits, download the edited project and rebuild JSON, XLIFF and findings into a new folder. Verify exact exported values and record remaining language and layout review. Do not call translation APIs, upload to a TMS or publish the app.
What does Localization QA Studio validate?
Localization QA Studio v1.0.0 reviews nested string catalogs and simple named placeholders such as {name}. It creates an editable review room, locale JSON, XLIFF 2.0 handoffs, findings and expanded pseudo copy. The package costs USD 4.99 individually; its Python 3.10+ standard-library builder runs offline without a translation API, TMS account or dependency installation.
It does not translate automatically or certify language quality. Plural objects, ICU syntax, escaped literal braces and framework-specific formats need the actual framework’s tools and review. A preview reproduces the supplied screen-key order, not your application’s complete layout or routing.
Keep the application’s keys, facts and message formats
Identify the source locale, intended audiences, framework and approved product terminology. Include navigation, validation, empty/loading states, accessibility labels, account controls and download messages in the actual app review. The local project accepts 2–12 locale objects and 1–12 screen groups; catalogs contain nested string leaves rather than arrays or plural objects. Read references/input.md before adapting a catalog.
Message paths use JSON Pointer escaping. Stable technical keys are not prose to translate. A supported named argument must retain the exact name; placement can change with grammar. Repeated names are compared as a set, so correct repetition and final runtime formatting still need review.
Run the four-locale example and inspect the three findings
Run the following in the complete installed package with a fresh output directory, then open language-room/index.html. The fictional Atlas project contains 13 English source messages, Chinese, German and Arabic target fixtures, and four screen previews. The three initial findings have different meanings; they are not three failed translations or a language-quality score.
| Locale and key | Finding | Review action |
|---|---|---|
| zh-CN · /hero/action | Missing target entry | Review and supply the CTA; source fallback is not a translation |
| de · /trip/body | Missing {name} argument | Restore the exact named argument in reviewed German copy |
| de · /hero/action | Character-budget warning | Inspect actual fit before deciding whether to shorten |
python3 scripts/build-localization.py --input examples/project.json --output ./language-roomApply an edit and distinguish it from source fallback
Select Chinese and the /hero/action message. The preview initially shows the English CTA with SOURCE FALLBACK. Supply reviewed target copy and choose Apply edit. For practice, “发现下一段旅程” is an authored candidate, not a certified translation. The current preview and selected-locale JSON should now contain the supplied target value; do not copy a fallback into a catalog and call it completed translation.
Select German and /trip/body, then review a correction preserving {name}, such as the candidate below. The placeholder error clears when the exact supported argument set matches. The separate length warning for /hero/action can remain; do not erase a useful word only to make the issue count zero. Structural validity does not establish linguistic correctness.
Hallo {name}, deine Reisenotizen sind bereit.Use RTL and expanded copy as layout probes
Select Arabic and inspect the actual right-to-left preview, message order and each of the four screens. Try message search and Expanded preview. Expanded copy preserves source placeholders while stretching the text; it is not another language or a translation. A character budget counts Unicode code points, not the width of rendered glyphs.
In the target application, review narrow reflow, 200% text zoom, fonts, logical spacing, focus order and mixed-direction values. Test locale-aware dates, numbers, currencies, plural branches, page titles and locale routing with the framework that will actually ship. The review-room mockup cannot prove those integration results.
Review control names and source accessibility as a separate worklist
Rebuild the implementation files from the edited project
Download edited-project.json and run the next command into a new directory. The live selected-locale JSON download reflects in-memory edits, but static Original report, XLIFF and other generated links still describe the original build until you regenerate. Keep both deliveries so a reviewer can compare them.
- Compare the edited nested JSON with messages/zh-CN.json and messages/de.json. Parse the target .xlf files and check the source/target language and corresponding unit. A missing target stays absent in JSON and has no target in XLIFF; it is not silently filled with English.
- Recheck report.json and findings.csv, the pseudo/en-XA.json placeholders and delivery-manifest.json hashes. After fixing only the two fixture errors, the independent German length warning remains a rendered-fit review task.
python3 scripts/build-localization.py --input edited-project.json --output ./language-room-revisedDeliver reviewed catalogs without claiming a completed app integration
Deliver the edited project, nested locale JSON, per-target XLIFF 2.0, report, findings, pseudo catalog, handoff notes and manifest. Record language-review status, terminology decisions and unsupported formats. Existing output folders are protected. Integrating into a framework, uploading to a TMS, sending a newsletter and publishing public pages are separate actions.
Review translated lifecycle email copy with the actual journey
Inspect the final public website after integrating reviewed copy