Googly Player's 17-language picker: Android localisation that doesn't fail silently
Seventeen languages chosen inside the app. The choice reaches notifications and dialogs as well as screens, and one App Bundle setting keeps the picker from quietly showing English.
Adding translations to an Android app is the easy part. The hard part is that localisation fails quietly. Build an App Bundle with language splits switched on and Google Play delivers only the resources for the phone's system language. A user who picks a different language in your in-app picker then gets English. Nothing crashes and nothing appears in the logs.
The other failures are just as quiet. A count built by gluing “Total Videos: ” to a number puts the number on the wrong side of the label in Arabic and Urdu. A single format string cannot express the six grammatical forms Arabic uses for a number, or the four that Russian uses. A language applied only to activities leaves services, notifications and dialogs speaking the old one.
Googly Player is our app for videos, music and photos. It offers 17 languages from an in-app picker that is entirely independent of the system language. Below is how we built that picker so none of those failures reach a user. It covers what the app does, and it shows how we approach multilingual Android work if you are deciding whether to bring it to us.
Key takeaways
- Googly Player's language picker covers 17 languages and is independent of the phone's system language. Each language is listed first by its own name in its own script.
- The choice is applied process-wide through AppCompatDelegate.setApplicationLocales, so services, notifications and dialogs follow it as well as screens.
- On Android 13 and later, the language choice also appears in the system's per-app language settings.
- Language splits are disabled in the App Bundle. Every translation ships in the base APK, so the picker can never fall back to English without telling anyone.
- Arabic and Urdu get full right-to-left support. Counts use format placeholders, and plurals use plural resources.
Seventeen languages, chosen inside the app
The picker lets someone run Googly Player in a language other than the one their phone is set to. That matters for a household sharing a device, or for anyone whose phone language is not the language they prefer to read. The full list:
- English, Hindi (हिन्दी), Spanish (Español), Arabic (العربية), French (Français), Bengali (বাংলা)
- Portuguese (Português), Russian (Русский), Urdu (اردو), Indonesian (Bahasa Indonesia), German (Deutsch), Japanese (日本語)
- Turkish (Türkçe), Vietnamese (Tiếng Việt), Korean (한국어), Italian (Italiano), Gujarati (ગુજરાતી)
The list spans several writing systems, including Latin, Devanagari, Arabic script, Bengali, Cyrillic, Japanese, Hangul and Gujarati. Two of the languages, Arabic and Urdu, read right to left. Each of these is a case where shortcuts that seem fine in English break in a way the English-speaking developer never sees.
Each language named in its own script
A language picker is only useful if the person who needs it can find their language. That person is often someone who cannot read the language the app is currently showing. So each entry is labelled first by its endonym, the language's name for itself in its own script: हिन्दी, العربية, 日本語. The English name sits underneath as a secondary label for everyone else.
The list is searchable. It also opens with a Suggested section based on the device locale, so the most likely choices are at the top before anyone types. For Arabic and Urdu, the language names in the picker are anchored correctly for right-to-left text. They do not sit awkwardly against the left edge like a left-to-right label.
Applied to the whole process, not just the current screen
Changing the language on the visible activity is a common half-solution. It leaves anything that runs outside that activity in the old language. For a media app that is a visible problem, because playback continues in a background service and the media notification sits in the shade. A notification in English under a Japanese interface looks broken.
We apply the chosen language through AppCompatDelegate.setApplicationLocales. That sets it for the whole app process, so it reaches services, notifications and dialogs as well as activities. There is one language setting for the app, and every part of the app reads from it.
Handing the choice to Android 13 and later
From Android 13, the platform has its own notion of a per-app language, and Googly Player hands its choice to it. The language a user picks inside the app also appears under Settings › Apps › Googly Player › Language. A change made there is the same setting the in-app picker controls.
This keeps one source of truth. Someone who changes the language from system Settings, perhaps without ever opening the picker, gets the same result as someone who uses the picker. Neither path can leave the app half in one language and half in another. On earlier Android versions the in-app picker remains the place to make the choice, applied through the same process-wide call.
Why every translation ships in the base APK
This is the decision that keeps the picker from failing silently. Android App Bundles support language splits. With them enabled, Google Play delivers only the language resources that match the phone's system language. That suits an app that simply follows the system. It quietly breaks one that lets users choose a different language.
With splits on, a user whose phone is in English chooses Bengali in the picker, and the Bengali resources are not on the device. Android falls back to the default resources, so the whole interface renders in English. There is no crash, no error and nothing in the logs. A tester with an English phone may never see a problem at all.
We deliberately disable language splits in Googly Player's App Bundle. Every translation ships in the base APK, so all 17 languages are on the device from the moment the app is installed.
Right-to-left for Arabic and Urdu, numbers included
Arabic and Urdu get full right-to-left support in Googly Player, from the layout down to how their names sit in the language picker. Mirroring layouts is the part most teams remember. The part they forget is the small text that mixes a label with a number.
Building a count by concatenation, “Total Videos: ” + n, fixes the order of the pieces in the code. In a right-to-left language that order is wrong, and the number ends up on the wrong side of the label. We never concatenate counts. Every one is a formatted string with a placeholder, “Total Videos: %d”, so each translation positions the number where its own grammar puts it.
Plurals that a format string can't express
Placeholders fix the position of a number. They do not fix the words around it. English gets away with a singular and a plural, and it is tempting to write one string for each. Other languages do not divide numbers that way. Arabic needs six grammatical forms for a number, and Russian needs four. No single format string, and no pair of them, can carry that.
Googly Player uses Android's plural resources for every count that needs one. Each translation supplies the forms its language actually has, and the platform selects the right one for the number on screen. The English strings stay simple, and the Arabic and Russian strings stay grammatical.
Who this is for and what it runs on
If you use Googly Player, all of this comes down to one thing. Choose a language and the whole app follows it, from the library screens to the playback notification. Every one of the 17 languages is already in the install, so the choice can be made at any time. If your phone runs Android 13 or later, the setting is also in system Settings.
If you are building an Android app for readers in more than one language, the list above is the checklist we work through. That means endonyms in the picker, process-wide application, platform hand-off on Android 13 and later, no language splits, placeholders for counts, plural resources and full right-to-left support. If you want that done in your own app, it is work we do.
Open the language picker
Open the in-app language picker in Googly Player. Each language is listed by its own name, with the English name underneath.
Search or take a suggestion
Type to search the list, or choose from the Suggested section, which is based on your device locale.
Use system Settings on Android 13+
On Android 13 and later, the same choice is available under Settings › Apps › Googly Player › Language.
Questions
Does changing the language in Googly Player change my phone's language?
No. The in-app picker is entirely independent of the system language. It changes Googly Player only.
Will the playback notification and dialogs follow the language I pick?
Yes. The choice is applied process-wide through AppCompatDelegate.setApplicationLocales. It covers services, notifications and dialogs as well as the app's screens.
Which languages read right to left?
Arabic and Urdu. Both have full right-to-left support, including correctly anchored language names in the picker and counts that place the number correctly.
Why does every translation ship in the base APK?
With language splits enabled, Google Play would deliver only the system-language resources. Choosing a different language in the picker would then show English with no crash and nothing in the logs. Disabling splits keeps all 17 languages on the device.
- #Android localisation
- #Android plural resources
- #Googly Player
- #RTL Arabic Urdu
- #binary buddies
- #in-app language picker



Comments