【问题标题】:JSTL JSP Default LanguageJSTL JSP 默认语言
【发布时间】:2013-07-30 14:29:44
【问题描述】:

我按照本指南How to internationalize a Java web application? 做了一个 JSTL JSP i18N 但是,我无法设置默认语言,我使用 来设置每次正文加载(onload)时的默认语言,但它随机显示刷新页面时的语言。

你能告诉我默认语言的想法吗?

<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmtlang:setLocale value="${language}" />
<fmtlang:setBundle basename="com.example.i18n.text" var="lang" />
<script>
function setFR()
{
    <c:set var="language" scope="session" value="fr"/>
}
function setEN()
{
    <c:set var="language" scope="session" value="en"/>
}
function setES()
{
    <c:set var="language" scope="session" value="es"/>
}
</script>

<html lang="${language}">
<body onload="setFR()">
<div id="all">

    <img src="img/contentlogin.jpg"/>
    <div id="language">
        <form id="formLang" name="formlang">
        <button type="submit" style="border: 0; background: transparent" id="language"  name="language" value="fr" ${language == 'fr' ? 'selected' : ''}>
            <img src="icon/fr.png" width="32" height="32" alt="submit" />
        </button>
        <button type="submit" style="border: 0; background: transparent" id="language" name="language" value="en" ${language == 'en' ? 'selected' : ''}>
            <img src="icon/us.png" width="32" height="32" alt="submit" />
        </button>
        <button type="submit" style="border: 0; background: transparent" id="language"  name="language" value="es" ${language == 'es' ? 'selected' : ''}>
            <img src="icon/es.png" width="32" height="32" alt="submit" />
        </button>
    </form>
    </div>
    <form id="form1" name="form1" method="post" action="<%=appPath%>/loginAction">
    <div id="info">
        <span><fmtlang:message key="login.span.pleaseenterinfo" bundle="${lang}"/></span>
    </div>
    <div id="username_label">
        <span><fmtlang:message key="login.label.username" bundle="${lang}"/></span>
    </div>
    <div id="username">
            <input type="text" maxlength="15" STYLE="color: #3c7033; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: #ebf7ca;" name="username" id="username" size="22">
    </div>

    <div id="password_label">
        <span><fmtlang:message key="login.label.password" bundle="${lang}"/></span>
    </div>
    <div id="password">
            <input type="password" STYLE="color: #3c7033; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: #ebf7ca;" id ="password" name="password" size="22">
            <input type="hidden" id ="language" name="language" value=<c:out value="${language}"/> size="22">
    </div>
    <div id="forgetpassword">
        <span><fmtlang:message key="login.span.forget" bundle="${lang}"/></span>
    </div>

    <div id="forcea">
        <img src="img/forceacopyright.png"/>
    </div>

     <div id="buttonlogin">
        <button type="submit" style="border: 0; background: transparent" >
            <img src="img/login.png" alt="12" width="101" height="94" border="0" />
        </button>
    </div>

    <div id="wronguandp">
        <%if(message!=null){ %>
            <b><span style="color: red;"> <fmtlang:message key="login.wrong.display" bundle="${lang}"/></span></b>
        <%}%>

    </div>
    </form>
    </div>
</body>

【问题讨论】:

  • 你能显示你的代码吗?
  • 向我们展示您的代码。告诉我们您希望它做什么,以及它会做什么。您的问题没有意义:您将在服务器端执行的 JSTL 与在客户端执行的 JavaScript 混淆了。
  • 你完全误解了 JSP 和 JavaScript 的作用。 JSP 是一个 HTML 代码生成器,而 JavaScript 是该 HTML 代码的一部分。在浏览器中右键单击页面并执行查看源代码。你看到了什么?对,没有一行 JSP 代码!只需摆脱所有的 JS 代码。他们没有做任何有用的事情。
  • 我相信你的问题来自这样一个事实,即你想要实现常见的反模式,更好地称为语言切换器。我认为你一开始并不真正需要这个,将页面 Locale 设置为请求 Locale 更有意义。

标签: jsp internationalization jstl


【解决方案1】:

JavaScript 在客户端执行。 JSP 标签在服务器端执行,可用于生成 JavaScript。因此,执行以下命令时会发生以下情况:

<script>
function setFR()
{
    <c:set var="language" scope="session" value="fr"/>
}
function setEN()
{
    <c:set var="language" scope="session" value="en"/>
}
function setES()
{
    <c:set var="language" scope="session" value="es"/>
}

在服务器端,语言会话属性设置为fr,然后设置为en,然后设置为es。生成以下 JavaScript 并将其发送到浏览器,因为 &lt;c:set&gt; 不生成任何内容。它只改变服务器端会话属性的值:

<script>
function setFR()
{

}
function setEN()
{

}
function setES()
{

}

这没有任何意义。

【讨论】:

    【解决方案2】:

    您可以通过这种方式设置首选的默认语言环境,如下所示

    <fmt:setLocale value=”en_US” />
    

    而不是

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

    请确保您有对应的资源包

    【讨论】:

    • 我使用 的原因是每次选择特定语言时都要设置新的语言,所以如果我设置按照你的例子,我不能再改变语言了
    • 我不明白您到底在寻找什么?默认语言是什么意思?你能解释一下吗!
    • 我指的是页面加载时的第一种语言
    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多