如何在显示我的网站时检测用户首选语言,网站是基于java jsp的

时间:2014-01-13 15:24:28

标签: java jsp internationalization web

如何在显示我的网站时检测用户首选语言,网站是基于java jsp的。所以我目前有

http://jthink.net/songkong/index.jsp

http://jthink.net/songkong/features.jsp

并打算通过在fr子文件夹中重新创建法语版本来创建法语版本

http://jthink.net/fr/songkong/index.jsp

http://jthink.net/fr/songkong/features.jsp

但我确保如果用户使用法语作为他们的计算机语言,他们会自动将其定向到法语版本。

2 个答案:

答案 0 :(得分:1)

诀窍是使用客户端(浏览器)发送的“Accept-Language”。 Accept-Language从客户端在http标头中发送,并让服务器知道用户的首选语言。

您需要创建一个客户过滤器(比如MyFilter)并在web.xml中注册它。

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig config) throws ServletException {
        //
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;          
        if(request.getParameter("language")==null) {
              String userLocale = request.getHeader("Accept-Language");
              Locale locale = request.getLocale();
              String requestURI = request.getRequestURI();

              // put your logic for userLocale and redirect accordingly          

             }
    }

    @Override
    public void destroy() {
        //
    }
}

在web.xml中注册

<filter>
    <filter-name>localeFilter</filter-name>
    <filter-class>com.my.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>localeFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

更新

正如@radimpe所建议的那样,最佳做法是使用持久性Cookie。如果某些用户希望将另一种语言保留为您网站的默认语言,这将有助于您跟踪

答案 1 :(得分:0)

您可以通过多种方式执行此操作:

我假设用户不必进行身份验证?

使用持久性Cookie跟踪UPL - 缺点 - 当用户手动清除所有Cookie时 - 此首选项丢失或当用户在私人模式下浏览时,则不会检测到这些Cookie

基于IP - 假设您的网站没有身份验证,您可以通过存储语言的IP和首选项来执行预定的语言检测。这又有一个缺点 - 如果用户的IP发生了变化

两者的结合

单独使用的接受语言也可能是一个很好的标准,但是您可以将客户端绑定到特定语言。它可以作为决定的起点