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

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

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

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

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

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

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

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

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

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

ICU4J على نظام التشغيل Android

يعرض نظام التشغيل Android مجموعة فرعية من واجهات برمجة تطبيقات ICU4J من خلال حزمة android.icu بدلاً من com.ibm.icu. لا يظهر بعض واجهات برمجة تطبيقات ICU4J في إطار عمل Android لأسباب مثل إيقاف واجهات برمجة التطبيقات نهائيًا أو عدم إعلان ثباتها. بما أنّ فريق وحدات 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. تتوفّر واجهات برمجة التطبيقات بدءًا من Android 12 (المستوى 31). وتتوفر عناوين NDK بدءًا من إصدار NDK r22b. ولا يتم الكشف عن واجهة برمجة تطبيقات C++ من خلال Android NDK. بعض واجهات برمجة التطبيقات C APIs غير متوفرة.

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

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

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

النظام الأساسي (مستوى واجهة برمجة التطبيقات) وحدة عناية مركزة (ICU) CLDR يونيكود
الإصدار 7.0 إلى 7.1 من Android (المستويات من 24 إلى 25) 56 28 من نظام التشغيل Android
Android 8.0 - 8.1 (مستويات واجهة برمجة التطبيقات من 26 إلى 27) 58.2 30.0.3 9
Android 9 (المستوى 28) 60.2 32.0.1 10
Android 10 (المستوى 29) 63.2 34 11.0
Android 11 (المستوى 30) 66.1 36 13
‫Android 12 (المستوى 31) 68.2 38.1 13

إعداد تنسيق الوقت لمدة 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).