在过滤器中设置默认语言后,JSPI18N分别在每个页面上工作 简介

在过滤器中设置默认语言后,JSPI18N分别在每个页面上工作 简介,jsp,internationalization,jstl,servlet-filters,Jsp,Internationalization,Jstl,Servlet Filters,我正在尝试国际化(i18n)我的Java Web应用程序,它基于基本的JSP/servlet 我正在使用JSTLfmt taglib与资源包结合使用,以实现我的应用程序的i18n。我也在遵循答案/指南 问题与疑问 当我在某个页面上选择所需的语言时,如index.jsp,则该页面将被翻译为所选语言,但当我通过某个链接时,如signup.jsp,则该语言将更改为默认语言,因此i18n将在每个页面上单独工作 问题是如何在所有页面中共享语言价值 代码 首先,我有一个过滤器,它指定页面的默认/初始语言

我正在尝试国际化(i18n)我的Java Web应用程序,它基于基本的JSP/servlet

我正在使用JSTL
fmt taglib
资源包
结合使用,以实现我的应用程序的i18n。我也在遵循答案/指南


问题与疑问 当我在某个页面上选择所需的语言时,如
index.jsp
,则该页面将被翻译为所选语言,但当我通过某个链接时,如
signup.jsp
,则该语言将更改为默认语言,因此i18n将在每个页面上单独工作

问题是如何在所有页面中共享语言价值


代码 首先,我有一个过滤器,它指定页面的默认/初始语言

DefaultLocaleFilter.java



i18n.lang是指向我的资源包的路径(我正在使用Maven的原型webapp)

index.jsp



EN 茹


signup.jsp


EN
茹

您的筛选器将在每次请求时覆盖所选语言

只有在用户未选择任何语言时,才应设置默认语言

if (req.getSession().getAttribute("language") == null) {
    req.getSession().setAttribute("language", "ru");
}
但是,最好是完全删除servlet过滤器,并将
中的
pageContext.request.locale
替换为
'ru'

<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : 'ru'}" scope="session" />

您是最棒的,感谢您的帮助:)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

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

<!DOCTYPE html>
<html lang="${language}">
<head>
    <title><fmt:message key="signup.title"/></title>
</head>
<body>

    <h3 class="hero"><fmt:message key="signup.text.welcome"/></h3>

    <%-- Here is the form to Sign Up --%>


    <span class="lang">
        <form>
            <select name="language" onchange="submit()">
                <option value="en" ${language == 'en' ? 'selected' : ''}>EN</option>
                <option value="ru" ${language == 'ru' ? 'selected' : ''}>RU</option>
            </select>
        </form>
    </span>            

</body>
</html>
if (req.getSession().getAttribute("language") == null) {
    req.getSession().setAttribute("language", "ru");
}
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : 'ru'}" scope="session" />