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