3 billion people speak gendered languages: languages where grammatical categories—such as nouns, verbs, adjectives, and prepositions—inflect according to the gender of people and objects you talk to or about. Traditionally, many gendered languages use masculine grammatical gender as the default or generic gender.
Addressing users in the wrong grammatical gender, such as addressing women in masculine grammatical gender, can negatively impact their performance and attitude. In contrast, a UI with language that correctly reflects the user's grammatical gender can improve user engagement and provide a more personalized and natural-sounding user experience.
Aby ułatwić Ci tworzenie interfejsu użytkownika w językach z rodzajami gramatycznymi, Android 14 wprowadza interfejs API do odmiany przez przypadki, który umożliwia dodanie obsługi rodzaju gramatycznego bez konieczności refaktoryzacji aplikacji.
Przykład odmiany gramatycznej
W językach, w których występuje podział na płeć, nie można obejść gramatycznego rodzaju. Na przykład po angielsku możesz napisać wiadomość informującą użytkownika o tym, że subskrybują usługę w Twojej aplikacji, możesz użyć jednego wyrażenia: „Subskrybujesz...”.
Aby wyświetlić podobne wyrażenie w języku francuskim, możesz użyć kilku opcji:
- Postać z tekstem męskim: „Vous êtes abonné à...” (English: „You are subscribed to...")
- Formuła z inspiracjami żeńskimi: „Vous êtes abonnée à...” (English: „You are subscribed to...")
- Neutralne sformułowanie, które pozwala uniknąć odmiany: „Abonnement à...activé” (Angielski: „Subskrypcja ... włączona”)
Podobnie jak w przypadku języka angielskiego, pierwsze 2 opcje zwracają się bezpośrednio do użytkownika. Pamiętaj jednak: bez żadnego mechanizmu uwzględniania tej funkcji gramatycznej języka francuskiego, może wybrać tylko 3 opcję, która zmienia ton przekazu mogą nie być to, co chcesz widzieć w interfejsie.
W takich przypadkach interfejs Grammatical Inflection API pozwala zmniejszyć nakład pracy
od rodzaju gramatycznej płci odbiorcy, czyli osoby, która
wyświetlanie interfejsu, a nie interfejsu użytkownika. Aby wyświetlać użytkownikom spersonalizowane treści
tłumaczeń w aplikacji, dodaj takie, które będą się wyświetlać
rodzaj gramatycznej języka, którego dotyczy problem, a następnie użyć operatora
GrammaticalInflectionManager
API do określania, które tłumaczenia są wyświetlane
do każdego użytkownika.
W wielu językach rodzaj gramatyczny dotyczy nie tylko ludzi, ale też zwykłych rzeczowników. Na przykład po francusku słowo szezlong (krzesło) jest żeńskie, a oiseau (ptak) jest męskie. W sytuacjach innych niż zwrócenie się do użytkownika może użyć dotychczasowego interfejsu API ICU SelectFormat.
Wdrażanie interfejsu API
Gdy użytkownik określi swoją płeć gramatyczną (np.
w sekcji ustawień aplikacji lub podczas procesu konfiguracji użytkownika), możesz użyć funkcji
metody setRequestedApplicationGrammaticalGender(int)
do przechowywania
w konfiguracji zasobów aplikacji.
Jeśli na przykład chcesz ustawić preferowany rodzaj gramatyczny użytkownika na żeński, poproś go o wybranie preferowanego rodzaju gramatycznego, a potem wywołaj interfejs 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);
Oto przykład deklarowania zmian konfiguracji w pliku manifestu aplikacji, jeśli chcesz je wprowadzać samodzielnie:
<activity android:name=".TestActivity"
android:configChanges="grammaticalGender"
and>r<oid:expor>t
ed="true"
/activity
Jeśli aplikacja musi sprawdzić płeć gramatyczną w bieżącym zasobie
konfiguracji, możesz użyć metody getApplicationGrammaticalGender()
, aby go pobrać:
Kotlin
val gIM = mContext.getSystemService(GrammaticalInflectionManager::class.java) val grammaticalGender = gIM.getApplicationGrammaticalGender()
Java
GrammaticalInflectionManager gIM = mContext.getSystemService(GrammaticalInflectionManager.class); int grammaticalGender = gIM.getApplicationGrammaticalGender();
Dodawanie tłumaczeń w językach z rodzajem gramatycznym
Aby dodać zlokalizowany tekst dla języków ze względu na rodzaj gramatyczny, utwórz plik zasobów alternatywnych i dołącz kwalifikator płci gramatycznej. bezpośrednio po nazwie regionu dla tych języków. Tabela poniżej przedstawia możliwe wartości:
Kwalifikator | Wartość ciągu znaków | Przykład (francuski fr ) |
---|---|---|
Żeński | feminine |
res/values-fr-feminine/strings.xml |
Męski | masculine |
res/values-fr-masculine/strings.xml |
Nijaki | neuter |
res/values-fr-neuter/strings.xml |
W tych plikach zasobów należy uwzględnić tylko ciągi znaków, które obsługują odmiany gramatyczne rodzaju. Wszystkie ciągi tekstowe muszą mieć wartość w pliku zasobu domyślnego, który zawiera inne zlokalizowane ciągi tekstowe. Ten domyślny przekład jest wyświetlany, gdy nie można znaleźć przekładu uwzględniającego płeć.
W przykładzie podanym wcześniej dla języka francuskiego neutralne sformułowanie to wartość ciągu znaków w pliku zasobów domyślnych res/values-fr/strings.xml
. Poniższe fragmenty kodu pokazują formatowanie każdego pliku zasobów
uwzględnij wszystkie odmiany gramatyczne z przykładu w języku francuskim:
Żeński
Umieść łamany przez przypadki żeński ciąg znaków w pliku zasobów res/values-fr-feminine/strings.xml
:
<resources> ... <string name="example_string">Vous êtes< abonné>e< à.../stri>ng /resources
Męski
Uwzględnij ciąg znaków z formą męską w pliku zasobów res/values-fr-masculine/strings.xml
:
<resources> ... <string name="example_string">Vous ête<s abonn>é< à.../stri>ng /resources
Nijaki
Uwzględnij domyślny ciąg znaków w pliku zasobów res/values-fr/strings.xml
:
<resources> ... <string name="example_string">Abonneme<nt à...>a<ctivé/stri>ng /resources