2017-11-08 18 views
0

翻訳の目的でロケールを設定しています。 セッション中にロケールが変わらない場合に機能します。 しかし、セッションの途中でロケールを変更してページをリロードすると、古いロケールにとどまります。Vaadinフレームワークはブラウザからロケールを取得します

ブラウザから最新の言語設定を取得する方法がわかりますか?

マイコード:

@SpringUI 
@WebServlet(value = "/*", asyncSupported = true) 
@VaadinServletConfiguration(productionMode = false, ui = MainUI.class) 
public class MainUI extends UI 
{ 

    @Override 
    protected void init(VaadinRequest request) 
    {  
     log.debug("MainUI init! locale: {}", getLocale());//or getSession().getLocale() 
     messageByLocaleService.setLocale(getLocale()); 
     ... 

私は解決策を自分で見つけましたが、私はこれが正しい解決策である100%を確認していません。

答えて

0

request.getLocale()を使用して私が欲しいことをしていることが判明しました。私に非常に似ている質問がrequest.getLocaleがうまくいかなかったのにsession.getLocaleがうまくいったという問題があったからです。

コード:

Locale locale = request.getLocale(); 
log.debug("MainUI init! locale: {}", locale); 
messageByLocaleService.setLocale(locale); 

反対がこれですアドバイス他の質問:私は(ブラウザについて)このようにロケールを取得Vaadinアプリケーションで other question

2

final WebBrowser webBrowser = Page.getCurrent().getWebBrowser(); 
Locale locale = webBrowser.getLocale(); 

メソッドは、ブラウザのデフォルトのロケートを返します。

0

Page.getCurrent().getWebBrowser()はnull例外をスローすることがあります。私はまた、クッキーを評価する目的でリクエストオブジェクトが必要です。

私はVaadinService.getCurrentRequest()でリクエストオブジェクトを取得できます。 そこからロケールを取得して、シングルポイント障害が発生し、コードの信頼性が向上します。

だから、私の現在の答えは:

Locale locale = VaadinService.getCurrentRequest().getLocale(); 
関連する問題