JSP设计-第14章(1)

为了了解 JSTL 如何确定应用程序被哪些地区设置支持,我们来看看在基础的 Java 2 Standard Edition 平台中是如何进行本地化的。 java.util 软件包的核心主要有两种类:LocaleResourceBundle

Locale 对象只是用来确定地区设置的:它们结合了 ISO 639 语言代码(例如,ja 代表日文)和 ISO 3166 国家代码(例如,IT 代表意大利),还可能包含一个(非标准化的)变量字符串。ResourceBundle 对象是本地化对象的容器,形成成键/值对。 一个基础资源束定义了一个基础束的名称、一套键以及默认值(通常是英文值,但不是必须的)。

<fmt:bundle><fmt:setBundle> 标签

这两组标签用于资源配置文件的绑定,唯一不同的是 <fmt:bundle> 标签将资源配置文件绑定于它标签体中的显示, <fmt:setBundle> 标签则允许将资源配置文件保存为一个变量,在之后的 工作 可以根据该变量来进行。

根据 Locale 环境的不同将查找不同后缀的资源配置文件,这点在国际化的任何技术上都是一致的,通常来说,这两种标签单独使用是没有意义的,它们都会与 I18N formatting 标签库中的其他标签配合使用。它们的属性和描述如表 9.18 所示:

9.18   <fmt:bundle><fmt:setBundle> 标签属性和说明

属性

描述

basename

资源配置文件的指定,只需要指定文件名而无须扩展名,二组标签共有的属性

var

<fmt:setBundle> 独有的属性,用于保存资源配置文件为一个变量(保存Localizationcontext实例的变量)

scope

变量的作用范围

如果已经使用<c:setLocale>行为或场所配置建立了默认的场所,那么<fmt:setBunndle>行为只加载与所选场所的基本名相对应的资源捆绑文件。

下面看一个示例

<fmt:setLocale value="zh_CN"/>

<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>

该示例将会查找一个名为 applicationMessage_zh_CN.properties 的资源配置文件,来作为显示的 Resource 绑定。

可选的 scope 属性指明缺省资源束设置所应用的 JSP 作用域。如果没有显式地指定该属性,就假定为 page 作用域。

如果指定了可选的 var 属性,那么将把由 basename 属性所标识的资源束赋给该属性值所命名的变量。在这种情况下, scope 属性指定变量的作用域;没有将缺省资源束赋给相应的 JSP 作用域。

如果有两个serbundle,而且这两个都没有使用var属性,那么message标签则会判断从最为合适的属性文件中提取信息。

<fmt:message> 标签

用于信息显示的标签,将显示资源配置文件中定义的信息。它的属性和描述如表 9.19 所示:

9.19   <fmt:message> 标签属性和说明

属性

描述

key

资源配置文件的“键”指定

bundle

若使用 <fmt:setBundle> 保存了资源配置文件,该属性就可以从保存的资源配置文件中进行查找

var

将显示信息保存为一个变量

scope

变量的作用范围

如果指定了 <fmt:message>var 属性,那么将由该标记所生成的文本消息赋给指定的变量,而不是写到 JSP 页面。通常,可选的 scope 属性用来指定由 var 属性指定的变量的作用域。

如果 <fmt:message>查询到一致的KEY,则网页中会显示用问号包围的key(比如,???key???)

 典型的本地化环境
本地化环境
   
en_US
英语,针对美国本地化
en_GB
英语,针对英国本地化
es_MX
西班牙语,针对墨西哥本地化
es_ES
西班牙语,针对西班牙本地化
fr_FR
法语,针对法国本地化
zh_CN
中文,针对中国内地本地化
zh_TW
中文,针对中国台湾本地化
本地化环境的语言代码和国家(地区)代码有时会用连字符(-)分隔,而没有采用下划线(_)。例如,可以是en-US。这两个格式是等价的。不过,本章只使用下划线分隔符。
Java 2 平台上,对属性文件有一个限制,属性文件只能包含ASCII字符.例如不能有中文(utf-8)

由于Java 2 只能处理基于ASCII的属性文件,所以所有Unicode编码文件都要转换一下,使用ASCII转义代码。

如果你使用了IDE或专用的资源编辑器,可以直接使用这些工具生成属性文件。

如果没有能直接生成ASCII属性的资源编辑器,可以使用Unicode编辑器结合一个名为native2ascii的工具来达到目的,这个工具可以在Java 2 SDKbin目录中找到。

例如,考虑Unicode 属性文件app_zh.ucd下面列出这个文件的内容:

newTitle=申請表格

lastName=

firstName=名字

postalCode=郵政編號

password=密碼

submitForm=提交表格

appInfo=申請人資料

可以用Windows XPWindows 2000上的记事本编辑器(或者UNIX/Linux上的任何Unicode编辑器)来编辑创建和修改这个文件,然后将其保存为“Unicode Big Endian”类型。

接下来使用JDK 1.4 SDKnative2ascii工具,使用以下命令把它转换为一个ASCII文件:

native2ascii -encoding UnicodeBig app_zh.ucd app_zh.properties

得到的输出将包含所需的转义代码:

newTitle=/u7533/u8acb/u8868/u683c

lastName=/u59d3

firstName=/u540d/u5b57

postalCode=/u90f5/u653f/u7de8/u865f

password=/u5bc6/u78bc

submitForm=/u63d0/u4ea4/u8868/u683c

appInfo=/u7533/u8acb/u4eba/u8cc7/u6599

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值