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