भाषा और स्थान-भाषा के समाधान के बारे में खास जानकारी

Android 7.0 (एपीआई लेवल 24) और इसके बाद के वर्शन वाले डिवाइसों पर, Android, कई भाषाओं के उपयोगकर्ताओं के लिए बेहतर सहायता उपलब्ध कराता है. इससे उन्हें सेटिंग में एक से ज़्यादा स्थान-भाषाओं को चुनने की सुविधा मिलती है. Android पर यह सुविधा कई भाषाओं में उपलब्ध है. साथ ही, संसाधनों के समाधान के लिए सिस्टम के तरीके में बदलाव करना.

इस दस्तावेज़ की शुरुआत में, यहां दिए गए संसाधनों का समाधान करने की रणनीति के बारे में बताया गया है Android 7.0 (एपीआई लेवल 24) से पहले के वर्शन. इसके बाद, इसमें बताया गया है कि Android 7.0 में संसाधन का रिज़ॉल्यूशन बेहतर बनाने की रणनीति को बेहतर बनाया है. आख़िर में, नीचे बताया गया है कि कई भाषाएं जानने वाले लोगों की मदद करने के लिए, भाषाओं की संख्या बढ़ाई गई है.

भाषा से जुड़े संसाधनों का समाधान करने में आने वाली चुनौतियां

Android 7.0 से पहले के वर्शन में, Android हमेशा सही तरीके से काम नहीं कर पाता ऐप्लिकेशन और सिस्टम की स्थान-भाषाओं से मेल खाते हों.

उदाहरण के लिए, मान लें कि आपके सामने ऐसा है:

  • आपके ऐप्लिकेशन की डिफ़ॉल्ट भाषा en_US (यूएस अंग्रेज़ी) है और इसमें यह भी है es_ES में स्थानीय भाषा में स्पैनिश स्ट्रिंग रिसॉर्स फ़ाइलें.
  • डिवाइस को es_MX पर सेट किया गया है

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

अगर उपयोगकर्ता कोई ऐसी भाषा चुनता है जो किen_US यह ऐप्लिकेशन किसी भी तरह से काम नहीं करता, जैसे कि फ़्रेंच. उदाहरण के लिए:

टेबल 1. सटीक स्थान-भाषा के मिलान के बिना संसाधन का रिज़ॉल्यूशन.

उपयोगकर्ता सेटिंग ऐप्लिकेशन के संसाधन संसाधन का रिज़ॉल्यूशन
fr_CH डिफ़ॉल्ट (hi)
de_DE
ES_ES
fr_FR
it_IT
fr_CH => आज़माएं गड़बड़ी हुई
fr => आज़माएं गड़बड़ी हुई
डिफ़ॉल्ट का उपयोग करें (en)

इस उदाहरण में, सिस्टम बिना अंग्रेज़ी स्ट्रिंग को यह जानने के लिए कि उपयोगकर्ता अंग्रेज़ी समझ सकता है या नहीं. यह व्यवहार काफ़ी आम है आगे मिलने वाली सुविधाओं से करें.

संसाधनों की समस्या हल करने की रणनीति में सुधार

Android 7.0 (एपीआई लेवल 24), ज़्यादा बेहतर रिसॉर्स रिज़ॉल्यूशन दिखाता है. अपने-आप बेहतर फ़ॉलबैक ढूंढता है. हालांकि, समस्या का समाधान पाने और उसे बेहतर बनाने के लिए, रखरखाव के लिए, आपको संसाधनों को सबसे आम बोलचाल की बोली में संग्रहित करना चाहिए. उदाहरण के लिए, अगर आपको स्पैनिश भाषा में संसाधन सेव करने थे values-es-rUS डायरेक्ट्री में करने से पहले, उन्हें values-b+es+419 डायरेक्ट्री में ले जाएं, इसमें लैटिन अमेरिकन स्पैनिश भाषा शामिल है. इसी तरह, अगर आपके पास values-en-rGB नाम की डायरेक्ट्री, नाम बदलें values-b+en+001 की डायरेक्ट्री (इंटरनैशनल) अंग्रेज़ी में कहा जाता है, क्योंकि सबसे आम en-GB स्ट्रिंग का पैरंट है, जो en-001 है. यहां दिए गए उदाहरणों में बताया गया है कि इन तरीकों से परफ़ॉर्मेंस क्यों बेहतर होती है और संसाधन के रिज़ॉल्यूशन की विश्वसनीयता.

रिसॉर्स के रिज़ॉल्यूशन के उदाहरण

Android के 7.0 से बाद के वर्शन के साथ, इस मामले में टेबल 1 को अलग तरीके से हल किया गया है:

दूसरी टेबल. कोई भी समस्या न होने पर, समाधान की बेहतर रणनीति स्थान-भाषा से पूरी तरह मेल खाने वाला.

उपयोगकर्ता सेटिंग ऐप्लिकेशन के संसाधन संसाधन का रिज़ॉल्यूशन
  1. fr_CH
डिफ़ॉल्ट (hi)
de_DE
ES_ES
fr_FR
it_IT
fr_CH => आज़माएं गड़बड़ी हुई
fr => आज़माएं गड़बड़ी हुई
फ़्रांस के बच्चों को आज़माएं => fr_FR
fr_FR का इस्तेमाल करें

अब उपयोगकर्ता को अंग्रेज़ी के बजाय फ़्रेंच संसाधन मिलेंगे. इस उदाहरण में यह भी दिखाया गया है आपको fr_FR के बजाय, fr में फ़्रेंच स्ट्रिंग क्यों सेव करनी चाहिए Android 7.0 या इसके बाद के वर्शन के लिए. आइए, कार्रवाई करते हैं मिलान के लिए सबसे पास की इससे रिज़ॉल्यूशन को तेज़ और बेहतर अनुमान लगाया जा सकता है.

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

तीसरी टेबल. संसाधन का रिज़ॉल्यूशन जब ऐप्लिकेशन सिर्फ़ उपयोगकर्ता की दूसरी पसंदीदा स्थान-भाषा सेटिंग हो.

उपयोगकर्ता सेटिंग ऐप्लिकेशन के संसाधन संसाधन का रिज़ॉल्यूशन
  1. fr_CH
  2. it_CH
डिफ़ॉल्ट (hi)
de_DE
ES_ES
it_IT
fr_CH => आज़माएं गड़बड़ी हुई
fr => आज़माएं गड़बड़ी हुई
फ़्रांस के बच्चों को आज़माएं => गड़बड़ी हुई
इसे आज़माएं_CH => गड़बड़ी हुई
इसे आज़माएं => गड़बड़ी हुई
इसके बच्चों को आज़माएं => it_IT
इसका उपयोग करें_IT

उपयोगकर्ता को अब भी वह भाषा मिलती है जिसे वह समझ सकता है. हालांकि, ऐप्लिकेशन में वह भाषा उपलब्ध नहीं है फ़्रेंच सीखने में मदद करता है.

अपने ऐप्लिकेशन को इस तरह डिज़ाइन करना कि वह अन्य भाषाओं के साथ काम कर सके

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

बताएं कि आपका ऐप्लिकेशन किन भाषाओं में काम करता है

यह पक्का करने के लिए कि भाषाओं का सही तरीके से समाधान किया गया है, वे भाषाएं चुनें जिनका इस्तेमाल करके आपका ऐप्लिकेशन मॉड्यूल-लेवल की build.gradle फ़ाइल में resConfigs प्रॉपर्टी मौजूद होनी चाहिए.

नीचे दिया गया कोड सैंपल, इस्तेमाल की जा सकने वाली भाषाओं को बताने के लिए, resConfigs इस्तेमाल करने का तरीका बताता है. इस उदाहरण में, ऐप्लिकेशन अंग्रेज़ी और स्पैनिश, दोनों भाषाओं में काम करता है.

ग्रूवी

android {
    defaultConfig {
        ...
        resConfigs "en", "es"
    }
}

Kotlin

android {
    defaultConfig {
        ...
        resConfigs("en", "es")
    }
}
बिल्ड सिस्टम आपके ऐप्लिकेशन और उसकी डिपेंडेंसी के संसाधनों को जिस तरीके से मर्ज करता है उसके लिए आपको ऐसा करना होगा: इस तरह से काम करने वाली भाषाएं तय करें, ताकि यह पक्का हो सके कि उपयोगकर्ता की भाषा सेटिंग सही तरीके से मिली हैं.

LocaleList API

Android 7.0 (एपीआई लेवल 24) और Android 7.0 के बाद के वर्शन में, Android LocaleList.getDefault() एपीआई जिसकी मदद से ऐप्लिकेशन, उपयोगकर्ता की बताई गई भाषाओं की सूची से सीधे क्वेरी कर सकते हैं. यह एपीआई आपको अपनी ऑडियंस की मदद करने के लिए, ऐप्लिकेशन के व्यवहार और कॉन्टेंट को बेहतर तरीके से दिखाने के लिए किया जा सकता है. उदाहरण के लिए, Search उपयोगकर्ता की सेटिंग के आधार पर, कई भाषाओं में नतीजे दिखा सकती है. ब्राउज़र ऐप्लिकेशन उस भाषा में पेजों का अनुवाद करने से बचा सकता है जिसे उपयोगकर्ता पहले से जानता है. और कीबोर्ड ऐप्लिकेशन सभी सही लेआउट को अपने-आप चालू कर सकते हैं.

फ़ॉर्मैटर

Android 6.0 (एपीआई लेवल 23) तक के वर्शन के लिए, Android सिर्फ़ एक वर्शन पर काम करता है या दो स्थान-भाषाएं कई सामान्य भाषाओं के लिए (hi, es, ar, fr, ru). हर भाषा के कुछ ही वैरिएंट थे, इसलिए कुछ संख्याओं और तारीखों को हार्ड कोड की गई स्ट्रिंग के तौर पर सेव करके, ऐप्लिकेशन को बंद किया जा सकता है संसाधन फ़ाइलों में. हालांकि, Android के लिए पहले से ज़्यादा स्थान-भाषाएँ, वहाँ हो सकती हैं तारीख, समय, मुद्राओं, और इसी तरह के दूसरे फ़ॉर्मैट के फ़ॉर्मैट में काफ़ी अंतर यहां तक कि एक ही स्थान-भाषा में भी जानकारी उपलब्ध कराई जा सकती है. फ़ॉर्मैट की हार्ड-कोडिंग करने से जिससे असली उपयोगकर्ताओं को भ्रम हो सकता है. इसलिए, Android 7.0 या उसके बाद वाले वर्शन के लिए डेवलप करते समय, हार्ड कोडिंग नंबर और डेट स्ट्रिंग के बजाय फ़ॉर्मैटर का इस्तेमाल करें.

उदाहरण के लिए, Android 7.0 और उसके बाद वाले वर्शन में अरबी भाषा में 27 भाषाएं. ये स्थान-भाषाएं ज़्यादातर संसाधन शेयर कर सकती हैं, लेकिन कुछ ASCII अंकों को पसंद करते हैं, जबकि अन्य स्थानीय अंकों को पसंद करते हैं. उदाहरण के लिए, जब आपको अंकों के वैरिएबल वाला वाक्य बनाना हो, जैसे "चार अंकों वाला पिन चुनें", फ़ॉर्मैटर का इस्तेमाल करें. जैसे:

 format(locale, "Choose a %d-digit PIN", 4)