Java web 开发国际化
国际化开发概述:软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。
国际化又称为 i18n:internationalization
1. 国际化的了解
软件实现国际化,需具备哪些特征:
a) 对于程序中固定使用的文本元素,例如菜单栏、导航条等中使用的文本元素、或错误提示信息,状态信息等,需要根据来访者的地区和国家,选择不同语言的文本为之服务。
b) 对于程序动态产生的数据,例如(日期,货币等),软件应能根据当前所在的国家或地区的文化习惯进行显示。
2.固定文本元素的国际化
a。什么是资源包,如何创建资源包和资源文件?
l 对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,并根据不同的国家编写不同的properties文件。这一组properties文件称之为一个资源包。
l 在JavaAPI中提供了一个ResourceBundle 类用于描述一个资源包,并且 ResourceBundle类提供了相应的方法getBundle,这个方法可以根据来访者的国家地区自动获取与之对应的资源文件予以显示。
注意:资源文件的书写格式资源文件的内容通常采用“关键字=值”的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。
并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,对于像中文这样的非ACSII字符,须先进行编码。(java提供了一个native2ascii命令用于编码)。
打开运行
--cmd
--native2ascii
--用户名
--标记以后选中敲回车
实例讲解:登陆案例
运行myeclipse,创建一个包名为com.hbsi.resourse,在包下创建资源文件存放英文MyResource_en.properties和,存放中文MyResource_zh.properties和MyResource.properties
页面代码MyJsp.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJspJSTL.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%-- 设置
<%
Locale locale=new Locale("zh","CN");
request.setAttribute("locale",locale);
%>
<fmt:setLocale value="${locale }"/>
<fmt:setLocale value="zh_CN"/>
--%>
<%--怎么样生成一个资源包 --%>
<%--创建了一个描述资源包的ResourceBundle对象 ,并把该对象以bundle为关键字存储到指定的web作用域中--%>
<fmt:setBundle basename="com.hbsi.resource.MyResource" var="bundle" scope="request"/>
<%--创建一个用于描述资源包的对象,该对象在表前提的范围内有效 --%>
<fmt:bundle basename="com.hbsi.resource.MyResource" prefix="com.hbsi.www.">
<fmt:message key="greetings"></fmt:message>
</fmt:bundle>
<fmt:message key="com.hbsi.www.greetings" bundle="${bundle }"></fmt:message>
<form action="" method="post">
<%--读取bundle对象所描述的资源包中资源文件中的key属性所对应的值 --%>
<fmt:message key="username" bundle="${bundle }" var="name"/> ${name}<input type="text" name="user"><br>
<fmt:message key="password" bundle="${bundle }"/> <input type="text" name="password"><br>
<input type="submit" name="submit" value=" <fmt:message key='submit' bundle='${bundle }'/>">
<br>
</form>
</body>
</html>
3,<fmt:setBundle>和<fmt:bundle>的区别
A.<fmt:setBundle>标签用于根据<fmt:setLocale>标签设置的本地化信息创建一个资源包(ResourceBundle)实例对象,并将其绑定到一个Web域的属性上。<fmt:setBundle>标签的语法格式如下:
<fmt:setBundle basename="basename"
[var="varName"]
[scope="{page|request|session|application}"] />
B.<fmt:bundle>标签与<fmt:setBundle>标签的功能类似,但它创建的ResourceBundle实例对象只在其标签体内有效。<fmt:bundle>标签的语法格式如下:
<fmt:bundle basename="basename"
[prefix="prefix"]>
body content
</fmt:bundle>