JSP国际化/本地化
在本章中,我们将讨论JSP中国际化的概念。 在我们继续之前,先了解以下三个重要的术语 -
- 国际化(i18n) - 表示网站能够提供翻译成访问者语言或国籍的不同版本的内容。
- 本地化(l10n) - 表示将资源添加到网站以适应特定的地理或文化区域,例如将印地文翻译成网站。
- 区域 - 这是一个特定的文化或地理区域。 它通常被称为语言符号,后跟一个由下划线分隔的国家符号。 例如,
“en_US”
代表美国的英文语言环境。
在建立全球网站时应该注意一些项目。 本教程不会给出完整的详细信息,但它将为您提供一个很好的例子,说明如何通过区分其位置(即语言环境)向互联网社区提供不同语言的网页。
JSP可以根据请求者的区域设置选择适当的站点版本,并根据当地语言,文化和要求提供适当的站点版本。 下是返回Locale
对象的request
对象的方法。
java.util.Locale request.getLocale()
检测区域设置
以下是可用于检测请求者的区域,语言和当地语言环境的重要区域设置方法。以下所有方法显示在请求者浏览器中设置的国家名称和语言名称。
编号 | 方法 | 描述 |
---|---|---|
1 | String getCountry() |
此方法以ISO 3166 的两个字母格式为该区域设置返回大写的国家/地区代码。 |
2 | String getDisplayCountry() |
此方法返回适合显示给用户的区域设置的国家/地区的名称。 |
3 | String getLanguage() |
此方法以ISO 639 格式为该语言环境返回小写的语言代码。 |
4 | String getDisplayLanguage() |
此方法返回适合显示给用户的语言环境的语言名称。 |
5 | String getISO3Country() |
此方法返回此区域设置的国家/地区的三个字母的缩写。 |
6 | String getISO3Language() |
此方法返回此语言环境的三个字母的缩写。 |
示例
为了方便演示,打开Eclise创建一个动态Web项目,其项目结构如下所示 -
以下示例显示如何在JSP中显示请求的语言和关联国家/地区,文件:langcountry.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.Locale"%> <%@ page import="javax.servlet.*,javax.servlet.http.* "%> <% //Get the client Locale Locale locale = request.getLocale(); String language = locale.getLanguage(); String country = locale.getCountry(); %> <!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"> <title>检测区域设置示例</title> </head> <body> <div style="margin: auto; width: 90%"> <center> <h1>检测区域设置示例</h1> </center> <p align="center"> <% out.println("语言 : " + language + "<br />"); out.println("国家 : " + country + "<br />"); %> </p> </div> </body> </html>
执行上面示例代码,得到以下结果 -
语言设置
JSP可以输出用西欧语言编写的页面,如英文,西班牙文,德文,法文,意大利文,荷兰文等。这里是设置Content-Language
头来正确显示所有的字符。
另一个重要的一点是使用HTML实体显示所有的特殊字符; 例如“ñ”
代表“ñ”
,而“¡”
代表“¡”
,如下文件:langset.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ 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"; %> <!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"> <title> <% out.print(title); %> </title> </head> <body> <center> <h2> <% out.print(title); %> </h2> </center> <div align="center"> <p>En Español</p> <p>¡Hola Mundo!</p> </div> </body> </html>
执行上面示例代码,得到以下结果 -
区域特定日期
可以使用java.text.DateFormat
类及其静态getDateTimeInstance()
方法来格式化特定于语言环境的日期和时间。以下是显示如何格式化特定区域设置日期的示例,文件:locale_date.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.Locale"%> <%@ page import="javax.servlet.*,javax.servlet.http.* "%> <%@ page import="java.text.DateFormat,java.util.Date"%> <% String title = "区域特定日期"; //Get the client's Locale Locale locale = request.getLocale(); String date = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, locale).format(new Date()); %> <!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"> <head> <title> <% out.print(title); %> </title> </head> <body> <center> <h2> <% out.print(title); %> </h2> </center> <div align="center"> <p> Local Date: <% out.print(date); %> </p> </div> </body>
执行上面示例代码,得到以下结果 -
区域特定货币
可以使用java.txt.NumberFormat
类及其静态getCurrencyInstance()
方法在特定区域设置中格式化数字,例如:long
或double
类型。 以下是显示如何格式化给定区域设置的货币的示例,文件:locale_currency.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.Locale"%> <%@ page import="javax.servlet.*,javax.servlet.http.* "%> <%@ page import="java.text.NumberFormat,java.util.Date"%> <% String title = "区域特定货币"; //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 = "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); %>
运行上面示例代码,得到以下结果 -
上一篇:JSP安全
下一篇:没有了
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王