Статьи

Интернационализация / локализация в перехватчике Struts2 (i18n)

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

Интернационализация (i18n) — это процесс планирования и внедрения продуктов и услуг, чтобы их можно было легко адаптировать к конкретным местным языкам и культурам, процесс, называемый локализацией. Framework Struts2 поддерживает i18n через  I18NInterceptor перехватчик, и мы можем передать локаль в запросе с параметром request_locale . Этот перехватчик является частью стека перехватчиков по умолчанию, поэтому нам не нужно ничего делать для локализации.

The I18NInterceptor simply waits for the request_locale parameter. Once it receives, the I18NInterceptor triggers and checks the resource bundles for the corresponding language code e.g. ‘en’ for English, ‘es’ for Espanol and change the language code.

Now a Пакеты ресурсов (Свойства в Java) содержат специфичные для локали объекты. Когда вашей программе требуется ресурс, специфичный для локали,  String например или, ваша программа может загрузить его из пакета ресурсов, соответствующего локали текущего пользователя.

Этот пример пытается показать простой и понятный способ создания веб-приложения с возможностью интернационализации или I18N.

В этом примере мы создаем следующие страницы:

1. HelloWorld.java

2. HelloWorld_en.properties и HelloWorld _hi.properties

3. HelloWorld.jsp

4. struts.xml

 1) Создайте класс Action

 /**
 * @author LEE
 */
package com.nirvanaitedge.lee;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport {

    public String execute() throws Exception {
        setMessage(getText(MESSAGE));
        return SUCCESS;
    }

    /**
     * Provide default value for Message property.
     */
    public static final String MESSAGE = "HelloWorld.message";

    /**
     * Field for Message property.
     */
    private String message;

    /**
     * Return Message property.
     *
     * @return Message property
     */
    public String getMessage() {
        return message;
    }
    /**
     * Set Message property.
     *
     * @param message Text to display on HelloWorld page.
     */
    public void setMessage(String message) {
        this.message = message;
    }
}

 2) Создайте файл свойств

 1.HelloWorld_en.properties
    HelloWorld.message=Good Morning!  

2.HelloWorld_hi.properties
    HelloWorld.message=Suprabhat!  

 3) Создать HelloWorld.jsp для ввода

 <%--  
   Document   : newjsp
    Created on : 14 Jan, 2015, 6:46:19 PM
    Author     : LEE
--%>

 <%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
    <head>
        <title><s:text name="HelloWorld.message"/></title>
    </head>

    <body>
        <h2><s:property value="message"/></h2>

        <h3>Languages</h3>
        <ul>
            <li>
                <s:url id="url" action="HelloWorld">
                    <s:param name="request_locale">en</s:param>
                </s:url>
               Click <s:a href="%{url}">here</s:a> to greet in English.
            </li>

            <li>
                <s:url id="url" action="HelloWorld">
                    <s:param name="request_locale">in</s:param>
                </s:url>

            Click <s:a href="%{url}" >here</s:a> to greet in Hindi.

            </li>
        </ul>
    </body>
</html>

 4) Определите действие в struts.xml

 <struts>

    <package name="com.nirvanaitedge.lee" namespace="/com.nirvanaitedge.lee"
extends="struts-default">
      <action name="HelloWorld" class="com.nirvanaitedge.lee.HelloWorld">
            <result>/com.nirvanaitedge.lee/HelloWorld.jsp</result>
       </action>
    </package>
</struts>

Обратите внимание, что нам не нужно указывать ‘method = “execute”’ в качестве атрибута тега action, поскольку Struts по умолчанию проверяет метод «execute», если метод не указан. Атрибут ‘method’ класса action используется только тогда, когда мы используем имя метода, отличное от ‘execute’, результат которого нам нужно отобразить в файле struts.xml.

Запуск приложения:

HelloWorld.jsp загружается с двумя гиперссылками. Нажатие на любую из ссылок будет приветствовать на определенном языке.

Нажатие на 1- ю гиперссылку приветствует на английском языке.

При нажатии на вторую гиперссылку здоровается на хинди.

Объяснение:

Нажатие на любую из гиперссылок запускает URL с параметром «request_locale». I18n-Interceptor Struts запускается сам, принимает значение request_locale, изменяет код языка, находя соответствующие значения в файле свойств, и соответственно устанавливает значение «HelloWorld.message».

Вывод:

Здесь мы поняли, как интернационализация может быть достигнута в Struts2 с использованием простых пакетов ресурсов.