¨国际化又称为 i18n:internationalization
¨对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,并根据不同的国家编写不同的properties文件。这一组properties文件称之为一个资源包。
  (1)hytc.properties:
  username=\u9ED8\u8BA4\u7528\u6237\u540D
  name=mName
  pass=mPass
  login=mLogin
  reset=mReset
  (2)hytc_zh.properties:
  username=\u7528\u6237\u540D
  name=\u7528\u6237\u540D
  pass=\u5BC6\u7801
  login=\u767B\u5F55
  reset=\u91CD\u7F6E
  (3)hytc_en.properties:
  username=userName
  name=Name
  pass=Pass
  login=Login
  reset=Reset
  
一、基本测试
public class I18NTest {
    @Test
    public void test1(){
        ResourceBundle bundle=ResourceBundle.getBundle("hytc", Locale.CHINA);
        
        String userName=bundle.getString("username");
        
        System.out.println(userName);
    }
}
 
网页中的应用
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
 <div>
        <table>
            <tr>
                <td>
                    <fmt:bundle basename="hytc">
                        <fmt:message key="name"/>
                    </fmt:bundle>
                </td>
                <td>
                    <input type="text" name="name"/>
                </td>
            </tr>
            <tr>
                <td>
                    <fmt:bundle basename="hytc">
                        <fmt:message key="pass"/>
                    </fmt:bundle>
                </td>
                <td>
                    <input type="password" name="pass"/>
                </td>
            </tr>
            <tr>
                <td colspan="2" style="text-align: center;">
                    <fmt:bundle basename="hytc">
                        <fmt:message key="login" var="login" scope="page"/>
                    </fmt:bundle>
                    <fmt:bundle basename="hytc">
                        <fmt:message key="reset" var="reset" scope="page"/>
                    </fmt:bundle>
                    <input type="submit" value="${login}" style="margin-right: 50px"/>
                    <input type="reset" value="${reset}"/>
                </td>
            </tr>
        </table>
    </div>
二、添加前缀
  (1)hytc.properties:
  hytc.test.username=\u9ED8\u8BA4\u7528\u6237\u540D
  hytc.test.name=mName
  hytc.test.pass=mPass
  hytc.test.login=mLogin
  hytc.test.reset=mReset
  (2)hytc_zh.properties:
  hytc.test.username=\u7528\u6237\u540D
  hytc.test.name=\u7528\u6237\u540D
  hytc.test.pass=\u5BC6\u7801
  hytc.test.login=\u767B\u5F55
  hytc.test.reset=\u91CD\u7F6E
  (3)hytc_en.properties:
  hytc.test.username=userName
  hytc.test.name=Name
  hytc.test.pass=Pass
  hytc.test.login=Login
  hytc.test.reset=Reset
网页中的应用
<div>
        <table>
            <tr>
                <td>
                    <fmt:bundle basename="hytc">
                        <fmt:message key="hytc.test.name"/>
                    </fmt:bundle>
                </td>
                <td>
                    <input type="text" name="name"/>
                </td>
            </tr>
            <tr>
                <td>
                    <fmt:bundle basename="hytc">
                        <fmt:message key="hytc.test.pass"/>
                    </fmt:bundle>
                </td>
                <td>
                    <input type="password" name="pass"/>
                </td>
            </tr>
            <tr>
                <td colspan="2" style="text-align: center;">
                    <fmt:bundle basename="hytc" prefix="hytc.test.">
                        <fmt:message key="login" var="login" scope="page"/>
                    </fmt:bundle>
                    <fmt:bundle basename="hytc" prefix="hytc.test.">
                        <fmt:message key="reset" var="reset" scope="page"/>
                    </fmt:bundle>
                    <input type="submit" value="${login}" style="margin-right: 50px"/>
                    <input type="reset" value="${reset}"/>
                </td>
            </tr>
        </table>
    </div>
三、占位符使用
在.properties文件中添加以下内容
msg=\u4F60\u597D {0}\! {1}
应用:
 
 <div>
        <fmt:message key="msg" bundle="${bname }">
            <fmt:param value="zsf"/>
            <fmt:param>哈哈</fmt:param>
        </fmt:message>
    </div>
 
、数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)
¨在JSTL之中的国际化标签主要包括<fmt:setLocale>、<fmt:bundle>、<fmt:setBundle>、<fmt:message>等。
<fmt:setLocale>:指定Locale环境。
<fmt:bundle>:指定消息资源使用的文件。
<fmt:setBundle>:设置消息资源文件。

<fmt:message>:显示消息资源文件中指定key的消息,支持带参数消息

五、标签详解:
(1)<fmt:setLocale>

<fmt:setLocale>标签用于在JSP页面中显式地设置用户的本地化信息,并将设置的本地化信息以Locale对象的形式保存在某个Web域中,其在Web域中的属性名称为“javax.servlet.jsp.jstl.fmt.locale”。使用<fmt:setLocale>标签设置本地化信息后,国际化标签库中的其他标签将使用该本地化信息,而忽略客户端浏览器传递过来的本地信息。

<fmt:setLocale value="locale"

[variant="variant"]

[scope="{page|request|session|application}"] />

(2)<fmt:setBundle>

<fmt:setBundle>标签用于根据<fmt:setLocale>标签设置的本地化信息创建一个资源包(ResourceBundle)实例对象,并将其绑定到一个Web域的属性上。

标签的语法格式如下:

<fmt:setBundle basename="basename"

[var="varName"]

[scope="{page|request|session|application}"] />

(3)<fmt:bundle>标签

<fmt:bundle>标签与<fmt:setBundle>标签的功能类似,但它创建的ResourceBundle实例对象只在其标签体内有效。

<fmt:bundle basename="basename“ >

body content

</fmt:bundle>

(4)<fmt:message>标签

<fmt:message>标签用于从一个资源包中读取信息并进行格式化输出。

<fmt:message key="messageKey"

[bundle="resourceBundle"]

[var="varName"]     [scope="{page|request|session|application}"] />

(5)<fmt:param>标签

<fmt:param>标签用于为格式化文本串中的占位符设置参数值,它只能嵌套在<fmt:message>标签内使用。

语法1,用value属性指定参数值:

<fmt:param value="messageParameter" />

语法2,在标签体中指定参数的值的情况:

<fmt:param>

body content

</fmt:param>

(6)<fmt:formatDate>标签

<fmt:formatDate>标签用于对日期和时间按本地化信息进行格式化,或对日期和时间按化为JSP页面作者自定义的格式进行格式化。语法格式如下:

<fmt:formatDate value="date"

[type="{time|date|both}"]

[dateStyle="{default|short|medium|long|full}"]

[timeStyle="{default|short|medium|long|full}"]

[pattern="customPattern"]

[timeZone="timeZone"]

[var="varName"]

[scope="{page|request|session|application}"] />

(7)<fmt:parseDate>标签

<fmt:parseDate>标签与<fmt: formatDate >标签的作用正好相反,它用于将一个表示日期和时间的字符串解析成java.util.Date实例对象.

语法1,没有标签体的情况:

<fmt:parseDate value="dateString"

[type="time|date|both"]

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

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

[pattern="customPattern"]

[timeZone="timeZone"]

[parseLocale="parseLocale"]

[var="varName"]

[scope="{page|request|session|application}"] />

(8)<fmt:formatNumber>标签

<fmt:formatNumber>标签用于将数值、货币或百分数按本地化信息进行格式化,或者按JSP页面作者自定义的格式进行格式化。

<fmt:formatNumber value="numericValue"

[type="{number|currency|percent}"]

[pattern="customPattern"]

[currencyCode="currencyCode"]

[currencySymbol="currencySymbol"]

[groupingUsed="{true|false}"]

[maxIntegerDigits="maxIntegerDigits"]

[minIntegerDigits="minIntegerDigits"]

[maxFractionDigits="maxFractionDigits"]

[minFractionDigits="minFractionDigits"]

[var="varName"]

[scope="{page|request|session|application}"] />

(9)<fmt:parseNumber>标签

<fmt:parseDate>标签与<fmt: formatNumber >标签的作用正好相反,它用于将一个按本地化方式被格式化后的数值、货币或百分数解析为数值

语法1,没有标签体的情况:

<fmt:parseNumber value="numericValue"

[type="{number|currency|percent}"]

[pattern="customPattern"]

[parseLocale="parseLocale"]

[integerOnly="{true|false}"]

[var="varName"

[scope="{page|request|session|application}"] />

六、日期应用的案例

<div>
        
            <%
                request.setAttribute("date", new Date(System.currentTimeMillis()) );
             %>
              <!-- 1.日期格式输出  -->
             <fmt:formatDate value="${date }"/><br/>
             <!-- 2.日期格式输出   时间格式 9:49:34 AM -->
             <fmt:formatDate value="${date }" type="time"/><br/>
             <!-- 2.日期格式输出   日期格式Mar 31, 2015 -->
             <fmt:formatDate value="${date }" type="date"/><br/>
             <!-- 2.日期格式输出  日期加时间格式:Mar 31, 2015 9:49:34 AM -->
             <fmt:formatDate value="${date }" type="both"/><br/>
             <!-- 3.日期格式输出  日期加时间格式:Mar 31, 2015 9:49:34 AM  short|medium|long|full -->
             <fmt:formatDate value="${date }" type="both" dateStyle="short"/><br/>
             <fmt:formatDate value="${date }" type="both" dateStyle="medium"/><br/>
             <fmt:formatDate value="${date }" type="both" dateStyle="long"/><br/>
             <fmt:formatDate value="${date }" type="both" dateStyle="full"/><br/>
             <!-- 4.日期格式输出  日期加时间格式:Mar 31, 2015 9:49:34 AM  short|medium|long|full -->
             <fmt:formatDate value="${date }" type="both" timeStyle="short"/><br/>
             <fmt:formatDate value="${date }" type="both" timeStyle="medium"/><br/>
             <fmt:formatDate value="${date }" type="both" timeStyle="long"/><br/>
             <fmt:formatDate value="${date }" type="both" timeStyle="full"/><br/>
             <!-- 5.日期格式输出  -->
             <fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/><br/>
             <fmt:formatDate value="${date }" pattern="yyyy年MM月dd日 HH时mm分ss秒"/><br/>
            
             <!-- 时区 -->
             <%
                 TimeZone tz=TimeZone.getDefault();
                 request.setAttribute("tz", tz);
              %>
              
              <fmt:formatDate value="${date }" timeZone="${tz }" var="st" scope="page"/>
              直接使用:
              ${st}
    </div>

  <!-- 日期处理 -->
      <fmt:parseDate var="t1" pattern="yyyy-MM-dd HH:mm:ss">2015-3-31 10:36:47</fmt:parseDate>
      <fmt:parseDate var="t2" value="2015-3-31 10:36:47" pattern="yyyy-MM-dd HH:mm:ss"/>
      
      <!-- 输出 -->
      1.${t1}
      <br/>
      2.${t2}

七、数字转换的案例

<!-- 数字处理 -->
      <!-- 1.钱-->
      <fmt:formatNumber value="12"/>
      <br/>
      <fmt:formatNumber value="12" type="currency"/>
      <br/>
      <fmt:formatNumber value="12" type="currency" currencySymbol="$"/>
      <fmt:formatNumber value="12" type="currency" currencySymbol="¥"/>
     <br/>
     <%
        //输出所有国家的货币的编码与符号
        Currency china = Currency.getInstance(Locale.CHINA);
        String code = china.getCurrencyCode();
        String symbol= china.getSymbol();
        
        pageContext.setAttribute("code", code);
        pageContext.setAttribute("symbol", symbol);
       
      %>
      <br/>
      编码:${code},符号:${symbol}
      <br/>
      <fmt:formatNumber value="12" type="currency" currencyCode="${code}"/>
      
      
        <%
        //输出所有国家的货币的编码与符号
        Currency riben = Currency.getInstance(Locale.JAPAN);
        String rcode = riben.getCurrencyCode();
        String rsymbol= riben.getSymbol();
        
        pageContext.setAttribute("rcode", rcode);
        pageContext.setAttribute("rsymbol", rsymbol);
       
      %>
      <br/>
      编码:${rcode},符号:${rsymbol}
      <br/>
      <fmt:formatNumber value="12" type="currency" currencyCode="${rcode}" currencySymbol="${rsymbol }"/>
      
      
      <br/>
      <h1>百分比</h1>
        1:<fmt:formatNumber value="0.183856" type="percent" maxIntegerDigits="2" maxFractionDigits="3"/>
        
        <h1>数字</h1>
        2:<fmt:formatNumber value="0.12" type="number" var="n" scope="page"/>
        <br/>
        ${n}
        
      <h1>自定义的格式</h1>
      <!-- 自己查数字的api 看这个格式什么含义 -->
       1:<fmt:formatNumber value="1101.183856" pattern="#,#00.0#"/>
        
     <h2>parseNumber</h2>
     <!-- 把百分比转换成数字 -->
     <fmt:parseNumber value="12%" type="percent"/>
     <br/>
     <fmt:parseNumber value="$12" type="currency" parseLocale="<%=Locale.US %>" var="sn" scope="page"/>
     
     <br/>
     ${sn }

JavaWeb学习记录(二十一)——国际化处理的更多相关文章

  1. javaweb学习总结(三十一)——国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  2. javaweb学习总结(二十一)——JavaWeb的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  3. javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)

    一:servlet开发入门 servlet是sun公司一门开发动态web资源的技术,下面编写一个servlet入门程序: 1:在tomcat服务器webapps目录下新建firstServlet目录, ...

  4. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  5. 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用

    目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...

  6. Material Calendar View 学习记录(二)

    Material Calendar View 学习记录(二) github link: material-calendarview; 在学习记录一中简单翻译了该开源项目的README.md文档.接下来 ...

  7. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  8. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  9. 2.VUE前端框架学习记录二

    VUE前端框架学习记录二:Vue核心基础2(完结)文字信息没办法描述清楚,主要看编码实战里面,有附带有一个完整可用的Html页面,有需要的同学到脑图里面自取.脑图地址http://naotu.baid ...

  10. (C/C++学习笔记) 二十一. 异常处理

    二十一. 异常处理 ● 异常的概念 程序的错误通常包括:语法错误.逻辑错误.运行异常. 语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译.连接时由编译器指出. 逻辑错误是指程序能顺利运行 ...

随机推荐

  1. C++-指针和引用的区别

    1,不存在空引用,指针可以为空 2,引用更高效,使用前不需要测试是否为空 3,指针可以被赋给别的对象,引用则不可以更改 总之,在对象有可能什么也不指向或者指向不同的对象的时候应该使用指针.

  2. HQL查询及Hibernate对c3p0连接池的支持

    //HQL查询 // auto-import要设置true,如果是false,写HQL时要指定类的全名 //查询全部列 Query query = session.createQuery(" ...

  3. 利用K2和Microsoft Dynamics CRM构建业务App的5大理由

    Microsoft Dynamics CRM提供了一个绝佳的客户关系管理平台,使您能够创建各种以客户为中心的解决方案.然而,通过将K2的企业业务流程功能与Microsoft Dynamics CRM相 ...

  4. 自己搭建Wifi Pineapple Mark V

    创业搞得自己很累,不过一切都是值得的.抽空写下文章,确实好久未更新了. 前段时间由于项目需要,所以就折腾了下wifi pineapple.时间间隔有点久,根据回忆记录下. 淘宝货:TP-Link TL ...

  5. vector 初始化

    //数组初始化vector int iarray[]={1,2,3,4,5,6,7,8,9,0}; //count: iarray数组个数 size_t count=sizeof(iarray)/si ...

  6. PHP_Session

    Session有12个函数分别是: 01 session_start:  初始 session 02 session_destroy: 结束 session 03 session_unset: 释放s ...

  7. Android绘图之渐隐动画

    实现了一个有趣的小东西:使用自定义View绘图,一边画线,画出的线条渐渐变淡,直到消失.效果如下图所示: 用属性动画或者渐变填充(Shader)可以做到一笔一笔的变化,但要想一笔渐变(手指不抬起边画边 ...

  8. Windows 7下安装部署NodeJs

    第一步  安装NodeJs http://nodejs.org/download/ 下载windows版本的msi文件,双击进行安装即可.安装完毕,默认安装路径为C:\Program Files\no ...

  9. Inno Setup入门(十一)——完成安装后执行某些程序

    Inno Setup入门(十一)——完成安装后执行某些程序 2011-02-16 16:24:23|  分类: Inno Setup |  标签:inno  setup   |举报 |字号 订阅   ...

  10. C++学习笔记35:函数模板

    函数模板 函数模板的目的 设计通用的函数,以适应广泛的数据型式 函数模板的定义格式 template<模板型式参数列表>返回值型式 函数名称(参数列表): 原型:template<c ...