【问题标题】:Spring MVC: redirect user according to browser languageSpring MVC:根据浏览器语言重定向用户
【发布时间】:2015-02-19 05:49:28
【问题描述】:

Spring MVC 4 中,我如何根据 浏览器语言(HTTP 标头“Accept-语言”)?

如果用户尝试访问 URL example.com/some/path,如果其浏览器语言为“DE”(即“Accept-Language”标头设置为“de”),它将重定向到 de.example.com/some/path

同样,如果用户正在访问de.example.com/some/path,并且其语言为EN,则应将其重定向到example.com/some/path

最简单的方法是什么?

【问题讨论】:

    标签: java spring spring-mvc internationalization http-accept-language


    【解决方案1】:

    创建一个HandlerInterceptor(扩展HandlerInterceptorAdapter)并从Request中获取Accept-Language header。您需要在 Web 应用程序上下文配置中注册您的拦截器。

    您还想知道您的服务器在哪个域上运行。见How to get domain URL and application name?

    您应该允许用户更改他们的区域设置(即使浏览器设置为 en_US,他们也可能希望您的网站使用德语)。所以在这种情况下你需要设置一个cookie。也见LocaleChangeInterceptor

    【讨论】:

    • 感谢您的参考。这一切似乎有点复杂(我认为有一个更简单的方法),但现在我尝试了!
    【解决方案2】:

    在你的控制器中这样的东西怎么样:

    @RequestMapping("/path")
    public String someMapping(Locale locale) {
        if ("de".equals(locale.getLanguage())) {
            return "redirect:http://de.example.com/some/path";
        }
    }
    

    注意语言代码是小写的。

    【讨论】:

    • 你需要把它放在每个控制器中,以防它们没有到达 /path
    • 是的,也许我没有在我的网站中指定“some/path”是 any 路径,正如@NeilMcGuigan 所说,我需要将它放在每个控制器(我会避免这种情况)..此外,它似乎甚至无法处理相反的情况(从 de.example.com 到 example.com)......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2011-01-21
    相关资源
    最近更新 更多