javaWeb_国际化(静态资源)

时间:2022-01-06 13:25:55

1. 静态数据国际化

步骤:

1.建立资源文件,存储所有国家显示的文本的字符串

    a)文件: .properties

    b)命名:  基础名_语言简称_国家简称.properties

        例如:

msg_zh_CN.properties     存储所有中文

            msg_en_US.properties    存储所有英文

 

2.程序中获取

    ResourceBundle类,可以读取国际化的资源文件!

    Locale类,代表某一区域,用于决定使用哪一个国际化的资源。

如:创建message资源:

 javaWeb_国际化(静态资源)

其中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}  

    javaWeb_国际化(静态资源)

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通过第二个参数指定使用哪个语言。

可以通过HttpServletRequestgetLocale来获取当前浏览器的语言,如下:

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("北京欢迎您");  

}

有了这个参数就可以自动根据使用者来切换语言。

如果希望能主动控制页面使用哪国语言就不能使用这个了,如一个英国人在中国上网希望看到英文页面。因此改用requestSession,自定义一个属性,如“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);

 javaWeb_国际化(静态资源)

当后台是:

request.setAttribute("locale", java.util.Locale.CHINA);

 javaWeb_国际化(静态资源)