JSTL I18N 格式标签库

送分小仙女□ 提交于 2019-12-27 04:53:46

I18N-capable formation tags library.它可以根据发出请求的客户端地域的不同来显示不同的语言。同时还提供了格式化数据和日期的方法。引入该标签库的方法为:

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

I18N格式标签库提供了11标签,这些 标签从功能上可以划分为3类如下:

1)数字日期格式化。formatNumber标签、formatData标签、parseNumber标签、parseDate标签、timeZone标签、setTimeZone标签。

2)读取消息资源。bundle标签、message标签、setBundle标签。

3)国际化。setlocale标签、requestEncoding标签。

 

1.<frm:formatNumber/>标签

该标签依据特定的区域将数字改变为不同的格式来显示。

【语法】:

<frm:formatNumber value=”被格式化的数据”[type=”number|currency|percent”]

                                              [pattern=”pattern”]

                                              [currencyCode=”code”]

                                              [currencySymbol=”symbol”]

                                              [groupingUsed=”true|false”]

                                              [maxIntergerDigits=”maxDigits”]

                                              [minIntergerDigits=”minDigits”]

                                              [maxFractionDigits=”maxDigits”]

                                              [minFractionDigits=”minDigits”]

                                              [var=”name”]

                                              [scope=page|request|session|application]

/>

其中,Type属性的类型见下表:

 

举个例子:

复制代码
  1 <%@ page language="java" pageEncoding="gbk"%>  2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>  4 <html>  5     <head>  6         <title>I18N标签库</title>  7     </head>  8     <body>  9         <h4 align="center"> 10             <c:out value="<frm:number>标签的使用"></c:out> 11         </h4> 12         <hr> 13         <table border=1 cellpadding="0" cellspacing="0" align="center"> 14             <tr align="center"> 15                 <td width="100"> 16                     类型 17                 </td> 18                 <td width="100"> 19                     使用数据 20                 </td> 21                 <td width="100"> 22                     结果 23                 </td> 24                 <td width="300"> 25                     说明 26                 </td> 27             </tr> 28             <tr> 29                 <td> 30                     数字格式化 31                 </td> 32                 <td> 33                     108.75 34                 </td> 35                 <td> 36                     <fmt:formatNumber type="number" pattern="###.#">108.75</fmt:formatNumber> 37                 </td> 38                 <td> 39                     使用pattern可以定义显示的样式。本例设定为###.#小数部分将使用四舍五入法。 40                 </td> 41             </tr> 42             <tr> 43                 <td> 44                     数字格式化 45                 </td> 46                 <td> 47                     9557 48                 </td> 49                 <td> 50                     <fmt:formatNumber type="number" pattern="#.####E0">9557</fmt:formatNumber> 51                 </td> 52                 <td> 53                     使用科学计数法。 54                 </td> 55             </tr> 56             <tr> 57                 <td> 58                     数字格式化 59                 </td> 60                 <td> 61                     9557 62                 </td> 63                 <td> 64                     <fmt:formatNumber type="number">9557</fmt:formatNumber> 65                 </td> 66                 </td> 67                 <td> 68                     使用默认分组。 69                 </td> 70             </tr> 71             <tr> 72                 <td> 73                     数字格式化 74                 </td> 75                 <td> 76                     9557 77                 </td> 78                 <td> 79                     <fmt:formatNumber type="number" groupingUsed="false">9557</fmt:formatNumber> 80                 </td> 81                 <td> 82                     不使用分组。 83                 </td> 84             </tr> 85             <tr> 86                 <td> 87                     数字格式化 88                 </td> 89                 <td> 90                     9557 91                 </td> 92                 <td> 93                     <fmt:formatNumber type="number" maxIntegerDigits="3">9557</fmt:formatNumber> 94                 </td> 95                 <td> 96                     使用位数限定,根据指定的位数显示,其他数字忽略。例如:9不被显示。 97                 </td> 98             </tr> 99             <tr>100                 <td>101                     百分比格式化102                 </td>103                 <td>104                     0.98105                 </td>106                 <td>107                     <fmt:formatNumber type="percent">0.98</fmt:formatNumber>108                 </td>109                 <td>110                     用百分比形式显示一个数据。111                 </td>112             </tr>113             <tr>114                 <td>115                     货币格式化116                 </td>117                 <td>118                     188.88119                 </td>120                 <td>121                     <fmt:formatNumber type="currency">188.8</fmt:formatNumber>122                 </td>123                 <td>124                     将一个数据转化为货币形式输出。125                 </td>126             </tr>127             <tr>128                 <td>129                     存储数据130                 </td>131                 <td>132                     188.88133                 </td>134                 <td>135                     <fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>136                     <c:out value="${money}"></c:out>137                 </td>138                 <td>139                     存储的money的值为${money}140                 </td>141             </tr>142         </table>143     </body>144 </html>
复制代码

显示结果如下:

 

2.<frm:parseNumber>标签

将格式化后的数字、货币、百分比都转化为数字类型。

【语法】:

<fmt:parseNumber value="number" [type=”number|currency|percent”]

                                                       [pattern=”pattern”]

                                                       [parseLocale=”locale”]                       

                                                       [intergerOnly=”true|false”]

                                                       [scope=”page|request|session|application”]

/>

举个例子:

复制代码
 1 <%@ page language="java" pageEncoding="gbk"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 4 <html> 5     <head> 6         <title>I18N标签库</title> 7     </head> 8     <body> 9         <h4>10             <c:out value="<frm:parseNumber>标签的使用"></c:out>11         </h4>12         <hr>13     </body>14     <fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>15     <li>16         格式化前的数据为:17         <c:out value="${money}"></c:out>18         <fmt:parseNumber var="money" type="currency">${money}</fmt:parseNumber>19         <li>20             格式化后的数据为:21             <c:out value="${money}"></c:out>22             <li>23                 可以对格式化的后的数据进行运算:24                 <c:out value="${money+200}"></c:out>25                 <li>26                     对百分比进行格式化98%为:27                     <fmt:parseNumber type="percent">98%</fmt:parseNumber>28 </html>
复制代码

显示结果:

 

3.<fmt:formatDate>标签

该标签主要用来格式化日期和时间。

【语法】:

<fmt: formatDate value=”date” [type=”time|date|both”]

                                    [pattern=”pattern”]

                                    [dateStyle=”default|short|medium|long|full”]

                                    [timeStyle=”default|short|medium|long|full”]

                                    [timeZone=”timeZone”]

                                    [var=”name”]

                                    [scope=”page|request|session|application”]

/>

其中 type 属性类型有:

举个例子:

复制代码
 1 <%@ page language="java" pageEncoding="gbk"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 4 <jsp:useBean id="date" class="java.util.Date"></jsp:useBean> 5 <html> 6     <head> 7         <title>I18N标签库</title> 8     </head> 9     <body>10         <fmt:formatDate value="${date}"></fmt:formatDate>11         <br>12         <fmt:formatDate value="${date}" type="both"></fmt:formatDate>13         <br>14         <fmt:formatDate value="${date}" type="both" dateStyle="default"15             timeStyle="default"></fmt:formatDate>16         <br>17         <fmt:formatDate value="${date}" type="both" dateStyle="short"18             timeStyle="short"></fmt:formatDate>19         <br>20         <fmt:formatDate value="${date}" type="both" dateStyle="long"21             timeStyle="long"></fmt:formatDate>22         <br>23         <fmt:formatDate value="${date}" type="both" dateStyle="full"24             timeStyle="full"></fmt:formatDate>25         <br>26         <fmt:formatDate value="${date}" type="both" dateStyle="full"27             timeStyle="full"></fmt:formatDate>28         <br>29     </body>30 </html>
复制代码

显示结果:

 

4.<fmt:parseDate>标签

<fmt:parseDate>标签主要将字符串类型的时间或日期转化为时间或日期对象。

【语法】:

<fmt:parseDate value=”date” [type=”time|date|both”]

                                                       [pattern=”pattern”]

                                                       [parseLocale=”locale”]

                                                       [dateStyle=”default|short|medium|long|full”]

                                                       [timeStyle=”default|short|medium|long|full”]

                                                       [timeZone=”timezone”]

                                                       [var=”name”]

                                                       [scope=”page|request|session|application”]

/>

举个例子:

复制代码
 1 <%@ page language="java" pageEncoding="gbk"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 4 <jsp:useBean id="date" class="java.util.Date"></jsp:useBean> 5 <html> 6     <head> 7         <title>I18N标签库</title> 8     </head> 9     <body>10         <H4>11             <c:out value="<frm:parseDate>标签的使用"></c:out>12         </H4>13         <hr>14         <fmt:formatDate value="${date}" var="a" type="both" dateStyle="full"15             timeStyle="full"></fmt:formatDate>16         <fmt:parseDate var="b" type="both" dateStyle="full" timeStyle="full">17 ${a}18 </fmt:parseDate>19         <%20             out.println(pageContext.getAttribute("b").toString());21             out.println("<br>");22             out.println(pageContext.getAttribute("b").hashCode());23 %>24     </body>25 </html>
复制代码

显示结果:

 

5. <fmt:setTimeZone>标签

该标签用于设定默认时区,或者将时区存储在指定的JSP范围内。

【语法】

<fmt:setTimeZone value="value" [var="name"] [scope="page|request|session|application"]/>

举个例子:

<fmt:setTimeZone value="EST" scope="session">  中国使用的时区为CST。有关TimeZone的说明在JDK帮助文档的 java.util.TimeZone 类。

6. <fmt:timeZone>标签

该标签主要用于设置标签体内使用的时区。

【语法】

<fmt:timeZone value="timeZone">

……

</fmt:timeZone>

该标签只会应用到标签体内使用的时区,为标签外部不产生影响。

 

读取消息资源主要有4个标签,在这里进行一下小总结:

 

<fmt:buddle> <fmt:setBuddle> <fmt:message> <fmt:param> 四个标签之间的嵌套关系大概是这个样子:

 

复制代码
1 <fmt:buddle basename="name">2     <fmt:message key="key">3         <fmt:param value="value">4         </fmt:param>5     </fmt:message>6 </fmt:buddle>7 8 <fmt:setBuddle basename="name"/>9 <fmt:message key="key">
复制代码

 

第1~6行是一种方式   第8~9行是一种方式。

 

下面进行详细说明。ps:读取的资源文件就是 *.properties 文件。

 

1. <fmt:bundle>标签

 

该标签主要用于将资源文件绑定于它的标签体中的显示。就如上面的第一种方式。

 

【语法】:

 

<fmt:bundle basename=”name”[prefix=”prefix”]>

 

  …标签主题

 

</fmt:bundle>

 

 

2. <fmt:setBundle>标签

 

该标签主要用于绑定资源文件或者把资源文件保存在指定的JSP范围内。

 

【语法】:

 

<fmt:setBundle basename=”name” [var=”name”]

 

                                                  [scope=”page|request|session|application”]

 

/> 

 

 

3.  <fmt:message>标签

 

该标签主要负责读取本地资源文件,从指定的消息文本资源文件中读取键值,并且可以将键值保存在指定的JSP范围内。

 

【语法1】:

 

<fmt:message key=”keyName”[bundle=”bundle”]

 

                                    [scope=”page|request|session|application”]

 

/>

 

【语法2】:

 

<fmt:message key=”keyName”[bundle=”bundle”]

 

                                    [scope=”page|request|session|application”]> 

 

  <fmt:param/>

 

</fmt:message>

 

 

提示:建议此处的bundle使用EL表达式,因为属性bundle的类型为LocalizationContext,而不是一个String类型的URL

 

4. <fmt:param>标签

 

该标签主要用于当<fmt:message>中资源文件中获得键值时,动态的为资源文件中的变量赋值。

 

 

 

【语法1】:

 

 

 

<fmt:param value=”value”/>

 

 

 

【语法2】:

 

 

 

<fmt:param >

 

 

 

标签主体

 

 

 

</fmt:param>

 

 

 

下面看一段代码,理解一下:

 

首先创建一个 mysrc.properties 文件,并存入内容 name="lihui" age="22"。在这里有一个路径问题需要注意,比如将这个文件放在 src/com 文件夹下,那么,引用该文件时,如下下面代码中所示,否则读取到的数据不是正确的,而是 ???name??? 类似的字符串。

 

复制代码
 1 <%@ page language="java" pageEncoding="GBK"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 4 <jsp:useBean id="date" class="java.util.Date"></jsp:useBean> 5 <html> 6     <head> 7         <title>I18N标签库</title> 8     </head> 9     <body>10         <H4>11             <c:out value="资源文件读取示例"></c:out>12         </H4>13         <hr>14         <fmt:bundle basename="com/mysrc">15             <c:out value="从message资源文件中得到的key为name的值为:"></c:out>16             <fmt:message key="name"></fmt:message>17         </fmt:bundle>18         <hr>19         <fmt:setBundle basename="com/mysrc" var="m" />20         <fmt:message key="age" bundle="${m}"></fmt:message>21         ${m}22     </body>23 </html>
复制代码

 

显示如下:

 

 

开 始的时候我是将资源文件直接放在根目录下,结果总是读取不到数据,后来查看了很多人的博客,发现该资源文件必须经过编译后在 WEB-INF/classes 文件夹下才能使用,所以,要把这个文件放在src的某个包中,这样编译之后就会在 classes 文件夹出现了。

 

 

 

在看一个例子:

 

此例中,资源文件mysrc.properties 的内容: test=hello,{0},welcome to my blog. Today is {1}.

 

复制代码
 1 <%@ page language="java" pageEncoding="gbk"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 4 <jsp:useBean id="date" class="java.util.Date"></jsp:useBean> 5 <html> 6     <head> 7         <title>I18N标签库</title> 8     </head> 9     <body>10         <H4>11             <c:out value="<fmt:param>标签的使用"></c:out>12         </H4>13         <hr>14         <fmt:bundle basename="com/mysrc">15             <fmt:message key="test">             16                 <fmt:param value="lixiaohui" />17                 <fmt:param value="${date}" />18             </fmt:message>19         </fmt:bundle>20     </body>21 </html>
复制代码

 

显示结果:

 

 

如果把资源文件中 test 的值设置为: test=hello,{0},welcome to my blog. Today is {1,date}.

 

则指定了第二个动态变量是一个日期类型的对象,这是显示结果为:

 

国际化这个分类中共包含两个标签:用于设定语言地区<fmt:setLocale/>和用于设定请求的字符编码的<fmt:requestEncoding>标签。

1<fmt:setLocale/>标签

<fmt:setLocale>标签用来设定用户语言区域。

【语法】:

<fmt:setLocale value=”locale”[variant=”variant”]

                           [scope=”page|request|session|application”]>

参数名

说明

EL

类型

必须

默认值

value

指定区域代码

String

java.util.Locale

variant

操作系统的类型

String

scope

设定时区的作用范围

String

page

 

 

 

 

 

 

 

 

value属性用来指定使用的语言代码,可以从浏览器的【工具】---Internet选项】---【语言】---【添加】中查看浏览器支持的语言种类及语言代码。例如:中文(zh_cn)、台湾(zh_tw)、香港(zh_mo)等。

举个例子:

 

复制代码
 1 <%@ page language="java" pageEncoding="gbk"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 4 <jsp:useBean id="date" class="java.util.Date"></jsp:useBean> 5 <html> 6     <head> 7         <title>I18N标签库</title> 8     </head> 9     <body>10         <H4>11             <c:out value="<fmt:setlocale>标签的使用"></c:out>12         </H4>13         <hr>14         <fmt:setLocale value="en_us" />15         英文:16         <fmt:formatDate value="${date}" type="both" dateStyle="full"17             timeStyle="full" />18         <hr>19         <fmt:setLocale value="zh_cn" />20         中文:21         <fmt:formatDate value="${date}" type="both" dateStyle="full"22             timeStyle="full" />23         <hr>24         <fmt:setLocale value="zh_TW" />25         中国台湾:26         <fmt:formatDate value="${date}" type="both" dateStyle="full"27             timeStyle="full" />28     </body>29 </html>
复制代码

显示结果:

 

 

2 <fmt:requestEncoding>标签

该标签用于设定请求的编码格式。功能同servletRequest.setCharacterEncoding()方法相同。

【语法】:

<fmt:requestEncoding [value=”charEncoding”]/>

【参数说明】:

value属性用来指定使用的编码集例如:gbkgb2312等。当没有给出value的值时将会自动搜索取寻找合适的编码方式,因此能够很好的解决中文乱码问题。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!