แปลแอป

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

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

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

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

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

คู่มือนี้ครอบคลุมระบบการแปลภาษาหลักของ Android ที่ใช้ในแอป Android ทั้งหมด ดูวิธีโหลดทรัพยากรที่แปลแล้วเหล่านี้ใน Jetpack Compose UI ได้ที่ทรัพยากรใน 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 สำหรับสตริงเหล่านี้ ให้ใช้ภาษาเริ่มต้น ซึ่งเป็นภาษาที่คุณคาดว่าผู้ใช้แอปส่วนใหญ่จะพูด

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

  • 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 อย่างแถบแอป เมนูตัวเลือก แถบระบบ และการแจ้งเตือน การใช้คำศัพท์ของ 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>

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

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

ทำเครื่องหมายส่วนของข้อความที่ไม่ต้องการให้แปล

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

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

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

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

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

<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 โดยเฉพาะอย่างยิ่ง ให้ทดสอบแอปเพื่อให้แน่ใจว่ามีทรัพยากรเริ่มต้นที่จำเป็นทั้งหมดรวมอยู่ด้วย

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

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

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

ทดสอบด้วยตัวอย่างคอมโพสิเบิล

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

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

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

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

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

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

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

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

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

  1. เลือกภาษาที่ต้องการทดสอบและกำหนดแท็กภาษา BCP-47 เช่น fr-CA สำหรับภาษาฝรั่งเศสแบบแคนาดา
  2. เปิดโปรแกรมจำลอง
  3. จากเชลล์บรรทัดคำสั่งในคอมพิวเตอร์โฮสต์ ให้เรียกใช้คำสั่งต่อไปนี้
    adb shell
    หรือหากมีอุปกรณ์เชื่อมต่ออยู่ ให้ระบุว่าคุณต้องการโปรแกรมจำลองโดยเพิ่มตัวเลือก -e
    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/ ให้ตั้งค่าภาษาของโปรแกรมจำลองเป็นภาษาสเปน คุณสามารถใช้แอป Custom Locale เพื่อตั้งค่าโปรแกรมจำลองเป็นภาษาที่ไม่รองรับได้
  2. เรียกใช้แอป
  3. หากแอปแสดงข้อความแสดงข้อผิดพลาดและปุ่มบังคับปิด แสดงว่าแอปอาจกำลังมองหาสตริงที่ไม่มีอยู่ ตรวจสอบว่าไฟล์ res/values/strings.xml มีคำจำกัดความสำหรับสตริงทุกรายการที่แอปใช้

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

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

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

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

ดูเนื้อหา