Localization QA · Guide
Pseudo-localization in Figma: a complete guide
Your design looks perfect in English. Then the German strings come back from translators, and half the buttons overflow. Pseudo-localization catches that months earlier — with fake translations you can generate today, right in Figma.
Updated July 2026 · 7 min read
TL;DR
- → Pseudo-localization replaces your copy with accented, padded, bracketed strings: “Continue” → “[Çóñţîñúé·····]”.
- → Each part of the fake string catches a different class of i18n bug — expansion, clipping, missed strings, font gaps.
- → Engineering teams (Microsoft, Netflix) have used it for decades — but it usually runs in code, after the design is “done”.
- → Running it at design time in Figma is the cheapest point to fix layout breaks: no rebuild, no re-translation, no bug tickets.
What is pseudo-localization?
Pseudo-localization (also “pseudo-loc” or a “pseudo-locale”) is a QA technique that transforms your source strings into fake “translations” that look foreign and behave like the worst-case real language — without waiting for translators. A typical transformation:
English
Save your changes
Pseudo-localized
[Šàvé ýóúŕ çhàñĝéš··········]
Every element of that ugly string is doing a job:
| Element | Example | Bug it catches |
|---|---|---|
| Accented characters | a → à, e → é, n → ñ | Fonts missing glyphs, encoding issues, clipped diacritics in tight line heights |
| Length padding | “·····” appended | Text expansion — German/Finnish strings run 20–35% longer, short labels up to 2–3× |
| Bracket markers | [ … ] | Truncation: if a bracket is missing on screen, the string got cut |
| Still readable | “Šàvé” ≈ “Save” | Testers can navigate the UI and spot hardcoded, untransformed strings instantly |
The technique is decades old on the engineering side — Microsoft ships pseudo-locales
(qps-ploc) inside Windows, and Netflix has written publicly
about pseudo-localizing its UIs to catch expansion bugs before translation.
For expansion numbers per language, see our
text-expansion cheat sheet.
Why run it at design time, not just in code?
In most teams pseudo-localization lives in the build pipeline — a compile flag QA engineers flip. That’s valuable, but it has a structural flaw: by the time pseudo-loc runs in a build, the design is already “done”. Every layout break it finds becomes a bug ticket, a design revision, a rebuild and a re-review. The feedback loop is weeks long.
- • In production: a broken German button costs a bug report, a translator round-trip, a hotfix.
- • In a staging build: it costs a ticket, a design change, a rebuild.
- • In Figma: it costs a drag of a resize handle. That’s the whole fix.
Designers are the only people who can fix layout flexibility before it hardens into code — but they’re the one group that classic pseudo-loc tooling never reaches. Bringing the simulation into Figma closes that gap.
Option 1 — pseudo-localize by hand
No tooling required, works today:
- Duplicate the frame you want to test (keep the original untouched).
- For every text layer, expand the string by the worst ratio you ship — a safe default is +35–50% for labels under 20 characters (pad with “·” or repeat the last word).
- Wrap each string in [ brackets ] so truncation is visible.
- Swap a few letters for accented versions (à, é, ñ) to stress fonts and line height.
- Scan the frame for overflow, clipped brackets, and squashed diacritics; fix containers, then delete the duplicate.
Honest assessment: this works for one screen and falls apart at ten. Manual padding is guesswork, you’ll miss layers, and nobody re-runs it after every copy change. Which is why it’s worth automating.
Option 2 — one-click pseudo-localization with LocaleProof
LocaleProof is a free Figma plugin that automates the whole loop — and, unlike manual pseudo-loc, it also measures the result instead of leaving you to spot damage by eye:
- Select the frames you want to test and run the plugin.
- Pick languages (de, fi, fr, ar, ja…) — it applies each language’s real-world expansion ratio, plus an adjustable length buffer, accented characters and bracket markers.
- Run check. Every text node is compared against its container; overflowing layers are flagged with the exact pixel overflow (e.g. “+17px”) in a clickable report — click a row, jump to the layer.
- Fix and restore. Adjust the flagged containers, then hit Restore — your original copy comes back in one click (originals are cached before any mutation).
It’s 100% client-side (networkAccess: none in the manifest) —
nothing leaves your Figma file. One honest v1 limit: it flags fixed-size and fill containers
(buttons, cards, table cells); auto-layout frames that hug their text grow instead of overflowing,
so give those a quick visual pass for layout shift.
What to look for after pseudo-localizing
- Horizontal overflow in fixed-width buttons, tabs, chips and table cells — the classic break (see how to find text overflow in Figma for detection methods).
- Missing brackets — a “[” without its “]” means the string is truncated somewhere.
- Clipped diacritics — accents cut off by tight
line-heightor fixed-height rows. - Layout shift in hugging frames — the frame didn’t overflow, but it grew and pushed siblings around. Is the new layout still acceptable?
- Untransformed text — plain-English strings inside a pseudo-localized screen are copy baked into images or components that translators will never receive.
- Wrapping decisions — for each flagged element, decide explicitly: wrap, truncate with tooltip, or widen. “It fits in English” is not a policy.
Where it fits in your workflow
The teams that get the most out of pseudo-loc treat it like spellcheck, not like an audit:
- • Before dev handoff — make it a design-review checklist item for any product shipping in 2+ languages (here’s our full i18n design QA checklist).
- • After major copy changes — new microcopy resets your worst case.
- • When defining components — pseudo-localize the component sheet once, and every instance inherits sane sizing.
Try pseudo-localization on your own file — free
LocaleProof pseudo-localizes your selection, simulates the longest language you ship, and flags every overflowing text layer with a clickable report and one-click restore. Free on Figma Community, 100% client-side.
FAQ
What does pseudo-localized text look like?
Accented, padded and bracketed, but still readable: “Continue” becomes something like “[Çóñţîñúé·····]”. The accents stress fonts, the padding simulates expansion, and the brackets expose truncation.
Is pseudo-localization the same as machine translation?
No. Machine translation gives you one plausible translation; pseudo-localization gives you the worst case — deliberately longer and more hostile than any real language, so a layout that survives it survives them all.
How much padding should pseudo-localization add?
It should scale with string length: short labels (under ~10 characters) can grow 100–200% in real translations, while paragraphs grow ~30%. Per-language ratios plus a buffer — the approach LocaleProof automates — beat a single flat percentage.
Do I still need real translations for QA?
Yes — pseudo-loc catches layout and rendering bugs, not linguistic ones. It removes the “does it fit?” class of bugs early, so your localization QA can focus on meaning, tone and RTL behavior.