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属性用来指定使用的编码集例如:gbk、gb2312等。当没有给出value的值时将会自动搜索取寻找合适的编码方式,因此能够很好的解决中文乱码问题。
来源:https://www.cnblogs.com/younggun/p/3197928.html