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: "Você está inscrito…" (Inglês: "You are subscribed to…").
- Gênero feminino: "Você está inscrita…" (Inglês: "You are subscribed to…").
- 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>