Struts2 i18n 全局国际化

          随着全球经济的一体化,软件开发者应该开发出支持多国语言、国际化的Web应用。使开发出的软件适合于更多国家用户使用,对于Web应用来说,同样的页面在不同的语言环境下需要显示不同的效果。也就是说,一个Web应用程序在运行时能够根据客户端请求所来自的国家和语言显示不同的用户界面。这样 ,当需要在应用程序中添加对一种新的语言的支持时,无需修改应用程序的代码。

        Struts2 i18n对Web应用的国际化提供了很好的支持,Struts2中默认支持i18n国际化的实现,其底层是通过Java基于Locale和ResourceBundle实现国际化。

   Struts2中实现国际化的步骤:

       一、 建立一个包含Struts2的Web应用 二、 编写国际化的资源文件 根据以下的规范,新建资源文件,资源文件命名是要有规范的:文件名_语言代码_国家区域代码.properties 国际化配置文件的三种配置方式和配置文件的命名规范: 

       类级别的国际化(Class) 类级别的国际化配置文件命名规范:ClassName_语言代码_国家区域代码.properties(如:LoginAction_en_US.properties)

       类级别的资源文件须保存在于类相同的目录路径下,且必须用类名作为文件名。 

       包级别的国际化(Package) 包级别的国际化配置文件命名规范:package_语言代码_国家区域代码.properties(如:package_zh_TW.properties)

       包级别的资源文件必须保存在包目录路径下,且必须用package作为文件名。 

       应用级别的国际化(Application) 应用级别的国家化配置文件命名规范:FileName_语言代码_国家区域代码.properties(如:golbal_zh_CN.properties)

      应用级别的国际化文件名可随意,没有强制规定,对于保存路径同样没有强制性规定,一般我们将其保存在应用的source根目录下。 

      说明:在Struts2中,类级别国际化>包级别国际化>应用级别国际化;如我们在系统中同时使用了三种国际化形式,Struts2会从类级别的国际化资源文件逐层向上查找

  三、 配置Struts.xml文件 Struts2中默认支持i18n国际化,对于类级别和包级别的国际化,不需要再单独配置,只需资源文件命名规范和文件的保存路径完全正确即可;而对于应用级别的国际化,需要在Struts.xml中单独配置,指明Struts2在加载国国际化文件的路径。

     如在系统中应用级别的国际化文件名为:global_en_US.properites,且在系统中保存在source根目录下,其在Struts.xml中的配置如下: 其中value的值即为配置文件的文件名。 如果应用级别的国际化资源文件保存在其他位置,则需要明确指定资源文件的保存路径, 如上的配置表示以global为文件名的应用级别的资源文件保存在cn/gocom/properties目录下

      四、 编写资源文件 资源文件的编写和普通的properties文件编写完全一样,类似于“键-值”对的方式编写 例:

Welcome=世界你好!

Welcom=Hello World!

注意:等号前后不要有空格

      五、 完成上面4步以后,整个应用国际化环境就全部搭建好了。 而对于整个系统来讲,我们希望的效果是在一处设置好语言后,接下来整个系统的应用浏览都是使用这一语言环境。

Struts2在实现国际化时,需要设置浏览器使用的区域编码,同时拦截器需要从Session中取出WW_TRANS_I18N_LOCALE的值作为整个应用的语言环境。

在系统初始化时,在Actin中做以下设置:

        private Locale current; ActionContext.getContext().setLocale(current);

       ActionContext.getContext().getSession().put("WW_TRANS_I18N_LOCALE",current);

       根据如上设置后,在整个系统浏览中,都将使用同一语言环境。

原理及思路

       国际化是设计容易适应不同区域要求的一种方式。它要求从产品中抽离出所有与语言、国家/地区和文化习惯等相关的元素。国际化的应用程序在功能和代码设计上兼顾了在不同地域环境运行的需要,其目的之一也是为了简化不同本地版本的开发。 软件开发应采用国际化设计思想,应用程序在本地化之前必须首先国际化。应用程序国际化的目标是编写在任何受支持的区域设置中都同样能正常运行,且外观本地化的代码。这样的软件将来很容易本地化,软件缺陷也将降至最低。在国际化的软件开发中,文本信息通常采用Unicode编码保存。 国际化程序中,对消息文本也应该进行本地化处理,此时应该把消息文本保存到资源包中,以提供对应于不同Locale的版本,其实现方式与保存普通文本的方式是相同的。 在国际化的应用程序中,通常以J2SE标准类java.util.ResourceBundle的形式来保存与运行环境相关的资源,如消息文本,消息等等,每一个资源包对应一种用户Locale。

           资源包采用统一的命名规则,其格式为:文件名_语言代码_国家/地区代码.properties,其保存的字符串信息按“键-值”对方式排列,每行保存一条。 在使用时,通过J2SE的ResourceBundle类处理需要国际化的资源,处理的方式与处理普通的properties文件相似,加载相应语言环境的资源文件(.properties),通过getString(“XX”)方法获取到资源文件中“键”所对应的“值”。

如下:

ResourceBundle rb = ResourceBundle.getBundle("global", new Locale("zh", "TW"));

String str = rb.getString("main.welcom");

System.out.println(str);

      这样就能够获取到用台湾地区字体编码保存的properties资源文件中“main.welcom”所对应的值。在实际运用中,可在应用程序初始化时,一次加载完成显示界面所需要的资源,并放入在一个集合中,在需要使用的地方通过“键”从集合中取出对应的“值”,使应用程序在调用时响应更快。 如下图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值