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

resourcesMessages 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:

CodeCouple

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.