11级_Java_曹建波 03.05 Struts2的国际化
国际化
13.1说明
一个系统的国际化就是根据操作系统的语言,页面上的表现形式发生相应的变化。比如如果操作系统是英文,页面的文字应该用英语,如果操作系统是中文,页面的语言应该是中文。
IE浏览器设置语言环境:
Win8系统:
IE-->工具-->Intener选项--->语言--->设置语言首选项--->添加
就可实现添加
13.2步骤
(1)、建立资源文件
资源文件的命名规则:
默认的命名为:
文件名前缀.properties
根据语言的命名为:
文件名前缀.语言种类.properties
例如:
中文:
resource_zh_CN.properties
内容:
item.username=用户名
item.password=密码
英文:
resource_en_US.properties
内容:
item.username=username_en
item.password=password_en
默认:
resource.properties
内容:
item.username=username
item.password=password
转换:
对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。命令的使用方式如下:
native2ascii源文件.properties目标文件.properties
但是Myeclipse智能,自动转化。
****--->告诉struts2你的基础名称是什么?
配置常量>struts.xml文件中配置如下:
****的基础名的配置文件位于src下:
位于src下面:
文件内如如下:
启动tomcat加载资源文件:
如果配置文件位于包中:
|----hbsi_en_US.properties
|----hbsi_zh_CN.properties
|----hbsi.properties
那么在struts.xml文件中怎么配置:
<constantname="struts.custom.i18n.resources"value="****"></constant>
hbsi就是基础名称
那么在jsp页面中怎么获取国际化的标签值:
在action中怎么获取其值
System.out.println(getText(“nameerror”));
getText();
国际化—输出带占位符的国际化信息
如果在配置文件中有占位符的情况下怎么处理国际化:
资源文件中的内容如下:
wel={0},欢迎来到****乐知学院{1}
在jsp页面中输出带占位符的国际化信息
<s:textname="wel">
<s:param><s:propertyvalue="realname"/></s:param>
<s:param>学习</s:param>
</s:text>
在action中:
代码
publicvoidvalidate(){
//System.out.println(getText("nameerror"));
List<String>args=newArrayList<String>();
args.add("zhangsan");
args.add("****网站");
System.out.println(getText("wel",args));
System.out.println(getText("wel",newString[]{"lisi","交友网"}));
if("".equals(name)||this.name==null){
addFieldError("name",getText("nameerror"));
}
}
输出效果
国际化—包范围资源文件
在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。
方法如下:
在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。
例如:
|----package_en_US.properties
|----package_zh_CN.properties
注意:
必须是先访问到这个action才能够使用这个包中的国际化文件。
国际化—Action范围资源文件
我们也可以为某个action单独指定资源文件,方法如下:
在Action类所在的路径,放置ActionClassName_language_country.properties资源文件,ActionClassName为action类的简单名称。
当查找指定key的消息时,系统会先从ActionClassName_language_country.properties资源文件查找,如果没有找到对应的key,然后沿着当前包往上查找基本名为package的资源文件,一直找到最顶层包。如果还没有找到对应的key,最后会从常量struts.custom.i18n.resources指定的资源文件中寻找。
|----UserAction.java
|----UserAction_zh_CN.properties
国际化—JSP中直接访问某个资源文件
利用struts2提供i18n标签输出国际化信息
<s:i18nname="www/****/package">
<s:textname="wel">
<s:param>hahah</s:param>
<s:param>ssscs网站</s:param>
</s:text>
</s:i18n>
struts2为我们提供了<s:i18n>标签,使用<s:i18n>标签我们可以在类路径下直接从某个资源文件中获取国际化数据,而无需任何配置:
<s:i18nname=“****">
<s:textname=“welcome”/>
</s:i18n>
****为类路径下资源文件的基本名。
如果要访问的资源文件在类路径的某个包下,可以这样访问:
<s:i18nname=“cn/****/action/package">
<s:textname="welcome">
<s:param>小张</s:param>
</s:text>
</s:i18n>
上面访问cn.****.action包下基本名为package的资源文件。
文件上传案例解析:
l在上传的过程中,如果出现错误,则系统会自动跳转到input指向的页面。这点也可以从FileUploadInterceptor源代码中看出来。
l在input参数指定的页面中,编写<s:fielderror></s:fielderror>可以看到错误的信息。但是是英文的。如:不能上传一个类型错误信息为:
Content-Typenotallowed:upload"xwork-2.1.6-src.zip""upload_6fff0830_13174e12471__8000_00000000.tmp"application/x-zip-compressed
有关文件上传的错误信息:
位于:org.apache.struts2包下的struts-messages.properties
这个信息的组成查看org.apache.struts2包下的struts-messages.properties文件。在这个文件中,有三个键值对:
struts.messages.error.file.too.large=Thefileistolargetobeuploaded:{0}"{1}""{2}"{3}
struts.messages.error.content.type.not.allowed=Content-Typenotallowed:{0}"{1}""{2}"{3}
struts.messages.error.file.extension.not.allowed=Fileextensionnotallowed:{0}"{1}""{2}"{3}
{0}:代表页面上<inputname=”upload”type=”file”/>中的name的值
{1}:代表文件上传的名称
{2}:文件保存在临时目录的名称。
临时目录为work\Catalina\localhost\struts_upload_interceptor
{3}:代表文件上传类型,或者文件上传大小。上面的错误代表文件上传类型。如果报第一个错误,则代表文件上传大小。
如果报错了,显示的是英文,怎么样才能显示中文呢?
步骤:
1、建立一个properties文件。这个文件的名称可以任意取。
2、在这个配置文件中,添入如下的内容:
struts.messages.error.file.too.large=文件超过了规定的大小:{0}"{1}""{2}"{3}
struts.messages.error.content.type.not.allowed=该类型不允许被上传:{0}"{1}""{2}"{3}
struts.messages.error.file.extension.not.allowed=不能上传该扩展名类型的文件:{0}"{1}""{2}"{3}
3、在struts-upload.xml中,指定配置文件的位置
<constantname="struts.custom.i18n.resources"value="cn.itcast.struts2.action.upload.fileuploadmessage"></constant>
如果配置文件放在src下,则这样指定:
<constantname=”struts.custom.i18n.resources”value=”fileuploadmessage”></constant>