ผู้คนกว่า 3 พันล้านคนพูดภาษาที่มีเพศ ซึ่งเป็นภาษาที่คำในหมวดหมู่ทางไวยากรณ์ เช่น คำนาม คำกริยา คำคุณศัพท์ และคำบุพบท จะผันตามเพศของบุคคลและวัตถุที่คุณพูดด้วยหรือพูดถึง โดยทั่วไปแล้ว ภาษาที่มีเพศหลายเพศหลายภาษาใช้เพศทางไวยากรณ์เพศชายเป็นเพศเริ่มต้นหรือเพศทั่วไป
การเรียกผู้ใช้ด้วยเพศทางไวยากรณ์ที่ไม่ถูกต้อง เช่น การเรียกผู้หญิงด้วยเพศทางไวยากรณ์ของผู้ชาย อาจส่งผลเสียต่อประสิทธิภาพและทัศนคติของผู้ใช้ ในทางตรงกันข้าม UI ที่มีภาษาที่แสดงเพศตามไวยากรณ์ของผู้ใช้อย่างถูกต้องจะช่วยเพิ่มการมีส่วนร่วมของผู้ใช้ และมอบประสบการณ์การใช้งานที่ปรับให้เหมาะกับผู้ใช้แต่ละคนและฟังดูเป็นธรรมชาติมากขึ้น
Android 14 เปิดตัว Grammatical Inflection API เพื่อช่วยให้คุณสร้าง UI ที่เน้นผู้ใช้สำหรับภาษาที่มีเพศแบบต่างๆ ได้ ซึ่งจะช่วยให้คุณเพิ่มการรองรับเพศทางไวยากรณ์ได้โดยไม่ต้องรีแฟกทอริงแอป
ตัวอย่างการผันสำหรับเพศทางไวยากรณ์
ในภาษาที่มีเพศ เพศทางไวยากรณ์จะไม่สามารถปรับเปลี่ยนได้เหมือนกับภาษาอังกฤษ เช่น เป็นภาษาอังกฤษเพื่อเขียนข้อความบอกผู้ใช้ พวกเขาสมัครใช้บริการของแอปของคุณ คุณสามารถใช้วลีเดียว เช่น "คุณสมัครรับข้อมูลจาก..."
คุณป้อนข้อความที่คล้ายกันในภาษาฝรั่งเศสได้ 2-3 วิธี ดังนี้
- สัญลักษณ์เพศชายที่ผันผวน: "Vous êtes abonné à..." (ภาษาอังกฤษ: "คุณติดตาม...")
- รูปแบบที่ผันคำตามเพศหญิง: "Vous êtes abonnée à..." (ภาษาอังกฤษ: "คุณติดตาม...")
- วลีกลางๆ ที่หลีกเลี่ยงการผันคำ "Abonnement à...activé" (ภาษาอังกฤษ: "การสมัครรับข้อมูลกับ ... เปิดใช้อยู่")
ตัวเลือก 2 รายการแรกจะกล่าวถึงผู้ใช้โดยตรงเช่นเดียวกับภาษาอังกฤษ อย่างไรก็ตาม หากไม่มีกลไกใดๆ ในการรองรับคุณลักษณะทางไวยากรณ์ของภาษาฝรั่งเศส จะมีเพียงตัวเลือกที่สาม คือการเปลี่ยนโทนของข้อความและ อาจไม่ใช่สิ่งที่คุณต้องการแสดงในอินเทอร์เฟซผู้ใช้
ในกรณีเหล่านี้ Grammatical Inflection API จะลดความพยายามในการแสดงสตริงที่เกี่ยวข้องกับเพศทางไวยากรณ์ของผู้ชม ซึ่งก็คือบุคคลที่ดู UI ไม่ใช่บุคคลที่พูดถึง หากต้องการแสดงคำแปลที่ปรับเปลี่ยนตามเพศทางไวยากรณ์สำหรับแต่ละภาษาที่ได้รับผลกระทบในแบบของคุณในแอป ให้เพิ่มคำแปลที่ปรับเปลี่ยนตามเพศทางไวยากรณ์สำหรับแต่ละภาษาที่ได้รับผลกระทบ จากนั้นใช้ GrammaticalInflectionManager
API เพื่อปรับคำแปลที่จะแสดงต่อผู้ใช้แต่ละราย
ในหลายๆ ภาษา เพศทางไวยากรณ์ยังใช้กับคำนามปกตินอกเหนือจากคำนาม แก่ผู้คน เช่น ในภาษาฝรั่งเศส คำว่าเก้าอี้ (เก้าอี้) เป็นคำว่า เพศหญิง ในขณะที่ oiseau (นก) เป็นเพศชาย สำหรับสถานการณ์อื่นที่ไม่ใช่การกล่าวถึงผู้ใช้ คุณสามารถใช้ ICU SelectFormat API ที่มีอยู่
ใช้ API
หลังจากผู้ใช้ระบุเพศทางไวยากรณ์ (เช่น ผ่านส่วนการตั้งค่าของแอปหรือเวิร์กโฟลว์การตั้งค่าผู้ใช้) คุณจะใช้เมธอด setRequestedApplicationGrammaticalGender(int)
เพื่อจัดเก็บค่าในการกําหนดค่าทรัพยากรของแอปได้
เช่น หากคุณต้องการกำหนดเพศทางไวยากรณ์ที่ผู้ใช้ต้องการเป็น เพศหญิง คุณจะขอให้ผู้ใช้เลือกเพศทางไวยากรณ์ที่ตนชอบ แล้วเรียก API ดังนี้
Kotlin
// Set app's grammatical gender to feminine val gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java) gIM.setRequestedApplicationGrammaticalGender( Configuration.GRAMMATICAL_GENDER_FEMININE)
Java
// Set app's grammatical gender to feminine GrammaticalInflectionManager gIM = mContext.getSystemService(GrammaticalInflectionManager.class); gIM.setRequestedApplicationGrammaticalGender( Configuration.GRAMMATICAL_GENDER_FEMININE);
ต่อไปนี้เป็นตัวอย่างวิธีประกาศการเปลี่ยนแปลงการกำหนดค่าในแอป ไฟล์ Manifest หากคุณต้องการจัดการด้วยตนเอง ให้ทำดังนี้
<activity android:name=".TestActivity"
android:configChanges="grammaticalGender"
android:exported="true">
</activity>
หากแอปจำเป็นต้องตรวจสอบเพศทางไวยากรณ์ในแหล่งข้อมูลปัจจุบัน
การกำหนดค่า คุณสามารถใช้เมธอด getApplicationGrammaticalGender()
เพื่อดึงข้อมูล:
Kotlin
val gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java) val grammaticalGender = gIM.getApplicationGrammaticalGender()
Java
GrammaticalInflectionManager gIM = mContext.getSystemService(GrammaticalInflectionManager.class); int grammaticalGender = gIM.getApplicationGrammaticalGender();
เพิ่มคำแปลสำหรับภาษาที่มีเพศทางไวยากรณ์
หากต้องการระบุข้อความที่แปลแล้วสำหรับภาษาที่มีเพศทางไวยากรณ์ ให้สร้างไฟล์ทรัพยากรสำรอง แล้วเพิ่มตัวระบุเพศทางไวยากรณ์ต่อท้ายชื่อภาษาสำหรับภาษาเหล่านั้น ตารางต่อไปนี้แสดงค่าที่เป็นไปได้
ตัวระบุ | ค่าสตริง | ตัวอย่าง (ฝรั่งเศส fr ) |
---|---|---|
เพศหญิง | feminine |
res/values-fr-feminine/strings.xml |
เพศชาย | masculine |
res/values-fr-masculine/strings.xml |
ไม่มีเพศ | neuter |
res/values-fr-neuter/strings.xml |
คุณควรรวมเฉพาะสตริงที่รองรับการผันผวนของเพศทางไวยากรณ์ใน ไฟล์ทรัพยากรเหล่านี้ สตริงทั้งหมดต้องมีค่าในไฟล์ทรัพยากรเริ่มต้นที่มีสตริงที่แปลแล้วอื่นๆ ระบบจะแสดงคำแปลเริ่มต้นนี้ทุกครั้งที่คำแปลที่คำนึงถึงเพศไม่พร้อมใช้งาน
ในตัวอย่างสำหรับภาษาฝรั่งเศสก่อนหน้านี้ วลีกลางๆ จะเป็น
ค่าของสตริงในทรัพยากรเริ่มต้น res/values-fr/strings.xml
ข้อมูลโค้ดต่อไปนี้แสดงการจัดรูปแบบไฟล์ทรัพยากรแต่ละไฟล์เพื่อรองรับรูปแบบไวยากรณ์ทั้งหมดจากตัวอย่างภาษาฝรั่งเศส
เพศหญิง
รวมสตริงที่ผันคำตามเพศหญิงไว้ในไฟล์ทรัพยากร res/values-fr-feminine/strings.xml
<resources> ... <string name="example_string">Vous êtes abonnée à...</string> </resources>
เพศชาย
รวมสตริงที่วัดโดยเพศชายในไฟล์แหล่งข้อมูล res/values-fr-masculine/strings.xml
ดังนี้
<resources> ... <string name="example_string">Vous êtes abonné à...</string> </resources>
ไม่มีเพศ
รวมสตริงเริ่มต้นในไฟล์ทรัพยากรของ res/values-fr/strings.xml
ดังนี้
<resources> ... <string name="example_string">Abonnement à...activé</string> </resources>