Прежде чем мы начнем, необходимо объяснить несколько важных понятий:
Интернационализация (i18n): указывает, что страница будет отображаться в разных переводах в зависимости от языка или страны посетителя.
Локализация (l10n): добавление ресурсов на веб-сайт для его адаптации к различным регионам и культурам. Как и индийская версия сайта.
Регион: это конкретный регион или культура, обычно рассматриваемый как лингвистический маркер и национальный маркер, соединенные подчеркиванием. Например, «en_US» представляет англоязычный регион США.
Если вы хотите создать глобальный веб-сайт, вам нужно позаботиться о ряде вещей. В этой главе подробно рассказывается, как решать проблемы интернационализации, и приводятся несколько примеров для углубления вашего понимания.
Контейнер JSP может предоставить правильную версию страницы на основе атрибута локали запроса. Далее дан синтаксис того, как получить объект Locale через объект запроса:
java.util.Locale request.getLocale()
В следующей таблице перечислены наиболее важные методы объекта Locale, которые используются для определения региона, языка и региона объекта запроса. Все эти методы будут отображать название страны и название языка в браузере:
серийный номер | Метод и описание |
---|---|
1 | Строка getCountry() возвращает код страны/региона в английском верхнем регистре или регион в двухбуквенном формате ISO 3166. |
2 | Строка getDisplayCountry() возвращает название страны, которое будет отображаться пользователю. |
3 | String getLanguage() возвращает английскую строчную версию кода языка или область в формате ISO 639. |
4 | String getDisplayLanguage() возвращает название языка, которое будет отображаться пользователю. |
5 | Строка getISO3Country() возвращает трехбуквенное сокращение названия страны. |
6 | Строка getISO3Language() возвращает трехбуквенное сокращение названия языка. |
В этом примере показано, как отображать язык и страну в 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>Обнаружение; Локаль</title></head><body><center><h1>Определение локали</h1></center><p align="center"><% out.println("Язык: " + язык + " <br />"); out.println("Страна: " + страна + "<br />");%></p></body></html>
JSP может использовать для вывода страницы западноевропейские языки, такие как английский, испанский, немецкий, французский, итальянский и т. д. Видно, что важно установить заголовок Content-Language для правильного отображения всех символов.
Второй момент заключается в том, что для отображения специальных символов необходимо использовать символы HTML. Например, «ñ» представляет «?», а «¡» представляет «?»:
<%@ page import="java.io.*,java.util.Locale" %><%@ page import="javax.servlet.*,javax.servlet.http.* "%><% // Установить ответ тип контента response.setContentType("text/html"); // Установить код испанского языка. 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 = request.getLocale( ); DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.SHORT, locale).format(new Date( )); /head><body><center><h1><% out.print(title); %></h1></center><div align="center"><p>Локальная дата: <% out.print(дата); %></p></div></body></html>
Числа можно форматировать с помощью класса java.text.NumberFormat и его статического метода getCurrencyInstance(). Например, длинная позиция и двойная позиция в валютах конкретного региона. В следующем примере показано, как отформатировать валюту в соответствии с указанным языковым стандартом:
<%@ 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 = request.getLocale( ); 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>Форматированная валюта: <% 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 = request.getLocale( ); 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>