本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.Web 应用程序的国际化

  实现 web 应用国际化有两种方式

  1)针对不同语言和地区的用户开发出不同的 JSP 网页版本,当用户请求资源时,根据请求消息中携带的本地信息为用户提供合适的版本

  2)将对本地环境敏感的资源数据(例如:错误提示信息,菜单文字等)从网页中分离出来,放在 .properties 属性资源文件中。对于应用程序中的数值,货币和日期/时间等本地敏感数据,可以通过占位符的方式设置它们的格式类型和格式模式。

2.获取 web 应用中的本地信息

  1)要实现 web 应用的国际化,首先要获得客户端浏览器的本地信息。

  2)在 Servlet 程序中,调用 HttpServletRequest 对象的 方法获得代表客户端本地信息的 Locale 对象:

    ① getLocale():返回代表客户端的首选本地信息的 Locale 对象

    ② getLocales():返回一个包含客户端支持的所有本地信息的 Locale 对象的 Enumeration 对象,这些Locale 对象按照客户端支持的所有本地信息的优先级在集合中一次排列

3.国际化格式标签简介

     1)<fmt:bundle>标签用于绑定数据源.properties文件(基名): <fmt:bundle basename="源文件名(且不能带后缀哦)" prefix="">  语句,代码等 </fmt:bundle>

     2)<fmt:message>标签用于从指定的资源文件中把指定的键值取来: <fmt:message key="" [var="varname"] [bundle=""] [scope="page|..."] />  如果用到var的话就不会在页面直接输出,而需要用到<c:out>标签来进行页面 的输出

     3)<fmt:message>必须和<fmt:bundle >搭配使用

       4)<fmt:message>标签可以配合<fmt:param>标签来进行设定,<fmt:message>标签指向键的动态值

       5)<fmt:setBundle>标签用于设置默认的数据来源:

       6)<fmt:formatNumber>标签用于根据设定的区域将数据格式化输出;

       7)<fmt:formatDate>标签用于格式化输出日期和时间;

       8)<fmt:parseDate>标签用于把字符串类型的日期和时间转换成日期型数据类型;

       9)<fmt:setTimeZone>标签用于设定默认的时区;

     10)<fmt:timeZone>标签用于设定在本签体内有效的时区

jsp

 <%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <%
Date date = new Date();
request.setAttribute("date", date);
request.setAttribute("salary", 12345.78); %> <fmt:setBundle basename="i18n"/>
<fmt:message key="date"></fmt:message>
<fmt:formatDate value="${date}"/>
<fmt:message key="salary"></fmt:message>
<fmt:formatNumber value="${salary}"></fmt:formatNumber>
<br><br> <a href="">English</a>
<a href="">中文</a> </body>
</html>

4.关于国际化的总结
  1)关于国际化和本地化

    本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯。

    国际化:软件开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。

  2)随用户区域信息而变化的数据称为本地信息敏感数据。例如数字,货币等数据

  3)相关API

    DateFormat  和 SimpleDateFormat

    NumberFormat

   MessageFormat

    ResourceBundle

  4)关于国际化资源文件

    ① 必须提供 基名.properties 文件 和 基名_语言代码_国家代码.properties 文件

    ② 相同的基名 的资源文件必须有相同的key

    ③ 可能使用 native2ascii 工具把非asc 码转化为 asc 码

  5)关于国际化资源文件

    ① 可以使用request.getLocale() 获取locale对象

    ② 可以使用JSTL 的fmt标签完成国际化,后面使用框架提供的标签完成

    ③  实现"中文"  “英文”的切换:

      >提供两个超链接。携带不懂的变量值

      >根据变量值确定对应的Locale 对象

      >把 Locale 对象放入 session中

      > 绑定Locale 对应的资源文件

[原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结的更多相关文章

  1. [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. [原创]java WEB学习笔记41:简单标签之带属性的自定义标签(输出指定文件,计算并输出两个数的最大值 demo)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. [原创]java WEB学习笔记51:国际化 概述,API 之 locale类,dataFormat类,numberFormat类, MessageFormat类,ResourceBundle 类

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. [原创]java WEB学习笔记69:Struts2 学习之路-- 消息处理与国际化,概述,配置国际资源文件,访问国际化消息,通过超链接切换语言

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 一 mybatis快速入门

    什么是MyBatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索. MyBatis可以使用简 ...

  2. mysql 密码篇

    通过MySQL命令行,可以修改MySQL数据库的密码,下面就为您详细介绍该MySQL命令行,如果您感兴趣的话,不妨一看. 格式:mysqladmin -u用户名 -p旧密码 password 新密码 ...

  3. 查看linux库文件32位还是64位

    查看linux库文件32位还是64位 分类: linux2014-09-25 09:46 238人阅读 评论(0) 收藏 举报 objdump -a  *.a objdump -a  *.so

  4. 创建QT CREATOR对话框报错 linux QT Creator :-1: error: cannot find -lGL

    装完QT5.4 及 QT Creator3.3 后 创建第一个QT Widgets Application(相当于窗体) 应用程序 报如上错误. 执行 sudo apt-get install lib ...

  5. Bluetooth SDP介绍

    目录 1. 概念 2. 服务记录(Service Record) 3. 服务属性(Service Attribute) 4. 服务类(Service Class) 5. 服务查找 5.1 UUID 5 ...

  6. linux OSlab4 添加自定义系统调用

    http://blog.csdn.net/ly01kongjian/article/details/8947285 http://www.cnblogs.com/hoys/archive/2011/0 ...

  7. Archiver 浅析

    归档是一个过程,即用某种格式来保存一个或多个对象,以便以后还原这些对象.通常,这个过程包括将(多个)对象写入文件中,以便以后读取该对象. 两种归档数据的方法:属性列表和带键值的编码. 属性列表局限性很 ...

  8. Qt 自定义 滚动条 样式(模仿QQ)

    今天是时候把软件中的进度条给美化美化了,最初的想法就是仿照QQ. 先前的进度条是这样,默认的总是很难受欢迎的:美化之后的是这样,怎么样?稍微好看一点点了吧,最后告诉你实现这个简单的效果在Qt只需要加几 ...

  9. Delphi Dll示例

    //MyInt.pas unit MyInt; interface {$IFNDEF MYLIB} function MyAdd(a,b:integer):integer ;stdcall; {$EN ...

  10. PushKit和传统长连接方式的比较

    iOS and PushKit This post will cover basic concepts for VoIP apps on iOS. I will not post any code ( ...