Как создать многоязычное веб-приложение в сервлете jsp? - PullRequest
0 голосов
/ 12 июня 2018

Я создал веб-приложение, но не уверен, как реализовать поддержку нескольких языков, таких как хинди и т. Д. Может ли I18N решить эту проблему или это может сделать только переводчик Google?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Ознакомьтесь с ответом BalusC здесь: Как интернационализировать веб-приложение Java?

BalusC:

В случае базового веб-приложения JSP / Servlet,основной подход будет использовать JSTL fmt taglib в сочетании с комплектами ресурсов .Пакеты ресурсов содержат пары ключ-значение, где ключ является константой, которая одинакова для всех языков, и значение отличается для каждого языка.Пакеты ресурсов обычно представляют собой файлы свойств , которые загружаются с помощью ResourceBundle API.Однако его можно настроить так, чтобы вы могли загружать пары ключ-значение, например, из базы данных.

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


  1. Создайте следующие файлы и поместите их в некоторый пакет, например, 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).


  2. Если это еще не сделано, установите JSTL.Если вы работаете в контейнере Servlet 2.5 или более поздней версии (Tomcat 6.0 и т. Д.) И ваш web.xml объявлен соответствующим спецификации Servlet 2.5, то просто поместите jstl-1.2.jar в * 1069 веб-приложения* folder.


  3. Создайте следующий пример 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.


Однако следует помнить, что файлы свойств по умолчанию считываются с использованием кодировки символов ISO-8859-1.Вам нужно будет сбежатьих уникодом убегает.Это можно сделать с помощью поставляемого JDK инструмента native2ascii.exe.Смотрите также этот раздел статьи для более подробной информации.

Теоретической альтернативой может быть предоставление пакета с пользовательским Control для загрузки этих файлов в формате UTF-8, но, к сожалению, это не поддерживается базовым тегом JSTL fmt.Вам нужно было бы управлять всем этим самостоятельно с помощью Filter.Существуют (MVC) фреймворки, которые могут обрабатывать это более прозрачно, например, JSF, см. Также эту статью .

0 голосов
/ 12 июня 2018

Это просто общая идея:

make для каждого языка 1 отдельный файл пары ключ-значение

  • каждое слово или предложение имеет уникальный ключ (hi = Hello,hi = Hola ect ect)
  • не помещайте жестко закодированный текст в jsp
  • создайте синглтон, который при запуске загрузит все языки в хеш-карту
  • создайте 1 тег, который будетполучить текст из хэш-карты на основе заданной локали и уникального ключа
  • использовать тег в jsp <sp:message code="hi" />
  • получить локаль из запроса браузера (или предпочтения пользователя)

.. Или просто используйте Spring, который делает все это за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...