2013-07-30 191 views
0

我做了一個JSTL JSP i18N,遵循本指南How to internationalize a Java web application?然而,我無法設置默認語言,我用< c:set>來設置默認的語言,每次body load(onload)但它當我刷新頁面時隨機顯示語言。JSTL JSP默認語言

您能否給我默認語言的想法?

<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> 
+1

你能告訴你的代碼。 – NINCOMPOOP

+0

向我們顯示您的代碼。告訴我們你期望它做什麼,以及它做什麼。你的問題沒有意義:你在服務器端執行的JSTL與在客戶端執行的JavaScript混淆。 –

+0

你完全誤解了JSP和JavaScript的作用。 JSP是一個HTML代碼生成器,JavaScript是該HTML代碼的一部分。在瀏覽器中右鍵單擊頁面,然後執行*查看源代碼*。你看到了什麼?沒錯,沒有一行JSP代碼!只是擺脫所有的JS代碼。他們沒有做任何有用的事情。 – BalusC

回答

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併發送到瀏覽器,因爲<c:set>不會生成任何內容。它只會改變服務器端會話屬性的值:

<script> 
function setFR() 
{ 

} 
function setEN() 
{ 

} 
function setES() 
{ 

} 

這沒有任何意義。

0

您可以通過這種方式如下

<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" /> 

設置首選的默認語言環境,請確保您有相應的資源包

+0

我使用< c:set >和的原因是每次選擇特定語言時設置新的語言,所以如果我設置下面的例子,我不能再改變語言 – bluewonder

+0

我不能不明白你到底在找什麼?默認語言是什麼意思?你能解釋一下嗎? – junkiecoder

+0

我的意思是頁面加載時的第一種語言 – bluewonder