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