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 באפליקציה. במקום זאת, אפשר לקרוא להן במסגרת. אם תעשו את זה, כדאי לספק כמה גרסאות של ה-APK, כדי שמשתמשים עם גרסאות Android נמוכות מ-Android 7.0 (רמת API 24) יוכלו להוריד גרסה של האפליקציה שמכילה את ספריות ICU4J.
בקטע הזה מופיע מידע בסיסי על רמות ה-API המינימליות של Android שנדרשות לתמיכה בספריות האלה. בהמשך מוסבר מה צריך לדעת על ההטמעה הספציפית ל-Android של ICU4J. בסיום, מוסבר איך להשתמש בממשקי ה-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 framework לא מחליפים את התמיכה של 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
משלהן.
מעבר מ-APIs אחרים של Android SDK אל android.icu APIs
חלק מהמחלקות בחבילות 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 חושף קבוצת משנה של ממשקי ה-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 לא פועל לפי הגדרת פורמט השעה של המשתמש (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.