使用语法性别对应用界面进行个性化设置

有 30 亿人在使用区分性别的语言,此类语言的语法类别(例如名词、动词、形容词和介词)会根据您交谈所涉及的人或物的性别而变化。传统上,许多区分性别的语言使用阳性语法性别作为默认或通用性别。

以错误的语法性别来称呼用户,例如以阳性语法性别来称呼女性,可能会对她们的表现和态度产生负面影响。相比之下,界面语言如果能正确反映用户的语法性别,就可以提高用户互动度,并提供更个性化、更自然的用户体验。

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

ตัวอย่างการผันคำตามเพศทางไวยากรณ์

ในภาษาที่มีเพศทางไวยากรณ์ จะไม่สามารถแปลงเพศได้ในลักษณะเดียวกับ เป็นภาษาอังกฤษ เช่น เป็นภาษาอังกฤษเพื่อเขียนข้อความบอกผู้ใช้ ว่าพวกเขาสมัครใช้บริการของแอปคุณแล้ว คุณอาจใช้วลีเดียวคือ "คุณสมัครรับข้อมูลจาก..."

คุณป้อนข้อความที่คล้ายกันในภาษาฝรั่งเศสได้ 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>