2013-08-29 4 views
0

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

при использовании s:text, он всегда использует файл ресурсов по умолчанию.

В Struts1, я использовал следующий код, чтобы установить локаль по умолчанию в моем фильтре

session.setAttribute("org.apache.struts.action.LOCALE",locale); 

Как установить пользовательский выбранный стандарт динамически в Struts2?

+0

См: HTTP: //stackoverflow.com/q/15582074/1700321 и http://stackoverflow.com/q/12891293/1700321. –

ответ

0

Вы можете установить локаль следующим образом в Struts 2:

ActionContext ctx = ActionContext.getContext(); 
if (ctx != null) 
{ 
    ctx.setLocale(locale); 
} 

Вы также можете использовать I18nInterceptor.

+0

Почему контекст является нулевым? –

+0

В исключительных случаях это может быть null, но этого не должно быть. – tom

+1

В исключительных случаях ваш код никогда не будет работать. –

0

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

«Или, в качестве альтернативы, только для текущего запроса (так как XWork 2.1.3)»

, сделав запрос HTTP и подачи параметр запроса request_locale со значением локали, как "en_US", который создать языковой стандарт для английского языка, США.

Этот локаль сохраняется в сеансе по умолчанию под атрибутом "WW_TRANS_I18N_LOCALE" и используется как текущий язык во время сеанса пользователя. Текущая локаль также помещается в карту ActionContext этим перехватчиком по каждому запросу. Это позволяет компонентам инфраструктуры, которые поддерживают локализацию, использовать локаль ActionContext.

Более подробное описание с примером кода, которое вы можете найти в документах для I18n Interceptor.

Перехватчик, который обрабатывает локаль, указанную в сеансе , в качестве локали для текущего запроса на действие. Кроме того, этот перехватчик будет искать конкретный параметр HTTP-запроса и установить локаль на любое значение. Это означает, что этот перехватчик может использоваться для динамического использования вашего приложения изменить языковой стандарт для сеанса пользователя или, альтернативно, только для текущего запроса (начиная с XWork 2.1.3). Это очень полезно для приложений , которые требуют многоязычной поддержки и хотят, чтобы пользователь мог установить предпочтение своего языка в любой момент. Параметр locale удаляется во время выполнения этого перехватчика , гарантируя, что свойства не установлены на действие (например, request_locale), которые не имеют типичного соответствующего сеттера в вашем действии .

Например, используя имя по умолчанию параметра, запрос foo.action?request_locale=en_US, то локаль для американского английского языка сохраняется в сессии пользователя и будет использоваться для всех будущих запросов. Если языковой набор отсутствует (например, с первого посещения), перехватчик использует локаль браузера.


6

Это работает для меня:

String language = userLocale.substring(0, 2); 
String country = userLocale.substring(3, 5); 
Locale locale = new Locale(language, country); 
ActionContext.getContext().setLocale(locale); 
session.put(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE, locale); 

где значения userLocale имеют вид: fr_FR и файл для ресурсов с именем resource_fr_FR.properties

+0

Это работает для меня, но эта локаль не меняется, когда я делаю другой запрос с параметром request_locale – dom

+0

, возможно, если вы загрузите необходимую конфигурацию и код где-нибудь, я мог бы посмотреть – osmingo

+0

на самом деле это была ошибка моего кода ..... Я получил это позже ... ничего плохого в ans ... большое спасибо ... – dom

Смежные вопросы