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

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

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

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

Esempio di inflessione per il genere grammaticale

Nelle lingue con genere, non è possibile aggirare il genere grammaticale come avviene in inglese. Ad esempio, in inglese, per scrivere un messaggio che comunica all'utente che ha effettuato l'iscrizione al servizio della tua app, puoi utilizzare una singola frase: "Hai effettuato l'iscrizione a…".

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

  • Forma declinata al maschile: "Vous êtes abonné à…" (Inglese: "Stai è abbonato a...")
  • Forma con inclinazione femminile: "Vous êtes abonnée à..." (Inglese: "Stai è abbonato a...")
  • Formulazione neutra che evita l'inflessione: "Abonnement à…activé" (in 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 semplifica la visualizzazione delle stringhe relative al genere grammaticale dello spettatore, ovvero la persona che visualizza l'interfaccia utente, non la persona di cui si parla. Per mostrare agli utenti traduzioni personalizzate nella tua app, aggiungi traduzioni declinate per ogni genere grammaticale per le lingue interessate e poi utilizza l'API GrammaticalInflectionManager per modificare le traduzioni mostrate a ciascun utente.

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

Implementa 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 il testo localizzato per le lingue con genere grammaticale, crea un file di risorse alternative e aggiungi il qualificatore del genere grammaticale subito dopo il nome della locale per queste 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 nel file della risorsa predefinita che contiene altre stringhe localizzate. Questa traduzione predefinita è vengono mostrati ogni volta che una traduzione con un genere non è disponibile.

Nell'esempio fornito per il francese sopra, la formulazione 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 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 delle risorse res/values-fr/strings.xml:

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