今天学习springIOC时学习到了其国际化的用法,这里总结下自己学习到的知识点,
这里先上两种简单的格式化
日期格式化
//日期格式化,得到当前系统时间,转换成想要的格式,一般放在项目中的util包里
String date = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date());
System.out.println(date);
数字格式化
//数字格式化,得到自己想要的格式,例如这个最后Console输出12.5,
String num = new DecimalFormat("#.#").format(12.5345435);
System.out.println(num);
文本格式化
//文本格式化,实际应用中应该也只有语言和国家用的多,这里只说这两个,
Locale locale = Locale.getDefault();//此方法获取默认语言环境的当前值的Java虚拟机实例。
System.out.println("国家:" + locale.getCountry());
System.out.println("语言:" + locale.getLanguage());
//这是得到当地的国家和语言,关于Locale类的具体用法可以查找API,
//格式化:既然是国际化,那么当然至少针对两种国家或语言啦,先定义两种str再说
String ch = "黑猫小长真是太帅啦,但为啥还是找不到女朋友呢?";
String en = "Mr heimao is so smart,but why don't have a girlfriend?";
//既然是格式化,当然要格式个东西啦,把上面的黑猫小长和帅换啦,可以替换成你想要的才叫格式化呗,不然强耦合太那啥了
String ch_1 = "{0}真是太{1}啦,{2}";
String en_1= "Mr {0} is so {1},{2}";
//语句已经定义好,现在可以格式化了,日期格式化用到SimDateFormat,数字格式化用到DecimalFormat,文本用的是MessageFormat.开干了
//定义你想要替换上面{0}和{1}处的东西,肯定是个数组涩
String[] params = {"阅览者","漂亮了","为啥不给小长我一个鼓励捏?"};//中文的
//开始格式,注意MessageFormat的用发哈,API一下。默认是Locale.getDefault
String str_zh = new MessageFormat(ch_1,Locale.CHINA).format(params);
System.out.println(str_zh);
//如果国际化了,客户想要用英语的呢?格式化en_1涩
String str_en = new MessageFormat(en_1,Locale.US).format(params);
System.out.println(str_en);
//这就是普通格式化,但是实际应用中是用的properties咯,下面继续总结
jdk资源文本格式化
/*
* 1.资源的命名,便于java虚拟机解析,是自动解析 的,后面总结
* 2.加载资源,指定国家,java虚拟机自动匹配进去
* 3.解析getString方法,找到properties中的key,格式化其value
* */
/*首先定义资源名字,格式为:<资源名>_<国家>_<语言>
* eg:resources_zh_CN.properties,美国就是en_US,
* 我定义了两个properties,分别是resources_zh_CN.properties
* 和resources_en_US.properties,
* 注意在上面zh_CN中汉字会自动转换成一种unicode码,如果你需要翻译这种码或者转换
* ,在你下载的jdk目录下的bin目录下有native2ascii.exe就是自动转换的,
*/
//资源统一管理需要用到ResourceBundle类,因为我的资源文件在具体的包类,要用绝对地址
ResourceBundle bundle_zh = ResourceBundle.getBundle("java_util/resources",Locale.CHINA);//根据后面的Locale.CHINA,java虚拟机自动补全_zh_CN.properties.
ResourceBundle bundle_en = ResourceBundle.getBundle("java_util/resources",Locale.US);//根据后面的Locale.US,java虚拟机自动补全_en_US.properties.
System.out.println(bundle_zh.getString("name") + "======" + bundle_zh.getString("age") + "=====" + bundle_zh.getString("profession"));
System.out.println(bundle_en.getString("name") + "======" + bundle_en.getString("age") + "=====" + bundle_en.getString("profession"));
//实现系统传的时候,自己定义要用那种国家,那种语言
Locale locale = new Locale("en","us");
ResourceBundle bundle = ResourceBundle.getBundle("java_util/resources",locale);
System.out.println(bundle.getString("name") + "======" + bundle.getString("age") + "=====" + bundle.getString("profession"));
//格式化资源文件中的age和年龄,只实例zh文件中的,将age和profession改了,需要用到MessageFormat类
/*
* name = {0}\u732B\u5C0F{1}
age = 22
profession = \u5B66\u751F
* */
String[] params = {"老","大"};
ResourceBundle bundle_geshihua = ResourceBundle.getBundle("java_util/resources",Locale.CHINA);
String str = new MessageFormat(bundle_geshihua.getString("name")).format(params);
System.out.println(str);
//这就是不用框架的格式化了,后面再总结下学到的spring中的格式化
spring国际化
//首先配置bean
<!-- 配置国际化资源 -->
<bean id="messageResource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list><value>com/heimao/test/resources</value></list>
</property>
</bean>
// 用applicationcontext取到对象
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");
ResourceBundleMessageSource resource = (ResourceBundleMessageSource) context.getBean("messageResource");
//定义参数
Object[] params = {"晴朗","甩火腿"};
String str = resource.getMessage("name", params,Locale.CHINA);//很好理解,参数1取到key为name的值,参数2用params的值去格式化,参数3取到zh_CN这个资源文件
System.out.println(str);
//当然自己也可以去封装这个方法,利用jdk那个原理就行了。这就是今天总结的国际化,这些都可以用在项目中登录时选择语言,国家相对的就对项目国际化,利用jsp中的自定义标签和函数很好解决,后面有时间在复习一下自定义标签与自定义函数
欧了