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

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

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

يستخدم نظام Android الأساسي ICU وCLDR لتنفيذ فئات مختلفة للتعامل مع قواعد الكتابة اللاتينية وغير اللاتينية، مع عرض فئات مثل Locale وCharacter والعديد من الفئات الفرعية من java.text. يجب أن يتضمّن التطبيق مكتبة ICU إذا كان يتطلّب وظائف تدويل تتجاوز الفئات المعروضة ويستهدف إصدارات من النظام الأساسي حتى Android 6.0 (المستوى 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
‫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 دعمًا أكثر شمولاً لترميز Unicode والتدويل للتطبيقات التي تستهدف الإصدار Android 7.0 (المستوى 24 من واجهة برمجة التطبيقات) والإصدارات الأحدث. ويقدّم القسم التالي من هذه الصفحة تفاصيل حول هذا الدعم.

دعم الترميز الموحّد والتدويل في الإصدار 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:فئات ICU4J في Android وJava

الفئة الحلول البديلة
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 بدءًا من الإصدار r22b من NDK. لا يتم عرض واجهة برمجة تطبيقات 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
الإصدار 13 من نظام التشغيل Android (المستوى 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" لنظام الـ 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.