ইউনিকোড ও আন্তর্জাতিকীকরণ সংক্রান্ত সহায়তা

Android, ইউনিকোড এবং অন্যান্য আন্তর্জাতিকীকরণ সহায়তা প্রদান করতে ICU লাইব্রেরি এবং CLDR প্রোজেক্ট ব্যবহার করে। এই পৃষ্ঠায় ইউনিকোড ও আন্তর্জাতিকীকরণ সংক্রান্ত সহায়তা নিয়ে আলোচনা দুটি ভাগে বিভক্ত: Android 6.0 (API লেভেল 23) ও তার আগের ভার্সন এবং Android 7.0 (API লেভেল 24) ও তার পরের ভার্সন।

Android 6.0 (API লেভেল ২৩)-এর মাধ্যমে ইউনিকোড ও আন্তর্জাতিকীকরণ সংক্রান্ত সহায়তা

Android প্ল্যাটফর্ম ল্যাটিন এবং নন-ল্যাটিন অর্থোগ্রাফি ম্যানেজ করার জন্য বিভিন্ন ক্লাস প্রয়োগ করতে ICU এবং CLDR ব্যবহার করে, Locale, Character এবং java.text-এর অনেক সাবক্লাসের মতো ক্লাস প্রকাশ করে। যে অ্যাপে এক্সপোজড ক্লাসের বাইরে ইন্টারন্যাশনালাইজেশন ফাংশনালিটি প্রয়োজন এবং Android 6.0 (API লেভেল 23) পর্যন্ত প্ল্যাটফর্মের ভার্সনকে টার্গেট করে, সেটিতে অবশ্যই ICU লাইব্রেরি থাকতে হবে।

ভার্সনিং

Android প্ল্যাটফর্মের পরবর্তী রিলিজগুলি ICU-এর নতুন ভার্সন এবং সংশ্লিষ্ট CLDR ও Unicode ভার্সনের সাথে সামঞ্জস্যপূর্ণ। Android 6.0 (API লেভেল 23) পর্যন্ত এই মিল সারণী 1-এ দেখানো হয়েছে।

টেবিল ১. Android 6.0 (API লেভেল ২৩) পর্যন্ত ICU এবং CLDR ভার্সন ব্যবহার করা হয়েছে।

প্ল্যাটফর্ম (API লেভেল) ICU CLDR ইউনিকোড
Android 1.5–2.0 (API লেভেল ৩–৭) ৩.৮ 1.5 ৫.০
Android 2.2 (API লেভেল ৮) ৪.২ ১.৭ ৫.১
Android 2.3–3.0 (API লেভেল ৯–১৩) ৪.৪ ১.৮ ৫.২
Android 4.0 (API লেভেল ১৪–১৫) ৪.৬ ১.৯ ৬.০
Android 4.1 (API লেভেল ১৬–১৭) ৪.৮ 2.0 ৬.০
Android 4.3 (API লেভেল ১৮) 50 ২২.১ ৬.২
Android 4.4 (API লেভেল ১৯–২০) 51 23 ৬.২
Android 5.0 (API লেভেল ২১–২২) 53 25 ৬.৩
Android 6.0 (API লেভেল ২৩) 55.1 27.0.1 7.0

Android 7.0 (API লেভেল ২৪) এবং তার পরবর্তী ভার্সনকে টার্গেট করা অ্যাপের জন্য Android ফ্রেমওয়ার্ক ইউনিকোড এবং আন্তর্জাতিকীকরণের জন্য আরও ব্যাপক সহায়তা প্রদান করে। এই পৃষ্ঠার পরবর্তী বিভাগে সেই সহায়তা সম্পর্কে বিস্তারিত তথ্য দেওয়া আছে।

Android 7.0 (API লেভেল ২৪) এবং তার পরবর্তী যেকোনও ভার্সনে ইউনিকোড এবং আন্তর্জাতিকীকরণ সংক্রান্ত সহায়তা

Android 7.0 (API লেভেল 24) এবং তার পরবর্তী ভার্সনের জন্য, Android প্ল্যাটফর্ম অ্যাপ ডেভেলপারদের জন্য ICU4J API-এর একটি সাবসেট প্রকাশ করে যাতে তারা android.icu প্যাকেজের অধীনে ব্যবহার করতে পারে। ICU4J হল একটি ওপেন-সোর্স, ব্যাপকভাবে ব্যবহৃত জাভা লাইব্রেরির সেট যা সফ্টওয়্যার অ্যাপ্লিকেশনের জন্য ইউনিকোড এবং আন্তর্জাতিকীকরণ সহায়তা প্রদান করে।

ICU4J API ডিভাইসে থাকা লোকালাইজেশন ডেটা ব্যবহার করে। এর ফলে, আপনার অ্যাপে ICU4J লাইব্রেরি কম্পাইল না করে, আপনি অ্যাপের ফুটপ্রিন্ট কমাতে পারবেন। এর পরিবর্তে, আপনি ফ্রেমওয়ার্কে তাদের কল আউট করতে পারবেন। আপনি এটি করলে, আপনার APK-এর একাধিক ভার্সন প্রদান করতে চাইতে পারেন, যাতে Android 7.0 (API লেভেল ২৪)-এর চেয়ে পুরনো Android ভার্সন ব্যবহারকারী ব্যক্তিরা ICU4J লাইব্রেরি সহ অ্যাপের ভার্সন ডাউনলোড করতে পারেন।

এই বিভাগটি শুরু হয় এই লাইব্রেরিগুলি সাপোর্ট করার জন্য প্রয়োজনীয় ন্যূনতম Android API লেভেল সম্পর্কে কিছু প্রাথমিক তথ্য প্রদানের মাধ্যমে। তারপর, ICU4J-এর Android-নির্দিষ্ট বাস্তবায়ন সম্পর্কে আপনার যা জানা প্রয়োজন তা ব্যাখ্যা করে। সবশেষে, এটি আপনাকে Android ফ্রেমওয়ার্কে ICU4J API কীভাবে ব্যবহার করতে হয় তা জানায়।

Android-এ ICU4J

Android, com.ibm.icu-এর পরিবর্তে android.icu প্যাকেজের মাধ্যমে ICU4J API-এর একটি সাবসেট প্রকাশ করে। কিছু ICU4J API, Android ফ্রেমওয়ার্কের মাধ্যমে প্রকাশ করা হয় না, কারণ API বাতিল করা হয়েছে অথবা স্টেবল হিসেবে ঘোষণা করা হয়নি। ভবিষ্যতে ICU টিম API বন্ধ করে দিলে, Android-ও সেগুলিকে বন্ধ হিসেবে চিহ্নিত করবে, তবে অন্তর্ভুক্ত করা চালিয়ে যাবে।

এখানে কয়েকটি রিমাইন্ডার দেওয়া হল:

  • ICU4J Android ফ্রেমওয়ার্ক API-তে সব ICU4J API অন্তর্ভুক্ত থাকে না।
  • Android ফ্রেমওয়ার্কের API, রিসোর্স সহ লোকালাইজ করার জন্য Android-এর সহায়তাকে প্রতিস্থাপন করে না।
  • কিছু ক্ষেত্রে, Android ফ্রেমওয়ার্ক ICU লাইব্রেরির চেয়ে বেশি অক্ষর সাপোর্ট করে। যেমন, android.text ক্লাস ইমোজি সাপোর্ট করে।

com.ibm.icu থেকে android.icu প্যাকেজে মাইগ্রেট করুন

আপনি যদি আগে থেকেই আপনার অ্যাপে ICU4J API ব্যবহার করেন এবং android.icu API আপনার প্রয়োজনীয়তা পূরণ করে, তাহলে ফ্রেমওয়ার্ক API-তে মাইগ্রেট করার জন্য আপনাকে Java ইমপোর্ট com.ibm.icu থেকে android.icu-এ পরিবর্তন করতে হবে। তারপর আপনি অ্যাপ থেকে ICU4J ফাইলের আপনার কপি সরিয়ে দিতে পারবেন।

মনে রাখবেন: ICU4J ফ্রেমওয়ার্ক API, com.ibm.icu-এর পরিবর্তে android.icu নেমস্পেস ব্যবহার করে। এটি নিজস্ব com.ibm.icu লাইব্রেরি আছে এমন অ্যাপে নেমস্পেস সংক্রান্ত সমস্যা এড়ানোর জন্য করা হয়।

অন্যান্য Android SDK API থেকে android.icu API-তে মাইগ্রেট করা

java এবং android প্যাকেজের কিছু ক্লাস ICU4J-তে পাওয়া ক্লাসের সমতুল্য। তবে, ICU4J প্রায়ই স্ট্যান্ডার্ড ও ভাষার জন্য আরও বেশি সহায়তা প্রদান করে।

শুরু করার জন্য সারণী ২-এ এই সমতুল্যতার কিছু উদাহরণ দেখানো হয়েছে:

সারণী ২.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 API-এর একটি সাবসেট প্রকাশ করে। API-গুলি Android 12 (API লেভেল ৩১) থেকে শুরু করে উপলভ্য। NDK রিলিজ r22b থেকে শুরু করে NDK হেডার উপলভ্য। Android NDK-এর মাধ্যমে কোনও C++ API প্রকাশ করা হয় না। কিছু C API উপলভ্য নেই।

ভার্সনিং

Android প্ল্যাটফর্মের পরবর্তী রিলিজগুলি ICU-এর নতুন ভার্সন এবং সংশ্লিষ্ট CLDR ও Unicode ভার্সনের সাথে সামঞ্জস্যপূর্ণ। Android 7.0 (API লেভেল ২৪) থেকে শুরু করে সারণী ৩-এ এই মিল দেখানো হয়েছে। রানটাইমে ICU ভার্সন সংক্রান্ত তথ্য পেতে VersionInfo.ICU_VERSION API (Android 7.0 থেকে উপলভ্য) ব্যবহার করুন।

সারণী ৩. Android 7.0 (API লেভেল 24) থেকে Android 15 (API লেভেল 35) পর্যন্ত Android ভার্সনে ব্যবহৃত ICU এবং CLDR ভার্সন।

প্ল্যাটফর্ম (API লেভেল) ICU CLDR ইউনিকোড
Android 7.0 - 7.1 (API লেভেল ২৪ - ২৫) ৫৬ ২৮ ৮.০
Android 8.0 - 8.1 (API লেভেল ২৬ - ২৭) ৫৮.২ 30.0.3 ৯.০
Android 9 (API লেভেল ২৮) ৬০.২ 32.0.1 ১০.০
Android 10 (API লেভেল ২৯) ৬৩.২ ৩৪ ১১.০
Android 11 (API লেভেল ৩০) ৬৬.১ ৩৬ 13.0
Android 12 (API লেভেল ৩১ - ৩২) ৬৮.২ 38.1 13.0
Android 13 (API লেভেল 33) 70.1 ৪০ ১৪.০
Android 14 (API লেভেল ৩৪) ৭২.১ ৪২ 15.0
Android 15 (API লেভেল ৩৫) ৭৫.১ ৪৫ 15.1

২৪ ঘণ্টা/১২ ঘণ্টার সময় ফর্ম্যাট সেটিং

Android-এ ICU ব্যবহারকারীর ২৪ ঘণ্টা/১২ ঘণ্টার সময় ফর্ম্যাট সেটিং লক্ষ্য করে না, যা DateFormat.is24HourFormat() থেকে পাওয়া যায়। এই সেটিং দেখতে, হয় DateFormat অথবা DateUtils টাইম ফর্ম্যাটিং পদ্ধতি ব্যবহার করুন অথবা বিভিন্ন is24HourFormat() রিটার্ন ভ্যালুর জন্য উপযুক্ত ঘণ্টা প্যাটার্ন চিহ্ন (১২ ঘণ্টার জন্য 'h', ২৪ ঘণ্টার জন্য 'H') সহ ICU টাইম ফর্ম্যাটিং প্যাটার্ন ব্যবহার করুন। যেমন, এই কোডটি বর্তমান সময়ের সাথে একটি স্ট্রিং তৈরি করে যা ব্যবহারকারীর ১২ ঘণ্টা/২৪ ঘণ্টার সেটিংস মেনে চলে:

Kotlin

val skeleton: String = if (DateFormat.is24HourFormat(context)) "Hm" else "hm"
val formattedTime: String = android.icu.text.DateFormat.getInstanceForSkeleton(
        skeleton,
        Locale.getDefault()).format(Date()
)

জাভা

String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hm";
String formattedTime = android.icu.text.DateFormat.getInstanceForSkeleton(skeleton, Locale.getDefault()).format(new Date());

ট্রান্সলিটরেটরের স্থিতিশীলতা

Android 10 (API লেভেল ২৯) থেকে শুরু করে, Transliterator টেক্সটকে এক ফর্ম্যাট থেকে অন্য ফর্ম্যাটে লিপ্যন্তর করার জন্য প্রদান করা হয়। Android রিলিজ ও ডিভাইস জুড়ে উপলভ্য ট্রান্সলিটারেশন আইডির সেটটি পরিবর্তনশীল। ডিভাইস প্রস্তুতকারক অতিরিক্ত লিপ্যন্তর আইডি যোগ করতে পারেন। টেক্সট লিপ্যন্তর করার আগে ডেভেলপারদের অবশ্যই উপলভ্য আইডি চেক করতে হবে, যা Transliterator.getAvailableIDs() থেকে পাওয়া যায়।

লাইসেন্স দেওয়া

ICU4J, ICU লাইসেন্সের অধীনে রিলিজ করা হয়েছে। বিস্তারিত জানতে, ICU ব্যবহারকারীর নির্দেশিকা দেখুন।