java开发中国际化
1 静态文本的国际化,就是比如页面中中文显示用户名就是用户名,用于显示就是 username。
其中静态文件命名遵循:基础名_语言简称_国家简称.properties
需要使用的类是
1)import java.util.Locale; //本地化
2)import java.util.ResourceBundle; //资源加载
对于如何查找语言简称、国家简称可以通过internate选项找到语言。如下图所示
例子如下:
新建两个properties文件存储对应的要国际化的值
msg_zh_CN.properties 文件内容如下
msg_en_US.properties 文件内容如下
测试代码如下
String baseName = "com.huitong.test.bundle.msg"; ResourceBundle bundle = ResourceBundle.getBundle(baseName, Locale.CHINA); System.out.println(bundle.getString("username"));
2 动态内容的国际化:主要包含数字国际化、货币国际化、日期国际化
主要的类对象是:NumberFormat、SimpleDateFormat
2.1 货币国际化,代码如下
2.1.1)将数字货币格式化成字符串
Locale locale = Locale.CHINA; double number = 200; //货币国际化 NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(locale); String result = currencyInstance.format(number ); System.out.println(result);
2.1.2)将字符串格式化成数字,代码如下
Locale locale = Locale.CHINA; String strNumber = "¥200.00"; //货币国际化 NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(locale); Number result; // String result = currencyInstance.format(dnumber ); try { result = currencyInstance.parse(strNumber); System.out.println(result.doubleValue()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }
2.2 数字国际化
将数字货币格式化成字符串
2.2.1)数字格式化成字符串
Locale locale = Locale.CHINA; //数字国际化 NumberFormat numberInstance = NumberFormat.getNumberInstance(locale); double num=2000000.15; String strnum = numberInstance.format(num); System.out.println(strnum);
结果:2,000,000.15
2.2.2)将字符串格式化成数字
Locale locale = Locale.CHINA; //数字国际化 NumberFormat numberInstance = NumberFormat.getNumberInstance(locale); // double num=2000000.15; String strnum = "2,000,000.15"; try { Number result = numberInstance.parse(strnum); System.out.println(result.doubleValue()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }
结果:2000000.15
2.3 日期国际化有两种方法可以做
2.3.1)使用DateFormat,产生的格式是固定的,有DateFormat.FULL, DateFormat.LONG, DateFormat.MEDIUM, DateFormat.SHORT
int dateStyle = DateFormat.MEDIUM; int timeStyle = DateFormat.FULL; Locale aLocale = Locale.CHINA; DateFormat dateTimeInstance = DateFormat.getDateTimeInstance(dateStyle , timeStyle , aLocale ); String result = dateTimeInstance.format(new Date()); System.out.println(result);
结果:2017-4-11 上午08时51分28秒 CST
2.3.2)使用SimpleDateFormat 进行格式化,可以产生指定格式的形式,比较有自主性
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(simpleDateFormat.format(new Date()));
结果:2017-04-11 08:55:20
其中可以使用的格式如下:
-
Letter Date or Time Component Presentation Examples G
Era designator Text AD
y
Year Year 1996
;96
Y
Week year Year 2009
;09
M
Month in year (context sensitive) Month July
;Jul
;07
L
Month in year (standalone form) Month July
;Jul
;07
w
Week in year Number 27
W
Week in month Number 2
D
Day in year Number 189
d
Day in month Number 10
F
Day of week in month Number 2
E
Day name in week Text Tuesday
;Tue
u
Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a
Am/pm marker Text PM
H
Hour in day (0-23) Number 0
k
Hour in day (1-24) Number 24
K
Hour in am/pm (0-11) Number 0
h
Hour in am/pm (1-12) Number 12
m
Minute in hour Number 30
s
Second in minute Number 55
S
Millisecond Number 978
z
Time zone General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
Time zone RFC 822 time zone -0800
X
Time zone ISO 8601 time zone -08
;-0800
;-08:00
3 国际化标签
引入国际化标签:<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
主要的5个标签
//设置本地化对象,为浏览器请求的locale
<fmt:setLocale value="${pageContext.request.locale }"/>
//设置工具类
<fmt:setBundle basename="com.huitong.i18n.msg" var="bund"/>
//获取工具类中的数据,key 就是 properties 文件中的key
<fmt:message bundle="${bund }" key="title" ></fmt:message>
<fmt:formatNumber pattern="0.00" value="100" ></fmt:formatNumber>
<fmt:formatDate pattern="yyyyMMdd" value="<%=new Date() %>"/>
如果觉得有用,想赞助一下请移步赞助页面:赞助一下