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.

Binary Buddies · 5 min read · 1 view
An evening balcony above the cityLanterns strung over a balcony at dusk, lit windows across a layered skyline, and a glowing phone on a small table beside headphones and a cup.

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 asEnglish name
EnglishEnglish
हिन्दीHindi
EspañolSpanish
العربيةArabic
FrançaisFrench
বাংলাBengali
PortuguêsPortuguese
РусскийRussian
اردوUrdu
Bahasa IndonesiaIndonesian
DeutschGerman
日本語Japanese
TürkçeTurkish
Tiếng ViệtVietnamese
한국어Korean
ItalianoItalian
ગુજરાતી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.

How a language choice reaches the whole appThe in-app picker calls setApplicationLocales, which applies the language to activities, services, notifications and dialogs, and on Android 13 and later also to the system Settings entry.One choice, whole processIn-app pickersetApplicationLocalesActivitiesServicesNotificationsDialogsAndroid 13+: system Settings
A single call sets the language for every part of the app, and on Android 13 and later the system records it too.

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.

  1. Open the language picker

    Every language is shown by its own name, with the English name beneath it.

  2. Search, or start from Suggested

    Type to filter the list, or pick from the Suggested section based on your device locale.

  3. Choose a language

    The whole app switches: screens, dialogs, notifications and the services behind them.

  4. On Android 13 or later, check Settings

    The same choice shows under Settings › Apps › Googly Player › Language.

A night train on a bridgeA lit train crossing an arched bridge over still water at night, its windows reflected below, with hills and a rising moon behind.

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.

Language splits enabled versus disabledWith splits enabled, Play delivers only the system language and the picker renders English with no crash or log entry. With splits disabled, the base APK holds all 17 languages and the picker renders the chosen one.Language splits in the App BundleSplits enabledSplits disabled: our buildPlay splits by languageOnly system language arrivesPicker renders EnglishNo crash, nothing in the logsBase APK holds all 17Chosen language availablePicker renders your choiceWorks whatever the system language
The same picker either works or silently falls back to English, depending on one App Bundle setting.

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.

17languages in the in-app picker
2right-to-left languages supported
6plural forms Arabic needs
4plural forms Russian needs

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.

Building counts and pluralsA concatenated label and number puts the number on the wrong side in right-to-left languages, while a format string places it correctly. Arabic needs six plural forms for a number and Russian four.Counts and plural formsBuilding a countConcatenated label + numberNumber on wrong side in RTLFormat string with %dNumber placed correctly in RTLPlural forms per number6 forms4 formsArabicRussian
Format strings keep numbers in the right place, and plural resources carry every grammatical form a language has.
Rooftops at sunriseMorning sun rising behind layered rooftops, laundry drying on a line, water tanks and an antenna, birds overhead and a kite drifting in the warm sky.

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

Add a comment
Sign in with Google to join the conversation