Personalizar a interface do app com gênero gramatical

Três bilhões de pessoas falam idiomas com marcação de gênero: idiomas em que categorias gramaticais, como substantivos, verbos, adjetivos e preposições, mudam de acordo com o gênero das pessoas e os objetos sobre os quais elas falam. Tradicionalmente, vários idiomas com marcação de gênero usam o gênero gramatical masculino como padrão ou genérico.

Referir-se a usuários no gênero gramatical errado, como falar com uma mulher no gênero gramatical masculino, pode afetar negativamente o desempenho e a atitude dela. Por outro lado, uma interface com linguagem que reflete corretamente o gênero gramatical do usuário pode melhorar o engajamento e fornecer uma experiência do usuário mais personalizada e natural.

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>