关于国际化,目前java项目普遍的解决方案为java.util.ResourceBundle
java.util.ResourceBundle中提供了关键的资源文件国籍化的相关方法:
具体为:
java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale)
该方法需要两个参数,第一个参数为资源文件的路径,第二个为本地对象(国际化的区域)
我们介绍的项目路径为:
那么对于上述的项目,我们资源文件的路径为:local.pro。
属性文件的命名规则为:属性文件前缀(这里为pro)+_+地域+.properties。
目前java提供的地域有:
贴出上述项目的相关代码:
LocalTest.java:
package com.local.test;
import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LocalTest extends HttpServlet {
private static final long serialVersionUID = 1L;
public LocalTest() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ResourceBundle r = ResourceBundle.getBundle("local.pro", request.getLocale());
response.setCharacterEncoding("gbk");
response.getWriter().print(r.getString("hello"));
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
public static void main(String[] args) {
for (Locale locale : Locale.getAvailableLocales()) {
System.out.println(locale+"\t"+locale.getDisplayCountry());
}
}
}
pro_en_US.properties:
hello=hello
pro_zh_CN.properties:
hello=\u60A8\u597D
运行结果(浏览器地域设置为中国):
运行结果(浏览器地域设置为美国):