Wybór języka według aplikacji

Języki według aplikacji w ustawieniach systemu

W wielu przypadkach użytkownicy wielojęzyczni ustawiają język systemu na jeden język – jak angielski, ale chcą wybrać inne języki dla konkretnych aplikacji, niderlandzki, chiński lub hindi. Aby zwiększyć wygodę korzystania z aplikacji użytkowników, Android 13 wprowadza te funkcje w przypadku aplikacji obsługujących wiele języków:

  • Ustawienia systemu: scentralizowane miejsce, w którym użytkownicy mogą wybrać preferowanego języka dla każdej aplikacji.

    Możesz skonfigurować aplikację tak, aby automatycznie generowała pliki potrzebne do obsługi preferencji językowych dla poszczególnych aplikacji i są widoczne w ustawieniach systemu. Do więcej informacji znajdziesz w instrukcjach dotyczących włączenie automatycznej obsługi języków dla poszczególnych aplikacji.

  • Dodatkowe interfejsy API: publiczne interfejsy API, takie jak setApplicationLocales(). oraz getApplicationLocales(). w LocaleManager, zezwól aplikacjom ustawić w czasie działania inny język niż język systemu.

    Te interfejsy API są automatycznie synchronizowane z ustawieniami systemowymi. dlatego aplikacje korzystające z technologii tych interfejsów API do tworzenia niestandardowych selektorów języka mają spójne wrażenia użytkownika niezależnie od tego, ustawienia języka. Publiczne interfejsy API pomagają również zmniejszyć ilość stały kod, obsługują dzielone pakiety APK oraz obsługują Automatyczną kopię zapasową Aplikacje do przechowywania języka użytkownika na poziomie aplikacji. ustawieniach.

    Aby zapewnić zgodność wsteczną z poprzednimi wersjami Androida, odpowiednie interfejsy API są też dostępne na Androidzie X. Zgodne wstecznie interfejsy API działają jednak na podstawie kontekstu AppCompatActivity, a nie aplikacji, w przypadku Androida 12 (poziom interfejsu API 32) i starsze. Dostęp do zgodnych wstecznie interfejsów API za pomocą Appcompat 1.6.0 lub wyższą.

Omówienie implementacji tej funkcji

W tabeli poniżej znajdziesz zalecane implementacje w zależności od użycia przypadków.

Przypadek użycia Zalecana implementacja
Twoja aplikacja nie ma selektora języka
  1. Włącz automatyczną obsługę języków dla poszczególnych aplikacji, aby wygenerować LocaleConfig plik i dodaj języki aplikacji do systemu ustawieniach.
  2. Opcjonalnie, jeśli chcesz dodać selektor języka w aplikacji, użyj i włącz się w bibliotekę AndroidaX Implementacja interfejsu API do obsługi wstecznej na temat zgodności z systemem autoStoreLocales.
Twoja aplikacja ma już selektor języka
  1. Włącz automatyczną obsługę języków dla poszczególnych aplikacji, aby wygenerować LocaleConfig plik i dodaj języki aplikacji do systemu ustawieniach.
  2. Przenieś niestandardową logikę aplikacji, aby używać publicznych interfejsów API, aby użytkownicy widzieli i wrażenia użytkownika.
  3. Postępuj zgodnie z tymi etui:
    1. Wywołaj AppCompatDelegate.setApplicationLocales() przy pierwszym uruchomieniu aplikacji na urządzeniu z Androidem 13.
    2. Zadzwoń pod numer AppCompatDelegate.setApplicationLocales() do udostępniają do systemu posiadane żądane przez użytkownika ustawienia regionalne, w następujących przypadkach:

Ustawienia systemu dla użytkowników

Począwszy od Androida 13, Android zapewnia scentralizowaną lokalizację w systemie ustawienia preferencji językowych dla poszczególnych aplikacji. Aby upewnić się, że języki można skonfigurować w ustawieniach systemowych na urządzeniach z Androidem 13 lub włącz automatyczną obsługę języków dla poszczególnych aplikacji (zalecane) lub skonfiguruj można włączyć ręcznie.

Włącz automatyczną obsługę języków w poszczególnych aplikacjach

Począwszy od Androida Studio Giraffe i AGP 8.1, możesz skonfigurować aplikację tak, obsługa języka według aplikacji ustawienia automatycznie. Na podstawie zasobów projektu AGP generuje LocaleConfig i dodaje odwołanie do jego ostatecznego pliku manifestu, dzięki czemu nie jest on już musisz zrobić to ręcznie. AGP używa zasobów z folderów res Twojej aplikacji i wszelkie zależności modułów biblioteki pozwalające określić języki do uwzględnienia w pliku LocaleConfig. Oznacza to, że jeśli dodasz zasoby do nowej witryny, Język aplikacji, nie musisz się więc przejmować aktualizacją aplikacji LocaleConfig. .

Pamiętaj, że funkcja automatycznego określania języka według aplikacji obsługuje aplikacje na Androida. 13 (poziom API 33) lub wyższy. Aby korzystać z tej funkcji, musisz skonfigurować compileSdkVersion do 33 lub więcej. Aby skonfigurować ustawienia języka według aplikacji w poprzednich wersjach Androida, musisz też korzystać z interfejsów API i selektorów języka w aplikacji.

Aby włączyć automatyczną obsługę języków w poszczególnych aplikacjach, wykonaj te czynności:

  1. Aby włączyć tę funkcję, użyj opcji generateLocaleConfig w bloku androidResources {} na poziomie modułu build.gradle.kts (build.gradle plik w przypadku za pomocą Groovy'ego). Ta funkcja jest domyślnie wyłączona.

    Kotlin

        android {
          androidResources {
            generateLocaleConfig = true
          }
        }
        

    Odlotowe

        android {
          androidResources {
            generateLocaleConfig true
          }
        }
        
  2. Określ język domyślny:
    1. W folderze res modułu aplikacji utwórz nowy plik o nazwie resources.properties
    2. W pliku resources.properties ustaw wartość domyślną język z etykietą unqualifiedResLocale. Aby sformatować Aby dowiedzieć się więcej, przeczytaj artykuł Tworzenie nazw regionalnych.

AGP dodaje ten domyślny język i wszystkie alternatywnych języków przy użyciu values-* katalogów w folderze res, automatycznie wygenerowany plik LocaleConfig.

Jak tworzyć nazwy języków

Aby utworzyć nazwy ustawień regionalnych, połącz kod języka z opcjonalnym skryptem i kodów regionów, oddzielając każdy z nich łącznikiem:

Jeśli na przykład domyślnym językiem jest amerykański angielski:

unqualifiedResLocale=en-US

Użyj android:localeConfig, aby dodać obsługiwane języki do ustawień systemu

Możesz ręcznie skonfigurować aplikację, aby mieć pewność, że jej języki można skonfigurować w ustawień systemu na urządzeniach z Androidem 13 lub nowszym. Aby to zrobić, utwórz locales_config i dodaj go jako plik manifestu aplikacji za pomocą polecenia android:localeConfig. Pomijam plik manifestu android:localeConfig sygnały wejściowe, że użytkownicy nie powinni mieć możliwości ustawienia języka aplikacji niezależnie od języka systemu w ustawieniach systemu.

Aby ręcznie dodać obsługiwane języki aplikacji do ustawień systemowych użytkownika:

  1. Utwórz plik o nazwie res/xml/locales_config.xml i określ języków, w tym ostateczny język zastępczy, czyli języka ustawionego w: res/values/strings.xml.

    Zobacz Jak tworzyć nazwy języków, aby zapoznać się z wymaganiami związanymi z formatem. Zobacz też przykładowy locale_config.xmlplik, aby zobaczyć listę: z najczęściej używanych regionów.

    Na przykład sformatuj plik locales_config.xml w ten sposób dla aplikacji, która obsługuje następujące języki:

    • Najlepszym językiem zastępczym jest angielski (Stany Zjednoczone)
    • angielski (Wielka Brytania)
    • Francuski
    • japoński
    • chiński (uproszczony, Makau)
    • chiński (tradycyjny, Makau)
    <?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. W pliku manifestu dodaj wiersz wskazujący nowy plik:

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

Możesz dynamicznie aktualizować w aplikacji localeConfig za pomocą LocaleManager.setOverrideLocaleConfig, aby dostosować zestaw języków wyświetlane na liście języków według aplikacji w Ustawieniach Androida. Dzięki temu możesz: dostosować listę języków według regionu, przeprowadzać eksperymenty A/B oraz aktualizować jeśli aplikacja wykorzystuje komunikaty push lokalizacji po stronie serwera, tak jak w przypadku następujący przykład:

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();

Dodatkowo IME mogą teraz używać LocaleManager.getApplicationLocales Żeby poznać język interfejsu bieżącej aplikacji i zaktualizować język klawiatury, wyświetlono:

Kotlin

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

Java

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

Określanie obsługiwanych języków w Gradle

Jeśli te warunki nie zostały jeszcze uwzględnione, określ je za pomocą atrybutu resourceConfigurations w pliku build.gradle na poziomie modułu aplikacji:

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

Jeśli jest dostępna właściwość resourceConfigurations, system kompilacji zawiera tylko zasób językowy w pakiecie APK dla tych języków, co uniemożliwia przetłumaczonych ciągów tekstowych z innych bibliotek, które mogą obsługiwać języków, których Twoja aplikacja nie obsługuje. Więcej informacji: określić języki, które obsługuje Twoja aplikacja.

Jak użytkownicy wybierają język aplikacji w ustawieniach systemowych

Użytkownicy mogą wybrać preferowany język każdej aplikacji w systemie ustawieniach. Dostęp do tych ustawień mogą uzyskać na 2 sposoby:

  • Dostęp poprzez ustawienia systemu

    Ustawienia > System > Języki Wejście > Języki aplikacji > (wybierz aplikację)

  • Dostęp przez ustawienia aplikacji

    Ustawienia > Aplikacje > (wybierz aplikację) > Język

Obsługa selektorów języka w aplikacji

W przypadku aplikacji, które mają już selektor języka w aplikacji lub chcą go użyć, użyj publicznych interfejsów API zamiast niestandardowej logiki aplikacji do obsługi ustawień i pobierania preferowany język Twojej aplikacji. Jeśli w swojej aplikacji używasz publicznych interfejsów API selektor języka, ustawienia systemowe urządzenia zostaną automatycznie zmienione na pasują do języka wybranego przez użytkownika w aplikacji.

Dla zachowania zgodności wstecznej z poprzednimi wersjami Androida zdecydowanie zalecamy korzystając z biblioteki pomocy AndroidaX przy implementacji selektora języka w aplikacji. Możesz też bezpośrednio wdrożyć interfejsy API platformy. w razie potrzeby.

Implementacja z użyciem biblioteki pomocy AndroidaX

Użyj narzędzi setApplicationLocales() i getApplicationLocales() w Appcompat 1.6.0. lub wyższą. Pamiętaj, że zgodne wstecznie interfejsy API współpracują z kontekstem AppCompatActivity. a nie kontekstu aplikacji, na Androidzie 12 (poziom interfejsu API 32) i starszych.

Aby na przykład ustawić preferowany język użytkownika, należy go poprosić o wybierz ustawienia regionalne w selektorze języka, a potem ustaw tę wartość w systemie:

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);

Pamiętaj, że wywołanie metody setApplicationLocales() spowoduje odtworzenie elementu Activity, chyba że aplikacja obsługuje konfigurację języka same się zmienia.

Użyj AppCompatDelegate.getApplicationLocales(), aby pobrać język preferowany przez użytkownika. Użytkownik mógł wybrać język aplikacji w ustawieniach systemu lub w selektorze języka w aplikacji.

Obsługa Androida 12 i starszych wersji

Aby zapewnić obsługę urządzeń z Androidem 12 (poziom interfejsu API 32) lub starszym, AndroidX obsługuje pamięć masową języka, ustawiając wartość autoStoreLocales na true i android:enabled do false we wpisie manifestu aplikacji Usługa AppLocalesMetadataHolderService zgodnie z poniższym kodem snippet:

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

Pamiętaj, że ustawienie wartości autoStoreLocales na true powoduje zablokowanie odczytu w wątku głównym i może spowodować StrictMode diskRead i Naruszenie zasad: diskWrite, jeśli rejestrujesz naruszenia wątków. Zobacz AppCompatDelegate.setApplicationLocales() .

Niestandardowa obsługa pamięci masowej

Pominięcie wpisu w pliku manifestu lub ustawienie autoStoreLocales na false sygnały że obsługujesz własną pamięć masową. W takim przypadku musisz podać atrybut zapisane języki przed onCreate w cyklu życia aktywności i wywołania bramki w AppCompatDelegate.setApplicationLocales() na Androidzie 12 (poziom interfejsu API 32) lub obniżysz się.

Jeśli Twoja aplikacja ma niestandardową lokalizację przechowywania, zalecamy użycie między Twoim rozwiązaniem do przechowywania danych dla regionu a usługą autoStoreLocales, użytkownicy mogą nadal korzystać z aplikacji w preferowanym przez nich języku. Jest to szczególnie ważne, ma zastosowanie w przypadku pierwszego uruchomienia aplikacji po przejściu na Android 13. W takim przypadku możesz podać istniejące wcześniej języki wymagane przez użytkowników. Pobierając języki z pamięci niestandardowej i przekazując je do AppCompatDelegate.setApplicationLocales()

Implementacja z wykorzystaniem interfejsów API platformy Android

Zdecydowanie zalecamy korzystanie z biblioteki pomocy AndroidaX implementacji selektorów języka w aplikacji, możesz też użyć setApplicationLocales() i getApplicationLocales() w środowisku Androida na urządzeniach z Androidem 13.

Aby na przykład ustawić preferowany język użytkownika, należy go poprosić o wybierz ustawienia regionalne w selektorze języka, a potem ustaw tę wartość w systemie:

// 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

Aby wyświetlać w selektorze języka obecnie preferowany język użytkownika, aplikacja może odzyskać wartość z systemu:

// 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

Dodatkowe sprawdzone metody

Weź pod uwagę te sprawdzone metody.

Wywołując intencje w innej aplikacji, weź pod uwagę język

Intencje związane z językiem mogą umożliwiać określenie języka, wywołano aplikację, która ma być w nim dostępna. Jednym z przykładów jest EXTRA_LANGUAGE z interfejsu Speech Adaptive API.

Rozważ użycie nagłówka Accept-Language na karcie niestandardowej w Chrome

Rozważ dodanie nagłówka Accept-Language przez Browser.EXTRA_HEADERS , aby otworzyć stronę internetową w języku aplikacji podczas wywoływania niestandardowej karty Chrome.

Jeśli usuniesz ustawienia języka według aplikacji w ustawieniach systemowych, zresetuj język aplikacji do systemowego

Jeśli usuniesz ustawienia języka aplikacji z ustawień systemu (przez usunięcie android:localeConfig z konta AndroidManifest.xml w Twojej aplikacji), użytkownicy nie mogą łatwo przywrócić domyślny język aplikacji.

Dlatego, jeśli usuniesz android:localeConfig, rozważ zresetowanie ustawienia regionalne aplikacji na język systemu za pomocą LocaleListCompat.getEmptyLocaleList(). lub LocaleList.getEmptyLocaleList() jak widać w tym fragmencie kodu:

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());

Dodatkowe materiały

Aby uzyskać dodatkowe informacje, zapoznaj się z naszymi przykładami kodu, artykułami na blogu i filmami.

Przykładowy plik locale_config.xml

W Android Open domyślnie umieszcza się tłumaczenia na poziomie systemu Projekt źródłowy (AOSP) dla standardowego zestawu najczęściej używanych języków. Przykładowy plik locale_config.xml zawarty w tej sekcji zawiera dla każdego z tych języków. Użyj tego przykładowego pliku, aby uzyskać pomoc samodzielnie utworzysz plik locale_config.xml dla zestawu języków, obsługiwane przez Twoją aplikację.

<?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="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="fil"/> <!-- Filipino -->
   <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="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="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-Hans"/> <!-- Chinese (Simplified) -->
   <locale android:name="zh-Hant"/> <!-- Chinese (Traditional) -->
   <locale android:name="zu"/> <!-- Zulu -->
</locale-config>