Począwszy od Androida 7.0 (poziom interfejsu API 24): Android zapewnia lepszą obsługę użytkowników wielojęzycznych, co daje im możliwość wyboru różnych języków w ustawieniach. Android, zapewnia taką możliwość, znacznie zwiększając liczbę obsługiwanych języków. i zmieniania sposobu korzystania z zasobów przez system.
W tym dokumencie na początku objaśniamy strategię rozpoznawania zasobów Androida w wersji starszej niż 7.0 (poziom interfejsu API 24). Następnie opisuje czyli ulepszoną strategię obsługu zasobów w Androidzie 7.0. Wyjaśniamy też, jak korzystać Większa liczba języków, aby obsłużyć większą liczbę użytkowników wielojęzycznych.
Wyzwania w rozwiązywaniu problemów z zasobami językowymi
Przed Androidem 7.0 system nie zawsze działał poprawnie do języka aplikacji i systemu.
Załóżmy na przykład, że masz następującą sytuację:
- Domyślnym językiem Twojej aplikacji jest
en_US
(angielski – USA) oraz Hiszpańskie ciągi tekstowe przetłumaczone naes_ES
plików zasobów. - Ustawienie urządzenia to
es_MX
Jeśli kod w Javie odwołuje się do ciągów znaków, system zostanie wczytany
ciągi tekstowe z domyślnego pliku zasobów (en_US
), nawet jeśli aplikacja ma
Hiszpańskie materiały zlokalizowane pod es_ES
. Dzieje się tak, ponieważ gdy system
nie może znaleźć dopasowania ścisłego, nadal szuka zasobów, usuwając
kod kraju spoza regionu. Jeśli nie zostaną znalezione żadne pasujące wyniki, system
z powrotem do wartości domyślnej, czyli en_US
.
System ustawi też domyślny język en_US
, jeśli użytkownik wybierze język, w którym
w ogóle nie obsługiwała (np. francuskiego). Na przykład:
Ustawienia użytkownika | Zasoby aplikacji | Rozwiązanie zasobu |
---|---|---|
fr_CH |
domyślnie (en) de_DE es_ES fr_fr it_IT |
Wypróbuj fr_CH => Niepowodzenie Spróbuj pl => Niepowodzenie Użyj wartości domyślnej (en) |
W tym przykładzie system wyświetla ciągi tekstowe w języku angielskim bez czy użytkownik rozumie język angielski. Takie zachowanie jest dość powszechne dzisiaj.
Ulepszenia strategii rozwiązywania problemów z zasobami
Android 7.0 (poziom interfejsu API 24) zapewnia bardziej niezawodne rozpoznawanie zasobów
automatycznie znajduje lepsze kreacje zastępcze.
Aby jednak przyspieszyć rozdzielczość
łatwość konserwacji, należy przechowywać zasoby w najpowszechniejszym dialekcie nadrzędnym.
Na przykład, jeśli przechowujesz zasoby hiszpańskie
w katalogu values-es-rUS
przenieś je do katalogu values-b+es+419
,
który zawiera język hiszpański latynoamerykański.
Podobnie, jeśli w
katalog o nazwie values-en-rGB
, zmień nazwę
katalogu do values-b+en+001
(International
angielskim), ponieważ najczęściej
element nadrzędny dla ciągów znaków en-GB
to en-001
.
Poniższe przykłady wyjaśniają, dlaczego te praktyki poprawiają skuteczność
niezawodność rozpoznawania zasobów.
Przykłady rozstrzygania zasobów
W przypadku wersji Androida wyższych niż 7.0 przypadek opisany w artykule W tabeli 1 wygląda to inaczej:
Ustawienia użytkownika | Zasoby aplikacji | Rozwiązanie zasobu |
---|---|---|
|
domyślnie (en) de_DE es_ES fr_fr it_IT |
Wypróbuj fr_CH => Niepowodzenie Spróbuj pl => Niepowodzenie Wypróbuj dzieci z fr => fr_fr Użyj fr_FR |
Teraz użytkownik otrzymuje zasoby w języku francuskim, a nie po angielsku. Ten przykład pokazuje również
dlaczego warto przechowywać ciągi francuskie w językach francuskich w językach: fr
, a nie fr_FR
na Androida w wersji 7.0 lub nowszej. Działanie to
aby dopasować do najbliższego dialektu nadrzędnego,
co sprawia, że rozwiązanie jest szybsze i bardziej przewidywalne.
Poza ulepszoną logiką rozdzielczości Android oferuje teraz język użytkownika. Wróćmy do przykładu podanego wyżej z językiem włoskim. określony jako dodatkowy język użytkownika, ale bez obsługi języka francuskiego przez aplikację.
Ustawienia użytkownika | Zasoby aplikacji | Rozwiązanie zasobu |
---|---|---|
|
domyślnie (en) de_DE es_ES it_IT |
Wypróbuj fr_CH => Niepowodzenie Spróbuj pl => Niepowodzenie Wypróbuj dzieci z fr => Niepowodzenie Wypróbuj_CH => Niepowodzenie Wypróbuj => Niepowodzenie Wypróbuj ją dla dzieci => it_IT Wykorzystanie_IT |
Użytkownik nadal rozumie język, który rozumie, mimo że aplikacja nie obsługuje tego języka. tylko w języku francuskim.
Projektowanie aplikacji pod kątem obsługi dodatkowych języków
Android udostępnia narzędzia, które ułatwiają lokalizację treści aplikacji i angażują użytkowników preferowanych języków. Zalecamy korzystanie z tych technik do konfigurowania aplikacji, dzięki czemu będzie mogła: uwzględniać różne języki i konwencje formatowania w skalowalny sposób.
Określ języki obsługiwane przez aplikację
Aby mieć pewność, że języki są rozpoznawane prawidłowo, określ je w polu
resConfigs
w pliku build.gradle
na poziomie modułu.
Poniższy przykładowy kod pokazuje, jak za pomocą resConfigs
wskazać obsługiwane języki.
W tym przykładzie aplikacja obsługuje języki angielski i hiszpański.
Odlotowe
android { defaultConfig { ... resConfigs "en", "es" } }
Kotlin
android { defaultConfig { ... resConfigs("en", "es") } }
Interfejs API LocaleList
Począwszy od Androida 7.0 (poziom interfejsu API 24), Android udostępnia
Interfejs API LocaleList.getDefault()
który pozwala aplikacjom bezpośrednio na zapytanie o listę języków zdefiniowanych przez użytkownika. Ten interfejs API
pozwala tworzyć bardziej zaawansowane
zachowanie aplikacji i lepiej zoptymalizowane wyświetlanie treści. Na przykład wyszukiwarka
mogą wyświetlać wyniki w wielu językach w zależności od ustawień użytkownika. Przeglądarki
uniknąć proponowania tłumaczenia stron w języku, który już zna,
i aplikacje do obsługi klawiatury mogą automatycznie włączać wszystkie odpowiednie układy.
Formatowanie
Do Androida 6.0 (poziom interfejsu API 23) Android obsługiwał tylko jeden lub dwa języki dla wielu popularnych języków (en, es, ar, fr, ru). Każdy język miał tylko kilka wariantów, aplikacje mogą zapisywać niektóre liczby i daty jako ciągi zakodowane na stałe w plikach zasobów. Rozszerzony zestaw obsługiwanych funkcji Androida języków, mogą być znaczne różnice w formatach dat, godzin, walut itp. informacji nawet w jednym regionie. Kodowanie na stałe w formatach co jest dezorientujące dla użytkowników. Podczas programowania na Androida 7.0 lub nowszego pamiętaj, aby użyć elementów formatujących zamiast zapisanych na stałe liczb i ciągów daty.
Na przykład Android 7.0 i nowsze wersje obsługują 27 języków arabskich. Te języki mogą współdzielić większość zasobów, ale niektórzy wolą cyfry ASCII, podczas gdy inni wolą cyfry natywne. Przykład: gdy chcesz utworzyć zdanie ze zmienną cyfrową, np. „Wybierz 4-cyfrowy kod PIN”, użyj narzędzi do formatowania zgodnie z poniższym opisem:
format(locale, "Choose a %d-digit PIN", 4)