directory search
JSP 基础教程 JSP 开发环境搭建 JSP 结构 JSP 生命周期 JSP 语法 JSP 指令 JSP 动作元素 JSP 隐式对象 JSP 客户端请求 JSP 服务器响应 JSP HTTP 状态码 JSP 表单处理 JSP 过滤器 JSP Cookies 处理 JSP Session JSP 文件上传 JSP 日期处理 JSP 页面重定向 JSP 点击量统计 JSP 自动刷新 JSP 发送邮件 JSP 高级教程 JSP 标准标签库(JSTL) <c:out> 标签 <c:set> 标签 <c:remove> 标签 <c:catch> 标签 <c:if> 标签 <c:choose> <c:import> 标签 <c:forEach> <c:param> 标签 <c:redirect> 标签 <fmt:formatNumber>标签 <fmt:parseNumber> 标签 <fmt:formatDate> 标签 <fmt:parseDate> 标签 <fmt:bundle> 标签 <fmt:setLocale> 标签 <fmt:setBundle> 标签 <fmt:timeZone> 标签 <fmt:setTimeZone> 标签 <fmt:message> 标签 <fmt:requestEncoding> 标签 <sql:setDataSource> 标签 <sql:query> 标签 <sql:update> 标签 <sql:param> 标签 <sql:dateParam> 标签 <sql:transaction> 标签 <x:out> 标签 <x:parse> 标签 <x:set> 标签 <x:if> 标签 <x:forEach> 标签 <x:choose> <x:transform> 标签 <x:param> 标签 fn:contains()函数 fn:containsIgnoreCase()函数 fn:endsWith()函数 fn:escapeXml()函数 fn:indexOf()函数 fn:join()函数 fn:length()函数 fn:replace()函数 fn:split()函数 fn:startsWith()函数 fn:substring()函数 fn:substringAfter()函数 fn:substringBefore()函数 fn:toLowerCase()函数 fn:toUpperCase()函数 fn:trim()函数 JSP 连接数据库 JSP XML 数据处理 JSP JavaBean JSP 自定义标签 JSP 表达式语言 JSP 异常处理 JSP 调试 JSP 国际化
characters

JSP 国际化


在开始前,需要解释几个重要的概念:

  • 国际化(i18n):表明一个页面根据访问者的语言或国家来呈现不同的翻译版本。
  • 本地化(l10n):向网站添加资源,以使它适应不同的地区和文化。比如网站的印度语版本。
  • 区域:这是一个特定的区域或文化,通常认为是一个语言标志和国家标志通过下划线连接起来。比如"en_US"代表美国英语地区。

如果想要建立一个全球化的网站,就需要关心一系列项目。本章将会详细告诉您如何处理国际化问题,并给出了一些例子来加深理解。

JSP容器能够根据request的locale属性来提供正确地页面版本。接下来给出了如何通过request对象来获得Locale对象的语法:

java.util.Locale request.getLocale() 

检测Locale

下表列举出了Locale对象中比较重要的方法,用于检测request对象的地区,语言,和区域。所有这些方法都会在浏览器中显示国家名称和语言名称:

序号 方法 & 描述
1 String getCountry() 返回国家/地区码的英文大写,或 ISO 3166 2-letter 格式的区域
2 String getDisplayCountry() 返回要显示给用户的国家名称
3 String getLanguage() 返回语言码的英文小写,或ISO 639 格式的区域
4 String getDisplayLanguage() 返回要给用户看的语言名称
5 String getISO3Country() 返回国家名称的3字母缩写
6 String getISO3Language() 返回语言名称的3字母缩写

实例演示

这个例子告诉我们如何在JSP中显示语言和国家:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
   //获取客户端本地化信息
   Locale locale = request.getLocale();
   String language = locale.getLanguage();
   String country = locale.getCountry();
%>
<html>
<head>
<title>Detecting Locale</title>
</head>
<body>
<center>
<h1>Detecting Locale</h1>
</center>
<p align="center">
<% 
   out.println("Language : " + language  + "<br />");
   out.println("Country  : " + country   + "<br />");
%>
</p>
</body>
</html>

语言设置

JSP可以使用西欧语言来输出一个页面,比如英语,西班牙语,德语,法语,意大利语等等。由此可见,设置Content-Language信息头来正确显示所有字符是很重要的。

第二点就是,需要使用HTML字符实体来显示特殊字符,比如"&#241;" 代表的是"?","&#161;"代表的是 "?" :

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
    // Set response content type
    response.setContentType("text/html");
    // Set spanish language code.
    response.setHeader("Content-Language", "es");
    String title = "En Espa?ol";

%>
<html>
<head>
<title><%  out.print(title); %></title>
</head>
<body>
<center>
<h1><%  out.print(title); %></h1>
</center>
<div align="center">
<p>En Espa?ol</p>
<p>?Hola Mundo!</p>
</div>
</body>
</html>

区域特定日期

可以使用java.text.DateFormat类和它的静态方法getDateTimeInstance()来格式化日期和时间。接下来的这个例子显示了如何根据指定的区域来格式化日期和时间:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.DateFormat,java.util.Date" %>

<%
    String title = "Locale Specific Dates";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Local Date: <%  out.print(date); %></p>
</div>
</body>
</html>

区域特定货币

可以使用java.text.NumberFormat类和它的静态方法getCurrencyInstance()来格式化数字。比如在区域特定货币中的long型和double型。接下来的例子显示了如何根据指定的区域来格式化货币:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>

<%
    String title = "Locale Specific Currency";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Formatted Currency: <%  out.print(formattedCurr); %></p>
</div>
</body>
</html>

区域特定百分比

可以使用java.text.NumberFormat类和它的静态方法getPercentInstance()来格式化百分比。接下来的例子告诉我们如何根据指定的区域来格式化百分比:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>

<%
    String title = "Locale Specific Percentage";
    //Get the client's Locale
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>Formatted Percentage: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>

关于我们 联系我们 留言板

手册网

Previous article: Next article: