java国际化简单介绍

国际化(I18N)

l 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。

国际化又称为 i18ninternationalization

l 软件实现国际化,需具备哪些特征:

l 对于程序中固定使用的文本元素,例如菜单栏、导航条等中使用的文本元素、或错误提示信息,状态信息等,需要根据来访者的地区和国家,选择不同语言的文本为之服务。

对于程序动态产生的数据,例如(日期,货币等),软件应能根据当前所在的国家或地区的文化习惯进行显示。

 

将软件中使用文本信息,保存properties属性文件中(key=value

为不同国家编写不同properties属性文件,许多国家properties文件 组成一个资源包

 

ResourceBundle 会根据来访者国家不同,而自动读取不同properties文件

 

资源包中所有properties文件必须具有相同基名basename, basename后可以通过_拼接国家和语言信息 例如:basename_语言_国家.properties

myproperties_zh.properties 中文的配置文件 这里zh就是语言

myproperties_en.properties 英文的配置文件 这里en就是语言

myproperties_zh_CN.properties 中国中文配置文件 这里zh语言 CN国家

myproperties.properties 没有国家和语言信息,默认资源文件,如果来访者的国家和语言的资源文件没有找到,就会读取默认资源文件

Ø 资源文件书写格式

l 资源文件的内容通常采用“关键字=值”的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。

并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,对于像中文这样的非ACSII字符,须先进行编码。(java提供了一个native2ascII命令用于编码)。属性文件是不能保存中文的

 

固定文本的国际化

1、加载srcproperties文件

ResourceBundle bundle = ResourceBundle.getBundle(basename);

2、读取properties文件中内容

String value = bundle.getString(key);

* 也可以在ResourceBundle.getBundle时 传入一个代表国家和地区Locale对象

* ResourceBundle bundle = ResourceBundle.getBundle("info", Locale.CHINA); 指定读取中国配置文件

 

优先级:指定Locale > 系统默认区域和语言 > 资源包默认的

 

Ø 示例  登录页面国际化

 

使用fmt 国际化标签 实现国际化登陆页面

1、将jstljar复制 WEB-INF/lib

2、引用fmt标签库 <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

设置locale

<fmt:setLocale value="${param.locale}"/>

创建ResourceBundle

<fmt:setBundle basename="info" var="bundle" scope="page"/>

显示message

<fmt:message bundle="${bundle}" key="login.info" />

<fmt:message bundle="${bundle}" key="login.username" />

 

日期格式化

DateFormat 类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串。

 

DateFormat 类除了可按国家地区格式化输出日期外,它还定义了一些用于描述日期/时间的显示模式 int 型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,实例化DateFormat对象时,可以使用这些常量,控制日期/时间的显示长度

实例化DateFormat类有九种方式,以下三种为带参形式,下面列出的三种方式也可以分别不带参,或只带显示样式的参数。

getDateInstance(int style, Locale aLocale):以指定的日期显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理时间值部分。

getTimeInstance(int style, Locale aLocale):以指定的时间显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理日期值部分。

getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale):以单独指定的日期显示模式、时间显示模式和本地信息来获得DateFormat实例对象。

 

数字格式化

 

实例化NumberFormat类时可以使用locale对象作为参数也可以不使用下面列出的是使用参数的。

getNumberInstance(Locale locale)以参数locale对象所标识的本地信息来获得具有多种用途的NumberFormat实例对象

getIntegerInstance(Locale locale)以参数locale对象所标识的本地信息来获得处理整数NumberFormat实例对象

getCurrencyInstance(Locale locale)以参数locale对象所标识的本地信息来获得处理货币NumberFormat实例对象

getPercentInstance(Locale locale)以参数locale对象所标识的本地信息来获得处理百分比数值NumberFormat实例对象

 

练习

请创建一个date对象,并把date对象中表示日期部分的时间值,以及表示时间部分的时间值,分别以shortlong模式进行格式化输出(国家设置为中国)。

 

请将时间值:09-11-28 上午102539CST,反向解析成一个date对象。

 

请将整数198,输出为货币形式:$198,并将$198反向解析成整数198

 

请将0.78654321,输出百分比格式,保留两位小数

 

动态文本国际化

允许信息中 将动态数据 抽取出来,使用{0} {1} {2} 占位符进行占位,达到动态生成效果

 

1) MessageFormat.format(pattern,args); 采用默认Locale进行国际化

2) MessageFormat formater = new MessageFormat(pattern,locale); // 执行国家

   formater.format(args); 采用指定Locale进行国际化

 

占位符国际化复杂写法:{0,类型,样式}

 

类型为number 样式 integercurrencypercent

类型为date 样式 full long medium short

类型为timer 样式 full long medium short

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值