Android, ICU लाइब्रेरी और CLDR प्रोजेक्ट का इस्तेमाल करता है, ताकि यूनिकोड और अन्य अंतरराष्ट्रीय भाषाओं के लिए सहायता उपलब्ध कराई जा सके. इस पेज पर, यूनिकोड और इंटरनैशनलाइज़ेशन की सुविधा के बारे में चर्चा को दो सेक्शन में बांटा गया है: 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) से पहले के वर्शन वाले Android डिवाइस इस्तेमाल करने वाले लोग, ऐप्लिकेशन का ऐसा वर्शन डाउनलोड कर पाएंगे जिसमें ICU4J लाइब्रेरी शामिल हों.
इस सेक्शन में, इन लाइब्रेरी के साथ काम करने के लिए ज़रूरी Android एपीआई लेवल के बारे में बुनियादी जानकारी दी गई है. इसके बाद, इसमें बताया गया है कि आपको ICU4J के Android के लिए खास तौर पर लागू किए गए वर्शन के बारे में क्या जानना ज़रूरी है. आखिर में, यह आपको Android फ़्रेमवर्क में ICU4J एपीआई इस्तेमाल करने का तरीका बताता है.
Android पर ICU4J
Android, ICU4J एपीआई के सबसेट को com.ibm.icu के बजाय android.icu पैकेज के ज़रिए एक्सपोज़ करता है. कुछ
ICU4J एपीआई, Android फ़्रेमवर्क से एक्सपोज़ नहीं किए जाते.
इसकी वजह यह हो सकती है कि एपीआई अब काम नहीं करते
या उन्हें स्टेबल नहीं माना गया है. आने वाले समय में, जब ICU टीम एपीआई को बंद कर देगी, तब Android भी उन्हें बंद के तौर पर मार्क कर देगा. हालांकि, उन्हें शामिल करना जारी रखेगा.
यहां कुछ रिमाइंडर दिए गए हैं:
- ICU4J Android फ़्रेमवर्क एपीआई में, सभी ICU4J एपीआई शामिल नहीं होते.
- Android फ़्रेमवर्क में मौजूद एपीआई, संसाधनों की मदद से स्थानीय भाषा में उपलब्ध कराने की Android की सुविधा को नहीं बदलते.
- कुछ मामलों में, Android फ़्रेमवर्क में आईसीयू लाइब्रेरी की तुलना में ज़्यादा वर्ण इस्तेमाल किए जा सकते हैं. उदाहरण के लिए,
android.textक्लास में इमोजी के लिए ज़्यादा वर्ण इस्तेमाल किए जा सकते हैं.
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 API से android.icu API पर माइग्रेट करना
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) और इसके बाद के वर्शन पर उपलब्ध हैं. NDK हेडर, NDK रिलीज़ r22b से उपलब्ध हैं.
Android NDK के ज़रिए कोई C++ एपीआई एक्सपोज़ नहीं किया गया है. कुछ C API उपलब्ध नहीं हैं.
वर्शन
Android प्लैटफ़ॉर्म के नए वर्शन, आईसीयू के नए वर्शन के साथ-साथ सीएलडीआर और यूनिकोड के नए वर्शन के साथ काम करते हैं. टेबल 3 में, Android 7.0 (एपीआई लेवल 24) से शुरू होने वाले इस संबंध को दिखाया गया है. रनटाइम के दौरान आईसीयू वर्शन की जानकारी पाने के लिए,
VersionInfo.ICU_VERSION एपीआई (Android 7.0 के बाद के वर्शन पर उपलब्ध) का इस्तेमाल करें.
टेबल 3. Android 7.0 (एपीआई लेवल 24) से लेकर Android 15 (एपीआई लेवल 35) तक के Android वर्शन में इस्तेमाल किए गए ICU और सीएलडीआर वर्शन.
| प्लैटफ़ॉर्म (एपीआई लेवल) | आईसीयू | सीएलडीआर | यूनिकोड |
|---|---|---|---|
| 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 लाइसेंस के तहत रिलीज़ किया गया है. ज़्यादा जानकारी के लिए, आईसीयू इस्तेमाल के लिए गाइड देखें.