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

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

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

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

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

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

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

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

نظرة عامة على تنفيذ هذه الميزة

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

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

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

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

تفعيل ميزة "اللغة المخصّصة حسب التطبيق" التلقائية

هذه هي الطريقة المقترَحة لإضافة ميزة "اللغة المخصّصة حسب التطبيق" إلى تطبيقاتك، لأنّها لا تتطلّب إجراء تعديلات على ملف XML.

بدءًا من استوديو Android 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
      }
    }

أنيق

  android {
    androidResources {
      generateLocaleConfig true
    }
  }
  1. حدِّد لغة تلقائية:
    1. في مجلد res لوحدة التطبيق، أنشِئ ملفًا جديدًا باسم resources.properties.
    2. في ملف resources.properties، اضبط اللغة التلقائية باستخدام التصنيف unqualifiedResLocale. لتنسيق أسماء اللغات، يُرجى الاطّلاع على كيفية إنشاء أسماء اللغات.

يضيف AGP هذه اللغة التلقائية وأي لغات بديلة حدّدتها، باستخدام values-* أدلة في مجلد res، إلى ملف LocaleConfig الذي تم إنشاؤه تلقائيًا.

كيفية إنشاء أسماء اللغات

لإنشاء أسماء اللغات، اجمِع رمز اللغة مع رموز النص البرمجي والمنطقة الاختيارية، مع الفصل بين كل منها بشرطة:

  • اللغة: استخدِم رمز ISO 639-2 المكوّن من حرفَين أو ثلاثة أحرف.
  • النص البرمجي (اختياري): استخدِم الـ ISO 15924 رمز.
  • المنطقة (اختياري): استخدِم إما رمز ISO 3166-1-alpha-2 المكوّن من حرفَين أو رمز UN_M.49 المكوّن من ثلاثة أرقام.

على سبيل المثال، إذا كانت اللغة التلقائية هي الإنجليزية الأمريكية:

unqualifiedResLocale=en-US

استخدِم android:localeConfig لإضافة اللغات المتاحة إلى إعدادات النظام

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

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

  1. أنشِئ ملفًا باسم res/xml/locale_config.xml وحدِّد لغات تطبيقك، بما في ذلك اللغة الاحتياطية النهائية لتطبيقك، وهي اللغة المحدّدة في res/values/strings.xml.

    يُرجى الاطّلاع على كيفية إنشاء أسماء اللغات لمعرفة متطلبات التنسيق. يُرجى الاطّلاع أيضًا على نموذج 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="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/locale_config">
        </application>
    </manifest>
    

يمكنك تعديل localeConfig لتطبيقك ديناميكيًا باستخدام LocaleManager.setOverrideLocaleConfig لتخصيص مجموعة اللغات المعروضة في قائمة اللغة المخصّصة حسب التطبيق في "إعدادات Android". يتيح لك ذلك تخصيص قائمة اللغات حسب المنطقة، وإجراء تجارب أ/ب، وتوفير لغات معدَّلة إذا كان تطبيقك يستخدم عمليات إرسال الترجمة الفورية من جهة الخادم كما هو موضّح في المثال التالي:

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

بالإضافة إلى ذلك، يمكن الآن لمحرّرات طرق الإدخال استخدام LocaleManager.getApplicationLocales لمعرفة لغة واجهة المستخدم للتطبيق الحالي من أجل تعديل لغة لوحة المفاتيح كما هو موضّح:

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

تحديد اللغات المتاحة في Gradle

إذا لم تكن اللغات نفسها محدّدة من قبل، حدِّدها باستخدام السمة resourceConfigurations في ملف build.gradle على مستوى وحدة تطبيقك:

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

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

كيفية اختيار المستخدمين للغة تطبيق في إعدادات النظام

يمكن للمستخدمين اختيار اللغة المفضّلة لكل تطبيق من خلال إعدادات النظام. يمكنهم الوصول إلى هذه الإعدادات بطريقتَين مختلفتَين:

  • الوصول من خلال إعدادات النظام

    الإعدادات > النظام > اللغات والإدخال > لغات التطبيقات > (اختَر تطبيقًا)

  • الوصول من خلال إعدادات التطبيقات

    الإعدادات > التطبيقات > (اختَر تطبيقًا) > اللغة

التعامل مع أدوات اختيار اللغة داخل التطبيق

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

التنفيذ باستخدام Jetpack Compose

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

لضمان التوافق مع الأنظمة القديمة مع الإصدار Android 12 (مستوى واجهة برمجة التطبيقات 32) والإصدارات الأقدم، ننصحك بشدة باستخدام مكتبة دعم AndroidX (AppCompatDelegate) عند تنفيذ أداة اختيار اللغة داخل التطبيق. إذا كنت تستخدم هذا النهج، يجب أن يوسّع النشاط الذي يستضيف واجهة مستخدم Compose نطاق AppCompatActivity. ومع ذلك، يمكنك أيضًا تنفيذ واجهات برمجة تطبيقات إطار العمل مباشرةً إذا لزم الأمر.

يوضّح مقتطف الرمز التالي مثالاً على كيفية قراءة لغة التطبيق الحالية وضبط لغة جديدة ضمن دالة مركّبة:

import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.core.os.LocaleListCompat

@Composable
fun LanguageSelector() {
    // Retrieve the currently configured app locale.
    // If no app-specific locale is set, LocaleListCompat.get(0) returns null,
    // so we safely fall back to a default (e.g., "en").
    val appLocales = AppCompatDelegate.getApplicationLocales()
    val currentLocaleTag = appLocales.get(0)?.toLanguageTag() ?: "en"

    // Example UI: A button to toggle between English and Spanish
    Button(
        onClick = {
            val newLanguageTag = if (currentLocaleTag == "en") "es" else "en"
            val localeList = LocaleListCompat.forLanguageTags(newLanguageTag)

            // Setting the locale re-creates the Activity by default,
            // which automatically applies the new configuration to Compose.
            AppCompatDelegate.setApplicationLocales(localeList)
        }
    ) {
        Text(
            text = if (currentLocaleTag == "en") "Switch to Spanish" else "Switch to English"
        )
    }
}

لضبط اللغة المفضّلة للمستخدم، عليك أن تطلب من المستخدم اختيار لغة في أداة اختيار اللغة، ثم ضبط هذه القيمة في النظام:

val appLocale: LocaleListCompat = 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 في تطبيقك، كما هو موضّح في مقتطف الرمز التالي:

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

يوضّح مقتطف الرمز التالي كيفية ضبط اللغة المفضّلة للمستخدم والحصول عليها باستخدام خدمة تابعة لنظام التشغيل LocaleManager:

import android.app.LocaleManager
import android.content.Context
import android.os.Build
import android.os.LocaleList
import androidx.annotation.RequiresApi
import java.util.Locale

@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun setAppLanguage(context: Context, languageTag: String) {
    // 1. Retrieve the system service
    val localeManager = context.getSystemService(LocaleManager::class.java)

    // 2. Create a LocaleList from the language tag (e.g., "es-ES" or "ja")
    val localeList = LocaleList(Locale.forLanguageTag(languageTag))

    // 3. Set the locale. The system automatically updates the locale and
    // restarts the app, including any necessary configuration updates.
    localeManager.applicationLocales = localeList
}

@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun getAppLanguage(context: Context): String {
    val localeManager = context.getSystemService(LocaleManager::class.java)
    val currentLocales = localeManager.applicationLocales

    // Return the primary app locale, or fall back to the system default
    return if (!currentLocales.isEmpty) {
        currentLocales.get(0).toLanguageTag()
    } else {
        Locale.getDefault().toLanguageTag()
    }
}

المزيد من أفضل الممارسات

يُرجى العِلم بأفضل الممارسات التالية.

مراعاة اللغة عند استدعاء هدف في تطبيق آخر

قد تسمح لك الأهداف التي تركّز على اللغة بتحديد اللغة التي تريد أن يكون عليها التطبيق الذي تم استدعاؤه. من الأمثلة على ذلك ميزة EXTRA_LANGUAGE من الـ Speech Recognizer API.

مراعاة عنوان Accept-Language لعلامة التبويب المخصّصة في Chrome

ننصحك بإضافة عنوان Accept-Language من خلال Browser.EXTRA_HEADERS لفتح صفحة ويب بلغة تطبيقك عند استدعاء علامة تبويب مخصّصة في Chrome.

إذا أزلت إعدادات اللغة المخصصة حسب التطبيقات ضمن إعدادات النظام، أعِد ضبط لغة تطبيقك على لغة النظام

إذا أزلت الإعدادات المفضّلة للغة تطبيقك من إعدادات النظام (من خلال إزالة android:localeConfig من AndroidManifest.xml لتطبيقك)، لن يتمكّن المستخدمون من إعادة ضبط لغة التطبيق بسهولة على اللغة التلقائية للنظام.

لهذا السبب، إذا أزلت android:localeConfig، ننصحك بإعادة ضبط لغة التطبيق على لغة النظام باستخدام LocaleListCompat.getEmptyLocaleList أو LocaleList.getEmptyLocaleList كما هو موضّح في مقتطف الرمز التالي:

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

نموذج ملف locale_config.xml

يتضمّن Android تلقائيًا ترجمات على مستوى النظام في Android Open Source Project (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>

مراجع إضافية

يُرجى الاطّلاع على نماذج الرموز ومقالات المدونة والفيديوهات لمزيد من المعلومات.