แปลแอป

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

หน้านี้อธิบายแนวทางปฏิบัติแนะนำสำหรับการแปลแอป Android เป็นภาษาต่างๆ

คุณต้องมีความรู้ความเข้าใจเกี่ยวกับ Kotlin และคุ้นเคยกับการโหลดทรัพยากรของ Android, ข้อควรพิจารณาในการพัฒนา เช่น วงจรการทำงานของกิจกรรม รวมถึงหลักการทั่วไปของการแปลเป็นภาษาต่างๆ และการแปลเป็นภาษาท้องถิ่น

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

  • ใส่ เนื้อหา ส่วนใหญ่หรือทั้งหมดของอินเทอร์เฟซผู้ใช้ของแอปไว้ในไฟล์ทรัพยากร ตามที่อธิบายไว้ในหน้านี้และใน ภาพรวมทรัพยากรของแอป
  • ในทางกลับกัน ลักษณะการทำงาน ของอินเทอร์เฟซผู้ใช้จะขับเคลื่อนด้วยโค้ดที่อิงตาม Kotlin ตัวอย่างเช่น หากผู้ใช้ป้อนข้อมูลที่ต้องจัดรูปแบบหรือจัดเรียงแตกต่างกันไปตามภาษา คุณจะต้องใช้ Kotlin เพื่อจัดการข้อมูลแบบเป็นโปรแกรม หน้านี้ไม่ได้อธิบายวิธีแปลโค้ดที่อิงตาม Kotlin เป็นภาษาต่างๆ

คู่มือนี้ครอบคลุมระบบการแปลเป็นภาษาต่างๆ หลักของ Android ที่ใช้ในแอป Android ทั้งหมด หากต้องการดูวิธีโหลดทรัพยากรที่แปลเป็นภาษาต่างๆ เหล่านี้ใน UI ของ Jetpack Compose, โปรดดู ทรัพยากรใน Compose

หากต้องการดูคำแนะนำสั้นๆ เกี่ยวกับการแปลสตริงในแอปเป็นภาษาต่างๆ โปรดดู หัวข้อรองรับภาษาและวัฒนธรรมอื่น

ภาพรวม: การสลับทรัพยากรใน Android

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

หน้านี้จะมุ่งเน้นที่การแปลเป็นภาษาต่างๆ และภาษา หากต้องการดูคำอธิบายโดยละเอียด เกี่ยวกับการสลับทรัพยากรและการกำหนดค่าทุกประเภทที่คุณ ระบุได้ เช่น การวางแนวหน้าจอหรือประเภทหน้าจอสัมผัส โปรดดูหัวข้อ จัดหาทรัพยากรทางเลือก

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

เหตุใดทรัพยากรเริ่มต้นจึงสำคัญ

เมื่อแอปทำงานในภาษาที่คุณไม่ได้ระบุข้อความเฉพาะสำหรับภาษานั้น Android จะโหลดสตริงเริ่มต้นจาก res/values/strings.xml หากไม่มีไฟล์เริ่มต้นนี้ หรือไฟล์ขาดสตริงที่แอปต้องการ แอปจะไม่ทำงานและแสดงข้อผิดพลาด ตัวอย่างต่อไปนี้แสดงสิ่งที่อาจเกิดขึ้นเมื่อไฟล์ข้อความเริ่มต้นไม่สมบูรณ์

ตัวอย่าง

โค้ดที่อิงตาม Kotlin ของแอปอ้างอิงสตริงเพียง 2 รายการ ได้แก่ text_a และ text_b แอปมีไฟล์ทรัพยากรที่แปลเป็นภาษาต่างๆ (res/values-en/strings.xml) ซึ่งกำหนด text_a และ text_b เป็นภาษาอังกฤษ นอกจากนี้ แอปยังมีไฟล์ทรัพยากรเริ่มต้น (res/values/strings.xml) ซึ่งมีการกำหนด text_a แต่ไม่มีการกำหนด text_b

  • เมื่อเปิดแอปนี้ในอุปกรณ์ที่ตั้งค่าภาษาเป็นภาษาอังกฤษ แอปอาจทำงานได้โดยไม่มีปัญหา เนื่องจาก res/values-en/strings.xml มีสตริงข้อความที่จำเป็นทั้ง 2 รายการ
  • อย่างไรก็ตาม เมื่อเปิดแอปนี้ในอุปกรณ์ที่ตั้งค่าเป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ ผู้ใช้จะเห็นข้อความแสดงข้อผิดพลาดและปุ่ม "บังคับปิด" แอปจะไม่โหลด

หากต้องการป้องกันไม่ให้เกิดสถานการณ์นี้ ให้ตรวจสอบว่ามีไฟล์ res/values/strings.xml และไฟล์ดังกล่าวมีการกำหนดสตริงที่จำเป็นทุกรายการ สถานการณ์นี้ใช้ได้กับทรัพยากรทุกประเภท ไม่ใช่แค่สตริง คุณต้องสร้างชุดไฟล์ทรัพยากรเริ่มต้นที่มีทรัพยากรทั้งหมดที่แอปเรียกใช้ เช่น Drawable, แบบอักษร หรือสี ดูข้อมูลเกี่ยวกับการทดสอบได้ที่ส่วน ทดสอบทรัพยากรเริ่มต้น

ใช้ทรัพยากรสำหรับการแปลเป็นภาษาต่างๆ

ส่วนนี้จะอธิบายวิธีสร้างทรัพยากรเริ่มต้นและทรัพยากรทางเลือก นอกจากนี้ ยังอธิบายวิธีกำหนดลำดับความสำคัญของทรัพยากรและวิธีอ้างอิงทรัพยากรในโค้ด

สร้างทรัพยากรเริ่มต้น

ใส่ข้อความเริ่มต้นของแอปไว้ใน res/values/strings.xml สำหรับสตริงเหล่านี้ ให้ใช้ภาษาเริ่มต้น ซึ่งเป็นภาษาที่คุณคาดว่าผู้ใช้ส่วนใหญ่ของแอปจะพูด

ชุดทรัพยากรเริ่มต้นยังมี Drawable เริ่มต้นและอาจมีทรัพยากรประเภทอื่นๆ เช่น ไอคอนหรือสตริง ทรัพยากรเหล่านี้จะอยู่ในไดเรกทอรีต่อไปนี้

  • res/drawable/: ไดเรกทอรีที่จำเป็นซึ่งมีไฟล์กราฟิกอย่างน้อย 1 ไฟล์สำหรับไอคอนของแอปใน Google Play
  • res/xml/: จำเป็นหากคุณมีโฟลเดอร์ res/xml-<qualifiers>
  • res/raw/: จำเป็นหากคุณมีโฟลเดอร์ res/raw-<qualifiers>

สร้างทรัพยากรทางเลือก

ส่วนสำคัญของการแปลแอปเป็นภาษาต่างๆ คือการระบุข้อความทางเลือกสำหรับภาษาต่างๆ ในบางกรณี คุณยังต้องระบุภาพ กราฟิก เสียง และทรัพยากรอื่นๆ ที่เฉพาะเจาะจงสำหรับภาษาต่างๆ ด้วย

แอปสามารถระบุres/<qualifiers>/ ไดเรกทอรีได้หลายรายการ โดยแต่ละรายการมีตัวระบุที่แตกต่างกัน หากต้องการสร้างทรัพยากรทางเลือกสำหรับภาษาอื่น ให้ใช้ตัวระบุที่ระบุภาษาหรือการผสมผสานระหว่างภาษาและภูมิภาค ชื่อไดเรกทอรีทรัพยากรต้องเป็นไปตามรูปแบบการตั้งชื่อที่อธิบายไว้ในหัวข้อ จัดหาทรัพยากรทางเลือก ไม่เช่นนั้นแอปจะคอมไพล์ไม่ได้

ตัวอย่าง

สมมติว่าภาษาเริ่มต้นของแอปคือภาษาอังกฤษ และคุณต้องการแปลข้อความทั้งหมดในแอปเป็นภาษาฝรั่งเศส และแปลข้อความทั้งหมดเป็นภาษาญี่ปุ่นยกเว้นชื่อแอป ในกรณีนี้ ให้สร้างไฟล์ strings.xml 3 ไฟล์ โดยแต่ละไฟล์จะจัดเก็บไว้ในไดเรกทอรีทรัพยากรที่เฉพาะเจาะจงสำหรับภาษาต่างๆ ดังนี้

  1. res/values/strings.xml
    มีข้อความภาษาอังกฤษสำหรับสตริงทั้งหมดที่แอปใช้ รวมถึงข้อความ สำหรับสตริงที่ชื่อ title
  2. res/values-fr/strings.xml
    มีข้อความภาษาฝรั่งเศสสำหรับสตริงทั้งหมด รวมถึง title
  3. res/values-ja/strings.xml
    มีข้อความภาษาญี่ปุ่นสำหรับสตริงทั้งหมด ยกเว้น title

หากโค้ดที่อิงตาม Kotlin ของคุณอ้างอิง R.string.title สิ่งที่จะเกิดขึ้นในรันไทม์มีดังนี้

  • หากอุปกรณ์ตั้งค่าเป็นภาษาอื่นที่ไม่ใช่ภาษาฝรั่งเศส Android จะโหลด title จากไฟล์ res/values/strings.xml
  • หากอุปกรณ์ตั้งค่าเป็นภาษาฝรั่งเศส Android จะโหลด title จากไฟล์ res/values-fr/strings.xml

หากอุปกรณ์ตั้งค่าเป็นภาษาญี่ปุ่น Android จะค้นหา title ในไฟล์ res/values-ja/strings.xml แต่เนื่องจากไม่มีสตริงดังกล่าวอยู่ในไฟล์นั้น Android จึงกลับไปใช้ค่าเริ่มต้นและโหลด title เป็นภาษาอังกฤษจากไฟล์ res/values/strings.xml

ทรัพยากรใดมีลำดับความสำคัญสูงกว่า

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

ตัวอย่าง

สมมติว่าแอปมีชุดกราฟิกเริ่มต้นและกราฟิกอีก 2 ชุด โดยแต่ละชุดได้รับการเพิ่มประสิทธิภาพให้เหมาะกับการตั้งค่าอุปกรณ์ที่แตกต่างกัน

  • res/drawable/
    มีกราฟิกเริ่มต้น
  • res/drawable-small-land-stylus/
    มีกราฟิกที่เพิ่มประสิทธิภาพให้เหมาะกับการใช้กับอุปกรณ์ที่คาดว่าจะได้รับข้อมูลจากสไตลัสและมีหน้าจอความหนาแน่นต่ำแบบ QVGA ในแนวนอน
  • res/drawable-ja/
    มีกราฟิกที่เพิ่มประสิทธิภาพให้เหมาะกับการใช้กับภาษาญี่ปุ่น

หากแอปทำงานบนอุปกรณ์ที่กำหนดค่าให้ใช้ภาษาญี่ปุ่น Android จะโหลดกราฟิกจาก res/drawable-ja/ แม้ว่าอุปกรณ์นั้นจะเป็นอุปกรณ์ที่คาดว่าจะได้รับอินพุตจากสไตลัสและมีหน้าจอ QVGA ความหนาแน่นต่ำในการวางแนวแนวนอนก็ตาม

ข้อยกเว้น: ตัวระบุเดียวที่มีลำดับความสำคัญสูงกว่าภาษาในกระบวนการเลือกคือรหัสโทรศัพท์มือถือของประเทศ (MCC) และรหัสระบุเครือข่ายมือถือ (MNC)

ตัวอย่าง

สมมติว่าคุณอยู่ในสถานการณ์ต่อไปนี้

  • โค้ดของแอปเรียกใช้ R.string.text_a
  • มีไฟล์ทรัพยากรที่เกี่ยวข้อง 2 ไฟล์ ได้แก่
    • res/values-mcc404/strings.xmlซึ่งมี text_a ในภาษาเริ่มต้นของแอป ในกรณีนี้คือภาษาอังกฤษ
    • res/values-hi/strings.xml ซึ่งมี text_a ในภาษาฮินดี
  • แอปทำงานบนอุปกรณ์ที่มีการกำหนดค่าต่อไปนี้
    • ซิมการ์ดเชื่อมต่อกับเครือข่ายมือถือในอินเดีย (MCC 404)
    • ภาษาตั้งค่าเป็นภาษาฮินดี (hi)

Android จะโหลด text_a จาก res/values-mcc404/strings.xml (เป็นภาษาอังกฤษ) แม้ว่าอุปกรณ์จะกำหนดค่าเป็นภาษาฮินดีก็ตาม เนื่องจากในกระบวนการเลือกทรัพยากร Android จะให้ความสำคัญกับการจับคู่ MCC มากกว่าการจับคู่ภาษา

กระบวนการเลือกไม่ได้ตรงไปตรงมาเสมอไปอย่างที่ตัวอย่างเหล่านี้แสดง หากต้องการดูคำอธิบายที่ละเอียดกว่าของกระบวนการนี้ โปรดดู หัวข้อวิธีที่ Android ค้นหาทรัพยากรที่ตรงกันมากที่สุด คำอธิบายและรายการตัวระบุทั้งหมดตามลำดับความสำคัญอยู่ใน ภาพรวมทรัพยากรของแอป

อ้างอิงทรัพยากรในโค้ด

ในโค้ดที่อิงตาม Kotlin ของแอป คุณจะอ้างอิงทรัพยากรโดยใช้ไวยากรณ์ R.resource_type.resource_name หรือ android.R.resource_type.resource_name. ดูข้อมูลเพิ่มเติมได้ที่ หัวข้อเข้าถึงทรัพยากรของแอป

จัดการสตริงสำหรับการแปลเป็นภาษาต่างๆ

ส่วนนี้จะอธิบายแนวทางปฏิบัติแนะนำสำหรับการจัดการสตริงที่เกี่ยวข้องกับการแปลเป็นภาษาต่างๆ

ย้ายสตริงทั้งหมดลงใน strings.xml

เมื่อสร้างแอป อย่าฮาร์ดโค้ดสตริงใดๆ แต่ให้ประกาศสตริงทั้งหมดเป็นทรัพยากรในไฟล์ strings.xml เริ่มต้น ซึ่งจะช่วยให้อัปเดตและแปลสตริงเป็นภาษาต่างๆ ได้ง่าย คุณสามารถแยก แปล และผสานรวมสตริงในไฟล์ strings.xml กลับเข้าไปในแอปได้อย่างง่ายดายด้วยตัวระบุที่เหมาะสม โดยไม่ต้องเปลี่ยนแปลงโค้ดที่คอมไพล์แล้ว

ตัวอย่างเช่น หากใช้ Compose คุณจะโหลดสตริงได้ดังนี้

// In the res/values/strings.xml file
// <string name="compose">Jetpack Compose</string>

// In your Compose code
Text(
    text = stringResource(R.string.compose)
)

หากสร้างรูปภาพที่มีข้อความ ให้ใส่สตริงเหล่านั้นไว้ใน strings.xml ด้วย และสร้างรูปภาพใหม่หลังจากการแปล

ปฏิบัติตามหลักเกณฑ์สำหรับสตริง UI ของ Android

เมื่อออกแบบและพัฒนา UI ให้ใส่ใจกับวิธีที่คุณพูดคุยกับผู้ใช้ โดยทั่วไป ให้ใช้รูปแบบที่กระชับ เป็นมิตร แต่สั้น และใช้รูปแบบที่สอดคล้องกันใน UI ทั้งหมด

โปรดอ่านและปฏิบัติตามคำแนะนำของ Material Design เกี่ยวกับ รูปแบบการเขียนและการเลือกคำ การทำเช่นนี้จะทำให้แอปของคุณดูดีขึ้นสำหรับผู้ใช้และช่วยให้ผู้ใช้เข้าใจ UI ได้เร็วขึ้น

นอกจากนี้ ให้ใช้คำศัพท์มาตรฐานของ Android ทุกครั้งที่ทำได้ เช่น สำหรับองค์ประกอบ UI อย่าง App Bar, เมนูตัวเลือก, แถบระบบ และการแจ้งเตือน การใช้คำศัพท์ของ Android อย่างถูกต้องและสอดคล้องกันจะช่วยให้การแปลง่ายขึ้นและทำให้ผู้ใช้ได้รับผลิตภัณฑ์ขั้นสุดท้ายที่ดีขึ้น

ให้บริบทที่เพียงพอสำหรับสตริงที่ประกาศ

เมื่อประกาศสตริงในไฟล์ strings.xml ให้ระบุบริบทที่ใช้สตริงนั้น ข้อมูลนี้มีคุณค่าอย่างยิ่งสำหรับนักแปลและทำให้ได้การแปลที่มีคุณภาพดีขึ้น นอกจากนี้ ยังช่วยให้คุณจัดการสตริงได้อย่างมีประสิทธิภาพมากขึ้นด้วย

ตัวอย่าง

<!-- The action for submitting a form. This text is on a button that can fit 30 chars -->
<string name="login_submit_button">Sign in</string>

ลองระบุข้อมูลบริบทต่อไปนี้

  • สตริงนี้มีไว้เพื่ออะไร สตริงนี้จะแสดงให้ผู้ใช้เห็นเมื่อใดและที่ใด
  • สตริงนี้อยู่ในส่วนใดของ UI ตัวอย่างเช่น การแปลในปุ่มจะมีความยืดหยุ่นน้อยกว่าในกล่องข้อความ

มาร์กส่วนของข้อความที่ไม่ต้องการแปล

บ่อยครั้งที่สตริงมีข้อความที่ไม่ต้องการแปลเป็นภาษาอื่น ตัวอย่างทั่วไป ได้แก่ โค้ดบางส่วน ตัวยึดตำแหน่งสำหรับค่า สัญลักษณ์พิเศษ หรือชื่อ เมื่อเตรียมสตริงสำหรับการแปล ให้มองหาและมาร์กข้อความที่ต้องคงไว้ตามเดิมโดยไม่ต้องแปล เพื่อไม่ให้นักแปลเปลี่ยนแปลงข้อความนั้น

หากต้องการมาร์กข้อความที่ไม่ต้องการแปล ให้ใช้แท็กตัวยึดตำแหน่ง <xliff:g> ต่อไปนี้เป็นตัวอย่างแท็กที่ระบุว่าข้อความ "%1$s" ไม่ควร เปลี่ยนแปลงระหว่างการแปล เพื่อไม่ให้ข้อความเสียหาย

<string name="countdown">
  <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday
</string>

เมื่อประกาศแท็กตัวยึดตำแหน่ง ให้เพิ่มแอตทริบิวต์รหัส [id] ที่อธิบายว่าตัวยึดตำแหน่งมีไว้เพื่ออะไร หากแอปแทนที่ค่าตัวยึดตำแหน่งในภายหลัง โปรดระบุแอตทริบิวต์ตัวอย่าง [example] เพื่อชี้แจงการใช้งานที่คาดไว้

ต่อไปนี้คือตัวอย่างแท็กตัวยึดตำแหน่ง

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Example placeholder for a special Unicode symbol -->
<string name="star_rating">Check out our 5
    <xliff:g id="star">\u2605</xliff:g>
</string>
<!-- Example placeholder for a URL -->
<string name="app_homeurl">
    Visit us at <xliff:g
    id="application_homepage">http://my/app/home.html</xliff:g>
</string>
<!-- Example placeholder for a name -->
<string name="prod_name">
    Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g>
</string>
<!-- Example placeholder for a literal -->
<string name="promo_message">
    Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount.
</string>
...
</resources>

รายการตรวจสอบการแปลเป็นภาษาต่างๆ

หากต้องการดูภาพรวมทั้งหมดของกระบวนการแปลและเผยแพร่แอป Android เป็นภาษาต่างๆ โปรดดูหัวข้อแปลภาษาแอปของคุณ

เคล็ดลับการแปลเป็นภาษาต่างๆ

ทำตามเคล็ดลับต่อไปนี้เมื่อแปลแอปเป็นภาษาต่างๆ

ออกแบบแอปให้ทำงานได้ในทุกภาษา

อย่าคาดการณ์เกี่ยวกับอุปกรณ์ที่ผู้ใช้เรียกใช้แอป อุปกรณ์อาจมีฮาร์ดแวร์ที่คุณไม่ได้คาดไว้ หรืออาจตั้งค่าเป็นภาษาที่คุณไม่ได้วางแผนไว้หรือทดสอบไม่ได้ ออกแบบแอปให้ทำงานได้ตามปกติหรือล้มเหลวอย่างเหมาะสมไม่ว่าแอปจะทำงานบนอุปกรณ์ใดก็ตาม

สำคัญ: ตรวจสอบว่าแอปมีชุดทรัพยากรเริ่มต้นครบถ้วน ได้แก่ โฟลเดอร์ res/drawable/ และ res/values/ โดยไม่มีตัวแก้ไขเพิ่มเติมในชื่อโฟลเดอร์ ซึ่งมีรูปภาพและข้อความทั้งหมดที่แอปต้องการ

หากแอปขาดทรัพยากรเริ่มต้นแม้เพียงรายการเดียว แอปจะไม่ทำงานบนอุปกรณ์ที่ตั้งค่าเป็นภาษาที่ไม่รองรับ ตัวอย่างเช่น หากไฟล์เริ่มต้น res/values/strings.xml ขาดสตริงที่แอปต้องการ เมื่อแอปทำงานในภาษาที่ไม่รองรับและพยายามโหลด res/values/strings.xml ผู้ใช้จะเห็นข้อความแสดงข้อผิดพลาดและปุ่ม "บังคับปิด"

ดูข้อมูลเพิ่มเติมได้ที่ส่วนทดสอบทรัพยากรเริ่มต้น

หลีกเลี่ยงการสร้างไฟล์ทรัพยากรและสตริงข้อความมากกว่าที่จำเป็น

คุณอาจไม่จำเป็นต้องสร้างทรัพยากรทางเลือกที่เฉพาะเจาะจงสำหรับภาษาต่างๆ สำหรับทรัพยากรทุกรายการในแอป ตัวอย่างเช่น โลโก้แอปที่กำหนดไว้ในไดเรกทอรี res/drawable/ อาจทำงานได้ในทุกภาษา ในกรณีนี้จึงไม่จำเป็นต้องสร้างไฟล์กราฟิกทางเลือก

นอกจากนี้ คุณอาจไม่จำเป็นต้องสร้างข้อความทางเลือกสำหรับทุกสตริง ตัวอย่างเช่น สมมติว่า

  • ภาษาเริ่มต้นของแอปคือภาษาอังกฤษแบบอเมริกัน มีการกำหนดสตริงทั้งหมดที่แอปใช้โดยใช้การสะกดคำแบบภาษาอังกฤษแบบอเมริกันไว้ใน res/values/strings.xml
  • คุณต้องการระบุการสะกดคำแบบภาษาอังกฤษแบบอังกฤษสำหรับวลีสำคัญบางวลี คุณต้องการให้ใช้สตริงทางเลือกเหล่านี้เมื่อแอปทำงานบนอุปกรณ์ในสหราชอาณาจักร

หากต้องการทำเช่นนี้ ให้สร้างไฟล์ขนาดเล็กชื่อ res/values-en-rGB/strings.xml ซึ่งมีเฉพาะสตริงที่แตกต่างกันเมื่อแอปทำงานในสหราชอาณาจักร สำหรับสตริงอื่นๆ ทั้งหมด แอปจะกลับไปใช้ค่าเริ่มต้นและใช้สิ่งที่กำหนดไว้ใน res/values/strings.xml

ใช้ LocalConfiguration สำหรับการค้นหาภาษาด้วยตนเอง

คุณสามารถค้นหาภาษาได้โดยใช้ LocalConfiguration ที่ Android จัดเตรียมไว้ให้ ดังที่แสดงในตัวอย่างต่อไปนี้

val locale = LocalConfiguration.current.locales[0]

ใช้บริการแปลแอป

บริการแปลแอปผสานรวมอยู่ใน Play Console บริการนี้ช่วยให้คุณรับใบเสนอราคาทันทีและสั่งซื้อจากบริษัทแปลภาษาได้ คุณสามารถสั่งซื้อการแปลเป็นภาษาเดียวหรือหลายภาษาสำหรับสตริง UI ของแอป, ข้อความข้อมูลสินค้าใน Play Store, ชื่อ IAP และข้อความแคมเปญโฆษณา

ใช้ Gemini เพื่อแปลสตริงในแอป

คุณสามารถใช้ Gemini ใน Android Studio เพื่อแปลทรัพยากรสตริงของแอปได้โดยตรงในโปรเจ็กต์ ดูข้อมูลเพิ่มเติมได้ที่หัวข้อ แปลภาษาแอปของคุณ

ทดสอบแอปที่แปลเป็นภาษาต่างๆ

ทดสอบแอปที่แปลเป็นภาษาต่างๆ ในอุปกรณ์หรือโดยใช้โปรแกรมจำลองของ Android โดยเฉพาะอย่างยิ่ง ให้ทดสอบแอปเพื่อให้แน่ใจว่ามีทรัพยากรเริ่มต้นที่จำเป็นทั้งหมด

ทดสอบบนอุปกรณ์

โปรดทราบว่าอุปกรณ์ที่คุณใช้ทดสอบอาจแตกต่างจากอุปกรณ์ที่ผู้บริโภคในที่อื่นๆ ใช้มาก ภาษาที่พร้อมใช้งานในอุปกรณ์ของคุณอาจแตกต่างจากภาษาที่พร้อมใช้งานในอุปกรณ์อื่นๆ นอกจากนี้ ความละเอียดและความหนาแน่นของหน้าจออุปกรณ์อาจแตกต่างกัน ซึ่งอาจส่งผลต่อการแสดงสตริงและ Drawable ใน UI

หากต้องการเปลี่ยนภาษาในอุปกรณ์ ให้ใช้แอปการตั้งค่า

ทดสอบด้วยการแสดงตัวอย่างคอมโพเนนต์

ก่อนที่จะทดสอบในอุปกรณ์ คุณสามารถใช้การแสดงตัวอย่างคอมโพเนนต์ ใน Android Studio เพื่อทดสอบ UI ที่แปลเป็นภาษาต่างๆ ได้โดยไม่ต้องติดตั้งใช้งานในโปรแกรมจำลอง หากต้องการแสดงตัวอย่าง UI ในภาษาต่างๆ ให้ใช้ คำอธิบายประกอบ @Preview (เช่น @Preview(locale = "fr")) นอกจากนี้ คุณยังทดสอบเลย์เอาต์ที่อ่านจากขวาไปซ้าย (RTL) ได้โดยระบุภาษา RTL เช่น @Preview(locale = "ar")

ทดสอบในโปรแกรมจำลอง

ดูรายละเอียดเกี่ยวกับการใช้โปรแกรมจำลองได้ที่ หัวข้อเรียกใช้แอปในโปรแกรมจำลองของ Android

สร้างและใช้ภาษาที่กำหนดเอง

ภาษา "ที่กำหนดเอง" คือการผสมผสานระหว่างภาษาหรือภูมิภาคที่อิมเมจระบบ Android ไม่รองรับอย่างชัดเจน คุณสามารถทดสอบวิธีที่แอปทำงานในภาษาที่กำหนดเองได้โดยสร้างภาษาที่กำหนดเองในโปรแกรมจำลอง ซึ่งทำได้ 2 วิธีดังนี้

  • ใช้แอปภาษาที่กำหนดเอง ซึ่งเข้าถึงได้จากแท็บแอป หลังจากสร้างภาษาที่กำหนดเองแล้ว ให้เปลี่ยนไปใช้ภาษาดังกล่าวโดยแตะชื่อภาษาค้างไว้
  • เปลี่ยนเป็นภาษาที่กำหนดเองจากเชลล์ adb ตามที่อธิบายไว้ในส่วนต่อไปนี้

เมื่อตั้งค่าโปรแกรมจำลองเป็นภาษาที่ไม่มีในอิมเมจระบบ Android ระบบเองจะแสดงเป็นภาษาเริ่มต้น อย่างไรก็ตาม แอปจะแปลเป็นภาษาต่างๆ ได้อย่างถูกต้อง

เปลี่ยนภาษาของโปรแกรมจำลองจากเชลล์ adb

หากต้องการเปลี่ยนภาษาในโปรแกรมจำลองโดยใช้เชลล์ adb ให้ทำดังนี้

  1. เลือกภาษาที่ต้องการทดสอบและกำหนดแท็กภาษา BCP-47 ของภาษาดังกล่าว เช่น fr-CA สำหรับภาษาฝรั่งเศสแบบแคนาดา
  2. เปิดโปรแกรมจำลอง
  3. จากเชลล์บรรทัดคำสั่งในคอมพิวเตอร์โฮสต์ ให้เรียกใช้คำสั่งต่อไปนี้:
    adb shell
    หรือหากคุณแนบอุปกรณ์ไว้ ให้ระบุว่าต้องการใช้โปรแกรมจำลองโดย เพิ่มตัวเลือก -e option:
    adb -e shell
  4. ที่พรอมต์เชลล์ adb (#) ให้เรียกใช้คำสั่งนี้:
    setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
    แทนที่ส่วนที่อยู่ในวงเล็บด้วยโค้ดที่เหมาะสมจากขั้นตอนที่ 1

    ตัวอย่างเช่น หากต้องการทดสอบในภาษาฝรั่งเศสแบบแคนาดา ให้ใช้คำสั่งต่อไปนี้
    setprop persist.sys.locale fr-CA;stop;sleep 5;start

การดำเนินการนี้จะทำให้โปรแกรมจำลองรีสตาร์ท เมื่อหน้าจอหลักปรากฏขึ้นอีกครั้ง ให้เปิดแอปอีกครั้ง แล้วแอปจะเปิดขึ้นพร้อมกับภาษาใหม่

ทดสอบทรัพยากรเริ่มต้น

หากต้องการทดสอบว่าแอปมีทรัพยากรสตริงที่จำเป็นทุกรายการหรือไม่ ให้ทำดังนี้

  1. ตั้งค่าโปรแกรมจำลองหรืออุปกรณ์เป็นภาษาที่แอปไม่รองรับ ตัวอย่างเช่น หากแอปมีสตริงภาษาฝรั่งเศสใน res/values-fr/ แต่ไม่มีสตริงภาษาภาษาสเปนใน res/values-es/ ให้ตั้งค่าภาษาของโปรแกรมจำลองเป็นภาษาสเปน คุณสามารถใช้แอปภาษาที่กำหนดเองเพื่อตั้งค่าโปรแกรมจำลองเป็นภาษาที่ไม่รองรับ
  2. เรียกใช้แอป
  3. หากแอปแสดงข้อความแสดงข้อผิดพลาดและปุ่ม "บังคับปิด" แสดงว่าแอปอาจกำลังมองหาสตริงที่ไม่มี ตรวจสอบว่าไฟล์ res/values/strings.xml มีการกำหนดสตริงทุกรายการที่แอปใช้

หากการทดสอบสำเร็จ ให้ทำซ้ำสำหรับการกำหนดค่าประเภทอื่นๆ ตัวอย่างเช่น หากแอปมีไฟล์สตริงชื่อ res/values-land/strings.xml แต่ไม่มีไฟล์ชื่อ res/values-port/strings.xml ให้ตั้งค่าโปรแกรมจำลองหรืออุปกรณ์เป็นแนวตั้งและดูว่าแอปทำงานหรือไม่

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการแปลเป็นภาษาต่างๆ ได้จากแหล่งข้อมูลเพิ่มเติมต่อไปนี้

เอกสารประกอบ

เนื้อหาของ Views