Localizely logo
  • Home
  • Getting started
  • How it works
  • Pricing
  • FAQ
Sign up

I18n questions · Software localization

What is pseudo-localization and how do I use it? 

Pseudo-localization is a test technique: instead of translating your strings, you run the app in a generated fake locale whose text still reads as English but has the shape of a translation. A typical transform turns Save changes into something like [Šåvé çĥåñĝéš one two]. Accented characters replace Latin letters, padding makes the string 30 to 50 percent longer (German, French and Finnish regularly grow that much), markers at both ends show where a string starts and stops, and a right-to-left variant mirrors the text. A good pseudo-localizer leaves placeholders such as %1$s, {count} or %@ untouched so the app keeps working.

What it catches, long before translators are involved:

  • Hard-coded strings: anything still shown unaccented was never externalized.
  • Concatenation: a sentence assembled from pieces shows up as several bracketed fragments, which also means it cannot be reordered in other languages.
  • Truncation and clipping in labels, buttons and table columns sized for English.
  • Layout that does not mirror in right-to-left locales: icons, paddings, chevrons.

How to turn it on:

Android generates two pseudolocales, en-XA (accented, expanded, bracketed English) and ar-XB (right-to-left), when you enable them for a build type. Then pick the pseudolocale on the device under Settings, Languages, by moving it to the top. It needs Android 4.3 (API level 18) or newer with developer options enabled; see Test your app with pseudolocales.

android {
    buildTypes {
        debug {
            pseudoLocalesEnabled true
        }
    }
}

Xcode: choose Product > Scheme > Edit Scheme, select Run, open Options and pick an entry from the App Language menu (Testing localizations when running your app). The end of that list holds the pseudolanguages: Double-Length Pseudolanguage, Right-to-Left Pseudolanguage, Accented Pseudolanguage, Bounded String Pseudolanguage and Right-to-Left Pseudolanguage With Right-to-Left Strings. The same switches exist as launch arguments, for example -NSDoubleLocalizedStrings YES, and -NSShowNonLocalizedStrings YES flags strings that are not localized at all.

Web: the pseudo-localization npm package (3.1.3 at the time of writing) transforms strings and can rewrite the DOM on the fly, so you can wire it to an environment flag in development builds:

import { pseudoLocalizeString } from "pseudo-localization";

pseudoLocalizeString("hello");                       // "ħḗḗŀŀǿǿ"
pseudoLocalizeString("hello", { strategy: "bidi" }); // "oʅʅǝɥ"
import { PseudoLocalizeDom } from "pseudo-localization/dom";

const stop = new PseudoLocalizeDom().start(); // rewrites text nodes as they appear

Run it continuously, in the regular dev build or in CI screenshots, rather than once before release: the point is to find hard-coded strings and brittle layouts while they are still cheap to fix.

Published Oct 9, 2026 · Markdown version

Related software localization questions:

Localization workflow:

Learn how a localization workflow works
Localizely logo
About
Free tools
Boring stuff
  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • Compare
Newsletter
Copyrights 2026 © Localizely