ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন

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

অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) এর মাধ্যমে ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন

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

সংস্করণকরণ

অ্যান্ড্রয়েড প্ল্যাটফর্মের ধারাবাহিক প্রকাশগুলি আইসিইউ-এর নতুন সংস্করণ এবং সংশ্লিষ্ট সিএলডিআর এবং ইউনিকোড সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ। সারণি 1 অ্যান্ড্রয়েড 6.0 (এপিআই স্তর 23) এর মাধ্যমে এই সঙ্গতি দেখায়।

সারণী ১। অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) এর মাধ্যমে ব্যবহৃত আইসিইউ এবং সিএলডিআর সংস্করণ।

প্ল্যাটফর্ম (API স্তর) আইসিইউ সিএলডিআর ইউনিকোড
অ্যান্ড্রয়েড ১.৫–২.০ (এপিআই লেভেল ৩–৭) ৩.৮ ১.৫ ৫.০
অ্যান্ড্রয়েড ২.২ (এপিআই লেভেল ৮) ৪.২ ১.৭ ৫.১
অ্যান্ড্রয়েড ২.৩–৩.০ (এপিআই লেভেল ৯–১৩) ৪.৪ ১.৮ ৫.২
অ্যান্ড্রয়েড ৪.০ (এপিআই লেভেল ১৪-১৫) ৪.৬ ১.৯ ৬.০
অ্যান্ড্রয়েড ৪.১ (এপিআই লেভেল ১৬-১৭) ৪.৮ ২.০ ৬.০
অ্যান্ড্রয়েড ৪.৩ (এপিআই লেভেল ১৮) ৫০ ২২.১ ৬.২
অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ১৯-২০) ৫১ ২৩ ৬.২
অ্যান্ড্রয়েড ৫.০ (এপিআই লেভেল ২১-২২) ৫৩ ২৫ ৬.৩
অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) ৫৫.১ ২৭.০.১ ৭.০

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

অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) এবং উচ্চতর সংস্করণে ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন

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

ICU4J API গুলি ডিভাইসে উপস্থিত স্থানীয়করণ ডেটা ব্যবহার করে। ফলস্বরূপ, আপনি আপনার অ্যাপে ICU4J লাইব্রেরিগুলি সংকলন না করে আপনার অ্যাপের ফুটপ্রিন্ট কমাতে পারেন। পরিবর্তে, আপনি ফ্রেমওয়ার্কে তাদের সাথে যোগাযোগ করতে পারেন। আপনি যদি এটি করেন, তাহলে আপনি আপনার APK এর একাধিক সংস্করণ সরবরাহ করতে চাইতে পারেন, যাতে Android 7.0 (API লেভেল 24) এর চেয়ে কম Android এর সংস্করণ ব্যবহার করা ব্যবহারকারীরা অ্যাপের এমন একটি সংস্করণ ডাউনলোড করতে পারেন যাতে ICU4J লাইব্রেরি রয়েছে।

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

অ্যান্ড্রয়েডে ICU4J

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

এখানে কিছু অনুস্মারক দেওয়া হল:

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

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

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

দ্রষ্টব্য : ICU4J ফ্রেমওয়ার্ক API গুলি com.ibm.icu এর পরিবর্তে android.icu namespace ব্যবহার করে। এটি এমন অ্যাপগুলিতে namespace দ্বন্দ্ব এড়াতে করা হয় যাদের নিজস্ব com.ibm.icu লাইব্রেরি রয়েছে।

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

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

সংস্করণকরণ

অ্যান্ড্রয়েড প্ল্যাটফর্মের ধারাবাহিক প্রকাশগুলি ICU-এর নতুন সংস্করণ এবং সংশ্লিষ্ট CLDR এবং ইউনিকোড সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ। টেবিল 3 এই সঙ্গতিটি Android 7.0 (API স্তর 24) থেকে শুরু করে দেখায়। রানটাইমে ICU সংস্করণের তথ্য পেতে VersionInfo.ICU_VERSION API (Android 7.0 থেকে উপলব্ধ) ব্যবহার করুন।

সারণী ৩। অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) থেকে অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) পর্যন্ত অ্যান্ড্রয়েড সংস্করণগুলিতে ব্যবহৃত আইসিইউ এবং সিএলডিআর সংস্করণ।

প্ল্যাটফর্ম (API স্তর) আইসিইউ সিএলডিআর ইউনিকোড
অ্যান্ড্রয়েড ৭.০ - ৭.১ (এপিআই লেভেল ২৪ - ২৫) ৫৬ ২৮ ৮.০
অ্যান্ড্রয়েড ৮.০ - ৮.১ (এপিআই লেভেল ২৬ - ২৭) ৫৮.২ ৩০.০.৩ ৯.০
অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) ৬০.২ ৩২.০.১ ১০.০
অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) ৬৩.২ ৩৪ ১১.০
অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) ৬৬.১ ৩৬ ১৩.০
অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১ - ৩২) ৬৮.২ ৩৮.১ ১৩.০
অ্যান্ড্রয়েড ১৩ (এপিআই লেভেল ৩৩) ৭০.১ ৪০ ১৪.০
অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) ৭২.১ ৪২ ১৫.০
অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) ৭৫.১ ৪৫ ১৫.১

২৪ ঘন্টা/১২ ঘন্টা সময় বিন্যাস সেটিং

অ্যান্ড্রয়েডের ICU ব্যবহারকারীর 24h/12h টাইম ফর্ম্যাট সেটিং পর্যবেক্ষণ করে না, যা DateFormat.is24HourFormat() থেকে প্রাপ্ত। এই সেটিং পর্যবেক্ষণ করতে, হয় DateFormat অথবা DateUtils টাইম ফর্ম্যাটিং পদ্ধতি ব্যবহার করুন অথবা বিভিন্ন is24HourFormat() রিটার্ন মানের জন্য উপযুক্ত ঘন্টা প্যাটার্ন প্রতীক ('h' for 12h, 'H' for 24h) সহ ICU টাইম ফর্ম্যাটিং প্যাটার্ন ব্যবহার করুন। উদাহরণস্বরূপ, এই কোডটি বর্তমান সময়ের সাথে একটি স্ট্রিং তৈরি করে যা ব্যবহারকারীর 12h/24h সেটিং পর্যবেক্ষণ করে:

কোটলিন

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 ব্যবহারকারী নির্দেশিকা দেখুন।