Android
अंतर्राष्ट्रीयकरण और स्थानीयकरण (I18N और L10N)
खोज…
परिचय
अंतर्राष्ट्रीयकरण (i18n) और स्थानीयकरण (L10n) का उपयोग भाषाओं, क्षेत्रीय अंतर और लक्षित दर्शकों में अंतर के अनुसार सॉफ़्टवेयर को अनुकूलित करने के लिए किया जाता है।
अंतर्राष्ट्रीयकरण: भविष्य के स्थानीयकरण की योजना बनाने की प्रक्रिया अर्थात सॉफ्टवेयर डिजाइन को इस हद तक लचीला बनाना कि वह भविष्य के स्थानीयकरण के प्रयासों को समायोजित और अनुकूल कर सके।
स्थानीयकरण: किसी विशेष क्षेत्र / देश / बाजार (स्थान) के लिए सॉफ्टवेयर को अपनाने की प्रक्रिया।
टिप्पणियों
स्थानीयकरण के लिए एक उपकरण का परीक्षण करने के लिए, डिवाइस या एमुलेटर को विशेष लोकेल में निम्नानुसार adb
का उपयोग करके रिबूट किया जा सकता है:
- कमांड का उपयोग करके एडीबी चलाएं:
adb shell
- निम्नलिखित कमांड को adb कमांड प्रॉम्प्ट पर चलाएँ:
setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
जहां [BCP-47 भाषा टैग] भाषा विशिष्ट कोड है जैसा यहाँ वर्णित है: BCP47 कोड;
ऐप में जापानी स्थानीयकरण की जांच करने के लिए, कमांड का उपयोग करें: setprop persist.sys.locale ja-JP;stop;sleep 5;start
स्थानीयकरण के लिए योजना: घोषणापत्र में RTL समर्थन सक्षम करें
I18n और L10n के लिए आरटीएल (दाएं-से-बाएं) समर्थन योजना का एक अनिवार्य हिस्सा है। अंग्रेजी भाषा के विपरीत जो बाएं से दाएं लिखी जाती है, अरबी, जापानी, हिब्रू, आदि जैसी कई भाषाएं दाएं से बाएं लिखी जाती हैं। अधिक वैश्विक दर्शकों से अपील करने के लिए, परियोजना की शुरुआत से ही इन भाषाओं का समर्थन करने के लिए अपने लेआउट की योजना बनाना एक अच्छा विचार है, ताकि बाद में स्थानीयकरण जोड़ना आसान हो।
AndroidManifest
में AndroidManifest
टैग supportsRtl
जोड़कर RTL सपोर्ट को Android ऐप में सक्षम किया जा सकता है:
<application
...
android:supportsRtl="true"
...>
...
</application>
स्थानीयकरण के लिए योजना: लेआउट में RTL समर्थन जोड़ें
एसडीके 17 (एंड्रॉइड 4.2) शुरू करना, आरटीएल समर्थन एंड्रॉइड लेआउट में जोड़ा गया था और स्थानीयकरण का एक अनिवार्य हिस्सा है। आगे बढ़ते हुए, लेआउट में left/right
नोटेशन को start/end
नोटेशन से बदल दिया जाना चाहिए। यदि, हालांकि, आपकी परियोजना का minSdk
मूल्य 17
से कम है, तो left/right
और start/end
नोटेशन दोनों का उपयोग लेआउट में किया जाना चाहिए।
रिश्तेदार लेआउट के लिए, alignParentStart
और alignParentEnd
का उपयोग किया जाना चाहिए, जैसे:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
गुरुत्वाकर्षण और लेआउट गुरुत्वाकर्षण को निर्दिष्ट करने के लिए, समान संकेतन का उपयोग किया जाना चाहिए, जैसे:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|start"
android:gravity="left|start"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|end"
android:gravity="right|end"/>
पैडिंग और मार्जिन भी तदनुसार निर्दिष्ट किया जाना चाहिए, जैसे:
<include layout="@layout/notification"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginStart="12dp"
android:paddingLeft="128dp"
android:paddingStart="128dp"
android:layout_toLeftOf="@id/cancel_action"
android:layout_toStartOf="@id/cancel_action"/>
<include layout="@layout/notification2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:layout_marginEnd="12dp"
android:paddingRight="128dp"
android:paddingEnd="128dp"
android:layout_toRightOf="@id/cancel_action"
android:layout_toEndOf="@id/cancel_action"/>
स्थानीयकरण के लिए योजना: RTL के लिए टेस्ट लेआउट
यह जांचने के लिए कि क्या बनाए गए लेआउट RTL संगत हैं, निम्नलिखित कार्य करें:
सेटिंग्स पर जाएं -> डेवलपर विकल्प -> ड्राइंग -> बल RTL लेआउट दिशा
इस विकल्प को सक्षम करने से डिवाइस को RTL स्थानों का उपयोग करने के लिए बाध्य किया जाएगा और आप RTL समर्थन के लिए ऐप के सभी भागों को आसानी से सत्यापित कर सकते हैं। ध्यान दें कि आपको वास्तव में इस बिंदु तक किसी भी नए स्थान / भाषा समर्थन को जोड़ने की आवश्यकता नहीं है।
स्थानीयकरण के लिए कोडिंग: डिफ़ॉल्ट स्ट्रिंग्स और संसाधनों का निर्माण
स्थानीयकरण के लिए कोडिंग का पहला कदम डिफ़ॉल्ट संसाधन बनाना है। यह कदम इतना निहित है कि कई डेवलपर्स इसके बारे में सोचते भी नहीं हैं। हालाँकि, डिफ़ॉल्ट संसाधन बनाना महत्वपूर्ण है क्योंकि यदि डिवाइस असमर्थित स्थान पर चलता है, तो वह अपने सभी संसाधनों को डिफ़ॉल्ट फ़ोल्डर से लोड करेगा। यदि कोई भी संसाधन डिफ़ॉल्ट फ़ोल्डर से गायब है, तो ऐप बस दुर्घटनाग्रस्त हो जाएगा।
स्ट्रिंग का डिफ़ॉल्ट सेट निम्न फ़ोल्डर में निर्दिष्ट स्थान पर रखा जाना चाहिए:
res/values/strings.xml
इस फ़ाइल में भाषा में तार होना चाहिए जो कि ऐप के अधिकांश उपयोगकर्ताओं के बोलने की उम्मीद है।
इसके अलावा, एप्लिकेशन के लिए डिफ़ॉल्ट संसाधन निम्नलिखित फ़ोल्डर और स्थानों पर रखे जाने चाहिए:
res/drawable/
res/layout/
यदि आपके एप्लिकेशन को anim
, या xml
जैसे फ़ोल्डरों की आवश्यकता है, तो डिफ़ॉल्ट संसाधनों को निम्न फ़ोल्डर और स्थानों में जोड़ा जाना चाहिए:
res/anim/
res/xml/
res/raw/
स्थानीयकरण के लिए कोडिंग: वैकल्पिक तार प्रदान करना
अन्य भाषाओं (स्थानों) में अनुवाद प्रदान करने के लिए, हमें निम्नलिखित सम्मेलन द्वारा एक अलग फ़ोल्डर में एक strings.xml
. strings.xml
बनाने की आवश्यकता है:
res/values-<locale>/strings.xml
उसी के लिए एक उदाहरण नीचे दिया गया है:
इस उदाहरण में, हमारे पास फ़ाइल res/values/strings.xml
स्ट्रिंग्स.xml में डिफ़ॉल्ट अंग्रेजी स्ट्रिंग्स हैं, फ़ोल्डर res/values-fr/strings.xml
res/values/strings.xml
में फ्रेंच अनुवाद प्रदान किए जाते हैं और जापानी अनुवाद फ़ोल्डर res/values-ja/strings.xml
में प्रदान किए जाते हैं res/values-ja/strings.xml
अन्य स्थानों के लिए अन्य अनुवाद भी इसी तरह ऐप में जोड़े जा सकते हैं।
स्थानीय कोड की एक पूरी सूची यहां पाई जा सकती है: आईएसओ 639 कोड
गैर-अनुवादनीय स्ट्रिंग्स:
आपकी परियोजना में कुछ तार हो सकते हैं जिनका अनुवाद नहीं किया जाना है। साझाकरण के लिए कुंजी के रूप में उपयोग किए जाने वाले स्ट्रिंग्स को इस श्रेणी में आते हैं। इन स्ट्रिंग्स को केवल डिफ़ॉल्ट स्ट्रिंग्स में संग्रहीत किया जाना चाहिए। strings.xml
और इसे एक translatable="false"
विशेषता के साथ चिह्नित किया जाना चाहिए। जैसे
<string name="pref_widget_display_label_hot">Hot News</string>
<string name="pref_widget_display_key" translatable="false">widget_display</string>
<string name="pref_widget_display_hot" translatable="false">0</string>
यह विशेषता महत्वपूर्ण है क्योंकि अनुवाद अक्सर उन पेशेवरों द्वारा किए जाते हैं जो द्विभाषी होते हैं। इससे अनुवादों में शामिल इन लोगों को ऐसे तार की पहचान करने में मदद मिलेगी, जिनका अनुवाद नहीं किया जा सकता है, जिससे समय और धन की बचत होती है।
स्थानीयकरण के लिए कोडिंग: वैकल्पिक लेआउट प्रदान करना
भाषा विशिष्ट लेआउट बनाना अक्सर अनावश्यक होता है यदि आपने सही start/end
नोटेशन निर्दिष्ट किया है, जैसा कि पहले उदाहरण में वर्णित है। हालाँकि, ऐसी परिस्थितियाँ हो सकती हैं, जहाँ डिफॉल्ट लेआउट कुछ भाषाओं के लिए सही तरीके से काम नहीं कर सकते हैं। कभी-कभी, बाएं से दाएं लेआउट RTL भाषाओं के लिए अनुवाद नहीं कर सकते हैं। ऐसे मामलों में सही लेआउट प्रदान करना आवश्यक है।
RTL लेआउट के लिए पूर्ण अनुकूलन प्रदान करने के लिए, हम ldrtl
रिसोर्स क्वालिफायर का उपयोग करके पूरी तरह से अलग लेआउट फ़ाइलों का उपयोग कर सकते हैं ( ldrtl
लेआउट-दिशा-दाएँ-से-बाएँ के लिए खड़ा है)। उदाहरण के लिए, हम आपकी डिफ़ॉल्ट लेआउट फ़ाइलों को res/layout/
और हमारे आरटीएल अनुकूलित लेआउट को res/layout-ldrtl/
।
ldrtl
क्वालीफायर drawable संसाधनों के लिए बहुत अच्छा है, ताकि आप ग्राफिक्स को रीडिंग दिशा के अनुरूप दिशा में उन्मुख कर सकें।
यहाँ एक महान पोस्ट है जो ldrtl
लेआउट की पूर्वता का वर्णन करती है: भाषा विशिष्ट लेआउट