2013-07-30 2 views
0

이 가이드 How to internationalize a Java web application?에 따라 JSTL JSP i18N을 만들었지 만, 기본 언어를 설정할 수 없어서 < c : set>을 사용하여 바디로드 (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"/> 
} 

가, 언어 세션 속성이 es에 다음 en에 다음 fr로 설정됩니다. <c:set>은 아무 것도 생성하지 않으므로 다음 JavaScript가 생성되어 브라우저로 전송됩니다. 서버 쪽에서 세션 속성의 값만 변경합니다.

<script> 
function setFR() 
{ 

} 
function setEN() 
{ 

} 
function setES() 
{ 

} 

이것은 의미가 없습니다.

<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

는이 방법으로 선호하는 기본 로케일을 설정할 수 있습니다 당신이 해당 ResourceBundle을

+0

< c:set >과 을 사용하는 이유는 특정 언어를 선택할 때마다 새로운 언어를 설정하기 때문에 더 이상 언어를 변경할 수없는 ur 예제를 설정하면 – bluewonder

+0

couldn 정확히 무엇을 찾고 계신지 이해하지 못하셨습니까? 기본 언어는 무엇을 의미합니까? 설명해 주시겠습니까! – junkiecoder

+0

나는 페이지가로드 될 때 첫 번째 언어를 의미했다. – bluewonder