zoukankan      html  css  js  c++  java
  • Struts2国际化

     

    国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。

    很多技术框架都提供国际化支持,struts2的国际化大致上分为页面的国际化,Action的国际化以及xml的国际化。

    我们将使用Struts2国际化技术实现登录功能的国际化。实现根据客户端的浏览器区域进行语言的切换,我们以英文和中文为例子。

    右键点击TestStruts2_001项目的“src”文件夹,选择“New”->“File”在里面新建一文件:

    在File name处输入“struts.properties”。properties文件为资源文件。其内容格式为:“Key=Value”。点击“Finish”后即可看到打开了该文件,界面如下:

    点击“Add”按钮,看到如下窗体:

    在Name处输入“struts.custom.i18n.resources”。这个为键名。

    在Value处输入“messageResource”。这个则为键值。

    添加完后点击“Finish”可以看到列表中出现:

    用同样的方法,先新建一个名字叫messageResource_en_US.properties的文件,分别添加键值:

    Name

    Value

    netrobot.login.username

    username

    netrobot.login.password

    password

    netrobot.login.submitbutton

    submit

    netrobot.helloworld

    Hello World!

    得到下面列表:

     

    使用同样方法再创建一个messageResource_zh_CN.properties的文件,并且在里面添加键值:

    Name

    Value

    netrobot.login.username

    用户名

    netrobot.login.password

    密码

    netrobot.login.submitbutton

    登录

    netrobot.helloworld

    你好!

    得到如图:

    注意,查看messageResource_zh_CN.properties的代码视图“Source”可以看到:

    netrobot.login.username=\u7528\u6237\u540D

    netrobot.login.password=\u5BC6\u7801

    netrobot.login.submitbutton=\u767B\u5F55

    netrobot.helloworld=\u4F60\u597D\uFF01

    中文不能直接写在properties文件中,必须使ascii码表示。

    然后我们修改一下login.jsp页面:

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ taglib prefix="s" uri="/struts-tags"%>
     3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     4 <html>
     5   <head></head>
     6   <body>
     7        <s:form action="loginAction" >
     8         <s:textfield name="username" key="netrobot.login.username"/>
     9         <s:password name="password" key="netrobot.login.password"/>
    10         <s:submit key="netrobot.login.submitbutton"/>
    11     </s:form>        
    12   </body>
    13 </html>

    在各个控件后加上相应的key=””,即可实现页面的国际化。表单控件有很多,其他控件的用法请参考struts2相关文档。

    我们再修改一下HelloWorld.java,在里面修改代码如下:

     1 package hello;
     2 import com.opensymphony.xwork2.ActionSupport;
     3 public class HelloWorld extends ActionSupport{
     4     private String message;
     5     public String getMessage() {
     6         return message;
     7     }
     8     public void setMessage(String message) {
     9         this.message = message;
    10     }
    11     public String execute(){
    12         setMessage(getText("netrobot.helloWorld"));
    13         return "success";
    14     }
    15 }

    与之前的区别有两个地方:1. HelloWorld类继承了ActionSupport,要使用Struts2的国际化,必须继承该类。2. 通过getText("label.helloWorld")方法获得国际化后的HelloWorld值。通过getText方法可以实现Action中的国际化。

    运行结果:

    假如运行时,操作系统为英文操作系统,则显示英文界面如图:

     

    在控制面板将系统的“区域与语言”设置为“中文(中国)”,则显示中文界面:

     

    注意:

    如需添加其他语言,只需增加messageResource_语言_国家.properties文档即可。语言和国家的代码请参考相关资料。

    国际化资源文件分为三种级别
    (1)全局资源文件,可以被整个应该程序引用,也就是struts.custom.i18n.resources = messageResource指定的文件。

    (2) 包级资源文件,每个包的根目录下可以新建资源文件,仅被当前包中的类访问.文件名格式为:package_语言代码_国家代码.

    (3) Action级资源文件,仅被当前Action引用,名称为action名_语言代码_国家代码

    查找顺序为从小范围到大范围, Action级优先级最大 

  • 相关阅读:
    kafka集群partition分布原理分析
    Kafka的通讯协议
    RabbitMQ和Kafka
    深入理解kafka设计原理
    Kafka的Log存储解析
    Netty 超时机制及心跳程序实现
    Netty 实现 WebSocket 聊天功能
    Netty 实现聊天功能
    RabbitMQ在分布式系统中的应用
    Kafka文件存储机制那些事
  • 原文地址:https://www.cnblogs.com/huanglibin/p/2758758.html
Copyright © 2011-2022 走看看