码迷,mamicode.com
首页 > 其他好文 > 详细

struts2学习笔记之十八(国际化)

时间:2015-06-03 09:50:36      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:

java国际化

程序国际化:
  程序可以根据机器所在国家、语言环境,自动翻译内容
  国际化的本质就是:查找、替换,从资源包里找到相应国家下的关键字对应的语言文字
  国际化的步骤:
  (1)提供国际化资源文件
     如果国家化资源包中有非西欧字符,需要使用native2ascii处理文件,
     native2ascii sourcefile destfile
     生成一个是Unicode字符的文件
     资源文件的写法:文件名语言代码国家代码
       xiyang_en_US.properties
          hi=”hello”
       xiyang_zh_CN.properties
          hi=”你好”
          注意:不能直接写”你好”,要使用Unicode编码,转换之后hi=”\u4f60\u597d”
   (2)在程序中输出的是国际化消息的key值,这样程序就会从资源包中搜索key的value

  • 提供国际化资源文件

    mess_zh_CN.properties

  • java国际化

public class LocaleTest{
    public static class main(String[] args){
        //查看系统支持的语言和国家代码
        System.out.println("查看语言、国家代码");
        Locale[] locales = Locale.getAvailableLocales();
        for(Locale locale: locales){
            System.out.println(locale.getDisaplayLanguage()
                +"---->"+locale.getLanguage());
            System.out.println(locale.getDispalayCountry()
                +"---->"+locale.getCountry())
        }
        //已经提供了两个资源包hi_en_US.properties,hi_zh_CN.properties
        //获取本机的环境
        Locale locale = Locale.getDefault(Locale.Ctegory.FORMAT); 
        //绑定资源文件
        ResouceBundle bundle=ResourceBundle.getBundle("hi",locale);
        System.out.println(bundle.getString("hi"));
    }
}

struts2的国际化

  1. 支持模块化加载
  2. struts2支持自动加载国际化资源

    • jsp页面的国际化

      i18n,internationalization 取i和末尾n,中间省略18个字母,故有i18n
      1、需要手工加载国际化消息
        使用<s:i18n .../>

      2、在页面上使用<s:text ../>根据key来输出国际化消息
        如果是表单标签,可以直接使用key来指定国际化消息的key
        每一个页面都使用一个国际化模块

    • Action国际化

      1、自动加载国际化消息
         ActionSupport类实现了action接口,而且它还增加了输入校验支持,国际化支持等功能
         因此推荐继承ActionSupport
         让国际化消息的basename与action类名相同,而且放在同一个目录下
         getText是ActionSupport的方法,专门用来加载国际化消息
      2、在action类中调用getText()方法
         getText(key,String[])
         getText(key)

    • 包范围的国际化

      1、自动加载国际化消息
        让国际化消息的basename为package(不是与包名相同),而且放在该包下面
        可以让该包下面的action共享同一个国际化资源文件
      2、在action类中调用getText()方法
        getText(key,String[])
        getText(key)

    • 全局国际化资源文件

      1、通过一个struts.custom.i18n.resources常量来加载国际化资源
      2、全局国际化资源文件,即可被action访问,也可以被jsp页面访问
      3、尽量少用,这样不利于项目后期的升级和维护

实例

JSP国际化

<!--JSP页面的国际化-->
<!--name表示国际化消息的baseName-->
<!--注意s:i18n的作用范围-->
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!-- 最好设置一个resource文件夹,且放在src下面 ,放在content文件下会出错-->

<!--重点-->

<s:i18n name="resource/I18nJSP" >

<html>
  <head>   
    <title>
        <s:text name="LoginPage"/>
    </title>
  </head>

  <body>
        <!--
            下面的表单的好处
            1、更简单
            2、自动支持2列布局
            3、自动输出类型转换失败,输入校验失败的错误信息
        -->
        <s:form action="loginAction">
            <s:textfield name="name" key="username" />
            <s:textfield name="pass" key="password" />
            <s:submit key="login"/>
       </s:form>
  </body>
</html>
</s:i18n>
<!--
文件内容:
I18nJSP_zh_CN.properties
LoginPage=\u767B\u9646
username=\u7528\u6237\u540D
password=\u5BC6\u7801
login=\u767B\u9646

I18nJSP_en_US.properties
LoginPage=Login Page
username=username
password=password
login=login in

-->

Action类国际化

public String execute() throws Exception {
        // TODO Auto-generated method stub
        if(name.equals("me")
                && pass.equals("12345")){
            setTip(getText("login", new String[]{name}));
            return SUCCESS;
        }
        return ERROR;
    }
/*
与action同名,且放在同一个包下面,系统会自动加载
Login_zh_CN.properties
login=\u5F88\u9AD8\u5174\u89C1\u5230\u4F60\uFF0C{0}\uFF01
Login_en_US.properties
login=Nice to meet you,{0}\!
*/

全局国际化

将所有的国际化的key集中到一个文件中,然后直接由系统自动调用
重点是struts.xml中配置常量struts.custom.i18n.resoures

struts 默认使用浏览器设置选择国家和语言
   提供机制让用户选择国家语言环境
   A、根据request_locale来确定确定
     如在提交请求时加上request_locale=en_US来设定语言环境为English
   B、直接通过浏览器选项修改语言环境

重点就是在struts.xml中添加常量:<constant name="struts.custom.i18n.resources" value="/resource/globalI18n"></constant>

总结:
  jsp页面和全局国际化都是需要指定资源文件所在的位置
      <s:i18n name="">
      <constant name="struts.custom.i18n.resources" value="/resource/globalI18n"></constant>
  action和package范围的国际化会自动加载
   只需要在命名的时候注意,action范围需要与action同名,package需要命名为package_xx_xx.properties

struts2学习笔记之十八(国际化)

标签:

原文地址:http://blog.csdn.net/havedream_one/article/details/46340177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!