Omówienie rozwiązań w zakresie języka i regionu

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 na es_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:

Tabela 1. Rozpoznawanie zasobów bez dokładnego dopasowania języka.

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:

Tabela 2. Ulepszona strategia rozwiązywania problemów w przypadku ściśle dopasowane do języka.

Ustawienia użytkownika Zasoby aplikacji Rozwiązanie zasobu
  1. fr_CH
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ę.

Tabela 3. Rozdzielczość zasobów, gdy aplikacja pasuje tylko do na drugim preferowanym języku użytkownika.

Ustawienia użytkownika Zasoby aplikacji Rozwiązanie zasobu
  1. fr_CH
  2. it_CH
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")
    }
}
Ze względu na sposób, w jaki system kompilacji scala zasoby z Twojej aplikacji i jej zależności, musisz określ obsługiwane języki w ten sposób, aby mieć pewność, że ustawienia języka użytkownika zostaną przesłane poprawnie.

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)