अपना ऐप्लिकेशन स्थानीय जगह के अनुसार बनाना

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 फ़ाइलें बनानी होंगी. हर फ़ाइल को किसी स्थान-भाषा के हिसाब से संसाधन डायरेक्ट्री में सेव किया जाएगा:

  1. res/values/strings.xml
    इसमें उन सभी स्ट्रिंग के लिए अंग्रेज़ी टेक्स्ट शामिल है जिनका इस्तेमाल ऐप्लिकेशन करता है. इसमें title नाम की स्ट्रिंग के लिए टेक्स्ट भी शामिल है.
  2. res/values-fr/strings.xml
    सभी स्ट्रिंग के लिए फ़्रेंच टेक्स्ट शामिल करें. इसमें title भी शामिल है.
  3. 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/
    इसमें ऐसे ग्राफ़िक शामिल हैं जिन्हें किसी ऐसे डिवाइस के साथ इस्तेमाल करने के लिए ऑप्टिमाइज़ किया गया है जो स्टाइलस से इनपुट लेता है. साथ ही, जिसमें लैंडस्केप ओरिएंटेशन में क्यूवीजीए कम डेंसिटी वाली स्क्रीन है.
  • res/drawable-ja/
    इसमें ऐसे ग्राफ़िक्स शामिल हैं जिन्हें जापानी भाषा के साथ इस्तेमाल करने के लिए ऑप्टिमाइज़ किया गया है.

अगर ऐप्लिकेशन किसी ऐसे डिवाइस पर चलता है जिसे जैपनीज़ भाषा इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो Android, res/drawable-ja/ से ग्राफ़िक लोड करता है. भले ही, डिवाइस ऐसा हो जिसमें स्टाइलस से इनपुट की उम्मीद की जाती हो और जिसमें लैंडस्केप ओरिएंटेशन में क्यूवीजीए कम डेंसिटी वाली स्क्रीन हो.

अपवाद: चुनने की प्रोसेस में, स्थान-भाषा के बजाय सिर्फ़ मोबाइल देश कोड (एमसीसी) और मोबाइल नेटवर्क कोड (एमएनसी) को प्राथमिकता दी जाती है.

उदाहरण:

मान लें कि आपके पास यह स्थिति है:

  • ऐप्लिकेशन कोड, R.string.text_a को कॉल करता है.
  • काम की दो संसाधन फ़ाइलें उपलब्ध हैं:
    • res/values-mcc404/strings.xml, जिसमें ऐप्लिकेशन की डिफ़ॉल्ट भाषा में text_a शामिल है. इस मामले में, डिफ़ॉल्ट भाषा अंग्रेज़ी है.
    • res/values-hi/strings.xml, जिसमें हिन्दी में text_a शामिल है.
  • यह ऐप्लिकेशन एक ऐसे डिवाइस पर चल रहा है जिसका कॉन्फ़िगरेशन इस तरह है:
    • सिम कार्ड, भारत के किसी मोबाइल नेटवर्क (एमसीसी 404) से कनेक्ट हो.
    • भाषा, हिन्दी (hi) पर सेट हो.

Android, text_a को res/values-mcc404/strings.xml (अंग्रेज़ी में) से लोड करता है. भले ही, डिवाइस को हिन्दी के लिए कॉन्फ़िगर किया गया हो. ऐसा इसलिए होता है, क्योंकि संसाधन चुनने की प्रोसेस में, 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 के दिशा-निर्देशों का पालन करना

यूज़र इंटरफ़ेस (यूआई) डिज़ाइन और डेवलप करते समय, इस बात पर खास ध्यान दें कि उपयोगकर्ता से किस तरह बात की जाए. आम तौर पर, ऐसी स्टाइल का इस्तेमाल करें जो दोस्ताना हो, लेकिन कम शब्दों में हो. साथ ही, अपने सभी यूज़र इंटरफ़ेस (यूआई) में एक जैसी स्टाइल का इस्तेमाल करें.

पक्का करें कि आपने लिखने के स्टाइल और शब्दों के चुनाव के लिए, मटीरियल डिज़ाइन के सुझावों को पढ़ा और उनका पालन किया हो. ऐसा करने से, उपयोगकर्ता को आपके ऐप्लिकेशन ज़्यादा बेहतर लगते हैं. साथ ही, उपयोगकर्ताओं को आपके यूज़र इंटरफ़ेस (यूआई) को ज़्यादा तेज़ी से समझने में मदद मिलती है.

साथ ही, जहां भी संभव हो, हमेशा 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 पेज के टेक्स्ट, आईएपी के नाम, और विज्ञापन कैंपेन के टेक्स्ट के लिए, एक या उससे ज़्यादा भाषाओं में अनुवाद का ऑर्डर दिया जा सकता है.

ऐप्लिकेशन की स्ट्रिंग का अनुवाद करने के लिए Gemini का इस्तेमाल करना

Android Studio में Gemini का इस्तेमाल करके, अपने ऐप्लिकेशन के स्ट्रिंग रिसॉर्स का अनुवाद सीधे अपने प्रोजेक्ट में किया जा सकता है. ज़्यादा जानकारी के लिए, ऐप्लिकेशन के कॉन्टेंट का अनुवाद करना और उसे स्थानीय भाषा के मुताबिक बनाना लेख पढ़ें.

स्थानीय भाषा में उपलब्ध ऐप्लिकेशन की जांच करना

किसी डिवाइस पर या Android Emulator का इस्तेमाल करके, स्थानीय भाषा में उपलब्ध कराए गए अपने ऐप्लिकेशन की जांच करें. खास तौर पर, अपने ऐप्लिकेशन की जांच करके पक्का करें कि उसमें सभी ज़रूरी डिफ़ॉल्ट संसाधन शामिल हों.

किसी डिवाइस पर टेस्ट करना

ध्यान रखें कि जिस डिवाइस पर टेस्ट किया जा रहा है वह अन्य जगहों पर उपभोक्ताओं के लिए उपलब्ध डिवाइसों से काफ़ी अलग हो सकता है. आपके डिवाइस पर उपलब्ध भाषाएं, अन्य डिवाइसों पर उपलब्ध भाषाओं से अलग हो सकती हैं. इसके अलावा, डिवाइस की स्क्रीन का रिज़ॉल्यूशन और डेंसिटी अलग-अलग हो सकती है. इससे आपके यूज़र इंटरफ़ेस (यूआई) में स्ट्रिंग और ड्रॉएबल के डिसप्ले पर असर पड़ सकता है.

किसी डिवाइस पर स्थान-भाषा या भाषा बदलने के लिए, सेटिंग ऐप्लिकेशन का इस्तेमाल करें.

कंपोज़ेबल की झलक के साथ टेस्ट करना

किसी डिवाइस पर जांच करने से पहले, Android Studio में कंपोज़ेबल की झलक का इस्तेमाल किया जा सकता है. इससे, एम्युलेटर पर डिप्लॉय किए बिना, स्थानीय भाषा में उपलब्ध यूज़र इंटरफ़ेस (यूआई) की जांच की जा सकती है. अलग-अलग भाषाओं में अपने यूज़र इंटरफ़ेस (यूआई) की झलक देखने के लिए, @Preview एनोटेशन (जैसे, @Preview(locale = "fr")) का इस्तेमाल करें. @Preview(locale = "ar") जैसी आरटीएल भाषा की जानकारी देकर, राइट-टू-लेफ़्ट (आरटीएल) लेआउट की जांच भी की जा सकती है.

एम्युलेटर पर टेस्ट करें

एम्युलेटर इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, Android Emulator पर ऐप्लिकेशन चलाना लेख पढ़ें.

कस्टम स्थानीय भाषा बनाना और उसका इस्तेमाल करना

"कस्टम" स्थान-भाषा, भाषा या क्षेत्र का ऐसा कॉम्बिनेशन है जो Android सिस्टम इमेज में साफ़ तौर पर काम नहीं करता. एम्युलेटर में कस्टम स्थान-भाषा बनाकर, यह टेस्ट किया जा सकता है कि आपका ऐप्लिकेशन कस्टम स्थान-भाषा में कैसे काम करता है. ऐसा करने के दो तरीके हैं:

  • Custom Locale ऐप्लिकेशन का इस्तेमाल करें. इसे ऐप्लिकेशन टैब से ऐक्सेस किया जा सकता है. पसंद के मुताबिक स्थान-भाषा बनाने के बाद, स्थान-भाषा के नाम को दबाकर रखें और उस पर स्विच करें.
  • adb शेल से कस्टम स्थान-भाषा में बदलें, जैसा कि यहां बताया गया है.

जब एम्युलेटर को ऐसी स्थान-भाषा पर सेट किया जाता है जो Android सिस्टम इमेज में उपलब्ध नहीं है, तो सिस्टम खुद ही अपनी डिफ़ॉल्ट भाषा में दिखता है. हालांकि, आपका ऐप्लिकेशन सही तरीके से स्थानीय भाषा में उपलब्ध है.

adb शेल से एम्युलेटर की स्थान-भाषा बदलना

adb शेल का इस्तेमाल करके, एम्युलेटर में स्थान-भाषा बदलने के लिए, यह तरीका अपनाएं:

  1. वह स्थान-भाषा चुनें जिसे आपको टेस्ट करना है. साथ ही, उसका BCP-47 भाषा टैग तय करें. जैसे, कैनेडियन फ़्रेंच के लिए fr-CA.
  2. कोई एम्युलेटर लॉन्च करें.
  3. होस्ट कंप्यूटर पर कमांड-लाइन शेल से, यह कमांड चलाएं:
    adb shell
    इसके अलावा, अगर आपके पास कोई डिवाइस अटैच है, तो -e विकल्प जोड़कर बताएं कि आपको एम्युलेटर चाहिए:
    adb -e shell
  4. adb शेल प्रॉम्प्ट (#) पर, यह कमांड चलाएं:
    setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
    ब्रैकेट वाले सेक्शन को पहले चरण में मिले सही कोड से बदलें.

    उदाहरण के लिए, कैनेडियन फ़्रेंच में टेस्ट करने के लिए:
    setprop persist.sys.locale fr-CA;stop;sleep 5;start

इससे एमुलेटर रीस्टार्ट हो जाता है. होम स्क्रीन फिर से दिखने पर, ऐप्लिकेशन को फिर से लॉन्च करें. इसके बाद, ऐप्लिकेशन नई भाषा में लॉन्च हो जाएगा.

डिफ़ॉल्ट संसाधनों के लिए टेस्ट करना

यह जांचने के लिए कि किसी ऐप्लिकेशन में हर वह स्ट्रिंग रिसॉर्स शामिल है जिसकी उसे ज़रूरत है, यह तरीका अपनाएं:

  1. एम्युलेटर या डिवाइस को ऐसी भाषा पर सेट करें जो आपके ऐप्लिकेशन के साथ काम नहीं करती. उदाहरण के लिए, अगर ऐप्लिकेशन में res/values-fr/ में फ़्रेंच स्ट्रिंग हैं, लेकिन res/values-es/ में कोई स्पैनिश स्ट्रिंग नहीं है, तो एम्युलेटर की भाषा को स्पैनिश पर सेट करें. एम्युलेटर को ऐसी भाषा पर सेट करने के लिए जिसका इस्तेमाल नहीं किया जा सकता, Custom Locale ऐप्लिकेशन का इस्तेमाल किया जा सकता है.
  2. ऐप्लिकेशन चलाएं.
  3. अगर ऐप्लिकेशन में गड़बड़ी का मैसेज और 'ज़बरदस्ती बंद करें' बटन दिखता है, तो हो सकता है कि वह ऐसी स्ट्रिंग खोज रहा हो जो उपलब्ध नहीं है. पक्का करें कि आपकी res/values/strings.xml फ़ाइल में, ऐप्लिकेशन में इस्तेमाल की जाने वाली हर स्ट्रिंग की परिभाषा शामिल हो.

अगर टेस्ट सफल रहता है, तो इसे अन्य तरह के कॉन्फ़िगरेशन के लिए दोहराएं. उदाहरण के लिए, अगर ऐप्लिकेशन में res/values-land/strings.xml नाम की स्ट्रिंग फ़ाइल है, लेकिन res/values-port/strings.xml नाम की फ़ाइल नहीं है, तो एम्युलेटर या डिवाइस को पोर्ट्रेट ओरिएंटेशन पर सेट करें और देखें कि ऐप्लिकेशन चलता है या नहीं.

अन्य संसाधन

स्थानीय भाषा में अनुवाद करने के बारे में ज़्यादा जानने के लिए, यहां दिए गए अतिरिक्त संसाधन देखें:

दस्तावेज़

कॉन्टेंट देखना