Android, कई डिवाइसों पर और कई इलाकों में काम करता है. ज़्यादा से ज़्यादा उपयोगकर्ताओं तक पहुंचने के लिए, पक्का करें कि आपका ऐप्लिकेशन, टेक्स्ट, ऑडियो फ़ाइलों, नंबरों, मुद्रा, और ग्राफ़िक्स को उन भाषाओं और इलाकों के हिसाब से हैंडल करे जहां आपके ऐप्लिकेशन का इस्तेमाल किया जाता है.
इस पेज पर, Android ऐप्लिकेशन को स्थानीय भाषा के हिसाब से बनाने के सबसे सही तरीकों के बारे में बताया गया है.
आपके पास Kotlin की अच्छी जानकारी होनी चाहिए. साथ ही, Android रिसॉर्स लोड करने, डेवलपमेंट से जुड़ी बातों (जैसे, ऐक्टिविटी लाइफ़साइकल) के बारे में जानकारी होनी चाहिए. इसके अलावा, अंतरराष्ट्रीयकरण और स्थानीय भाषा के हिसाब से बनाने के सामान्य सिद्धांतों के बारे में भी जानकारी होनी चाहिए.
Android रिसॉर्स फ़्रेमवर्क का इस्तेमाल करके, अपने ऐप्लिकेशन के स्थानीय भाषा के हिसाब से बनाए गए पहलुओं को, ऐप्लिकेशन के मुख्य फ़ंक्शन से अलग रखना एक अच्छा तरीका है.
- अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) के ज़्यादातर या सभी कॉन्टेंट को रिसॉर्स फ़ाइलों में डालें. इसके लिए, इस पेज और ऐप्लिकेशन के रिसॉर्स की खास जानकारी में बताए गए तरीके का इस्तेमाल करें.
- दूसरी ओर, यूज़र इंटरफ़ेस (यूआई) का व्यवहार, Kotlin पर आधारित आपके कोड से तय होता है. उदाहरण के लिए, अगर उपयोगकर्ता ऐसा डेटा डालते हैं जिसे स्थानीय भाषा के हिसाब से अलग-अलग फ़ॉर्मैट या क्रम में सॉर्ट करने की ज़रूरत होती है, तो Kotlin का इस्तेमाल करके, प्रोग्राम के ज़रिए डेटा को हैंडल करें. इस पेज पर, Kotlin पर आधारित कोड को स्थानीय भाषा के हिसाब से बनाने का तरीका नहीं बताया गया है.
इस गाइड में, Android के मुख्य स्थानीय भाषा के हिसाब से बनाने वाले सिस्टम के बारे में बताया गया है. इसका इस्तेमाल, Android के सभी ऐप्लिकेशन में किया जाता है. Jetpack Compose यूज़र इंटरफ़ेस (यूआई) में, स्थानीय भाषा के हिसाब से बनाए गए इन रिसॉर्स को लोड करने का तरीका जानने के लिए, देखें Compose में रिसॉर्स.
अपने ऐप्लिकेशन में स्ट्रिंग को स्थानीय भाषा के हिसाब से बनाने के बारे में जानने के लिए, अलग-अलग भाषाओं और संस्कृतियों के हिसाब से बनाना देखें.
खास जानकारी: Android में रिसॉर्स स्विच करना
रिसॉर्स, टेक्स्ट स्ट्रिंग, आवाज़ें, ग्राफ़िक्स, और कोई भी ऐसा स्टैटिक डेटा होता है जिसकी ज़रूरत आपके Android ऐप्लिकेशन को होती है. एक ऐप्लिकेशन में रिसॉर्स के कई सेट हो सकते हैं. इनमें से हर एक अलग डिवाइस कॉन्फ़िगरेशन के लिए होता है. जब कोई उपयोगकर्ता ऐप्लिकेशन चलाता है, तो Android अपने-आप उन रिसॉर्स को चुनकर लोड करता है जो डिवाइस के हिसाब से सबसे सही होते हैं.
इस पेज पर, स्थानीय भाषा के हिसाब से बनाने और स्थानीय भाषा के बारे में बताया गया है. रिसॉर्स स्विच करने और कॉन्फ़िगरेशन के सभी टाइप के बारे में पूरी जानकारी के लिए, वैकल्पिक रिसॉर्स उपलब्ध कराना देखें. इसमें, स्क्रीन ओरिएंटेशन या टचस्क्रीन टाइप जैसे कॉन्फ़िगरेशन शामिल हैं.
जब आप अपना ऐप्लिकेशन लिखते हैं, तो आप अपने ऐप्लिकेशन के इस्तेमाल के लिए डिफ़ॉल्ट और वैकल्पिक रिसॉर्स बनाते हैं. जब उपयोगकर्ता आपका ऐप्लिकेशन चलाते हैं, तो Android सिस्टम, डिवाइस की स्थानीय भाषा के हिसाब से यह चुनता है कि किन रिसॉर्स को लोड करना है.
रिसॉर्स बनाने के लिए, फ़ाइलों को प्रोजेक्ट की res/ डायरेक्ट्री की खास नाम वाली सबडायरेक्ट्री में रखें.
डिफ़ॉल्ट रिसॉर्स अहम क्यों होते हैं
जब ऐप्लिकेशन किसी ऐसी स्थानीय भाषा में चलता है जिसके लिए आपने स्थानीय भाषा के हिसाब से टेक्स्ट उपलब्ध नहीं कराया है, तो Android, res/values/strings.xml से डिफ़ॉल्ट स्ट्रिंग लोड करता है. अगर यह डिफ़ॉल्ट फ़ाइल मौजूद नहीं है या इसमें कोई ऐसी स्ट्रिंग मौजूद नहीं है जिसकी ज़रूरत आपके ऐप्लिकेशन को है, तो आपका ऐप्लिकेशन नहीं चलता और गड़बड़ी दिखाता है. यहां दिए गए उदाहरण से पता चलता है कि डिफ़ॉल्ट टेक्स्ट फ़ाइल पूरी न होने पर क्या हो सकता है.
उदाहरण:
किसी ऐप्लिकेशन का Kotlin पर आधारित कोड, सिर्फ़ दो स्ट्रिंग, text_a और text_b को रेफ़र करता है. ऐप्लिकेशन में स्थानीय भाषा के हिसाब से बनाया गया एक रिसॉर्स फ़ाइल (res/values-en/strings.xml) शामिल है. इसमें text_a और text_b को अंग्रेज़ी में तय किया गया है.
ऐप्लिकेशन में एक डिफ़ॉल्ट रिसॉर्स फ़ाइल (res/values/strings.xml) भी शामिल है. इसमें text_a की डेफ़िनिशन शामिल है, लेकिन text_b की नहीं.
- जब इस ऐप्लिकेशन को अंग्रेज़ी पर सेट की गई स्थानीय भाषा वाले डिवाइस पर लॉन्च किया जाता है, तो यह बिना किसी समस्या के चल सकता है. ऐसा इसलिए, क्योंकि
res/values-en/strings.xmlमें, ज़रूरत की दोनों टेक्स्ट स्ट्रिंग शामिल हैं. - हालांकि, जब इस ऐप्लिकेशन को अंग्रेज़ी के अलावा किसी अन्य भाषा पर सेट किए गए डिवाइस पर लॉन्च किया जाता है, तो उपयोगकर्ता को गड़बड़ी का मैसेज और 'फ़ोर्स क्लोज़' बटन दिखता है. ऐप्लिकेशन लोड नहीं होता.
इस समस्या से बचने के लिए, पक्का करें कि res/values/strings.xml फ़ाइल मौजूद हो और इसमें ज़रूरत की हर स्ट्रिंग तय की गई हो. यह समस्या, सिर्फ़ स्ट्रिंग पर नहीं, बल्कि सभी तरह के रिसॉर्स पर लागू होती है. आपको डिफ़ॉल्ट रिसॉर्स फ़ाइलों का एक सेट बनाना होगा. इसमें वे सभी रिसॉर्स शामिल होने चाहिए जिनकी ज़रूरत आपके ऐप्लिकेशन को होती है. जैसे, ड्रॉएबल, फ़ॉन्ट या रंग. जांच करने के बारे में जानकारी के लिए, डिफ़ॉल्ट रिसॉर्स की जांच करना सेक्शन देखें.
स्थानीय भाषा के हिसाब से बनाने के लिए रिसॉर्स का इस्तेमाल करना
इस सेक्शन में, डिफ़ॉल्ट रिसॉर्स के साथ-साथ वैकल्पिक रिसॉर्स बनाने के तरीके के बारे में बताया गया है. इसमें यह भी बताया गया है कि रिसॉर्स को प्राथमिकता कैसे दी जाती है और कोड में अपने रिसॉर्स को कैसे रेफ़र किया जाता है.
डिफ़ॉल्ट रिसॉर्स बनाना
ऐप्लिकेशन का डिफ़ॉल्ट टेक्स्ट, res/values/strings.xml में डालें. इन स्ट्रिंग के लिए, डिफ़ॉल्ट भाषा का इस्तेमाल करें. यह वह भाषा है जिसे आपके ऐप्लिकेशन के ज़्यादातर उपयोगकर्ता बोलते हैं.
डिफ़ॉल्ट रिसॉर्स सेट में, डिफ़ॉल्ट ड्रॉएबल भी शामिल होते हैं. इसमें आइकॉन या स्ट्रिंग जैसे अन्य तरह के रिसॉर्स भी शामिल हो सकते हैं. ये रिसॉर्स, इन डायरेक्ट्री में जाते हैं:
res/drawable/: यह डायरेक्ट्री ज़रूरी है. इसमें कम से कम एक ग्राफ़िक फ़ाइल होनी चाहिए. यह फ़ाइल, Google Play पर ऐप्लिकेशन के आइकॉन के लिए होती हैres/xml/: अगर आपके पासres/xml-<qualifiers>फ़ोल्डर हैं, तो यह डायरेक्ट्री ज़रूरी हैres/raw/: अगर आपके पासres/raw-<qualifiers>फ़ोल्डर हैं, तो यह डायरेक्ट्री ज़रूरी है
वैकल्पिक रिसॉर्स बनाना
किसी ऐप्लिकेशन को स्थानीय भाषा के हिसाब से बनाने का एक अहम हिस्सा है, अलग-अलग भाषाओं के लिए वैकल्पिक टेक्स्ट उपलब्ध कराना. कुछ मामलों में, स्थानीय भाषा के हिसाब से बनाए गए वैकल्पिक ग्राफ़िक्स, आवाज़ें, और अन्य रिसॉर्स भी उपलब्ध कराए जाते हैं.
कोई ऐप्लिकेशन, कई res/<qualifiers>/
डायरेक्ट्री तय कर सकता है. इनमें से हर डायरेक्ट्री में अलग-अलग क्वालीफ़ायर होते हैं. किसी अन्य स्थानीय भाषा के लिए वैकल्पिक रिसॉर्स बनाने के लिए, ऐसे क्वालीफ़ायर का इस्तेमाल करें जो किसी भाषा या भाषा-इलाके के कॉम्बिनेशन के बारे में बताता हो. किसी रिसॉर्स डायरेक्ट्री का नाम,
वैकल्पिक रिसॉर्स उपलब्ध कराना में बताए गए नामकरण स्कीम के मुताबिक होना चाहिए.
ऐसा न होने पर, आपका ऐप्लिकेशन कंपाइल नहीं हो पाएगा.
उदाहरण:
मान लें कि आपके ऐप्लिकेशन की डिफ़ॉल्ट भाषा अंग्रेज़ी है और आपको अपने ऐप्लिकेशन के सभी टेक्स्ट को फ़्रेंच में और ऐप्लिकेशन के टाइटल को छोड़कर बाकी सभी टेक्स्ट को जापानी में स्थानीय भाषा के हिसाब से बनाना है. इस मामले में, आपको तीन strings.xml फ़ाइलें बनानी होंगी. इनमें से हर फ़ाइल, स्थानीय भाषा के हिसाब से बनाई गई रिसॉर्स डायरेक्ट्री में सेव की जाएगी:
res/values/strings.xml
इसमें उन सभी स्ट्रिंग के लिए अंग्रेज़ी टेक्स्ट शामिल है जिनका इस्तेमाल ऐप्लिकेशन करता है. इसमेंtitleनाम की स्ट्रिंग के लिए टेक्स्ट भी शामिल है.res/values-fr/strings.xml
इसमें सभी स्ट्रिंग के लिए फ़्रेंच टेक्स्ट शामिल है. इसमेंtitleभी शामिल है.res/values-ja/strings.xml
इसमेंtitleको छोड़कर बाकी सभी स्ट्रिंग के लिए जापानी टेक्स्ट शामिल है.
अगर Kotlin पर आधारित आपका कोड, R.string.title को रेफ़र करता है, तो रनटाइम पर यह होता है:
- अगर डिवाइस को फ़्रेंच के अलावा किसी अन्य भाषा पर सेट किया गया है, तो Android,
res/values/strings.xmlफ़ाइल सेtitleलोड करता है. - अगर डिवाइस को फ़्रेंच पर सेट किया गया है, तो Android,
res/values-fr/strings.xmlफ़ाइल सेtitleलोड करता है.
अगर डिवाइस को जापानी पर सेट किया गया है, तो Android, res/values-ja/strings.xml फ़ाइल में title ढूंढता है. हालांकि, इस फ़ाइल में ऐसी कोई स्ट्रिंग शामिल नहीं है. इसलिए, Android डिफ़ॉल्ट पर वापस जाता है और res/values/strings.xml फ़ाइल से अंग्रेज़ी में title लोड करता है.
किन रिसॉर्स को प्राथमिकता मिलती है?
अगर कई रिसॉर्स फ़ाइलें, किसी डिवाइस के कॉन्फ़िगरेशन से मेल खाती हैं, तो Android यह तय करने के लिए नियमों के एक सेट का पालन करता है कि किस फ़ाइल का इस्तेमाल करना है. किसी रिसॉर्स डायरेक्ट्री के नाम में तय किए जा सकने वाले क्वालीफ़ायर में, स्थानीय भाषा को लगभग हमेशा प्राथमिकता मिलती है.
उदाहरण:
मान लें कि किसी ऐप्लिकेशन में ग्राफ़िक्स का एक डिफ़ॉल्ट सेट और ग्राफ़िक्स के दो अन्य सेट शामिल हैं. इनमें से हर सेट को अलग-अलग डिवाइस सेटअप के लिए ऑप्टिमाइज़ किया गया है:
res/drawable/
इसमें डिफ़ॉल्ट ग्राफ़िक्स शामिल हैं.res/drawable-small-land-stylus/
इसमें ऐसे डिवाइस के लिए ऑप्टिमाइज़ किए गए ग्राफ़िक्स शामिल हैं जो स्टाइलस से इनपुट लेता है और जिसमें लैंडस्केप ओरिएंटेशन में QVGA कम डेंसिटी वाली स्क्रीन होती है.res/drawable-ja/
इसमें जापानी के साथ इस्तेमाल के लिए ऑप्टिमाइज़ किए गए ग्राफ़िक्स शामिल हैं.
अगर ऐप्लिकेशन किसी ऐसे डिवाइस पर चलता है जिसे जापानी का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो Android, res/drawable-ja/ से ग्राफ़िक्स लोड करता है. भले ही, डिवाइस ऐसा हो जो स्टाइलस से इनपुट लेता हो और जिसमें लैंडस्केप ओरिएंटेशन में QVGA कम डेंसिटी वाली स्क्रीन हो.
अपवाद: चुनने की प्रोसेस में, सिर्फ़ मोबाइल कंट्री कोड (एमसीसी) और मोबाइल नेटवर्क कोड (एमएनसी) क्वालीफ़ायर को स्थानीय भाषा से ज़्यादा प्राथमिकता मिलती है.
उदाहरण:
मान लें कि आपके पास यह स्थिति है:
- ऐप्लिकेशन कोड,
R.string.text_aके लिए कॉल करता है. - काम की दो रिसॉर्स फ़ाइलें उपलब्ध हैं:
res/values-mcc404/strings.xml. इसमेंtext_a, ऐप्लिकेशन की डिफ़ॉल्ट भाषा में शामिल है. इस मामले में, यह भाषा अंग्रेज़ी है.res/values-hi/strings.xml. इसमेंtext_a, हिंदी में शामिल है.
- ऐप्लिकेशन, ऐसे डिवाइस पर चल रहा है जिसका कॉन्फ़िगरेशन यह है:
- सिम कार्ड, भारत में मौजूद किसी मोबाइल नेटवर्क (एमसीसी 404) से कनेक्ट है.
- भाषा, हिंदी (
hi) पर सेट है.
Android, res/values-mcc404/strings.xml से text_a (अंग्रेज़ी में) लोड करता है. भले ही, डिवाइस को हिंदी के लिए कॉन्फ़िगर किया गया हो. ऐसा इसलिए, क्योंकि रिसॉर्स चुनने की प्रोसेस में, Android, भाषा के मैच के मुकाबले एमसीसी मैच को प्राथमिकता देता है.
चुनने की प्रोसेस हमेशा इन उदाहरणों की तरह आसान नहीं होती. इस प्रोसेस के बारे में ज़्यादा जानकारी के लिए, Android, सबसे सही मैच करने वाला रिसॉर्स कैसे ढूंढता है देखें. ऐप्लिकेशन के रिसॉर्स की खास जानकारी में, सभी क्वालीफ़ायर के बारे में बताया गया है. साथ ही, उन्हें प्राथमिकता के क्रम में दिखाया गया है.
कोड में रिसॉर्स को रेफ़र करना
अपने ऐप्लिकेशन के Kotlin पर आधारित कोड में, रिसॉर्स को रेफ़र करने के लिए, सिंटैक्स
R.resource_type.resource_name या
android.R.resource_type.resource_nameका इस्तेमाल करें.
ज़्यादा जानकारी के लिए, अपने ऐप्लिकेशन के रिसॉर्स ऐक्सेस करना देखें.
स्थानीय भाषा के हिसाब से बनाने के लिए स्ट्रिंग मैनेज करना
इस सेक्शन में, स्थानीय भाषा के हिसाब से बनाने से जुड़ी स्ट्रिंग मैनेज करने के सबसे सही तरीकों के बारे में बताया गया है.
सभी स्ट्रिंग को strings.xml में ले जाना
अपने ऐप्लिकेशन बनाते समय, किसी भी स्ट्रिंग को हार्डकोड न करें. इसके बजाय, अपनी सभी स्ट्रिंग को डिफ़ॉल्ट strings.xml फ़ाइल में रिसॉर्स के तौर पर तय करें. इससे उन्हें अपडेट करना और स्थानीय भाषा के हिसाब से बनाना आसान हो जाता है. strings.xml फ़ाइल में मौजूद स्ट्रिंग को आसानी से एक्सट्रैक्ट किया जा सकता है, उनका अनुवाद किया जा सकता है, और उन्हें कंपाइल किए गए कोड में कोई बदलाव किए बिना, सही क्वालीफ़ायर के साथ वापस इंटिग्रेट किया जा सकता है.
उदाहरण के लिए, Compose की मदद से, इस तरह स्ट्रिंग लोड की जा सकती है:
// In the res/values/strings.xml file // <string name="compose">Jetpack Compose</string> // In your Compose code Text( text = stringResource(R.string.compose) )
अगर आपने टेक्स्ट वाली इमेज जनरेट की हैं, तो उन स्ट्रिंग को भी strings.xml में डालें. साथ ही, अनुवाद के बाद इमेज को फिर से जनरेट करें.
यूज़र इंटरफ़ेस (यूआई) की स्ट्रिंग के लिए, Android के दिशा-निर्देशों का पालन करना
अपने यूज़र इंटरफ़ेस (यूआई) को डिज़ाइन और डेवलप करते समय, इस बात पर ध्यान दें कि आप अपने उपयोगकर्ता से कैसे बात करते हैं. आम तौर पर, ऐसी संक्षिप्त स्टाइल का इस्तेमाल करें जो आसान हो, लेकिन कम शब्दों में अपनी बात कहे. साथ ही, अपने यूज़र इंटरफ़ेस (यूआई) में एक जैसी स्टाइल का इस्तेमाल करें.
पक्का करें कि आपने लिखने की स्टाइल और शब्दों के चुनाव के लिए, Material Design के सुझाव पढ़े हों और उनका पालन किया हो. ऐसा करने से, आपके ऐप्लिकेशन उपयोगकर्ताओं को ज़्यादा बेहतर दिखते हैं. साथ ही, उपयोगकर्ता आपके यूज़र इंटरफ़ेस (यूआई) को ज़्यादा तेज़ी से समझ पाते हैं.
इसके अलावा, जहां भी मुमकिन हो, हमेशा Android की स्टैंडर्ड शब्दावली का इस्तेमाल करें. जैसे, यूज़र इंटरफ़ेस (यूआई) के एलिमेंट के लिए. जैसे, ऐप्लिकेशन बार, विकल्प मेन्यू, सिस्टम बार, और सूचनाएं. Android के शब्दों का सही और लगातार इस्तेमाल करने से, अनुवाद करना आसान हो जाता है. साथ ही, उपयोगकर्ताओं के लिए बेहतर एंड-प्रॉडक्ट मिलता है.
तय की गई स्ट्रिंग के लिए, सही कॉन्टेक्स्ट उपलब्ध कराना
अपनी strings.xml फ़ाइल में स्ट्रिंग तय करते समय, पक्का करें कि आपने उस कॉन्टेक्स्ट के बारे में बताया हो जिसमें स्ट्रिंग का इस्तेमाल किया जाता है. यह जानकारी, अनुवादक के लिए बहुत काम की होती है. इससे बेहतर क्वालिटी का अनुवाद मिलता है. इससे आपको अपनी स्ट्रिंग को ज़्यादा असरदार तरीके से मैनेज करने में भी मदद मिलती है.
यहां एक उदाहरण दिया गया है:
<!-- The action for submitting a form. This text is on a button that can fit 30 chars --> <string name="login_submit_button">Sign in</string>
कॉन्टेक्स्ट की जानकारी उपलब्ध कराएं. जैसे:
- यह स्ट्रिंग किस लिए है? यह उपयोगकर्ता को कब और कहां दिखती है?
- यह यूज़र इंटरफ़ेस (यूआई) में कहां है? उदाहरण के लिए, बटन में अनुवाद, टेक्स्ट बॉक्स के मुकाबले कम फ़्लेक्सिबल होते हैं.
मैसेज के उन हिस्सों को मार्क करना जिनका अनुवाद नहीं करना है
अक्सर, स्ट्रिंग में ऐसा टेक्स्ट होता है जिसका अनुवाद अन्य भाषाओं में नहीं करना होता. इसके आम उदाहरण हैं: कोड का कोई हिस्सा, किसी वैल्यू के लिए प्लेसहोल्डर, कोई खास सिंबल या कोई नाम. स्ट्रिंग को अनुवाद के लिए तैयार करते समय, ऐसे टेक्स्ट को ढूंढें और मार्क करें जिसे बिना अनुवाद किए, उसी तरह रखना है. इससे अनुवादक उसमें बदलाव नहीं करेगा.
ऐसे टेक्स्ट को मार्क करने के लिए, <xliff:g> प्लेसहोल्डर टैग का इस्तेमाल करें जिसका अनुवाद नहीं करना है.
यहां एक उदाहरण टैग दिया गया है. इससे पता चलता है कि मैसेज को टूटने से बचाने के लिए, अनुवाद के दौरान टेक्स्ट "%1$s" में बदलाव नहीं करना है:
<string name="countdown"> <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday </string>
प्लेसहोल्डर टैग तय करते समय, एक आईडी एट्रिब्यूट जोड़ें. इससे पता चलता है कि प्लेसहोल्डर किस लिए है. अगर आपका ऐप्लिकेशन बाद में प्लेसहोल्डर की वैल्यू बदलता है, तो पक्का करें कि आपने उदाहरण एट्रिब्यूट उपलब्ध कराया हो. इससे, अनुमानित इस्तेमाल के बारे में पता चलता है.
यहां प्लेसहोल्डर टैग के कुछ और उदाहरण दिए गए हैं:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Example placeholder for a special Unicode symbol --> <string name="star_rating">Check out our 5 <xliff:g id="star">\u2605</xliff:g> </string> <!-- Example placeholder for a URL --> <string name="app_homeurl"> Visit us at <xliff:g id="application_homepage">http://my/app/home.html</xliff:g> </string> <!-- Example placeholder for a name --> <string name="prod_name"> Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g> </string> <!-- Example placeholder for a literal --> <string name="promo_message"> Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount. </string> ... </resources>
स्थानीय भाषा के हिसाब से बनाने की चेकलिस्ट
Android ऐप्लिकेशन को स्थानीय भाषा के हिसाब से बनाने और डिस्ट्रिब्यूट करने की प्रोसेस की पूरी जानकारी के लिए, ऐप्लिकेशन के कॉन्टेंट का अनुवाद करना और उसे स्थानीय भाषा में ढालना देखें.
स्थानीय भाषा के हिसाब से बनाने के सुझाव
अपने ऐप्लिकेशन को स्थानीय भाषा के हिसाब से बनाते समय, इन सुझावों का पालन करें.
अपने ऐप्लिकेशन को किसी भी स्थानीय भाषा में काम करने के लिए डिज़ाइन करना
उस डिवाइस के बारे में कोई अनुमान न लगाएं जिस पर कोई उपयोगकर्ता आपका ऐप्लिकेशन चलाता है. हो सकता है कि डिवाइस में ऐसा हार्डवेयर हो जिसकी आपको उम्मीद न हो या हो सकता है कि वह किसी ऐसी स्थानीय भाषा पर सेट हो जिसके लिए आपने प्लान नहीं किया है या जिसकी जांच नहीं की जा सकती. अपने ऐप्लिकेशन को इस तरह डिज़ाइन करें कि वह किसी भी डिवाइस पर सामान्य तरीके से काम करे या आसानी से बंद हो जाए.
अहम जानकारी: पक्का करें कि आपके ऐप्लिकेशन में डिफ़ॉल्ट रिसॉर्स का पूरा सेट शामिल हो. इसमें res/drawable/ और res/values/ फ़ोल्डर शामिल करें. इन फ़ोल्डर के नामों में कोई अतिरिक्त मॉडिफ़ायर शामिल न करें. इनमें वे सभी इमेज और टेक्स्ट शामिल होने चाहिए जिनकी ज़रूरत आपके ऐप्लिकेशन को होती है.
अगर किसी ऐप्लिकेशन में एक भी डिफ़ॉल्ट रिसॉर्स मौजूद नहीं है, तो वह किसी ऐसी स्थानीय भाषा पर सेट किए गए डिवाइस पर नहीं चलता जो काम नहीं करती. उदाहरण के लिए, अगर res/values/strings.xml डिफ़ॉल्ट फ़ाइल में कोई ऐसी स्ट्रिंग मौजूद नहीं है जिसकी ज़रूरत ऐप्लिकेशन को है, तो जब ऐप्लिकेशन किसी ऐसी स्थानीय भाषा में चलता है जो काम नहीं करती और res/values/strings.xml को लोड करने की कोशिश करता है, तो उपयोगकर्ता को गड़बड़ी का मैसेज और 'फ़ोर्स क्लोज़' बटन दिखता है.
ज़्यादा जानकारी के लिए, डिफ़ॉल्ट रिसॉर्स की जांच करना सेक्शन देखें.
ज़रूरत से ज़्यादा रिसॉर्स फ़ाइलें और टेक्स्ट स्ट्रिंग न बनाना
शायद आपको अपने ऐप्लिकेशन में हर रिसॉर्स के लिए, स्थानीय भाषा के हिसाब से वैकल्पिक रिसॉर्स बनाने की ज़रूरत नहीं है. उदाहरण के लिए, res/drawable/ डायरेक्ट्री में तय किया गया ऐप्लिकेशन का लोगो, किसी भी स्थानीय भाषा में काम कर सकता है. ऐसे में, वैकल्पिक ग्राफ़िक फ़ाइलें बनाने की कोई ज़रूरत नहीं है.
इसके अलावा, शायद आपको हर स्ट्रिंग के लिए वैकल्पिक टेक्स्ट बनाने की ज़रूरत नहीं है. उदाहरण के लिए, मान लें कि:
- आपके ऐप्लिकेशन की डिफ़ॉल्ट भाषा, अमेरिकन अंग्रेज़ी है.
res/values/strings.xmlमें, ऐप्लिकेशन में इस्तेमाल होने वाली हर स्ट्रिंग को अमेरिकन अंग्रेज़ी की स्पेलिंग का इस्तेमाल करके तय किया गया है. - कुछ अहम वाक्यांशों के लिए, आपको ब्रिटिश अंग्रेज़ी की स्पेलिंग उपलब्ध करानी है. आपको चाहिए कि जब आपका ऐप्लिकेशन, यूनाइटेड किंगडम में किसी डिवाइस पर चले, तो इन वैकल्पिक स्ट्रिंग का इस्तेमाल किया जाए.
इसके लिए, res/values-en-rGB/strings.xml नाम की एक छोटी फ़ाइल बनाएं.इसमें सिर्फ़ वे स्ट्रिंग शामिल करें जो यूके में ऐप्लिकेशन चलने पर अलग होती हैं. बाकी सभी स्ट्रिंग के लिए, ऐप्लिकेशन डिफ़ॉल्ट पर वापस जाता है और res/values/strings.xml में तय की गई स्ट्रिंग का इस्तेमाल करता है.
स्थानीय भाषा की जानकारी मैन्युअल तरीके से देखने के लिए, LocalConfiguration का इस्तेमाल करना
Android की ओर से उपलब्ध कराए गए LocalConfiguration का इस्तेमाल करके, स्थानीय भाषा की जानकारी देखी जा सकती है. इसके लिए, यहां दिया गया उदाहरण देखें:
val locale = LocalConfiguration.current.locales[0]
ऐप्लिकेशन के अनुवाद की सुविधा का इस्तेमाल करना
ऐप्लिकेशन के अनुवाद की सुविधा, Play Console में इंटिग्रेट की गई है. इससे आपको तुरंत कोट मिल सकता है और अनुवाद करने वाली कंपनी के साथ ऑर्डर दिया जा सकता है. ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की स्ट्रिंग, Play Store की लिस्टिंग का टेक्स्ट, IAP के नाम, और विज्ञापन कैंपेन के टेक्स्ट के लिए, एक या उससे ज़्यादा भाषाओं में अनुवाद का ऑर्डर दिया जा सकता है.
ऐप्लिकेशन की स्ट्रिंग का अनुवाद करने के लिए, Gemini का इस्तेमाल करना
Android Studio में Gemini का इस्तेमाल करके, अपने प्रोजेक्ट में सीधे तौर पर अपने ऐप्लिकेशन के स्ट्रिंग रिसॉर्स का अनुवाद किया जा सकता है. ज़्यादा जानकारी के लिए, ऐप्लिकेशन के कॉन्टेंट का अनुवाद करना और उसे स्थानीय भाषा में ढालना देखें.
स्थानीय भाषा के हिसाब से बनाए गए ऐप्लिकेशन की जांच करना
स्थानीय भाषा के हिसाब से बनाए गए अपने ऐप्लिकेशन की जांच, किसी डिवाइस पर या Android Emulator का इस्तेमाल करके करें. खास तौर पर, अपने ऐप्लिकेशन की जांच करके पक्का करें कि इसमें सभी ज़रूरी डिफ़ॉल्ट रिसॉर्स शामिल हों.
किसी डिवाइस पर जांच करना
ध्यान रखें कि जिस डिवाइस पर जांच की जा रही है वह अन्य जगहों पर उपभोक्ताओं के लिए उपलब्ध डिवाइसों से काफ़ी अलग हो सकता है. आपके डिवाइस पर उपलब्ध स्थानीय भाषाएं, अन्य डिवाइसों पर उपलब्ध स्थानीय भाषाओं से अलग हो सकती हैं. इसके अलावा, डिवाइस की स्क्रीन का रिज़ॉल्यूशन और डेंसिटी अलग-अलग हो सकती है. इससे आपके यूज़र इंटरफ़ेस (यूआई) में स्ट्रिंग और ड्रॉएबल के डिसप्ले पर असर पड़ सकता है.
किसी डिवाइस पर स्थानीय भाषा या भाषा बदलने के लिए, सेटिंग ऐप्लिकेशन का इस्तेमाल करें.
कंपोज़ेबल प्रीव्यू की मदद से जांच करना
किसी डिवाइस पर जांच करने से पहले, Android Studio में कंपोज़ेबल प्रीव्यू
का इस्तेमाल करके, स्थानीय भाषा के हिसाब से बनाए गए यूज़र इंटरफ़ेस (यूआई) की जांच की जा सकती है. इसके लिए, एम्युलेटर पर डिप्लॉय करने की ज़रूरत नहीं होती. अपने यूज़र इंटरफ़ेस (यूआई) का अलग-अलग भाषाओं में प्रीव्यू देखने के लिए, @Preview एनोटेशन का इस्तेमाल करें. जैसे, @Preview(locale = "fr"). इसके अलावा, राइट-टू-लेफ़्ट (आरटीएल) लेआउट की जांच करने के लिए, आरटीएल स्थानीय भाषा तय करें. जैसे, @Preview(locale = "ar").
एम्युलेटर पर जांच करना
एम्युलेटर का इस्तेमाल करने के बारे में जानकारी के लिए, Android Emulator पर ऐप्लिकेशन चलाना देखें.
स्थानीय भाषा के हिसाब से बनाई गई सेटिंग बनाना और उसका इस्तेमाल करना
स्थानीय भाषा के हिसाब से बनाई गई सेटिंग, भाषा या इलाके का ऐसा कॉम्बिनेशन होता है जिसे Android सिस्टम इमेज साफ़ तौर पर सपोर्ट नहीं करती. एम्युलेटर में स्थानीय भाषा के हिसाब से बनाई गई सेटिंग बनाकर, यह जांच की जा सकती है कि आपका ऐप्लिकेशन, स्थानीय भाषा के हिसाब से बनाई गई सेटिंग में कैसे काम करता है. इसके दो तरीके हैं:
- स्थानीय भाषा के हिसाब से बनाई गई सेटिंग वाले ऐप्लिकेशन का इस्तेमाल करें. इसे ऐप्लिकेशन टैब से ऐक्सेस किया जा सकता है. स्थानीय भाषा के हिसाब से बनाई गई सेटिंग बनाने के बाद, स्थानीय भाषा के नाम को दबाकर रखें और उस पर स्विच करें.
- स्थानीय भाषा के हिसाब से बनाई गई सेटिंग पर,
adbशेल से स्विच करें. इसके लिए, अगला सेक्शन देखें.
जब एम्युलेटर को किसी ऐसी स्थानीय भाषा पर सेट किया जाता है जो Android सिस्टम इमेज में उपलब्ध नहीं है, तो सिस्टम अपनी डिफ़ॉल्ट भाषा में दिखता है. हालांकि, आपका ऐप्लिकेशन स्थानीय भाषा के हिसाब से सही तरीके से काम करता है.
adb शेल से, एम्युलेटर की स्थानीय भाषा बदलना
adb शेल का इस्तेमाल करके, एम्युलेटर में स्थानीय भाषा बदलने के लिए, यह तरीका अपनाएं:
- वह स्थानीय भाषा चुनें जिसकी जांच करनी है. इसके बाद, उसका बीसीपी-47 लैंग्वेज टैग तय करें. जैसे, कैनेडियन फ़्रेंच के लिए
fr-CA. - कोई एम्युलेटर लॉन्च करें.
- होस्ट कंप्यूटर पर, कमांड-लाइन शेल से यह कमांड चलाएं:
adb shell
या, अगर आपने कोई डिवाइस अटैच किया है, तो यह तय करें कि आपको एम्युलेटर चाहिए. इसके लिए,-eविकल्प जोड़ें:
adb -e shell adbशेल प्रॉम्प्ट (#) पर, यह कमांड चलाएं:
setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
ब्रैकेट वाले सेक्शन को, पहले चरण के सही कोड से बदलें.
उदाहरण के लिए, कैनेडियन फ़्रेंच में जांच करने के लिए:
setprop persist.sys.locale fr-CA;stop;sleep 5;start
इससे एम्युलेटर रीस्टार्ट हो जाता है. होम स्क्रीन फिर से दिखने के बाद, अपना ऐप्लिकेशन फिर से लॉन्च करें. ऐप्लिकेशन, नई स्थानीय भाषा के साथ लॉन्च होगा.
डिफ़ॉल्ट रिसॉर्स की जांच करना
यह जांचने के लिए कि किसी ऐप्लिकेशन में, ज़रूरत की हर स्ट्रिंग रिसॉर्स शामिल है या नहीं, यह तरीका अपनाएं:
- एम्युलेटर या डिवाइस को किसी ऐसी भाषा पर सेट करें जिसे आपका ऐप्लिकेशन सपोर्ट नहीं करता. उदाहरण के लिए, अगर ऐप्लिकेशन में
res/values-fr/में फ़्रेंच स्ट्रिंग हैं, लेकिनres/values-es/में स्पैनिश स्ट्रिंग नहीं हैं, तो एम्युलेटर की स्थानीय भाषा को स्पैनिश पर सेट करें. एम्युलेटर को ऐसी स्थानीय भाषा पर सेट करने के लिए, स्थानीय भाषा के हिसाब से बनाई गई सेटिंग वाले ऐप्लिकेशन का इस्तेमाल किया जा सकता है. - ऐप्लिकेशन चलाएं.
- अगर ऐप्लिकेशन में गड़बड़ी का मैसेज और 'फ़ोर्स क्लोज़' बटन दिखता है, तो हो सकता है कि वह किसी ऐसी स्ट्रिंग को ढूंढ रहा हो जो उपलब्ध नहीं है. पक्का करें कि आपकी
res/values/strings.xmlफ़ाइल में, ऐप्लिकेशन में इस्तेमाल होने वाली हर स्ट्रिंग की डेफ़िनिशन शामिल हो.
अगर जांच सफल होती है, तो इसे अन्य तरह के कॉन्फ़िगरेशन के लिए दोहराएं. उदाहरण के लिए, अगर ऐप्लिकेशन में res/values-land/strings.xml नाम की स्ट्रिंग फ़ाइल है, लेकिन res/values-port/strings.xml नाम की कोई फ़ाइल नहीं है, तो एम्युलेटर या डिवाइस को पोर्ट्रेट ओरिएंटेशन पर सेट करें और देखें कि ऐप्लिकेशन चलता है या नहीं.
अन्य संसाधन
स्थानीय भाषा के हिसाब से बनाने के बारे में ज़्यादा जानकारी के लिए, यहां दिए गए अन्य संसाधन देखें:
दस्तावेज़
- ऐप्लिकेशन के रिसॉर्स की खास जानकारी
- ऐप्लिकेशन के कॉन्टेंट का अनुवाद करना और उसे स्थानीय भाषा में ढालना