JSP 国际化详解

2019-04-12 23:43|来源: 网路

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>

相关问答

更多

spring国际化的问题。。。急。。。。。。。。??????

在locale中设置。。。但是不是跟跳转同步的要改下哦

JSP Spring ApplicationContext的国际化支持

JSP Spring ApplicationContext的国际化支持 1.ApplicationContext接口继承了MessageResource接口,因此使用ApplicationContext作为spring容器可以使用国际化资源文件。 2.在MessageResource接口中定义了两个主要用于国际化的方法: String getMessage(String param,Object[] args,Locale loc) ; String getMessage(String param ...

spring 国际化 js怎么设置

一、基于浏览器语言的国际化配置   使用Spring的MVC,并且配置中有配置Resource文件   Xml代码 以下是引用片段:   其中,message-info是你的properties文件的通用名。如:我的配置文件叫 message-info.properties,message-info_zh_CN.properties等等,只要有了这个配置,然后配置JSP 渲染器为JSTL支持的,那么在你的JSP文件中使用fmt标记就可以实现客户浏览器语言国际化了。   如: 以下是引用片段:    ...

spring 国际化怎么获取当前所有支持的国际化

1.在spring配置文件中配置资源文件properties的位置及公共名,下列配置指定的properties文件处于src目录下的resources文件夹中,名字为message_info_*.properties。 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <propertyname="basenames"> <list> <value>re ...

如何使Java Web应用程序国际化?(How to internationalize a Java web application?)

在基本的JSP / Servlet web应用程序的情况下,基本方法将使用JSTL fmt taglib与资源束组合。 资源束包含键值对,其中键是常量,对于所有语言都是相同的,并且每种语言的值不同。 资源束通常是由ResourceBundle API加载的属性文件 。 然而,这可以被自定义,以便您可以从例如数据库加载键值对。 以下是使用基于属性文件的资源束将Web应用程序的登录表单进行国际化的示例。 创建以下文件并将它们放在一些包中,例如com.example.i18n (在Maven的情况下,将 ...