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

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

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

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

वर्शन

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

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

प्लैटफ़ॉर्म (एपीआई लेवल) आईसीयू सीएलडीआर यूनिकोड
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 API इस्तेमाल करने का तरीका बताता है.

Android पर ICU4J

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

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

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

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

अगर आपके ऐप्लिकेशन में ICU4J API पहले से इस्तेमाल किया जा रहा है और android.icu API आपकी ज़रूरी शर्तों को पूरा करता है. इसके बाद, इस पर माइग्रेट हो रहा है फ़्रेमवर्क 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 एनडीके से किसी भी C++ एपीआई को सार्वजनिक नहीं किया जाता है. कुछ C API उपलब्ध नहीं हैं.

वर्शन

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

टेबल 3. Android 7.0 (एपीआई लेवल 24) से लेकर Android 15 (एपीआई लेवल 35) तक के वर्शन में इस्तेमाल किए गए ICU और 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
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 लाइसेंस के तहत रिलीज़ किया गया है. ज़्यादा जानकारी के लिए, आईसीयू में जाएं इस्तेमाल के लिए गाइड.