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

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

إتاحة ترميز Unicode والنشر على مستوى العالم حتى الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات)

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

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

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

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

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

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

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

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

تستخدِم واجهات برمجة تطبيقات ICU4J بيانات الترجمة والشرح المتوفّرة على الجهاز. ونتيجةً لذلك، يمكنك تقليل أثر تطبيقك من خلال عدم تجميع مكتبات ICU4J في تطبيقك. بدلاً من ذلك، يمكنك استدعاؤها في إطار العمل. في حال اتّباع هذه الطريقة، ننصحك بتوفير إصدارات متعددة من حزمة APK، حتى يتمكّن المستخدمون الذين يستخدمون إصدارات Android أقل من Android 7.0 (المستوى 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 من واجهات برمجة تطبيقات Android SDK الأخرى

تحتوي بعض الفئات في حِزم java وandroid على وظائف مماثلة لتلك المتوفّرة في ICU4J. ومع ذلك، غالبًا ما يوفّر ICU4J مزيدًا من الدعم للمعايير واللغات.

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

الجدول 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. تتوفّر واجهات برمجة التطبيقات بدءًا من الإصدار 12 من Android (المستوى 31 لواجهة برمجة التطبيقات). تتوفّر رؤوس NDK اعتبارًا من إصدار NDK r22b. لا يتم عرض أي واجهة برمجة تطبيقات C++ من خلال حزمة تطوير البرامج (NDK) لنظام التشغيل Android. بعض واجهات برمجة التطبيقات 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
الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) 70.1 40 14
الإصدار 14 من نظام التشغيل Android (المستوى 34 لواجهة برمجة التطبيقات) 72.1 42 15
‫Android 15 (المستوى 35 لواجهة برمجة التطبيقات) 75.1 45 15.1

ضبط تنسيق الوقت 24 ساعة/12 ساعة

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

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.