เริ่มตั้งแต่ Android 7.0 (API ระดับ 24) Android ให้การสนับสนุนขั้นสูงสำหรับผู้ใช้หลายภาษา ซึ่งทำให้เลือกได้หลายภาษาในการตั้งค่า แอนดรอยด์ ให้ความสามารถนี้โดยเพิ่มจำนวนภาษาที่สนับสนุน และเปลี่ยนวิธีที่ระบบแก้ไขทรัพยากร
เอกสารนี้เริ่มต้นด้วยการอธิบายกลยุทธ์การแก้ปัญหาทรัพยากรใน เวอร์ชัน Android ที่ต่ำกว่า 7.0 (API ระดับ 24) ถัดไปจะอธิบายถึง กลยุทธ์การแก้ปัญหาทรัพยากรที่ปรับปรุงให้ดีขึ้นใน Android 7.0 สุดท้ายจะอธิบายถึงวิธีการใช้ประโยชน์จาก จำนวนภาษาที่เพิ่มขึ้นเพื่อรองรับผู้ใช้หลายภาษามากขึ้น
ความท้าทายในการแก้ไขแหล่งข้อมูลด้านภาษา
ก่อนที่จะเป็น Android 7.0 นั้น Android อาจไม่สำเร็จเสมอไป จับคู่ภาษาของแอปและระบบ
ตัวอย่างเช่น สมมติว่าคุณพบสถานการณ์ต่อไปนี้
- ภาษาเริ่มต้นของแอปคือ
en_US
(ภาษาอังกฤษแบบสหรัฐอเมริกา) และยังมี สตริงภาษาสเปนที่แปลแล้วเป็นภาษาes_ES
ไฟล์ทรัพยากร - ตั้งค่าอุปกรณ์เป็น
es_MX
แล้ว
เมื่อโค้ด Java ของคุณอ้างอิงถึงสตริง ระบบจะโหลด
สตริงจากไฟล์ทรัพยากรเริ่มต้น (en_US
) แม้ว่าแอปจะมี
แหล่งข้อมูลภาษาสเปนที่แปลภายใต้ภาษาes_ES
เพราะเมื่อระบบ
ไม่พบรายการที่ตรงกันทั้งหมด แต่ยังคงมองหาแหล่งข้อมูลโดยตัด
รหัสประเทศนอกประเทศ สุดท้ายนี้ หากไม่พบข้อมูลที่ตรงกัน ระบบจะล้มเหลว
กลับไปใช้ค่าเริ่มต้น ซึ่งก็คือ en_US
ระบบจะใช้ค่าเริ่มต้นเป็น en_US
ด้วยหากผู้ใช้เลือกภาษาที่
แอปไม่รองรับเลย เช่น ภาษาฝรั่งเศส เช่น
การตั้งค่าของผู้ใช้ | แหล่งข้อมูลของแอป | ความละเอียดของทรัพยากร |
---|---|---|
fr_CH |
ค่าเริ่มต้น (en) de_DE es_ES fr_FR it_IT |
ลองใช้ fr_CH => ไม่ผ่าน ลอง fr => ไม่ผ่าน ใช้ค่าเริ่มต้น (en) |
ในตัวอย่างนี้ ระบบจะแสดงสตริงภาษาอังกฤษโดยไม่มี ที่รู้ว่าผู้ใช้จะเข้าใจ ภาษาอังกฤษได้หรือไม่ พฤติกรรมนี้เป็นเรื่องปกติ วันนี้เลย
การปรับปรุงกลยุทธ์การแก้ปัญหาทรัพยากร
Android 7.0 (API ระดับ 24) มีความละเอียดสำหรับทรัพยากรที่มีประสิทธิภาพมากขึ้น และ
จะค้นหาวิดีโอสำรองที่ดีกว่าโดยอัตโนมัติ
แต่เพื่อให้แก้ปัญหาได้เร็วขึ้นและปรับปรุงให้ดีขึ้น
ในการบำรุงรักษาได้ คุณควรจัดเก็บทรัพยากรในภาษาหลักที่นิยมใช้กันมากที่สุด
ตัวอย่างเช่น หากคุณจัดเก็บแหล่งข้อมูลภาษาสเปน
ในไดเรกทอรี values-es-rUS
ก่อน ให้ย้ายไปที่ไดเรกทอรี values-b+es+419
ที่มีภาษาสเปนแบบละตินอเมริกา
ในทำนองเดียวกัน หากคุณมีสตริงทรัพยากรใน
ไดเรกทอรีชื่อ values-en-rGB
เปลี่ยนชื่อ
ไดเรกทอรีไปยัง values-b+en+001
(ระหว่างประเทศ
ภาษาอังกฤษ) เนื่องจากคำค้นหา
ระดับบนสำหรับสตริง en-GB
คือ en-001
ตัวอย่างต่อไปนี้จะอธิบายว่าทำไมแนวทางปฏิบัติเหล่านี้จึงช่วยปรับปรุงประสิทธิภาพ และ
ความเสถียรในความละเอียดของทรัพยากร
ตัวอย่างการแก้ปัญหาของทรัพยากร
สำหรับ Android เวอร์ชันสูงกว่า 7.0 เคสที่อธิบายไว้ใน ตาราง 1 จะมีการแก้ไขต่างกัน
การตั้งค่าของผู้ใช้ | แหล่งข้อมูลของแอป | ความละเอียดของทรัพยากร |
---|---|---|
|
ค่าเริ่มต้น (en) de_DE es_ES fr_FR it_IT |
ลองใช้ fr_CH => ไม่ผ่าน ลอง fr => ไม่ผ่าน ลองเด็ก fr => fr_FR ใช้ fr_FR |
ตอนนี้ผู้ใช้ได้รับแหล่งข้อมูลภาษาฝรั่งเศสแทนภาษาอังกฤษ ตัวอย่างนี้ยังแสดง
เหตุใดคุณจึงควรจัดเก็บสตริงภาษาฝรั่งเศสใน fr
แทนที่จะเป็น fr_FR
สำหรับ Android 7.0 ขึ้นไป วิธีการคือ
เพื่อจับคู่กับภาษาหลัก
ที่ใกล้เคียงที่สุด
แก้ปัญหาได้รวดเร็วและคาดการณ์ได้มากขึ้น
นอกจากตรรกะความละเอียดที่ปรับปรุงให้ดีขึ้นแล้ว ตอนนี้ Android ยังมีฟีเจอร์อีกมากมาย ภาษาของผู้ใช้ที่สามารถเลือกได้ ลองดูตัวอย่างด้านบนอีกครั้งสำหรับภาษาอิตาลี ระบุเป็นภาษาผู้ใช้เพิ่มเติม แต่ไม่มีการรองรับแอปสำหรับภาษาฝรั่งเศส
การตั้งค่าของผู้ใช้ | แหล่งข้อมูลของแอป | ความละเอียดของทรัพยากร |
---|---|---|
|
ค่าเริ่มต้น (en) de_DE es_ES it_IT |
ลองใช้ fr_CH => ไม่ผ่าน ลอง fr => ไม่ผ่าน ลองเด็ก fr => ไม่ผ่าน ลอง it_CH => ไม่ผ่าน ลองเลย => ไม่ผ่าน ลองเด็กคนอื่นดูสิ => it_IT ใช้ it_IT |
ผู้ใช้ยังคงได้รับภาษาที่เข้าใจได้แม้ว่าแอปจะไม่ได้ สำหรับภาษาฝรั่งเศส
การออกแบบแอปให้รองรับภาษาเพิ่มเติม
Android มีเครื่องมือที่ง่ายขึ้นในการแปลเนื้อหาแอปและมีส่วนร่วมกับผู้ใช้ใน ภาษาที่ต้องการ เราขอแนะนำให้ใช้เทคนิคต่อไปนี้ในการกำหนดค่าแอปเพื่อให้แอปสามารถ รองรับภาษาและการจัดรูปแบบต่างๆ โดยรองรับการปรับขนาด
ระบุภาษาที่แอปของคุณรองรับ
โปรดระบุภาษาที่แอปของคุณรองรับโดยใช้
resConfigs
ในไฟล์ build.gradle
ระดับโมดูล
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้ resConfigs
เพื่อแสดงภาษาที่รองรับ
ในตัวอย่างนี้ แอปรองรับทั้งภาษาอังกฤษและภาษาสเปน
ดึงดูด
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
API LocaleList
เริ่มตั้งแต่ Android 7.0 (API ระดับ 24) เป็นต้นไป Android จะแสดง
API ของ LocaleList.getDefault()
ซึ่งช่วยให้แอปค้นหารายการภาษาที่ผู้ใช้ระบุไว้ได้โดยตรง API นี้
ช่วยให้คุณสร้างประสบการณ์
ลักษณะการทำงานของแอปและการแสดงผลเนื้อหาที่มีประสิทธิภาพมากขึ้น เช่น Search
แสดงผลการค้นหาได้หลายภาษาตามการตั้งค่าของผู้ใช้ แอปเบราว์เซอร์
สามารถหลีกเลี่ยงการเสนอการแปลหน้าเว็บ
ในภาษาที่ผู้ใช้เข้าใจอยู่แล้ว
และแอปแป้นพิมพ์จะเปิดใช้เลย์เอาต์ที่เหมาะสมโดยอัตโนมัติได้ทั้งหมด
ตัวจัดรูปแบบ
เพิ่มขึ้นถึง Android 6.0 (API ระดับ 23) และรองรับ Android เพียงตัวเดียวหรือ 2 ภาษา สำหรับภาษาทั่วไปหลายภาษา (en, es, ar, fr, ru) เนื่องจากแต่ละภาษามีรูปแบบ เพียงไม่กี่อย่าง แอปอาจหมดไปเนื่องจากเก็บตัวเลขและวันที่บางส่วนไว้เป็นสตริงแบบฮาร์ดโค้ด ในไฟล์ทรัพยากร อย่างไรก็ตาม เมื่อใช้ชุดการสนับสนุนแบบขยายของ Android อาจมีบางภาษา ความแตกต่างที่สำคัญในรูปแบบของวันที่ เวลา สกุลเงิน และที่คล้ายคลึงกัน ข้อมูลแม้ว่าจะเป็นภาษาเดียวก็ตาม การฮาร์ดโค้ดรูปแบบของคุณสามารถสร้าง ที่สร้างความสับสนให้กับผู้ใช้ปลายทาง ดังนั้น เมื่อพัฒนาสำหรับ Android เวอร์ชัน 7.0 ขึ้นไป ตรวจสอบให้แน่ใจว่าคุณได้ใช้ตัวจัดรูปแบบแทนการกำหนดรหัสตัวเลขและสตริงวันที่แบบฮาร์ดโค้ด
ตัวอย่างเช่น Android 7.0 ขึ้นไปมีการสนับสนุนสำหรับ ภาษาอาหรับ 27 ภาษา สถานที่เหล่านี้ใช้ทรัพยากรร่วมกันได้ แต่บางแบบก็เลือกใช้ตัวเลขแบบ ASCII ควบคู่กันไป ตัวอย่างเช่น เมื่อต้องการสร้างประโยคด้วยตัวแปรตัวเลข เช่น "เลือก PIN 4 หลัก" ให้ใช้ตัวจัดรูปแบบดังที่แสดงด้านล่าง
format(locale, "Choose a %d-digit PIN", 4)