Personalizza l'interfaccia utente 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 influiscono in base 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 rivolgersi alle donne in un genere grammaticale maschile, può influenzare negativamente le loro prestazioni e il 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 sull'utente per le lingue di genere, Android 14 introduce l'API Grammatical Inflection, che ti consente di aggiungere il supporto per la grammatica del genere senza refactoring della tua app.

Esempio di flesso per il genere grammaticale

Nelle lingue di genere, il genere grammaticale non può essere elaborato come in inglese. Ad esempio, per scrivere un messaggio in inglese per comunicare all'utente che è abbonato al servizio della tua app, potresti utilizzare una singola frase: "Sei iscritto a...".

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

  • Forma influenzata maschile: "Vous êtes abonné à..." (Italiano: "Sei iscritto a...")
  • Forma femminile: "Vous êtes abonnée à..." (Italiano: "Sei iscritto a...")
  • Formula neutra che evita la connotazione: "Abonnement à...activé" (Inglese: "Abbonamento a ... abilitato")

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

In questi casi, l'API Grammatical Inflection riduce lo sforzo di visualizzazione delle stringhe in base al genere grammaticale dello spettatore, cioè 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 ciascun 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 nomi normali oltre che alle persone. Ad esempio, in francese la parola chaise (sedia) è femminile, mentre oiseau (uccello) è maschile. In situazioni diverse rispetto all'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 su "femminile" il genere grammaticale preferito di un utente, chiedi all'utente di selezionare il genere grammaticale che preferisce e quindi di 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 alla configurazione nel file manifest dell'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 attuale delle risorse, puoi utilizzare il metodo getApplicationGrammaticalGender() per recuperarla:

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 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 illustra 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 di risorse devi includere solo stringhe che supportano le inflessioni 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 incentrata sul 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 verrà formattato ogni file di risorse per contenere tutte le varianti grammaticali dell'esempio in francese:

Femminile

Includi la stringa di tipo femminile 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 influenza 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 delle risorse res/values-fr/strings.xml:

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