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 作为超类.所有对象(包括数组)都实现这个 ...
随机推荐
- pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)
PAC自动代理文件格式,教你如何写PAC文件 PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto ...
- java.util.ConcurrentModificationException异常分析
Java在操作ArrayList.HashMap.TreeMap等容器类时,遇到了java.util.ConcurrentModificationException异常.以ArrayList为例,如下 ...
- MVC-READ2
框架设计模式 契约式设计.元编程.元数据驱动设计.管道模型.远程代理模式.提供程序模型:
- IP地址工具类
/// <summary> /// 获取客户端IP地址 /// </summary> /// <returns></returns> public st ...
- Android SDK Manager检查更新时遇到Failed to fetch URL xxxxxxx reason: Connection to xxxxxx的错误的解决办法!
首先说明的是这个问题并不是每个人都存在,但是我和我的一个同学都有这种情况,所以我同学百度了一下,找出了解决办法. 问题描述: 使用Android SDK Manager检查在线更新,提示以下错误: & ...
- SFTP 安装与配置
SFTP 安装与配置 sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH 的一部分,由于这种 ...
- radiobutton 选中的项不能去掉选择的问题
代码如下: RadioButton rbtn = new RadioButton(getApplicationContext()); rbtn.setText(String.valueOf(item. ...
- docker跨主机互联
以下内容只是命令,原理自行百度,google或者官方查阅! 方案一.overlay Consul 三台主机为例(都要安装docker): 192.168.20.20(consul服务) 192.168 ...
- JMS规范简介
一.JMS规范 Java消息服务定义: Java消息服务(Java Message Service)即JMS,是一个Java平台中面向消息中间件的API,用于在两个应用程序之间或分布式系统中发送/接受 ...
- 自定义beans.xml文件实现Spring框架
经过一天的补习,学习文件加载,java反射,JDom等知识,到了晚上终于能够搭出一个基于配置文件的简单spring框架实现! 首先我们先看看这个问题: 下面是两副图左边是项目结构图,右边是UML图: ...