JSF-국제화
국제화는 상태 메시지, GUI 구성 요소 레이블, 통화, 날짜가 프로그램에서 하드 코딩되지 않는 기술입니다. 대신 리소스 번들의 소스 코드 외부에 저장되고 동적으로 검색됩니다. JSF는 리소스 번들을 처리하는 매우 편리한 방법을 제공합니다.
JSF 애플리케이션을 내부화하려면 다음 단계가 필요합니다.
1 단계 : 속성 파일 정의
각 로케일에 대한 특성 파일을 작성하십시오. 이름은 <file-name> _ <locale> .properties 형식이어야합니다.
기본 로케일은 파일 이름에서 생략 할 수 있습니다.
messages.properties
greeting = Hello World!
messages_fr.properties
greeting = Bonjour tout le monde!
2 단계 : faces-config.xml 업데이트
faces-config.xml
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>fr</supported-locale>
</locale-config>
<resource-bundle>
<base-name>com.tutorialspoint.messages</base-name>
<var>msg</var>
</resource-bundle>
</application>
3 단계 : 리소스 번들 변수 사용
home.xhtml
<h:outputText value = "#{msg['greeting']}" />
예제 애플리케이션
JSF에서 국제화를 테스트하기 위해 테스트 JSF 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | JSF-First Application 장에 설명 된대로 com.tutorialspoint.test 패키지 아래에 helloworld 라는 이름의 프로젝트를 만듭니다 . |
2 | src → mai 폴더 아래에 리소스 폴더를 만듭니다 . |
삼 | src → main → resources 폴더 아래에 com 폴더를 만듭니다 . |
4 | src → main → resources → com 폴더 아래에 tutorialspoint 폴더를 만듭니다 . |
5 | src → main → resources → com → tutorialspoint 폴더 아래에 messages.properties 파일을 작성하십시오 . 아래 설명대로 수정하십시오. |
6 | src → main → resources → com → tutorialspoint 폴더 아래에 messages_fr.properties 파일을 만듭니다 . 아래 설명대로 수정하십시오. |
7 | 아래 설명과 같이 이전의 WEB-INFf 에 faces-config.xml 을 만듭니다 . |
8 | 아래에 설명 된대로 com.tutorialspoint.test 패키지 아래에 UserData.java 를 만듭니다 . |
9 | 아래에 설명 된대로 home.xhtml 을 수정 합니다. 나머지 파일은 변경하지 마십시오. |
10 | 애플리케이션을 컴파일하고 실행하여 비즈니스 로직이 요구 사항에 따라 작동하는지 확인합니다. |
11 | 마지막으로 애플리케이션을 war 파일 형식으로 빌드하고 Apache Tomcat 웹 서버에 배포합니다. |
12 | 마지막 단계에서 아래에 설명 된대로 적절한 URL을 사용하여 웹 애플리케이션을 시작하십시오. |
messages.properties
greeting = Hello World!
messages_fr.properties
greeting = Bonjour tout le monde!
faces-config.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<faces-config
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version = "2.0">
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>fr</supported-locale>
</locale-config>
<resource-bundle>
<base-name>com.tutorialspoint.messages</base-name>
<var>msg</var>
</resource-bundle>
</application>
</faces-config>
UserData.java
package com.tutorialspoint.test;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
@ManagedBean(name = "userData", eager = true)
@SessionScoped
public class UserData implements Serializable {
private static final long serialVersionUID = 1L;
private String locale;
private static Map<String,Object> countries;
static {
countries = new LinkedHashMap<String,Object>();
countries.put("English", Locale.ENGLISH);
countries.put("French", Locale.FRENCH);
}
public Map<String, Object> getCountries() {
return countries;
}
public String getLocale() {
return locale;
}
public void setLocale(String locale) {
this.locale = locale;
}
//value change event listener
public void localeChanged(ValueChangeEvent e) {
String newLocaleValue = e.getNewValue().toString();
for (Map.Entry<String, Object> entry : countries.entrySet()) {
if(entry.getValue().toString().equals(newLocaleValue)) {
FacesContext.getCurrentInstance()
.getViewRoot().setLocale((Locale)entry.getValue());
}
}
}
}
home.xhtml
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:h = "http://java.sun.com/jsf/html"
xmlns:f = "http://java.sun.com/jsf/core">
<h:head>
<title>JSF tutorial</title>
</h:head>
<h:body>
<h2>Internalization Language Example</h2>
<h:form>
<h3><h:outputText value = "#{msg['greeting']}" /></h3>
<h:panelGrid columns = "2">
Language :
<h:selectOneMenu value = "#{userData.locale}" onchange = "submit()"
valueChangeListener = "#{userData.localeChanged}">
<f:selectItems value = "#{userData.countries}" />
</h:selectOneMenu>
</h:panelGrid>
</h:form>
</h:body>
</html>
모든 변경이 완료되면 JSF-First Application 장에서했던 것처럼 애플리케이션을 컴파일하고 실행 해 보겠습니다. 응용 프로그램에 문제가 없으면 다음과 같은 결과가 생성됩니다.
드롭 다운에서 언어를 변경합니다. 다음 출력이 표시됩니다.