3 miliardy ludzi mówi językami z płcią: językami, w których kategorie gramatyczne (np. rzeczowniki, czasowniki, przymiotniki i przyimki) odmieniają się w zależności od płci osób i rzeczy, do których się zwracamy lub o których mówimy. Tradycyjnie wiele języków z płcią gramatyczną używa męskiej formy gramatycznej jako domyślnej lub uniwersalnej.
Zwracanie się do użytkowników w niewłaściwym rodzaju gramatycznym, np. do kobiet w męskim rodzaju gramatycznym, może negatywne wpłynąć na ich wyniki i postawę. Z kolei interfejs z językiem, który poprawnie odzwierciedla płeć gramatyczną użytkownika, może zwiększyć zaangażowanie użytkowników i zapewnić bardziej spersonalizowane i naturalne wrażenia.
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"
android:exported="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 à...</string> </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 êtes abonné à...</string> </resources>
Nijaki
Uwzględnij domyślny ciąg znaków w pliku zasobów res/values-fr/strings.xml
:
<resources> ... <string name="example_string">Abonnement à...activé</string> </resources>