การรองรับ Unicode และการปรับให้เป็นสากล

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 คู่มือผู้ใช้