Googly Player in 17 languages: how we built an in-app language picker that actually switches
Seventeen languages, two of them right to left, chosen independently of the phone's own setting, plus the one App Bundle decision that determines whether any of it appears.
If your phone runs in English but you would rather use a media app in Hindi, Arabic or Gujarati, most Android apps give you two options: change the language of the whole phone, or put up with English. An in-app language picker is the obvious fix, and it is one of the easiest features on Android to ship half-working.
The failures rarely crash anything. The screens switch, but a notification stays in the old language. Arabic names sit against the wrong edge of a list. A count reads correctly in English and lands on the wrong side of its label in Urdu. Worst of all, an app delivered as an App Bundle can receive only the resources for the phone's system language, so the picker quietly renders everything in English, with nothing in the logs to explain why.
Googly Player, our Android app for the videos, music and photos on your device, has a full in-app picker for 17 languages that is entirely independent of the system language. This is how we built it, and the handful of decisions that make it actually change the language.
Key takeaways
- Googly Player offers 17 languages from its own picker, each listed by its own name in its own script, with English underneath.
- The choice is applied process-wide, so services, notifications and dialogs follow it, not just the screens.
- We disable language splits in the App Bundle so every translation ships in the base APK; without that, the picker silently falls back to English.
- Arabic and Urdu get full right-to-left support, and counts use format strings and plural resources instead of joined strings.
Seventeen languages, each under its own name
The picker covers English, Hindi, Spanish, Arabic, French, Bengali, Portuguese, Russian, Urdu, Indonesian, German, Japanese, Turkish, Vietnamese, Korean, Italian and Gujarati. Each one is listed by its endonym, the name its speakers use for it, written in its own script, as the main label. The English name sits underneath as a second line.
That ordering is deliberate. Someone looking for Bengali scans for বাংলা, not for a word in another alphabet, and a list of English names asks the people who most need the picker to read the language they are trying to leave. The English line is there for everyone else, such as a family member helping set the app up.
| Listed as | English name |
|---|---|
| English | English |
| हिन्दी | Hindi |
| Español | Spanish |
| العربية | Arabic |
| Français | French |
| বাংলা | Bengali |
| Português | Portuguese |
| Русский | Russian |
| اردو | Urdu |
| Bahasa Indonesia | Indonesian |
| Deutsch | German |
| 日本語 | Japanese |
| Türkçe | Turkish |
| Tiếng Việt | Vietnamese |
| 한국어 | Korean |
| Italiano | Italian |
| ગુજરાતી | Gujarati |
Finding your language quickly
Seventeen entries is enough that scrolling becomes a chore, so the list is searchable. Above the full list sits a Suggested section drawn from the device locale, which puts the likeliest choices for that phone at the top without hiding any of the others.
The selection never touches the system setting. A phone can stay in English for everything else while Googly Player runs in Turkish, or the other way round, and switching back is a matter of opening the picker again. That independence is the whole point: the people who want a different language in one app are usually the people who do not want to change it everywhere.
One choice, applied to the whole app
A common shortcut is to change the locale of the visible screen and recreate it. That works for whatever is on screen and nothing else. We apply the language process-wide through AppCompatDelegate.setApplicationLocales, so it covers services, notifications and dialogs as well as activities.
For a media player this matters more than usual. Googly Player plays audio in the background through a foreground media playback service and shows a media notification, which are exactly the parts a screen-only approach leaves behind. Because the locale is set for the application as a whole, the notification, the playback service and every dialog speak the language you picked.
On Android 13 and later, the system knows too
From Android 13, we hand the choice to the platform rather than keeping it to ourselves. That means it also appears under Settings › Apps › Googly Player › Language, where Android keeps its own per-app language settings. People who manage languages from system settings find Googly Player there alongside their other apps; people who never leave the app use the picker. Both lead to the same setting.
Open the language picker
Every language is shown by its own name, with the English name beneath it.
Search, or start from Suggested
Type to filter the list, or pick from the Suggested section based on your device locale.
Choose a language
The whole app switches: screens, dialogs, notifications and the services behind them.
On Android 13 or later, check Settings
The same choice shows under Settings › Apps › Googly Player › Language.
The App Bundle switch that decides whether any of it shows up
Android App Bundles let Google Play split an app into pieces and deliver only what a device needs, and language resources are one of those pieces. For most apps that is sensible. For an app with its own language picker it is a trap: Play delivers only the resources for the system language, so when someone picks a different language there is nothing installed to switch to. The app does not crash, nothing appears in the logs, and the picker simply renders everything in English.
We deliberately disable language splits in Googly Player's App Bundle so that every translation ships in the base APK. Every install carries all 17 languages, which is what lets the picker work on any phone, whatever its system language happens to be.
Right to left, done properly for Arabic and Urdu
Two of the 17 languages, Arabic and Urdu, read right to left, and Googly Player has full right-to-left support for both. That extends into the picker itself: the Arabic and Urdu names are anchored correctly, so they sit where a right-to-left reader expects a line to begin rather than hanging off the left edge beside the Latin-script entries.
A list that mixes Devanagari, Arabic, Cyrillic, Japanese, Korean and Latin scripts is where anchoring mistakes are most visible, and it is the very first screen a right-to-left reader sees after choosing their language. Right-to-left layout also changes where a number belongs in a sentence, which is why we never build counts by joining strings together.
Counts and plurals that survive translation
Every count in Googly Player is formatted, never concatenated. We write “Total Videos: %d” rather than “Total Videos: ” + n. Concatenation fixes the number after the label in code, and in Arabic and Urdu that puts it on the wrong side. A format string leaves the position of the number to each translation, so it lands where a reader of that language expects it.
Plurals use proper plural resources rather than a single format string. Arabic needs six grammatical forms for a number and Russian needs four, and one string with a number dropped into it cannot express either. Plural resources give each language a slot for every form it actually has, so the wording around a count is grammatical whatever the number is.
What it runs on and what it asks for
Googly Player is an Android app, built with Material Design 3 throughout, and the language picker is part of it on every device it runs on. The system-level entry under Settings › Apps › Googly Player › Language needs Android 13 or later. The rest of the app follows modern Android in the same way: Material You dynamic colour picks up your wallpaper palette on Android 12 and later, and edge-to-edge windows apply their insets correctly on Android 15 and later.
The permissions it requests depend on the Android version:
- Android 13 and later: READ_MEDIA_AUDIO, READ_MEDIA_IMAGES and READ_MEDIA_VIDEO, plus POST_NOTIFICATIONS for the media notification.
- Android 14 and later: READ_MEDIA_VISUAL_USER_SELECTED, so a partial grant persists between launches instead of being revoked when the app is backgrounded. The app can then tell you “You've shared only some items” and offer “Allow all”.
- Before Android 13: READ_EXTERNAL_STORAGE, capped at API 32.
- Playback: FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PLAYBACK and WAKE_LOCK for background playback, and MODIFY_AUDIO_SETTINGS so the equalizer and booster effects work.
Every permission prompt is written in plain language and says “Nothing is uploaded — everything stays on this device.” If you decline, each section explains what it needs, for example “Allow access to your videos / music / photos to see them here”, and offers a route into Settings when access is hard-blocked.
Googly Player is delivered as an Android App Bundle through Google Play, with all 17 translations in the base install, so the language you choose is available the moment the app is.
Questions
Do I need to change my phone's language to use Googly Player in Hindi or Arabic?
No. The in-app picker is entirely independent of the system language. Your phone can stay in one language while Googly Player runs in any of its 17.
Will notifications and dialogs switch language too?
Yes. We apply the choice process-wide through AppCompatDelegate.setApplicationLocales, which covers services, notifications and dialogs as well as the app's screens.
Why do some apps' language pickers show English no matter what I choose?
When an app ships as an App Bundle with language splits enabled, Google Play installs only the system language's resources, so there is nothing else to switch to. We disable language splits so every translation ships in the base APK.
Can I change Googly Player's language from Android's own Settings?
On Android 13 and later, yes. The choice is handed to the platform and appears under Settings › Apps › Googly Player › Language.
Are Arabic and Urdu shown right to left?
Yes. Both have full right-to-left support, including correctly anchored names in the language picker, and counts are built with format strings so numbers land on the correct side.
- #Android localization
- #Android plural resources
- #Googly Player



Comments