一、java对国际化的支持
java.util.ReasourceBudle
java.util.Local
1、如何来获得当前jdk已经支持的国家
import java.util.Locale;
public class Test1
{
public static void main(String[] args)
{
Locale[] locales = Locale.getAvailableLocales();//该方法是静态的,而且返回的是Local的数组
for(Locale locale : locales)
{
System.out.println(locale.getDisplayCountry() + " : " + locale.getCountry());
System.out.println("*********************************************************");
System.out.println(locale.getDisplayLanguage() + " : " + locale.getLanguage());
}
}
}
2、用java实现国际化
文件名字: basename_语言_国家
如
hellofile_en_US.properties
hellofile_zh_CN.properties
文件内容:
hello=helloworld
hello=你好-----》需要转化后写上去----》用java下的工具native2ascii得到 hello=\u4f60\u597d
涉及到类
java.util.ReasourceBudle
java.util.Local
import java.util.*;
public class Test2
{
public static void main(String[] args)
{
Locale locale1=Locale.getDefault();//这个语句可以得到本地的默认Local
Locale locale = Locale.US;//设置本地Local
ResourceBundle bundle = ResourceBundle.getBundle("hellofile",locale);//通过静态方法得到ResourceBundle
String value = bundle.getString("hello");//通过key得到value
System.out.println(value);
}
}
3、国际化资源文件不写死的情况
文件名字一样: basename_语言_国家
如
hellofile_en_US.properties
hellofile_zh_CN.properties
文件内容:
hello = hello world : {0}
hello = 你好 : {0}
{0}是程序运行时动态传进去的。
注:以上必须从0开始,一个个连续的加上去。
涉及到新类import java.text.MessageFormat类
import java.util.*;
import java.text.*;
public class Test3
{
public static void main(String[] args)
{
Locale locale = Locale.US;
ResourceBundle bundle = ResourceBundle.getBundle("hellofile",locale);
String value = bundle.getString("hello");
String result = MessageFormat.format(value,new Object[]{"北京"});
System.out.println(result);
}
}
二、struts国际化的支持
1、对jsp页面的国际化
1)国际化前在src文件夹中,有资源文件message.properties
struts.xml文件中有配置:
<constant name="struts.custom.i18n.resources" value="message"></constant>
2)国际化准备工作,就是将原来src文件夹下的message.properties文件
改为需要国际化的那几个国家几个文件:
message_en_US.properties
message_zh_CN.properties
内容分别如下:
addUser = Add User Information
username.invalid = username "{0}" invalid
username.xml.invalid = username xml invalid
addUser = 增加用户信息
username.invalid = 用户名 "{0}" 填写不正确
username.xml.invalid = 验证框架提示用户名不正确
国际化后即可用浏览器预览: Internate选项/常规/语言/添加语言英语/上移
即可显示英文版了
2、对action类validate()方法的国际化
1)用到的文件:工作同上面jsp国际化的1)2)两步
2)在文件message_en_US.properties
message_zh_CN.properties
分别增加以下内容username.invalid=username error !
username.invalid=\u7528\u6237\u540d\u586b\u5199\u4eod
3)validate()方法修改如下
if (null == username || username.length() < 6 || username.length() > 10)
{
this.addActionError(this.getText("username.invalid"));
}
当客户使用英文操作浏览器时,验证错误时提示如下:username error !
当客户使用中文浏览器时。验证错误时提示如下信息:用户名不正确
因为“用户名不正确”正好对应ascii为上面的“\u7528\u6237\u540d\u586b\u5199\u4eod”
2、1同样validate方法中也可以加动态的参数,如下对上面的2、对类validate()方法的国际化修改如下:
2)在文件message_en_US.properties
message_zh_CN.properties
分别增加以下内容username.invalid = username "{0}" invalid
username.invalid = 用户名 "{0}" 填写不正确
3)validate()方法修改如下
if (null == username || username.length() < 6 || username.length() > 10)
{ //this.addActionError(this.getText("username.invalid",new String[]{username}));
//或将上面一句改成以下方式
List list = new ArrayList();
list.add(username);
this.addActionError(this.getText("username.invalid",list));
}
当客户使用英文操作浏览器时,输入"张三"验证错误时提示如下:username"张三"error !
当客户使用中文浏览器时。验证错误时提示如下信息:用户名"张三"不正确
3、验证框架(xml)的国际化
1)用到的文件:工作同上面jsp国际化的1)2)两步
2)在文件message_en_US.properties
message_zh_CN.properties
分别增加以下内容username.xml.invalid = username xml invalid
username.xml.invalid = 验证框架提示用户名不正确
3)在原来的registerAtionValidate.xml文件中增加
<message key="username.xml.invalid"></message>
例如:
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="username.xml.invalid"></message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>username should be between ${minLength} and ${maxLength}</message>
</field-validator>
</field>
4、以上国际化文件都是全局的,还有包级别和类级别的资源文件
1)包级别命名规则。package_en_US.properties
package_zh_CN.properties
此时和java的变量一样,若在包级别中发现内容,就不会再去全局中去找了。
2)类级别命名规则RegisterAction_en_US.properties
RegisterAction_zh_CN.properties
此时和java的变量一样,若在类级别中发现内容,就不会再去全局和包级别中去找了。
5、表单form国际化
1)要求:Struts表单不能设置为simple主题
2)它国际化是和相应的action去关联,会首先去找类级别的国际化。
6、也可以在jsp页面中直接用i18n来挨个字段指定
1)假如我在src目录下有资源 包
temp_en_US.properties
temp_zh_CN.properties
内容为: hello = world,{0}
hello = 你好,{0}
<body>
<center>
<s:i18n name="temp">
<s:text name="hello">
<s:param>langsin</s:param>
</s:text>
</s:i18n>
</center>
</body>
分享到:
相关推荐
Tobit与Probit模型Stata实现代码-最新发布.zip
Jupyter-Notebook
红警单机版(单机游戏)
SwiftUI编写的贪吃蛇小游戏讲解
1996-2020年中国文化旅游统计年鉴-最新数据发布.zip
Jupyter-Notebook
omwfa1hxz_1.apk
2001-2023年上市公司大数据应用指数数据集(6.1万样本,5600家企业,含原始数据、代码及结果,最新).zip
Jupyter-Notebook
Typora(version 1.2.3)导出 pdf 自定义水印的 frame.js 文件,详情可以查看:
量产部落sm2263xt开卡工具,支持b16b17颗粒
中国1公里分辨率月降水数据-最新全集.zip
云平台VPC.vsdx
CPA注会考试最新教材资料-最新发布.zip
分省最低工资标准面板数据最新集.zip
内容概要:本文档是一份详尽的Java面试题集,涵盖了许多常见的Java面试问题及详细的解答。内容涉及Java基础语法、面向对象编程、集合框架、网络编程、Spring框架等多个方面。每个问题不仅提供了答案,还解释了其背后的原理和技术细节。 适合人群:即将参加Java岗位面试的技术人员,特别是工作经验1-3年的软件工程师。 使用场景及目标:适用于准备Java面试,加深对Java核心技术的理解和掌握。通过练习这些问题,帮助面试者更好地理解和应对面试官的问题。 阅读建议:建议结合实际项目经验来阅读和练习这些问题,以便更好地理解和应用所学的知识点。同时,对于复杂的问题,可以通过编写代码来验证答案的正确性和理解深度。
层次分析法与熵值法工具包+数据案例+代码-最新.zip
音乐产品购物网站 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
NASA DEM中国30省高分辨率地形数据-精心整理.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。