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.
Zobacz listę szkoleń


