دعم يونيكود ونشر المحتوى على نطاق عالمي

يستفيد Android من مكتبة ICU و مشروع CLDR لتوفير يونيكود وغيره من أشكال التدويل. تنقسم مناقشة هذه الصفحة حول دعم يونيكود وإضفاء الطابع الدولي إلى قسمَين: Android 6.0 (المستوى 23 لواجهة برمجة التطبيقات) والإصدارات الأقدم، والإصدار 7.0 من Android (المستوى 24 لواجهة برمجة التطبيقات) والإصدارات الأحدث.

إتاحة استخدام يونيكود وإضفاء الطابع الدولي على واجهة برمجة التطبيقات من خلال الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات)

يستخدم نظام Android الأساسي وحدة ICU وCLDR لتنفيذ فئات متعدّدة للتعامل مع منهجيات الهجاء اللاتيني وغير اللاتيني، وعرض فئات مثل Locale وCharacter والعديد من الفئات الفرعية لـ java.text. إذا كان التطبيق يتطلب وظائف دولية غير تلك التي يشملها فئات مكشوفة، ويستهدف إصدارات من النظام الأساسي من خلال Android 6.0 (مستوى واجهة برمجة التطبيقات 23)، يجب أن يتضمن مكتبة ICU.

تحديد الإصدارات

تتوافق الإصدارات المتتالية من نظام Android الأساسي مع الإصدارات الأحدث من ICU وإصدارات CLDR وUnicode المقابلة. يوضح الجدول 1 هذه المراسلة من خلال Android 6.0 (مستوى واجهة برمجة التطبيقات 23).

الجدول 1. إصدارات ICU وCLDR المستخدمة حتى الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات).

النظام الأساسي (مستوى واجهة برمجة التطبيقات) وحدة عناية مركزة (ICU) CLDR يونيكود
Android 1.5–2.0 (مستويات واجهة برمجة التطبيقات من 3 إلى 7) 3.8 1.5 5
Android 2.2 (المستوى 8 من واجهة برمجة التطبيقات) 4.2 1.7 5.1
Android الإصدار 2.3 إلى 3.0 (مستويات واجهة برمجة التطبيقات من 9 إلى 13) 4.4 1.8 5.2
Android 4.0 (مستويات واجهة برمجة التطبيقات من 14 إلى 15) 4.6 1.9 6.0
Android 4.1 (مستويات واجهة برمجة التطبيقات من 16 إلى 17) 4.8 2.0 6.0
Android 4.3 (المستوى 18) 50 22.1 6.2
Android 4.4 (مستويات واجهة برمجة التطبيقات من 19 إلى 20) 51 23 6.2
Android 5.0 (مستويات واجهة برمجة التطبيقات من 21 إلى 22) 53 25 6.3
Android 6.0 (المستوى 23) 55.1 27.0.1 7

يوفّر إطار عمل Android دعمًا أكثر شمولاً لترميز يونيكود وإضفاء الطابع الدولي على التطبيقات التي تستهدف الإصدار 7.0 من نظام التشغيل Android (المستوى 24 من واجهة برمجة التطبيقات) والإصدارات الأحدث. ويقدّم القسم التالي من هذه الصفحة تفاصيل حول طلب الدعم.

إتاحة استخدام يونيكود وإضفاء الطابع الدولي على الإصدار 7.0 من نظام التشغيل Android (المستوى 24 لواجهة برمجة التطبيقات) والإصدارات الأحدث

بالنسبة إلى Android 7.0 (المستوى 24 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يعرض نظام Android الأساسي مجموعة فرعية من واجهات برمجة تطبيقات ICU4J لكي يستخدمها مطوّرو التطبيقات ضمن حزمة android.icu. ICU4J هي مجموعة مفتوحة المصدر ومستخدَمة على نطاق واسع من مكتبات Java وتوفّر إمكانية استخدام الترميز يونيكود وإضفاء الطابع الدولي على التطبيقات البرمجية.

تستخدم واجهات برمجة تطبيقات ICU4J بيانات الترجمة المتوفّرة على الجهاز. ونتيجة لذلك، يمكنك تقليل تأثير تطبيقك من خلال عدم تجميع مكتبات ICU4J في تطبيقك، بل يمكنك بدلاً من ذلك عرض هذه المكتبات في إطار العمل. وفي هذه الحالة، قد تحتاج إلى تقديم إصدارات متعددة من حزمة APK ليتمكّن المستخدمون الذين يستخدمون إصدارات Android أقدم من 7.0 Android (المستوى 24 لواجهة برمجة التطبيقات) من تنزيل إصدار من التطبيق يحتوي على مكتبات ICU4J.

يبدأ هذا القسم بتقديم بعض المعلومات الأساسية حول الحدّ الأدنى لمستويات واجهة برمجة تطبيقات Android المطلوبة للتوافق مع هذه المكتبات. وهي تشرح بعد ذلك المعلومات التي تحتاج إلى معرفتها حول عملية تنفيذ ICU4J الخاصة بنظام التشغيل Android. أخيرًا، يشرح لك الدليل كيفية استخدام واجهات برمجة تطبيقات ICU4J في إطار عمل Android.

ICU4J على Android

يعرض Android مجموعة فرعية من واجهات برمجة تطبيقات ICU4J من خلال حزمة android.icu، بدلاً من com.ibm.icu. ولا يعرض إطار عمل Android بعض واجهات برمجة تطبيقات ICU4J لأسباب مثل إيقاف واجهات برمجة التطبيقات نهائيًا أو عدم الإعلان عن ثباتها. بما أنّ فريق وحدة ICU أوقف نهائيًا واجهات برمجة التطبيقات في المستقبل، يضع نظام Android أيضًا علامة "متوقّفة" على هذه واجهات برمجة التطبيقات، ولكنه لا يزال يشملها.

إليك بعض التذكيرات:

  • لا تتضمّن واجهات برمجة التطبيقات لإطار عمل ICU4J لنظام التشغيل Android جميع واجهات برمجة تطبيقات ICU4J.
  • لا تحلّ واجهات برمجة التطبيقات في إطار عمل Android محلّ دعم Android في الأقلمة باستخدام الموارد.
  • وفي بعض الحالات، يتيح إطار عمل Android استخدام عدد من الأحرف يفوق عدد الأحرف التي تدعمها مكتبات وحدة العناية المركّزة (ICU). وينطبق ذلك مثلاً على توافق الفئة android.text مع الرموز التعبيرية.

الانتقال إلى حزمة android.icu من com.ibm.icu

إذا كنت تستخدم حاليًا واجهات برمجة تطبيقات ICU4J في تطبيقك وكانت واجهات برمجة تطبيقات android.icu تستوفي متطلباتك، سيتطلّب منك نقل البيانات إلى واجهات برمجة التطبيقات الخاصة بإطار العمل تغيير عمليات استيراد Java من com.ibm.icu إلى android.icu. ويمكنك بعد ذلك إزالة نسختك من ملفات ICU4J من التطبيق.

ملاحظة: تستخدم واجهات برمجة التطبيقات لإطار عمل ICU4J مساحة الاسم android.icu بدلاً من com.ibm.icu. ويهدف ذلك إلى تجنُّب التعارضات في مساحات الاسم في التطبيقات التي تحتوي على مكتبات com.ibm.icu الخاصة بها.

الانتقال إلى واجهات برمجة تطبيقات android.icu من واجهات برمجة التطبيقات الأخرى لحزمة تطوير البرامج (SDK) لنظام التشغيل Android

بعض الفئات في حزمتَي java وandroid لها مكافئات للتصنيفات الواردة في ICU4J. ومع ذلك، غالبًا ما يوفّر ICU4J دعمًا أوسع للمعايير واللغات.

يوضح الجدول 2 بعض الأمثلة على هذه المعادلات لمساعدتك على البدء:

Table 2.فئات 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 من خلال مكتبة libicu.so، بدلاً من libicuuc.so أو libicui18n.so. تتوفّر واجهات برمجة التطبيقات بدءًا من Android 12 (المستوى 31). تتوفّر عناوين NDK بدءًا من إصدار NDK r22b. لا يتم عرض أي واجهة برمجة تطبيقات C++ من خلال Android NDK. بعض واجهات برمجة تطبيقات C غير متوفرة.

تحديد الإصدارات

تتوافق الإصدارات المتتالية من نظام Android الأساسي مع الإصدارات الأحدث من ICU وإصدارات CLDR وUnicode المقابلة. يوضح الجدول 3 هذه المراسلات بدءًا من Android 7.0 (مستوى واجهة برمجة التطبيقات 24). استخدام واجهة برمجة تطبيقات VersionInfo.ICU_VERSION (المتوفّرة اعتبارًا من Android 7.0) للحصول على معلومات إصدار وحدة ICU في وقت التشغيل

الجدول 3. إصدارات ICU وCLDR المستخدمة في إصدارات Android من Android 7.0 (المستوى 24 لواجهة برمجة التطبيقات) إلى Android 15 (المستوى 35 لواجهة برمجة التطبيقات).

النظام الأساسي (مستوى واجهة برمجة التطبيقات) وحدة عناية مركزة (ICU) CLDR يونيكود
Android 7.0 - 7.1 (مستويات واجهة برمجة التطبيقات 24 - 25) 56 28 من نظام التشغيل Android
Android 8.0 - 8.1 (مستويات واجهة برمجة التطبيقات 26 - 27) 58.2 30.0.3 9.0
Android 9 (المستوى 28 من واجهة برمجة التطبيقات) 60.2 32.0.1 10.0
Android 10 (المستوى 29) 63.2 34 الإصدار 11.0
Android 11 (المستوى 30) 66.1 36 13.0
Android 12 (المستوى 31 و32) 68.2 38.1 13.0
Android 13 (المستوى 33) 70.1 40 14
Android 14 (المستوى 34) 72.1 42 15
Android 15 (المستوى 35) 75.1 45 15.1

إعدادات تنسيق الوقت على مدار 24 ساعة/12 ساعة

لا تلتزم وحدة العناية المركّزة (ICU) على Android بإعداد تنسيق الوقت الخاص بالمستخدم على مدار 24 ساعة و12 ساعة، والذي تم الحصول عليه من DateFormat.is24HourFormat(). لمراقبة هذا الإعداد، يمكنك استخدام طريقة تنسيق الوقت DateFormat أو DateUtils أو أنماط تنسيق الوقت الخاصة بوحدة ICU مع رموز أنماط الساعة المناسبة ("h" للإشارة إلى 12h، و"H" لمدة 24 ساعة) لقيم عرض مختلفة للسمة is24HourFormat(). على سبيل المثال، تُنشئ هذه التعليمة البرمجية سلسلة بالوقت الحالي وفقًا لإعدادات المستخدم وهي 12h/24h:

Kotlin

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

Java

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

ثبات الترجمة

بدءًا من نظام التشغيل Android 10 (المستوى 29 من واجهة برمجة التطبيقات)، يتم توفير Transliterator لتهجئة النص من تنسيق إلى آخر. يُرجى العلم أنّ مجموعة أرقام تعريف الترجمة المتوفّرة غير ثابتة على مستوى إصدارات وأجهزة Android. وقد تضيف الشركات المصنّعة للأجهزة معرّفات إضافية للكتابة الصوتية. على المطوّرين التحقّق من المعرّفات المتاحة التي تم الحصول عليها من Transliterator.getAvailableIDs() قبل تحويل النص صوتيًا.

الترخيص

تم إصدار بطاقة ICU4J بموجب ترخيص ICU. لمزيد من التفاصيل، يُرجى الاطّلاع على دليل مستخدم وحدة المعالجة المركزية (ICU).