SEAM / Java EE — установить локаль из домена

У меня есть приложение SEAM 2.2.2, работающее на JBoss AS6.

Приложение настроено на несколько языков

В каталоге развертывания JBoss /jbossweb.sar/server.xml я сопоставил несколько разных доменов, используя следующие записи узла.

<Host name="myApp">  
  <Alias>www.myapp.com</Alias>  
  <Alias>myapp.com</Alias>  
  <Alias>www.myapp.sv</Alias>  
  <Alias>myapp.sv</Alias>  
  <Valve className="org.apache.catalina.valves.AccessLogValve"  
  prefix="processor" suffix=".log" pattern="common"  
  directory="${jboss.server.home.dir}/log"/>  
  <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"  
  cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"  
  transactionManagerObjectName="jboss:service=TransactionManager" ></Valve>  
</Host>  

Мы должны быть в состоянии гарантировать, что все посетители, которые заходят на www.myapp.sv, используют шведский язык по умолчанию, даже если их браузер по умолчанию использует английский.

Каков наилучший способ добиться этого? Мое первоначальное предположение состояло в том, чтобы проверить, какая локаль установлена ​​при запросе страницы, а затем использовать Seam localeSelector, чтобы переопределить значение по умолчанию, установленное браузером, но это похоже на взлом и потенциально расточительно, поскольку пакеты ресурсов будут загружены, а затем перезагружены?

Есть ли способ «перехватить» первоначальный выбор локали и заменить его на другой, основанный на расширении домена?

Спасибо


person DaveB    schedule 01.11.2013    source источник
comment
См. stackoverflow.com/q/4830588/1065197.   -  person Luiggi Mendoza    schedule 02.11.2013
comment
Спасибо, Луиджи, это было полезно   -  person DaveB    schedule 18.11.2013


Ответы (2)


Сделайте запуск LocaleBean и установите желаемую локаль.

Таким образом, что-то вроде этого:

@Startup
@Scope(APPLICATION)
@Name("LocaleBean")
public class LocaleBean {         

     @Create
     public void init() {
         FacesContext.instance().getViewRoot().setLocale(new Locale("SV"));
     }
}
person Serkan    schedule 11.11.2013
comment
это необходимо делать для каждого сеанса, использование области приложения будет устанавливать локаль только один раз при развертывании приложения. - person DaveB; 18.11.2013

Достигнуто это путем создания bean-компонента с областью действия сеанса и помещения запрошенного языка в качестве параметра запроса, а затем использования действия pages.xml, которое запускается до отображения страницы для установки текущей локали.

person DaveB    schedule 21.04.2015