---
title: "What is pseudo-localization and how do I use it?"
description: "Pseudo-localization runs your app with source strings transformed to look translated (accented letters, 30 to 50 percent longer, bracketed, optionally right-to-left) while placeholders stay intact. It exposes hard-coded strings, concatenation and truncation before any real translation exists."
category: general
date: 2026-10-09
canonical: https://localizely.com/i18n-questions/general/what-is-pseudo-localization-and-how-do-i-use-it/
---

# 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](https://developer.android.com/guide/topics/resources/pseudolocales).

```groovy
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](https://developer.apple.com/documentation/xcode/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:

```js
import { pseudoLocalizeString } from "pseudo-localization";

pseudoLocalizeString("hello");                       // "ħḗḗŀŀǿǿ"
pseudoLocalizeString("hello", { strategy: "bidi" }); // "oʅʅǝɥ"
```

```js
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.

Source: https://localizely.com/i18n-questions/general/what-is-pseudo-localization-and-how-do-i-use-it/
