התאמה אישית של ממשק המשתמש של האפליקציה לפי מגדר דקדוקי

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

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

כדי לעזור לך לפתח ממשק משתמש ממוקד-משתמש לשפות לפי מגדר, Android 14 מציגה את Grammatical Inflection API, שמאפשר להוסיף תמיכה דקדוק דקדוקי בלי להגדיר את האפליקציה מחדש.

דוגמה להטיה בהקשר של מגדר דקדוקי

בשפות שיש בהן מגדר, אי אפשר לעקוף את המגדר הדקדוקי באותו אופן כמו באנגלית. לדוגמה, באנגלית, לכתוב הודעה למשתמש שהם מנויים לשירות של האפליקציה שלכם, אפשר להשתמש במשפט אחד: "נרשמת כמנוי ל...".

יש כמה דרכים ליצור ביטוי דומה בצרפתית:

  • צורת פנייה לגברים: "Vous êtes abonné à..." (אנגלית: "אתם נרשמת ל...)
  • צורת פנייה לנקבה: "Vous êtes abonnée à..." (אנגלית: "אתם נרשמת ל...)
  • ניסוח נייטרלי בלי שינוי מודגש: "Abonnement à...activé" ('Subscription to ... enabled')

בדומה לאנגלית, שתי האפשרויות הראשונות מפנות ישירות למשתמש. אבל, לפעמים ללא מנגנון כדי להתאים לתכונה דקדוקית של צרפתית, תהיה רק האפשרות השלישית, שמשנה את סגנון ההודעה הוא לא מה שהייתם רוצים להציג בממשק המשתמש שלכם.

במקרים כאלה, ה-Grammatical Inflection API מפחית את המאמץ להציג מחרוזות ביחס למגדר הדקדוקי של הצופה - כלומר, לצפות בממשק המשתמש, לא על מי מדברים עליו. כדי להציג למשתמשים תרגומים מותאמים אישית באפליקציה, מוסיפים תרגומים שמתאימים לכל מין לשוני בשפות הרלוונטיות, ולאחר מכן משתמשים ב-API של GrammaticalInflectionManager כדי לשנות את התרגומים שיוצגו לכל משתמש.

בשפות רבות, המגדר הדקדוקי חל גם על שמות עצם רגילים, בנוסף לאנשים. לדוגמה, בצרפתית המילה 'כיסאות' היא נקבה, אבל oiseau (ציפור) הוא זכר. במצבים אחרים מלבד פנייה למשתמש, יכול להשתמש ב-API הקיים של ICU SelectFormat.

הטמעת ה-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);

דוגמה להצהרה על שינויי הגדרות באפליקציה קובץ מניפסט אם ברצונך לטפל בהן בעצמך:

<activity android:name=".TestActivity"
              android:configChanges="grammaticalGender"
              and>r<oid:expor>ted="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< à.../stri>ng
/resources

זכר

כוללים את המחרוזת עם ההטיה לזכר בקובץ המשאבים res/values-fr-masculine/strings.xml:

<resources>
    ...
    <string name="example_string">Vous ête<s abonn>é< à.../stri>ng
/resources

ניטרלי

כוללים את מחרוזת ברירת המחדל בקובץ המשאבים res/values-fr/strings.xml:

<resources>
    ...
    <string name="example_string">Abonneme<nt à...>a<ctivé/stri>ng
/resources