Internacjonalizacja
Internacjonalizacja umożliwia wykorzystanie wielojęzyczności w ramach aplikacji. Zwyczajową nazwą na to rozwiązanie jest i18n – z tego względu, że w słowie internationalization pomiędzy i oraz n występuje dokładnie 18 znaków.
Pliki z tłumaczeniami
W pierwszej kolejności należy utworzyć pliki z tłumaczeniami. Należy je umieścić w katalogu resources. Każdy z plików musi posiadać nazwę messages z postfiksem kodu języka np:
- messages_en.properties
- messages_pl.properties
IntelliJ zwija pliki tłumaczeń w jeden Bundle co widać na obrazku poniżej. W samym pliku umieszczane są elementy tyku klucz-wartość. Po kluczu będziemy odnosić się do danego tłumaczenia.
Możliwe jest również dodawanie w pliku tłumaczeń parametrów. Wówczas indeks parametru ujmujemy w nawiasach klamrowych.
Dobrym zwyczajem jest umieszczenie tłumaczeń w katalogu i18n.
Implementacja
Należy utworzyć nowy @Bean, który będzie reprezentował klasę ReloadableResourceBundleMessageSource. Obiektowi temu trzeba przypisać ścieżkę do tłumaczeń, oraz typ kodowania.
@Bean public ReloadableResourceBundleMessageSource messageSource() { ReloadableResourceBundleMessageSource bundleMessageSource = new ReloadableResourceBundleMessageSource(); source.setBasename("classpath:i18n/messages"); source.setDefaultEncoding("UTF-8"); return bundleMessageSource; }
Wykorzystanie
Do wykorzystania elementu należy wstrzyknąć instancje klasy MessageSource, a następnie odwołać się do niej podając klucz tłumaczenia, opcjonalnie parametry oraz język.
@RestController public class TextApi { private MessageSource messageSource; @Autowired public TextApi(MessageSource messageSource) { this.messageSource = messageSource; } @GetMapping("/hello") public String sayHello(@RequestParam String name) { return messageSource.getMessage("welcome", new Object[]{name}, Locale.FRENCH); } }
Rezultatem jest wartość dla danego tłumaczenia.