以下内容引用自http://wiki.jikexueyuan.com/project/jsp/internationalization.html

  • 国际化(i18n):这意味着可以使网站根据访问者的语言或者国籍翻译成不同版本的内容。

  • 本地化(I10n):这意味着将资源添加到一个网站来适应特定的地理或文化,例如将印度语添加到网站。

  • 局部区域:这是一个特定的文化或地理区域。它通常被称为一个语言符号,该语言符号紧随其后的是一个国家符号,它们之间用下划线分隔。例如,“en_US”代表美国的英语语言环境。

一个JSP可以根据请求者的区域位置来收集适当的网站版本,并且根据当地语言、文化和需求来提供适当的网站版本。下面是请求对象返回局部区域对象的方法。

java.util.Locale request.getLocale() 

一、检测局部区域

以下是重要的局部区域的方法,可以用来检测请求者的位置、语言和语言环境。以下所有方法显示设置在请求者的浏览器上的国家名称和语言名称。

方法 描述

String getCountry()

该方法返回国家/地区的代码,用大写的ISO 3166 2字符格式表示语言环境。

String getDisplayCountry()

该方法返回一个局部区域境的国家名称,该名称适合显示给用户。

String getLanguage()

该方法为局部区域用ISO 639格式返回小写的语言代码。

String getDisplayLanguage()

该方法返回一个局部区域的语言名称,该名称可以适合显示给用户。

String getISO3Country()

该方法返回一个局部区域国家的三个字母的缩写。

String getISO3Language()

该方法返回一个局部区域语言的三个字母的缩写。

示例:

这个例子展示了如何为JSP中的一个请求显示一个语言和与其相关的国家:

<%@ page import="java.io.*,java.util.Locale" %>
<%
//Get the client's Locale
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可以输出一个用西方欧洲语言编写的页面,比如英语、西班牙语、德语、法语、意大利语、荷兰语等等。在这里,适当的设置内容语言标题来显示所有的字符是很重要的。

第二点是使用HTML实体显示所有的特殊字符,例如,"ñ" 代表"ñ","¡"代表 “¡”,如下:

<%@ page import="java.io.*,java.util.Locale" %>
<%
// 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="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.txt.NumberFormat类和它的静态方法getCurrencyinstance()来格式化一个数量值,例如一个长型或双精度类型。下面的例子显示了对于一个给定的局部区域,如何格式化货币特性:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ 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.txt.NumberFormat类和它的静态方法getPercentInstance()来获取局部区域特定的百分比。下面的例子显示了对于一个给定的局部区域,如何格式化百分比特性:

<%@ page import="java.io.*,java.util.Locale" %>
<%@ 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>

这将产生如下所示结果:

最新文章

  1. Gradle学习系列之八——构建多个Project
  2. 暑假热身 E. 无聊的LSY
  3. REST响应处理
  4. 自定义AuthorizeAttribute
  5. iOS opencv
  6. Hadoop实战实例
  7. 基于.NET CORE微服务框架 -谈谈surging API网关
  8. Android studio - Failed to find target android-18
  9. JSON.parse与JSON.stringify
  10. liunx驱动----异步通知
  11. Golang 优化之路——bitset
  12. iOS笔记之UIKit_UILable
  13. fuz 2159 WuYou
  14. Python全栈开发之1、输入输出与流程控制
  15. 数据库还原,System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权。 (Microsoft.SqlServer.SmoExtended)
  16. 02-JVM内存模型:虚拟机栈与本地方法栈
  17. python 调用RESTFul接口
  18. 22 Python 模块与包
  19. 连接MySql的时候报1130的错误解决办法
  20. IIS_常见问题及解决方法

热门文章

  1. Android 在代码中安装 APK 文件
  2. 阿里云服务器安装ss使用
  3. testlink 从1.8.5 升级到 1.9.8
  4. 读取Java文件到byte数组的三种方式
  5. vue热重载
  6. 关于mapState和mapMutations和mapGetters 和mapActions辅助函数的用法及作用(二)-----mapMutations
  7. python学习笔记-02
  8. Linux——网络编程线程池机制
  9. shell脚本的练习
  10. 【JavaScript从入门到精通】第二课