कई बार, एक से ज़्यादा भाषाएं बोलने वाले लोग, सिस्टम की भाषा को अंग्रेज़ी जैसी किसी एक भाषा पर सेट करते हैं. हालांकि, वे डच, चाइनीज़ या हिंदी जैसे कुछ ऐप्लिकेशन के लिए, दूसरी भाषाएं चुनना चाहते हैं. इन लोगों को ऐप्लिकेशन का बेहतर अनुभव देने के लिए, Android 13 में उन ऐप्लिकेशन के लिए ये सुविधाएं जोड़ी गई हैं जो एक से ज़्यादा भाषाओं में काम करते हैं:
सिस्टम सेटिंग: यह एक ऐसी जगह है जहां लोग, हर ऐप्लिकेशन के लिए अपनी पसंद की भाषा चुन सकते हैं.
आपके पास अपने ऐप्लिकेशन को इस तरह कॉन्फ़िगर करने का विकल्प होता है कि वह हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा के लिए ज़रूरी फ़ाइलें अपने-आप जनरेट करे. साथ ही, सिस्टम सेटिंग में आपके ऐप्लिकेशन की भाषाएं दिखें. ज़्यादा जानने के लिए, हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा को अपने-आप चालू करने के निर्देश देखें.
अन्य एपीआई: ये सार्वजनिक एपीआई हैं. जैसे,
LocaleManagerमेंsetApplicationLocalesऔरgetApplicationLocalesके तरीके. इनकी मदद से, ऐप्लिकेशन रनटाइम के दौरान सिस्टम की भाषा के अलावा कोई दूसरी भाषा सेट कर सकते हैं.ये एपीआई, सिस्टम सेटिंग के साथ अपने-आप सिंक हो जाते हैं. इसलिए, इन एपीआई का इस्तेमाल करके, ऐप्लिकेशन में भाषा चुनने की सुविधा को पसंद के मुताबिक बनाने वाले ऐप्लिकेशन, यह पक्का करेंगे कि उनके उपयोगकर्ताओं को एक जैसा अनुभव मिले. भले ही, वे अपनी पसंद की भाषाएं कहीं से भी चुनें. सार्वजनिक एपीआई की मदद से, बॉयलरप्लेट कोड की मात्रा भी कम की जा सकती है. ये एपीआई, बँटे हुए APKs के साथ काम करते हैं. साथ ही, ये ऐप्लिकेशन के लिए, ऑटो बैकअप की सुविधा के साथ काम करते हैं. इससे, ऐप्लिकेशन के लेवल पर उपयोगकर्ता की भाषा की सेटिंग सेव की जा सकती है.
Android के पुराने वर्शन के साथ काम करने के लिए, AndroidX में भी मिलते-जुलते एपीआई उपलब्ध हैं. हालांकि, Android 12 (एपीआई लेवल 32) और इससे पहले के वर्शन के लिए, पुराने सिस्टम के साथ काम करने वाले एपीआई, ऐप्लिकेशन के कॉन्टेक्स्ट के बजाय AppCompatActivity कॉन्टेक्स्ट के साथ काम करते हैं. Appcompat 1.6.0 या इसके बाद के वर्शन के साथ, पुराने सिस्टम के साथ काम करने वाले एपीआई को ऐक्सेस करें.
इस सुविधा को लागू करने की खास जानकारी
यहां दी गई टेबल में, अलग-अलग इस्तेमाल के उदाहरणों के हिसाब से, लागू करने के सुझाए गए तरीके दिखाए गए हैं.
| इस्तेमाल का उदाहरण | लागू करने के सुझाव |
|---|---|
| आपके ऐप्लिकेशन में, भाषा चुनने की सुविधा नहीं है |
|
| आपके ऐप्लिकेशन में, भाषा चुनने की सुविधा पहले से मौजूद है |
|
लोगों के लिए सिस्टम सेटिंग
Android 13 से, Android में सिस्टम सेटिंग में एक ऐसी जगह शामिल की गई है जहां लोग, हर ऐप्लिकेशन के लिए अलग भाषा चुन सकते हैं. यह पक्का करने के लिए कि Android 13 या इसके बाद के वर्शन पर चलने वाले डिवाइसों पर, सिस्टम सेटिंग में आपके ऐप्लिकेशन की भाषाएं कॉन्फ़िगर की जा सकें, हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा को अपने-आप चालू करें. हमारा सुझाव है कि आप यह सुविधा चालू करें. इसके अलावा, मैन्युअल तरीके से भी इस सुविधा को कॉन्फ़िगर किया जा सकता है.
हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा को अपने-आप चालू करना
हमारा सुझाव है कि आप अपने ऐप्लिकेशन में, हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा जोड़ने के लिए, इस तरीके का इस्तेमाल करें. ऐसा इसलिए, क्योंकि इसके लिए एक्सएमएल में बदलाव करने की ज़रूरत नहीं होती.
Android Studio Giraffe और AGP 8.1 से, आपके पास अपने ऐप्लिकेशन को इस तरह कॉन्फ़िगर करने का विकल्प होता है कि वह हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा को अपने-आप चालू करे. आपके प्रोजेक्ट के संसाधनों के आधार पर, AGP, LocaleConfig फ़ाइल जनरेट करता है और उसे फ़ाइनल मेनिफ़ेस्ट फ़ाइल में जोड़ता है. इसलिए, आपको इसे मैन्युअल तरीके से जोड़ने की ज़रूरत नहीं होती. LocaleConfig फ़ाइल में शामिल की जाने वाली भाषाओं का पता लगाने के लिए, AGP आपके ऐप्लिकेशन मॉड्यूल के res फ़ोल्डर में मौजूद संसाधनों और किसी भी लाइब्रेरी मॉड्यूल की डिपेंडेंसी का इस्तेमाल करता है.
इसका मतलब है कि अगर आपने अपने ऐप्लिकेशन में किसी नई भाषा के लिए संसाधन जोड़े हैं, तो आपको LocaleConfig फ़ाइल को अपडेट करने की ज़रूरत नहीं है.
ध्यान दें कि हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा, Android 13 (एपीआई लेवल 33) या इसके बाद के वर्शन पर चलने वाले ऐप्लिकेशन के साथ काम करती है. इस सुविधा का इस्तेमाल करने के लिए, आपको compileSdkVersion को 33 या इससे ज़्यादा पर सेट करना होगा. Android के पुराने वर्शन के लिए, हर ऐप्लिकेशन के हिसाब से भाषा की प्राथमिकताएं कॉन्फ़िगर करने के लिए, आपको अब भी एपीआई और ऐप्लिकेशन में भाषा चुनने की सुविधा का इस्तेमाल करना होगा.
हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा को अपने-आप चालू करने के लिए, यह तरीका अपनाएं:
- इस सुविधा को चालू करने के लिए, मॉड्यूल-लेवल की
build.gradle.ktsफ़ाइल (build.gradleफ़ाइल, अगर Groovy का इस्तेमाल किया जा रहा है) केandroidResources {}ब्लॉक में,generateLocaleConfigसेटिंग का इस्तेमाल करें. यह सुविधा डिफ़ॉल्ट रूप से बंद रहती है.
Kotlin
android {
androidResources {
generateLocaleConfig = true
}
}
शानदार
android {
androidResources {
generateLocaleConfig true
}
}
- डिफ़ॉल्ट भाषा तय करें:
- ऐप्लिकेशन मॉड्यूल के
resफ़ोल्डर में,resources.propertiesनाम की नई फ़ाइल बनाएं. resources.propertiesफ़ाइल में,unqualifiedResLocaleलेबल की मदद से डिफ़ॉल्ट भाषा सेट करें. भाषा के नामों को फ़ॉर्मैट करने के लिए, भाषा के नाम बनाने का तरीका देखें.
- ऐप्लिकेशन मॉड्यूल के
AGP, इस डिफ़ॉल्ट भाषा और आपके तय की गई किसी भी अन्य भाषाओं को,
values-* डायरेक्ट्री का इस्तेमाल करके, res फ़ोल्डर में मौजूद अपने-आप जनरेट होने वाली
LocaleConfig फ़ाइल में जोड़ता है.
LocaleConfig फ़ाइल को हटाएं.
भाषा के नाम बनाने का तरीका
भाषा के नाम बनाने के लिए, भाषा के कोड को स्क्रिप्ट और इलाके के कोड के साथ मिलाएं. स्क्रिप्ट और इलाके के कोड, ज़रूरी नहीं हैं. हर कोड को डैश से अलग करें:
- भाषा: दो या तीन अक्षरों वाला ISO 639-2 कोड इस्तेमाल करें.
- स्क्रिप्ट (ज़रूरी नहीं): ISO 15924 कोड इस्तेमाल करें.
- इलाका (ज़रूरी नहीं): दो अक्षरों वाला ISO 3166-1-ऐल्फ़ा-2 कोड या तीन अंकों वाला UN_M.49 कोड इस्तेमाल करें.
उदाहरण के लिए, अगर आपकी डिफ़ॉल्ट भाषा अमेरिकन इंग्लिश है, तो:
unqualifiedResLocale=en-US
सिस्टम सेटिंग में, काम करने वाली भाषाएं जोड़ने के लिए android:localeConfig का इस्तेमाल करना
आपके पास अपने ऐप्लिकेशन को मैन्युअल तरीके से सेट अप करने का विकल्प होता है. इससे, Android 13 या इसके बाद के वर्शन पर चलने वाले डिवाइसों पर, सिस्टम सेटिंग में आपके ऐप्लिकेशन की भाषाएं कॉन्फ़िगर की जा सकती हैं. इसके लिए, locale_config एक्सएमएल फ़ाइल बनाएं और android:localeConfig एट्रिब्यूट का इस्तेमाल करके, इसे अपने ऐप्लिकेशन की मेनिफ़ेस्ट में जोड़ें. android:localeConfig मेनिफ़ेस्ट एंट्री को शामिल न करने से यह पता चलता है कि लोग, सिस्टम सेटिंग में अपने ऐप्लिकेशन की भाषा को सिस्टम की भाषा से अलग सेट नहीं कर पाएंगे.
किसी उपयोगकर्ता की सिस्टम सेटिंग में, अपने ऐप्लिकेशन की काम करने वाली भाषाएं मैन्युअल तरीके से जोड़ने के लिए:
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>मेनिफ़ेस्ट में, इस नई फ़ाइल की ओर इशारा करने वाली लाइन जोड़ें:
<manifest> ... <application ... android:localeConfig="@xml/locale_config"> </application> </manifest>
Android की सेटिंग में, हर ऐप्लिकेशन के लिए अलग भाषा की सूची में दिखने वाली भाषाओं को पसंद के मुताबिक बनाने के लिए, LocaleManager.setOverrideLocaleConfig की मदद से, अपने ऐप्लिकेशन की localeConfig को डाइनैमिक तरीके से अपडेट किया जा सकता है. इससे, हर इलाके के हिसाब से भाषा की सूची को पसंद के मुताबिक बनाया जा सकता है, 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()
इसके अलावा, IME अब LocaleManager.getApplicationLocales का इस्तेमाल करके, मौजूदा ऐप्लिकेशन की यूज़र इंटरफ़ेस (यूआई) की भाषा का पता लगा सकते हैं. इससे, कीबोर्ड की भाषा को अपडेट किया जा सकता है. जैसा कि यहां दिखाया गया है:
val currentAppLocales: LocaleList = applicationContext.getSystemService(LocaleManager::class.java).getApplicationLocales(appPackageName)
Gradle में, काम करने वाली भाषाएं तय करना
अगर पहले से मौजूद नहीं है, तो अपने ऐप्लिकेशन के मॉड्यूल-लेवल की
build.gradle फ़ाइल में,
resourceConfigurations प्रॉपर्टी का इस्तेमाल करके वही भाषाएं तय करें:
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 को भाषा के स्टोरेज को मैनेज करने के लिए कहें. इसके लिए, अपने ऐप्लिकेशन की AppLocalesMetadataHolderService सेवा के लिए, मेनिफ़ेस्ट एंट्री में autoStoreLocales की वैल्यू को true और android:enabled को false पर सेट करें. जैसा कि यहां दिए गए कोड स्निपेट में दिखाया गया है:
<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 से पहले, सेव की गई भाषाएं उपलब्ध करानी होंगी. साथ ही, Android 12 (एपीआई लेवल 32) या इससे पहले के वर्शन में, AppCompatDelegate.setApplicationLocales को कॉल करने से रोकना होगा.
अगर आपके ऐप्लिकेशन में, भाषा के स्टोरेज की कोई कस्टम जगह है, तो हमारा सुझाव है कि भाषा के स्टोरेज के अपने कस्टम समाधान और autoStoreLocales के बीच, एक बार हैंडऑफ़ का इस्तेमाल करें. इससे, लोग अपनी पसंद की भाषा में आपके ऐप्लिकेशन का इस्तेमाल जारी रख पाएंगे. यह खास तौर पर तब लागू होता है, जब किसी डिवाइस को Android 13 में अपग्रेड करने के बाद, आपका ऐप्लिकेशन पहली बार चलाया जाता है. इस मामले में, कस्टम स्टोरेज से भाषाएं पाकर और उन भाषाओं को AppCompatDelegate.setApplicationLocales में पास करके, पहले से मौजूद, लोगों की पसंद की भाषाएं उपलब्ध कराई जा सकती हैं.
Android फ़्रेमवर्क एपीआई का इस्तेमाल करके लागू करना
हमारा सुझाव है कि ऐप्लिकेशन में भाषा चुनने की सुविधा को लागू करने के लिए, AndroidX सपोर्ट लाइब्रेरी का इस्तेमाल करें. हालांकि, Android 13 पर चलने वाले डिवाइसों के लिए, Android फ़्रेमवर्क में setApplicationLocales और getApplicationLocales के तरीकों का भी इस्तेमाल किया जा सकता है.
यहां दिए गए कोड स्निपेट में, 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 की.
Chrome के कस्टम टैब के लिए, Accept-Language हेडर को ध्यान में रखना
Chrome का कस्टम टैब शुरू करते समय, अपने ऐप्लिकेशन की भाषा में वेबपेज खोलने के लिए, Accept-Language हेडर को
Browser.EXTRA_HEADERS के ज़रिए जोड़ने के बारे में सोचें.
सिस्टम सेटिंग में, हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा हटाने पर, अपने ऐप्लिकेशन की भाषा को सिस्टम की भाषा पर रीसेट करना
अगर आपने सिस्टम सेटिंग से, अपने ऐप्लिकेशन की भाषा की प्राथमिकताएं हटा दी हैं (अपने ऐप्लिकेशन की AndroidManifest.xml से android:localeConfig हटाकर), तो लोग अपने ऐप्लिकेशन की भाषा को सिस्टम की डिफ़ॉल्ट भाषा पर आसानी से रीसेट नहीं कर पाएंगे.
इस वजह से, अगर आपने 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 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>
अन्य संसाधन
ज़्यादा जानकारी के लिए, हमारे कोड के सैंपल, ब्लॉग लेख, और वीडियो देखें.
- हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा, ब्लॉग का पहला हिस्सा
- हर ऐप्लिकेशन के लिए अलग भाषा चुनने की सुविधा, ब्लॉग का दूसरा हिस्सा
- एक से ज़्यादा भाषाओं में काम करने वाले ऐप्लिकेशन बनाना, वीडियो
- Compose में संसाधन