• Struts中的国际化


    “国际化”是指一个应用程序在运行时能够根据客户端请求所来自的国家/地区,语言的不同而显示不同的用户界面。例如,请求来自一台中文的操作系统的客户端计算机,则应用程序响应界面中的各种标签,错误提示和帮助信息均使用 中文文字;如果客户端计算机采用的是英文操作系统,则应用程序也应能识别并自动以英文界面做出响应。
    可以看出引入国际化机制的目的在于提供自适应的,更友好的用户界面,而并未改变程序的其他功能/业务逻辑。人们常用I18N这个记事作为”国际化“的简称,其来源是英文单词Internationalization的首字母I和N及它们之间的字符数18。
    Struts框架通过使用<bean:messgae>标记,以及使用java.util数据包中定义的Locale和ResourceBundle类来支持国际化。java.text.MessageFormat类定义的技术可以支持消息的格式。利用此功能,开发人员无须了解这些细节就可以进行国际化处理并设置消息的格式。
    资源文件和资源包
    要用Struts实现国际化和本地化,首先要定义资源文件的名称,这个文件会包含用默认语言编写的会在程序中出现的所有消息。这些消息以”键-值“对的形式存储,如下:
    error.validation.localtion = The entered location is invalid
    当对一个应用程序进行国际化处理时,所要用的各种语言版本的”标签“信息应该存放在不同的属性文件中,每一个这样的文件对应一种语言版本。所有属性文件合在一起称为资源包(Resource Bundle)。
    属性文件的命名格式可分为以下两种:
    a)文件名前缀.properties
    b)文件名前缀_语言种类.properties
    文件名后缀必须是properties,前缀可自由书写,其中语言种类字段必须是有效的ISO语言代码。例如现在我们针对(Struts)ActionForm类及表单数据验证中最后的验证来做国际化
    我们先来编写一个默认的英文版资源文件ApplicationResources.properties

    #ApplicationResources.properties
    error.login.userName
    =userName's length must more than 3 and not null
    error.login.userPwd
    =userPwd's length must more than 3 and not null

    然后编写一个中文版本的ApplicationResources_zh_CN.properties

    #ApplicationResources_zh_CN.properties
    error.login.userName
    =用户名必须填写且长度不小于3
    error.login.userPwd
    =密码必须填写且长度不小于3

    然后我们在struts的配置文件中设置资源文件即可!在设置 的时候我们只需要

    <!-- 资源文件 -->
      
    <message-resources parameter="struts.ApplicationResources" />
      

    设置ApplicationResources即可,而ApplicationResources_zh_CN不必,因为Struts在运行时会自动获取同名不同语言种类的资源文件!
    这样当来自中文操作系统的客户浏览时就会自动显示 中文,而来其它的则统一使用默认的资源文件ApplicationResources.properties英文。那么程序究竟中如何知道的呢,其它这是通过IE的语言设置来获取!我IE属性---常规---语言   中其实就已经设定,如下:

    我们可以看到我们都是简体中文如果将 英语上移或删除中文,再浏览刚才的页面,就会变成英文。那么其实也就知道为什么我设置中文资源文件的语言种类为_zh_CN了,就是来自这!
    另外如果在配置文件中有多个资源包要配置,用KEY属性来区分,如下:

    <!-- 资源文件 -->
      
    <message-resources parameter="struts.ApplicationResources" />
      
    <message-resources key="Image" parameter="ApplicationImageResources"/>
      
    <message-resources key="xxx" parameter="ApplicationXXXResources"/>
       
    其中,不带key属性的就是默认的资源包。
    资源包应该放在WEB应用程序的WEB-INF/classes目录下,当系统初始化时,会装载这些资源文件。如果修改了资源文件,则需要重新启动应用服务器。
    资源包的访问:
    资源包有了后我们就可以对其进行访问了,访问方主要有二种:一种是在JSP页面访问,通过<bean:message>标记来访问,另一种是在程序中访问!
    在JSP中访问如下:
    <bean:message key="error.login.userName"/>
    在程序中访问资源包主要是在Action类中用到。Action提供了getResources()方法,可以获得org.apache.struts.MessageResources类的一个实例。MessageResources代表资源包的一个类,它是一个抽象类,因此需要由Action的基类中的getResources()方法来返回它的一个实例。以下是程序示例:
            //获取资源包示例
            
    //获取用户的Locale信息
            Locale locale = getLocale(request);
            
    //获取资源包
            MessageResources message = getResources(request);
            
    //从资源包中得到消息文本
            String title = message.getMessage(locale,"error.login.userName");
            System.out.println(title);
            
    /**可以看到在调用了getResources()方法后,便可以获得相应的资源包,
             * 接下来,就可以按照request对象中的Locale信息来获取相应资源包中
             * 的文本。值得注意的是getMessage()有几种形式,如下:
             getMessage(String key);
             getMessage(Locale locale,String key);
             getMessage(Locale locale,String key,Object[] args)
               其中,最后一种getMessage()方法可以传入参数给资源包中的文件,
               更加灵活地实现消息的输出。
    */
  • 相关阅读:
    String、StringBuffer、StringBuilder源码解读
    查询条件左边写入函数,导致无法命中索引
    【图形学手记】law of the unconscious statistician
    【图形学手记】蒙特卡洛方法相关笔记
    【图形学手记】抽样分布相关的数学笔记
    C++ lower_bound
    【图形学手记】Inverse Transform Sampling 逆转换抽样
    【Java学习笔记】LinkedList JDK1.6
    【疑难杂症】new Date() 造成的线程阻塞问题
    【疑难杂症】【Solved】maven-compiler-plugin 在 idea 下的问题
  • 原文地址:https://www.cnblogs.com/eflylab/p/614471.html
Copyright © 2020-2023  润新知