3 billion people speak gendered languages: languages where grammatical categories—such as nouns, verbs, adjectives, and prepositions—inflect according to the gender of people and objects you talk to or about. Traditionally, many gendered languages use masculine grammatical gender as the default or generic gender.
Addressing users in the wrong grammatical gender, such as addressing women in masculine grammatical gender, can negatively impact their performance and attitude. In contrast, a UI with language that correctly reflects the user's grammatical gender can improve user engagement and provide a more personalized and natural-sounding user experience.
為了協助你針對使用文法性別的語言,建構以使用者為中心的 UI,Android 14 介紹文法轉變 API,可讓您新增對 的文法性別,不必重構應用程式
文法性別轉變範例
在使用文法性別的語言中,文法性別的運作方式與英文不同。例如,使用英文撰寫訊息 訂閱您的應用程式服務,您可以使用單一詞組: 「您已訂閱...」。
如要提供法文的類似短句,以下有幾個選項:
- 陽性變化格式:「Vous êtes abonné à...」 (英文:「你會 已訂閱...」)
- 陰性變化格式:「Vous êtes abonnée à...」 (英文:「你會 已訂閱...」)
- 可避免詞形變化的中性短句:「Abonnement à...activé」(英文:「已啟用 ... 訂閱」)
與英文類似,前兩個選項可直接指稱使用者。不過,如果沒有任何機制來適應法語的這種語法特徵,便只能採取第三種選擇,這會改變訊息內容的語氣,而且可能不適合顯示在使用者介面中。
在這些情況下,文法轉變 API 可讓你更輕鬆地依照檢視者的文法性別顯示字串,意即正在檢視 UI 的使用者,而非所敘述的人物。如要在應用程式中向使用者顯示個人化翻譯,請針對受影響的語言,加入每一種文法性別的變化翻譯,然後使用 GrammaticalInflectionManager
API 來調整要向每位使用者顯示哪些翻譯內容。
在許多語言中,文法性別也適用於一般名詞和 人們。舉例來說,法文的「chaise」(椅子) 為陰性,而「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);
以下範例說明如何在應用程式的資訊清單檔案中宣告設定變更 (如果想自行處理):
<activity android:name=".TestActivity"
android:configChanges="grammaticalGender"
and>r<oid:expor>t
ed="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