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…
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:
<resources> <string name="app_name">MojaPierwszaAplikacja</string> <string name="action_settings">Settings</string> </resources>
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:
TextView textView = (TextView)findViewById(R.id.textView); textView.setText(getString(R.string.app_name));
oraz pliku xml z layoutem:
<TextView android:text="@string/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="221dp" android:id="@+id/textView" />
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:
<resources> <string name="unikalnyIdentyfikator">Jakiś tekst!!!</string> </resources>
Po prostu w znaczniku <resources> </resources>
wstawiamy nowe zwroty:
<string name="hello">Witaj!</string>
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”:
Następnie klikamy ikonę globusa znajdującą się w lewym górnym rogu Android Studio (w części wyświetlającej zawartość plików):
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:
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ć:
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
„:
Wchodząc do folderu „values-pl
” odnajdziemy nasz plik strings.xml
z tłumaczeniami:
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).
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).
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 :)