本章目标
理解国际化的主要操作;
可以使用国际化进行文本、日期的格式化操作。
国际化标签库
国际化是程序的重要组成部分,一个程序可以根据所在的区域进行相应信息显示,例如:各个地区的数字、日期显示风格都是不一样的,在JSTL中使用fmt.tld作为格式化标签库的定义文件。
格式化标签库提供的标签
<fmt:setLocale>标签
<fmt:setLocale>标签的主要功能是用来设定用户所在的区域,语法如下:
<fmt:setLocale value="区域编码" [variant="浏览器"] [scope="[page | request | session | application]"]/>
<fmt:setLocale>标签的属性
设置Locale显示
<%@page import="java.util.Date"%> <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>设置 Locale 显示</title> </head> <body> <%//设置一个 page 范围的属性 pageContext.setAttribute("date", new Date()); %> <h3>中文日期显示: <fmt:setLocale value="zh_CN"/> <fmt:formatDate value="${date}"/> </h3> <h3>英文日期显示: <fmt:setLocale value="en_US"/> <fmt:formatDate value="${date}"/> </h3> </body> </html>
效果图:
<fmt:requestEncoding>标签
<fmt:requestEncoding>标签的主要功能是用于设置所有的请求编码,功能与setCharacterEncoding()一样,语法如下:
<fmt:requestEncoding [value="字符集"]/>
范例:设置统一编码
<fmt:requestEncodingvalue="GBK"/>
读取资源文件
在国际化中最重要的组成部分就是资源文件的读取,在JSTL中提供了四个标签用于资源的读取和操作:<fmt:message>、<fmt:param>、<fmt:bundle>、<fmt:setBundle>。
所有的资源文件都是以*.properties为后缀的,所有的内容要按照“key=value”的格式进行编写,在WEB中,资源文件要保存在/WEB-INF/classes文件夹之中。
定义资源文件 —— /WEB-INF/classes/Message.properties
name = chaoyi
# info = 欢迎{0}光临!
info = \u6b22\u8fce{0}\u5149\u4e34\uff01
效果图:
<fmt:bundle>
<fmt:bundle>设置要读取的资源文件名称,语法如下:
<fmt:bundle basename="资源文件名称" [prefix="前置标记"]>
标签体内容
</fmt:bundle>
<fmt:message>
当通过<fmt:bundle>标签指定好了资源文件名称后,就可以使用<fmt:message>标签按照key读取value,语法如下:
<fmt:message key="资源文件的指定key" [bundle="资源文件名称"] [var="存储内容的属性名称"] [scope="[page | request | session | application]"]/>
<fmt:message key="资源文件的指定key" [bundle="资源文件名称"] [var="存储内容的属性名称"] [scope="[page | request | session | application]"]>
<fmt:param value="设置占位符内容"/>
</fmt:message>
读取资源文件
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>读取资源文件</title> </head> <body> <fmt:bundle basename="Message"> <fmt:message key="name" var="nameref"></fmt:message> </fmt:bundle> <h3>姓名:${nameref}</h3> <fmt:bundle basename="Message"> <fmt:message key="info" var="inforef"> <fmt:param value="yike"></fmt:param> </fmt:message> </fmt:bundle> <h3>信息:${inforef}</h3> </body> </html>
效果图:
<fmt:setBundle>
在进行资源文件读取的时候也可以通过<fmt:setBundle>标签设置一个默认的读取资源名称,这样每次在使用<fmt:message>进行信息读取的时候,直接通过bundle设置要读取的资源的属性即可,语法如下:
<fmt:setBundle basename="资源文件名称" [var="保存资源文件内容的属性名称"] [scope="[page | request | session | application]"]/>
设置要读取的资源文件
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>设置要读取的资源文件</title> </head> <body> <fmt:setBundle basename="Message" var="msg" /> <fmt:message key="name" var="nameref" bundle="${msg}"></fmt:message> <h3>姓名:${nameref}</h3> <fmt:message key="info" var="inforef" bundle="${msg}"> <fmt:param value="yike"></fmt:param> </fmt:message> <h3>信息:${inforef}</h3> </body> </html>
效果图:
数字格式化标签
在JSTL中进行数字格式化的操作可以使用<fmt:formatNumber>和<fmt:parseNumber>两个标签完成。<fmt:formatNumber>标签会根据所设置的区域将一个数字进行格式化,语法如下:
<fmt:formatNumber value="数字" [type="[number | currency | percent]"] [pattern="格式化格式"] [currencyCode="货币的ISO代码"] [currencySymbol="货币符号"] [groupingUsed="[true | false]"] [maxIntegerDigits="整数位的最大显示长度"] [minIntegerDigits="整数位的最小显示长度"] [maxFractionDigits="小数位的最大显示长度"] [minFractionDigits="小数位的最小显示长度"] [var="格式化数字的保存属性"] [scope="[page | request | session | application]"]/>
<fmt:formatNumber [type="[number | currency | percent]"] [pattern="格式化格式"] [currencyCode="货币的ISO代码"] [currencySymbol="货币符号"] [groupingUsed="[true | false]"] [maxIntegerDigits="整数位的最大显示长度"] [minIntegerDigits="整数位的最小显示长度"] [maxFractionDigits="小数位的最大显示长度"] [minFractionDigits="小数位的最小显示长度"] [var="格式化数字的保存属性"] [scope="[page | request | session | application]"]> 要格式化的数字</fmt:formatNumber>
<fmt:formatNumber>标签的属性
格式化数字显示
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>格式化数字显示</title> </head> <body> <fmt:formatNumber value="15764865.4484576" maxIntegerDigits="7" maxFractionDigits="3" groupingUsed="true" var="num"></fmt:formatNumber> <h3>格式化数字:${num}</h3> <fmt:formatNumber value="15764865.4484576" pattern="##.###E0" var="num"></fmt:formatNumber> <h3>格式化数字:${num}</h3> </body> </html>
效果图:
<fmt:formatNumber>
<fmt:formatNumber>标签的作用是将一个数字进行格式化,而使用<fmt:parseNumber>可以将一个被格式化的数字进行还原,语法如下:
<fmt:parseNumber value="格式化好的数字" [type="[number | currency | percent]"] [pattern="格式化样式"] [parseLocale="区域编码"] [integerOnly="[true | false]"] [var="存储结果的属性名称"] [scope="[page | request | session | application]"]/>
<fmt:parseNumber value="格式化好的数字" [type="[number | currency | percent]"] [pattern="格式化样式"] [parseLocale="区域编码"] [integerOnly="[true | false]"] [var="存储结果的属性名称"] [scope="[page | request | session | application]"]>
已格式化好的数字
</fmt:parseNumber>
<fmt:parseNumber>标签的属性
数字的反格式化
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>数字的反格式化</title> </head> <body> <fmt:parseNumber value="5,764,865.448" var="num"></fmt:parseNumber> <h3>反格式化数字:${num}</h3> <fmt:parseNumber value="15.765E6" pattern="##.###E0" var="num"></fmt:parseNumber> <h3>反格式化数法:${num}</h3> <fmt:parseNumber value="3.5%" pattern="00%" var="num"></fmt:parseNumber> <h3>反百分比:${num}</h3> </body> </html>
效果图:
日期时间格式化标签
<fmt:formatDate>标签的主要功能是用于日期时间的格式化显示,语法如下:
<fmt:formatDate value="date" [type="[time | date | both]"] [pattern="格式化样式"] [dateStyle="[default | short | medium | long | full]"] [timeStyle="[default | short | medium | long | full]"] [timeZone="时区"] [var="存储结果的属性名称"] [scope="[page | request | session | application]"]/>
<fmt:formatDate>标签的属性
格式化日期时间
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>格式化日期时间</title> </head> <body> <% //在 page 属性范围中保存一个日期 pageContext.setAttribute("dateref", new java.util.Date()); %> <fmt:formatDate value="${dateref}" type="both" dateStyle="default" timeStyle="default" var="date"/> <h3>default 显示日期时间:${date}</h3> <fmt:formatDate value="${dateref}" type="both" dateStyle="short" timeStyle="short" var="date"/> <h3>short 显示日期时间:${date}</h3> <fmt:formatDate value="${dateref}" type="both" dateStyle="medium" timeStyle="medium" var="date"/> <h3>medium 显示日期时间:${date}</h3> <fmt:formatDate value="${dateref}" type="both" dateStyle="long" timeStyle="long" var="date"/> <h3>long 显示日期时间:${date}</h3> <fmt:formatDate value="${dateref}" type="both" dateStyle="full" timeStyle="full" var="date"/> <h3>full 显示日期时间:${date}</h3> <fmt:formatDate value="${dateref}" type="both" pattern="yyyy 年 MM 月 dd 日 mm分 ss秒 SSS 毫秒" var="date"/> <h3>自定义格式显示日期时间:${date}</h3> </body> </html>
效果图:
<fmt:parseDate>
<fmt:formatDate>标签的功能是将一个日期型的对象变为了字符串,而<fmt:parseDate>是将一个字符串的数据变回日期型数据,语法如下:
<fmt:parseDate value="date" [type="[time | date | both]"] [pattern="格式化样式"] [dateStyle="[default | short | medium | long | full]"] [timeStyle="[default | short | medium | long | full]"] [timeZone="时区"] [var="存储结果的属性名称"] [scope="[page | request | session | application]"]/>
<fmt:parseDate>标签的属性
日期的反格式化
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>日期的反格式化</title> </head> <body> <fmt:parseDate value="2014年6月1日 星期日 下午04时41分04秒 CST" type="both" dateStyle="full" timeStyle="full" var="date"></fmt:parseDate> <h3>字符串变为日期:${date}</h3> <fmt:parseDate value="2014 年 06 月 01 日 41分 04秒 477 毫秒" pattern="yyyy 年 MM 月 dd 日 mm分 ss秒 SSS 毫秒" var="date"></fmt:parseDate> <h3>字符串变为日期:${date}</h3> </body> </html>
效果图:
设置时区
<fmt:setTimeZone>标签可以设置显示的时区或者将设置的时区储存到一个属性范围中,语法如下:
<fmt:setTimeZone value="设置的时区" [var="存储时区的属性名称"] [scope="[page | request | session | application]"]/>
设置CCT时区 —— timezone_set.jsp
设置成CCT(中国沿海时间)、HST(夏威夷标准时间)
<fmt:setTimeZone value="CCT" var="tz"/>
<fmt:timeZone>
<fmt:timeZone>可以设置时区,语法如下:
<fmt:timeZone value="设置的时区">
标签体内容
</fmt:timeZone>
设置时区显示
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <html> <head> <title>设置时区显示</title> </head> <body> <% //在 page 属性范围中保存一个日期 pageContext.setAttribute("dateref", new java.util.Date()); %> <fmt:timeZone value="HST"> <fmt:formatDate value="${dateref}" type="both" dateStyle="full" timeStyle="full" var="date"/> </fmt:timeZone> <h3>full 显示日期时间是:${date}</h3> </body> </html>
效果图:
小结
通过国际化显示标签可以方便的完成资源文件的读取,以及对文字、日期、数字的格式化操作。
相关推荐
使用JSTL标签库能够提高JSP页面的可读性和维护性,避免在JSP页面中嵌入大量的Java代码,同时也可以利用JSTL提供的国际化标签库(i18n)进行本地化开发。 在JSTL的早期版本中,由于标签库的资源定位是通过硬编码的...
Struts2 框架提供了强大的标签库和国际化功能,本实验旨在掌握 Struts 2 标签库和国际化功能的使用,并实现用户注册页面的国际化显示。 一、Struts2 标签库 Struts2 框架提供了一个强大的标签库,用于简化 JSP ...
- **国际化标签库(Internationalization Tags)**:用于处理多语言环境。 - **数据库标签库(Database Tags)**:简化与数据库交互的操作。 - **XML 标签库(XML Tags)**:处理XML文档和XPath表达式。 - **...
3. **i18n**:国际化标签库,支持多语言环境。 4. **sql**:SQL标签库,可以执行数据库查询、更新和其他SQL操作。 5. **xml**:XML标签库,用于处理XML文档和XPath表达式。 6. **core**:核心标签库,包含了最基础的...
2. **国际化标签库**:处理多语言支持,URI为`http://java.sun.com/jstl/fmt`,推荐前缀为`fmt`。 3. **XML处理标签库**:处理XML文档,URI为`http://java.sun.com/jstl/xml`,推荐前缀为`x`。 4. **SQL标签库**:...
5. **国际化标签库(I18N Tags)**:支持多语言环境,如`<fmt:message>`用于获取资源包中的消息,`<fmt:formatNumber>`格式化数字等。 在实际应用中,要使用JSTL,首先需要将`jstl.jar`和`standard.jar`添加到项目...
JSTL标准标签库的各个标签详细说明,包含了核心标签库(c:),国际化标签库(fmt:)以及函数标签库(fn).注意:SQL标签库(sql:)以及XML标签库(xml:)不应使用,文档中也未提及
除了基本的国际化标签外,`fmt` 标签库还提供了多种格式化标签,用于处理日期、时间、数字等数据类型。 ##### 3.1 `<fmt:formatDate>` 标签 `<fmt:formatDate>` 标签用于格式化日期和时间。它可以根据设定的区域...
例如,国际化标签库(fmt)用于处理日期、时间、数字的格式化和本地化,SQL标签库则提供了执行SQL查询和操作结果集的能力。 总的来说,JSTL是JSP开发中不可或缺的一部分,通过使用标准标签,开发者可以减少对Java...
它由五个主要的标签库组成,分别是核心标签库、XML标签库、格式化/国际化标签库、数据库标签库以及函数标签库。 1. **核心标签库(Core Tags)**:这是JSTL最基础的部分,提供了用于控制流程、迭代和条件判断的标签...
2. **国际化标签库**:通过fmt:message和fmt:setBundle标签来实现页面的多语言支持,允许开发者轻松创建全球化应用。 3. **HTML标签库**:提供了一组与HTML元素对应的标签,如html:form、html:link等,使HTML代码...
总结,实现Struts2的国际化涉及资源文件的创建、配置Struts2的`struts.xml`、设置locale以及在JSP页面中使用国际化标签库。理解和掌握这些步骤对于开发全球化应用程序至关重要。通过阅读源码和利用相关工具,开发者...
2. **国际化标签库(Format)**:支持日期、时间、数字的格式化和国际化。 3. **XML处理标签库(XML)**:用于XML文档的解析和操作。 4. **SQL标签库**:用于数据库操作,执行查询、更新等SQL语句。 每个标签库都有对应...
3. **国际化标签库(I18n Tags)**:支持多语言环境,提供了设置区域、格式化日期和数字以及处理消息资源的功能,如`<fmt:setLocale>`、`<fmt:message>`和`<fmt:formatDate>`。 4. **格式化标签库(Formatting Tags...
- **国际化标签库**(Internationalization Tag Library):用于处理国际化和格式化问题。 - **SQL标签库**:提供了执行SQL语句的能力。 - **XML标签库**:用于处理XML文档。 - **函数标签库**(Function Tag ...
- **国际化标签库**(I18N Tags):处理多语言环境,如日期和货币格式化。URI为`http://java.sun.com/jstl/fmt`,建议前缀为`fmt`。 - **XML标签库**(XML Tags):处理XML文档的解析和操作。URI为`...
4. **在JSP页面中显示**:在视图层,我们可以使用Struts2的国际化标签库,如`<s:text>`,将键传递给标签,Struts2会自动查找对应的值并显示。 5. **处理用户选择的语言**:用户可以通过URL参数或cookie选择他们的...
国际化标签库(fmt)用于处理国际化文本,包括日期、时间、数字的格式化与解析,以及消息资源的加载。 #### 3. JSTL函数(EL函数) JSTL函数库(fn)提供了一系列EL函数,用于字符串操作、数组和集合处理等功能,...