Как создать Выбор языка в Struts 2? - PullRequest
0 голосов
/ 23 октября 2019

Я знаю, что могу вызвать URL с параметром request_locale, но это не продлится долго. Может быть, хранить его в печенье? Что я не знаю, как это сделать.

После многих часов поиска я нашел:

  • Низкое количество неработающих ссылок в API Apache
  • Настройкаязыковой стандарт в атрибуте сеанса "org.apache.struts.action.LOCALE"
  • ... или "request_locale"
  • ... или "request_cookie_locale"
  • ... или "WW_TRANS_I18N_LOCALE"
  • Установка языкового стандарта в ActionContext.getContext ()
  • Что-то о перехватчиках, из-за которых мое приложение вызывает исключения, поэтому я не знаю, следует ли мне продолжать ...

Там есть смесь Struts 1 и Struts 2, которая не облегчает задачу ...

Вот что у меня есть:

В Конфигурация XML :

<action name="languageSelection" class="changeSelectionAction">
         <result name="input" type="redirect">${redirectUrl}</result>
</action>

Я решил использовать «Ввод», чтобы вернуться на предыдущую страницу после того, как пользователь выбрал язык. Переменная перенаправления определена в моем классе действий.

На веб-странице :

<webwork:url id="url" action="languageSelection">
      <webwork:param name="lang">fr</webwork:param>
</webwork:url>
<webwork:a href="%{url}">French</webwork:a>

Это отправляет "lang = fr", который я могу прочитать в своем действииClass.

В Action Class у меня есть:

HttpServletRequest request = ServletActionContext.getRequest();
String refererUrl = ServletActionContext.getRequest().getHeader("Referer"); // gives me the source page so I can go back to it.
setRedirectUrl(refererUrl);

String[] langs = request.getParameterValues("lang"); // getting the language the user selected

... сопровождается большим количеством мусора, который не работает, и некоторыми оскорблениями длязакомментированный компилятор.

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

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Мы используем org.apache.struts2.interceptor.I18nInterceptor в нашем стеке перехватчиков по умолчанию. После этого распорки прослушивают параметр request_locale, и каждое действие, которое получает параметр ?request_locale=LANGCODE, будет изменять язык для пользователя. Обычно этот параметр сохраняется в сеансе пользователя, поэтому убедитесь, что сеансы пользователя также включены.

С помощью ссылки из @TheSlavMan вы можете прочитать все возможные параметры, доступные для этого перехватчика. .

Конечно, возможно простое действие "изменить язык и перенаправить на страницу". Вы на правильном пути, мое первое предположение было бы изменить lang -параметр на request_locale.

0 голосов
/ 23 октября 2019

Вы можете реализовать перехватчик i18n, который может сохранить ваш язык в сеансе или в файле cookie. Смотри https://struts.apache.org/core-developers/i18n-interceptor.html

<interceptor name="i18nCookie" class="org.apache.struts2.interceptor.I18nInterceptor"/>

<action name="someAction" class="com.examples.SomeAction">
    <interceptor-ref name="i18nCookie">
        <param name="localeStorage">cookie</param>
    </interceptor-ref>
    <interceptor-ref name="basicStack"/>
    <result name="success">good_result.ftl</result>
</action>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...