في كثير من الحالات، يحدِّد المستخدمون متعددو اللغات لغة واحدة للنظام، مثل الإنجليزية، لكنّهم يريدون اختيار لغات أخرى لتطبيقات معيّنة، مثل الهولندية أو الصينية أو الهندية. لمساعدة التطبيقات على توفير تجربة أفضل لهؤلاء المستخدمين، يقدم Android 13 الميزات التالية للتطبيقات التي تدعم لغات متعددة:
إعدادات النظام: موقع مركزي يمكن للمستخدمين فيه اختيار لغة مفضَّلة لكل تطبيق.
يمكنك تهيئة تطبيقك لإنشاء الملفات المطلوبة تلقائيًا للتوافق مع تفضيلات اللغة لكل تطبيق وعرضها في إعدادات النظام. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على تعليمات تفعيل الدعم التلقائي للغات حسب التطبيقات.
واجهات برمجة التطبيقات الإضافية: تتيح واجهات برمجة التطبيقات العامة هذه، مثل طريقتَي
setApplicationLocales()
وgetApplicationLocales()
فيLocaleManager
، السماح للتطبيقات بضبط لغة مختلفة عن لغة النظام في وقت التشغيل.تتم مزامنة واجهات برمجة التطبيقات هذه تلقائيًا مع إعدادات النظام، وبالتالي، ستضمن التطبيقات التي تستخدم واجهات برمجة التطبيقات هذه لإنشاء أدوات اختيار لغة مخصّصة داخل التطبيقات أن يحصل المستخدمون على تجربة متسقة للمستخدمين بغض النظر عن مكان اختيار إعدادات اللغة المفضّلة. وتساعد واجهات برمجة التطبيقات العامة أيضًا في تقليل كمية الرموز النموذجية، كما أنها تتوافق مع حِزم APK المجزأة، وتتيح أيضًا ميزة الاحتفاظ التلقائي بنسخة احتياطية للتطبيقات لتخزين إعدادات لغة المستخدم على مستوى التطبيق.
للتوافق مع الأنظمة القديمة مع إصدارات Android السابقة، تتوفّر أيضًا واجهات برمجة التطبيقات المكافئة في AndroidX. ومع ذلك، تعمل واجهات برمجة التطبيقات المتوافقة مع الأنظمة القديمة مع سياق AppCompatActivity، وليس سياق التطبيق، على نظام التشغيل Android 12 (المستوى 32 من واجهة برمجة التطبيقات) والإصدارات الأقدم. يمكنك الوصول إلى واجهات برمجة التطبيقات المتوافقة مع الأنظمة القديمة باستخدام Appcompat 1.6.0 أو إصدار أحدث.
نظرة عامة حول استخدام هذه الميزة
يعرض الجدول التالي عمليات التنفيذ المقترَحة استنادًا إلى حالات الاستخدام المختلفة.
حالة الاستخدام | عمليات التنفيذ المقترَحة |
---|---|
لا يحتوي تطبيقك على أداة اختيار اللغة. |
|
يحتوي تطبيقك حاليًا على أداة اختيار اللغة. |
|
إعدادات النظام للمستخدمين
بدءًا من نظام التشغيل Android 13، يتضمّن Android موقعًا مركزيًا في إعدادات النظام لضبط الإعدادات المفضّلة للغة حسب التطبيقات. لضمان إمكانية ضبط لغات تطبيقك في إعدادات النظام على الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android 13 أو الإصدارات الأحدث، يمكنك تفعيل إتاحة اللغات التلقائية حسب التطبيقات (إجراء يُنصح به) أو ضبط الدعم يدويًا.
تفعيل إتاحة اللغات التلقائية حسب التطبيقات
بدءًا من إصدار Android Studio Giraffe والإصدار 8.1 من AGP، يمكنك إعداد تطبيقك
ليتوافق مع الإعدادات المفضّلة للّغة حسب التطبيق
تلقائيًا. استنادًا إلى موارد مشروعك، ينشئ AGP ملف LocaleConfig
ويضيف مرجعًا إليه في ملف البيان النهائي، وبذلك لن تضطر إلى إجراء ذلك يدويًا. يستخدم AGP الموارد في مجلدات res
بوحدات تطبيقك وأي تبعيات لوحدات المكتبة لتحديد اللغات التي يجب تضمينها في ملف LocaleConfig
. ويعني هذا أنّه في حال إضافة موارد للغة جديدة إلى التطبيق، لن يكون هناك داعٍ للقلق بشأن تحديث ملف LocaleConfig
.
يُرجى العِلم أنّ ميزة اللغة التلقائية المخصّصة حسب التطبيقات تتوافق مع التطبيقات التي تعمل بالإصدار 13 من نظام التشغيل Android
13 (المستوى 33 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. لاستخدام الميزة، يجب ضبط
compileSdkVersion
على 33 أو أعلى. لضبط إعدادات اللغة المخصّصة حسب التطبيقات للإصدارات السابقة من Android،
لا تزال بحاجة إلى
استخدام واجهات برمجة التطبيقات وأداة اختيار اللغة داخل التطبيقات.
لتفعيل إتاحة اللغات تلقائيًا حسب التطبيقات، اتّبِع الخطوات التالية:
- لتفعيل الميزة، استخدِم الإعداد
generateLocaleConfig
في المجموعةandroidResources {}
من ملفbuild.gradle.kts
على مستوى الوحدة (ملفbuild.gradle
إذا كنت تستخدم تطبيق Groovy). تكون الميزة غير مفعَّلة تلقائيًا.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
لإضافة اللغات المتاحة إلى إعدادات النظام.
يمكنك ضبط إعدادات تطبيقك يدويًا للتأكّد من إمكانية ضبط لغاته في
إعدادات النظام على الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث. لتنفيذ ذلك، أنشِئ ملف
locales_config
بتنسيق XML وأضِفه إلى ملف البيان لتطبيقك باستخدام
السمة android:localeConfig
. إنّ تجاهل إشارات إدخال بيان android:localeConfig
التي تفيد بأنّ المستخدمين يجب ألا يتمكّنوا من ضبط لغة تطبيقك بشكل مستقل عن لغة النظام ضمن إعدادات النظام
لإضافة اللغات التي يتيحها تطبيقك يدويًا إلى إعدادات نظام المستخدم:
أنشئ ملفًا باسم
res/xml/locales_config.xml
وحدِّد لغات تطبيقك، بما في ذلك اللغة الاحتياطية النهائية لتطبيقك، وهي اللغة المحدّدة في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. ويتيح لك ذلك تخصيص قائمة اللغات لكل منطقة وإجراء تجارب أ/ب وتوفير لغات محلية محدَّثة إذا كان تطبيقك يستخدم عمليات الأقلمة من جهة الخادم كما هو موضَّح في المثال التالي:
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
، لا يضمِّن نظام التصميم سوى مورد اللغة في حزمة APK لهذه اللغات المحدّدة، ما يمنع تضمين السلاسل النصية المترجَمة من المكتبات الأخرى التي قد تتوافق مع اللغات التي لا يتوافق معها تطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على
تحديد اللغات التي يتوافق معها تطبيقك.
كيفية اختيار المستخدمين للغة التطبيق في إعدادات النظام
يمكن للمستخدمين اختيار لغتهم المفضّلة لكل تطبيق من خلال إعدادات النظام. ويمكن للمستخدمين الوصول إلى هذه الإعدادات بطريقتين مختلفتين:
الوصول من خلال إعدادات النظام
الإعدادات > النظام > اللغات والإدخال > لغات التطبيق > (اختيار تطبيق)
الوصول من خلال إعدادات التطبيقات
الإعدادات > التطبيقات > (اختيار تطبيق) > اللغة
التعامل مع أدوات اختيار اللغة داخل التطبيق
بالنسبة إلى التطبيقات التي تتضمّن أداة اختيار لغة داخل التطبيق أو تريد استخدامها، استخدِم واجهات برمجة التطبيقات العامة بدلاً من منطق التطبيق المخصص لمعالجة الإعدادات والحصول على اللغة المفضّلة للمستخدم في تطبيقك. وإذا كنت تستخدم واجهات برمجة التطبيقات العامة لأداة اختيار اللغة داخل التطبيق، يتم تعديل إعدادات نظام الجهاز تلقائيًا لمطابقة اللغة التي يختارها المستخدم من خلال التجربة داخل التطبيق.
للتوافق مع الأنظمة القديمة مع إصدارات Android السابقة، ننصحك بشدة باستخدام مكتبة دعم AndroidX عند تنفيذ أداة اختيار اللغة داخل التطبيق. ويمكنك أيضًا تنفيذ واجهات برمجة التطبيقات لإطار العمل مباشرةً إذا كنت بحاجة إلى ذلك.
التنفيذ باستخدام مكتبة دعم AndroidX
استخدِم طريقتَي setApplicationLocales()
وgetApplicationLocales()
في Appcompat 1.6.0
أو الإصدارات الأحدث. تجدر الإشارة إلى أنّ واجهات برمجة التطبيقات المتوافقة مع الأنظمة القديمة تعمل مع سياق AppCompatActivity،
وليس مع سياق التطبيق، على الأجهزة التي تعمل بالإصدار 12 من نظام Android (المستوى 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()
لاسترداد اللغة المفضَّلة للمستخدم. يمكن أن يكون المستخدم قد اختار لغة تطبيقه من إعدادات النظام أو من أداة اختيار اللغة داخل التطبيق.
دعم الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم
للتوافق مع الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android (المستوى 32 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، اطلب من
AndroidX معالجة تخزين اللغة عن طريق ضبط قيمة autoStoreLocales
على
true
وandroid:enabled
على false
في إدخال البيان لخدمة
AppLocalesMetadataHolderService
لتطبيقك، كما هو موضّح في مقتطف
الرمز التالي:
<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 (المستوى 32 لواجهة برمجة التطبيقات) أو إصدار أقدم.
إذا كان لتطبيقك موقع تخزين لغة مخصص، ننصحك باستخدام عملية تبديل لمرة واحدة
بين حل تخزين اللغة المخصص وautoStoreLocales
حتى يستمر
المستخدمون في الاستمتاع بالتطبيق باللغة التي يفضلونها. ينطبق ذلك بشكل خاص في الحالات التي يتم فيها تشغيل تطبيقك لأول مرة بعد ترقية الجهاز إلى Android 13. في هذه الحالة، يمكنك توفير رموز محلية سبق أن طلبها المستخدم
من خلال استرداد اللغات من مساحة التخزين المخصّصة وتمريرها إلى AppCompatDelegate.setApplicationLocales()
.
التنفيذ باستخدام واجهات برمجة التطبيقات لإطار عمل Android
على الرغم من أنّنا ننصح بشدة باستخدام مكتبة الدعم الخاصة بـ AndroidX لتنفيذ أدوات اختيار اللغة داخل التطبيقات، يمكنك أيضًا استخدام الطريقتَين
setApplicationLocales()
وgetApplicationLocales()
في إطار عمل Android على الأجهزة التي تعمل بنظام التشغيل 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
من واجهة برمجة التطبيقات Speech Recognizer API.
ضع في الاعتبار العنوان Accept-Language لعلامة التبويب Chrome Custom
يمكنك إضافة Accept-Language Header
من خلال Browser.EXTRA_HEADERS
لفتح صفحة ويب بلغة تطبيقك عند استدعاء علامة تبويب Chrome Custom (علامة تبويب Chrome Custom).
في حال إزالة إعدادات اللغة المخصّصة حسب التطبيقات من إعدادات النظام، عليك إعادة ضبط لغة التطبيق على لغة النظام.
إذا أزلت إعدادات اللغة المفضّلة في تطبيقك من إعدادات النظام (من خلال إزالة 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());
مراجع إضافية
راجع نماذج التعليمات البرمجية ومقالات المدونة ومقاطع الفيديو للحصول على معلومات إضافية.
- مدونة الإعدادات المفضّلة للغة لكل تطبيق
- مدونة الإعدادات المفضّلة للغة لكل تطبيق
- نماذج تطبيقات
- فيديو حول إنشاء التطبيقات لعالم متعدد اللغات
نموذج ملف locale_config.xml
يتضمّن Android تلقائيًا ترجمات على مستوى النظام في "المشروع المفتوح المصدر لنظام Android" (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>