Personnaliser l'UI de votre application avec un genre grammatical

3 milliards de personnes parlent des langues genrées : des langues dont les catégories grammaticales, telles que les noms, verbes, adjectifs et prépositions, s'accordent en fonction du genre des personnes et des objets auxquels on s'adresse ou dont on parle. Traditionnellement, de nombreuses langues genrées utilisent le genre grammatical masculin comme genre par défaut ou générique.

S'adresser à une personne en utilisant le mauvais genre grammatical, par exemple s'adresser à une femme en utilisant le genre masculin, peut avoir un impact négatif sur son comportement et son attitude. En revanche, une interface utilisateur dont le langage reflète correctement le genre grammatical de l'utilisateur ou de l'utilisatrice peut améliorer l'engagement et fournir une expérience utilisateur plus personnalisée et naturelle.

Pour vous aider à localiser une UI axée sur l'utilisateur dans une langue genrée, Android 14 introduit l'API Grammatical Inflection, qui permet d'ajouter une prise en charge du genre grammatical sans refactoriser votre appli.

Exemple de flexion pour le genre grammatical

Dans les langues genrées, le genre grammatical ne peut pas être contourné comme en anglais. Par exemple, pour indiquer à l'utilisateur qu'il est abonné au service de votre appli, vos messages peuvent employer une phrase unique du type "You are subscribed to…".

Pour proposer une expression similaire en français, plusieurs options s'offrent à vous :

  • Flexion au masculin : "Vous êtes abonné à…" (équivalent de l'anglais "You are subscribed to…").
  • Flexion au féminin : "Vous êtes abonnée à…" (équivalent de l'anglais "You are subscribed to…").
  • Formule neutre sans flexion : "Abonnement à... activé" (équivalent de l'anglais "Subscription to … enabled").

Comme pour l'anglais, les deux premières options s'adressent directement à l'utilisateur. Cependant, sans mécanisme permettant d'intégrer cette aspect grammatical du français, seule la troisième option serait applicable. Hors, elle modifie le ton du message et ne correspond peut-être pas à ce que vous souhaitez afficher dans votre interface utilisateur.

Dans ce cas, l'API Grammatical Inflection facilite l'affichage de chaînes en fonction du genre grammatical du destinataire (c'est-à-dire, de la personne qui consulte l'UI et non du sujet évoqué). Pour proposer aux utilisateurs des traductions personnalisées dans votre appli, ajoutez les traductions correspondant à chaque genre grammatical pour les langues concernées, puis utilisez l'API GrammaticalInflectionManager afin que les traductions affichées tiennent compte du genre de l'utilisateur.

Dans de nombreuses langues, le genre grammatical s'applique également aux noms communs, en plus des individus. Par exemple, en français, "chaise" est féminin, tandis que "oiseau" est masculin (alors qu'en anglais, "chair" et "bird" sont neutres). Dans les situations où vous ne vous adressez pas à l'utilisateur, vous pouvez utiliser l'API ICU SelectFormat existante.

Implémenter l'API

Une fois que l'utilisateur a indiqué son genre grammatical (par exemple, dans les paramètres de votre appli ou via un workflow de prise en main), vous pouvez utiliser la méthode setRequestedApplicationGrammaticalGender(int) pour stocker la valeur dans la configuration des ressources de votre appli.

Par exemple, si vous souhaitez définir la préférence d'un utilisateur pour le genre féminin, vous devez demander à l'utilisateur de sélectionner ce genre grammatical, puis appeler l'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);

Voici un exemple de déclaration de modifications de la configuration dans le fichier manifeste de votre appli, si vous souhaitez les gérer vous-même :

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

Si votre appli doit vérifier le genre grammatical dans la configuration actuelle des ressources, vous pouvez la récupérer à l'aide de la méthode getApplicationGrammaticalGender() :

Kotlin

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

Java

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

Ajouter des traductions pour les langues avec genre grammatical

Pour fournir du texte localisé pour les langues genrées, créez un fichier de ressources alternatives et ajoutez le qualificatif de genre grammatical immédiatement après l'indicatif des langues concernées. Le tableau suivant présente les valeurs possibles :

Qualificatif Valeur de chaîne Exemple (français fr)
Féminin feminine res/values-fr-feminine/strings.xml
Masculin masculine res/values-fr-masculine/strings.xml
Neutre neuter res/values-fr-neuter/strings.xml

Vous ne devez inclure dans ces fichiers de ressources que des chaînes compatibles avec la flexion de genre grammatical. Toutes les chaînes doivent avoir une valeur dans le fichier de ressources par défaut qui contient d'autres chaînes localisées. Cette traduction par défaut s'affiche lorsqu'aucune traduction genrée n'est disponible.

Dans l'exemple fourni en français précédemment, la formulation neutre correspond à la valeur de la chaîne dans le fichier de ressources res/values-fr/strings.xml par défaut. Les extraits de code suivants montrent comment chaque fichier de ressources serait mis en forme pour tenir compte de toutes les variantes grammaticales de l'exemple en français :

Féminin

Incluez la chaîne au féminin dans le fichier de ressources res/values-fr-feminine/strings.xml :

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

Masculin

Incluez la chaîne au masculin dans le fichier de ressources res/values-fr-masculine/strings.xml :

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

Neutre

Incluez la chaîne par défaut dans le fichier de ressources res/values-fr/strings.xml :

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