اولویت‌های زبان برای هر برنامه، اولویت‌های زبان برای هر برنامه، اولویت‌های زبان برای هر برنامه، اولویت‌های زبان برای هر برنامه

زبان های هر برنامه در تنظیمات سیستم

در بسیاری از موارد، کاربران چند زبانه، زبان سیستم خود را روی یک زبان - مانند انگلیسی - تنظیم می‌کنند، اما می‌خواهند زبان‌های دیگری را برای برنامه‌های خاص مانند هلندی، چینی یا هندی انتخاب کنند. برای کمک به برنامه‌ها برای ارائه تجربه بهتر برای این کاربران، Android 13 ویژگی‌های زیر را برای برنامه‌هایی که از چندین زبان پشتیبانی می‌کنند معرفی می‌کند:

  • تنظیمات سیستم : یک مکان متمرکز که در آن کاربران می توانند زبان مورد نظر را برای هر برنامه انتخاب کنند.

    می‌توانید برنامه‌تان را طوری پیکربندی کنید که فایل‌های مورد نیاز برای پشتیبانی از اولویت‌های زبان هر برنامه را به‌طور خودکار تولید کند و در تنظیمات سیستم نمایش داده شود. برای کسب اطلاعات بیشتر، دستورالعمل‌های فعال کردن پشتیبانی خودکار زبان برای هر برنامه را ببینید.

  • APIهای اضافی : این APIهای عمومی، مانند متدهای setApplicationLocales() و getApplicationLocales() در LocaleManager ، به برنامه ها اجازه می دهند زبانی متفاوت از زبان سیستم را در زمان اجرا تنظیم کنند.

    این APIها به طور خودکار با تنظیمات سیستم همگام می شوند. بنابراین، برنامه‌هایی که از این APIها برای ایجاد انتخاب‌کننده‌های زبان درون‌برنامه‌ای سفارشی استفاده می‌کنند، اطمینان حاصل می‌کنند که کاربرانشان بدون توجه به جایی که ترجیحات زبان خود را انتخاب می‌کنند، تجربه کاربری ثابتی دارند. APIهای عمومی همچنین به شما کمک می‌کنند تا مقدار کد دیگ بخار را کاهش دهید، از APK‌های تقسیم‌شده پشتیبانی می‌کنند، و از پشتیبان‌گیری خودکار برای برنامه‌ها برای ذخیره تنظیمات زبان کاربر در سطح برنامه پشتیبانی می‌کنند.

    برای سازگاری با نسخه های قبلی اندروید، API های معادل در AndroidX نیز موجود است. با این حال، API های سازگار با عقب با زمینه AppCompatActivity، نه با زمینه برنامه، برای Android 12 (سطح API 32) و قبل از آن کار می کنند. با Appcompat 1.6.0 یا بالاتر به APIهای سازگار با عقب دسترسی داشته باشید.

مروری بر پیاده سازی این ویژگی

جدول زیر پیاده سازی های توصیه شده را بر اساس موارد استفاده مختلف نشان می دهد.

مورد استفاده اجرای پیشنهادی
برنامه شما انتخابگر زبان درون برنامه ای ندارد
  1. برای ایجاد فایل LocaleConfig و افزودن زبان های برنامه خود به تنظیمات سیستم، پشتیبانی خودکار زبان هر برنامه را فعال کنید.
  2. در صورت تمایل، اگر می‌خواهید یک انتخابگر زبان درون برنامه‌ای اضافه کنید: از کتابخانه AndroidX استفاده کنید و اجرای API ما را انتخاب کنید تا از سازگاری به عقب از طریق autoStoreLocales پشتیبانی کنید.
برنامه شما از قبل یک انتخابگر زبان درون برنامه ای دارد
  1. برای ایجاد فایل LocaleConfig و افزودن زبان های برنامه خود به تنظیمات سیستم، پشتیبانی خودکار زبان هر برنامه را فعال کنید.
  2. منطق سفارشی برنامه خود را برای استفاده از APIهای عمومی تغییر دهید تا اطمینان حاصل کنید که کاربران یک تجربه ثابت را مشاهده می کنند.
  3. موارد گوشه زیر را مدیریت کنید:
    1. اولین باری که برنامه شما روی دستگاهی که Android 13 دارد اجرا می شود، AppCompatDelegate.setApplicationLocales() را فراخوانی کنید.
    2. با AppCompatDelegate.setApplicationLocales() تماس بگیرید تا برای موارد زیر، محلی‌های درخواستی کاربر از قبل موجود را به سیستم ارائه دهید:

تنظیمات سیستم برای کاربران

با شروع اندروید 13، اندروید دارای یک مکان متمرکز در تنظیمات سیستم برای تنظیم تنظیمات برگزیده زبان هر برنامه است. برای اطمینان از اینکه زبان‌های برنامه‌تان در تنظیمات سیستم در دستگاه‌های دارای Android 13 یا بالاتر قابل پیکربندی هستند، پشتیبانی خودکار زبان برای هر برنامه را فعال کنید (توصیه می‌شود) یا پشتیبانی را به صورت دستی پیکربندی کنید .

پشتیبانی خودکار زبان برای هر برنامه را فعال کنید

با شروع Android Studio Giraffe و AGP 8.1، می‌توانید برنامه خود را به گونه‌ای پیکربندی کنید که از تنظیمات برگزیده زبان هر برنامه به‌طور خودکار پشتیبانی کند. بر اساس منابع پروژه شما، AGP فایل LocaleConfig را تولید می کند و یک مرجع به آن در فایل مانیفست نهایی اضافه می کند، بنابراین دیگر نیازی به انجام دستی آن ندارید. AGP از منابع موجود در پوشه‌های res ماژول‌های برنامه شما و هر وابستگی ماژول کتابخانه‌ای برای تعیین مکان‌های گنجاندن در فایل LocaleConfig استفاده می‌کند. این بدان معناست که اگر منابعی را برای یک زبان جدید به برنامه خود اضافه کنید، لازم نیست نگران به روز رسانی فایل LocaleConfig باشید.

توجه داشته باشید که ویژگی خودکار زبان هر برنامه از برنامه‌هایی پشتیبانی می‌کند که Android 13 (سطح API 33) یا بالاتر را اجرا می‌کنند. برای استفاده از این ویژگی، باید compileSdkVersion روی 33 یا بالاتر تنظیم کنید. برای پیکربندی تنظیمات برگزیده زبان هر برنامه برای نسخه‌های قبلی Android، همچنان باید از APIها و انتخاب‌کننده‌های زبان درون‌برنامه استفاده کنید .

برای فعال کردن پشتیبانی خودکار زبان برای هر برنامه، این مراحل را دنبال کنید:

  1. برای روشن کردن این ویژگی، از تنظیمات generateLocaleConfig در بلوک androidResources {} فایل build.gradle.kts در سطح ماژول استفاده کنید (اگر از Groovy استفاده می کنید فایل build.gradle ). این ویژگی به طور پیش فرض خاموش است.

    کاتلین

        android {
          androidResources {
            generateLocaleConfig = true
          }
        }
        

    شیار

        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 یا بالاتر قابل پیکربندی هستند. برای انجام این کار، یک فایل XML locales_config ایجاد کنید و آن را با استفاده از ویژگی android:localeConfig به مانیفست برنامه خود اضافه کنید. حذف ورود مانیفست android:localeConfig سیگنال هایی را نشان می دهد که کاربران نباید بتوانند زبان برنامه شما را مستقل از زبان سیستم خود در تنظیمات سیستم خود تنظیم کنند.

برای افزودن دستی زبان های پشتیبانی شده برنامه خود به تنظیمات سیستم کاربر:

  1. فایلی به نام 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>
    
  2. در مانیفست، یک خط به این فایل جدید اضافه کنید:

    <manifest>
        ...
        <application
            ...
            android:localeConfig="@xml/locales_config">
        </application>
    </manifest>
    

می‌توانید به‌صورت پویا localeConfig برنامه‌تان را با LocaleManager.setOverrideLocaleConfig به‌روزرسانی کنید تا مجموعه زبان‌های نمایش داده‌شده در فهرست زبان‌های هر برنامه را در تنظیمات Android سفارشی کنید. این به شما امکان می‌دهد فهرست زبان‌ها را در هر منطقه سفارشی کنید، آزمایش‌های A/B را اجرا کنید و اگر برنامه شما از فشارهای محلی‌سازی سمت سرور استفاده می‌کند، همانطور که در مثال زیر نشان داده شده است، محلی‌های به‌روز ارائه کنید:

کاتلین

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

جاوا

//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 برای دانستن زبان رابط کاربری برنامه فعلی برای به روز رسانی زبان صفحه کلید همانطور که نشان داده شده است استفاده کنند:

کاتلین

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

جاوا

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 برای این زبان‌های مشخص شده می‌شود، و از گنجاندن رشته‌های ترجمه شده از کتابخانه‌های دیگری که ممکن است از زبان‌هایی که برنامه شما پشتیبانی نمی‌کند، استفاده کنند، جلوگیری می‌کند. برای اطلاعات بیشتر، به تعیین زبان‌هایی که برنامه شما پشتیبانی می‌کند مراجعه کنید.

نحوه انتخاب زبان برنامه در تنظیمات سیستم توسط کاربران

کاربران می توانند زبان مورد نظر خود را برای هر برنامه از طریق تنظیمات سیستم انتخاب کنند. آنها می توانند به دو روش مختلف به این تنظیمات دسترسی داشته باشند:

  • از طریق تنظیمات سیستم دسترسی داشته باشید

    تنظیمات > سیستم > زبان‌ها و ورودی > زبان‌های برنامه > (یک برنامه را انتخاب کنید)

  • دسترسی از طریق تنظیمات Apps

    تنظیمات > برنامه‌ها > (یک برنامه را انتخاب کنید) > زبان

انتخابگرهای زبان درون برنامه را مدیریت کنید

برای برنامه‌هایی که از قبل یک انتخابگر زبان درون برنامه‌ای دارند یا می‌خواهند از آن استفاده کنند، به جای منطق برنامه سفارشی، از APIهای عمومی استفاده کنید تا تنظیمات و دریافت زبان دلخواه کاربر برای برنامه خود را انجام دهید. اگر از APIهای عمومی برای انتخابگر زبان درون برنامه‌ای خود استفاده می‌کنید، تنظیمات سیستم دستگاه به‌طور خودکار به‌روزرسانی می‌شوند تا با زبانی که کاربر از طریق تجربه درون‌برنامه شما انتخاب می‌کند مطابقت داشته باشد.

برای سازگاری با نسخه‌های قبلی اندروید، اکیداً توصیه می‌کنیم هنگام پیاده‌سازی انتخابگر زبان درون‌برنامه از کتابخانه پشتیبانی AndroidX استفاده کنید. با این حال، در صورت نیاز، می توانید API های چارچوب را مستقیماً پیاده سازی کنید .

با استفاده از کتابخانه پشتیبانی AndroidX پیاده سازی کنید

از متدهای setApplicationLocales() و getApplicationLocales() در Appcompat 1.6.0 یا بالاتر استفاده کنید. توجه داشته باشید که APIهای سازگار با عقب با زمینه AppCompatActivity، نه با زمینه برنامه، برای Android 12 (سطح API 32) و قبل از آن کار می کنند.

به عنوان مثال، برای تنظیم زبان ترجیحی کاربر، از کاربر می‌خواهید که یک منطقه محلی را در انتخابگر زبان انتخاب کند، سپس آن مقدار را در سیستم تنظیم کنید:

کاتلین

val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags("xx-YY")
// Call this on the main thread as it may require Activity.restart()
AppCompatDelegate.setApplicationLocales(appLocale)

جاوا

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 (سطح API 32) و پایین‌تر هستند، به AndroidX بگویید که با تنظیم مقدار autoStoreLocales روی true و android:enabled to 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 (سطح API 32) یا پایین‌تر ارائه دهید.

اگر برنامه شما دارای یک مکان ذخیره سازی محلی سفارشی است، توصیه می کنیم از یک انتقال یک بار بین راه حل ذخیره سازی محلی سفارشی خود و autoStoreLocales استفاده کنید تا کاربران همچنان از برنامه شما به زبانی که ترجیح می دهند لذت ببرند. این امر مخصوصاً در مواردی کاربرد دارد که برنامه شما برای اولین بار پس از ارتقاء دستگاه به Android 13 اجرا شود. در این حالت، می توانید با بازیابی مناطق از فضای ذخیره سازی سفارشی خود و ارسال آنها به AppCompatDelegate.setApplicationLocales() مناطق از قبل موجود و درخواستی کاربر را ارائه دهید. AppCompatDelegate.setApplicationLocales() .

با استفاده از APIهای فریمورک اندروید پیاده سازی کنید

در حالی که ما قویاً توصیه می‌کنیم از کتابخانه پشتیبانی 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 از 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()

جاوا

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