ב-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).
פלטפורמה (רמת 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 שנדרשות לתמיכה בספריות האלה. לאחר מכן נסביר מה צריך לדעת על ההטמעה הספציפית של ICU4J ל-Android. לבסוף, מוסבר איך להשתמש בממשקי ה-API של ICU4J במסגרת Android.
ICU4J ב-Android
מערכת Android חושפת קבוצת משנה של ממשקי ה-API של ICU4J דרך החבילה android.icu
, במקום com.ibm.icu
. חלק מממשקי ה-API של ICU4J לא נחשפים על ידי מסגרת Android, מסיבות כמו הוצאה משימוש של ממשקי ה-API או העובדה שהם לא הוגדרו כיציבים. מאחר שצוות ה-ICU ייצא משימוש בעתיד ממשקי API,
מערכת Android גם מסמנת אותם כממשקי API שהוצאו משימוש, אבל ממשיכים לכלול אותם.
ריכזנו כאן כמה תזכורות:
- ממשקי ה-API של ICU4J Android framework לא כוללים את כל ממשקי ה-API של ICU4J.
- ממשקי ה-API במסגרת Android לא מחליפים את התמיכה של Android בתרגום באמצעות משאבים.
- במקרים מסוימים, המסגרת של Android תומכת ביותר תווים ממה שתומכות ספריות ה-ICU, למשל בתמיכה של הכיתה
android.text
באמוג'י.
מעבר לחבילה android.icu מ-com.ibm.icu
אם באפליקציה שלך כבר נעשה שימוש בממשקי ה-API של ICU4J, וממשקי ה-API של android.icu
עומדים בדרישות, עליך לשנות את הייבוא של Java מ-com.ibm.icu
ל-android.icu
כדי לעבור לממשקי ה-API של framework. לאחר מכן תוכלו להסיר את העותק שלכם של קובצי ICU4J מהאפליקציה.
הערה: ממשקי ה-API של framework של ICU4J משתמשים במרחב השמות android.icu
במקום ב-com.ibm.icu
. המטרה היא למנוע קונפליקט במרחב השמות באפליקציות שמכילות ספריות com.ibm.icu
משלהם.
מעבר לממשקי API של android.icu מממשקי API אחרים של Android SDK
לכיתות מסוימות בחבילות java
ו-android
יש מקבילות לכיתות ב-ICU4J. עם זאת, ב-ICU4J יש לעיתים קרובות תמיכה רחבה יותר בתקנים ובשפות.
בטבלה 2 מפורטות כמה דוגמאות ליחסי השקיפות האלה, שיעזרו לכם להתחיל:
דרגה | אפשרויות אחרות |
---|---|
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).
פלטפורמה (רמת 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 שעות
המכשיר של המשתמש לטיפול נמרץ ב-Android לא בודק את הגדרת הפורמט של המשתמש בפורמט 24 שעות/12 שעות, שמתקבלת מ-DateFormat.is24HourFormat()
.
כדי לשמור את ההגדרה הזו, צריך להשתמש ב-methods של
DateFormat
או
DateUtils
או להשתמש בתבניות עיצוב זמן של ארגון ILS עם סמלים מתאימים של שעות
('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.