إعدادات اللغة المخصصة حسب التطبيقات

اللغات المخصّصة حسب التطبيقات في إعدادات النظام

في كثير من الحالات، يضبط المستخدمون متعددو اللغات لغة النظام على لغة واحدة، مثل مثل الإنجليزية - ولكنه يريد تحديد لغات أخرى لتطبيقات معينة، مثل الهولندية أو الصينية أو الهندية. لمساعدة التطبيقات في توفير تجربة أفضل لهذه التطبيقات للمستخدمين، يقدّم Android 13 الميزات التالية للتطبيقات المتوافقة لغات متعددة:

  • إعدادات النظام: موقع مركزي يمكن للمستخدمين من خلاله اختيار اللغة المفضلة في كل تطبيق.

    يمكنك ضبط تطبيقك لإنشاء الملفات المطلوبة تتيح إعدادات اللغة المخصّصة حسب التطبيقات وتظهر في إعدادات النظام. إلى لمعرفة المزيد، راجع تعليمات تفعيل إتاحة اللغات لكل تطبيق تلقائيًا

  • واجهات برمجة التطبيقات الإضافية: واجهات برمجة التطبيقات العامة هذه، مثل setApplicationLocales() أو getApplicationLocales() طرق في LocaleManager، تتيح للتطبيقات ضبط لغة مختلفة عن لغة النظام في وقت التشغيل

    تتم مزامنة واجهات برمجة التطبيقات هذه تلقائيًا مع إعدادات النظام، وبالتالي، فإن التطبيقات التي تستخدم من خلال واجهات برمجة التطبيقات هذه لإنشاء أدوات اختيار اللغة المخصّصة داخل التطبيق، ستضمن للمستخدمين تجربة مستخدم متسقة بغض النظر عن المكان الذي يختارونه الإعدادات المفضّلة للّغة. كما تساعدك واجهات برمجة التطبيقات العامة في تقليل حجم رموز نموذجية، وهي تتوافق مع حِزم APK المجزّأة وتسمح أيضًا باستخدام ميزة التحميل التلقائي التطبيقات لتخزين لغة المستخدم على مستوى التطبيق الإعدادات.

    للتوافق مع الأنظمة القديمة مع إصدارات Android السابقة، واجهات برمجة تطبيقات مكافئة متوفرة أيضًا في AndroidX ومع ذلك، يمكن استخدام واجهات برمجة التطبيقات المتوافقة مع الأنظمة القديمة مع سياق AppCompatActivity، وليس سياق التطبيق على نظام Android 12 (المستوى 32 لواجهة برمجة التطبيقات) والإصدارات الأقدم يمكنك الوصول إلى واجهات برمجة التطبيقات المتوافقة مع الأنظمة القديمة باستخدام Appcompat 1.6.0 أو أعلى.

نظرة عامة على تطبيق هذه الميزة

يعرض الجدول التالي عمليات التنفيذ المقترَحة استنادًا إلى الاستخدامات المختلفة. الحالات.

حالة الاستخدام عمليات التنفيذ المقترَحة
لا يحتوي تطبيقك على أداة اختيار اللغة داخل التطبيق
  1. يمكنك تفعيل التوافق التلقائي للغات حسب التطبيق لإنشاء ملف واحد (LocaleConfig) وإضافة لغات تطبيقك إلى النظام الإعدادات.
  2. إذا أردت إضافة أداة اختيار اللغة داخل التطبيق، يمكنك استخدام مكتبة AndroidX والاشتراك في تنفيذ واجهة برمجة التطبيقات للدعم للخلف التوافق من خلال autoStoreLocales.
يحتوي تطبيقك على أداة اختيار اللغة داخل التطبيق.
  1. يمكنك تفعيل التوافق التلقائي للغات حسب التطبيق لإنشاء ملف واحد (LocaleConfig) وإضافة لغات تطبيقك إلى النظام الإعدادات.
  2. انقل المنطق المخصّص لتطبيقك لاستخدام وواجهات برمجة تطبيقات عامة لضمان ظهور علامة تجربة متسقة.
  3. التعامل مع الحافظات التالية للزوايا:
    1. طلب AppCompatDelegate.setApplicationLocales() عندما يتم تشغيل تطبيقك لأول مرة على جهاز يعمل بنظام التشغيل Android 13.
    2. الاتصال بـ AppCompatDelegate.setApplicationLocales() من أجل توفير لغات موجودة مسبقًا طلبها المستخدم للنظام في الحالات التالية:

إعدادات النظام للمستخدمين

بدءًا من Android 13، يشمل Android موقعًا مركزيًا في النظام إعدادات ضبط الإعدادات المفضّلة للّغة لكل تطبيق لضمان اللغات يمكن ضبطها في إعدادات النظام على الأجهزة التي تعمل بنظام التشغيل Android 13 أو أعلى، يمكن تفعيل دعم اللغة تلقائيًا لكل تطبيق (يُنصح به) أو ضبط عن الدعم يدويًا.

تفعيل التوافق التلقائي للغات حسب التطبيق

بدءًا من Android Studio Giraffe والإصدار AGP 8.1، يمكنك ضبط التطبيق على إتاحة لغة حسب التطبيق الإعدادات المفضّلة تلقائيًا. استنادًا إلى موارد مشروعك، ينشئ AGP ملف LocaleConfig وإضافة إشارة إليه في ملف البيان النهائي، بحيث لا يمكنك يتعين عليك القيام بذلك يدويًا. يستخدم AGP الموارد المتوفرة في res من مجلدات تطبيقك والوحدات وأي تبعيات لوحدة المكتبة لتحديد اللغات المراد تضمينها في ملف LocaleConfig. وهذا يعني أنك إذا قمت بإضافة موارد لمشروع جديد إلى تطبيقك، فلا داعي للقلق بشأن تحديث LocaleConfig الملف.

ملاحظة: إنّ ميزة تحديد اللغات المخصّصة حسب التطبيق تتوافق مع التطبيقات التي تعمل بنظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات) أو أعلى. لاستخدام هذه الميزة، يجب تعيين compileSdkVersion إلى 33 أو أعلى. لضبط إعدادات اللغة المخصّصة حسب التطبيقات في الإصدارات السابقة من Android، لا يزال عليك استخدام واجهات برمجة التطبيقات وأدوات اختيار اللغة داخل التطبيق.

لتفعيل التوافق التلقائي للغات حسب التطبيق، عليك اتّباع الخطوات التالية:

  1. لتفعيل هذه الميزة، استخدِم generateLocaleConfig. في الكتلة androidResources {} على مستوى الوحدة ملف build.gradle.kts (ملف build.gradle إذا كنت باستخدام Groovy). تكون هذه الميزة غير مفعّلة تلقائيًا.

    Kotlin

        android {
          androidResources {
            generateLocaleConfig = true
          }
        }
        

    Groovy

        android {
          androidResources {
            generateLocaleConfig true
          }
        }
        
  2. حدد اللغة التلقائية:
    1. في مجلد res الخاص بوحدة التطبيق، أنشِئ ملفًا جديدًا باسم resources.properties
    2. في ملف 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 إشارات دخول تفيد بأنّه يجب ألّا يتمكّن المستخدمون من ضبط لغة تطبيقك بشكل مستقل عن لغة نظامهم ضمن إعدادات النظام.

يُرجى اتّباع الخطوات التالية لإضافة اللغات المتاحة في تطبيقك يدويًا إلى إعدادات نظام المستخدم:

  1. أنشئ ملفًا باسم 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>
    
  2. في البيان، أضِف سطرًا يشير إلى هذا الملف الجديد:

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