Localization · testingPseudolocalization generator

Turns interface strings into recognisably «foreign» but readable ones: one pass reveals hardcoded strings, future overflow and truncation. Placeholders are never touched. Everything runs in your browser.

Your locale file never leaves the page — everything runs in your browser
01Strings02Result03What shows04Placeholders05Questions06Related
01

Interface strings

Level

Diacritics, 30 % expansion and square brackets at the edges. The main mode: catches overflow and truncation at once.

Expansion+30 %
02

Result

SourceResult
Settings[Ŝéţţîñĝŝ ᐊᐊ]
Save changes[Ŝáṽé çĥáñĝéŝ ᐊᐊᐊᐊ]
Welcome, {name}[Ŵéļçöɱé, {name} ᐊᐊᐊ]
Delete %d files?[Ðéļéţé %d ƒîļéŝ? ᐊᐊᐊᐊ]
You have {count, plural, one {# message} other {# messages}}[Ýöû ĥáṽé {count, plural, one {# message} other {# messages}} ᐊᐊᐊ]
Read the <a href="/help">documentation</a>[Ŕéáð ţĥé <a href="/help">ðöçûɱéñţáţîöñ</a> ᐊᐊᐊᐊᐊᐊᐊ]
Price: 1&nbsp;299 ₽[Þŕîçé: 1&nbsp;299 ₽ ᐊᐊᐊᐊ]
Before
178
After
226
Growth
+27 %
Lines
7
03

What one pass reveals

Hardcoded strings

Signal
Settings ← untransformed
Anything still in plain text does not pass through the localisation system. This finds what neither grep nor review catches: labels inside third-party components, error messages and hints baked into the code.

Future overflow

Length
+30 % · +60 %
The text is lengthened artificially so the container breaks early — before translation is even ordered. Thirty per cent covers a typical European language, sixty the hard case like German.

Truncation and concatenation

Borders
[ … ] ← markers
The start and end markers are gone — the string was either truncated by length or assembled from pieces. Both break on the first language with a different word order.

Encoding problems

Font
Ŝéţţîñĝŝ → ??????
Diacritics render as boxes or question marks — the font lacks the glyphs, or an encoding was lost along the way. On plain Latin without diacritics this is invisible.
04

Protected constructs

FormatExampleWhere it appears
{0}, {1}Файл {0} из {1}.NET, Java
{name}, {{count}}Привет, {name}i18next, Vue, Handlebars
ICU MessageFormat{count, plural, one {# файл} other {# файлов}}Full nesting support
%s, %d, %1$sНайдено %d совпаденийC, PHP, Python
%(name)sПривет, %(name)sPython
<b>, <a href=…>Читайте <a href="/help">справку</a>Markup inside strings
&nbsp;, &amp;1&nbsp;299 ₽HTML entities
[[link]]См. [[Главная]]Wiki markup

Parsing is done by tokenization: the string is split into protected and translatable parts before any substitution. A regex replace eventually eats the contents of a placeholder — and the locale file stops working.

05

Frequently asked questions

A technique that turns interface strings into a recognisably «foreign» but still readable form: «Settings» becomes «[!!! Ŝéţţîñĝŝ ᐊᐊᐊᐊ !!!]». One pass surfaces three things that otherwise appear only after translation comes back — hardcoded strings, containers that will overflow, and text that gets truncated or concatenated. Microsoft, Chrome and Firefox all use it as a standard step before shipping a localised build.

Updated

«» added to favorites