ブラウザの言語にあわせてメッセージや表示内容を日本語や英語に切り替える機構を組み込みます
springのMessageSourceを使うと、ロケールにあわせてメッセージリソース(propertiesファイル)を切り替えられます
propertiesファイルを言語毎に用意(messages_ja.properties / messages_en.propertiesなど)することにより、
ロケールに応じてspringが読み込むpropertiesファイルを自動で決定してくれます
設定
spring設定ファイルにMessageSourceを利用する為の設定を追記します
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
: :
: :
<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<beans:property name="basename" value="/WEB-INF/messages/messages" />
<beans:property name="cacheSeconds" value="0" />
</beans:bean>
: :
: :
</beans:beans>
propertiesファイルの用意
ロケール毎のファイルを設定ファイルに定義した位置(/WEB-INF/messages/)に作成します
ここでは日本語用と英語用の2種類を用意します
ファイル名は設定ファイルで定義した「messages」で始まるファイル
・messages_ja.properties
・messages_en.properties
となります
※「messages」で始まっていれば良いので、例えば「 messages-label_ja.properties」とかでも問題ないです
/WEB-INF/messages/messages_ja.properties
# title H1.TITLE=\u3053\u3093\u306b\u3061\u306f\u4e16\u754c
※propertiesファイルなのでnative2asciiした内容となっています。実際の値は「H1.TITLE=こんにちは世界」です
/WEB-INF/messages/messages_en.properties
# title H1.TITLE=Hello, world!
コントローラ・JSPの用意
MessageSourceを使う為の準備はできましたので、コントローラとJSPで実際に値を取得してみます
コントローラ(抜粋)
メッセージソースから値を取得するところに関連するコードです
Public class XXXXX {
@Autowired
private MessageSource messageSource;
@RequestMapping(value = {"/test1/"}, method = RequestMethod.GET)
public String home(Locale locale, Model model, HttpServletRequest request) {
String message = messageSource.getMessage("H1.TITLE", null, locale);
model.addAttribute("title", message);
return "Hello";
}
}
JSP
hello.jspの内容です
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ page session="false" %>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Home</title>
</head>
<body>
<h1 class="title">Hello, world!</h1>
<h1 class="title"><fmt:message key="H1.TITLE"/></h1> <!-- JSTLの場合 -->
<h1 class="title"><spring:message code="H1.TITLE"/></h1> <!-- spring tag -->
<h1 class="title">${title}</h1> <!-- Java側(Controller)にて取得 -->
</body>
</html>
実行すると、日本語ロケール(ja)の場合「こんにちは世界」と表示され、英語ロケール(enの)場合「Hello, world!」と表示されます。
JSTLを使った場合と spring tagを使った例を記述していますが、どちらも結果は同じです
お好きな方をどうぞ