Localization Lab
Paste your en.json and get a real i18n audit — per-string expansion forecast, overflow flags and lint warnings, a pseudo-localised JSON to QA with, a machine-translation draft, and a live RTL preview at your tightest container.
Audit your own strings · pseudo-localise · machine-draft · RTL preview
Your tightest control (a button, chip, tab).
Audit — expansion forecast & lint
| Key | English | EN | → FR | Fit | Notes |
|---|---|---|---|---|---|
| nav.pricing | Pricing | 7 | ~13 | fits | — |
| nav.docs | Docs | 4 | ~8 | fits | — |
| hero.title | Ship products faster | 20 | ~34 | overflow | — |
| hero.subtitle | Everything your team needs to design, build and launch. | 55 | ~69 | overflow | — |
| plan.badge | Most popular | 12 | ~20 | tight | — |
| plan.cta | Start free trial | 16 | ~27 | overflow | — |
| plan.secondary | Compare plans | 13 | ~22 | tight | — |
| plan.note | No credit card required | 23 | ~35 | overflow | — |
| plan.seats | {count} seats included | 22 | ~33 | overflow |
|
Boxes are your tightest container (22ch). Red = the string is clipping there.
{
"nav": {
"pricing": "⟦Pŕïçïñğ ······⟧",
"docs": "⟦Dôçš ····⟧"
},
"hero": {
"title": "⟦Šhïp pŕôdüçţš fàšţéŕ ·············⟧",
"subtitle": "⟦Évéŕýţhïñğ ýôüŕ ţéàm ñéédš ţô déšïğñ, büïld àñd làüñçh. ·············⟧"
},
"plan": {
"badge": "⟦Môšţ pôpülàŕ ········⟧",
"cta": "⟦Šţàŕţ fŕéé ţŕïàl ··········⟧",
"secondary": "⟦Çômpàŕé plàñš ·········⟧",
"note": "⟦Ñô çŕédïţ çàŕd ŕéqüïŕéd ···········⟧",
"seats": "⟦{count} šéàţš ïñçlüdéd ··········⟧"
}
} —The draft uses machine translation — for Arabic it returns formal MSA, not Darija, and it mistranslates context (run “ship faster” to Arabic and you’ll often get شحن — cargo, not launch). It also mangles {placeholders}. Use it as a starting draft; the humanisation into how Moroccans actually speak is the real work — and where most localized products fall down.