English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP-Internationalisierung

Bevor man beginnt, müssen einige wichtige Konzepte erklärt werden:

  • Internationalisierung (i18n): zeigt an, dass eine Seite verschiedene Übersetzungsversionen entsprechend der Sprache oder dem Land des Besuchers anzeigt.
  • Lokalisierung (l10n): Ressourcen zum Hinzufügen an die Website, um sie für verschiedene Regionen und Kulturen anzupassen. Zum Beispiel die indische Version der Website.
  • Region: Dies ist eine bestimmte Region oder Kultur, die oft durch einen Unterstrich verknüpft wird, um eine Sprachmarke und ein Länderkennzeichen zu verbinden. Zum Beispiel repräsentiert "en_US" die englische Sprache in den USA.

Wenn man eine globale Website erstellen möchte, muss man sich um eine Reihe von Projekten kümmern. Dieses Kapitel wird detailliert erläutern, wie man Internationalsierungsthemen behandelt und gibt einige Beispiele, um das Verständnis zu vertiefen.

Der JSP-Container kann die richtige Seitenversion entsprechend dem Lokalitätsattribut von request bereitstellen. Nachfolgend wird die Syntax zur Erzielung des Locale-Objekts über das Request-Objekt angegeben:

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 字符实体来显示特殊字符,比如 "ñ" 代表的是 ñ,"¡"代表的是 ¡ :

<%@ 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"-Sprache", "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>

Regionsspezifische Datum

Man kann die Klasse java.text.DateFormat und ihre statische Methode getDateTimeInstance() verwenden, um Datum und Zeit zu formatieren. Der folgende Beispiel zeigt uns, wie man Datum und Zeit basierend auf einer bestimmten Region formatiert:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.DateFormat,java.util.Date" %>
<%
    String title = "Regionsspezifische Daten";
    //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>Regionale Datum: <%  out.print(date); %></p>
</div>
</body>
</html>

Regionsspezifische Währung

Man kann die Klasse java.text.NumberFormat und ihre statische Methode getCurrencyInstance() verwenden, um Zahlen zu formatieren. Zum Beispiel in regionsspezifischen Währungen für long- und double-Typen. Der folgende Beispiel zeigt uns, wie man Währungen basierend auf einer bestimmten Region formatiert:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Regionsspezifische Währung";
    //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>Formatierte Währung: <%  out.print(formattedCurr); %></p>
</div>
</body>
</html>

Regionsspezifische Prozente

Man kann die Klasse java.text.NumberFormat und ihre statische Methode getPercentInstance() verwenden, um Prozente zu formatieren. Der folgende Beispiel zeigt uns, wie man Prozente basierend auf einer bestimmten Region formatiert:

<%@ 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>Formatierte Prozentsatz: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>