fmt 国际化 日期 数字 本地环境 字符编码 本地资源

来源:互联网 发布:网络暴力乔任梁 编辑:程序博客网 时间:2024/06/11 14:54

转载自

点击打开链接

JSTL 中 fmt 的说明

    博客分类: 
  • JSP
jstlfmt 

 

看到 I18N 就应该想到知识“国际化”, I18N formatting 标签库就是用于在 JSP 页面中做国际化的动作。在该标签库中的标签一共有 12 个,被分为了两类,分别是:

q         国际化核心标签: <fmt:setLocale> 、 <fmt:bundle> 、 <fmt:setBundle> 、 <fmt:message> 、 <fmt:param> 、 <fmt:requestEncoding> 。

q         格式化标签: <fmt:timeZone> 、 <fmt:setTimeZone> 、 <fmt:formatNumber> 、 <fmt:parseNumber> 、 <fmt:formatDate> 、 <fmt:parseDate> 。

下面只选择其中常见的一些标签和属性进行介绍。

 

9.5.1 用于设置本地化环境的 <fmt:setLocale> 标签

<fmt:setLocale> 标签用于设置 Locale 环境。它的属性和描述如表 9.17 所示:

表 9.17   <fmt:setLocale> 标签属性和说明

属性

描述

value

Locale 环境的指定,可以是 java.util.Locale 或 String 类型的实例

scope

Locale 环境变量的作用范围(可选)

下面看一个示例:

<fmt:setLocale value="zh_TW"/>

表示设置本地环境为繁体中文。

 

9.5.2 用于资源文件绑定的 <fmt:bundle> 、 <fmt:setBundle> 标签

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

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

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

属性

描述

basename

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

var

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

scope

变量的作用范围

下面看一个示例

<fmt:setLocale value="zh_CN"/>

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

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

 

9.5.3 用于显示资源配置文件信息的 <fmt:message> 标签

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

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

属性

描述

key

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

bundle

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

var

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

scope

变量的作用范围

下面看一个示例:

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

<fmt:bundle basename="applicationAllMessage">

         <fmt:message key="userName" />

         <p>

         <fmt:message key="passWord" bundle="${applicationBundle}" />

</fmt:bundle>

该示例使用了两种资源配置文件的绑定的做法,“ applicationMessage ”资源配置文件利用 <fmt:setBundle> 标签被赋于了变量“ applicationBundle ”,而作为 <fmt:bundle> 标签定义的“ applicationAllMessage ”资源配置文件作用于其标签体内的显示。

q         第一个 <fmt:message> 标签将使用“ applicationAllMessage ”资源配置文件中“键”为“ userName ”的信息显示。

q         第二个 <fmt:message> 标签虽然被定义在 <fmt:bundle> 标签体内,但是它使用了 bundle 属性,因此将指定之前由 <fmt:setBundle> 标签保存的“ applicationMessage ”资源配置文件,该“键”为“ passWord ”的信息显示。

 

9.5.4 用于参数传递的 <fmt:param> 标签

<fmt:param> 标签应该位于 <fmt:message> 标签内,将为该消息标签提供参数值。它只有一个属性 value 。

<fmt:param> 标签有两种使用版本,一种是直接将参数值写在 value 属性中,另一种是将参数值写在标签体内。

 

9.5.6 用于为请求设置字符编码的 <fmt:requestEncoding> 标签

<fmt:requestEncoding> 标签用于为请求设置字符编码。它只有一个属性 value ,在该属性中可以定义字符编码。

 

9.5.7 用于设定时区的 <fmt:timeZone> 、 <fmt:setTimeZone> 标签

这两组标签都用于设定一个时区。唯一不同的是 <fmt:timeZone> 标签将使得在其标签体内的工作可以使用该时区设置, <fmt:setBundle> 标签则允许将时区设置保存为一个变量,在之后的工作可以根据该变量来进行。它们的属性和描述如表 9.20 所示:

表 9.20   <fmt:timeZone> 、 <fmt:setTimeZone> 标签 属性和说明

属性

描述

value

时区的设置

var

<fmt:setTimeZone> 独有的属性,用于保存时区为一个变量

scope

变量的作用范围

 

9.5.8 用于格式化数字的 <fmt:formatNumber> 标签

<fmt: formatNumber > 标 签用于格式化数字。它的属性和描述如表 9.21 所示:

表 9.21   <fmt:formatNumber> 标签属性和说明

属性

描述

value

格式化的数字,该数值可以是 String 类型或 java.lang.Number 类型的实例

type

格式化的类型

pattern

格式化模式

var

结果保存变量

scope

变量的作用范围

maxIntegerDigits

指定格式化结果的最大值

minIntegerDigits

指定格式化结果的最小值

maxFractionDigits

指定格式化结果的最大值,带小数

minFractionDigits

指定格式化结果的最小值,带小数

<fmt:formatNumber> 标签实际是对应 java.util.NumberFormat 类, type 属性的可能值包括 currency (货币)、 number (数字)和 percent (百分比)。

下面看一个示例。

<fmt:formatNumber value="1000.888" type="currency" var="money"/>

该结果将被保存在“ money ”变量中,将根据 Locale 环境显示当地的货币格式。

  1. <fmt:formatNumber value="12" type="currency" pattern="$.00"/> //-- $12.00   
  2.   
  3. <fmt:formatNumber value="12" type="currency" pattern="$.0#"/> //-- $12.0   
  4.   
  5. <fmt:formatNumber value="1234567890" type="currency"/> //-- $1,234,567,890.00(那个货币的符号和当前web服务器的 local 设定有关)   
  6.   
  7. <fmt:formatNumber value="123456.7891" pattern="#,#00.0#"/>// -- 123,456.79   
  8.   
  9. <fmt:formatNumber value="123456.7" pattern="#,#00.0#"/> //-- 123,456.7   
  10.   
  11. <fmt:formatNumber value="123456.7" pattern="#,#00.00#"/>// -- 123,456.70   
  12.   
  13. <fmt:formatNumber value="12" type="percent" /> //-- 1,200% (type 可以是currency、 number、 和percent)。

9.5.9 用于解析数字的 <fmt:parseNumber> 标签

<fmt:parseNumber> 标签用于解析一个数字,并将结果作为 java.lang.Number 类的实例返回。 <fmt:parseNumber> 标签看起来和 <fmt:formatNumber> 标签的作用正好相反。它的属性和描述如表 9.22 所示:

表 9.22   <fmt:parseNumber> 标签属性和说明

属性

描述

value

将被解析的字符串

type

解析格式化的类型

pattern

解析格式化模式

var

结果保存变量,类型为 java.lang.Number

scope

变量的作用范围

parseLocale

以本地化的形式来解析字符串,该属性的内容应为 String 或 java.util.Locale 类型的实例

下面看一个示例。

<fmt:parseNumber value="15%" type="percent" var="num"/>

解析之后的结果为“ 0.15 ”。

 

9.5.10 用于格式化日期的 <fmt:formatDate> 标签

<fmt:formatDate> 标签用于格式化日期。它的属性和描述如表 9.23 所示:

表 9.23   <fmt:formatDate> 标签属性和说明

属性

描述

value

格式化的日期,该属性的内容应该是 java.util.Date 类型的实例

type

格式化的类型

pattern

格式化模式

var

结果保存变量

scope

变量的作用范围

timeZone

指定格式化日期的时区

<fmt:formatDate> 标签与 <fmt:timeZone> 、 <fmt:setTimeZone> 两组标签的关系密切。若没有指定 timeZone属性, 也可以通过 <fmt:timeZone> 、 <fmt:setTimeZone> 两组标签设定的时区来格式化最后的结果。

 

9.5.11 用于解析日期的 <fmt:parseDate> 标签

<fmt:parseDate> 标签用于解析一个日期,并将结果作为 java.lang.Date 类型的实例返回。 <fmt:parseDate> 标签看起来和 <fmt:formatDate> 标签的作用正好相反。它的属性和描述如表 9.24 所示:

表 9.24   <fmt:parseDate> 标签属性和说明

属性

描述

value

将被解析的字符串

type

解析格式化的类型

pattern

解析格式化模式

var

结果保存变量,类型为 java.lang.Date

scope

变量的作用范围

parseLocale

以本地化的形式来解析字符串,该属性的内容为 String 或 java.util.Locale 类型的实例

timeZone

指定解析格式化日期的时区

<fmt:parseNumber> 和 <fmt:parseDate> 两组标签都实现解析字符串为一个具体对象实例的工作,因此,这两组解析标签对 var 属性的字符串参数要求非常严格。就 JSP 页面的表示层前段来说,处理这种解析本不属于份内之事,因此 <fmt:parseNumber> 和 <fmt:parseDate> 两组标签应该尽量少用,替代工作的地方应该在服务器端表示层的后段,比如在 Servlet 中。


所有标签:

Tags   
fmt:requestEncoding 
fmt:setLocale 
fmt:timeZone 
fmt:setTimeZone 
fmt:bundle 
fmt:setBundle 
fmt:message 
fmt:param 
fmt:formatNumber 
fmt:parseNumber 
fmt:formatDate 
fmt:parseDate  

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

jstl fmt 函数大全

主要功能格式化

日期格式(2008年5月5日22点00分23秒)

<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒" />

保留两位小数

<fmt:formatNumber value="123.123456789" pattern="0.00"/>

格式数字(45,678.234)

<fmt:formatNumber type="number" value="45678.2345" />

格式百分比(23%)
<fmt:formatNumber type="percent" value="0.2345" />

 

其他

<fmt:bundle>:资源绑定。除了以前提到过的在web.xml中声明以外,还可以利用此标签。

例<fmt:bundle basename="message"></fmt:bundle>

<fmt:setLocale>:设置locale,主要是用于这种情况,一个中国人在国外,locale是en_US,但想用中文显示。

例:<fmt:setLocal value="zh_CN"/>

<fmt:message>:输出properties文件中的指定内容。

例<fmt:message key="user"/>

<fmt:formatNumber type="number">格式化普通数字
<fmt:formatNumber type="percent">格式化百分比

三种数字类型参数:currency,number,percent

<fmt:parseNumber var="i" type="number" value="45678.2345" />
<c:out value="${i}" escapeXml="false" /> 分析出数字

<fmt:requestEncoding value="GB18030"/> 格式化文本编码

<fmt:formatDate value="${date}" type="both" timeStyle="long" dateStyle="long" />
type="both" 输入日期也同时输出具体时间
timeStyle="long" 时间以“长”格式输出 差别:下午02时06分59秒 与 14:06:59 
dateStyle="long" 日期以“长”格式输出 差别:2006年9月7日 与 2006-9-7

四种长短参数:long,short,medium,full

<fmt:timeZone value="${timezone}"/> 时区偏移,与上面可配合使用:
<fmt:formatDate value="${d}" timeZone="${zn}" type="both" />

<fmt:parseDate var="i" type="date" value="2006-12-11" />
<c:out value="${i}" escapeXml="false" /> 分析出时间


更加细致的讲解:

<fmt:setLocale> 标签用于给定语言环境存储在区域配置变量。

属性:

<fmt:setLocale>一样标签具有以下属性:

属性描述必须默认valueSpecifies a two-part code that represents the ISO-639 language code and an ISO-3166 country code.Yesen_USvariantBrowser-specific variantNoNonescopeScope of the locale configuration variableNoPage

例子:

资源包包含特定于语言环境的对象。资源包包含键/值对。当程序需要特定于语言环境的资源,把所有的共同所有的语言环境中的密钥,但可以有特定的语言环境转换的值。资源包有助于提供内容具体的语言环境。

一个Java资源包文件包含一系列关键到字符串的映射。我们专注于该方法涉及到创建编译的Java类来扩展java.util.ListResourceBundle类。你必须编译这些类文件,并提供给Web应用程序的classpath中可用。

让我们定义一个默认的资源包,如下所示:

package com.yiibai;import java.util.ListResourceBundle;public class Example_En extends ListResourceBundle {  public Object[][] getContents() {    return contents;  }  static final Object[][] contents = {  {"count.one", "One"},  {"count.two", "Two"},  {"count.three", "Three"},  };}

现在,让我们定义我们将使用西班牙语语言环境多一个资源包:

package com.yiibai;import java.util.ListResourceBundle;public class Example_es_ES extends ListResourceBundle {  public Object[][] getContents() {    return contents;  }  static final Object[][] contents = {  {"count.one", "Uno"},  {"count.two", "Dos"},  {"count.three", "Tres"},  };}

让我们来编译上面的类Example.class和Example_es_ES.class,让他们在Web应用程序的类路径中。现在可以使用下面的JSTL标记来显示三个号码如下:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head><title>JSTL fmt:setLocale Tag</title></head><body><fmt:bundle basename="com.yiibai.Example">   <fmt:message key="count.one"/><br/>   <fmt:message key="count.two"/><br/>   <fmt:message key="count.three"/><br/></fmt:bundle><!-- Change the Locale --><fmt:setLocale value="es_ES"/><fmt:bundle basename="com.yiibai.Example">   <fmt:message key="count.one"/><br/>   <fmt:message key="count.two"/><br/>   <fmt:message key="count.three"/><br/></fmt:bundle></body></html>

这将产生以下结果:

One Two ThreeUnoDosTres

0 0