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