![](/img/trans.png)
[英]How to get locale selected in keycloak login page, not user default locale?
[英]how get user locale in jsp page when he visit website and display page in user language
我試圖獲取用戶區域設置語言,當他訪問我的網站並以該語言顯示網站時。如何檢測用戶區域設置並附加到瀏覽器URL,就像我們從印度訪問http://www.microsoft.com一樣 ,然后它會自動顯示URL作為http://www.microsoft.com/zh-cn/default.aspx ,例如,我的網站名稱是http://www.myweb.com,那么如何將URL設置為http://www.myweb.com? language = zh_CN在網頁加載中。 因為我在web.xml中將home.jsp設置為歡迎文件,所以當我從netbeans運行Web應用程序時,它顯示localhost:8080 / Myweb /,因此如果我要發送頁面,用戶將如何知道該頁面是英語還是荷蘭語鏈接到我在荷蘭的朋友? 簡而言之,當用戶打開我的網站(例如http://www.myweb.com?language=nl)時,我想在URL中顯示語言參數,即自動檢測用戶區域設置並將該語言設置為參數
這是我的代碼。
<%@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>
編寫一個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());
}
}
不是為我工作(也許現在已經過時了?)
這是我的更新版本:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.