我正在设置语言环境以进行翻译。 它在区域设置在会话期间保持不变时有效。 但是,如果我在会话中间更改区域设置并重新加载页面,它将保留在旧的区域设置中。
您知道从浏览器获取最新语言设置的方法吗?
我的代码:
@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 :(得分: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