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

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

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

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

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

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

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

النظام الأساسي (مستوى واجهة برمجة التطبيقات) وحدة عناية مركزة (ICU) CLDR Unicode
‫Android 1.5–2.0 (المستويات 3–7 من واجهة برمجة التطبيقات) 3.8 1.5 5.0
‫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 دعمًا أكثر شمولاً للترميز الموحّد (Unicode) والتوافق مع اللغات المختلفة للتطبيقات التي تستهدف الإصدار 7.0 من نظام التشغيل Android (المستوى 24 من واجهة برمجة التطبيقات) والإصدارات الأحدث. يقدّم القسم التالي من هذه الصفحة تفاصيل حول هذا الدعم.

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

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

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

تحتوي بعض الفئات في حزمتَي 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 بدءًا من الإصدار r22b من NDK. لا يتم عرض أي واجهة برمجة تطبيقات C++ من خلال Android NDK. بعض واجهات برمجة التطبيقات C غير متاحة.

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

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

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

النظام الأساسي (مستوى واجهة برمجة التطبيقات) وحدة عناية مركزة (ICU) CLDR Unicode
‫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.