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

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

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

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

वर्शन

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

टेबल 1. 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 एपीआई, डिवाइस पर मौजूद स्थानीयकरण डेटा का इस्तेमाल करते हैं. इसलिए, अपने ऐप्लिकेशन में ICU4J लाइब्रेरी कंपाइल न करके, अपने ऐप्लिकेशन का फ़ुटप्रिंट कम किया जा सकता है. इसके बजाय, फ़्रेमवर्क में उन्हें कॉल किया जा सकता है. अगर ऐसा किया जाता है, तो आपको अपने APK के कई वर्शन उपलब्ध कराने पड़ सकते हैं. इससे, Android 7.0 (एपीआई लेवल 24) से पहले के वर्शन इस्तेमाल करने वाले लोग, ऐप्लिकेशन का वह वर्शन डाउनलोड कर सकते हैं जिसमें ICU4J लाइब्रेरी शामिल हैं.

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

Android पर ICU4J

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

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

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

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

टेबल 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) और इसके बाद के वर्शन पर उपलब्ध हैं. एनडीके हेडर, एनडीके के r22b वर्शन और इसके बाद के वर्शन पर उपलब्ध हैं. Android एनडीके के ज़रिए, कोई भी C++ एपीआई उपलब्ध नहीं कराया जाता. कुछ सी एपीआई उपलब्ध नहीं हैं.

वर्शन

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

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

प्लैटफ़ॉर्म (एपीआई लेवल) आईसीयू सीएलडीआर यूनिकोड
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 पर आईसीयू, DateFormat.is24HourFormat() से हासिल किए गए, 24 घंटे/12 घंटे वाले टाइम फ़ॉर्मैट की सेटिंग को नहीं देखता. इस सेटिंग को देखने के लिए, या तो DateFormat या DateUtils टाइम फ़ॉर्मैटिंग के तरीकों का इस्तेमाल करें या अलग-अलग is24HourFormat() रिटर्न वैल्यू के लिए, घंटे के पैटर्न के सही सिंबल (12 घंटे वाले फ़ॉर्मैट के लिए 'h' और 24 घंटे वाले फ़ॉर्मैट के लिए 'H') के साथ, आईसीयू के टाइम फ़ॉर्मैटिंग पैटर्न का इस्तेमाल करें. उदाहरण के लिए, इस कोड से मौजूदा समय वाली एक स्ट्रिंग जनरेट होती है. यह स्ट्रिंग, उपयोगकर्ता की 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 को आईसीयू लाइसेंस के तहत रिलीज़ किया गया है. ज़्यादा जानकारी के लिए, आईसीयू की उपयोगकर्ता गाइड देखें.