10.struts2国际化(struts2笔记)

一、普通java工程实现国际化(工程struts2_3100_I18N_Test)

首先在src下存放国际化文件
app_en_US.properties

welcome.msg=hello,sir

app_zh_CN.properties

welcome.msg=\u6B22\u8FCE\u4F60\uFF01

我们使用一个普通的java程序进行测试:
Test.java

package com.bjsxt;
import java.util.Locale;
import java.util.ResourceBundle;

public class Test {
    public static void main(String[] args) {
        ResourceBundle res = ResourceBundle.getBundle("app", Locale.US);
        System.out.println(res.getString("welcome.msg" ));
    }
}

说明:我们这里在方法getBundle中的第一个参数是填写资源文件的开头部分,资源文件中的第二部分(如en)表示语言,第三部分(如US)表示国家。方法的第二个参数选择国家。

二、struts2中的国际化(工程struts2_3200_BBS2009_08_I18N)

struts2中国际化分为三个级别,分别是action级、package级、工程级,作用范围依次变大,但是一般我们都使用工程级。

2.1 action级和package级国际化

这两种方式一般不太用,这里不详细讲。
需要明白的是action级的资源文件写法一般为LoginAction_en_US.properties和LoginAction_zh_CN.properties,这里名字的第一部分最好和action的名字相同,这个级别的国际化资源文件只能给对应的action使用。而package级别的资源文件的名字一般为package_en_US.properties和package_zh_CN.properties,注意第一部分一定要是package。这两类资源文件都放在action包中。

2.2 工程级国际化

此时资源文件一般放在src目录下。
bbs2009_en_US.properties

login.username=username:
login.password=password:
login.login=login
welcome.msg=welcome\:{0}

bbs2009_zh_CN.properties

login.username=\u7528\u6237\u540D\uFF1A
login.password=\u5BC6  \u7801\uFF1A
login.login=\u767B\u5F55
welcome.msg=\u6B22\u8FCE\u4F60\uFF1A{0}

这里以登录为例:
LoginAction.java

package com.bjsxt.bbs2009.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
    
    private String username;
    private String password;

    public String login() throws Exception {
        
        return "success";
    }
    
    public String input() {
        return "input";
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.devMode" value="true"></constant>
    <!-- 配置资源文件的地址 -->
    <constant name="struts.custom.i18n.resources" value="bbs2009"></constant>
    <package name="admin" namespace="/admin" extends="struts-default" >
        <default-action-ref name="index"/>
        
        <action name="index">
            <result>/admin/index.html</result>
        </action>
        
        <action name="*_*" class="com.bjsxt.bbs2009.action.{1}Action" method="{2}">
            <result>/admin/{1}_{2}.jsp</result>
            <result name="input">/admin/{1}_{2}.jsp</result>
        </action>
    </package>
    
    <package name="front" namespace="/" extends="struts-default" >
        <default-action-ref name="Category_list"/><!-- 默认访问此界面 -->
        <action name="Category_list" class="com.bjsxt.bbs2009.action.CategoryAction" method="list">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

Login_input.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Login_input</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    

  </head>
  
  <body>
    <form action="admin/Login-login" method="post">
        <!-- 注意取得资源文件内容的写法 -->
        <s:property value="getText('login.username')"/><input name="username" />
        <s:property value="getText('login.password')"/><input name="password" type="password" />
        <input type="submit" value="<s:property value="getText('login.login')"/>" /> 
    </form>
    <s:debug></s:debug>
  </body>
</html>

Login_login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Login_login</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    

  </head>
  
  <body>
    欢迎您:<s:property value="username"/>
    <s:text name="welcome.msg">
        <s:param value="username"></s:param>
    </s:text>
  </body>
</html>

说明:

  • 1.首先在配置文件中我们需要配置资源文件:
<constant name="struts.custom.i18n.resources" value="bbs2009"></constant>

其中value值是资源文件名字的第一部分。

  • 2.在输入页面中我们取值的方法是
value="getText('login.username')"
  • 3.在登录成功后的页面(Login_login.jsp)中我们取得用户名,但是这个名字我们是不能在资源文件中写死的,所以我们采用动态指定。
  • 4.有时候我们可以看到有一种网站,当我们点击链接就会将整个网站的语言变换。
    我们在Login_input.jsp中加上两个链接:
<a href="admin/lang?request_locale=en_US">en</a>
  <a href="admin/lang?request_locale=zh_CN">cn</a>

其中lang是action的name属性值,提交到特定的action去处理。

最后:
这个内容在以后的开发中用的较少,这里不多说。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容