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>