Jak napisać wielojęzyczną aplikację na Androida?

Tworząc aplikację mobilną chcemy aby korzystało z niej jak najwięcej osób. Przeszkód w rosnących zasięgach może być całkiem sporo, część z nich można jednak szybko i sprawnie wyeliminować. Jeżeli chcecie aby wasza aplikacja docierała do użytkowników bez względu na ich położenie geograficzne, to z pewnością zainteresuje was to, w jaki sposób dostosowywać interfejs stworzonego programu do aktualnie wykorzystywanego w systemie Android języka. Wbrew pozorom nie jest to takie trudne do zrobienia…

Fot: Lynn Wallenstein, CC BY-SA 2.0.

Fot: Lynn Wallenstein, CC BY-SA 2.0.

W artykule na temat tworzenia pierwszej aplikacji w Android Studio, opisałem strukturę wszystkich katalogów i plików w projekcie. Uważni czytelnicy pewnie natknęli się tam na opis pliku strings.xml gdzie napisałem: „Bardzo ważny plik w którym definiujemy wszystkie rzeczy tekstowe jakie będą zawarte w interfejsie użytkownika. Dzięki temu w przyszłości łatwo będziemy mogli dorobić obsługę innych języków.” Jak nie trudno się domyślić to właśnie w tym pliku umieszcza się wszystkie opisy wstawiane w interfejsie aplikacji. Jeżeli dotąd wpisywaliście „na sztywno” w polu text jakiejś tam kontrolki, to co chcieliście wyświetlić, to mam nadzieję, że po przeczytaniu tego artykułu zmienicie swoje przyzwyczajenia.

Pobieranie zasobów

Tekst jest zasobem, który musimy za pomocą odpowiednich metod pobrać aby następnie móc go użyć. Pisząc aplikacje na Androida w Javie mamy do tego specjalną funkcję o nazwie getString(). Jak ona działa?

Załóżmy, że w pliku strings.xml mamy następujące zwroty:

Nas będzie interesował zwrot „MojaPierwszaAplikacja”, który identyfikujemy po parametrze name. Teraz ten tekst możemy wstawić w dowolnych miejscach aplikacji zarówno z poziomu javy:

oraz pliku xml z layoutem:

Jeżeli zasób ten będzie wyświetlany w kilku miejscach naszego programu, to jedna jego modyfikacja w pliku strings.xml spowoduje zmianę we wszystkich miejscach gdzie został on użyty.

Dodawanie nowych elementów do strings.xml

Aby dodać nowe elementy do pliku strings.xml wystarczy posłużyć się poniższym schematem:

Po prostu w znaczniku <resources> </resources> wstawiamy nowe zwroty:

Jak dodać tłumaczenie?

Aby dodać tłumaczenie wszystkich zwrotów tekstowych używanych w aplikacji, klikamy w Android Studio prawym przyciskiem myszy na plik strings.xml i z menu kontekstowego wybieramy opcję „Open Translations Editor”:

open-translations-editor-android-studio

Następnie klikamy ikonę globusa znajdującą się w lewym górnym rogu Android Studio (w części wyświetlającej zawartość plików):

select-language-android-studio

oraz z listy wybieramy język na który chcemy zrobić tłumaczenie. Ja wybrałem Polski.

Następnie wybieramy interesujący nas tekst i na dole w polu „Translation” wpisujemy tłumaczenie:

add-translation-android-studio

Analogicznie postępujemy z innymi frazami.

Jak widzicie w lewej kolumnie Android Studio, wyświetla nam się teraz informacja, że mamy dwa pliki strings.xml. Chodzi o to, że ten z flagą polski jest tłumaczeniem na język Polski, a ten bez żadnej flagi, to plik domyślny. Bez żadnych przeszkód, możemy sobie oba pliki otworzyć i modyfikować:

file-new-strings

Warto jeszcze zajrzeć do katalogu w którym mamy wszystkie pliki projektu (już poza Android Studio) i odszukać w nim folder „res” – jak widać mamy tam teraz utworzone dwa foldery „values” jeden o nazwie „values„, a drugi „values-pl„:

values

Wchodząc do folderu „values-pl” odnajdziemy nasz plik strings.xml z tłumaczeniami:

values-translate

Jeżeli nie chcemy dodawać nowego pliku tłumaczeń z poziomu kreatora Android Studio to możemy ręcznie to zrobić dodając w katalogu „res” nowy folder o nazwie „values-skrótJęzyka” np. „values-en” (en – Angielski) i umieścić w nim nowy plik o nazwie strings.xml gdzie będziemy dopisywać przetłumaczone zwroty ręcznie.

Kiedy przetłumaczone teksty będą wyświetlały się w aplikacji?

Dodane tłumaczenia będą aktywne w aplikacji, jeżeli język ustawiony w menu ustawień systemu Android będzie zgadzał się z językiem tłumaczenia. Dla przykładu, jeżeli mamy ustawiony język Polski to będzie wyświetlało nam się polskie tłumaczenie. Jeżeli będzie to np. Francuski, a nie mamy tłumaczenia dla Francuskiego, to w takim wypadku pobierane będą stringi z domyślnego pliku (tego, bez żadnej flagi w Android Studio czyli bez oznaczonego języka).

, , , , , , , ,

  • Rysiek

    Czy istnieje możliwość przetłumaczenia innego pliku niż string.xml ? Chciałbym utworzyć plik xml z danymi które chciałbym przetłumaczyć.

    • Ale po co Ci inny plik? Jeżeli potrzebujesz w aplikacji wczytywać jakieś Stringi to po prostu umieszczasz je w pliku string.xml (nawet jeśli to są jakieś dane).

  • Maciek

    Moim marzeniem było napisać aplikacje na androida która będa używały nie tylko osoby z Europy i z początku nie wiedzialem jak się za to zabrać ,czytałem książki,porobilem kursy na eduweb.pl które nakierowały mnie na właściwe tory i tutaj znalazlem też sporo pożytecznych rzeczy które mogłem wykorzystać w mojej aplikacji ,wielkie dzięki :)