“国际化”是指一个应用程序在运行时能够根据客户端请求所来自的国家/地区,语言的不同而显示不同的用户界面。例如,请求来自一台中文的操作系统的客户端计算机,则应用程序响应界面中的各种标签,错误提示和帮助信息均使用 中文文字;如果客户端计算机采用的是英文操作系统,则应用程序也应能识别并自动以英文界面做出响应。
可以看出引入国际化机制的目的在于提供自适应的,更友好的用户界面,而并未改变程序的其他功能/业务逻辑。人们常用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
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
然后编写一个中文版本的ApplicationResources_zh_CN.properties
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
然后我们在struts的配置文件中设置资源文件即可!在设置 的时候我们只需要
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
设置ApplicationResources即可,而ApplicationResources_zh_CN不必,因为Struts在运行时会自动获取同名不同语言种类的资源文件!
这样当来自中文操作系统的客户浏览时就会自动显示 中文,而来其它的则统一使用默认的资源文件ApplicationResources.properties英文。那么程序究竟中如何知道的呢,其它这是通过IE的语言设置来获取!我IE属性---常规---语言 中其实就已经设定,如下:
我们可以看到我们都是简体中文如果将 英语上移或删除中文,再浏览刚才的页面,就会变成英文。那么其实也就知道为什么我设置中文资源文件的语言种类为_zh_CN了,就是来自这!
另外如果在配置文件中有多个资源包要配置,用KEY属性来区分,如下:
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
资源包应该放在WEB应用程序的WEB-INF/classes目录下,当系统初始化时,会装载这些资源文件。如果修改了资源文件,则需要重新启动应用服务器。
资源包的访问:
资源包有了后我们就可以对其进行访问了,访问方主要有二种:一种是在JSP页面访问,通过<bean:message>标记来访问,另一种是在程序中访问!
在JSP中访问如下:
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/34031c708bfe702fe82d01ff5c6593aa.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0be121fa5b8988fbabbbc526af3b0fc0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/587e34b10dcf5efbc0859b53470a2db3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4fd96b3cf02f4c7b5c8964ac8167f7af.gif)