java学习笔记—国际化(41)
国际化:internationalization即I18N。
举例:
本科高校的网站,一般的都有中文和英文两种页面风格。因此将这种根据不同用户群体显示不同的页面风格的方式称之为页面的国际化。
翻译 VS 国际化
翻译:Chrome
国际化:主要做的是页面的显示信息的国际化,至于文件等其他的资源是无法进行国际化。
1 国际化的原理

- 获取用户的本地信息
Locale通过静态属性获取区域对象。
- 准备不同区域国家的需要显示的资源
全部使用properties配置文件进行实现。但是文件名需要按照指定的规则进行书写。
规范: 基本名_语言名.properties
基本名是随意的,语言名是固定可以参考浏览器的语言。
- 根据区域语言信息查找指定的资源进行显示
ResourceBundle 的静态方法static ResourceBundle getBundle(String baseName,
Locale locale)
绑定资源的原理:获取资源基本名和区域语言名锁定资源名。
String getString(String key)
一 体验
1. 编写两个如下的资源文件
greet_zh.properties
hello=\u4F60\u597D
greet_en.properties
hello=Hello
2. 实现一个如下的java类
public static void main(String[] args) {
// 获取本地区域信息
Locale locale = Locale.US;
// 绑定资源
ResourceBundle bundler = ResourceBundle.getBundle("cn.itcast.ps.greet", locale);
System.out.println(bundler.getString("hello"));
}
总结:
如果没有可视化编辑器那么直接使用native2ascii.exe进行中文的转码。
国际化变量
1 日期国际化
DateFormat该类主要提供的是以不同的区域显示不同的日期格式。
根据区域信息格式化和解析日期数据。
static DateFormat getDateInstance(int style, Locale aLocale) à 获取日期实例
static DateFormat getTimeInstance(int style, Locale aLocale) à 获取时间实例
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)à 获取日期和时间
Date parse(String source) à 解析日期
String format(Object obj) à 格式化日期
举例:
获取日期和时间
Long
2013年1月21日 下午04时16分41秒
January , :: PM CST
FULL
2013年1月21日 星期一 下午04时18分19秒 CST
Monday, January , :: PM CST
MEDIUM
-- ::
Jan , :: PM
SHORT
-- 下午4:
// : PM
练习:将以下的字符号串解析为日期对象。
String date = “2013年1月21日 下午4:20”;解析为日期对象。
Long Short
public static void main(String[] args) throws Exception{
//I18NDate();
String date = "2013年1月21日 下午4:20";
Locale locale = Locale.CHINA;
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, locale);
Date new_date = format.parse(date);
System.out.println(new_date);
}
数字国际化
NumberFormat
static NumberFormat getInstance(Locale inLocale) 国际化普通数字
static NumberFormat getCurrencyInstance(Locale inLocale) 国际化货币
static NumberFormat getPercentInstance(Locale inLocale) 国际化百分比
国际化
String format(Object obj)
Number parse(String source)
举例:
public static void main(String[] args) throws Exception{
// 获取国际化普通数字的对象
Locale locale = Locale.CHINA;
NumberFormat format = NumberFormat.getInstance(locale);
String str = format.format(123456.789);
System.out.println(str);
locale = Locale.CHINA;
format = NumberFormat.getCurrencyInstance(locale);
str = format.format(123456.789);
System.out.println(str);
locale = Locale.CHINA;
format = NumberFormat.getPercentInstance(locale);
str = format.format(0.789);
System.out.println(str);
}
练习:将String str = "¥123.7";解析为数字。
public static void main(String[] args) throws Exception{
//I18NNumber();
String str = "¥123.7";
Locale locale = Locale.CHINA;
NumberFormat format = NumberFormat.getCurrencyInstance(locale);
Number num = format.parse(str);
System.out.println(num.doubleValue()*);
}
动态文本国际化
public static void main(String[] args) throws Exception{
String str = "On {0}, a hurricance destroyed {1} houses and caused {2} of damage.";
String date = "Jul 3, 1998 12:30 PM";
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.US);
Date new_date = format.parse(date);
Double money = new Double(1E7);
NumberFormat numfor = NumberFormat.getCurrencyInstance(Locale.CHINA);
String new_str = numfor.format(money);
Object[] os = new Object[]{new_date,new Integer(),new_str}
MessageFormat msg_for = new MessageFormat(str,Locale.CHINA);
String for_str = msg_for.format(os);
System.out.println(for_str);
}
以上的动态文本国际化每次需要将所有需要国际化的数据单独的进行国际化好之后逐一的进行填充。因此比较繁琐,可以使用以下的模式字符串。
public static void main(String[] args) throws Exception{
String pattern = "At {0, time, short} on {0, date}, a hurricance destroyed "
+ "{1} houses and caused {2, number, currency} of damage.";
String datetimeString = "Jul 3, 1998 12:30 PM";
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.US);
Date new_date = format.parse(datetimeString);
Object[] os = new Object[]{new_date,new Integer(),new Double(1E7)};
MessageFormat msg_for = new MessageFormat(pattern,Locale.US);
String for_str = msg_for.format(os);
System.out.println(for_str);
}
案例一:实现登陆的国际化
<body>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="in" %>
<in:setLocale value="${pageContext.request.locale}"/>
<in:setBundle basename="cn.itcast.login.greet" var="bund" scope="page"/>
<form action="">
<table align="center" border="">
<tr>
<td><in:message bundle="${pageScope.bund}" key="name"/></td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td><in:message bundle="${pageScope.bund}" key="psw"/></td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td colspan="">
<input type="submit" value='<in:message bundle="${pageScope.bund}" key="submit"/>'>
<input type="reset" value='<in:message bundle="${pageScope.bund}" key="reset"/>'>
</td>
</tr>
</table>
</form>
</body>
后期在Struts2.x中需要使用struts的国际化标签。
java学习笔记—国际化(41)的更多相关文章
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 20145330第九周《Java学习笔记》
20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...
- 20145330第八周《Java学习笔记》
20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记04--数组
java学习笔记04--数组 数组复制的方法是使用System类提供的arraycopy()方法,其语法如下: System.arraycopy(Object src, int srcPos, Obj ...
- java学习笔记09--反射机制
java学习笔记09--反射机制 什么是反射: 反射是java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取他所有的成员变量和方法并且显示出来 ...
- java学习笔记12--国际化
java学习笔记12--国际化 国际化的操作就是指一个程序可以同时适应多门语言,即:如果现在程序者是中国人,则会以中文为显示文字,如果现在程序的使用者是英国人,则会以英语为显示的文字,也就是说可以通过 ...
- 20145231第二周Java学习笔记
20145231 <Java程序设计>第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客. 第三章:基础语法 知识点比 ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
随机推荐
- FireDAC 汉字字段名称过滤
[FireDAC][Stan][Eval]-107. Invalid character found [ 拼音码 like '%A%' ] 英文字段名称过滤正常 汉字字段名过滤报错. 莫非不支持汉字字 ...
- libcurl 调用curl_easy_getinfo( ) 返回错误码对照
//执行设置好的操作 res = curl_easy_perform(easy_handle); //获取HTTP错误码 ; curl_easy_getinfo(easy_handle, CURLIN ...
- tfrecord
制作自己的TFRecord数据集,读取,显示及代码详解 http://blog.csdn.net/miaomiaoyuan/article/details/56865361
- Python_04-字符串操作
1 字符串的运算 字符串是程序中经常使用的元素,字符串的运算也很多,包括连接两个字符串,取一个字符串中的一部分,称为取子字符串,大小写转换,字符串与数值的转换等. 1.1 字符串的连接 ...
- leetcode 62 不同的路径
描述: m*n的矩阵,从左上角走到右下角,只能向下或向右走. 解决: 简单dp,dp[i][j]表示到i,j这点总共多少种路径. dp[i][j] = dp[i][j - 1] + dp[i - 1] ...
- MD5加密算法原理及其应用
MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...
- 22-python爬虫解决gbk乱码问题
转载自: python爬虫解决gbk乱码问题 今天尝试了下爬虫,爬取一本小说,忘语的凡人修仙仙界篇,当然这样不好,大家要支持正版. 爬取过程中是老套路,先获取网页源代码 # -*- coding: ...
- Java_String_Arrays_Character_BigDecimal_Calendar_Math_System
1.String package cn.itcast_01; /* * Scanner:用于接收键盘录入数据. * * 前面的时候: * A:导包 * B:创建对象 * C:调用方法 * * Sy ...
- util:properties
示例 <util:properties id="db" location="classpath:db.properties" /> 全部属性 功能概 ...
- (最小生成树)Eddy's picture -- hdu -- 1162
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1162 Time Limit: 2000/1000 MS (Java/Others) Memory ...