多言語対応化メッセージリソースをロケールを使って読込む方法

spring

springMVCにもmessage.propertiesを読み込む仕組みが用意されています。
struts等のMVCフレームワークでは、ロケール(jaやen)によって読み込むプロパティファイルを動的に変更出来ていました。springMVCでももちろん同じようにロケールによってプロパティファイルを変更するが可能です。
message.propertiesの読み込みは、ほぼ100%の割合で使うと思います。このサイトを参考にしていただけると嬉しいです。

[スポンサーリンク]

この章でやること

「message_ja.properties」「message_en.properties」を読み込みます。

spring設定ファイル(servlet-context.xml)の記述

こちらをspring設定ファイルに追記します。
「resources/i18n」のメッセージファイル「message_XX.properties」を読み込む設定です。
「message_XX.properties」の追加方法はこの後書いていきます。

    <!-- message source -->
    <bean id="messageSource"
                 class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
         <property name="basename"
                value="classpath:/i18n/message"/>
    </bean>

メッセージプロパティの追加

resources配下に「i18n」ディレクトリを作成します。
メッセージプロパティ、jaとenの2つを追加します。

message-properties1

message_ja.properties

### 日本語
app.test = これは日本語です。

message_en.properties

### English
app.test = this is English

メッセージプロパティをプログラム内で読み込む

コントローラクラス内で、メッセージプロパティを読み込んで、JSPで表示していきます。

コントローラクラス

@Controller
public class HomeController {

    private static final Logger logger 
    = LoggerFactory.getLogger(HomeController.class);

    @Autowired
    private MessageSource messageSource;

    /**
     * message_xx.properties を読み込むメソッドです。
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {

        String message = messageSource.getMessage("app.test",
                                                  null,
                                                  locale);
        logger.info("message : " + message);

        model.addAttribute("message", message );
        return "home";
    }
    
}

jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  message : ${message} </P>
</body>
</html>

ダウンロード

GitHubでサンプルソースを公開しています。こちらからご自由にダウンロードして下さい。

実行結果

上記のコントローラクラスをローカルサーバで実行して、ブラウザから以下URLを指定して下さい。
日本語環境のPCなら日本語が表示されます。
http://localhost:8080/app/

message-properties2

解説

コントローラクラス内の「messageSource.getMessage("app.test"・・・」で取得したい値のKeyを指定します。
ロケールをもとに自動的に「ja」「en」のファイルから値をとってきてくれます
わたしのPCが日本語環境だったため、今回は日本語が表示されています。

springMVCのバージョン

org.springframework-versionは、3.1.0を使っています。
javaは、1.7.15を使っています。

最後に

今は多言語対応が当たり前の時代となっています。
多言語化されたメッセージプロパティを使うことは、避けては通れない道だと思います。

多言語化されたとしても、フレームワークが動的に切り分けてくれるのことは開発者としては嬉しい限りです。
マンパワーでやる英語翻訳は険しい道ですが。(w_-;
それでは!