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

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 एपीआई, डिवाइस पर मौजूद स्थानीय भाषा के डेटा का इस्तेमाल करते हैं. इस वजह से, अपने ऐप्लिकेशन में 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, libicuuc.so या libicui18n.so के बजाय, libicu.so लाइब्रेरी के ज़रिए ICU4C एपीआई का सबसेट उपलब्ध कराता है. ये एपीआई, 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 से उपलब्ध है.

तीसरी टेबल. 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.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 इस्तेमाल करने के लिए गाइड देखें.