代码之家  ›  专栏  ›  技术社区  ›  Adder

Vaadin框架从浏览器获取区域设置

  •  1
  • Adder  · 技术社区  · 7 年前

    我设置语言环境是为了翻译。 但是,如果我在会话中间更改区域设置并重新加载页面,它将保持在旧的区域设置中。

    你知道从浏览器获取最新语言设置的方法吗?

    我的代码:

    @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());
            ...
    

    我自己找到了一个解决方案,但我不能百分之百确定这是正确的解决方案。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Adder    7 年前

    我发现了 Page.getCurrent().getWebBrowser()

    我可以通过以下方式获取请求对象: VaadinService.getCurrentRequest() . 因此,我可以从那里获得区域设置,并有一个单点故障,使我的代码更可靠。

    因此,我目前的答案是:

    Locale locale = VaadinService.getCurrentRequest().getLocale();
    
        2
  •  2
  •   newOne    7 年前

    在Vaadin应用程序中,我以这种方式获得区域设置(关于浏览器):

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

    方法返回浏览器的默认位置。

        3
  •  0
  •   Adder    7 年前

    我发现使用请求。getLocale()做了我想做的事情,这让我感到惊讶,因为一些与我非常相似的问题出现了要求解决的问题。getLocale不起作用,但会话。getLocale确实有效。

    代码:

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

    另一个建议相反的问题是: other question