Создайте следующие файлы и поместите их в некоторый пакет, например, com.example.i18n
(в случае Maven поместите их в структуру пакета внутри src/main/resources
).
text.properties
(содержит пары ключ-значение на языке по умолчанию, обычно английском)
login.label.username = Username
login.label.password = Password
login.button.submit = Sign in
text_nl.properties
(содержит пары ключ-значение на голландском языке (nl
))
login.label.username = Gebruikersnaam
login.label.password = Wachtwoord
login.button.submit = Inloggen
text_es.properties
(содержит испанские (es
) пары ключ-значение)
login.label.username = Nombre de usuario
login.label.password = Contraseña
login.button.submit = Acceder
Имя файла пакета ресурсов должно соответствовать следующему шаблону name_ll_CC.properties
.Часть _ll
должна содержать строчный код языка ISO 693-1 .Это необязательно и требуется только при наличии детали _CC
.Часть _CC
должна быть прописной ISO 3166-1 Alpha-2 код страны.Он является необязательным и часто используется только для проведения различий между национальными языковыми диалектами, такими как Американский английский (_en_US
) и Британский английский (_en_GB
).
Создайте следующий пример JSP-файла и поместите его в папку веб-материалов.
login.jsp
<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language :
pageContext.request.locale} "scope =" session "/> JSP / JSTL i18n demo English Nederlands Español:
:
<c:set var="language">
управляет текущим языком. Если язык был указанв качестве параметра запроса (по раскрывающемуся языку) он будет установлен. В противном случае, если язык уже был ранее установлен в сеансе, вместо этого придерживайтесь его. Иначе используйте предоставленный пользователем языковой стандарт в заголовке запроса.
<fmt:setLocale>
устанавливает языковой стандарт для пакета ресурсов. Важно, чтобы эта строка была до <fmt:setBundle>
.
<fmt:setBundle>
инициализирует пакет ресурсов своим базовым именем (то есть, полное имя пакетаtil с единственным именем без спецификатора _ll_CC
.
<fmt:message>
извлекает значение сообщения по указанному ключу пакета.
<html lang="${language}">
сообщает поисковым роботам, на каком языке страницав том, что он не будет помечен как дублированный контент (таким образом, хорошо для SEO).
Раскрывающийся список языков будет немедленно отправлен с помощью JavaScript, когда будет выбран другой язык, и страница будет обновлена вновь выбранным.language.