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

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

অ্যান্ড্রয়েড 6.0 (এপিআই স্তর 23) এর মাধ্যমে ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন

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

সংস্করণ করা

অ্যান্ড্রয়েড প্ল্যাটফর্মের ধারাবাহিক প্রকাশগুলি ICU-এর নতুন সংস্করণ এবং সংশ্লিষ্ট CLDR এবং ইউনিকোড সংস্করণগুলির সাথে মিলে যায়৷ সারণি 1 Android 6.0 (API স্তর 23) এর মাধ্যমে এই চিঠিপত্র দেখায়।

সারণী 1. Android 6.0 (API স্তর 23) এর মাধ্যমে ব্যবহৃত ICU এবং CLDR সংস্করণ।

প্ল্যাটফর্ম (API স্তর) আইসিইউ সিএলডিআর ইউনিকোড
অ্যান্ড্রয়েড 1.5-2.0 (API লেভেল 3-7) 3.8 1.5 5.0
Android 2.2 (API লেভেল 8) 4.2 1.7 5.1
Android 2.3–3.0 (API লেভেল 9–13) 4.4 1.8 5.2
Android 4.0 (API স্তর 14-15) 4.6 1.9 6.0
Android 4.1 (API লেভেল 16-17) 4.8 2.0 6.0
Android 4.3 (API স্তর 18) 50 22.1 6.2
Android 4.4 (API লেভেল 19-20) 51 23 6.2
Android 5.0 (API স্তর 21-22) 53 25 6.3
Android 6.0 (API স্তর 23) 55.1 27.0.1 7.0

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক ইউনিকোড এবং অ্যান্ড্রয়েড 7.0 (এপিআই স্তর 24) এবং উচ্চতরকে লক্ষ্য করে এমন অ্যাপগুলির জন্য আন্তর্জাতিককরণের জন্য আরও ব্যাপক সমর্থন প্রদান করে। এই পৃষ্ঠার পরবর্তী বিভাগ সেই সমর্থন সম্পর্কে বিশদ প্রদান করে।

অ্যান্ড্রয়েড 7.0 (এপিআই স্তর 24) এবং উচ্চতর সংস্করণে ইউনিকোড এবং আন্তর্জাতিকীকরণ সমর্থন

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

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

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

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

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

এখানে কয়েকটি অনুস্মারক রয়েছে:

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

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

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

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

অন্যান্য Android SDK API থেকে android.icu API-এ স্থানান্তর করুন

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

সারণী 2 আপনাকে শুরু করতে এই সমতাগুলির কিছু উদাহরণ দেখায়:

টেবিল 2. অ্যান্ড্রয়েড এবং জাভা 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-এর একটি উপসেট প্রকাশ করে। এপিআইগুলি অ্যান্ড্রয়েড 12 (এপিআই স্তর 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 থেকে উপলব্ধ) ব্যবহার করুন।

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

প্ল্যাটফর্ম (API স্তর) আইসিইউ সিএলডিআর ইউনিকোড
Android 7.0 - 7.1 (API লেভেল 24 - 25) 56 28 ৮.০
Android 8.0 - 8.1 (API লেভেল 26 - 27) 58.2 30.0.3 9.0
Android 9 (API স্তর 28) ৬০.২ 32.0.1 10.0
Android 10 (API স্তর 29) 63.2 34 11.0
Android 11 (API স্তর 30) 66.1 36 13.0
Android 12 (API স্তর 31 - 32) ৬৮.২ 38.1 13.0
Android 13 (API স্তর 33) 70.1 40 14.0
Android 14 (API স্তর 34) 72.1 42 15.0
Android 15 (API লেভেল 35) 75.1 45 15.1

24h/12h সময় বিন্যাস সেটিং

DateFormat.is24HourFormat() থেকে প্রাপ্ত Android-এ ICU ব্যবহারকারীর 24h/12h সময় বিন্যাস সেটিং পর্যবেক্ষণ করে না। এই সেটিংটি পর্যবেক্ষণ করতে, হয় DateFormat বা DateUtils সময় বিন্যাস পদ্ধতি ব্যবহার করুন অথবা বিভিন্ন is24HourFormat() রিটার্ন মানগুলির জন্য উপযুক্ত ঘন্টা প্যাটার্ন চিহ্ন (12h এর জন্য 'h', 24h এর জন্য 'H') সহ 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());

ট্রান্সলিটারের স্থায়িত্ব

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

লাইসেন্সিং

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