Mobile Pseudo-Loc Testing
Localization testing often happens near the end of the product development cycle, after features are done, UX are frozen, and localization has finished. By then, it is usually too late to make major design or code changes. The purpose of pseudo-localization is to find i18n issues early without the cost and delay of real localization. Specifically, pseudo-localization:
- replaces US-ASCII characters with accented versions to show encoding issues (garbled characters) and hardcoded strings (not accented).
- adds [brackets] around localizable strings to show concatenated (more than one pair of brackets) or truncated (missing brackets) strings.
- expands strings by 30% to 100% to show layout issues like clipping, wrapping, overlapping.
- renders UX right-to-left to expose rendering issues with RTL languages like Arabic or Hebrew.
Both iOS and Android provide pseudo-localization capabilities for developers to find i18n issues and develop automated i18n tests from the beginning. For iOS, see above subject screenshot, select Edit Scheme... of the run target on the of top left of the XCode window, click Options tab, select either Double Length Pseudolanguage or Right to Left Pseudolanguage from Application Language, check the "Show non-localized strings" Localization Debugging option, hit run, and all localizable string resources of the app will be duplicated, or all UIView's will be laid out right to left. iOS doesn't bracket strings or accent characters. For automated test, add or -AppleTextDirection YES launch argument in the Arguments pane of the scheme editor instead. More info at https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/TestingYourInternationalApp/TestingYourInternationalApp.html.
For Android, the emulator or Nexus devices provide two pseudo locales: from Settings > Language & Input > Language, select either English (XA) or (XB) ??????????, the Settings app will honor the pseudo locale:
For apps to use the pseudo locales for testing, set pseudoLocalesEnabled to true in build.gradle, something like: buildTypes { debug { pseudoLocalesEnabled True } }. For more info, see https://androidbycode.wordpress.com/2015/04/19/pseudo-localization-testing-in-android.