Personalizza l'UI della tua app con il genere grammaticale

3 miliardi di persone parlano lingue di genere: lingue in cui le categorie grammaticali, come sostantivi, verbi, aggettivi e preposizioni, si adattano al genere delle persone e degli oggetti di cui parli o di cui parli. Tradizionalmente, molte lingue di genere utilizzano il genere grammaticale maschile come genere predefinito o generico.

Rivolgersi agli utenti utilizzando un genere grammaticale errato, ad esempio rivolgendosi alle donne in genere grammaticale maschile, può influire negativamente sul loro rendimento e sul loro atteggiamento. Al contrario, una UI con un linguaggio che riflette correttamente il genere grammaticale dell'utente può migliorare il coinvolgimento dell'utente e fornire un'esperienza utente più personalizzata e naturale.

Per aiutarti a creare un'interfaccia utente incentrata sull'utente per le lingue di genere, Android 14 introduce l'API Grammatical Inflection, che ti consente di aggiungere supporto per il genere grammaticale senza refactoring della tua app.

Esempio di flesso per il genere grammaticale

Nelle lingue di genere, il genere grammaticale non può essere elaborato allo stesso modo dell'inglese. Ad esempio, per scrivere un messaggio in inglese all'utente che è abbonato al servizio dell'app, potresti utilizzare una sola frase: "Hai effettuato l'abbonamento a...".

Per fornire una frase simile in francese, puoi procedere in uno dei seguenti modi:

  • Forma influenzata maschile: "Vous êtes abonné à..." (Inglese: "Sei abbonato a...")
  • Forma influenzata femminile: "Vous êtes abonnée à..." (Inglese: "Sei abbonato a...")
  • Frase neutra che evita la curvatura: "Abonnement à...activé" (inglese: "Subscription to ... enabled")

Analogamente all'inglese, le prime due opzioni si rivolgono direttamente all'utente. Tuttavia, senza alcun meccanismo che supporti questa funzionalità grammaticale del francese, hai solo la terza opzione, che cambia il tono del messaggio e potrebbe non essere quella che vuoi mostrare nell'interfaccia utente.

In questi casi, l'API Grammatical Inflection riduce lo sforzo di visualizzare le stringhe in base al genere grammaticale dello spettatore, ovvero la persona che visualizza l'interfaccia utente, non di chi si parla. Per mostrare agli utenti traduzioni personalizzate nella tua app, aggiungi traduzioni che si adattano a ogni genere grammaticale per le lingue interessate, quindi utilizza l'API GrammaticalInflectionManager per modificare le traduzioni da mostrare a ogni utente.

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

Implementare l'API

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

Ad esempio, se vuoi impostare il genere grammaticale preferito di un utente su femminile, devi chiedere all'utente di selezionare il genere grammaticale che preferisce e poi chiamare 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 di configurazione nel file manifest della tua app se vuoi gestirle autonomamente:

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

Se la tua app deve verificare il genere grammaticale nella configurazione delle risorse attuale, 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 di genere grammaticale subito dopo il nome delle impostazioni internazionali per quelle lingue. La seguente tabella descrive i possibili valori:

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

In questi file delle risorse devi includere solo stringhe che supportano le variazioni grammaticali di genere. Tutte le stringhe devono avere un valore nel file di risorse predefinito che contiene altre stringhe localizzate. Questa traduzione predefinita viene mostrata ogni volta che non è disponibile una traduzione di tipo genere.

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

Femminile

Includi la stringa dall'effetto femminile nel file di risorse res/values-fr-feminine/strings.xml:

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

Maschile

Includi la stringa con influenza maschile nel file di risorse res/values-fr-masculine/strings.xml:

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

Neutro

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

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