Personalizar a interface do app com gênero gramatical

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

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

Para ajudar a criar uma interface focada no usuário para idiomas com flexão de gênero, o Android 14 apresenta a API Grammatical Inflection, que permite adicionar suporte aos gêneros gramaticais sem refatorar o app.

Exemplo de flexão de gênero gramatical

Não podemos usar as mesmas soluções do inglês nos idiomas com gêneros gramaticais. Por exemplo, em inglês, para escrever uma mensagem informando ao usuário que ele está inscrito no serviço do app, usamos uma única frase: "You are subscribed to…" que se aplica a todos os gêneros.

Para uma frase semelhante em português, há algumas opções:

  • Gênero masculino: "Vous êtes abonné à..." (Inglês: "Você está inscrito em...")
  • Gênero feminino: "Vous êtes abonnée à..." (Inglês: "Você está inscrito em...")
  • Frase neutra que evita flexão: "Inscrição em… ativa" (Inglês: "Subscription to… enabled").

Assim como no inglês, as duas primeiras opções falam com o usuário diretamente. No entanto, sem um mecanismo para acomodar esse recurso gramatical do português, você teria apenas a terceira opção, que muda o tom da mensagem e pode não ser o que você quer mostrar na interface do usuário.

Nesses casos, a API Grammatical Inflection reduz o esforço necessário para mostrar strings relativas ao gênero gramatical da pessoa que está visualizando a interface, e não de quem está falando. Para mostrar traduções personalizadas no seu app, adicione traduções flexionadas para cada gênero gramatical nos idiomas afetados e use a API GrammaticalInflectionManager para definir quais traduções são mostradas para cada usuário.

Em muitos idiomas, o gênero gramatical também se aplica a substantivos. Por exemplo, em português, a palavra "cadeira" é feminina, enquanto "pássaro" é masculina. Para outras situações além de falar com o usuário, use a API ICU SelectFormat.

Implementar a API

Depois que o usuário indicar o próprio gênero gramatical, por exemplo, em uma seção de configurações do app ou do usuário, será possível usar o método setRequestedApplicationGrammaticalGender(int) para armazenar o valor na configuração dos recursos do app.

Se você quiser definir o gênero gramatical preferido de um usuário como feminino, pergunte a preferência da pessoa e chame a 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);

Confira o exemplo abaixo sobre como declarar mudanças de configuração no arquivo de manifesto do app caso queira fazer o processamento por conta própria:

<activity android:name=".TestActivity"
              android:configChanges="grammaticalGender"
              android:exported="true">
</activity>

Se o app precisar verificar o gênero gramatical na configuração atual do recurso, use o método getApplicationGrammaticalGender() para extraí-lo:

Kotlin

val gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java)
val grammaticalGender = gIM.getApplicationGrammaticalGender()

Java

GrammaticalInflectionManager gIM =
    mContext.getSystemService(GrammaticalInflectionManager.class);
int grammaticalGender = gIM.getApplicationGrammaticalGender();

Adicionar traduções para idiomas com gênero gramatical

Para fornecer texto localizado em idiomas com flexão de gênero, crie um arquivo de recursos alternativo e anexe o qualificador de gênero gramatical logo após o nome da localidade desses idiomas. A tabela abaixo descreve os valores possíveis:

Qualificador Valor de string Exemplo (francês fr)
Feminino feminine res/values-fr-feminine/strings.xml
Masculino masculine res/values-fr-masculine/strings.xml
Neutro neuter res/values-fr-neuter/strings.xml

Inclua somente strings com suporte para flexões de gênero gramatical nesses arquivos de recursos. Todas as strings precisam ter um valor no arquivo de recursos padrão que contenha outras strings localizadas. Essa tradução padrão é mostrada quando as variações de gênero não estiverem disponíveis.

No exemplo anterior do português, a frase neutra seria o valor da string no arquivo de recursos padrão res/values-fr/strings.xml. Os snippets de código abaixo mostram como cada arquivo de recurso seria formatado para acomodar todas as variações gramaticais do exemplo em francês:

Feminino

Inclua a string de gênero feminino no arquivo de recursos res/values-fr-feminine/strings.xml:

<resources>
    ...
    <string name="example_string">Vous êtes abonnée à...</string>
</resources>

Masculino

Inclua a string de gênero masculino no arquivo de recursos res/values-fr-masculine/strings.xml:

<resources>
    ...
    <string name="example_string">Vous êtes abonné à...</string>
</resources>

Neutro

Inclua a string de gênero neutro no arquivo de recursos res/values-fr/strings.xml:

<resources>
    ...
    <string name="example_string">Abonnement à...activé</string>
</resources>