Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выпадающий список для смены локали 
V
    Опции темы
Pawl
Дата 9.2.2013, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 3
Всего: 28



Здравствуйте, озаботился, собственно, сабжем. Видел на сайтах такую штуку: есть выпадающий список с названиями различных языков, и, при выборе одного из них, страничка разу переводится на него. Может, подскажете, как это сделать на jsp, jstl или при помощи какого-нибудь фреймворка, возможно?
Спасибо!


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
jk1
Дата 10.2.2013, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 5
Всего: 75



Для JSTL:

1. Делаем на странице простой выпадающий список из ссылок с различными локалями
2. Делаем сервлет (или любой другой контроллер), который эти ссылки обрабатывает
3. В нем пишем что-то типа

Код

import javax.servlet.jst.jstl.core.Config;

...

Config.set( session, Config.FMT_LOCALE, new java.util.Locale(“en_US") )
 

4. Делаем редирект на реферера, чтобы пользователь оказался на той же странице, но с измененной локалью


Что же касается фреймворков, то в каждом из них свой велосипед. В Spring MVC, например, это выглядит так:

Код

  <mvc:interceptors>
    <!-- переключает локали на основе параметров запроса  /?locale=de -->
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
  </mvc:interceptors>
  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <!-- запоминает выбранную локаль в cookie -->
    <property name="cookieName" value="myCookie" />
    <property name="defaultLocale" value="de" />
  </bean>


Это сообщение отредактировал(а) jk1 - 10.2.2013, 13:07


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Pawl
Дата 10.2.2013, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 3
Всего: 28



Цитата(jk1 @  10.2.2013,  13:07 Найти цитируемый пост)
 Делаем на странице простой выпадающий список из ссылок с различными локалями

Спасибо! А можно пример такого списка со ссылками?

Это сообщение отредактировал(а) Pawl - 10.2.2013, 15:06


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Pawl
Дата 10.2.2013, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 3
Всего: 28



я тут попытался реализовать желаемое так:
Код

    <script>
        function goToPage(url) {
            if (url != "") {
                open(url);
            }
        }
    </script>
        
    <select onchange="goToPage(this.options(this.selectedIndex).value)">
        <option selected>Please select language</option>
        <option value="/StrutsHello/locale.action?request_locale=en">English</option>
        <option value="/StrutsHello/locale.action?request_locale=ru">Russian</option>
    </select> 

но этот код открывает новую страницу вместо того, чтобы перегрузить данную.


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
jk1
Дата 10.2.2013, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 5
Всего: 75



Цитата

но этот код открывает новую страницу вместо того, чтобы перегрузить данную. 


Вот именно поэтому и надо смотреть на referer. У Ваших ссылок естественно есть обработчик-контроллер, который должен сделать следующее:

1. Переключить локаль
2. Посмотреть в referer-заголовок, чтобы понять, откуда мы пришли: httpServletRequest.getHeader("referer");
3. Вернуть пользователя на ту же самую страницу.

Если непонятно, приложите к посту свой тестовый проект и я объясню на коде.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Pawl
Дата 11.2.2013, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 3
Всего: 28



Цитата(jk1 @  10.2.2013,  23:53 Найти цитируемый пост)
Если непонятно, приложите к посту свой тестовый проект и я объясню на коде.

Да, было бы здорово!  smile Единственно, использую каркас Struts2, поэтому библиотеки в архив не влезли. Вот их список:
Цитата

javassist.jar
asm-tree.jar
asm.jar
asm-commons.jar
commons-io.jar
commons-lang.jar
commons-fileupload.jar
ognl.jar
xwork-core.jar
freemarker.jar
struts2-core.jar
struts2-convention-plugin-2.3.7.jar

Сам архив с проектом прилагаю.

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  StrutsHello.rar 2,77 Kb


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Pawl
Дата 13.2.2013, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 3
Всего: 28



Вот так удалось реализовать желаемое, используя элементы Struts2:
Код

    <select onchange="location.href=this.options[selectedIndex].value">
        <option selected>Please select language</option>
        <option value="<s:url action="locale">
                    <s:param name="request_locale">en</s:param>
                </s:url>">
            English
        </option>
        <option value="<s:url action="locale">
                    <s:param name="request_locale">ru</s:param>
                </s:url>">
            русский
        </option>
    </select>



--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.