پشتیبانی از یونیکد و بین‌المللی‌سازی

Android از کتابخانه ICU و پروژه CLDR برای ارائه پشتیبانی از Unicode و سایر پشتیبانی‌های بین‌المللی‌سازی استفاده می‌کند. بحث این صفحه درباره پشتیبانی از یونیکد و بین‌المللی‌سازی به دو بخش تقسیم می‌شود: Android نسخه ۶.۰ (سطح میانای برنامه‌سازی کاربردی ۲۳) و پایین‌تر، و Android نسخه ۷.۰ (سطح میانای برنامه‌سازی کاربردی ۲۴) و بالاتر.

پشتیبانی از یونیکد و بین‌المللی‌سازی ازطریق Android 6.0 (سطح میانای برنامه‌سازی کاربردی ۲۳)

پلاتفرم Android از ICU و CLDR برای پیاده‌سازی کلاس‌های مختلف برای مدیریت املای لاتین و غیرلاتین استفاده می‌کند و کلاس‌هایی مانند Locale، Character، و بسیاری از زیرکلاس‌های java.text را نمایش می‌دهد. برنامه‌ای که به عملکردهای بین‌المللی‌سازی فراتر از کلاس‌های افشاشده نیاز دارد و نسخه‌های پلاتفرم را ازطریق Android 6.0 (سطح میانای برنامه‌سازی کاربردی ۲۳) هدف قرار می‌دهد، باید کتابخانه ICU را داشته باشد.

نسخه‌بندی

نسخه‌های متوالی پلاتفرم Android با نسخه‌های جدیدتر ICU و نسخه‌های CLDR و Unicode مربوطه مطابقت دارند. جدول ۱ این مطابقت را در Android نسخه ۶.۰ (سطح میانای برنامه‌سازی کاربردی ۲۳) نشان می‌دهد.

جدول ۱. نسخه‌های ICU و CLDR استفاده‌شده در Android 6.0 (سطح میانای برنامه‌سازی کاربردی ۲۳).

پلاتفرم (سطح ای‌پی‌آی) بخش مراقبت‌های ویژه CLDR یونی‌کد
Android 1.5–2.0 (سطوح میانای برنامه‌سازی کاربردی ۳–۷) ۳٫۸ ۱٫۵ ۵
Android 2.2 (سطح میانای برنامه‌سازی کاربردی ۸) ‫۲-۴ ‫۱٫۷ ‫۱-۵
Android 2.3–3.0 (سطح میانای برنامه‌سازی کاربردی ۹–۱۳) ۴٫۴ ۱٫۸ ‫۲-۵
Android 4.0 (سطح میانای برنامه‌سازی کاربردی ۱۴-۱۵) ۴٫۶ ۱٫۹ ۶.۰
Android 4.1 (سطح میانای برنامه‌سازی کاربردی ۱۶–۱۷) ۴٫۸ ۲٫۰ ۶.۰
Android 4.3 (سطح میانای برنامه‌سازی کاربردی ۱۸) 50 ۲۲٫۱ ‫۲-۶
Android 4.4 (سطح میانای برنامه‌سازی کاربردی ۱۹–۲۰) 51 23 ‫۲-۶
Android 5.0 (سطح میانای برنامه‌سازی کاربردی ۲۱–۲۲) 53 25 ‫۳-۶
Android 6.0 (سطح میانای برنامه‌سازی کاربردی ۲۳) ۵۵٫۱ ‫۲۷.۰.۱ ۷.۰

چارچوب Android پشتیبانی جامع‌تری از Unicode و بین‌المللی‌سازی برای برنامه‌هایی که Android نسخه ۷.۰ (سطح میانای برنامه‌سازی کاربردی ۲۴) و بالاتر را هدف قرار می‌دهند ارائه می‌دهد. بخش بعدی این صفحه جزئیات مربوط به این پشتیبانی را ارائه می‌دهد.

پشتیبانی از یونیکد و بین‌المللی‌سازی در Android 7.0 (سطح میانای برنامه‌سازی کاربردی ۲۴) و بالاتر

برای Android 7.0 (سطح ای‌پی‌آی ۲۴) و بالاتر، پلاتفرم Android زیرمجموعه‌ای از ICU4J APIs را برای توسعه‌دهندگان نرم‌افزار در معرض دید قرار می‌دهد تا تحت بسته android.icu استفاده کنند. ‫ICU4J مجموعه‌ای متن‌باز و پرکاربرد از کتابخانه‌های Java است که پشتیبانی از Unicode و بین‌المللی‌سازی را برای برنامه‌های نرم‌افزاری ارائه می‌دهد.

میاناهای برنامه‌سازی کاربردی ICU4J از داده‌های بومی‌سازی موجود در دستگاه استفاده می‌کنند. درنتیجه، می‌توانید با کامپایل نکردن کتابخانه‌های ICU4J در برنامه‌تان، ردپای برنامه‌تان را کاهش دهید. درعوض، می‌توانید آن‌ها را در چارچوب فراخوانی کنید. اگر این کار را انجام دهید، ممکن است بخواهید چندین نسخه از APK خود ارائه دهید، تا کاربرانی که نسخه‌های Android پایین‌تر از Android 7.0 (سطح میانای برنامه‌سازی کاربردی ۲۴) را اجرا می‌کنند بتوانند نسخه‌ای از برنامه را که حاوی کتابخانه‌های ICU4J است بارگیری کنند.

این بخش با ارائه برخی اطلاعات اساسی درباره حداقل سطح میانای برنامه‌سازی کاربردی Android موردنیاز برای پشتیبانی از این کتابخانه‌ها شروع می‌شود. سپس توضیح می‌دهد که درباره پیاده‌سازی ICU4J مختص Android چه چیزهایی باید بدانید. درنهایت، به شما می‌گوید که چگونه از ICU4J API در چارچوب Android استفاده کنید.

ICU4J در Android

Android زیرمجموعه‌ای از ICU4J API را ازطریق بسته android.icu به‌جای com.ibm.icu نشان می‌دهد. برخی‌از میاناهای برنامه‌سازی کاربردی ICU4J توسط چارچوب Android ارائه نمی‌شوند، به دلایلی مانند منسوخ شدن میاناهای برنامه‌سازی کاربردی یا پایدار اعلام نشدن آن‌ها. ازآنجایی‌که تیم ICU در آینده میاناهای برنامه‌سازی کاربردی را منسوخ می‌کند، Android نیز آن‌ها را به‌عنوان منسوخ‌شده علامت‌گذاری می‌کند اما همچنان آن‌ها را لحاظ می‌کند.

در اینجا چند یادآور ارائه شده است:

  • میاناهای برنامه‌سازی کاربردی چارچوب ICU4J Android شامل همه میاناهای برنامه‌سازی کاربردی ICU4J نمی‌شود.
  • میاناهای برنامه‌سازی کاربردی در چارچوب Android جایگزین پشتیبانی Android از بومی‌سازی با منابع نمی‌شود.
  • در برخی موارد، چارچوب Android از نویسه‌های بیشتری نسبت به کتابخانه‌های ICU پشتیبانی می‌کند. برای مثال، این موضوع درباره پشتیبانی کلاس android.text از اموجی صادق است.

انتقال به بسته android.icu از com.ibm.icu

اگر ازقبل از ICU4J API در برنامه‌تان استفاده می‌کنید و android.icu API نیازهایتان را برآورده می‌کند، برای انتقال به framework API باید واردات Java را از com.ibm.icu به android.icu تغییر دهید. سپس می‌توانید نسخه خودتان از فایل‌های ICU4J را از برنامه بردارید.

توجه: میاناهای برنامه‌سازی کاربردی چارچوب ICU4J به‌جای com.ibm.icu از فضای نام android.icu استفاده می‌کنند. این کار برای جلوگیری از تداخل فضای نام در برنامه‌هایی است که کتابخانه‌های com.ibm.icu خودشان را دارند.

انتقال به میاناهای برنامه‌سازی کاربردی android.icu از دیگر میاناهای برنامه‌سازی کاربردی کیت توسعه نرم‌افزار Android

برخی‌از کلاس‌ها در بسته‌های 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

ICU4C در Android

Android زیرمجموعه‌ای از ICU4C API را ازطریق کتابخانه libicu.so به‌جای libicuuc.so یا libicui18n.so نشان می‌دهد. این میاناهای برنامه‌سازی کاربردی از Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۱) دردسترس هستند. سرفصل‌های NDK از نسخه r22b از NDK دردسترس هستند. هیچ میانای برنامه‌سازی کاربردی C++‎ ازطریق Android NDK ارائه نمی‌شود. برخی‌از میاناهای برنامه‌سازی کاربردی C دردسترس نیستند.

نسخه‌بندی

نسخه‌های متوالی پلاتفرم Android با نسخه‌های جدیدتر ICU و نسخه‌های CLDR و Unicode مربوطه مطابقت دارند. جدول ۳ این مطابقت را از Android 7.0 (سطح میانای برنامه‌سازی کاربردی ۲۴) نشان می‌دهد. از VersionInfo.ICU_VERSION API (دردسترس از Android 7.0) برای دریافت اطلاعات نسخه ICU در زمان اجرا استفاده کنید.

جدول ۳. نسخه‌های ICU و CLDR مورداستفاده در نسخه‌های Android از Android 7.0 (سطح API‏ ۲۴) تا Android 15 (سطح API‏ ۳۵).

پلاتفرم (سطح ای‌پی‌آی) بخش مراقبت‌های ویژه CLDR یونی‌کد
Android 7.0 - 7.1 (سطوح میانای برنامه‌سازی کاربردی ۲۴ - ۲۵) 56 28 ۸.۰
‫Android 8.0 - 8.1 (سطوح میانای برنامه‌سازی کاربردی ۲۶ - ۲۷) ۵۸٫۲ ‫۳۰.۰.۳ ۹٫۰
Android 9 (سطح میانای برنامه‌سازی کاربردی ۲۸) ۶۰٫۲ ‫۳۲.۰.۱ ۱۰٫۰
Android 10 (سطح میانای برنامه‌سازی کاربردی ۲۹) ۶۳٫۲ 34 ۱۱٫۰
Android 11 (میانای برنامه‌سازی کاربردی سطح ۳۰) ۶۶٫۱ 36 ۱۳٫۰
Android 12 (سطح میانای برنامه‌سازی کاربردی ۳۱ - ۳۲) ۶۸٫۲ ۳۸٫۱ ۱۳٫۰
Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) ۷۰٫۱ 40 ۱۴
Android 14 (سطح میانای برنامه‌سازی کاربردی ۳۴) ۷۲٫۱ ۴۲ ۱۵٫۰
Android 15 (سطح میانای برنامه‌سازی کاربردی 35) ۷۵٫۱ ۴۵ ۱۵٫۱

تنظیم قالب زمان ۲۴ ساعته/۱۲ ساعته

ICU در Android از تنظیم قالب زمان ۲۴ ساعته/۱۲ ساعته کاربر که از DateFormat.is24HourFormat() دریافت شده است پیروی نمی‌کند. برای رعایت این تنظیم، یا از روش‌های قالب‌بندی زمان DateFormat یا DateUtils استفاده کنید یا از الگوهای قالب‌بندی زمان ICU با نمادهای الگوی ساعت مناسب («h» برای ۱۲ ساعته، «H» برای ۲۴ ساعته) برای مقادیر برگشتی is24HourFormat() مختلف استفاده کنید. برای مثال، این کد رشته‌ای با زمان فعلی تولید می‌کند که تنظیم ۱۲ ساعته/۲۴ ساعته کاربر را رعایت می‌کند:

کاتلین

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 (سطح میانای برنامه‌سازی کاربردی ۲۹)، Transliterator برای نویسه‌گردانی نوشتار از یک قالب به قالب دیگر ارائه شده است. مجموعه شناسه‌های نویسه‌گردانی دردسترس در نسخه‌های Android و دستگاه‌ها ناپایدار است. سازندگان دستگاه ممکن است شناسه‌های نویسه‌گردانی بیشتری اضافه کنند. توسعه‌دهندگان باید شناسه‌های دردسترس را که از Transliterator.getAvailableIDs() دریافت شده است، قبل‌از نویسه‌گردانی نوشتار بررسی کنند.

صدور پروانه

ICU4J تحت پروانه ICU منتشر شده است. برای جزئیات، راهنمای کاربر ICU را ببینید.