ResourceBundle类与jstl在jsp中的国际化

今天第一次听说页面国际化这个词,所以查资料,顺便做了一个小页面,做做记录。

首先是两个资源文件,分别为msg_en_US.properties和msg_zh_CN.properties

显然中文字符是需要转换过来的。

这是使用ResourceBundle类在jsp页面内嵌Java代码的方式

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 2 
 3 <%@page import="java.util.*"%>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6     <head>
 7         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8         <title>国际化</title>
 9         <style type="text/css">
10         div{
11             width: 300px;
12             text-align: center;
13             margin: 0 auto;
14         }
15         </style>
16     </head>
17     
18     <body>
19         <a href="/International/test.jsp?language=zh">简体中文</a>|<a href="/International/test.jsp?language=en">English</a>
20         <%
21             ResourceBundle bund=ResourceBundle.getBundle("msg",request.getLocale());
22             String str=request.getParameter("language");
23             if(str!=null){
24                 if("zh".equals(str)){
25                     bund=ResourceBundle.getBundle("msg",Locale.CHINA);
26                 }
27                 else if("en".equals(str)){
28                     bund=ResourceBundle.getBundle("msg",Locale.US);
29                 } 
30             }
31         %>
32         <div>
33             <h1><%=bund.getString("inf") %></h1>
34             <table>
35                 <tr>
36                     <td><%=bund.getString("name") %>:</td>
37                     <td><input type="text" name="name"/></td>
38                 </tr>
39                 <tr>
40                     <td><%=bund.getString("sex") %>:</td>
41                     <td><input type="text" name="sex"/></td>
42                 </tr>
43                 <tr>
44                     <td><%=bund.getString("age") %>:</td>
45                     <td><input type="text" name="age"/></td>
46                 </tr>
47                 <tr>
48                     <td><%=bund.getString("tel") %>:</td>
49                     <td><input type="text" name="tel"/></td>
50                 </tr>
51             </table><br/>
52             <input type="submit" value="<%=bund.getString("submit")%>" name="submit"/>
53         </div>
54     </body>
55 </html>

  显然,如果页面过多或者页面数据过多,这种方法很不合适。这时候就需要用到<fmt>标签,在使用这个标签的时候需要在lib下导入jstl.jar这个包,然后修改上面的jsp页面,在jsp中加入这个taglib。

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

  再将之前的body修改,这样实现的页面国际化简单明了,易于集成。

<body>
        <fmt:setLocale value="${param.language}"/>    //这里的${param.language}就想当于<%=request.getParameters("language")%>
        <a href="test2.jsp?language=zh_CN">简体中文</a>|
        <a href="test2.jsp?language=en_US">English</a>
        <div>
        <fmt:setbundle basename="msg"/>
            <h1><fmt:message key="inf"/></h1>
            <table>
                <tr>
                    <td><fmt:message key="name"/>:</td>
                    <td><input type="text" name="name"/></td>
                </tr>
                <tr>
                    <td><fmt:message key="sex"/>:</td>
                    <td><input type="text" name="sex"/></td>
                </tr>
                <tr>
                    <td><fmt:message key="age"/>:</td>
                    <td><input type="text" name="age"/></td>
                </tr>
                <tr>
                    <td><fmt:message key="tel"/>:</td>
                    <td><input type="text" name="tel"/></td>
                </tr>
            </table><br/>
            <input type="submit" value="<fmt:message key="submit"/>" name="submit"/>
        </div>
    </body>

 

posted on 2017-07-11 17:46  浪漫杀手  阅读(253)  评论(0编辑  收藏  举报

导航