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 और Unicode के नए वर्शन भी रिलीज़ होते हैं. टेबल 1 में, Android 6.0 (एपीआई लेवल 23) तक के वर्शन के लिए, इस पत्राचार को दिखाया गया है.
पहली टेबल. Android 6.0 (एपीआई लेवल 23) के ज़रिए इस्तेमाल किए गए ICU और 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 आपकी ज़रूरतों को पूरा करते हैं, तो फ़्रेमवर्क 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 में, इन समानता के कुछ उदाहरण दिए गए हैं, ताकि आप शुरू कर सकें:
टेबल 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, libicu.so
या libicui18n.so
के बजाय, libicu.so
लाइब्रेरी के ज़रिए ICU4C एपीआई का सबसेट उपलब्ध कराता है.libicuuc.so
ये एपीआई, Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर उपलब्ध हैं. एनडीके हेडर, एनडीके के r22b वर्शन से उपलब्ध हैं.
Android NDK के ज़रिए कोई C++ API उपलब्ध नहीं कराया जाता. कुछ C API उपलब्ध नहीं हैं.
वर्शन
Android प्लैटफ़ॉर्म के नए वर्शन के साथ, ICU के नए वर्शन भी रिलीज़ होते हैं. साथ ही, CLDR और Unicode के नए वर्शन भी रिलीज़ होते हैं. तीसरी टेबल में, Android 7.0 (एपीआई लेवल 24) से शुरू होने वाले इस कॉरेस्पोंडेंस को दिखाया गया है. आईसीयू के वर्शन की जानकारी रनटाइम में पाने के लिए,
VersionInfo.ICU_VERSION
API का इस्तेमाल करें. यह API, Android 7.0 से उपलब्ध है.
टेबल 3. Android के वर्शन में इस्तेमाल किए गए ICU और CLDR के वर्शन. ये वर्शन, 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 पर ICU, उपयोगकर्ता की 24 घंटे/12 घंटे के समय के फ़ॉर्मैट की सेटिंग का पालन नहीं करता है. यह सेटिंग,DateFormat.is24HourFormat()
से मिलती है.
इस सेटिंग को देखने के लिए, 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 को ICU लाइसेंस के तहत रिलीज़ किया गया है. ज़्यादा जानकारी के लिए, ICU उपयोगकर्ता गाइड देखें.