Lokalizowanie aplikacji (wyświetlenia)

Pojęcia i implementacja w Jetpack Compose

Android działa na wielu urządzeniach w wielu regionach. Aby Twoja aplikacja mogła docierać do jak największej liczby użytkowników, zawarte w niej treści, czyli tekst, pliki audio, liczby, waluty i obrazy powinny zostać dostosowane do regionów, w których jest używana.

Na tej stronie znajdziesz sprawdzone metody lokalizowania aplikacji na Androida.

Musisz mieć praktyczną wiedzę na temat Kotlina lub języka programowania Java oraz znać sposób wczytywania zasobów Androida, deklarowania elementów interfejsu użytkownika w XML, kwestie związane z programowaniem takie jak cykl życia aktywności, oraz ogólne zasady internacjonalizacji i lokalizacji.

Dobrym rozwiązaniem jest używanie platformy zasobów Androida, aby jak najbardziej oddzielić zlokalizowane aspekty aplikacji od jej podstawowych funkcji aplikacji.

  • Umieść większość lub całą zawartość interfejsu użytkownika aplikacji w plikach zasobów, jak opisano na tej stronie i w artykule Omówienie zasobów aplikacji.
  • Zachowanie interfejsu użytkownika jest natomiast określane przez kod w Kotlinie lub Javie. Jeśli na przykład użytkownicy wprowadzają dane, które trzeba sformatować lub posortować w inny sposób w zależności od ustawień regionalnych, użyj Kotlina lub języka programowania Java, aby programowo obsługiwać te dane. Ta strona nie zawiera informacji o tym, jak lokalizować kod w Kotlinie lub Javie.

Krótki przewodnik po lokalizowaniu ciągów znaków w aplikacji znajdziesz w artykule Obsługa różnych języków i kultur.

Używanie zasobów do lokalizacji

W tej sekcji opisujemy, jak tworzyć zasoby domyślne i alternatywne. Wyjaśniamy też, jak przypisywać zasobom priorytet i jak odwoływać się do nich w kodzie.

Tworzenie zasobów domyślnych

Umieść domyślny tekst aplikacji w pliku res/values/strings.xml. W przypadku tych ciągów znaków użyj języka domyślnego, czyli języka, którym według Ciebie posługuje się większość użytkowników aplikacji.

Domyślny zestaw zasobów obejmuje też wszystkie domyślne elementy rysunkowe i układy oraz może zawierać inne typy zasobów, np. animacje. Te zasoby znajdują się w tych katalogach:

  • res/drawable/: wymagany katalog zawierający co najmniej 1 plik graficzny, czyli ikonę aplikacji w Google Play.
  • res/layout/: wymagany katalog zawierający plik XML, który definiuje układ domyślny.
  • res/anim/: wymagany, jeśli masz foldery res/anim-<qualifiers>.
  • res/xml/: wymagany, jeśli masz foldery res/xml-<qualifiers>.
  • res/raw/: wymagany, jeśli masz foldery res/raw-<qualifiers>.

Wskazówka: w kodzie sprawdź każde odwołanie do zasobu Androida. Upewnij się, że dla każdego z nich jest zdefiniowany zasób domyślny. Sprawdź też, czy domyślny plik ciągów znaków jest kompletny: zlokalizowany plik ciągów znaków może zawierać podzbiór ciągów znaków, ale domyślny plik ciągów znaków musi zawierać wszystkie.

Wskazówki dotyczące lokalizacji

Podczas lokalizowania aplikacji postępuj zgodnie z tymi wskazówkami.

Projektowanie elastycznego układu

Jeśli musisz zmienić układ, aby dopasować go do określonego języka, możesz utworzyć alternatywny układ dla tego języka, np. res/layout-de/main.xml dla układu w języku niemieckim. Może to jednak utrudnić utrzymanie aplikacji. Lepiej utworzyć jeden, bardziej elastyczny układ.

Inna typowa sytuacja to język, który wymaga innego układu. Może się na przykład zdarzyć, że formularz kontaktowy zawiera 2 pola na imię i nazwisko, gdy aplikacja działa w języku japońskim, ale 3 pola, gdy działa w innym języku. Możesz to rozwiązać na 2 sposoby:

  • Utwórz jeden układ z polem, które możesz programowo włączać lub wyłączać w zależności od języka.
  • W układzie głównym umieść inny układ, który zawiera zmienne pole. Drugi układ może mieć różne konfiguracje dla różnych języków.

Ręczne wyszukiwanie ustawień regionalnych za pomocą obiektu Context Androida

Ustawienia regionalne możesz wyszukać za pomocą obiektu Context który udostępnia Android, jak pokazano w tym przykładzie:

Kotlin

val primaryLocale: Locale = context.resources.configuration.locales[0]
val locale: String = primaryLocale.displayName

Java

Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0);
String locale = primaryLocale.getDisplayName();