親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Spring Boot Thymeleafで多言語化


多言語対応でサイトを作ることが多い現代だからなのか、
最近のフレームワークは多言語対応がとても簡単です。

ここではThymeleafに表示される文字を多言語対応する方法を共有します。
基本的にはmessages_ja.propertiesや、messages_en.propertiesというような各国ごとのpropertiesファイルに「キー + 単語」を入れていくだけなのですが、
デフォルトの設定ではそのようなpropertiesファイルを読み込む設定がされていません。
なので、まずは以下のようなWebMvcConfigurerAdapterを継承したクラスを設定してください。

package テストパッケージ;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
@Configuration
public class MessageConfig extends WebMvcConfigurerAdapter {
 
    @Bean
    ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        // ここから先でどこのファイルを読めばよいのか指定してます。
        // MessageSource → メッセージの読み込み元ですからね
        messageSource.setBasenames("classpath:i18n/messages");
        messageSource.setCacheSeconds(0);
        messageSource.setDefaultEncoding("UTF-8");
        // ここまで
        return messageSource;
    }
}

他のサイトを参考にすると、
application.propertiesに設定値を入れればできるという内容が多かったですが、
なぜか僕の場合はできませんでした...

これで例えばmessages_ja.propertiesに、

test=テストだよ

と書いて、

Thymeleafに

<p th:text="#{test}"></p>

と書けば以下のようなタグが生成されます。

<p>テストだよ</p>

以下のような書き方をしても意味がないので注意してくださいね。

<p>#{test}</p>