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