यूनिकोड और अंतरराष्ट्रीय स्तर पर काम करने वाली सुविधाएं

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

Android 6.0 (एपीआई लेवल 23) के ज़रिए यूनिकोड और अंतरराष्ट्रीय भाषाओं के लिए सहायता

Android प्लैटफ़ॉर्म, लैटिन और गैर-लैटिन ऑर्थोग्राफ़ी, दोनों को मैनेज करने के लिए अलग-अलग क्लास लागू करने के लिए, ICU और CLDR का इस्तेमाल करता है. साथ ही, Locale, Character जैसी क्लास और java.text की कई सबक्लास दिखाता है. अगर किसी ऐप्लिकेशन में, एक्सपोज़ की गई क्लास के अलावा, अंतरराष्ट्रीय स्तर पर उपलब्ध कराने की सुविधाओं की ज़रूरत है और वह Android 6.0 (एपीआई लेवल 23) के बाद के वर्शन वाले प्लैटफ़ॉर्म को टारगेट करता है, तो उसमें ICU लाइब्रेरी शामिल होनी चाहिए.

वर्शन

Android प्लैटफ़ॉर्म के नए वर्शन, ICU के नए वर्शन और उनसे जुड़े CLDR और यूनिकोड वर्शन के हिसाब से रिलीज़ किए जाते हैं. टेबल 1 में, Android 6.0 (एपीआई लेवल 23) के हिसाब से यह जानकारी दी गई है.

टेबल 1. Android 6.0 (एपीआई लेवल 23) तक इस्तेमाल किए गए ICU और CLDR वर्शन.

प्लैटफ़ॉर्म (एपीआई लेवल) आईसीयू CLDR यूनिकोड
Android 1.5–2.0 (एपीआई लेवल 3–7) 3.8 1.5 5.0
Android 2.2 (एपीआई लेवल 8) 4.2 1.7 5.1
Android 2.3–3.0 (एपीआई लेवल 9–13) 4.4 1.8 5.2
Android 4.0 (एपीआई लेवल 14–15) 4.6 1.9 6.0
Android 4.1 (एपीआई लेवल 16–17) 4.8 2.0 6.0
Android 4.3 (एपीआई लेवल 18) 50 22.1 6.2
Android 4.4 (एपीआई लेवल 19–20) 51 23 6.2
Android 5.0 (एपीआई लेवल 21–22) 53 25 6.3
Android 6.0 (एपीआई लेवल 23) 55.1 27.0.1 7.0

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

Android 7.0 (एपीआई लेवल 24) और इसके बाद के वर्शन में यूनिकोड और इंटरनैशनलाइज़ेशन की सुविधा

Android 7.0 (एपीआई लेवल 24) और इसके बाद के वर्शन के लिए, Android प्लैटफ़ॉर्म, ऐप्लिकेशन डेवलपर के लिए ICU4J एपीआई का एक सबसेट उपलब्ध कराता है. इसका इस्तेमाल, android.icu पैकेज के तहत किया जा सकता है. ICU4J, ओपन सोर्स वाली Java लाइब्रेरी का एक सेट है. इसका इस्तेमाल काफ़ी किया जाता है. यह सॉफ़्टवेयर ऐप्लिकेशन के लिए, यूनिकोड और अंतरराष्ट्रीय भाषाओं के इस्तेमाल की सुविधा देता है.

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

इस सेक्शन में, इन लाइब्रेरी के साथ काम करने के लिए, Android के कम से कम एपीआई लेवल के बारे में कुछ बुनियादी जानकारी दी गई है. इसके बाद, इसमें बताया गया है कि Android के लिए ICU4J को लागू करने के बारे में आपको क्या जानना चाहिए. आखिर में, यह आपको Android फ़्रेमवर्क में ICU4J एपीआई इस्तेमाल करने का तरीका बताता है.

Android पर ICU4J

Android, com.ibm.icu के बजाय android.icu पैकेज के ज़रिए, ICU4J एपीआई का सबसेट दिखाता है. Android फ़्रेमवर्क, कुछ ICU4J एपीआई को एक्सपोज़ नहीं करता. ऐसा इसलिए होता है, क्योंकि एपीआई को बंद कर दिया गया है या उन्हें स्टेबल नहीं माना गया है. आने वाले समय में, ICU टीम एपीआई को बंद कर देती है. इसलिए, Android भी उन्हें 'इस्तेमाल नहीं किया जा सकता' के तौर पर मार्क कर देता है. हालांकि, उन्हें शामिल करना जारी रखता है.

यहां कुछ रिमाइंडर दिए गए हैं:

  • ICU4J Android फ़्रेमवर्क एपीआई में, ICU4J के सभी एपीआई शामिल नहीं होते.
  • Android फ़्रेमवर्क में मौजूद एपीआई, रिसॉर्स की मदद से स्थानीय भाषा में अनुवाद करने के लिए, Android की सहायता की जगह नहीं लेते.
  • कुछ मामलों में, Android फ़्रेमवर्क, ICU लाइब्रेरी के मुकाबले ज़्यादा वर्णों के साथ काम करता है. उदाहरण के लिए, इमोजी के लिए android.text क्लास के साथ काम करने की सुविधा.

com.ibm.icu से android.icu पैकेज पर माइग्रेट करना

अगर आपके ऐप्लिकेशन में पहले से ही ICU4J API का इस्तेमाल किया जा रहा है और android.icu API आपकी ज़रूरतों के मुताबिक हैं, तो फ़्रेमवर्क एपीआई पर माइग्रेट करने के लिए, आपको अपने Java इंपोर्ट को com.ibm.icu से android.icu पर बदलना होगा. इसके बाद, ऐप्लिकेशन से ICU4J फ़ाइलों की अपनी कॉपी हटाई जा सकती है.

ध्यान दें: ICU4J फ़्रेमवर्क एपीआई, com.ibm.icu के बजाय android.icu नेमस्पेस का इस्तेमाल करते हैं. ऐसा उन ऐप्लिकेशन में नेमस्पेस के टकराव से बचने के लिए किया जाता है जिनमें अपनी com.ibm.icu लाइब्रेरी होती हैं.

अन्य Android SDK टूल के एपीआई से android.icu एपीआई पर माइग्रेट करना

java और android पैकेज में मौजूद कुछ क्लास, ICU4J में मौजूद क्लास के बराबर होती हैं. हालांकि, ICU4J अक्सर स्टैंडर्ड और भाषाओं के लिए ज़्यादा सहायता देता है.

टेबल 2 में, इन समकक्षताओं के कुछ उदाहरण दिए गए हैं, ताकि आपको शुरुआत करने में मदद मिल सके:

दूसरी टेबल.Android और Java ICU4J क्लास

कक्षा विकल्प
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar android.icu.util.Calendar
android.text.BidiFormatter android.icu.text.Bidi
android.text.format.DateFormat android.icu.text.DateFormat
android.text.format.DateUtils android.icu.text.DateFormat android.icu.text.RelativeDateTimeFormatter

Android पर ICU4C

Android, libicuuc.so या libicui18n.so के बजाय, libicu.so लाइब्रेरी के ज़रिए ICU4C एपीआई का सबसेट दिखाता है. ये एपीआई, Android 12 (एपीआई लेवल 31) के बाद से उपलब्ध हैं. NDK हेडर, NDK रिलीज़ r22b से उपलब्ध हैं. Android NDK के ज़रिए कोई C++ API एक्सपोज़ नहीं किया जाता. कुछ C API उपलब्ध नहीं हैं.

वर्शन

Android प्लैटफ़ॉर्म के नए वर्शन, ICU के नए वर्शन और उनसे जुड़े CLDR और यूनिकोड वर्शन के हिसाब से रिलीज़ किए जाते हैं. टेबल 3 में, Android 7.0 (एपीआई लेवल 24) से शुरू होने वाले इस संबंध को दिखाया गया है. रनटाइम के दौरान ICU वर्शन की जानकारी पाने के लिए, VersionInfo.ICU_VERSION API का इस्तेमाल करें. यह Android 7.0 के बाद से उपलब्ध है.

टेबल 3. Android 7.0 (एपीआई लेवल 24) से लेकर Android 15 (एपीआई लेवल 35) तक के वर्शन में इस्तेमाल किए गए ICU और CLDR वर्शन.

प्लैटफ़ॉर्म (एपीआई लेवल) आईसीयू CLDR यूनिकोड
Android 7.0 - 7.1 (एपीआई लेवल 24 - 25) 56 28 8.0
Android 8.0 - 8.1 (एपीआई लेवल 26 - 27) 58.2 30.0.3 9.0
Android 9 (एपीआई लेवल 28) 60.2 32.0.1 10.0
Android 10 (एपीआई लेवल 29) 63.2 34 11.0
Android 11 (एपीआई लेवल 30) 66.1 36 13.0
Android 12 (एपीआई लेवल 31 - 32) 68.2 38.1 13.0
Android 13 (एपीआई लेवल 33) 70.1 40 14.0
Android 14 (एपीआई लेवल 34) 72.1 42 15.0
Android 15 (एपीआई लेवल 35) 75.1 45 15.1

24 घंटे/12 घंटे के समय फ़ॉर्मैट की सेटिंग

Android पर ICU, उपयोगकर्ता के 24 घंटे/12 घंटे के समय फ़ॉर्मैट की सेटिंग का इस्तेमाल नहीं करता. यह सेटिंग, DateFormat.is24HourFormat() से मिलती है. इस सेटिंग को देखने के लिए, समय को फ़ॉर्मैट करने के लिए, DateFormat या DateUtils तरीकों का इस्तेमाल करें. इसके अलावा, अलग-अलग is24HourFormat() रिटर्न वैल्यू के लिए, घंटे के सही पैटर्न के चिह्नों (12 घंटे के लिए 'h', 24 घंटे के लिए 'H') के साथ ICU के समय को फ़ॉर्मैट करने के पैटर्न का इस्तेमाल करें. उदाहरण के लिए, यह कोड मौजूदा समय के साथ एक स्ट्रिंग जनरेट करता है, जो उपयोगकर्ता की 12 घंटे/24 घंटे की सेटिंग के हिसाब से होती है:

Kotlin

val skeleton: String = if (DateFormat.is24HourFormat(context)) "Hm" else "hm"
val formattedTime: String = android.icu.text.DateFormat.getInstanceForSkeleton(
        skeleton,
        Locale.getDefault()).format(Date()
)

Java

String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hm";
String formattedTime = android.icu.text.DateFormat.getInstanceForSkeleton(skeleton, Locale.getDefault()).format(new Date());

ट्रांसलिटरेट करने की सुविधा की स्थिरता

Android 10 (एपीआई लेवल 29) से, टेक्स्ट को एक फ़ॉर्मैट से दूसरे फ़ॉर्मैट में बदलने के लिए, Transliterator का इस्तेमाल किया जा सकता है. ट्रांसलिटरेशन के लिए उपलब्ध आईडी का सेट, Android के सभी वर्शन और डिवाइसों पर काम नहीं करता. डिवाइस बनाने वाली कंपनियां, ट्रांसलिटरेशन के लिए अतिरिक्त आईडी जोड़ सकती हैं. टेक्स्ट को ट्रांसलिटरेट करने से पहले, डेवलपर को Transliterator.getAvailableIDs() से मिले उपलब्ध आईडी देखना चाहिए.

लाइसेंस देना

ICU4J को ICU लाइसेंस के तहत रिलीज़ किया गया है. ज़्यादा जानकारी के लिए, ICU के उपयोगकर्ता के लिए गाइड देखें.