Vaadin框架从浏览器

时间:2017-11-08 14:25:28

标签: spring session internationalization vaadin locale

我正在设置语言环境以进行翻译。 它在区域设置在会话期间保持不变时有效。 但是,如果我在会话中间更改区域设置并重新加载页面,它将保留在旧的区域设置中。

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

我的代码:

@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%确定这是正确的解决方案。

3 个答案:

答案 0 :(得分:2)

在Vaadin应用程序中,我以这种方式获取Locale(关于浏览器):

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

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

答案 1 :(得分:2)

我发现Page.getCurrent().getWebBrowser()有时会抛出一个null异常。我还需要一个请求对象来评估cookie。

我可以通过VaadinService.getCurrentRequest()获取请求对象。 所以我可以从那里获得语言环境,并且有一个单点故障,使我的代码更可靠。

所以,我目前的答案是:

Locale locale = VaadinService.getCurrentRequest().getLocale();

答案 2 :(得分:0)

我发现使用request.getLocale()做了我想要的,这让我感到惊讶,因为一些与我非常相似的问题有一个oposite问题,request.getLocale没有工作但session.getLocale确实有效

代码:

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

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