Guide

Pseudo-localization: see what breaks before you pay for translation.

Pseudo-localization replaces every string with a longer imitation in accented or foreign characters, then runs the application in it. In a few minutes it shows text left in the code, labels that will be cut off, and characters the application cannot display. This page explains what to look for and how to run the test on a Windows application.

Pseudo Translate German Simulation · +30% Chinese Simulation Harbor Supply 12 Saved at 10:42 Orders ÖrderßÖ ?????? Customer: Cüßtömer:Cü 阿昂俩拉基豪拉恶: Quantity: Qüäntity:Qü 阿昂阿拉拉哈拉哟: Ship today Ship tödäyShi 俩色哈勒 拉基俄阿哟 Create Cancel CreäteC CäncelC 阿恶拉阿拉拉 阿阿拉阿拉瑟 Too long Still in English Not displayed Pseudo Translate German Simulation · +30% Chinese Simulation Harbor Supply 12 Saved at 10:42 Orders ÖrderßÖ ?????? Customer: Cüßtömer:Cü 阿昂俩拉基豪拉恶: Quantity: Qüäntity:Qü 阿昂阿拉拉哈拉哟: Ship today Ship tödäyShi 俩色哈勒 拉基俄阿哟 Create Cancel CreäteC CäncelC 阿恶拉阿拉拉 阿阿拉阿拉瑟 Too long Still in English Not displayed
Also called
Pseudo-translation, pseudolocalization
When
Before the first translation, and after UI changes
Needs
The application's resources, no translators
Result
A build you can run and inspect
On this page

A fake language that is still readable.

Each string keeps its meaning for the tester but looks and behaves like a translation: letters from other alphabets, extra length, and markers at both ends.

Save changes?          →  [Šàvé çhàñgéš? Šàvé]
Cancel                 →  [Çàñçél Çà]
%d files deleted.      →  [%d fíléš délétéd. %d fí]
  • Accented letters stay readable, so testers can still find their way through the application.
  • Extra length imitates a language that runs longer than English.
  • Markers at both ends show where a string ends, so cut-off text stands out.
  • Placeholders stay intact, so the application still runs: %d remains %d.

What the pseudo-localized application shows.

Walk through every window and message. Each of these is cheaper to fix now than after translation, when it would be found once per language.

What you see, what it means, and what to do
You seeIt meansFix
Plain English textThe string is in the code, not in the resourcesMove it to resources; Lingobit Extractor does this for C++, C#, VB.NET, Delphi, and Java
The end marker is missingThe control is too small for a longer translationMake the control larger or let the layout grow
Two pseudo strings side by sideA sentence is glued together from piecesOne resource string with placeholders
Boxes or question marksThe application or its font cannot show those charactersBuild for Unicode; use a font that covers the language
A crash or wrong valuesThe code depends on the text, or a placeholder brokeRun Validation; Crash Finder narrows it to the string (Enterprise)
A file or command stops workingA string the program uses as data was translatedLock that string so it is never translated

How much longer, and which characters.

Set the length to the languages you plan. Short strings grow the most: a label of up to ten characters can need two to three times its English length in a European language, long sentences about a third more.

English textLength after translationUp to 10 characters200–300%11–20 characters180–200%21–30 characters160–180%31–50 characters140–160%51–70 characters151–170%Over 70 characters130%English Length after translationby the length of the English textUp to 10 characters200–300%11–20 characters180–200%21–30 characters160–180%31–50 characters140–160%51–70 characters151–170%Over 70 characters130%English

Figures: average length of translations from English into European languages, published by IBM and quoted by W3C in Text size in translation.

  • Characters: pick the script of your hardest target language. Accented Latin catches less than Cyrillic, Greek, or CJK characters.
  • One pass per script if you plan both European and Asian languages: length and character problems show up separately.

With Lingobit

Pseudo-localize a compiled application.

Lingobit Localizer pseudo-translates the resources of the compiled application, so the test needs no change to your build. Pseudo Translate is in Professional and higher.

ProjectMyApp.exeDEFRPseudo TranslateSourceGermanNew OrderNew ÖrderNeCustomer:Cüßtömer:CüQuantity:Qüäntity:QüShip todayShip tödäyShiPrint receiptPrint receiptPriCreateCreäteCCancelCäncelCNew OrderCustomer:Quantity:Ship todayPrint receiptCreateCancelNew ÖrderNeCüßtömer:CüQüäntity:QüShip tödäyShiPrint receiptPriCreäteCCäncelCPseudo Translate ExpertSimulate translationGerman SimulationExpansion30%Sample textSämple textSämOKCancel ProjectMyApp.exeDEFRSourceGermanPseudo TranslateNew OrderNew ÖrderNeCustomer:Cüßtömer:CüShip todayShip tödäyShiPrint receiptPrint receiptPriCreateCreäteCPseudo Translate ExpertSimulate translationGerman SimulationExpansion30%Sample textSämple textSämOKCancel
  1. Add the build EXE and DLL files, .NET assemblies, or resource files to a project, with a test language.
  2. Pseudo Translate with a predefined character set such as German Simulation, or your own; Expand text by 0–100%; optional characters before and after each string.
  3. Create Localized Files writes the pseudo-localized application next to the original.
  4. Run Localized Application and walk through every window.
  • Safe for the code: printf format specifiers, \ escapes, and <…> tags are left unchanged.
  • Kept apart from real translations: pseudo strings get the Auto status, and translators' work replaces them later.
  • Fix layouts on the spot: resize controls in the visual editor where the pseudo text does not fit.
  • In the build: the command line can pseudo-translate and create the files for every nightly build.

Localizability testing: pseudo-localization is one part.

Localizability testing checks whether the application can be localized without code changes. Pseudo-localization covers most of it; a few checks need the real application and real data.

  • All text in resources: no plain English in the pseudo-localized build.
  • Layout: every end marker visible in every window and message.
  • Characters: input, display, file names, and printing work with the target script.
  • Locale formats: dates, numbers, and sorting follow the Windows locale, tested by switching it.
  • Data strings locked: registry keys, file names, and commands work after translation.
  • Language loading: the application picks the right language at startup, and falls back cleanly.

After real translation, localization testing repeats the run with each language. Lingobit's Validation checks placeholders, hotkeys, and cut-off text in dialogs before that run.

Questions.

Is pseudo-localization the same as machine translation?

No. Pseudo text is not meant to be read by users; it imitates the look and length of a translation so the application can be tested. Machine translation produces real text for a first pass that people then review.

Can I pseudo-localize without source code?

Yes, for the resources in compiled Windows applications and .NET assemblies. Text that lives in the source code stays in English in the result, and that is exactly what the test should reveal.

How often should we run it?

Once before the first translation, and again whenever new windows or messages are added. Running it in a nightly build catches new hard-coded text before a release.

Is there a pseudo-localization tool for Windows applications?

Pseudo Translate in Lingobit Localizer (Professional and higher) fills a test language with simulated characters and longer text for the compiled EXE and DLL files or the resource files of your application; Create Localized Files then writes the test build. Windows also has pseudo-locales, such as qps-ploc, for testing how the application formats dates and numbers; they do not change the text of your UI.