แปลแอป

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

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

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

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

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

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

ภาพรวม: การเปลี่ยนทรัพยากรใน Android

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

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

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

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

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

ตัวอย่าง

โค้ดแบบ Kotlin หรือแบบ Java ของแอปหมายถึงโค้ด 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 ข้อความ สตริง
  • อย่างไรก็ตาม เมื่อเปิดแอปนี้ในอุปกรณ์ที่ตั้งค่าเป็น เป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ ผู้ใช้จะเห็นข้อความแสดงข้อผิดพลาดและ Force Close แอปไม่โหลด

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

ใช้ทรัพยากรสำหรับการแปล

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

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

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

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

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

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

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

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

แอปสามารถระบุ 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 หรือแบบ Java ของคุณอ้างอิงถึง 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 หรือแบบ Java คุณจะอ้างอิงทรัพยากรโดยใช้ไวยากรณ์ R.resource_type.resource_name หรือ android.R.resource_type.resource_name สำหรับข้อมูลเพิ่มเติม โปรดดู เข้าถึงทรัพยากรของแอป

จัดการสตริงสำหรับการปรับให้เข้ากับท้องถิ่น

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

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

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

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

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

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

อย่าลืมอ่านและปฏิบัติตามคำแนะนำเกี่ยวกับดีไซน์ Material สำหรับ การเขียน รูปแบบและคำที่เลือกใช้ ซึ่งจะทำให้แอปดูสวยงามขึ้นในสายตาผู้ใช้และช่วยให้ผู้ใช้เข้าใจ 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>

โปรดพิจารณาให้ข้อมูลบริบทดังตัวอย่างต่อไปนี้

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

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

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

หากต้องการทำเครื่องหมายข้อความที่ต้องการแปล ให้ใช้ <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 รายการไม่มี 1 สตริงที่ ที่แอปต้องการ เมื่อแอปทำงานในภาษาที่ไม่รองรับ พยายามโหลด res/values/strings.xml ผู้ใช้เห็นข้อผิดพลาด และปุ่ม "บังคับปิด"

สำหรับข้อมูลเพิ่มเติม โปรดดูที่การทดสอบเป็นค่าเริ่มต้น แหล่งข้อมูล

ออกแบบเลย์เอาต์ที่ยืดหยุ่น

หากคุณต้องการจัดเรียงเลย์เอาต์ ให้พอดีกับภาษาบางภาษา คุณสามารถสร้างเค้าโครงอื่นสำหรับภาษานั้น เช่น res/layout-de/main.xml สำหรับเลย์เอาต์ภาษาเยอรมัน แต่การดำเนินการนี้ อาจทำให้ดูแลแอปได้ยากขึ้น ขอแนะนำให้สร้างซิงเกิล ที่ยืดหยุ่นมากขึ้น

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

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

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

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

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

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

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

ใช้ออบเจ็กต์บริบทของ Android เพื่อค้นหาภาษาด้วยตนเอง

คุณค้นหาภาษาได้โดยใช้ออบเจ็กต์ Context ที่ Android มีให้บริการ ดังที่แสดงในตัวอย่างต่อไปนี้

Kotlin

val primaryLocale: Locale = context.resources.configuration.locales[0]
val locale: String = primaryLocale.displayName

Java

Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0);
String locale = primaryLocale.getDisplayName();

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

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

ทดสอบแอปที่ปรับให้เข้ากับท้องถิ่นแล้ว

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

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

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

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

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

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

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

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

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

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

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

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

  1. เลือกภาษาที่คุณต้องการทดสอบและกำหนดแท็กภาษา BCP-47 เช่น fr-CA สำหรับภาษาฝรั่งเศสแบบแคนาดา
  2. เปิดโปรแกรมจำลอง
  3. จากเชลล์บรรทัดคำสั่งในคอมพิวเตอร์โฮสต์ ให้เรียกใช้คำสั่งต่อไปนี้ คำสั่ง:

    adb shell หรือหากคุณมีอุปกรณ์เชื่อมต่อแล้ว ให้ระบุว่าคุณต้องการใช้โปรแกรมจำลองโดยเพิ่ม ตัวเลือก -e:
    adb -e shell
  4. ที่ adb พรอมต์ของ Shell (#) ให้เรียกใช้คำสั่งนี้
    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/layout-land/main.xml แต่ไม่มีไฟล์ชื่อ res/layout-port/main.xml แล้วตั้งค่าโปรแกรมจำลองหรืออุปกรณ์เป็น การวางแนวตั้งแล้วดูว่าแอปทำงานหรือไม่