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" />