How Googly Player Ships 17 In-App Languages on Android Without Silent Failures
The decisions behind a 17-language Android picker that actually works in production: what breaks quietly, and how we fixed each one in Googly Player.
Adding a language picker to an Android app looks like a small job: translate the strings, add a list, change the locale. Then the build goes out through Google Play, and a user who picks Hindi or Arabic still sees English. Nothing crashes and nothing appears in the logs. Or the screens switch language but the playback notification stays in the old one. Or a count reads on the wrong side of its label in Urdu, and every number in the Russian build sits next to a grammatically wrong noun.
None of these is an edge case once your users span languages. Each is a separate place where Android localisation fails quietly, and quiet failures are exactly the ones that survive testing and reach production.
Googly Player, our Android app for video, music and photos, offers 17 languages through an in-app picker that works independently of the system language. Below is what that took, decision by decision. It is useful whether you are evaluating the app or deciding whether to have us build something multilingual for you.
Key takeaways
- The language choice is applied process-wide, so services, notifications and dialogs switch along with the screens.
- On Android 13 and later, the choice is handed to the platform and appears in the app's language entry in system Settings.
- Language splits are disabled in the App Bundle; with them on, Play installs only the device language and the picker silently falls back to English.
- Numbers are formatted into strings rather than concatenated, and plurals use plural resources, because Arabic needs six plural forms and Russian four.
Seventeen languages, each under its own name
The picker lists every language by its endonym, its own name in its own script, with the English name underneath. Someone looking for Bengali scans for বাংলা, not for a Latin-script word they may never use; the English line beneath helps everyone else, including whoever is helping them set up the phone.
- 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 (ગુજરાતી)
That set spans Latin, Cyrillic, Arabic, Devanagari, Bengali, Gujarati, Japanese and Korean scripts, and two right-to-left languages. Every one of the decisions in the sections that follow exists because at least one of these languages breaks the shortcut that works for English.
A picker that finds your language for you
Seventeen entries is enough that scrolling becomes a chore, so the picker is searchable. It also opens with a Suggested section built from the device locale, which means most people see their own language at the top without typing anything. The suggestion only shortens the path; the full list and search are always there for someone whose phone is set to one language but who wants the app in another.
Arabic and Urdu get full right-to-left support across the app, and that extends into the picker itself. Their language names are anchored correctly for right-to-left text rather than being forced into a left-aligned row built for Latin script. It is a small detail, and it is the first screen a right-to-left user sees after making their choice, so it sets their expectations for everything after it.
One switch for the whole process, not just the screen
A common approach to in-app languages changes the locale per activity. That covers what is on screen and misses everything else. A media app is not just activities: Googly Player runs a foreground service for background playback and posts a media notification, and dialogs appear on top of whatever is running. If the language change stops at the activity, the user picks Turkish and still reads the playback controls in English.
We apply the choice process-wide through AppCompatDelegate.setApplicationLocales, so services, notifications and dialogs follow it along with every activity. On Android 13 and later, the choice is also handed to the platform. It then appears under Settings › Apps › Googly Player › Language, which is where Android users increasingly expect per-app language settings to live, and changing it there or in the app gives the same result.
The App Bundle setting that silently undoes all of it
This is the failure that catches teams who did everything else right. By default, an Android App Bundle lets Google Play split resources by language and deliver only the ones matching the device's system language. That is sensible for apps that simply follow the system setting. For an app with its own picker, it means the other translations are never installed on the phone.
The result is the worst kind of bug. The user picks Japanese on a phone set to English, the app finds no Japanese resources, and it renders everything in English. There is no crash and nothing in the logs, and on a developer's device with a full debug build it works perfectly. We deliberately disable language splits in the App Bundle, so every translation ships in the base APK and every choice in the picker has the resources it needs.
Numbers belong where each language puts them
Gluing a number onto a label in code, as in "Total Videos: " + n, assumes that every language puts the number after the words. In Arabic and Urdu, concatenation puts the number on the wrong side of the label. It is the kind of mistake that looks fine to anyone reading left to right and looks broken to every right-to-left reader.
Every count in Googly Player is formatted instead: the string resource is "Total Videos: %d", and the number is inserted into it. The placeholder lives inside the translated string, so each language's string decides where the number sits. The same rule applies wherever a count appears next to text, which in a media library means a lot of places.
Plurals: six forms in Arabic, four in Russian
Formatting fixes where the number goes; it does not fix the word next to it. English gets away with a singular and a plural, which tempts developers into a single format string or an if-statement for one versus many. Arabic needs six grammatical forms for a number and Russian needs four. No single format string can express that, and no if-statement written by an English speaker will guess the rules.
Googly Player uses Android's plural resources for every counted noun. The translation supplies each form the language needs, and the platform picks the right one for the number at hand. For the reader, the payoff is simply that the app reads as if it were written in their language rather than translated into it, which is the whole reason to ship 17 languages in the first place.
What Googly Player needs and where it runs
Googly Player is an Android app, built with Material Design 3 and distributed through Google Play as an App Bundle with every translation in the base APK. The in-app language picker is independent of the system language. On Android 13 and later, the platform's per-app language setting is also available, and on Android 12 and later the app picks up your wallpaper palette through dynamic colour.
It reads your existing media, so it asks for access to it. On Android 13 and later that means the granular READ_MEDIA_AUDIO, READ_MEDIA_IMAGES and READ_MEDIA_VIDEO permissions; on Android 14 and later it supports partial access, so it can tell you when you have shared only some items and offer to allow all; on older devices it uses READ_EXTERNAL_STORAGE. Every prompt is written in plain language and says that nothing is uploaded and everything stays on the device.
Open the language picker
It lists all 17 languages by their own names, with a Suggested section based on your device locale at the top.
Search or choose
Type to filter the list, or tap a suggestion. The choice applies across the whole app, including notifications and dialogs.
On Android 13 or later, use Settings if you prefer
The same choice appears under Settings › Apps › Googly Player › Language, and changing it there has the same effect.
Questions
Does changing the app's language change my phone's language?
No. The in-app picker is entirely independent of the system language, so you can run Googly Player in Gujarati on a phone set to English.
Will Arabic and Urdu display right to left?
Yes. Both have full right-to-left support, including correctly anchored names in the picker and counts that sit on the correct side of their labels.
Why is each language shown with its English name underneath?
The primary label is the language's own name in its own script, so speakers find it immediately; the English name underneath helps anyone else who is browsing the list.
Do I need to download anything to switch to another language?
No. Language splits are disabled in the App Bundle, so every translation is already in the base APK on your device.
- #Android localization
- #Android plural resources
- #Googly Player
- #RTL support Android
- #in-app language picker
- #setApplicationLocales



Comments