يستفيد نظام التشغيل Android من مكتبة ICU و مشروع CLDR لتوفير توافق مع Unicode وغيره من معايير التدويل. تنقسم مناقشة هذه الصفحة حول توافق Unicode والتوافق مع اللغات المختلفة إلى قسمَين: الإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأقدم، والإصدار 7.0 من نظام التشغيل Android (المستوى 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 المستخدَمة في الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأقدم
| النظام الأساسي (مستوى واجهة برمجة التطبيقات) | وحدة عناية مركزة (ICU) | CLDR | Unicode |
|---|---|---|---|
| الإصدارات 1.5 إلى 2.0 من نظام التشغيل Android (المستويات 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 والتوافق مع اللغات المختلفة في الإصدار 7.0 من نظام التشغيل Android (المستوى 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.