Personaliza la IU de tu app con un género gramatical

Tres mil millones de personas hablan idiomas con género, es decir, idiomas en los que las categorías gramaticales, como sustantivos, verbos, adjetivos y preposiciones, inflexionan según el género de las personas y los objetos con las que te comunicas o sobre los que hablas. Tradicionalmente, muchos idiomas con género usan el género gramatical masculino como el género predeterminado o genérico.

Dirigirse a usuarios con un género gramatical incorrecto, por ejemplo, a mujeres con género gramatical masculino, puede tener un impacto negativo en su rendimiento y actitud. Por el contrario, una IU con un lenguaje que refleja, de forma correcta, el género gramatical del usuario puede mejorar su participación y proporcionar una experiencia más personalizada y más natural.

A fin de ayudarte a compilar una IU centrada en el usuario para idiomas con género, Android 14 presenta la API de Grammatical Inflection, que te permite agregar compatibilidad con el género gramatical sin refactorizar la app.

Ejemplo de flexión para el género gramatical

En idiomas con género, no es posible trabajar en género gramatical del mismo modo que en inglés. Por ejemplo, en inglés, para escribir un mensaje que diga al usuario que está suscrito al servicio de tu app, puedes usar una sola frase: "You are subscribed to…".

Para proporcionar una frase similar en francés, hay varias opciones:

  • Forma con inflexión masculina: "Vous êtes abonné à..." (inglés: "You are subscribed to…")
  • Forma con influencia femenina: "Vous êtes abonnée à..." (inglés: "You are subscribed to…")
  • Una frase neutral que evita la inflexión: "Abonnement à...activé" (inglés: "Subscription to ... enabled")

De manera similar a lo que ocurre en inglés, las dos primeras opciones se dirigen directamente al usuario. Sin embargo, sin ningún mecanismo para adaptarse a esta característica gramatical del francés, solo tendrías la tercera opción, que cambia el tono del mensaje y quizás no sea lo que quieres mostrar en tu interfaz de usuario.

En esos casos, la API de Grammatical Inflection disminuye el esfuerzo de mostrar cadenas relacionadas con el género gramatical del usuario, es decir, la persona que ve la IU, no la persona de la que se habla. Para mostrar a los usuarios traducciones personalizadas en tu app, agrega traducciones adaptadas a cada género gramatical en los idiomas afectados y, luego, usa la API de GrammaticalInflectionManager para ajustar qué traducciones se muestran a cada usuario.

En muchos idiomas, el género gramatical también se aplica a los sustantivos comunes, además de las personas. Por ejemplo, en francés la palabra chaise (silla) es femenina, mientras que oiseau (pájaro) es masculina. En casos en los que no te diriges al usuario, puedes usar la API de ICU SelectFormat existente.

Cómo implementar la API

Después de que el usuario indique su género gramatical (por ejemplo, a través de la sección de configuración de tu app o un flujo de trabajo de configuración del usuario), puedes usar el método setRequestedApplicationGrammaticalGender(int) para almacenar el valor en la configuración de recursos de tu app.

Por ejemplo, si quieres establecer en femenino el género gramatical que prefiere un usuario, le pedirás que seleccione qué género gramatical prefiere y, luego, llamarás a la 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);

A continuación, se muestra un ejemplo de cómo declarar los cambios de configuración en el archivo de manifiesto de tu app si deseas controlarlos tú:

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

Si tu app necesita verificar el género gramatical en la configuración actual de los recursos, puedes usar el método getApplicationGrammaticalGender() para recuperarlo:

Kotlin

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

Java

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

Cómo agregar traducciones de idiomas con género gramatical

Si quieres proporcionar texto localizado para idiomas con género gramatical, crea un archivo de recursos alternativos y agrega el calificador de género gramatical inmediatamente después del nombre de configuración regional de esos idiomas. En la siguiente tabla, se describen los valores posibles:

Calificador Valor de cadena Ejemplo (francés fr)
Femenino feminine res/values-fr-feminine/strings.xml
Masculino masculine res/values-fr-masculine/strings.xml
Neutro neuter res/values-fr-neuter/strings.xml

Solo debes incluir cadenas que admitan inflexiones de género gramatical en estos archivos de recursos. Todas las cadenas deben tener un valor en el archivo de recursos predeterminados que contiene otras cadenas localizadas. Esta traducción predeterminada se muestra cuando no hay disponible una traducción en función del género.

En el ejemplo anterior para el francés, la expresión neutral sería el valor de la cadena del archivo de recursos predeterminados res/values-fr/strings.xml. En los siguientes fragmentos de código, se muestra cómo se formatearía cada archivo de recursos para adaptarse a todas las variantes gramaticales del ejemplo en francés:

Femenino

Incluye la string con influencia femenina en el archivo de recursos res/values-fr-feminine/strings.xml:

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

Masculino

Incluye la string con inflexión masculina en el archivo de recursos res/values-fr-masculine/strings.xml:

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

Neutro

Incluye la cadena predeterminada del archivo de recursos res/values-fr/strings.xml:

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