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 | 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
เฟรมเวิร์ก Android ไม่ได้แสดง ICU4J API บางรายการเนื่องจากเหตุผลต่างๆ เช่น API ดังกล่าวถูกเลิกใช้งานหรือไม่ได้ประกาศว่าเสถียร เมื่อทีม ICU เลิกใช้งาน API ในอนาคต Android ก็จะทําเครื่องหมาย API เหล่านั้นว่าเลิกใช้งานด้วย แต่ยังคงรวมไว้ต่อไป
โปรดทราบ
- 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
ของตนเอง
ย้ายข้อมูลไปยัง 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 จะพร้อมใช้งานตั้งแต่ NDK เวอร์ชัน r22b เป็นต้นไป
ไม่มี C++ API ที่แสดงผ่าน 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 | 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" สำหรับ 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 คู่มือผู้ใช้