【问题标题】:how get user locale in jsp page when he visit website and display page in user language当他访问网站并以用户语言显示页面时如何在jsp页面中获取用户语言环境
【发布时间】:2013-09-06 11:01:23
【问题描述】:

当他访问我的网站并以该语言显示网站时,我正在尝试获取用户区域设置语言。如何检测用户区域设置并附加到浏览器 url,例如当我们从印度访问 http://www.microsoft.com 时,它会自动将 url 显示为 @987654322 @ 例如我的网站名称是http://www.myweb.com 那么如何在页面加载时将网址设为http://www.myweb.com?language=en ..? 因为我在 web.xml 中将 home.jsp 设置为欢迎文件,所以当我从 netbeans 运行我的网络应用程序时,它显示 localhost:8080/Myweb/ 所以如果我想发送页面,用户如何知道该页面是英文还是荷兰文链接到我在荷兰的朋友?简而言之,当用户打开我的网站时,我想在 URL 中显示语言参数,例如http://www.myweb.com?language=nl,即自动检测用户区域设置并将该语言设置为参数

这是我的代码....

  <%@page import="java.util.Locale"%>
  <%@ page pageEncoding="UTF-8" %>
  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  <%
   String userLocale = request.getHeader("Accept-Language");
   //out.println(userLocale);
   Locale locale = request.getLocale();
   String userlanguage = locale.getDisplayLanguage();
   out.println("LANG :" + locale.getLanguage());
  %>

  <c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale.language}" scope="session" />
  <fmt:setLocale value="${language}" />

 // here depending on user locale i am setting basename is this good approach?
  <c:choose>
  <c:when test="${language == 'nl'}">
    <fmt:setBundle basename="com.example.i18n.text_nl" />
  </c:when>
  <c:otherwise>
    <fmt:setBundle basename="com.example.i18n.text" />
  </c:otherwise>
  </c:choose>


   <html lang="${language}">
    <nav>
        <ul>
          <li>
              <a href="<c:url value='Aboutus.jsp?language=${language}'/>" 
                 title="<fmt:message key="nav.label.aboutus" />">
                 <fmt:message key="nav.label.aboutus" />
              </a>
         </li>
         <li class="shad">
              <a href="<c:url value='Contactus.jsp?language=${language}'/>"  // and also is this good way to append language as parameter to url here ?
                 title="<fmt:message key="nav.label.contactus" />">
                <fmt:message key="nav.label.contactus" />
             </a>
        </li>
       </ul>
   </nav>      
   </html>

【问题讨论】:

  • 有什么问题吗?需要更多问题/异常详细信息。但是,如果您在表单中使用 doGet 方法,则参数将显示在 URL 中,并且有一些逻辑可以使用 Locale 类设置参数值。
  • 是的,我在表单中使用了 doGet 方法,它在 url 中显示参数,但我想在 jsp 页面加载时附加参数,即用户访问我的网站时

标签: java jsp internationalization


【解决方案1】:

编写一个 HttpFilter 来处理这个问题并将其映射到 web.xml 中。

 if(request.getParameter("language")==null) {
  String userLocale = request.getHeader("Accept-Language");
  Locale locale = request.getLocale();

  if(req.getRequestUrl().contains("?")) {
   response.sendRedirect(req.getRequestUrl()+"&language="_locale.getLanguage());
  } else {
   response.sendRedirect(req.getRequestUrl()+"?language="_locale.getLanguage());
  }
 }

【讨论】:

    【解决方案2】:

    对我没用(也许现在已经过时了?)

    这是我的更新版本:

    public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {
    
        if (request instanceof HttpServletRequest) {
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;
    
            if (request.getParameter("language") == null) {
                Locale locale = request.getLocale();
    
                String qs = req.getQueryString();
                if (qs == null || qs.isEmpty()) {
                    res.sendRedirect(req.getRequestURI() + "?language=" + locale.getLanguage());
                } else {
                    res.sendRedirect(req.getRequestURI() + "?" + qs + "&language=" + locale.getLanguage());
                }
            }
        }
    
        chain.doFilter(request, response);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      相关资源
      最近更新 更多