ブラウザの言語にあわせてメッセージや表示内容を日本語や英語に切り替える機構を組み込みます
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を使った例を記述していますが、どちらも結果は同じです
お好きな方をどうぞ