در بسیاری از موارد، کاربران چند زبانه، زبان سیستم خود را روی یک زبان - مانند انگلیسی - تنظیم میکنند، اما میخواهند زبانهای دیگری را برای برنامههای خاص مانند هلندی، چینی یا هندی انتخاب کنند. برای کمک به برنامهها برای ارائه تجربه بهتر برای این کاربران، Android 13 ویژگیهای زیر را برای برنامههایی که از چندین زبان پشتیبانی میکنند معرفی میکند:
تنظیمات سیستم : یک مکان متمرکز که در آن کاربران می توانند زبان مورد نظر را برای هر برنامه انتخاب کنند.
میتوانید برنامهتان را طوری پیکربندی کنید که فایلهای مورد نیاز برای پشتیبانی از اولویتهای زبان هر برنامه را بهطور خودکار تولید کند و در تنظیمات سیستم نمایش داده شود. برای کسب اطلاعات بیشتر، دستورالعملهای فعال کردن پشتیبانی خودکار زبان برای هر برنامه را ببینید.
APIهای اضافی : این APIهای عمومی، مانند متدهای
setApplicationLocales()
وgetApplicationLocales()
درLocaleManager
، به برنامه ها اجازه می دهند زبانی متفاوت از زبان سیستم را در زمان اجرا تنظیم کنند.این APIها به طور خودکار با تنظیمات سیستم همگام می شوند. بنابراین، برنامههایی که از این APIها برای ایجاد انتخابکنندههای زبان درونبرنامهای سفارشی استفاده میکنند، اطمینان حاصل میکنند که کاربرانشان بدون توجه به جایی که ترجیحات زبان خود را انتخاب میکنند، تجربه کاربری ثابتی دارند. APIهای عمومی همچنین به شما کمک میکنند تا مقدار کد دیگ بخار را کاهش دهید، از APKهای تقسیمشده پشتیبانی میکنند، و از پشتیبانگیری خودکار برای برنامهها برای ذخیره تنظیمات زبان کاربر در سطح برنامه پشتیبانی میکنند.
برای سازگاری با نسخه های قبلی اندروید، API های معادل در AndroidX نیز موجود است. با این حال، API های سازگار با عقب با زمینه AppCompatActivity، نه با زمینه برنامه، برای Android 12 (سطح API 32) و قبل از آن کار می کنند. با Appcompat 1.6.0 یا بالاتر به APIهای سازگار با عقب دسترسی داشته باشید.
مروری بر پیاده سازی این ویژگی
جدول زیر پیاده سازی های توصیه شده را بر اساس موارد استفاده مختلف نشان می دهد.
مورد استفاده | اجرای پیشنهادی |
---|---|
برنامه شما انتخابگر زبان درون برنامه ای ندارد |
|
برنامه شما از قبل یک انتخابگر زبان درون برنامه ای دارد |
|
تنظیمات سیستم برای کاربران
با شروع اندروید 13، اندروید دارای یک مکان متمرکز در تنظیمات سیستم برای تنظیم تنظیمات برگزیده زبان هر برنامه است. برای اطمینان از اینکه زبانهای برنامهتان در تنظیمات سیستم در دستگاههای دارای Android 13 یا بالاتر قابل پیکربندی هستند، پشتیبانی خودکار زبان برای هر برنامه را فعال کنید (توصیه میشود) یا پشتیبانی را به صورت دستی پیکربندی کنید .
پشتیبانی خودکار زبان برای هر برنامه را فعال کنید
با شروع Android Studio Giraffe و AGP 8.1، میتوانید برنامه خود را به گونهای پیکربندی کنید که از تنظیمات برگزیده زبان هر برنامه بهطور خودکار پشتیبانی کند. بر اساس منابع پروژه شما، AGP فایل LocaleConfig
را تولید می کند و یک مرجع به آن در فایل مانیفست نهایی اضافه می کند، بنابراین دیگر نیازی به انجام دستی آن ندارید. AGP از منابع موجود در پوشههای res
ماژولهای برنامه شما و هر وابستگی ماژول کتابخانهای برای تعیین مکانهای گنجاندن در فایل LocaleConfig
استفاده میکند. این بدان معناست که اگر منابعی را برای یک زبان جدید به برنامه خود اضافه کنید، لازم نیست نگران به روز رسانی فایل LocaleConfig
باشید.
توجه داشته باشید که ویژگی خودکار زبان هر برنامه از برنامههایی پشتیبانی میکند که Android 13 (سطح API 33) یا بالاتر را اجرا میکنند. برای استفاده از این ویژگی، باید compileSdkVersion
روی 33 یا بالاتر تنظیم کنید. برای پیکربندی تنظیمات برگزیده زبان هر برنامه برای نسخههای قبلی Android، همچنان باید از APIها و انتخابکنندههای زبان درونبرنامه استفاده کنید .
برای فعال کردن پشتیبانی خودکار زبان برای هر برنامه، این مراحل را دنبال کنید:
- برای روشن کردن این ویژگی، از تنظیمات
generateLocaleConfig
در بلوکandroidResources {}
فایلbuild.gradle.kts
در سطح ماژول استفاده کنید (اگر از Groovy استفاده می کنید فایلbuild.gradle
). این ویژگی به طور پیش فرض خاموش است.کاتلین
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
برای افزودن زبان های پشتیبانی شده به تنظیمات سیستم استفاده کنید
میتوانید برنامهتان را بهطور دستی تنظیم کنید تا مطمئن شوید که زبانهای آن در تنظیمات سیستم در دستگاههای دارای Android 13 یا بالاتر قابل پیکربندی هستند. برای انجام این کار، یک فایل XML locales_config
ایجاد کنید و آن را با استفاده از ویژگی 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 سفارشی کنید. این به شما امکان میدهد فهرست زبانها را در هر منطقه سفارشی کنید، آزمایشهای 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());
منابع اضافی
برای اطلاعات بیشتر به نمونه کد، مقالات وبلاگ و ویدیوهای ما مراجعه کنید.
- وبلاگ تنظیمات زبان برای هر برنامه قسمت 1
- وبلاگ تنظیمات زبان در هر برنامه قسمت 2
- نمونه برنامه ها
- ساختن یک ویدیوی جهانی چند زبانه
نمونه فایل 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>