liguofeng29’s blog

個人勉強用ブログだっす。

Struts2 - 国際化

Struts2を使い、国際化する方法。

【国際化の流れ】

  1. 国際化リソース読み込み

    • 自動 : Action範囲、パッケージ範囲はシステムが自動読み込み
    • 手動 : view(JSP)範囲、グローバル範囲は、タグと設定により手動読み込み

  2. 国際化出力

    • Action内では、ActionSupprot#getText()
    • view(JSP)では、<s:text... name="key"> <s:textfield... key="key"> など

【リソースファイルの有効範囲】

  • action : action内で有効、優先順位が一番高い

    • baseNameがaction名と同じ
    • action*.classと同じパス内
    • LoginAction.java ⇒ LoginAction.properties(OR LoginAction.properties)
  • package : パッケージ内で有効

    • リソース名 : package
  • global : アプリ全体(Action,view,validatorなど)で有効

    • <constant name="struts.custom.i18n.resources" value="messageFile"/>

【viewのリソース読み込み&出力】

<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<!-- viewResourcesパッケージ内のbaseNameがloginFormの国際化リソース -->
<s:i18n name="viewResources.loginForm">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF=8" />
    <!-- 国際化出力 -->
    <title><s:text name="loginPage"/></title>
</head>
<body>
    <s:form action="login">
        <!-- 国際化出力 -->
        <s:textfield name="username" key="user"/>
        <s:textfield name="password" key="pass"/>
        <s:submit key="login"/>
    </s:form>
</body>
</html>
</s:i18n>

【actionのリソース読み込み&出力】

package lee.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
// 略
    public String execute() throws Exception {
        // メッセージ取得
        System.out.println(getText("mess1"));
        System.out.println(getText("mess2"));
        return "success";
    }
}

【置き替え文字】

welcome={0},ようこそ。{1}。
<s:text name="welcome">
    <s:param><s:property value="username"/></s:param>
    <!-- EL -->
    <s:param>${d}</s:param>
</s:text>
getText("welcome" , new String[]{"Alex", "2016/01/01"}));