Lekcja. 4.1. Obsługa różnych języków

> Dodaj do ulubionych

Dobrym zwyczajem jest wydobycie zasobów łańcuchowych interfejsu z kodu aplikacji i przechowywanie ich w pliku zewnętrznym. W Androidzie zadanie to ułatwia nam dostępny w każdym projekcie katalog zasobów.

Jeśli utworzyłeś swój projekt przy pomocy narzędzi Android SDK (patrz Tworzenie projektu w Androidzie), w górnej części drzewa projektu został utworzony katalog res/. Znajdziesz w nim podkatalogi dla różnych typów zasobów, a także kilka domyślnych plików, np. res/values/strings.xml, w którym przechowywane są wartości łańcuchowe.

Tworzenie katalogów lokalnych i plików łańcuchów

Aby aplikacja obsługiwała kilka języków, w katalogu res/ utwórz dodatkowe podkatalogi values. Nazwa każdego podkatalogu powinna być zakończona łącznikiem i kodem ISO odpowiedniego kraju. Przykładowo katalog values-es/ zawiera podstawowe zasoby dla ustawień regionalnych oznaczonych kodem es. W czasie wykonywania aplikacji system załaduje odpowiednie zasoby, zgodnie z ustawieniami regionalnymi wybranymi na danym urządzeniu.

Po dokonaniu wyboru języków jakie chcesz obsługiwać, utwórz podkatalogi zasobów, a wewnątrz nich pliki przechowujące zasoby łańcuchowe. Przykład:

MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-pl/
           strings.xml

W odpowiednich plikach zapisz wartości łańcuchowe dla poszczególnych ustawień regionalnych.

W czasie wykonywania Android skorzysta z odpowiednich zasobów łańcuchowych dla bieżących ustawień regionalnych na urządzeniu użytkownika.

Oto przykłady zasobów łańcuchowych dla różnych języków.

Język angielski (domyślne ustawienia regionalne) — /values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">My Application</string>
    <string name="hello_world">Hello World!</string>
</resources>

Język hiszpański (/values-es/strings.xml):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mi Aplicación</string>
    <string name="hello_world">Hola Mundo!</string>
</resources>

Język polski (/values-pl/strings.xml):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Moja aplikacja</string>
    <string name="hello_world">Witaj, świecie!</string>
</resources>

Korzystanie z zasobów łańcuchowych

Zarówno w kodzie źródłowym jak i innych plikach XML możesz odwoływać się do zasobów łańcuchowych, korzystając z nazwy zasobu przypisanej atrybutowi name elementu <string>.

W kodzie źródłowym do dowolnego zasobu łańcuchowego możesz odwołać się przy użyciu składni R.string.nazwa_łańcucha. Istnieje wiele metod, które przyjmują zasoby tego typu w takiej właśnie formie.

Przykład:

// Pobierz zasób łańcuchowy z zasobów aplikacji
String hello = getResources().getString(R.string.hello_world);

// Lub przekaż zasób metodzie, która przyjmuje łańcuchy
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);

W innych plikach XML możesz odwołać się do zasobu łańcuchowego za pomocą składni @string/nazwa_łańcucha, o ile dany atrybut XML przyjmuje wartości łańcuchowe.

Przykład:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

Autor: Google

Źródło: https://developer.android.com/training/basics/supporting-devices/languages.html

Tłumaczenie: Joanna Liana

Treść tej strony jest dostępna na zasadach licencji CC BY 2.5