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

Международизация JSP

До начала необходимо объяснить несколько важных концепций:

  • Международизация (i18n): указывает, что страница отображается в зависимости от языка или страны посетителя в различных версиях перевода.
  • Локализация (l10n): добавление ресурсов на веб-сайт, чтобы он адаптировался к различным регионам и культурам. Например, версия веб-сайта на хинди.
  • Регион: это определенный регион или культура, обычно считающийся сочетанием языковой и национальной меток, соединенных подчеркиванием. Например, "en_US"代表着 английский язык в США.

Если вы хотите создать глобальный веб-сайт, вам нужно заботиться о целой серии проектов. В этой главе мы подробно расскажем, как обрабатывать международную поддержку, и дадим несколько примеров для лучшего понимания.

Веб-контейнер может предоставлять правильную версию страницы на основе свойства locale запроса. Далее приведен синтаксис получения объекта Locale через объект запроса:

java.util.Locale request.getLocale() 

Проверка Locale

В таблице перечислены важные методы объекта Locale, используемые для проверки региона, языка и области объекта запроса. Все эти методы будут отображать имя страны и имя языка в браузере:

Номер Метод & Описание
1 String getCountry();

Вернуть код региона в верхнем регистре, или код региона в формате ISO 3166 2-буквенного формата
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>Обнаружение Locale</title>
</head>
<body>
<center>
<h1>Обнаружение Locale</h1>
</center>
<p align="center">
<% 
   out.println("Язык : " + language  + "<br />");
   out.println("Страна  : " + country   + "<br />");
%>
</p>
</body>
</html>

Настройка языка

JSP может использовать западноевропейские языки для вывода страницы, например, английский, испанский, немецкий, французский, итальянский и т.д. Таким образом, установка заголовка информации о языке очень важна для правильного отображения всех символов.

Второй момент — необходимо использовать HTML-символьные коды для отображения специальных символов, например, "ñ" означает ñ, "¡" означает ¡ :

<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>"
<%
    // Установить тип содержимого ответа
    response.setContentType("text/html");
    // Установить код языка испанского.
    response.setHeader("Content-Language", "ru");
    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";
    //Получить 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";
    //Получить 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";
    //Получить 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>Форматированный процент: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>