Android ใช้ประโยชน์จาก ห้อง ICU คลังและ โปรเจ็กต์ CLDR เพื่อจัดทำ Unicode และการปรับให้เป็นสากลอื่นๆ การสนับสนุน การพูดคุยเรื่องการสนับสนุน Unicode และการปรับให้เป็นสากลในหน้านี้จะแบ่งออกเป็น 2 กรณี ส่วน ได้แก่ 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) | ICU | CLDR | ยูนิโค้ด |
---|---|---|---|
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 เฟรมเวิร์ก Android ของ ICU4J ไม่ได้รวม ICU4J API ทั้งหมด
- API ในเฟรมเวิร์กของ Android ไม่ได้มาแทนที่การรองรับของ Android สำหรับ การแปลด้วย ทรัพยากร
- ในบางกรณี เฟรมเวิร์กของ Android รองรับอักขระมากกว่า
ที่ห้องสมุด ICU ตัวอย่างเช่น ชั้นเรียน
android.text
การรองรับอีโมจิ
ย้ายข้อมูลจาก com.ibm.icu ไปยังแพ็กเกจ android.icu
หากคุณใช้ ICU4J API ในแอปอยู่แล้ว และ
android.icu
API ตรงตามข้อกำหนดของคุณ จากนั้นจึงย้ายข้อมูลไปยัง
API เฟรมเวิร์กกำหนดให้คุณต้องเปลี่ยนการนำเข้า Java
ตั้งแต่ com.ibm.icu
ถึง android.icu
จากนั้นคุณจะสามารถ
นำสำเนาไฟล์ ICU4J ของคุณเองออกจากแอป
หมายเหตุ: API เฟรมเวิร์ก ICU4J ใช้ android.icu
Namespace แทนที่จะเป็น com.ibm.icu
เพื่อหลีกเลี่ยงเนมสเปซ
ความขัดแย้งในแอปที่มีไลบรารี com.ibm.icu
ของตนเอง
ย้ายข้อมูลจาก Android SDK API อื่นๆ ไปยัง android.icu API
บางชั้นเรียนในแพ็กเกจ 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
ไม่มีการเปิดเผย API ของ C++ ผ่าน Android NDK C API บางรายการไม่พร้อมใช้งาน
การกำหนดเวอร์ชัน
แพลตฟอร์ม 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) | ICU | CLDR | ยูนิโค้ด |
---|---|---|---|
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" สำหรับ 12h, "H" สำหรับ 24h) สำหรับ 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 คู่มือผู้ใช้