Java的国际化(i18n)
http://blog.csdn.net/csuliky/article/details/4225800
1. Java国际化简介
Java既然作为一个跨平台的语言就必然要在各种不同的语言环境中使用, 为了解决这个问题Java给我们提供了一个工具类ResourceBundle, 帮助我们实现Java的国际化, 核心的思想就是, 对不同的语言提供一个不同的资源文件.
2. Java国际化的步骤
(1) 当然是编写要实现国际化的主程序.
(2) 定义资源文件, 注意资源文件的定义要符合一定的规范, 规范如下: 如果我们将缺省的资源文件的文件名取名为message.properties, 那么相应的其他语言的资源文件名就是message_语言代码_国家代码.properties. 例如: 我们的语言汉语的语言代码是zh, 国家代码是CN, 所以简体中文的资源文件名就是: message_zh_CN.properties, 英语的语言代码是en, 美国的国家代码是US, 所以美国英语的资源文件就是: message_en_US.properties.
(3) 根据软件的使用环境取得相应的资源文件
(4) 在取得的资源文件中取得Key对应的值.
3. 例子(注意这里的资源文件必须放在classpath的根路径下)
(1) 主程序ParamFormat.java
package test.abu.csdn.tmp;
import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* 演示Java的国际化
* @author Abu
*
*/
public class ParamFormat {
/**
* @param args
*/
public static void main(String[] args) {
// 测试缺省的资源文件
testCustom();
// 测试美国英语的资源文件
testDefault();
}
public static void testDefault() {
// 获得缺省的系统区域
Locale locale = Locale.getDefault();
// 获得资源文件
ResourceBundle rb = ResourceBundle.getBundle("message", locale);
// 获得相应的key值
String greeting = rb.getString("greeting");
String userInfo = rb.getString("userinfo");
String name= "liky";
int age = 18;
Date birth = new Date();
// 格式化参数,注意是一个Object的数组,这意味着可以将任何类型的对象来格式化模板.
Object[] params = {name,age,birth};
// 格式化参数,返回格式后的字符串
String result = MessageFormat.format(userInfo, params);
System.err.println(greeting + result);
}
public static void testCustom() {
// 设置定制的语言国家代码
Locale locale = new Locale("en_US");
// 获得资源文件
ResourceBundle rb = ResourceBundle.getBundle("message", locale);
// 获得相应的key值
String greeting = rb.getString("greeting");
String userInfo = rb.getString("userinfo");
String name= "liky";
int age = 18;
Date birth = new Date();
// 格式化参数,注意是一个Object的数组,这意味着可以将任何类型的对象来格式化模板.
Object[] params = {name,age,birth};
// 格式化参数,返回格式后的字符串
String result = MessageFormat.format(userInfo, params);
System.err.println(greeting + result);
}
}
(2) 缺省的资源文件message.properties(这里使用native2ascii将中文转化成了ISO-8859-1编码.)
greeting /u6B22/u8FCE/u60A8/u7684/u5230/u6765,
userinfo=/u59D3/u540D/: {0}, /u5E74/u9F84/: {1}, /u751F/u65E5/: {2}.
(3) 美国英语的资源文件message_en_US.properties
greeting Welcome my boy,
userinfo=name: {0}, age: {1}, birthday: {2}.
4.总结
其实这就是Java的i18n的本质了, 其他的一些框架例如struts, webwork等的国际化核心都是如此.
Java的国际化(i18n)的更多相关文章
- 国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...
- javaweb学习总结(三十一)——国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...
- Java程序国际化学习代码一
Java程序国际化初识 1.基本思路 Java程序的国际化的思路是将程序中的标签.提示等信息放在资源文件中,程序需要支持哪些国家.语言环境,就对应提供相应的资源文件.资源文件是key-value对,每 ...
- javaweb(三十一)——国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...
- 深入分析JavaWeb Item22 -- 国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同一时候应对世界不同地区和国家的訪问,并针对不同地区和国家的訪问.提供对应的.符合来訪者阅读习惯的页面或数据. 国际化(international ...
- javaweb基础(31)_国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...
- JAVA实现国际化
1 Java国际化的思路 Java程序的国际化的思路是将程序中的标签.提示等信息放在资源文件中,程序需要支持哪些国家.语言环境,就对应提供相应的资源文件.资源文件是key-value对,每个资源文件中 ...
- Java:国际化
Java的国际化: 资源文件的命名可以有如下三种形式:baseName _ language _country.properties baseName _language.properties bas ...
- springMVC项目国际化(i18n)实现方法
SpringMVC项目国际化(i18n)实现方法 按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并 ...
随机推荐
- C#简单的对象交互
在对象的世界里,一切皆为对象;对象与对象相互独立,互不干涉,但在一定外力的作用下对象开始共同努力 对象交互的实例 电视机大家都有吧,依照万物皆对象的思维模式来看,电视机可以是一个类,然后电视机有一些基 ...
- 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置
摘要:FRDM-KE02Z是飞思卡尔公司较为新的微控制器,学习和开发资料较少.从本篇开始会陆续介绍其相关的开发流程,并完成一个小型的工程项目.这是本系列博客的第一篇,主要介绍开发环境IAR for A ...
- bash/shell编程学习(3)
接上节继续, 1. 从键盘读取输入内容 #!/bin/bash read -p 'please input something:' input echo 'your input:' $input 运行 ...
- [LeetCode] Combination Sum IV 组合之和之四
Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...
- Kinect for Windows SDK开发入门(十九):Kinect Fusion
Kinect for Windows SDK1.7中引入了Kinect Fusion功能.在1.8的SDK中对该功能进行了改进和强化,Kinect Fusion能够使得我们使用Kinect f ...
- 关于EventSource的精华
他是keep-alive的连接,服务端持续向这个请求的Reponse发送数据,以"data: "+您的消息+"\n\n"的格式发送,浏览器端会收到您发送的消息. ...
- odoo8.0 win7 64位 安装配置(补遗)
各种参考博客资源--http://www.cnblogs.com/yiguxianyun/p/6256641.html 最开始蛋疼问题的是安装各种site-packages! 云盘里面有些win764 ...
- vue.js之过渡效果-css
概述 vuejs的过渡效果可以让我们的页面元素在出现和消失时实现过渡.官方文档这样描述过渡效果的方式: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Anima ...
- ios小数向上、下取整,计算结果向上、下取整
[摘要:小数背上与整,指小数局部间接进1 x=3.14, ceilf (x)=4 小数背下与整,指间接往失落小数局部 x=3.14,floor(x)=3 盘算效果背上与整 A被除数,B除数 ,(AB- ...
- js导出excel
function inportEx() { $("#btnEx").text("导出中..."); var fugNumber = "";/ ...