1. 静态数据国际化
步骤:
(1).建立资源文件,存储所有国家显示的文本的字符串
a)文件: .properties
b)命名: 基础名_语言简称_国家简称.properties
例如:
msg_zh_CN.properties 存储所有中文
msg_en_US.properties 存储所有英文
(2).程序中获取
ResourceBundle类,可以读取国际化的资源文件!
Locale类,代表某一区域,用于决定使用哪一个国际化的资源。
如:创建message资源:
其中US中内容如下:
greeting.title=english
greeting.name=account
greeting.passward=passward
greeting.submit=submit
greeting.common={0} How are you!,today is {1,date}
CN中内容如下:
greeting.title=\u4E2D\u6587
greeting.name=\u7528\u6237\u540D
greeting.passward=\u5BC6\u7801
greeting.submit=\u767B\u5F55
greeting.common={0} \u60A8\u597D!,\u73B0\u5728\u662F {1,time}
1) 在controller中使用:
ResourceBundle rb1 = ResourceBundle.getBundle("com.glodon.resources.message", Locale.US);
ResourceBundle rb2 = ResourceBundle.getBundle("com.glodon.resources.message", Locale.CHINA);
System.out.println("us:"+rb1.getString("greeting.title"));
System.out.println("cn:"+rb2.getString("greeting.title"));
输出:
us:english
cn:中文
2) 格式化使用:
Object[] params = {"gary", new GregorianCalendar().getTime()};
String str1 = new MessageFormat(rb1.getString("greeting.common"),Locale.US).format(params);
System.out.println(str1);
String str2 = new MessageFormat(rb2.getString("greeting.common"),Locale.CHINA).format(params);
System.out.println(str2);
输出:
gary How are you!,today is May 4, 2017
gary 您好!,现在是 17:45:02
3) 自动获取所需语言
从上面可以看到,ResourceBundle通过第二个参数指定使用哪个语言。
可以通过HttpServletRequest的getLocale来获取当前浏览器的语言,如下:
public String china(HttpServletRequest request){
java.util.Locale locale = request.getLocale();
if(locale.equals(java.util.Locale.US)){
System.out.println("Welcome to BeiJing");
}
if(locale.equals(java.util.Locale.CHINA)){
System.out.println("北京欢迎您");
}
有了这个参数就可以自动根据使用者来切换语言。
如果希望能主动控制页面使用哪国语言就不能使用这个了,如一个英国人在中国上网希望看到英文页面。因此改用request的Session,自定义一个属性,如“locale”,
request.setAttribute("locale", java.util.Locale.CHINA);
页面jsp中解析后使用,详见jsp中使用。
4) 在jsp中使用:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!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">
<%
// ResourceBundle bundle = ResourceBundle.getBundle("com.glodon.resources.message", request.getLocale());
ResourceBundle bundle = ResourceBundle.getBundle("com.glodon.resources.message", (java.util.Locale)request.getAttribute("locale"));
%>
<title>international</title>
</head>
<body>
<h3><%=bundle.getString("greeting.title")%></h3>
<table border="0">
<tr>
<td><%=bundle.getString("greeting.name") %></td>
<td><input type="text" name="uname"/></td>
</tr>
<tr>
<td><%=bundle.getString("greeting.passward") %></td>
<td><input type="password" name="pwd"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="<%=bundle.getString("greeting.submit") %>"/></td>
</tr>
</table>
</body>
</html>
当后台是:
request.setAttribute("locale", java.util.Locale.US);
当后台是:
request.setAttribute("locale", java.util.Locale.CHINA);