App-spezifische Spracheinstellungen

App-spezifische Sprachen in den Systemeinstellungen

In vielen Fällen legen mehrsprachige Nutzer für ihre Systemsprache eine Sprache fest, z. B. Englisch, möchten aber für bestimmte Apps andere Sprachen auswählen, z. B. Niederländisch, Chinesisch oder Hindi. Damit Apps diesen Nutzern besser zur Verfügung stehen, werden in Android 13 die folgenden Funktionen für Apps eingeführt, die mehrere Sprachen unterstützen:

  • Systemeinstellungen: Ein zentraler Ort, an dem Nutzer eine bevorzugte Sprache für jede App auswählen können.

    Sie können Ihre Anwendung so konfigurieren, dass die Dateien, die zur Unterstützung von App-Spracheinstellungen erforderlich sind, automatisch generiert und in den Systemeinstellungen angezeigt werden. Weitere Informationen finden Sie unter Automatische Sprachunterstützung pro App aktivieren.

  • Zusätzliche APIs: Mit diesen öffentlichen APIs wie den Methoden setApplicationLocales() und getApplicationLocales() in LocaleManager können Anwendungen zur Laufzeit eine andere Sprache als die Systemsprache festlegen.

    Diese APIs werden automatisch mit den Systemeinstellungen synchronisiert. Anwendungen, die diese APIs zum Erstellen einer benutzerdefinierten In-App-Sprachauswahl verwenden, sorgen also für eine einheitliche Nutzererfahrung, unabhängig davon, wo sie ihre Spracheinstellungen auswählen. Mit den öffentlichen APIs lässt sich auch die Menge an Boilerplate-Code reduzieren. Sie unterstützen unterteilte APKs und sie unterstützen die automatische Sicherung für Apps, um Spracheinstellungen der Nutzer auf App-Ebene zu speichern.

    Für die Abwärtskompatibilität mit früheren Android-Versionen sind entsprechende APIs auch in AndroidX verfügbar. Die abwärtskompatiblen APIs funktionieren jedoch unter Android 12 (API-Level 32) und früher mit dem AppCompatActivity-Kontext und nicht mit dem Anwendungskontext. Sie können mit Appcompat 1.6.0 oder höher auf die abwärtskompatiblen APIs zugreifen.

Übersicht über die Implementierung dieser Funktion

In der folgenden Tabelle sehen Sie empfohlene Implementierungen für verschiedene Anwendungsfälle.

Anwendungsfall Empfohlene Implementierung
Deine App hat keine In-App-Sprachauswahl
  1. Aktivieren Sie die automatische Sprachunterstützung pro App, um eine LocaleConfig-Datei zu generieren und die Sprachen der Anwendung den Systemeinstellungen hinzuzufügen.
  2. Wenn du eine In-App-Sprachauswahl hinzufügen möchtest, kannst du optional die AndroidX-Bibliothek verwenden und unsere API-Implementierung aktivieren, um die Abwärtskompatibilität durch autoStoreLocales zu unterstützen.
In deiner App gibt es bereits eine Sprachauswahl
  1. Aktivieren Sie die automatische Sprachunterstützung pro App, um eine LocaleConfig-Datei zu generieren und die Sprachen der Anwendung den Systemeinstellungen hinzuzufügen.
  2. Migrieren Sie die benutzerdefinierte Logik Ihrer Anwendung, um die öffentlichen APIs zu verwenden, um Nutzern eine einheitliche Oberfläche zu bieten.
  3. Bewältige die folgenden Sonderfälle:
    1. Rufe AppCompatDelegate.setApplicationLocales() auf, wenn deine App zum ersten Mal auf einem Gerät mit Android 13 ausgeführt wird.
    2. Rufen Sie AppCompatDelegate.setApplicationLocales() auf, um dem System in den folgenden Fällen bereits vorhandene, vom Nutzer angeforderte Sprachen bereitzustellen:

Systemeinstellungen für Nutzer

Ab Android 13 enthält Android einen zentralen Ort in den Systemeinstellungen, an dem Spracheinstellungen für einzelne Apps festgelegt werden können. Damit die Sprachen Ihrer App in den Systemeinstellungen auf Geräten mit Android 13 oder höher konfiguriert werden können, müssen Sie die automatische Sprachunterstützung pro App aktivieren (empfohlen) oder die Unterstützung manuell konfigurieren.

Automatische Sprachunterstützung pro App aktivieren

Ab Android Studio Giraffe und AGP 8.1 können Sie Ihre App so konfigurieren, dass die Spracheinstellungen pro App automatisch unterstützt werden. Basierend auf Ihren Projektressourcen generiert AGP die Datei LocaleConfig und fügt in der endgültigen Manifestdatei einen Verweis darauf hinzu, sodass Sie dies nicht mehr manuell tun müssen. AGP verwendet die Ressourcen in den res-Ordnern Ihrer App-Module und alle Bibliotheksmodulabhängigkeiten, um die Sprachen zu bestimmen, die in die LocaleConfig-Datei aufgenommen werden sollen. Wenn Sie Ihrer Anwendung also Ressourcen für eine neue Sprache hinzufügen, müssen Sie die Datei LocaleConfig nicht aktualisieren.

Beachten Sie, dass die automatische Sprachfunktion pro App Apps unterstützt, die unter Android 13 (API-Level 33) oder höher ausgeführt werden. Wenn Sie das Feature verwenden möchten, müssen Sie compileSdkVersion auf 33 oder höher festlegen. Wenn Sie für frühere Android-Versionen bevorzugte Spracheinstellungen für einzelne Apps konfigurieren möchten, müssen Sie weiterhin die APIs und die In-App-Sprachauswahl verwenden.

So aktivieren Sie die automatische Sprachunterstützung für einzelne Apps:

  1. Verwenden Sie zum Aktivieren der Funktion die Einstellung generateLocaleConfig im Block androidResources {} der Datei build.gradle.kts auf Modulebene (die Datei build.gradle, wenn Sie Groovy verwenden). Die Funktion ist standardmäßig deaktiviert.

    Kotlin

        android {
          androidResources {
            generateLocaleConfig = true
          }
        }
        

    Groovig

        android {
          androidResources {
            generateLocaleConfig true
          }
        }
        
  2. Geben Sie eine Standardsprache an:
    1. Erstellen Sie im Ordner res des App-Moduls eine neue Datei mit dem Namen resources.properties.
    2. Legen Sie in der Datei resources.properties die Standardsprache mit dem Label unqualifiedResLocale fest. Informationen zum Formatieren der Gebietsschemanamen finden Sie unter Sprachnamen erstellen.

AGP fügt diese Standardsprache und alle alternativen Sprachen, die Sie angegeben haben, mithilfe von values-*-Verzeichnissen im Ordner res der automatisch generierten LocaleConfig-Datei hinzu.

So bilden Sie Gebietsschemanamen

Zum Erstellen von Sprachnamen kombinieren Sie den Sprachcode mit den optionalen Script- und Regionscodes und trennen Sie sie jeweils durch einen Bindestrich:

  • Sprache: Verwende den aus zwei oder drei Buchstaben bestehenden ISO 639-1-Code.
  • Skript (optional): Verwenden Sie den ISO 15924-Code.
  • Region (optional): Verwenden Sie entweder den zweistelligen ISO 3166-1-alpha-2-Code oder den dreistelligen UN_M.49-Code.

Angenommen, Ihre Standardsprache ist amerikanisches Englisch:

unqualifiedResLocale=en-US

Mit android:localeConfig kannst du den Systemeinstellungen unterstützte Sprachen hinzufügen

Sie können Ihre App manuell einrichten, damit ihre Sprachen in den Systemeinstellungen auf Geräten mit Android 13 oder höher konfiguriert werden können. Erstellen Sie dazu eine locales_config-XML-Datei und fügen Sie sie mithilfe des Attributs android:localeConfig in das Manifest Ihrer App ein. Wenn die android:localeConfig-Manifesteintragssignale weggelassen werden, sollten Nutzer die Sprache Ihrer App nicht unabhängig von ihrer Systemsprache in ihren Systemeinstellungen festlegen können.

So fügen Sie die unterstützten Sprachen Ihrer App manuell zu den Systemeinstellungen eines Nutzers hinzu:

  1. Erstellen Sie eine Datei mit dem Namen res/xml/locales_config.xml und geben Sie die Sprachen Ihrer App an, einschließlich der ultimativen Fallback-Sprache Ihrer App, also der in res/values/strings.xml angegebenen Sprache.

    Informationen zu den Formatanforderungen finden Sie unter Ländernamen erstellen. Eine Liste der am häufigsten verwendeten Sprachen finden Sie in der locale_config.xml-Beispieldatei.

    Formatieren Sie die Datei locales_config.xml beispielsweise für eine Anwendung, die die folgenden Sprachen unterstützt:

    • Englisch (USA) als ultimative Fallback-Sprache
    • Englisch (Vereinigtes Königreich)
    • Französisch
    • Japanisch
    • Chinesisch (vereinfacht, Macau)
    • Chinesisch (traditionell, Macau)
    <?xml version="1.0" encoding="utf-8"?>
    <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
       <locale android:name="en-US"/>
       <locale android:name="en-GB"/>
       <locale android:name="fr"/>
       <locale android:name="ja"/>
       <locale android:name="zh-Hans-MO"/>
       <locale android:name="zh-Hant-MO"/>
    </locale-config>
    
  2. Fügen Sie im Manifest eine Zeile hinzu, die auf diese neue Datei verweist:

    <manifest>
        ...
        <application
            ...
            android:localeConfig="@xml/locales_config">
        </application>
    </manifest>
    

Du kannst die localeConfig deiner App dynamisch mit LocaleManager.setOverrideLocaleConfig aktualisieren, um die Sprachen anzupassen, die in der Liste der einzelnen Apps in den Android-Einstellungen angezeigt werden. So können Sie die Sprachliste für jede Region anpassen, A/B-Tests ausführen und aktualisierte Sprachen angeben, wenn Ihre App serverseitige Lokalisierungs-Push-Nachrichten verwendet, wie im folgenden Beispiel gezeigt:

Kotlin

//For setOverrideLocaleConfig
val localeManager = applicationContext
    .getSystemService(LocaleManager::class.java)
localeManager.overrideLocaleConfig = LocaleConfig(
LocaleList.forLanguageTags("en-US,ja-JP,zh-Hans-SG")
)

//For getOverrideLocaleConfig
// The app calls the API to get the override LocaleConfig
val overrideLocaleConfig = localeManager.overrideLocaleConfig
// If the returned overrideLocaleConfig isn't equal to NULL, then the app calls the API to get the supported Locales
val supportedLocales = overrideLocaleConfig.supportedLocales()

Java

//For setOverrideLocaleConfig
mContext.getSystemService(LocaleManager.class).setOverrideLocaleConfig(new LocaleConfig(LocaleList.forLanguageTags("en-US,ja-JP,zh-Hans-SG")));

//For getOverrideLocaleConfig
// The app calls the API to get the override LocaleConfig
LocaleConfig overrideLocaleConfig = mContext.getSystemService(LocaleManager.class).getOverrideLocaleConfig();
// If the returned overrideLocaleConfig isn't equal to NULL, then the app calls the API to get the supported Locales
LocaleList supportedLocales = overrideLocaleConfig.getSupportedLocales();

Darüber hinaus können IMEs jetzt LocaleManager.getApplicationLocales verwenden, um die UI-Sprache der aktuellen App zu kennen, um die Tastatursprache wie hier gezeigt zu aktualisieren:

Kotlin

val currentAppLocales: LocaleList = applicationContext.getSystemService(LocaleManager::class.java).getApplicationLocales(appPackageName)

Java

LocaleList currentAppLocales =
    mContext.getSystemService(LocaleManager.class).getApplicationLocales(appPackageName);

Unterstützte Sprachen in Gradle angeben

Falls noch nicht vorhanden, geben Sie dieselben Sprachen mithilfe des Attributs resourceConfigurations in der Datei build.gradle Ihrer App auf Modulebene an:

android {
  ...
  defaultConfig {
    resourceConfigurations += ["en", "en-rGB", "fr", "ja", "b+zh+Hans+MO", "b+zh+Hant+MO"]
  }
}

Wenn das Attribut resourceConfigurations vorhanden ist, enthält das Build-System nur die Sprachressource im APK für die angegebenen Sprachen. Dadurch wird verhindert, dass übersetzte Strings aus anderen Bibliotheken eingebunden werden, die möglicherweise Sprachen unterstützen, die von deiner App nicht unterstützt werden. Weitere Informationen findest du unter Sprachen angeben, die von deiner Anwendung unterstützt werden.

Wie Nutzer eine App-Sprache in den Systemeinstellungen auswählen

Nutzer können ihre bevorzugte Sprache für jede App in den Systemeinstellungen auswählen. Sie können auf zwei Arten auf diese Einstellungen zugreifen:

  • Zugriff über die Systemeinstellungen

    „Einstellungen“ > „System“ > „Sprachen und Eingabe“ > „App-Sprachen“ > (App auswählen)

  • Zugriff über Einstellungen in Apps

    Einstellungen > Apps > (App auswählen) > Sprache

Umgang mit der In-App-Sprachauswahl

Verwenden Sie für Apps, die bereits eine In-App-Sprachauswahl haben oder eine verwenden möchten, anstelle einer benutzerdefinierten App-Logik die öffentlichen APIs, um die Einstellungen festzulegen und die bevorzugte Sprache eines Nutzers für Ihre App abzurufen. Wenn Sie die öffentlichen APIs für die In-App-Sprachauswahl verwenden, werden die Systemeinstellungen des Geräts automatisch an die Sprache angepasst, die der Nutzer über die In-App-Oberfläche auswählt.

Für die Abwärtskompatibilität mit früheren Android-Versionen empfehlen wir dringend, bei der Implementierung einer In-App-Sprachauswahl die AndroidX-Supportbibliothek zu verwenden. Sie können bei Bedarf aber auch die Framework-APIs direkt implementieren.

Implementierung mithilfe der AndroidX-Supportbibliothek

Verwenden Sie die Methoden setApplicationLocales() und getApplicationLocales() in Appcompat 1.6.0 oder höher. Beachten Sie, dass die abwärtskompatiblen APIs unter Android 12 (API-Level 32) und früher mit dem AppCompatActivity-Kontext funktionieren, nicht mit dem Anwendungskontext.

Um die bevorzugte Sprache eines Nutzers beispielsweise festzulegen, bitten Sie den Nutzer, in der Sprachauswahl eine Sprache auszuwählen und diesen Wert dann im System festzulegen:

Kotlin

val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY")
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale)

Java

LocaleListCompat appLocale = LocaleListCompat.forLanguageTags("xx-YY");
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale);

Durch das Aufrufen von setApplicationLocales() wird Activity neu erstellt, es sei denn, die Anwendung verarbeitet Änderungen der Sprachkonfiguration selbst.

Verwende AppCompatDelegate.getApplicationLocales(), um die bevorzugte Sprache des Nutzers abzurufen. Möglicherweise hat der Nutzer die Sprache für die App in den Systemeinstellungen oder in der In-App-Sprachauswahl festgelegt.

Unterstützung von Android 12 und niedriger

Zur Unterstützung von Geräten mit Android 12 (API-Level 32) und niedriger müssen Sie AndroidX anweisen, den Sprachspeicher zu verarbeiten. Dazu setzen Sie einen autoStoreLocales-Wert im Manifesteintrag für den AppLocalesMetadataHolderService-Dienst Ihrer App auf true und für android:enabled auf false, wie im folgenden Code-Snippet gezeigt:

<application
  ...
  <service
    android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
    android:enabled="false"
    android:exported="false">
    <meta-data
      android:name="autoStoreLocales"
      android:value="true" />
  </service>
  ...
</application>

Das Festlegen eines autoStoreLocales-Werts auf true führt zu einem blockierenden Lesevorgang im Hauptthread und zu einem Verstoß gegen StrictMode diskRead und diskWrite, wenn Sie Thread-Verstöße protokollieren. Weitere Informationen finden Sie unter AppCompatDelegate.setApplicationLocales().

Benutzerdefinierte Speicherbehandlung

Wenn Sie den Manifesteintrag weglassen oder autoStoreLocales auf false setzen, signalisieren Sie, dass Sie Ihren eigenen Speicher verwenden. In diesem Fall musst du die gespeicherten Sprachen vor onCreate im Aktivitätslebenszyklus angeben und Aufrufe an AppCompatDelegate.setApplicationLocales() in Android 12 (API-Level 32) oder niedriger steuern.

Wenn Ihre Anwendung einen benutzerdefinierten Sprachspeicherort hat, empfehlen wir eine einmalige Übergabe zwischen Ihrer benutzerdefinierten Sprachspeicherlösung und autoStoreLocales, damit Nutzer Ihre Anwendung weiterhin in der von ihnen bevorzugten Sprache verwenden können. Dies gilt insbesondere dann, wenn deine App zum ersten Mal ausgeführt wird, nachdem ein Gerät auf Android 13 aktualisiert wurde. In diesem Fall können Sie bereits vorhandene, vom Nutzer angeforderte Sprachen angeben. Dazu rufen Sie die Sprachen aus Ihrem benutzerdefinierten Speicher ab und übergeben sie an AppCompatDelegate.setApplicationLocales().

Implementierung mit den Android Framework APIs

Wir empfehlen dringend, die AndroidX-Supportbibliothek zu verwenden, um die In-App-Sprachauswahl zu implementieren. Sie können aber auch die Methoden setApplicationLocales() und getApplicationLocales() im Android-Framework für Geräte mit Android 13 verwenden.

Um die bevorzugte Sprache eines Nutzers beispielsweise festzulegen, bitten Sie den Nutzer, in der Sprachauswahl eine Sprache auszuwählen und diesen Wert dann im System festzulegen:

// 1. Inside an activity, in-app language picker gets an input locale "xx-YY"
// 2. App calls the API to set its locale
mContext.getSystemService(LocaleManager.class
    ).setApplicationLocales(new LocaleList(Locale.forLanguageTag("xx-YY")));
// 3. The system updates the locale and restarts the app, including any configuration updates
// 4. The app is now displayed in "xx-YY" language

Ihre App kann den Wert vom System zurückerhalten, um die aktuell bevorzugte Sprache eines Nutzers zur Anzeige in der Sprachauswahl abzurufen:

// 1. App calls the API to get the preferred locale
LocaleList currentAppLocales =
    mContext.getSystemService(LocaleManager.class).getApplicationLocales();
// 2. App uses the returned LocaleList to display languages to the user

Zusätzliche Best Practices

Beachten Sie die folgenden Best Practices.

Sprache beim Aufrufen eines Intents in einer anderen App berücksichtigen

Mit sprachorientierten Intents können Sie möglicherweise die Sprache angeben, in der die aufgerufene App angezeigt werden soll. Ein Beispiel hierfür ist die Funktion EXTRA_LANGUAGE der Speech Recognition API.

Den Header „Accept-Language“ für den benutzerdefinierten Chrome-Tab verwenden

Sie können den Accept-Language-Header über Browser.EXTRA_HEADERS hinzufügen, um beim Aufrufen eines benutzerdefinierten Chrome-Tabs eine Webseite in der Sprache Ihrer App zu öffnen.

Wenn du die Spracheinstellungen für einzelne Apps in den Systemeinstellungen entfernst, setze die App-Sprache auf die Systemsprache zurück

Wenn du die Spracheinstellungen deiner App aus den Systemeinstellungen entfernst, indem du android:localeConfig aus dem AndroidManifest.xml deiner App entfernst, können Nutzer die App-Sprache nicht einfach auf die Standardeinstellung des Systems zurücksetzen.

Wenn Sie android:localeConfig entfernen, sollten Sie daher die Sprache der App auf die Systemsprache mit LocaleListCompat.getEmptyLocaleList() oder LocaleList.getEmptyLocaleList() zurücksetzen, wie im folgenden Code-Snippet gezeigt:

Kotlin

// Use the AndroidX APIs to reset to the system locale for backward and forward compatibility
AppCompatDelegate.setApplicationLocales(
  LocaleListCompat.getEmptyLocaleList()
)

// Or use the Framework APIs for Android 13 and above to reset to the system locale
val context = LocalContext.current
context.getSystemService(LocaleManager::class.java)
  .applicationLocales = LocaleList.getEmptyLocaleList()

Java

// Use the AndroidX APIs to reset to the system locale for backward and forward compatibility
AppCompatDelegate.setApplicationLocales(
  LocaleListCompat.getEmptyLocaleList()
);

// Or use the Framework APIs for Android 13 and above to reset to the system locale
mContext.getSystemService(LocaleManager.class)
  .setApplicationLocales(LocaleList.getEmptyLocaleList());

Weitere Informationen

Weitere Informationen finden Sie in unseren Codebeispielen, Blogartikeln und Videos.

Beispiel-Datei „local_config.xml“

Standardmäßig umfasst Android im Android Open Source Project (AOSP) Übersetzungen auf Systemebene für einen Standardsatz der am häufigsten verwendeten Sprachen. Die in diesem Abschnitt enthaltene Beispieldatei locale_config.xml enthält das empfohlene Format für jedes dieser Sprachen. Orientieren Sie sich an dieser Beispieldatei, um eine eigene locale_config.xml-Datei für die Sprachen zu erstellen, die Ihre Anwendung unterstützt.

<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
   <locale android:name="af"/> <!-- Afrikaans -->
   <locale android:name="am"/> <!-- Amharic -->
   <locale android:name="ar"/> <!-- Arabic -->
   <locale android:name="as"/> <!-- Assamese -->
   <locale android:name="az"/> <!-- Azerbaijani -->
   <locale android:name="be"/> <!-- Belarusian -->
   <locale android:name="bg"/> <!-- Bulgarian -->
   <locale android:name="bn"/> <!-- Bengali -->
   <locale android:name="bs"/> <!-- Bosnian -->
   <locale android:name="ca"/> <!-- Catalan -->
   <locale android:name="cs"/> <!-- Czech -->
   <locale android:name="da"/> <!-- Danish -->
   <locale android:name="de"/> <!-- German -->
   <locale android:name="el"/> <!-- Greek -->
   <locale android:name="en-AU"/> <!-- English (Australia) -->
   <locale android:name="en-CA"/> <!-- English (Canada) -->
   <locale android:name="en-GB"/> <!-- English (United Kingdom) -->
   <locale android:name="en-IN"/> <!-- English (India) -->
   <locale android:name="en-US"/> <!-- English (United States) -->
   <locale android:name="en-XA"/> <!-- English (Pseudo-Accents) -->
   <locale android:name="es"/> <!-- Spanish (Spain) -->
   <locale android:name="es-US"/> <!-- Spanish (United States) -->
   <locale android:name="et"/> <!-- Estonian -->
   <locale android:name="eu"/> <!-- Basque -->
   <locale android:name="fa"/> <!-- Farsi -->
   <locale android:name="fi"/> <!-- Finnish -->
   <locale android:name="fr"/> <!-- French (France) -->
   <locale android:name="fr-CA"/> <!-- French (Canada) -->
   <locale android:name="gl"/> <!-- Galician -->
   <locale android:name="gu"/> <!-- Gujarati -->
   <locale android:name="hi"/> <!-- Hindi -->
   <locale android:name="hr"/> <!-- Croatian -->
   <locale android:name="hu"/> <!-- Hungarian -->
   <locale android:name="hy"/> <!-- Armenian -->
   <locale android:name="in"/> <!-- Indonesian -->
   <locale android:name="is"/> <!-- Icelandic -->
   <locale android:name="it"/> <!-- Italian -->
   <locale android:name="iw"/> <!-- Hebrew -->
   <locale android:name="ja"/> <!-- Japanese -->
   <locale android:name="ka"/> <!-- Georgian -->
   <locale android:name="kk"/> <!-- Kazakh -->
   <locale android:name="km"/> <!-- Khmer -->
   <locale android:name="kn"/> <!-- Kannada -->
   <locale android:name="ko"/> <!-- Korean -->
   <locale android:name="ky"/> <!-- Kyrgyz -->
   <locale android:name="lo"/> <!-- Lao -->
   <locale android:name="lt"/> <!-- Lithuanian -->
   <locale android:name="lv"/> <!-- Latvian -->
   <locale android:name="mk"/> <!-- Macedonian -->
   <locale android:name="ml"/> <!-- Malayalam -->
   <locale android:name="mn"/> <!-- Mongolian -->
   <locale android:name="mr"/> <!-- Marathi -->
   <locale android:name="ms"/> <!-- Malay -->
   <locale android:name="my"/> <!-- Burmese -->
   <locale android:name="my-MM"/> <!-- Burmese (Myanmar) -->
   <locale android:name="nb"/> <!-- Norwegian -->
   <locale android:name="ne"/> <!-- Nepali -->
   <locale android:name="nl"/> <!-- Dutch -->
   <locale android:name="or"/> <!-- Odia -->
   <locale android:name="pa"/> <!-- Punjabi -->
   <locale android:name="pl"/> <!-- Polish -->
   <locale android:name="pt-BR"/> <!-- Portuguese (Brazil) -->
   <locale android:name="pt-PT"/> <!-- Portuguese (Portugal) -->
   <locale android:name="ro"/> <!-- Romanian -->
   <locale android:name="ru"/> <!-- Russian -->
   <locale android:name="si"/> <!-- Sinhala -->
   <locale android:name="sk"/> <!-- Slovak -->
   <locale android:name="sl"/> <!-- Slovenian -->
   <locale android:name="sq"/> <!-- Albanian -->
   <locale android:name="sr"/> <!-- Serbian (Cyrillic) -->
   <locale android:name="sr-Latn"/> <!-- Serbian (Latin) -->
   <locale android:name="sv"/> <!-- Swedish -->
   <locale android:name="sw"/> <!-- Swahili -->
   <locale android:name="ta"/> <!-- Tamil -->
   <locale android:name="te"/> <!-- Telugu -->
   <locale android:name="th"/> <!-- Thai -->
   <locale android:name="tl"/> <!-- Filipino -->
   <locale android:name="tr"/> <!-- Turkish -->
   <locale android:name="uk"/> <!-- Ukrainian -->
   <locale android:name="ur"/> <!-- Urdu -->
   <locale android:name="uz"/> <!-- Uzbek -->
   <locale android:name="vi"/> <!-- Vietnamese -->
   <locale android:name="zh-CN"/> <!-- Chinese (Simplified) -->
   <locale android:name="zh-HK"/> <!-- Chinese (Hong Kong) -->
   <locale android:name="zh-TW"/> <!-- Chinese (Traditional) -->
   <locale android:name="zu"/> <!-- Zulu -->
</locale-config>