การรองรับ 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 ยูนิโค้ด
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 คู่มือผู้ใช้