תמיכה ב-Unicode ובבינלאומיות

מערכת Android משתמשת בספריית ICU ובפרויקט CLDR כדי לספק תמיכה ב-Unicode ובתמיכה בינלאומית אחרת. הדיון בדף זה בנושא תמיכה ב-Unicode ובתמיכה בבינלאומיות מחולק לשניים Android 6.0 (רמת API 23) ומטה ו-Android 7.0 (רמת API 24) ומעלה.

תמיכה ב-Unicode ובתהליך הבינלאומיזציה עד Android 6.0 (רמת API‏ 23)

פלטפורמת Android משתמשת בICU וב-CLDR כדי להטמיע שיעורים לטיפול באורתוגרפיה לטינית ולא לטינית, חשיפת כיתות כמו Locale, Character, וגם הרבה תתי-מחלקות של java.text. אפליקציה שדורשת פונקציות בינלאומיות בנוסף את הסיווגים החשופים, ומטרגטת גרסאות של הפלטפורמה באמצעות Android 6.0 (רמת API 23), חייבת לכלול את ספריית ה-ICU.

ניהול גרסאות

גרסאות מתקדמות יותר של פלטפורמת Android תואמות לגרסאות חדשות יותר של ICU ולגרסאות התואמות של CLDR ו-Unicode. בטבלה 1 מוצגת ההתאמה הזו עד Android 6.0 (רמת API ‏23).

טבלה 1. גרסאות ICU ו-CLDR ששימשו עד Android 6.0‏ (רמת API 23).

פלטפורמה (רמת API) טיפול נמרץ מאגר תגים אישי (CLDR) Unicode
Android מגרסה 1.5 עד 2.0 (רמות API 3 עד 7) 3.8 1.5 5.0
Android 2.2 (רמת API 8) ‫4.2 1.7 5.1
Android מגרסה 2.3 עד 3.0 (רמות API 9 עד 13) 4.4 1.8 5.2
Android 4.0 (רמות API 14 עד 15) 4.6 1.9 6.0
Android 4.1 (רמות API 16-17) 4.8 2.0 6.0
Android 4.3 (רמת API 18) 50 22.1 6.2
Android 4.4 (רמות API 19 עד 20) 51 23 6.2
Android 5.0 (רמות API 21-22) 53 25 6.3
Android 6.0 (רמת API 23) 55.1 27.0.1 7.0

מסגרת Android מספקת תמיכה מקיפה יותר ב-Unicode ובתהליך ההתאמה לשוק הבינלאומי לאפליקציות שמטרגטות את Android 7.0 (רמת API 24) ואילך. בקטע הבא בדף מפורט מידע על התמיכה הזו.

תמיכה ב-Unicode ובבינלאומיות ב-Android 7.0 (רמת API 24) ואילך

ב-Android 7.0 (רמת API 24) ואילך, פלטפורמת Android חושפת קבוצת משנה של ממשקי ה-API של ICU4J למפתחי אפליקציות, לשימוש בחבילה android.icu. ICU4J היא קבוצת ספריות Java בקוד פתוח שנמצאת בשימוש נפוץ ומספקת Unicode ותמיכה בבינלאומיות לאפליקציות תוכנה.

ממשקי ה-API של ICU4J משתמשים יש במכשיר נתוני התאמה לשוק המקומי. כתוצאה מכך, ניתן להפחית את טביעת הרגל הפחמנית מבוססת-האי-הידור של ספריות ה-ICU4J באפליקציה. במקום זאת, אפשר לקרוא להם ב-framework. אם תעשו זאת, מומלץ לספק מספר גרסאות של קובץ ה-APK, כדי שמשתמשים עם גרסאות Android ישנות יותר מ-Android 7.0 (רמת API 24) יוכלו להוריד גרסה של האפליקציה שמכילה את ספריות ICU4J.

בקטע הזה נספק מידע בסיסי על רמות ה-API המינימליות של Android שנדרשות כדי לתמוך בספריות האלה. לאחר מכן מוסבר מה צריך לדעת על ההטמעה של ICU4J ל-Android. לבסוף, הוא כולל הוראות לשימוש בממשקי ה-API של ICU4J ב-Android.

ICU4J ב-Android

Android חושף קבוצת משנה של ממשקי ה-API של ICU4J דרך חבילה של android.icu במקום com.ibm.icu. חלק מממשקי ה-API של ICU4J לא נחשפים על ידי מסגרת Android, מסיבות כמו הוצאה משימוש של ממשקי ה-API או העובדה שהם לא הוגדרו כיציבים. כשצוות ICU יוציא משימוש ממשקי API בעתיד, גם Android יסמן אותם ככאלה, אבל ימשיך לכלול אותם.

ריכזנו כאן כמה תזכורות:

  • ממשקי ה-API של ICU4J Android framework לא כוללים את כל ממשקי ה-API של ICU4J.
  • ממשקי ה-API במסגרת Android לא מחליפים את התמיכה של Android בתרגום באמצעות משאבים.
  • במקרים מסוימים, מסגרת Android תומכת ביותר תווים מאשר ספריות ICU. למשל, בכיתה android.text יש תמיכה בסמלי אמוג'י.

מעבר לחבילת android.icu מהכתובת com.ibm.icu

אם אתם כבר משתמשים בממשקי ה-API של ICU4J באפליקציה, וממשקי ה-API של android.icu עומדים בדרישות שלכם, כדי לעבור לממשקי ה-API של המסגרת תצטרכו לשנות את ייבוא ה-Java מ-com.ibm.icu ל-android.icu. לאחר מכן אפשר להסיר את העותק שלך של קובצי ICU4J מהאפליקציה.

הערה: ממשקי ה-API של מסגרת ICU4J משתמשים במרחב השמות android.icu במקום com.ibm.icu. המטרה היא למנוע קונפליקט במרחב השמות באפליקציות שמכילות ספריות com.ibm.icu משלהם.

מעבר לממשקי API של android.icu מממשקי API אחרים של Android SDK

חלק מהכיתות בחבילות java ו-android כוללות מקבילים לאלה שנמצאו ב-ICU4J. עם זאת, ב-ICU4J יש לעיתים קרובות תמיכה רחבה יותר בתקנים ובשפות.

בטבלה 2 מפורטות כמה דוגמאות לזהויות האלה שיעזרו לכם להתחיל:

טבלה 2.כיתות ICU4J ב-Android וב-Java

דרגה אפשרויות אחרות
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 חושף קבוצת משנה של ממשקי ה-API של ICU4C דרך הספרייה libicu.so, ולא דרך libicuuc.so או libicui18n.so. ממשקי ה-API זמינים החל מ-Android 12 (רמת API ‏31). כותרות NDK זמינות החל מ- NDK גרסה r22b. אין חשיפה של C++ API דרך Android NDK. חלק מממשקי ה-API של C לא זמינים.

ניהול גרסאות

גרסאות מתקדמות יותר של פלטפורמת Android תואמות לגרסאות חדשות יותר של ICU ולגרסאות התואמות של CLDR ו-Unicode. בטבלה 3 מוצגת ההתאמה הזו החל מ-Android 7.0 (רמת API‏ 24). משתמשים ב-API‏ VersionInfo.ICU_VERSION (זמין מאז Android 7.0) כדי לקבל את פרטי הגרסה של ICU בזמן הריצה.

טבלה 3 גרסאות ICU ו-CLDR שנעשה בהן שימוש בגרסאות Android, החל מ-Android 7.0 (רמת API 24) ועד Android 15 (רמת API 35).

פלטפורמה (רמת API) טיפול נמרץ מאגר תגים אישי (CLDR) Unicode
Android מגרסה 7.0 עד 7.1 (רמות API 24 עד 25) 56 28 8.0
Android מגרסה 8.0 עד 8.1 (רמות API 26 עד 27) 58.2 30.0.3 9.0
Android 9 (רמת API 28) 60.2 32.0.1 10.0
Android 10 (רמת API 29) 63.2 34 11.0
Android 11 (רמת API 30) 66.1 36 13.0
Android 12 (רמת API 31 עד 32) 68.2 38.1 13.0
Android 13 (רמת API 33) 70.1 40 14.0
Android 14 (רמת API 34) 72.1 42 15.0
Android 15 (רמת API 35) 75.1 45 15.1

הגדרת פורמט של שעה 24 שעות/12 שעות

ב-ICU ל-Android לא מתבצעת התאמה לפורמט הזמן של 12 שעות או 24 שעות שהמשתמש מגדיר, שמתקבל מ-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 (רמת API 29) Transliterator ניתנת לתעתק טקסט מפורמט אחד לפורמט אחר. קבוצת מזהי התעתיק הזמינים לא יציבה במכשירים ובגרסאות השונות של Android. יצרני המכשירים עשויים להוסיף מזהים נוספים של תעתיק. המפתחים חייבים לבדוק את המזהים הזמינים, שהתקבלו מ: Transliterator.getAvailableIDs(), לפני תרגום הטקסט.

רישוי

ICU4J משוחרר במסגרת רישיון ICU. לפרטים נוספים, אפשר להיכנס למוקד החירום הטלפוני מדריך למשתמש.