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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Locale в JSF 
:(
    Опции темы
oson
Дата 21.2.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Господа!
Объясните пожалуйста, как определяет JSF Locale на клиентском компе.
Я получаю Locale таким образом
Код

public static Locale getLocale()
{
   return  ((HttpServletRequest)getFacesContext().getExternalContext().getRequest()).getLocale();
}

Но например если у операционной системы стоит русская локаль, а в самом браузере в настройках "Языки" - турецкая, то этот код определяет турецкую локаль.
Если у операционной системы стоит русская локаль, а в самом браузере в настройках "Языки" - вообще ничего, то этот код определяет ту локаль, которая не на клиенте, а на сервере.
То есть я не могу понять
1-Какую собственно локаль должен читать этот код - ту что у Виндоус выставлена?
Или же этот метод должен вернуть локаль, ориентируясь по выбранному языку в браузере?
2-Как вообще они зависят друг от друга - локаль на компьютере и язык в настройках браузера ?


PM MAIL   Вверх
Kangaroo
Дата 21.2.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 14
Всего: 104



JavaDoc
Цитата

getLocale() 
Returns the preferred Locale that the client will accept content in, based on the Accept-Language header.



Цитата(oson @  21.2.2008,  16:22 Найти цитируемый пост)
2-Как вообще они зависят друг от друга - локаль на компьютере и язык в настройках браузера ?

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

Цитата(oson @  21.2.2008,  16:22 Найти цитируемый пост)
Если у операционной системы стоит русская локаль, а в самом браузере в настройках "Языки" - вообще ничего, то этот код определяет ту локаль, которая не на клиенте, а на сервере.

Дефолтную юзает.


--------------------
Lost....
PM MAIL MSN   Вверх
Maksym
Дата 21.2.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



PM MAIL   Вверх
Kangaroo
Дата 21.2.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

Репутация: 14
Всего: 104



Maksym, 
так вроде это метод другой. 
Есть же разница FacesContext.getInstance() и getFacesContext().getExternalContext() ?


--------------------
Lost....
PM MAIL MSN   Вверх
Maksym
Дата 21.2.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(Kangaroo @  21.2.2008,  17:12 Найти цитируемый пост)
Есть же разница FacesContext.getInstance() и getFacesContext().getExternalContext() ? 

Как минимум, они возвращают экземпляры разных классов FacesContext и ExternalContext   smile Да и вообще это смотря откуда взялся и что возвращает метод getFacesContext() указанный oson'ом...  smile 

(В нормально практике, экземпляр FacesContext в любом случае будет один и тот же откуда бы к нему не доступались (в рамках потока обрабатывающего запрос пользователя, конечно).  Он создается jsf'ами через FacesContextFactory на базе текущего request'а и глобального состояния веб-приложения. --- но это все jsf детали которые к вопросу прямого отношения не имеют)

Я показал метод, который, на мой взгляд, правильно использовать для выяснения активной локали пользовательской сессии в своем коде. Поскольку этот метод используют сами jsf'ы в своих механизмах локализации. И хотя результат этого метода вычисляется в том числе и на основании локали запроса, мне кажется что идеологически правильнее использовать его.. чтобы не было рассинхронизации в том какую локаль считать текущей между вашим кодом и тем что думает фреймворок.

Это сообщение отредактировал(а) Maksym - 21.2.2008, 19:41
PM MAIL   Вверх
oson
Дата 22.2.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 1



Попробовал оба метода.
Код

1) FacesContext.getCurrentInstance().getViewRoot().getLocale()
2) (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getLocale()

Первый все время  выдает en, какие бы настройки ни были в Винде или браузере.
Второй выдает настройки языка в браузере, а если их нет вообще никаких, то то винды.
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.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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