Skip to main content

Testing Your Android App's Readiness for International Audiences Without Translation

Google are serious about the global reach of Android. They place translation services front and center in the dev console for Android app publishing. They provide lint checks for localizability and internationalization issues. And they even have a single-line trick for enabling testing your app for localization:

pseudoLocalesEnabled true

Back in November of 2014, this setting was added under BuildType to tell aapt to inject pseudolocalized text into your build for the following two automatically generated fake locales: en-XA and ar-XB. This is documented in the Android Gradle plugin's DSL here. As you can see, the documentation is a little... "sparse". When I tried it out, it didn't look like it worked at first and I went so far as to open a bug because I couldn't find any directories where the new localized strings files were stored in my project and my app didn't appear to show any of the expected updated strings. It turns out I was wrong in my assumption about how it worked. And my app needs more work ;)

My friend Joe Rogers saw my post about this on Google+ and decided to look into it too but noticed in his app that once he set his device locale to en-XA, the updated strings appeared in an app he is working on so clearly my bug was misguided. So it made us curious where exactly Google's Android SDK team hid these changes. Kids, Android Studio's APK Analyzer is your friend! With it, Joe was able to quickly dig in and discover the strings file with the appropriate pseudolocalization in his APK which was proof positive that the files were dynamically generated during his build. However Google's engineers were clever enough to do this in temporary working files so that the gibberish translations do not end up in your project files and exposed to source control. 

For more information about how pseudolocalization works, check out Dan Lew's excellent post here. To keep up with all the changes to the developer tools so that you can use things like this setting, read the release notes for the tools here, and follow all the announcements from Xavier Durochet and his team on Google's Android Developer channel on YouTube and at Google I/O


Comments

Post a Comment

Popular posts from this blog

UiAutomator and Watchers: Adding Async Robustness to UI Automation

"I'm looking over your shoulder... only because I've got your back." ~ Stephen Colbert After my recent UiAutomator review a user brought up an important question about the use of UiWatcher. The watchers serve as async guardians of the test flow, making sure the odd dialog window doesn't completely frustrate your tests. Having a tool that automatically watches your back when you're focused on the functional flow of your tests is awesome. 100% pure awesomesauce. Since the API documentation on watchers is scant and the UI Testing tutorial on the Android dev guide doesn't cover their use in depth, I figured I should add a post here that goes over a simple scenario demonstrating how to use this fundamentally important UI automation tool. In my example code below, I'm using uiautomator to launch the API Demo app (meaning run this against an Emulator built in API level 17 - I used the Galaxy Nexus image included in the latest ADT and platform tools). ...

UiAutomator.jar: What happened when Android's JUnit and MonkeyRunner got drunk and hooked up

"Drunkenness does not create vice; it merely brings it into view" ~Seneca So Jelly Bean 4.2 landed with much fanfare and tucked in amongst the neat new OS and SDK features (hello, multi-user tablets!) was this little gem for testers: UiAutomator.jar. I have it on good authority that it snuck in amongst the updates in the preview tools and OS updates sometime around 4.1 with r3 of the platform. As a code-monkey of a tester, I was intrigued. One of the best ways Google can support developers struggling with platform fragmentation is to make their OS more testable so I hold high hopes with every release to see effort spent in that area. I have spent a couple days testing out the new UiAutomator API  and the best way I can think of describing it is that Android's JUnit and MonkeyRunner got drunk and had a code baby. Let me explain what I mean before that phrase sinks down into "mental image" territory. JUnit, for all its power and access to every interface, e...

Why Developers Shouldn't Perform Software Testing - A Rebuttal

Take a minute and read the following 2-pager entitled " Guest View: Why developers shouldn’t perform software testing ". Man, I tried to like this article because the author, Martin Mudge, clearly knows that businesses who undervalue quality by trying to eliminate testing through simply shuffling the traditional testing task to developers are making a huge mistake. Unfortunately he begins by making an assertion that testing overburdens a developer which at face value is complete nonsense. If you feel overburdened, it is a timeline issue and that is true no matter WHAT the nature of the tasking is.  So his assertion of “one the most important” contributing factors being overburdening the developers is massively flawed. It gets immediately worse from there because his second point is about time constraints.  Mr Mudge just gets so much wrong. What he really should be shooting down is the idea that testing, as a cost-center not as a task, can be eliminated by having your p...