Mempersonalisasi UI aplikasi dengan gender gramatikal

Tiga miliar orang menggunakan bahasa bergender: bahasa yang kategori gramatikalnya—seperti kata benda, kata kerja, kata sifat, dan preposisi—diterapkan dengan gender orang dan objek yang Anda ajak bicara atau Anda bicarakan. Secara tradisional, banyak bahasa bergender menggunakan gender gramatikal maskulin sebagai gender default atau generik.

Menjangkau pengguna dalam gender gramatikal yang salah, seperti menyapa perempuan dengan gender gramatikal yang maskulin, dapat memberi dampak negatif pada performa dan sikap mereka. Sebaliknya, UI dengan bahasa yang mencerminkan gender gramatikal pengguna dengan benar dapat meningkatkan interaksi pengguna dan memberikan pengalaman pengguna yang lebih personal dan terdengar alami.

Dalam upaya membantu Anda membuat UI yang berorientasi pengguna untuk bahasa-bahasa yang memiliki gender, Android 14 memperkenalkan Grammatical Inflection API yang memungkinkan Anda menambahkan dukungan untuk gender gramatikal tanpa perlu memfaktorkan ulang aplikasi.

Contoh infleksi untuk gender gramatikal

Dalam bahasa yang memiliki gender, gender gramatikal tidak dapat ditangani dengan cara yang sama seperti halnya dalam bahasa Indonesia. Misalnya dalam bahasa Indonesia, untuk menulis pesan yang memberi tahu pengguna bahwa mereka berlangganan layanan aplikasi Anda, Anda dapat menggunakan satu frasa: "Anda berlangganan...".

Sementara itu dalam bahasa Prancis, ada beberapa opsi untuk mengekspresikan frasa yang bermakna serupa:

  • Bentuk infleksi maskulin: "Vous êtes abonné à..." (Bahasa Indonesia: "Anda berlangganan..."
  • Bentuk infleksi feminin: "Vous êtes abonnée à..." (Bahasa Indonesia: "Anda berlangganan..."
  • Frasa netral yang menghindari bentuk infleksi: "Abonnement à...activé" (Bahasa Indonesia: "Berlangganan ... diaktifkan")

Serupa dengan bahasa Indonesia, dua opsi pertama ditujukan langsung kepada pengguna. Namun, tanpa mekanisme untuk memfasilitasi fitur tata bahasa Prancis ini, Anda hanya akan memiliki opsi ketiga, yaitu mengubah nada pesan dan mungkin bukan yang ingin Anda tampilkan di antarmuka pengguna. Google.

Dalam kasus ini, Grammatical Inflection API menurunkan upaya untuk menampilkan string relatif terhadap gender tata bahasa pelihat—yaitu, orang yang melihat UI, bukan orang yang sedang dibicarakan. Untuk menampilkan terjemahan yang telah dipersonalisasi sesuai pengguna di aplikasi Anda, tambahkan terjemahan yang telah mengalami proses infleksi untuk setiap gender tata bahasa untuk bahasa yang terpengaruh, lalu gunakan GrammaticalInflectionManager API untuk menyesuaikan terjemahan mana yang akan ditampilkan kepada setiap pengguna.

Dalam banyak bahasa, gender gramatikal juga berlaku untuk kata benda reguler selain orang. Misalnya, dalam bahasa Prancis, kata chaise (kursi) adalah feminin sedangkan oiseau (burung) adalah maskulin. Untuk situasi selain menangani pengguna, Anda dapat menggunakan ICU SelectFormat API yang ada.

Mengimplementasikan API

Setelah pengguna menunjukkan gender tata bahasa mereka (misalnya, melalui bagian setelan aplikasi atau alur kerja penyiapan pengguna), Anda dapat menggunakan metode setRequestedApplicationGrammaticalGender(int) untuk menyimpan nilai tersebut dalam konfigurasi resource aplikasi Anda.

Misalnya, jika ingin menetapkan gender gramatikal pilihan pengguna ke feminin, Anda akan meminta pengguna untuk memilih gender gramatikal yang diinginkan, lalu memanggil 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);

Berikut adalah contoh cara mendeklarasikan perubahan konfigurasi di file manifes aplikasi jika Anda ingin menanganinya sendiri:

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

Jika aplikasi harus memeriksa gender tata bahasa dalam konfigurasi resource saat ini, Anda dapat menggunakan metode getApplicationGrammaticalGender() untuk mengambilnya:

Kotlin

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

Java

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

Menambahkan terjemahan untuk bahasa yang memiliki gender gramatikal

Guna menyediakan teks yang dilokalkan untuk bahasa dengan gender gramatikal, buat file resource alternatif dan langsung tambahkan penentu gender untuk tata bahasa setelah nama lokalitas untuk bahasa tersebut. Tabel berikut menjelaskan kemungkinan nilai:

Penentu Nilai string Contoh (bahasa Prancis fr)
Feminin feminine res/values-fr-feminine/strings.xml
Maskulin masculine res/values-fr-masculine/strings.xml
Netral neuter res/values-fr-neuter/strings.xml

Anda hanya boleh menyertakan string yang mendukung infleksi gender gramatikal dalam file resource ini. Semua string harus memiliki nilai dalam file resource default yang berisi string lain yang telah dilokalkan. Terjemahan default ini akan ditampilkan setiap kali terjemahan yang ditampilkan berdasarkan gender tidak tersedia.

Dalam contoh yang diberikan untuk bahasa Prancis sebelumnya, frasa netral akan menjadi nilai string dalam file res/values-fr/strings.xml resource default. Cuplikan kode berikut menunjukkan cara memformat file setiap resource untuk memfasilitasi semua variasi gramatikal dari contoh dalam bahasa Prancis:

Feminin

Sertakan string infleksi feminin dalam file resource res/values-fr-feminine/strings.xml:

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

Maskulin

Sertakan string infleksi maskulin dalam file resource res/values-fr-masculine/strings.xml:

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

Netral

Sertakan string default dalam file resource res/values-fr/strings.xml:

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