![](https://developer.android.com/static/images/about/versions/13/app-languages.png?authuser=8&hl=he)
במקרים רבים, משתמשים שדוברים כמה שפות מגדירים את שפת המערכת שלהם לשפה אחת — כמו אנגלית, אבל הם רוצים לבחור שפות אחרות לאפליקציות ספציפיות, הולנדית, סינית או הינדי. כדי לעזור לאפליקציות לספק חוויה טובה יותר ב-Android 13 הוספנו את התכונות הבאות לאפליקציות שתומכות במספר שפות:
הגדרות מערכת: מיקום מרכזי שבו המשתמשים יכולים לבחור שפה מועדפת לכל אפליקציה.
אפשר להגדיר את האפליקציה כך שתיצור באופן אוטומטי את הקבצים שדרושים כדי לתמוך בהעדפות שפה לכל אפליקציה ולהופיע בהגדרות המערכת. שפת תרגום מידע נוסף, אפשר לקרוא את ההוראות הפעלת תמיכה אוטומטית בשפה עבור כל אפליקציה.
Additional APIs: ממשקי ה-API הציבוריים האלה, כמו
setApplicationLocales()
וגםgetApplicationLocales()
השיטות ב-LocaleManager
, מאפשרות לאפליקציות להגדיר שפה שונה משפת המערכת בזמן הריצה.ממשקי ה-API האלה מסתנכרנים באופן אוטומטי עם הגדרות המערכת. כלומר, אפליקציות שמשתמשות את ממשקי ה-API האלה כדי ליצור בוחרי שפה מותאמים אישית באפליקציה, יבטיחו שהמשתמשים שלהם לספק חוויית משתמש עקבית, ללא קשר למקום שבו הם בוחרים העדפות שפה. ממשקי ה-API הציבוריים גם עוזרים להפחית קוד סטנדרטי, הם תומכים ב-APK מפוצל ותומכים בגיבוי אוטומטי אפליקציות לאחסון של שפת המשתמש ברמת האפליקציה הגדרות.
לצורך תאימות לאחור עם גרסאות Android קודמות, ממשקי API מקבילים זמינות גם ב-AndroidX. עם זאת, ממשקי API עם תאימות לאחור פועלים עם ההקשר של AppCompatActivity, ולא עם ההקשר של האפליקציה, ב-Android 12 (רמת API 32) ודגמים קודמים. גישה לממשקי API שתואמים לאחור באמצעות Appcompat 1.6.0 ומעלה.
סקירה כללית של הטמעת התכונה הזו
בטבלה הבאה מוצגות הטמעות מומלצות לפי שימושים שונים במקרים שונים.
תרחיש לדוגמה | הטמעה מומלצת |
---|---|
באפליקציה שלך אין כלי לבחירת שפה באפליקציה |
|
באפליקציה שלך כבר יש כלי לבחירת שפה |
|
הגדרות מערכת למשתמשים
החל מ-Android 13, מערכת Android כוללת מיקום מרכזי במערכת להגדרת העדפות שפה לכל אפליקציה. כדי לוודא שהמאפיינים אפשר להגדיר את השפות בהגדרות המערכת במכשירים עם Android 13 או גבוהה יותר, להפעיל תמיכה אוטומטית בשפה עבור כל אפליקציה (מומלץ) או להגדיר תמיכה ידנית.
הפעלת תמיכה אוטומטית בשפה לכל אפליקציה
החל מ-Android Studio Giraffe ו-AGP 8.1, אפשר להגדיר את האפליקציה כך:
תמיכה בשפה לכל אפליקציה
העדפות
באופן אוטומטי. על סמך משאבי הפרויקט שלך, AGP יוצרת את LocaleConfig
ומוסיפה הפניה אליו בקובץ המניפסט הסופי, כך שלא
צריך לעשות זאת באופן ידני. AGP משתמשת במשאבים שנמצאים ב-res
תיקיות של האפליקציה
וכל יחסי תלות של מודולי ספרייה כדי לקבוע את הלוקאלים שיש לכלול
בקובץ LocaleConfig
. המשמעות היא שאם תוסיפו משאבים
שפת האפליקציה, אין צורך לדאוג לגבי עדכון LocaleConfig
חדש.
לתשומת ליבכם: התכונה 'שפה אוטומטית לכל אפליקציה' תומכת באפליקציות שפועלת בהן מערכת Android
13 (רמת API 33) ואילך. כדי להשתמש בתכונה, צריך להגדיר
compileSdkVersion
ל-33 ואילך. כדי להגדיר העדפות שפה לכל אפליקציה
בגרסאות קודמות של Android, עדיין צריך
להשתמש בממשקי ה-API ובבוחרי השפה בתוך האפליקציות.
כדי להפעיל תמיכה אוטומטית בשפה עבור כל אפליקציה, מבצעים את השלבים הבאים:
- כדי להפעיל את התכונה, אפשר להשתמש ב
generateLocaleConfig
בבלוקandroidResources {}
של רמת המודול קובץbuild.gradle.kts
(קובץ אחד (build.gradle
) אם אתם באמצעות גרובי). התכונה מושבתת כברירת מחדל.Kotlin
android { androidResources { generateLocaleConfig = true } }
מגניב
android { androidResources { generateLocaleConfig true } }
- ציון לוקאל ברירת המחדל:
- בתיקייה
res
של מודול האפליקציה, יוצרים קובץ חדש בשםresources.properties
. בקובץ
resources.properties
, מגדירים את ברירת המחדל לוקאל עם התוויתunqualifiedResLocale
. כדי לעצב את הקובץ שמות של לוקאלים זמינים במאמר איך יוצרים שמות של לוקאלים.
- בתיקייה
AGP מוסיפה את הלוקאל שמוגדר כברירת המחדל
לוקאלים חלופיים
שציינת, באמצעות ספריות values-*
בתיקייה res
,
קובץ LocaleConfig
שנוצר באופן אוטומטי.
איך יוצרים שמות של לוקאלים
כדי ליצור שמות של לוקאלים, צריך לשלב את קוד השפה עם הסקריפט האופציונלי קודי אזור, שמפרידים ביניהם במקף:
- שפה: יש להזין שתיים או שלוש אותיות ISO 639-1
- סקריפט (אופציונלי): משתמשים ב קוד ISO 15924.
- אזור (אופציונלי): יש להשתמש באחת משתי האותיות ISO 3166-1-alpha-2 או UN_M.49 בן שלוש ספרות
לדוגמה, אם אזור ברירת המחדל שלכם הוא אנגלית אמריקאית:
unqualifiedResLocale=en-US
כדי להוסיף שפות נתמכות להגדרות המערכת צריך להשתמש ב-android:localeConfig
אפשר להגדיר את האפליקציה באופן ידני כדי לוודא שהשפות שלה ניתנות להגדרה
הגדרות המערכת במכשירים עם Android מגרסה 13 ואילך. כדי לעשות את זה,
locales_config
בקובץ ה-XML הרצוי ולהוסיף אותו למניפסט של האפליקציה באמצעות התחילית
android:localeConfig
. השמטת המניפסט android:localeConfig
אותות כניסה של משתמשים לא אמורים להיות מסוגלים להגדיר את שפת האפליקציה
ללא תלות בשפת המערכת בהגדרות המערכת שלהם.
כדי להוסיף באופן ידני את השפות הנתמכות באפליקציה להגדרות המערכת של המשתמש:
יוצרים קובץ בשם
res/xml/locales_config.xml
ומציינים את כתובת האימייל של האפליקציה כולל שפות האפליקציה Ultimate fallback locale, שזו הלוקאל שצוין ב-res/values/strings.xml
.מידע על דרישות הפורמט זמין במאמר איך יוצרים שמות של לוקאלים. אפשר לעיין גם בקובץ
locale_config.xml
לדוגמה כדי לראות רשימה של הלוקאלים הכי נפוצים.לדוגמה, יש לעצב את הקובץ
locales_config.xml
באופן הבא עבור אפליקציה תומך בשפות הבאות:- אנגלית (ארצות הברית) בתור הלוקאל האולטימטיבי החלופי
- אנגלית (בריטניה)
- צרפתית
- יפנית
- סינית (פשוטה, מקאו)
- סינית (מסורתית, מקאו)
<?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>
במניפסט, מוסיפים שורה שמצביעה אל הקובץ החדש:
<manifest> ... <application ... android:localeConfig="@xml/locales_config"> </application> </manifest>
אפשר לעדכן באופן דינמי את localeConfig
של האפליקציה עם
LocaleManager.setOverrideLocaleConfig
כדי להתאים אישית את קבוצת השפות
תוצג ברשימת השפות לכל אפליקציה בהגדרות Android. כך אפשר
להתאים אישית את רשימת השפות לכל אזור, להריץ ניסויי A/B ולספק
אם האפליקציה משתמשת בדחיפת לוקליזציה בצד השרת, כמו שמוצג
בדוגמה הבאה:
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();
בנוסף, עורכי IME יכולים עכשיו להשתמש
LocaleManager.getApplicationLocales
לדעת את שפת ממשק המשתמש של האפליקציה הנוכחית כדי לעדכן את שפת המקלדת בתור
מוצגת:
Kotlin
val currentAppLocales: LocaleList = applicationContext.getSystemService(LocaleManager::class.java).getApplicationLocales(appPackageName)
Java
LocaleList currentAppLocales = mContext.getSystemService(LocaleManager.class).getApplicationLocales(appPackageName);
ציון השפות הנתמכות ב-Gradle
אם היא לא קיימת, מציינים את אותן שפות באמצעות הרכיב
resourceConfigurations
נכס בקובץ build.gradle
ברמת המודול של האפליקציה:
android {
...
defaultConfig {
resourceConfigurations += ["en", "en-rGB", "fr", "ja", "b+zh+Hans+MO", "b+zh+Hant+MO"]
}
}
כשהמאפיין resourceConfigurations
קיים, מערכת ה-build כוללת רק
של השפות שצוינו ב-APK, וכך למנוע
מחרוזות מתורגמות מהכללה של ספריות אחרות שעשויות לתמוך
שפות שהאפליקציה לא תומכת בהן. מידע נוסף זמין במאמר הבא:
לציין את השפות שבהן האפליקציה תומכת.
איך המשתמשים בוחרים את שפת האפליקציה בהגדרות המערכת
המשתמשים יכולים לבחור את השפה המועדפת עליהם לכל אפליקציה דרך המערכת הגדרות. הם יכולים לגשת להגדרות האלה בשתי דרכים שונות:
גישה דרך הגדרות המערכת
הגדרות > מערכת > שפות קלט > שפות של אפליקציות > (צריך לבחור אפליקציה)
גישה דרך ההגדרות של אפליקציות
הגדרות > אפליקציות > (יש לבחור אפליקציה) > שפה
טיפול בבוררי השפה בתוך האפליקציות
לאפליקציות שכבר יש להן כלי לבחירת שפה או שרוצים להשתמש בהן, צריך להשתמש ממשקי API ציבוריים במקום לוגיקה מותאמת אישית של אפליקציה לטיפול בהגדרות וקבלת גישה השפה המועדפת לאפליקציה שלך. אם אתם משתמשים בממשקי API ציבוריים בתוך האפליקציה בוחר השפה, הגדרות המערכת של המכשיר מתעדכנות באופן אוטומטי להתאים לשפה שהמשתמש בוחר בחוויית השימוש באפליקציה.
לתאימות לאחור עם גרסאות Android קודמות, אנחנו ממליצים מאוד באמצעות ספריית התמיכה של AndroidX כשמטמיעים כלי לבחירת שפה בתוך האפליקציה. עם זאת, תוכלו גם להטמיע את ממשקי ה-API של framework באופן ישיר. אם צריך.
הטמעה באמצעות ספריית התמיכה של AndroidX
שימוש בsetApplicationLocales()
ובgetApplicationLocales()
methods ב-Appcompat 1.6.0
ומעלה. שימו לב שממשקי ה-API שתואמים לאחור פועלים עם ההקשר של AppCompatActivity.
לא בהקשר של האפליקציה, ל-Android 12 (רמת API 32) ומטה.
לדוגמה, כדי להגדיר את השפה המועדפת של משתמש, צריך לבקש מהמשתמש בוחרים לוקאל בכלי לבחירת שפה ואז מגדירים את הערך הזה במערכת:
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);
חשוב לזכור שקריאה לפונקציה setApplicationLocales()
תיצור מחדש את Activity
, אלא אם
האפליקציה שלך מטפלת בתצורת הלוקאל
בפני עצמו.
אפשר להשתמש ב-AppCompatDelegate.getApplicationLocales()
כדי לאחזר את הלוקאל המועדף על המשתמש. יכול להיות שהמשתמש בחר את הלוקאל של האפליקציה בהגדרות המערכת או בכלי לבחירת שפה באפליקציה.
תמיכה ב-Android מגרסה 12 ומטה
כדי לתמוך במכשירים עם Android מגרסה 12 (API ברמה 32) ומטה, צריך לציין
AndroidX לטפל באחסון מקומי על ידי הגדרה של ערך autoStoreLocales
ל-
true
וגם android:enabled
אל false
ברשומת המניפסט של האפליקציה
שירות AppLocalesMetadataHolderService
, כפי שמוצג בקוד הבא
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>
חשוב לשים לב שהגדרת הערך של autoStoreLocales
כ-true
גורמת לקריאת חסימה
בשרשור הראשי, ועלול לגרום
StrictMode
diskRead
וגם
הפרה של diskWrite
אם מתבצע תיעוד של הפרות של השרשורים. צפייה
AppCompatDelegate.setApplicationLocales()
אפשר לקבל מידע נוסף.
טיפול מותאם אישית באחסון
השמטת רשומת המניפסט או הגדרת autoStoreLocales
כ-false
אותות
שאת מטפלת באחסון שלך. במקרה כזה, צריך לספק
לוקאלים שנשמרו לפני onCreate
במחזור החיים של הפעילות וקריאות שער אל
AppCompatDelegate.setApplicationLocales()
ב-Android 12 (רמת API 32) או
נמוכה יותר.
אם לאפליקציה שלך יש מיקום מותאם אישית לאחסון מקומי, מומלץ להשתמש בהגדרה חד-פעמית
להעביר בין פתרון האחסון המקומי המותאם אישית שלך לבין autoStoreLocales
,
המשתמשים ממשיכים ליהנות מהאפליקציה בשפה שהם מעדיפים. במיוחד
רלוונטי במקרים שבהם האפליקציה מופעלת בפעם הראשונה לאחר שהמכשיר שדרג ל-
Android מגרסה 13. במקרה הזה, יש לך אפשרות לספק לוקאלים קיימים לפי בקשת המשתמש.
באמצעות אחזור הלוקאלים מהאחסון המותאם אישית והעברת הלוקאלים אל
AppCompatDelegate.setApplicationLocales()
הטמעה באמצעות ממשקי Android framework API
אנחנו ממליצים מאוד להשתמש בספריית התמיכה של AndroidX כדי
להטמיע בוחרי שפה באפליקציה, אפשר גם להשתמש
setApplicationLocales()
ו-getApplicationLocales()
שיטות ב-Android 13 למכשירים עם Android 13.
לדוגמה, כדי להגדיר את השפה המועדפת של משתמש, צריך לבקש מהמשתמש בוחרים לוקאל בכלי לבחירת שפה ואז מגדירים את הערך הזה במערכת:
// 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
כדי לבדוק מהי השפה המועדפת הנוכחית של המשתמש להצגה בכלי לבחירת שפה: האפליקציה יכולה להחזיר את הערך מהמערכת:
// 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
שיטות מומלצות נוספות
כדאי ליישם את השיטות המומלצות הבאות.
שימוש בשפה כשמפעילים כוונת רכישה באפליקציה אחרת
כוונת רכישה ממוקדת שפה עשויה לאפשר לך לציין את השפה שבה ברצונך להשתמש
הופעלה באפליקציה. אחת הדוגמאות לכך היא
EXTRA_LANGUAGE
מממשק ה-API של זיהוי הדיבור.
כדאי להשתמש בכותרת Accept-Language בכרטיסייה 'התאמה אישית' ב-Chrome
כדאי להוסיף את הכותרת Accept-Language
דרך Browser.EXTRA_HEADERS
כדי לפתוח דף אינטרנט בשפה של האפליקציה כשמפעילים כרטיסייה בהתאמה אישית ב-Chrome.
אם מסירים את העדפות השפה לכל אפליקציה בהגדרות המערכת, צריך לאפס את הלוקאל של האפליקציה ללוקאל של המערכת
אם מסירים את העדפות השפה של האפליקציה מהגדרות המערכת (על ידי הסרה של
android:localeConfig
מ-AndroidManifest.xml
של האפליקציה), המשתמשים לא יכולים
לאפס בקלות את שפת האפליקציה בחזרה לברירת המחדל של המערכת.
לכן, אם מסירים את android:localeConfig
, כדאי לאפס את
לוקאל האפליקציה ללוקאל של המערכת באמצעות
LocaleListCompat.getEmptyLocaleList()
או
LocaleList.getEmptyLocaleList()
כפי שאפשר לראות בקטע הקוד הבא:
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());
מקורות מידע נוספים
לקבלת מידע נוסף, אפשר לעיין בדוגמאות הקוד, במאמרי הבלוגים ובסרטונים שלנו.
- בלוג בנושא העדפות שפה לכל אפליקציה – חלק 1
- בלוג בנושא העדפות שפה לכל אפליקציה – חלק 2
- אפליקציות לדוגמה
- סרטון על יצירת עולם מרובה שפות
קובץ locale_config.xml לדוגמה
כברירת מחדל, Android כולל תרגומים ברמת המערכת ב-Android Open
פרויקט מקור (AOSP) עבור קבוצה סטנדרטית של הלוקאלים הנפוצים ביותר.
בקובץ locale_config.xml
לדוגמה שכלול בקטע הזה אפשר לראות
הפורמט המוצע לכל אחד מהלוקאלים האלה. אפשר להפנות לקובץ לדוגמה הזה כדי לקבל עזרה
אתם יוצרים קובץ locale_config.xml
משלכם לקבוצת השפות
שהאפליקציה תומכת בהם.
<?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>