使用文法性別自訂應用程式的使用者介面

30 億人使用性別化語言:即名詞、動詞、形容詞和介系詞會隨著交談或談論對象或目標的性別,而有不同變化形式的文法類別語言。一般來說,許多性別化語言都會使用陽性文法性別做為預設或通用性別。

若以錯誤的文法性別稱呼使用者,例如:以陽性文法性別稱呼女性,可能會對其表現及態度產生負面影響。相較之下,如果使用者介面的用語正確反映了使用者的文法性別,便可提高使用者參與度,同時提供更個人化且更自然親切的使用者體驗。

為了協助你針對使用文法性別的語言,建構以使用者為中心的 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"
              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>