요청/뷰 수준별로 선택한 로케일 기억 대신 JSF에서 세션 수준 지역화를 구현하는 방법
P粉360266095
2023-08-22 21:30:42
<p><code>faces-config.xml</code>:</p>
<pre class="brush:php;toolbar:false;"><application>
<로케일-설정>
<default-locale>ru</default-locale>
<supported-locale>ua</supported-locale>
</locale-config>
</application></pre>
<p>빈 액션 메소드에서 현재 뷰의 로케일을 다음과 같이 변경합니다.</p>
<pre class="brush:php;toolbar:false;">FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale("ua"));</pre>
<p>문제는 <code>ua</code> 로케일이 세션이 아닌 요청/뷰에만 적용된다는 것입니다. 동일한 세션의 다른 요청/뷰는 로케일을 기본 <code>ru</code> 값으로 재설정합니다. </p>
<p>세션에 로캘을 어떻게 적용하나요? </p>
문제는 .properties 파일 이름과도 관련이 있는 것으로 확인됩니다. Java의 로케일 코드(소문자): en_gb 그러나 Netbeans에 의해 자동으로 생성된 로케일은 소문자_대문자입니다. 예: message_en_GB.properties 다음으로 변경하세요: message_en_gb.properties 그러면 제대로 작동할 것입니다. 모든 것을 시도했다면
선택한 로케일을 세션 범위에 저장하고 두 위치에 설정해야 합니다. 한 번은
UIViewRoot#setLocale()
立即在更改区域设置后(这将更改当前视图根的区域设置,从而在后续请求中得到反映;如果之后执行重定向,则此部分是不必要的),以及一次在<f:view>
的locale
속성을 통해(이렇게 하면 후속 요청/보기에서 로케일이 설정/보존됩니다).다음은
으아악LocaleBean
모양의 예입니다.뷰가 어떻게 보여야 하는지에 대한 예는 다음과 같습니다.
으아악이는
으아악#{text}
已在faces-config.xml
의 구성이 다음과 같다고 가정합니다.<html lang>
은 JSF 기능에는 필수가 아니지만 검색 엔진 설명 페이지에는 필수입니다. 그렇지 않으면 중복된 콘텐츠로 표시될 수 있으며 이는 SEO에 좋지 않습니다.참조: