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 Playres/layout/
: ไดเรกทอรีที่จำเป็นที่มี XML ไฟล์ที่กำหนดเลย์เอาต์เริ่มต้นres/anim/
: ต้องระบุ หากคุณมีres/anim-<qualifiers>
โฟลเดอร์res/xml/
: ต้องระบุ หากคุณมีres/xml-<qualifiers>
โฟลเดอร์res/raw/
: ต้องระบุ หากคุณมีres/raw-<qualifiers>
โฟลเดอร์
เคล็ดลับ: ในโค้ด ให้ตรวจสอบการอ้างอิงแต่ละรายการถึง ทรัพยากร Android ตรวจสอบว่ามีการกำหนดทรัพยากรเริ่มต้นให้แต่ละรายการแล้ว และตรวจสอบว่าไฟล์สตริงเริ่มต้นมีข้อมูลครบถ้วนแล้ว: แปลงเป็นภาษาแล้ว ไฟล์สตริงอาจมีสตริงย่อย แต่จะมีสตริง default ต้องมีทุกอย่าง
สร้างทรัพยากรทางเลือก
ส่วนใหญ่ของการแปลแอปคือการให้ข้อความสำรองสำหรับ ภาษาต่างๆ ในบางกรณี คุณยังใส่กราฟิกทางเลือก เสียง เลย์เอาต์ และทรัพยากรอื่นๆ สำหรับภาษานั้นๆ โดยเฉพาะ
แอปสามารถระบุ res/<qualifiers>/
ได้หลายรายการ
ไดเรกทอรี โดยแต่ละรายการมีตัวระบุที่ต่างกัน หากต้องการสร้างทรัพยากรสำรองสำหรับ
ภาษาอื่น คุณอาจใช้ตัวระบุที่ระบุภาษาหรือ
ชุดค่าผสมของภาษา-ภูมิภาค ชื่อของไดเรกทอรีทรัพยากรต้องสอดคล้องกับ
กับรูปแบบการตั้งชื่อที่อธิบายไว้ใน
ระบุ
ทรัพยากรอื่น มิเช่นนั้น แอปของคุณไม่สามารถคอมไพล์ได้
ตัวอย่าง
สมมติว่าภาษาเริ่มต้นของแอปคือภาษาอังกฤษ
คุณต้องการแปลข้อความทั้งหมดในแอป
เป็นภาษาฝรั่งเศส
ข้อความยกเว้นชื่อแอป
ภาษาญี่ปุ่น ในกรณีนี้ ให้คุณสร้างstrings.xml
3 รายการ
โดยแต่ละไฟล์จะอยู่ในไดเรกทอรีทรัพยากรเฉพาะภาษา ดังนี้
res/values/strings.xml
มีข้อความภาษาอังกฤษสำหรับสตริงทั้งหมดที่แอปใช้ รวมถึงข้อความสำหรับสตริงชื่อtitle
res/values-fr/strings.xml
มีข้อความภาษาฝรั่งเศสสำหรับทุกสตริง รวมถึงtitle
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
ให้ทำดังนี้
- เลือกภาษาที่คุณต้องการทดสอบและกำหนดแท็กภาษา BCP-47
เช่น
fr-CA
สำหรับภาษาฝรั่งเศสแบบแคนาดา
- เปิดโปรแกรมจำลอง
- จากเชลล์บรรทัดคำสั่งในคอมพิวเตอร์โฮสต์ ให้เรียกใช้คำสั่งต่อไปนี้
คำสั่ง:
adb shell
หรือหากคุณมีอุปกรณ์เชื่อมต่อแล้ว ให้ระบุว่าคุณต้องการใช้โปรแกรมจำลองโดยเพิ่ม ตัวเลือก-e
:
adb -e shell
- ที่
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
ซึ่งจะทำให้โปรแกรมจำลองรีสตาร์ท เมื่อหน้าจอหลักปรากฏขึ้นอีกครั้ง ให้เปิดแอปอีกครั้ง และแอปจะเปิดขึ้นด้วยภาษาใหม่
ทดสอบทรัพยากรเริ่มต้น
หากต้องการทดสอบว่าแอปรวมทรัพยากรสตริงทั้งหมดที่จำเป็นหรือไม่ ให้ทำดังนี้
- ตั้งค่าโปรแกรมจำลองหรืออุปกรณ์เป็นภาษาที่แอปไม่สามารถใช้
การสนับสนุน ตัวอย่างเช่น หากแอปมีสตริงภาษาฝรั่งเศส
res/values-fr/
แต่ไม่มีสตริงภาษาสเปนในres/values-es/
แล้วตั้งค่าภาษาของโปรแกรมจำลองเป็นภาษาสเปน คุณสามารถใช้แอป "ภาษาที่กำหนดเอง" เพื่อตั้งค่าโปรแกรมจำลองเป็นภาษา ภาษาที่ไม่รองรับ - เรียกใช้แอป
- หากแอปแสดงข้อความแสดงข้อผิดพลาดและปุ่ม "บังคับปิด" อาจ
ให้หาสตริงที่ใช้ไม่ได้ โปรดตรวจสอบว่า
res/values/strings.xml
ไฟล์มีคำจำกัดความของ ทุกสตริงที่แอปใช้
หากการทดสอบประสบความสำเร็จ ให้ทำซ้ำสำหรับการกำหนดค่าประเภทอื่นๆ สำหรับ
ตัวอย่างเช่น หากแอปมีไฟล์เลย์เอาต์ที่ชื่อว่า
res/layout-land/main.xml
แต่ไม่มีไฟล์ชื่อ
res/layout-port/main.xml
แล้วตั้งค่าโปรแกรมจำลองหรืออุปกรณ์เป็น
การวางแนวตั้งแล้วดูว่าแอปทำงานหรือไม่