دعم الترميز الموحد والتدويل

الإعلانات

دعم الترميز الموحد والتدويل

 

 

دعم الترميز الموحد والتدويل

يستفيد نظام اندرويد من مكتبة ICU (المكونات الدولية للترميز الموحد) و مشروع CLDR (مستودع البيانات المحلية الشائعة) لتوفير دعم الترميز الموحد والتدويل.

يقوم هذا المستند بمناقشة دعم الترميز الموحد والتدويل وتنقسم المناقشه إلى قسمين: نظام اندرويد 6.0 (API 23) وأقل، و نظام اندرويد 7.0 (API 24) وأعلى.

 

 

 

دعم الترميز الموحد والتدويل في نظام الأندرويد 6.0 (API 23) أو أقل


تستخدم منصة الاندرويد ICU و CLDR لتنفيذ فئات مختلفة لمعالجة الإملاء لكل من اللغات اللاتينيه والغير لاتينيه، وتقوم بعرض فئات

مثل المواقع، الحروف، والعديد من الفئات الفرعية لنص الجافا (java.text).

يجب أن يشتمل التطبيق على وظائف التدويل ما بعد عرض الفئات، وإستهداف إصدارات المنصه من خلال الأندرويد 6.0 (API 23)، و

يجب أن يحتوي على مكتبة ICU في حزمة APK الخاصة به.

 

 

 

الإصدارات


الإصدارات المتعاقبة لنظام الأندرويد تتوافق مع النسخ الجديدة من ICU (كما تتوافق مع نسخ CLDR و Unicode). يعرض الجدول1

هذه التوافقات في نظام الأندرويد 6.0 (API 23).

 

جدول1: إصدارات ICU و CLDR المستخدمة في نظام الأندرويد 6.0 (API 23).

المنصه (مستوى API) ICU
المكونات الدولية للترميز الموحد
CLDR 

مستودع البيانات المحلية الشائعه (كلودير)

Unicode

الترميز الموحد

أندرويد  1.5–2.0 (API 3 – 7) 3.8 1.5 5.0
أندرويد 2.2 (API 8) 4.2 1.7 5.1
أندرويد 2.3–3.0 (API 9–13) 4.4 1.8 5.2
أندرويد 4.0 (API 14–15) 4.6 1.9 6.0
أندرويد 4.1 (API 16–17) 4.8 2.0 6.0
أندرويد 4.3 (API 18) 50 22.1 6.2
أندرويد 4.4 (API 19–20) 51 23 6.2
أندرويد 5.0 (API 21–22) 53 25 6.3
أندرويد 6.0 (API 23) 55.1 27.0.1 7.0

التطبيقات التي تستهدف نظام الأندرويد 7.0 (API 24) أو أعلى يمكن أن يكون لها تأثير أكثر شمولاً لـ” دعم الترميز الموحد والتدويل

” اللذان يعرضان بواسطة إطار الأندرويد. القسم التالي من هذا المستند يوفر تفاصيل حول هذا الدعم.

 

 

 

دعم الترميز الموحد والتدويل في نظام الأندرويد 7.0 (API 24) أو أعلى


بدءاً من إصدار الأندرويد 7.0، تعرض منصة الأندرويد مجموعة فرعية من مكتبة واجهة برمجة التطبيقات للجافا ICU4J لمطوري

التطبيقات لإستخدامها في حزمة android.icu.

ICU4J هي مجموعة مفتوحة المصدر تستخدم على نطاق واسع من قبل مكتبات الجافا التي توفر دعم لـ” الترميز الموحد والتدويل ” لتطبيقات البرامج.

تستخدم واجهات برمجة التطبيقات ICU4J بيانات الإعدادات المحلية الموجودة في الجهاز. كنتيجة لذلك، يمكنك تقليل آثار ملفك الـ

APK من خلال عدم دمج مكتبات ICU4J في ملفك الـAPK؛ بدلاً من ذلك، يمكنك ببساطة إستدعائهم إلى إطار العمل.

(في هذه الحاله، قد ترغب في توفير نسخ متعددة من ملف APK، بحيث يمكن للمستخدمين الذين يستخدمون إصدارات أندرويد

أقل من أندرويد 7.0 أن يقوموا بتنزيل نسخة من التطبيق تحتوي على مكتبات ICU4J).

يبدأ هذا المستند بتقديم معلومات أساسية عن الحد الأدنى المطلوب لإصدار الأندرويد لدعم هذه المكتبات.

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

 

 

 

ICU4J على الأندرويد


يعرض اندرويد مجموعة فرعية من واجهة برمجة التطبيقات ICU4J عبر حزمة android.icu، بدلاً من com.ibm.icu.

قد يختار إطار عمل الأندرويد عدم عرض واجهات برمجة التطبيقات ICU4J لعدة أسباب: على سبيل المثال، لأن واجهة برمجة التطبيقات موقوفة أو غير مستقرة الإعلان.

بما أن فريق ICU سوف يقوم بإيقاف واجهة برمجة التطبيقات مستقبلاً APIs، سيشير إليها الأندرويد أيضاً كـ”موقوفه” لكنه سيستمر في تضمينها.

إليك بعض الأشياء المهمه التي يجب ملاحظتها:

  •  واجهة برمجة تطبيقات إطار عمل أندرويد ICU4J لا تتضمن جميع واجهات برمجة التطبيقات ICU4J.
  •  NDK لا تدعم أندرويد ICU4C.
  •  واجهة برمجة تطبيقات إطار عمل الأندرويد لا تستبدل دعم الأندرويد للإعدادات المحليه مع المصادر.
  •  في بعض الحالات، إطار عمل الأندرويد يدعم حروف أكثر مما تدعمه مكتبات ICU. هذا صحيح، مثال، تدعم فئة android.text الرموز التعبيريه.

 

 

الترحيل إلى حزمة android.icu من com.ibm.icu.


إذا كنت تستخدم بالفعل واجهة برمجة التطبيقات ICU4J في تطبيقك، وتقوم واجهة برمجة تطبيقات android.icu بتلبية متطلباتك،

فإن الترحيل إلى إطار عمل واجهة برمجة التطبيقات يتطلب منك تغيير واردات جافا من com.ibm.icu إلى android.icu.

يمكنك بعد ذلك إزالة نسختك من ملفات ICU4J من حزمة APK.

 ملاحظة: يستخدم إطار عمل واجهة برمجة تطبيقات ICU4J المساحة android.icu بدلاً من com.ibm.icu. 

 وهذا لتجنب تعارض المساحه “namespace” في حزمة APK التي تحتوي على مكتبات com.ibm.icu  الخاصة بها.

 

 

 

الترحيل إلى واجهة برمجة تطبيقات android.icu من واجهة برمجة تطبيقات SDK أخرى


بعض الفئات في حزم Java وAndroid لديها نظير لتلك الموجودة في ICU4J. مع ذلك، يوفر ICU4J غالباً دعم أكبر للمقاييس واللغات.

يعرض الجدول 2 بعض الأمثله على هذه النظائر لك لكي تبدأ:

جدول2: فئات ICU4J للأندرويد والجافا.

الفئة Class  البدائل Alternatives
 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

 

 

 

الإصدارات


الإصدارات المتتاليه من منصة الأندرويد تتوافق مع الإصدارات الأحدث من ICU (كما تتوافق مع نسخ CLDR و الترميز الموحد).

الجدول 3 يعرض هذه التوافقات بدءاً من أندرويد 7.0 (API 24).

جدول3: إصدارات ICU و CLDR المستخدمة في أندرويد 7.0 (API 24) وأعلى.

 المنصة (مستوى API)  ICU CLDR Unicode
 أندرويد 7.0 – 7.1 (API 24 – 25) 56 28 8.0
 أندرويد
 8.0 – 8.1 (API 26 – 27)
58.2 30.0.3 9.0
 أندرويد 9 (API 28) 60.2 32.0.1 10.0

 

 

 

 

ضبط تنسيق الوقت 12 ساعه \ 24 ساعه


ICU على الأندرويد لا يلاحظ تنسيق الوقت المستخدم (يتم جلبه بواسطة ()DateFormat.is24HourFormat).

من أجل مراقبة الإعداد، بإستخدام دوال تنسيق الوقت إما DateFormat أو DateUtils أو بإستخدام نمط تنسيق الوقت ICU مع

رموز أنماط الساعه المناسبه (‘h’ for 12h, ‘H’ for 24h) لقيم إرجاع مختلفه ()is24HourFormat.

على سبيل المثال، سيقوم هذا الكود بإنشاء سلسلة مع الوقت الحالي الذي يلاحظ إعداد المستخدم 12h/24h:

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());

 

 

الترخيص

يتم إصدار ICU4J بموجب الترخيص ICU. لمزيد من التفاصيل، انظر دليل مستخدم ICU.

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد