Dùng yếu tố giống trong ngữ pháp để cá nhân hoá giao diện người dùng của ứng dụng

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

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

Để xây dựng giao diện người dùng cho các ngôn ngữ có phân biệt về giống, Android 14 ra mắt API Biến tố ngữ pháp, cho phép bạn hỗ trợ giống trong ngữ pháp mà không cần tái cấu trúc ứng dụng.

Ví dụ về biến tố của giống trong ngữ pháp

Trong các ngôn ngữ có phân biệt về giống, bạn không thể áp dụng ngữ pháp giống như trong tiếng Anh. Ví dụ: trong tiếng Việt, khi thông báo người dùng đã đăng ký thành công dịch vụ của ứng dụng, bạn chỉ cần dùng một câu duy nhất: "Bạn đã đăng ký...".

Để đưa ra một câu tương tự bằng tiếng Pháp, bạn có thể dùng một số cách sau:

  • Mẫu câu với giống đực: "Vous êtes abonné à..." (Tiếng Việt: "Bạn đã đăng ký...")
  • Mẫu câu với giống cái: "Vous êtes abonnée à..." (Tiếng Việt: "Bạn đã đăng ký...")
  • Cách diễn đạt trung lập tránh biến tố: "Abonnement à...activé" (Tiếng Việt: "Dịch vụ ... đã được đăng ký")

Tương tự như tiếng Việt, hai cách diễn đạt đầu tiên giao tiếp trực tiếp với người dùng. Tuy nhiên, nếu không có bất kỳ cách diễn đạt nào phù hợp với đặc trưng này trong ngữ pháp tiếng Pháp, bạn chỉ còn cách diễn đạt trung lập và thay đổi giọng điệu của thông báo, dù thông báo hiển thị trong giao diện người dùng có thể không đúng theo ý bạn.

Trong những trường hợp này, API Biến tố ngữ pháp giúp dễ dàng hiển thị các chuỗi tương ứng với giống trong ngữ pháp của người xem giao diện người dùng, chứ không phải với chủ thể đề cập tới. Để hiển thị các bản dịch được cá nhân hóa cho người dùng trong ứng dụng của bạn, hãy thêm bản dịch với nhiều biến tố tương ứng với giống trong ngữ pháp cho các ngôn ngữ có đặc trưng này, sau đó sử dụng GrammaticalInflectionManager API để điều chỉnh bản dịch tương ứng cho từng người dùng.

Trong nhiều ngôn ngữ, giống trong ngữ pháp cũng áp dụng cho danh từ thông thường không chỉ dùng cho con người. Ví dụ: trong tiếng Pháp, từ chaise (ghế) là giống cái, trong khi oiseau (con chim) là giống đực. Trong trường hợp không dùng để giao tiếp với người dùng, bạn có thể sử dụng API ICU SelectFormat hiện có.

Triển khai API

Sau khi người dùng cho biết giới tính của họ (ví dụ: thông qua mục cài đặt của ứng dụng hoặc quy trình thiết lập người dùng), bạn có thể sử dụng phương thức setRequestedApplicationGrammaticalGender(int) để lưu trữ giá trị trong cấu hình tài nguyên của ứng dụng.

Ví dụ: nếu muốn đặt giống trong ngữ pháp ưu tiên của người dùng là giống cái, bạn sẽ yêu cầu người dùng chọn giống trong ngữ pháp mà họ muốn, sau đó gọi 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);

Dưới đây là ví dụ về cách khai báo thay đổi về cấu hình trong tệp kê khai của ứng dụng nếu bạn muốn tự xử lý các thay đổi đó:

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

Nếu ứng dụng của bạn cần kiểm tra giống ngữ pháp trong cấu hình tài nguyên hiện tại, thì bạn có thể sử dụng phương thức getApplicationGrammaticalGender() để truy xuất như sau:

Kotlin

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

Java

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

Thêm bản dịch cho các ngôn ngữ có giống trong ngữ pháp

Để cung cấp văn bản đã bản địa hoá cho ngôn ngữ có giống trong ngữ pháp, hãy tạo tệp tài nguyên thay thế và thêm bộ hạn định ngữ pháp cho giống ngay sau tên ngôn ngữ cho các ngôn ngữ đó. Bảng sau đây trình bày các giá trị được sử dụng:

Bộ hạn định Giá trị chuỗi Ví dụ (tiếng Pháp fr)
Giống cái feminine res/values-fr-feminine/strings.xml
Giống đực masculine res/values-fr-masculine/strings.xml
Giống trung neuter res/values-fr-neuter/strings.xml

Bạn chỉ nên đưa vào những chuỗi hỗ trợ biến tố giống trong ngữ pháp trong các tệp tài nguyên này. Mọi chuỗi phải gán giá trị trong tệp tài nguyên mặc định chứa các chuỗi đã được bản địa hoá khác. Bản dịch mặc định này xuất hiện bất cứ khi nào bản dịch liên quan đến giới tính không có sẵn.

Trong ví dụ về tiếng Pháp ở phần trên, mẫu câu trung lập sẽ là giá trị của chuỗi trong tệp res/values-fr/strings.xml của tài nguyên mặc định. Các đoạn mã sau đây cho thấy cách mỗi tệp tài nguyên sẽ được định dạng để phù hợp với tất cả các biến thể ngữ pháp trong ví dụ bằng tiếng Pháp:

Giống cái

Bao gồm chuỗi tương ứng với giống cái trong tệp tài nguyên res/values-fr-feminine/strings.xml:

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

Giống đực

Bao gồm chuỗi tương ứng với giống đực trong tệp tài nguyên res/values-fr-masculine/strings.xml:

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

Giống trung

Bao gồm chuỗi mặc định trong tệp tài nguyên res/values-fr/strings.xml:

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