অ্যান্ড্রয়েড ইউনিকোড এবং অন্যান্য আন্তর্জাতিকীকরণ সমর্থন প্রদানের জন্য ICU লাইব্রেরি এবং CLDR প্রজেক্ট ব্যবহার করে। এই পৃষ্ঠায় ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন সম্পর্কিত আলোচনা দুটি বিভাগে বিভক্ত: অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) ও তার নিম্ন সংস্করণ, এবং অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) ও তার উচ্চ সংস্করণ।
অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) পর্যন্ত ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন।
The Android platform uses ICU and CLDR to implement various classes for handling both Latin and non-Latin orthographies, exposing classes like Locale , Character , and many subclasses of java.text . An app that requires internationalization functionalities beyond the exposed classes, and targets versions of the platform through Android 6.0 (API level 23), must include the ICU library.
সংস্করণ
অ্যান্ড্রয়েড প্ল্যাটফর্মের পরবর্তী সংস্করণগুলো ICU-এর নতুন সংস্করণ এবং সংশ্লিষ্ট CLDR ও ইউনিকোড সংস্করণগুলোর সাথে সঙ্গতিপূর্ণ। সারণি ১-এ অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) পর্যন্ত এই সঙ্গতি দেখানো হয়েছে।
সারণি ১. অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) পর্যন্ত ব্যবহৃত আইসিইউ এবং সিএলডিআর সংস্করণসমূহ।
| প্ল্যাটফর্ম (এপিআই স্তর) | আইসিইউ | সিএলডিআর | ইউনিকোড |
|---|---|---|---|
| অ্যান্ড্রয়েড ১.৫–২.০ (এপিআই লেভেল ৩–৭) | ৩.৮ | ১.৫ | ৫.০ |
| অ্যান্ড্রয়েড ২.২ (এপিআই লেভেল ৮) | ৪.২ | ১.৭ | ৫.১ |
| অ্যান্ড্রয়েড ২.৩–৩.০ (এপিআই লেভেল ৯–১৩) | ৪.৪ | ১.৮ | ৫.২ |
| অ্যান্ড্রয়েড ৪.০ (এপিআই লেভেল ১৪-১৫) | ৪.৬ | ১.৯ | ৬.০ |
| অ্যান্ড্রয়েড ৪.১ (এপিআই লেভেল ১৬-১৭) | ৪.৮ | ২.০ | ৬.০ |
| অ্যান্ড্রয়েড ৪.৩ (এপিআই লেভেল ১৮) | ৫০ | ২২.১ | ৬.২ |
| অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ১৯-২০) | ৫১ | ২৩ | ৬.২ |
| অ্যান্ড্রয়েড ৫.০ (এপিআই লেভেল ২১-২২) | ৫৩ | ২৫ | ৬.৩ |
| অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) | ৫৫.১ | ২৭.০.১ | ৭.০ |
অ্যান্ড্রয়েড ফ্রেমওয়ার্ক অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) এবং তার উচ্চতর সংস্করণের অ্যাপগুলোর জন্য ইউনিকোড ও আন্তর্জাতিকীকরণের আরও ব্যাপক সমর্থন প্রদান করে। এই পৃষ্ঠার পরবর্তী অংশে সেই সমর্থন সম্পর্কে বিস্তারিত তথ্য দেওয়া হয়েছে।
অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) এবং তার পরবর্তী সংস্করণগুলোতে ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন।
অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) এবং এর পরবর্তী সংস্করণগুলোর জন্য, অ্যান্ড্রয়েড প্ল্যাটফর্ম অ্যাপ ডেভেলপারদের ব্যবহারের উদ্দেশ্যে android.icu প্যাকেজের অধীনে ICU4J এপিআই-এর একটি উপসেট উন্মুক্ত করে। ICU4J হলো একটি ওপেন-সোর্স ও বহুল ব্যবহৃত জাভা লাইব্রেরির সমষ্টি, যা সফটওয়্যার অ্যাপ্লিকেশনগুলোর জন্য ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন প্রদান করে।
The ICU4J APIs use localization data present on the device. As a result, you can reduce your app's footprint by not compiling the ICU4J libraries into your app. Instead, you can call out to them in the framework. If you do this, you might want to provide multiple versions of your APK , so users running versions of Android lower than Android 7.0 (API level 24) can download a version of the app that contains the ICU4J libraries.
এই বিভাগটি এই লাইব্রেরিগুলিকে সমর্থন করার জন্য প্রয়োজনীয় ন্যূনতম অ্যান্ড্রয়েড এপিআই স্তরগুলির উপর কিছু প্রাথমিক তথ্য প্রদানের মাধ্যমে শুরু হয়। এরপর এটি ICU4J-এর অ্যান্ড্রয়েড-নির্দিষ্ট বাস্তবায়ন সম্পর্কে আপনার যা জানা প্রয়োজন তা ব্যাখ্যা করে। পরিশেষে, এটি আপনাকে জানায় যে অ্যান্ড্রয়েড ফ্রেমওয়ার্কে কীভাবে ICU4J এপিআইগুলি ব্যবহার করতে হয়।
অ্যান্ড্রয়েডে ICU4J
অ্যান্ড্রয়েড com.ibm.icu পরিবর্তে android.icu প্যাকেজের মাধ্যমে ICU4J API-গুলোর একটি উপসেট প্রকাশ করে। কিছু ICU4J API অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা প্রকাশিত হয় না, যেমন API-গুলো ডেপ্রিকেটেড বা স্থিতিশীল হিসেবে ঘোষিত না হওয়ার কারণে। ভবিষ্যতে ICU টিম যখন কোনো API ডেপ্রিকেটেড ঘোষণা করবে, অ্যান্ড্রয়েডও সেগুলোকে ডেপ্রিকেটেড হিসেবে চিহ্নিত করবে কিন্তু সেগুলোকে অন্তর্ভুক্ত করা অব্যাহত রাখবে।
এখানে কয়েকটি অনুস্মারক দেওয়া হলো:
- ICU4J অ্যান্ড্রয়েড ফ্রেমওয়ার্ক API-গুলোতে ICU4J-এর সমস্ত API অন্তর্ভুক্ত নেই।
- অ্যান্ড্রয়েড ফ্রেমওয়ার্কের এপিআইগুলো রিসোর্সের মাধ্যমে স্থানীয়করণ করার ক্ষেত্রে অ্যান্ড্রয়েডের সমর্থনকে প্রতিস্থাপন করে না।
- কিছু ক্ষেত্রে, অ্যান্ড্রয়েড ফ্রেমওয়ার্ক 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.icu এপিআই-তে স্থানান্তরিত করুন
java এবং android প্যাকেজের কিছু ক্লাসের সমতুল্য ক্লাস ICU4J-তে পাওয়া যায়। তবে, ICU4J প্রায়শই বিভিন্ন স্ট্যান্ডার্ড এবং ভাষার জন্য আরও ব্যাপক সমর্থন প্রদান করে।
আপনাকে শুরু করার জন্য সারণি ২-এ এই সমতুল্যতাগুলোর কিছু উদাহরণ দেখানো হলো:
সারণি ২. অ্যান্ড্রয়েড এবং জাভা 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 |
অ্যান্ড্রয়েডে ICU4C
অ্যান্ড্রয়েড, libicuuc.so বা libicui18n.so এর পরিবর্তে libicu.so লাইব্রেরির মাধ্যমে ICU4C API-গুলোর একটি উপসেট প্রকাশ করে। এই API-গুলো অ্যান্ড্রয়েড ১২ (API লেভেল ৩১) থেকে পাওয়া যায়। NDK হেডারগুলো NDK রিলিজ r22b থেকে পাওয়া যায়। অ্যান্ড্রয়েড NDK-এর মাধ্যমে কোনো C++ API প্রকাশ করা হয় না। কিছু C API পাওয়া যায় না।
সংস্করণ
অ্যান্ড্রয়েড প্ল্যাটফর্মের পরবর্তী রিলিজগুলো ICU-এর নতুন সংস্করণ এবং সংশ্লিষ্ট CLDR ও ইউনিকোড সংস্করণগুলোর সাথে সঙ্গতিপূর্ণ। সারণি ৩-এ অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) থেকে শুরু করে এই সঙ্গতি দেখানো হয়েছে। রানটাইমে ICU সংস্করণের তথ্য পেতে VersionInfo.ICU_VERSION এপিআই (যা অ্যান্ড্রয়েড ৭.০ থেকে উপলব্ধ) ব্যবহার করুন।
সারণি ৩. অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) থেকে অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) পর্যন্ত ব্যবহৃত আইসিইউ এবং সিএলডিআর সংস্করণসমূহ।
| প্ল্যাটফর্ম (এপিআই স্তর) | আইসিইউ | সিএলডিআর | ইউনিকোড |
|---|---|---|---|
| অ্যান্ড্রয়েড ৭.০ - ৭.১ (এপিআই লেভেল ২৪ - ২৫) | ৫৬ | ২৮ | ৮.০ |
| অ্যান্ড্রয়েড ৮.০ - ৮.১ (এপিআই লেভেল ২৬ - ২৭) | ৫৮.২ | ৩০.০.৩ | ৯.০ |
| অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) | ৬০.২ | ৩২.০.১ | ১০.০ |
| অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) | ৬৩.২ | ৩৪ | ১১.০ |
| অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) | ৬৬.১ | ৩৬ | ১৩.০ |
| অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১ - ৩২) | ৬৮.২ | ৩৮.১ | ১৩.০ |
| অ্যান্ড্রয়েড ১৩ (এপিআই লেভেল ৩৩) | ৭০.১ | ৪০ | ১৪.০ |
| অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) | ৭২.১ | ৪২ | ১৫.০ |
| অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) | ৭৫.১ | ৪৫ | ১৫.১ |
২৪ ঘণ্টা/১২ ঘণ্টা সময় বিন্যাস সেটিং
ICU on Android doesn't observe the user's 24h/12h time format setting, obtained fromDateFormat.is24HourFormat() . To observe this setting, either use DateFormat or DateUtils time formatting methods or use ICU time formatting patterns with appropriate hour pattern symbols ('h' for 12h, 'H' for 24h) for different is24HourFormat() return values. For example, this code generates a string with the current time that observes the user's 12h/24h setting: কোটলিন
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());
প্রতিবর্ণীকরণকারীর স্থিতিশীলতা
অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) থেকে, এক ফরম্যাট থেকে অন্য ফরম্যাটে টেক্সট প্রতিবর্ণীকরণের জন্যTransliterator প্রদান করা হয়েছে। বিভিন্ন অ্যান্ড্রয়েড রিলিজ এবং ডিভাইসে উপলব্ধ ট্রান্সলিটারেশন আইডি-র সেটটি অস্থিতিশীল। ডিভাইস নির্মাতারা অতিরিক্ত ট্রান্সলিটারেশন আইডি যোগ করতে পারেন। টেক্সট প্রতিবর্ণীকরণ করার আগে ডেভেলপারদের অবশ্যই Transliterator.getAvailableIDs() থেকে প্রাপ্ত উপলব্ধ আইডিগুলো যাচাই করে নিতে হবে।লাইসেন্সিং
ICU4J, ICU লাইসেন্সের অধীনে প্রকাশিত হয়েছে। বিস্তারিত জানতে, ICU ব্যবহারকারী নির্দেশিকা দেখুন।