我正在为翻译的目的而设置地点。当区域设置在会话期间保持不变时,它就会工作。但是,如果我在会话中间更改区域设置并重新加载页面,则它将停留在旧的区域设置中。
您知道从浏览器获取最新语言设置的方法吗?
我的守则:
@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());
...
我自己找到了一个解决方案,但我不能百分之百肯定这是正确的解决方案。
发布于 2017-11-16 05:52:13
我发现Page.getCurrent().getWebBrowser()
有时会抛出空异常。为了评估cookie,我还需要一个request对象。
我可以通过VaadinService.getCurrentRequest()
获得一个请求对象。因此,我可以从那里得到区域设置,并有一个单一的故障点,使我的代码更可靠。
所以,我目前的答案是:
Locale locale = VaadinService.getCurrentRequest().getLocale();
发布于 2017-11-08 07:04:32
在Vaadin应用程序中,我以这种方式获得区域设置(关于浏览器):
final WebBrowser webBrowser = Page.getCurrent().getWebBrowser();
Locale locale = webBrowser.getLocale();
方法返回浏览器的默认位置。
发布于 2017-11-08 06:31:29
我发现使用request.getLocale()可以做我想做的事情,这让我感到惊讶,因为与我的问题非常相似的是,request.getLocale没有工作,但session.getLocale确实工作。
代码:
Locale locale = request.getLocale();
log.debug("MainUI init! locale: {}", locale);
messageByLocaleService.setLocale(locale);
另一个相反的问题是:other question
https://stackoverflow.com/questions/47182221
复制相似问题