Personalizzare l'interfaccia utente dell'app in base al genere grammaticale

Tre miliardi di persone parlano lingue con genere: lingue in cui le categorie grammaticali, come nomi, verbi, aggettivi e preposizioni, si declinano in base al genere delle persone e degli oggetti di cui parli o a cui ti riferisci. Tradizionalmente, molte lingue con genere grammaticale utilizzano il genere grammaticale maschile come genere predefinito o generico.

Rivolgersi agli utenti con il genere grammaticale sbagliato, ad esempio alle donne con il genere grammaticale maschile, può influire negativamente sul loro rendimento e sul loro atteggiamento. Al contrario, un'interfaccia utente con un linguaggio che riflette correttamente il genere grammaticale dell'utente può migliorare il coinvolgimento dell'utente e offrire un'esperienza utente più personalizzata e dal suono naturale.

Per aiutarti a creare un'interfaccia utente incentrata sugli utenti per le lingue basate sul genere, Android 14 introduce l'API Grammatical Inflection, che consente di aggiungere supporto per genere grammaticale senza eseguire il refactoring dell'app.

Esempio di inflessione per il genere grammaticale

Nelle lingue di genere, il genere grammaticale non può essere elaborato come che può essere eseguito in inglese. Ad esempio, per scrivere un messaggio in inglese dicendo all'utente che sono abbonati al servizio della tua app, puoi usare una sola frase: "Sei iscritto a...".

Per fornire una frase simile in francese, hai a disposizione alcune opzioni:

  • Stile maschile: "Vous êtes abonné à..." (Inglese: "Stai è abbonato a...")
  • Forma con influenze femminili: "Vous êtes abonnée à..." (Inglese: "Stai è abbonato a...")
  • Frase neutra che evita le flessioni: "Abonnement à...activé" (inglese: "Abbonamento a ... attivato")

Analogamente all'inglese, le prime due opzioni si rivolgono direttamente all'utente. Tuttavia, senza alcun meccanismo per adattarsi a questa caratteristica grammaticale del francese, avrà solo la terza opzione, che cambia il tono del messaggio potrebbe non essere quello che vuoi visualizzare nella tua interfaccia utente.

In questi casi, l'API Grammatical Inflection riduce lo sforzo di visualizzare stringhe relative al genere grammaticale dell'utente, ovvero la persona che visualizzano l'interfaccia utente, non di chi si parla. Per mostrare agli utenti informazioni personalizzate traduzioni nella tua app, aggiungi traduzioni adattate a ogni genere grammaticale per le lingue interessate, quindi usa lo API di GrammaticalInflectionManager per regolare le traduzioni da mostrare a ciascun utente.

In molte lingue, il genere grammaticale si applica anche ai nomi normali, oltre che alle persone. Ad esempio, in francese la parola chaise (sedia) è femminile, mentre l'oiseau (uccello) è maschile. Per situazioni diverse dal rivolgersi all'utente, puoi puoi utilizzare l'API ICU SelectFormat esistente.

Implementare l'API

Dopo che l'utente ha indicato il proprio genere grammaticale (ad esempio, tramite una sezione delle impostazioni dell'app o un flusso di lavoro per la configurazione dell'utente), puoi usare il metodo setRequestedApplicationGrammaticalGender(int) per archiviare nella configurazione delle risorse dell'app.

Ad esempio, se vuoi impostare il genere grammaticale preferito per un utente su femminile, chiedi all'utente di selezionare il genere grammaticale che preferisce quindi chiama 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);

Ecco un esempio di come dichiarare le modifiche alla configurazione nell'account file manifest per gestirli autonomamente:

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

Se la tua app deve controllare il genere grammaticale nella risorsa attuale configurazione, puoi utilizzare il metodo getApplicationGrammaticalGender() per recuperarlo:

Kotlin

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

Java

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

Aggiungere traduzioni per le lingue con genere grammaticale

Per fornire testo localizzato per le lingue con genere grammaticale, crea un file di risorse alternative e aggiungi il qualificatore grammaticale di genere. subito dopo il nome delle impostazioni internazionali per quelle lingue. La tabella seguente delinea i valori possibili:

Qualificatore Valore stringa Esempio (francese fr)
Femminile feminine res/values-fr-feminine/strings.xml
Maschile masculine res/values-fr-masculine/strings.xml
Neutro neuter res/values-fr-neuter/strings.xml

Devi includere solo stringhe che supportano le inflessioni grammaticali di genere in questi file di risorse. Tutte le stringhe devono avere un valore nella risorsa predefinita contenente altre stringhe localizzate. Questa traduzione predefinita è vengono mostrati ogni volta che una traduzione con un genere non è disponibile.

Nell'esempio fornito in precedenza per il francese, la frase neutra sarebbe il valore della stringa nelle risorse predefinite res/values-fr/strings.xml . I seguenti snippet di codice mostrano come verrà formattato ogni file di risorse per inserire tutte le varianti grammaticali dell'esempio in francese:

Femminile

Includi la stringa con influenze femminili nel file delle risorse res/values-fr-feminine/strings.xml:

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

Maschile

Includi la stringa con un'inclinazione maschile nel file delle risorse res/values-fr-masculine/strings.xml:

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

Neutro

Includi la stringa predefinita nel file res/values-fr/strings.xml delle risorse:

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