מערכת 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 framework.
ICU4J ב-Android
מערכת Android חושפת קבוצת משנה של ממשקי ה-API של ICU4J דרך החבילה android.icu, ולא דרך com.ibm.icu. חלק מממשקי ה-API של ICU4J לא נחשפים על ידי Android framework, מסיבות כמו הוצאה משימוש של ממשקי ה-API או שהם לא הוגדרו כיציבים. כשהצוות של ICU יוציא משימוש ממשקי API בעתיד, גם Android תסמן אותם ככאלה שהוצאו משימוש, אבל תמשיך לכלול אותם.
כמה תזכורות:
- ממשקי ה-API של Android framework של ICU4J לא כוללים את כל ממשקי ה-API של ICU4J.
- ממשקי ה-API ב-Android framework לא מחליפים את התמיכה של Android בלוקליזציה באמצעות משאבים.
- במקרים מסוימים, מסגרת Android תומכת ביותר תווים מאשר ספריות ה-ICU. לדוגמה, התמיכה של המחלקה
android.textבאמוג'י.
מעבר לחבילת android.icu מ-com.ibm.icu
אם אתם כבר משתמשים בממשקי ה-API של ICU4J באפליקציה, וממשקי ה-API של android.icu עונים על הדרישות שלכם, כדי לעבור לממשקי ה-API של ה-framework אתם צריכים לשנות את הייבוא של 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 זמינות החל מגרסה r22b של ה-NDK.
אין ממשק API של C++ שחשוף דרך Android NDK. חלק מממשקי ה-API של C לא זמינים.
ניהול גרסאות
גרסאות חדשות של פלטפורמת Android תואמות לגרסאות חדשות יותר של ICU ולגרסאות CLDR ו-Unicode המתאימות. טבלה 3 מציגה את ההתאמה הזו החל מ-Android 7.0 (רמת API 24). כדי לקבל את פרטי הגרסה של ICU בזמן הריצה, משתמשים ב-API
VersionInfo.ICU_VERSION (זמין החל מ-Android 7.0).
טבלה 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 לא מתייחס להגדרת פורמט השעה של המשתמש (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 (רמת API 29),Transliterator
מסופק כדי לתעתק טקסט מפורמט אחד לאחר. קבוצת המזהים הזמינים לתעתיק לא יציבה בגרסאות ובמכשירים השונים של Android. יצרני מכשירים יכולים להוסיף מזהי תעתיק נוספים. לפני שהמפתחים מתעתקים טקסט, הם צריכים לבדוק את המזהים הזמינים שמתקבלים מ-
Transliterator.getAvailableIDs().
רישוי
ICU4J מופץ בכפוף לרישיון ICU. לפרטים נוספים, ראו המדריך למשתמש של ICU.