<fmt:setLocale/>
- 设置Locale关将它保存在某个范围内,默认为page范围。
如:<fmt:setLocale value=“zh_CN” scope=“session”/>
它的作用相当于:
Locale locale = new Locale(“zh”,”CN”);
Session.setAttribute(“javax.servlet.jsp.jstl.fmt.locale.session”,locale);
用于设置要使用的资源文件。如:
<fmt:setBundle basename=“message” var=“变量名” scope=“session”/>
<fmt:bundle/>
用于设置主体使用的资源。即setBundle设置的资源。
<fmt:message/>
读取资源文件中key所对应的值。
<fmt:param/>
嵌套在message中,用户动态的传递参数。
<fmt:requestEncoding/>
用于设置请求的编码字符。<fmt:requestEncoding value=“GBK”/>
等同于
Request.setCharacterEncoding(“GBK”);
设置支持国际化的网页:
第一步:建立两个资源文件为:
message.properties
message_zh_CN.properties
第二步:使用jstl标签。
<fmt:setLocale value=“${param.locale}” scope=“session”/>
<fmt:setBundle basename=“message” scope=“session”/>
第三步:切换。
<a href="index.jsp?locale=zh_CN">中文</a><br/>
<a href="index.jsp?locale=en_US">English</a>
一、Java版国际化
import java.util.Locale;
import java.util.ResourceBundle;
public class I18nDemo {
public static void main(String[] args) {
//参数是:baseName-- 本例指的是资源文件名是: msg**.properties
//ResourceBundle rd = ResourceBundle.getBundle("msg");//读取的是:msg_zh_CN.properties
//ResourceBundle rd = ResourceBundle.getBundle("msg",Locale.US);
//读取的是:msg_en_US.properties
//本例读取的是:msg_zh_CN.properties ---因为是中文系统。按原理,如果没找到对应国家语种的资源文件(如果不存在时,还会根据系统的国家语种再找一次,如果还没有),则是读取的是默认的msg.properties
String str1 = rd.getString("welcome");
String str2 = rd.getString("time");
System.out.println(str1+"----"+str2);
}
}
二、JSP版国际化
<%@page import="cn.hncu.elWeb.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<fmt:setLocale value="zh_CN"/>
<fmt:setBundle basename="msg"/>
<!-- 真正搞国际,应该要把设置Locale和Bundle的代码放在head标签中,页面只负责显示。 -->
</head>
<body>
张三,<fmt:message key="welcome"/><br/>
<fmt:message key="time"/>fddfdfdfdfdfdf
<hr/>
<!-- 相比上一版本,把国家语种用参数进行传递 -->
<a href="?loc=en_US">English</a>
<a href="?loc=zh_CN">中文</a>
<fmt:setLocale value="${param.loc}"/>
<fmt:setBundle basename="msg"/>
张三,<fmt:message key="welcome"/><br/>
<fmt:message key="time"/>fddfdfdfdfdfdf
<hr/>
<!-- 再演示一下多个资源的情况,第二个资源及以后都必须取别名(变量名)。前面(第一个)没取变量名的那个叫默认资源 -->
<fmt:setBundle basename="a" var="aaa" scope="session"/>
<!-- 如果多个页面都要使用,那么得把作用域设成session -->
张三,<fmt:message key="welcome"/><br/>
<fmt:message key="time"/>fd8888dfdf
<br/>
<!-- 如果是从非默认资源中读取,那么得指定资源名称即aaa。如果没有指定名称,那么就是从默认的读取 -->
<fmt:message key="address" bundle="${aaa}"></fmt:message>
<br/>
</body>