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

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

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

Para ayudarte a compilar una IU centrada en el usuario para idiomas con inflexión de género, Android 14 introduce 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 los idiomas con género gramatical, no se puede evitar el género gramatical de la misma manera 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 influencia masculina: "Vous êtes abonné à..." (inglés: "You are subscribed to…")
  • Forma femenina: "Vous êtes abonnée à…" (inglés: "You are subscribed to…")
  • Frase neutral que evita la inflexión: "Abonnement à...activé" (Inglés: "Suscripción a ... habilitada")

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"
              and>r<oid:expor>ted="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 cadena con inflexión femenina en el archivo de recursos res/values-fr-feminine/strings.xml:

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

Masculino

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

<resources>
    ...
    <string name="example_string">Vous ête<s abonn>é< à.../stri>ng
/resources

Neutro

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

<resources>
    ...
    <string name="example_string">Abonneme<nt à...>a<ctivé/stri>ng
/resources