本博客为原创:综合 尚硅谷(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 对应的资源文件