什么叫国际化呢?自学时刚看到这个词的时候感觉好像很高端很难的样子,深入理解后才发现就那么一回事,不过其中的机制确实挺好的。 国际化主要是指语言的国际化,是不同地区和使用不同语言的用户都能方便地使用同一个应用系统。Struts2的国际化机制是建立在Java国际化 的基础之上,对Java国际化 进行了优化和封装。主要过程如下:
当客户端发送请求时,Struts2的i18n(i18n是由单词internationalization,及国际化单词简化而来,该单词共有20个字母,除了头尾的i和n中间18个字母,所以是i18n)拦截器会对客户端请求进行拦截,并获得request_locale的值,改制存储的是客户端浏览器的地区语言环境,获得该值后i18n烂机器将他实例化成Locale对象,并存储在用户Session中。然后Struts2会查找struts.xml或strus.properties配置文件来加载国际化资源文件。加载好国际化资源文件后,Struts2的视图文件会通过Struts2标签吧国际化消息显示出来。
国际化资源文件是.properties为扩展名的文件,该文件以键值对的形式存储国际化消息。即key=value,国际化资源的命名规则是resourceName_language_country.properties,如gloablMessages_en_US.properties是英文资源文件,而中文资源文件则是,gloablMessages_zh_CN.properties。
在Struts.properties中的配置如下:struts.i18n.resources=globalMessages,输出国际化信息,在表单中:
<s:textfield name="loginName" key="loginName" />
等。在Action中,
public String addUser(){
int jg = ud.addUser(this.u);
if(jg == 1)return SUCCESS;
else if (jg ==2 ){
this.addFieldError("u.name", getText("huizhi/havename"));
return NONE;
else return ERROR;
}
大致的Struts2的国际化机制和使用方法就如上所示。