ภาพรวมการแก้ปัญหาภาษาและท้องถิ่น

เริ่มตั้งแต่ 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 ด้วยหากผู้ใช้เลือกภาษาที่ แอปไม่รองรับเลย เช่น ภาษาฝรั่งเศส เช่น

ตาราง 1 ความละเอียดของทรัพยากรที่ไม่มีการจับคู่ภาษาที่ตรงกันทั้งหมด

การตั้งค่าของผู้ใช้ แหล่งข้อมูลของแอป ความละเอียดของทรัพยากร
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 จะมีการแก้ไขต่างกัน

ตาราง 2 กลยุทธ์การแก้ปัญหาที่ดีขึ้นสำหรับเมื่อไม่มี การทำงานแบบตรงทั้งหมด

การตั้งค่าของผู้ใช้ แหล่งข้อมูลของแอป ความละเอียดของทรัพยากร
  1. fr_CH
ค่าเริ่มต้น (en)
de_DE
es_ES
fr_FR
it_IT
ลองใช้ fr_CH => ไม่ผ่าน
ลอง fr => ไม่ผ่าน
ลองเด็ก fr => fr_FR
ใช้ fr_FR

ตอนนี้ผู้ใช้ได้รับแหล่งข้อมูลภาษาฝรั่งเศสแทนภาษาอังกฤษ ตัวอย่างนี้ยังแสดง เหตุใดคุณจึงควรจัดเก็บสตริงภาษาฝรั่งเศสใน fr แทนที่จะเป็น fr_FR สำหรับ Android 7.0 ขึ้นไป วิธีการคือ เพื่อจับคู่กับภาษาหลัก ที่ใกล้เคียงที่สุด แก้ปัญหาได้รวดเร็วและคาดการณ์ได้มากขึ้น

นอกจากตรรกะความละเอียดที่ปรับปรุงให้ดีขึ้นแล้ว ตอนนี้ Android ยังมีฟีเจอร์อีกมากมาย ภาษาของผู้ใช้ที่สามารถเลือกได้ ลองดูตัวอย่างด้านบนอีกครั้งสำหรับภาษาอิตาลี ระบุเป็นภาษาผู้ใช้เพิ่มเติม แต่ไม่มีการรองรับแอปสำหรับภาษาฝรั่งเศส

ตารางที่ 3 ความละเอียดของทรัพยากรเมื่อแอปตรงกับ การตั้งค่าภาษาที่ต้องการเป็นอันดับ 2 ของผู้ใช้

การตั้งค่าของผู้ใช้ แหล่งข้อมูลของแอป ความละเอียดของทรัพยากร
  1. fr_CH
  2. อิตาลี ช
ค่าเริ่มต้น (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")
    }
}
เนื่องจากวิธีที่ระบบบิลด์ผสานทรัพยากรจากแอปและทรัพยากร Dependency ทั้งหมด คุณต้อง ระบุภาษาที่สนับสนุนด้วยวิธีนี้เพื่อให้แน่ใจว่าได้รับการตั้งค่าภาษาของผู้ใช้อย่างถูกต้อง

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)