Dzięki wykorzystaniu internacjonalizacji tworzenie aplikacji w różnych językach (nie programowania 😉 ) stało się bardzo proste. Możemy przygotować jeden plik wzorcowy, a następnie przekazać go do odpowiednich tłumaczy, którzy przygotują nam przetłumaczone teksty w narzuconym przez nas formacie. Skrótem używanym naprzemiennie z internacjonalizacją jest i18n. Jest to ilość znaków pomiędzy “i” oraz “n” w słowie “internationalization“.
Autokonfiguracja
Aby skorzystać z internacjonalizacji w Spring Boot’cie mamy do tego utworzoną odpowiednią auto-konfigurację MessageSourceAutoConfiguration. Dzięki temu nie musimy tworzyć ekstra beanów konfiguracyjnych tylko możemy wykorzystać plik application.properties:
# INTERNATIONALIZATION (MessageSourceAutoConfiguration) # Comma-separated list of basenames, each following the ResourceBundle convention. spring.messages.basename=messages # Loaded resource bundle files cache expiration, in seconds. When set to -1, bundles are cached forever. spring.messages.cache-seconds=-1 # Message bundles encoding. spring.messages.encoding=UTF-8 # Set whether to fall back to the system Locale if no files for a specific Locale have been found. spring.messages.fallback-to-system-locale=true
Messages
Pliki z językami mają odpowiednie nazwy. Głównym plikiem domyślnym jest:
messages.properties
Jeśli chcemy utworzyć specyfikowany plik, dodajemy do niego postfix oznaczający język:
messages_pl.properties # polski messages_de.properties # niemiecki
Pliki domyślnie są wyszukiwane na classpath’ie:
Static resources can be moved to /public (or /static or /resources or /META-INF/resources) in the classpath root. Same for messages.properties (Spring Boot detects this automatically in the root of the classpath).
Jeśli natomiast chcemy zmienić lokalizację plików messages, należy wykorzystać plik application.properties:
spring.messages.basename=locale/messages
Gdy dodaliśmy już interesujące nas pliki, możemy sprawdzić działanie w Tymianku (Thymleafie, ale ostatnio przeczytałem tłumaczenie i zostało mi w głowie ;)). W momencie wywołania sprawdzana jest lokalizacja. Jeśli nie ma żadnego pliku messages.properties, zostanie załadowana wartość domyślna, czyli “Default“.
Korzystamy
Dodajmy sobie teraz kod:
<h1 th:text="#{CompanyName}">CodeCouple</h1>
A w plikach messages, messages_pl, messages_de dodajmy wartość z odpowiednimi końcówkami:
CompanyName=CodeCouple.tutaj_koncowka
Aby przetestować poprawność działania, wystarczy ustawić w przeglądarce domyślny język.