如何在显示我的网站时检测用户首选语言,网站是基于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
但我确保如果用户使用法语作为他们的计算机语言,他们会自动将其定向到法语版本。
答案 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发生了变化
两者的结合
单独使用的接受语言也可能是一个很好的标准,但是您可以将客户端绑定到特定语言。它可以作为决定的起点