Có đến 3 tỷ người sử dụng ngôn ngữ có phân biệt giống ngữ pháp: ngôn ngữ mà các danh mục ngữ pháp (chẳng hạn như danh từ, động từ, tính từ và giới từ) sẽ phản ánh theo giống của người và đối tượng mà bạn nói đến hoặc nói về. Theo truyền thống, nhiều ngôn ngữ có phân biệt giống ngữ pháp sử dụng giống đực làm giống mặc định hoặc chung.
Việc xưng hô sai ngữ pháp với người dùng, chẳng hạn như xưng hô với phụ nữ theo ngữ pháp giống đực, có thể ảnh hưởng tiêu cực đến hiệu suất và thái độ của họ. Ngược lại, giao diện người dùng có ngôn ngữ phản ánh chính xác giống ngữ pháp của người dùng có thể cải thiện mức độ tương tác, cũng như mang lại trải nghiệm tự nhiên và phù hợp hơn cho người dùng.
Để 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>