thymeleafでメッセージを国際化するやり方をまとめておきます。
まずメッセージリソースとなるファイルを作ります。
src/main/resources に i18n フォルダを作成し、そこに各国語対応のファイルを作ります。
とりあえず英語と日本語のファイルを作ります。
src/main/resources/i18n/messages_en.properties
helloworld=Hello World!
src/main/resources/i18n/messages_ja.properties
helloworld=こんにちは世界!
thymeleafテンプレートの中で「helloworld」をキーにしてメッセージリソースから取得します。
src/main/resources/templates/index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
</head>
<body>
<h1 th:text="#{helloworld}">Hello</h1>
</body>
</html>
現状では、thymeleaf はメッセージリソースがどこにあるのかを知りませんので、どこかで設定する必要があります。
このような設定は、applicationContext.xmlに記述するのが一般的みたいです。
src/main/resources/applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>i18n/messages</value>
</list>
</property>
</bean>
</beans>
これで表示してくれるかと思ったら、デフォルトでは applicationContext.xml ファイルを読み込んでくれないようです。
mainメソッドを書いているクラスで、@ImportResourceアノテーションで指定してやればいいようです。
package hoge;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class HogeApplication {
public static void main(String[] args) {
SpringApplication.run(HogeApplication.class, args);
}
}
これでメッセージの国際化ができました。
しかし、タグに th:text で埋め込む方法では、HTMLタグに限られてしまいます。
JavaScript内にも国際化した文字列を埋め込みたい場合もあります。
その際は、以下のように埋め込みます。
コメント内で埋め込む感じですね。
で、コメント直後の数値や文字は、埋め込んだ文字列と置き換えられます。
let userId = /*[[${user.id}]]*/0;