|
自己总结:
1)导入strutsstrutsstrutsstrutsstrutsjspjavajavajavajavastrutsstrutsstrutsstrutsHTMLhtmlhtmlhtmlhtmlhtmlhtml包,写资源文件
资源文件的命名形式:
1、 beanName_language_country.properties MessageResource_zh_CN.properties
2、 beanName_language.properties
3、 beanName.properties
2)配置truts-config.xml
让加载资源文件
<-config>
<message-resource parameter=”com.gem..MessageResources”/>
</-config>
3)在页面,使用bean标签显示国际化信息,<bean:message key="uname"/>
4)浏览器工具:语言:设置
5)输入地址即可浏览。
一、中的国际化
a) jave中实现国际化的原理
中通过Locale对象可以指定或得到当前系统的默认国际化配置及语言代码和国家代码,然后通过ResourceBundle类得到对应Lacale对象的国际化配置文件即Properties文件,通过读取键的值实现国际化。
b) 中实现国际化需要的类
locale类:
可以指定所要显示的语言,即对应的国际化文件
Locale类的方法:
//得到当前系统默认的编码
Localel=Locale.getDefault();
//自定义Locale
//参数1:语言编码en(英文) zh(中文)
//参数2;国家编码US(英国) CN(中国)
Locale l1=new Locale("en","US");
//得到国家代码
l.getCountry();
//得到语言代码
l.getLanguage();
ResourceBundle类:
可以读取相应的Locale对应的property文件
e) property文件的文件名编写规则
Basename名_ 语言代码_国家代码.properties
说明:BaseName名可以自定义但后面的名称必需按以上规则书写
f) 读取对应的Properties文件
//读取对应的Properties文件
//第一个参数对应相应的basename
//第二个参数对应相应的Locale
ResourceBundle rb=ResourceBundle.getBundle("Message",l);
rb.getString("key值");
g) Properties文件的中文乱码题目
在读取Properties文件时键对应的中文键值会泛起乱码应使用jdk的native2ascii.exe工具将中文转换成unicode码再写入Properties文件中
i) Properties文件的占位符题目
Properties文件中可以使用{0}{1}进行占位符设置留意是从0位开始
使用占位符
MessageFormat mf =newMessageFormat(rb.getString("键名"));
String result = mf.format(newObject[]{"a","b"});
j) 国际化文件的路径题目
ResourceBundle rb=ResourceBundle.getBundle("Message",l);
默认读取的是src下的文件,若路径不同应标明路径
方法:msg + . + Properties文件的BaseName名
Eg: msg.Message
k) 留意:
默认情况下ResourceBundle会根据参数Locale的国家代码和语言代码自动匹配相应的Properties文件进行读取(所以properties文件的命名必需正当)。
若没有找到相应文件则加载系统默认的国际化配置文件(读取系统设置的国家代码和语言代码)若系统的设置也没有与之对应的properties文件则加载Basename名.properties文件。若还没有对应文件则报错。
l) 留意2:新建项目进行测试时必需建立源src文件夹否则报错。
二、硬编码国际化
a) 硬编码国际化即对页面中不变的文字进行国际化处理。
b) 使用方法
i. 在-config.xml:文件中加入
<message-resources parameter="MessageResources" />
第一个参数及Properties文件BaseName的名称
ii. 在properties文件中配置相关的字段,留意中文要转换成unicode码
iii. 在页面顶用标签替代需要国际化的内容
<bean:message key=” ”>
c) 留意:加载国际化文件时若没有找得相关文件(IE中的国际化配置)则会根据操纵系统的语言配置进行查找若还没有会加载默认文件即Basename.properties文件。
d) 通过修改session实现手动修改语言
request.getSession().setAttribute(Globals.LOCALE_KEY, currentLocale);
第二个参数为自定义的Locale对象。
或者:
this.setLocale(request, currentLocale);
第二个参数为自定义的Locale对象
三、动态文本国际化
1、 方法
在action中定义普通讯息和错误信息
ActionMessage m=newActionMessage("upass",newObject[]{"pppp"});
第一个参数是该信息的key值,第二个参数是占位符的内容,若仅有一个占位符可以不用object数组
直接写成String类型的参数
ActionMessage m=newActionMessage("upass",”sss”);
2、分别定义普通讯息和错误信息的ActionMessages
ActionMessages messages=newActionMessages();
3、将普通讯息和错误信息分别放入相应的messages中
Messages.add("uu",m3);
第一个参数为信息的名称,第二个参数为定义的ActionMessage
4、将普通讯息存入
this.saveMessages(request,messages);
留意 选择方法是应选择第二个弹出的方法,第一个参数是作用域,第二个参数为信息的集合。
5、将错误信息存入
this.saveErrors(request, messages2);
留意 选择方法是应选择第二个弹出的方法,第一个参数是作用域,第二个参数为信息的集合。
6、读取普通讯息
<:messagesid="s"message="true">
<bean:writename="s"/>
</:messages>
解析:message=”true”信息标识此标签读取的是普通讯息
Id表示从普通讯息的集合中掏出的每一个元素相称于iterator标签的id。
<hr>
<:messagesid="s"message="true"property="upass">
<bean:writename="s"/>
</:messages>
解析:message=”true”信息标识此标签读取的是普通讯息。
Property表示从该信息集合中掏出名为此属性值的元素的集合。
Id表示从普通讯息的集合中掏出的每一个元素相称于iterator标签的id。
7、读取错误信息
<:messagesid="s"property="upass">
<bean:writename="s"/>
</:messages>
解析:message标签默认读取的是错误信息。
<:errorsproperty="uu"/><br>
解析:该标签可以读取所有错误信息也可根据property读出所有是该属性名的错误信息的集合。
8、错误信息的格局定义
定义在国际化的Properties文件中
Eg:
errors.header=<UL>信息的头部代码
errors.prefix=<LI><font color="red">每条信息的开头代码
errors.suffix=</font></LI>每条信息的结尾代码
errors.footer=</UL>信息的尾部代码 |
|