在程序设计领域,人们把能够在无需改写有关代码的前提下,让开发出来的应用程序能够支持多种语言和数据格式的技术称为国际化技术。
国际化简称为 i18n,根据internationalization简化而来。
本地化简称为l10n,根据localization简化而来,与国际化对应。
struts2框架从一开始就是用java内建的国际化来实现国际化。
在程序中一个特定的语言由三部分组成,语言、国家、变体,一般的系统变体会很少考虑。语言就是指汉语、英语等,国家指中国、美国、英国等,这两部分组合起来就是一个标准语言,比如中国汉语,美国英语,英国英语,日本日语等,美国日语这种组合方式也是可以的,但是没人会这样做,没有任何实际意义。程序中为各种语言和国家定义了简称,在国际标准ISO中,中文简体是zh,中国是CN,暂且不考虑中国的其他语言形式。
要实现struts国际化,最主要的就是配置properties文件和struts.xml。
下面以login,username,userpassword为例,如果系统呈现中文,那么这三个字就是"登录","用户名","密码",呈现美式英语就是"Login","User Name","User Password",在程序中,需要将这些信息放入一个properties文件中,分别是message_zh_CN.properties,message_en_US.properties,格式:自定义部分_语言简写_国家简写.properties。
message_zh_CN.properties
login | 登录 |
username | 用户名 |
password | 密码 |
message_en_US.properties
login | Login |
username | User Name |
password | User Password |
注:打开中文properties文件源代码会看到,编码是字节形式存在的,因为中文是特殊字符,而java内部是使用Unicode存储的,所以这里会发声转换。
在文件名命中,message是自定义的,然后再struts.xml中需要配置这些文件,在xml增加下面常量
1 <constant name="struts.custom.i18n.resources" value="message"/>
这样就配置了两个properties的头部文件,置于后面部分是不用配置的,页面显示时会选择一个message开头的文件,在后面会做解释。
在页面使用验证国际化效果,jsp页面代码:
<s:property value="${getText(‘login‘)}"/> //显示结果为"登录",struts通过ActionSupport类的getText方法寻找属性文件中的login
<s:text name="login"/> //显示结果为"用户名",相当于上一句。
<s:textfield name="username" label="${getText(‘username‘)}"/> //显示"用户名"
<s:textfield name="username" key="username"/> //key专门去寻找配置的属性,
实现国际化Action类必须继承ActionSupport获得struts内建的国际化支持,通过ActionSupport的方法getText(String key)可以获得对应的国际化信息。如果使用默认的国际化,服务器在哪里就会使用哪里的语言,在美国就会使用美国英语,在中国就会是简体中文。
另一种常用的方式是由用户指定,比如某网站有中英文可以选择,点击中文,那么将使用message_zh_CN.properties中的配置,点击英文将启用message_en_US.properties中的配置,这样就能做到中英文切换,达到国际化的效果。