JSF - Uluslararasılaştırma
Uluslararasılaştırma, durum mesajlarının, GUI bileşen etiketlerinin, para biriminin, tarihin programda kodlanmadığı bir tekniktir. Bunun yerine, kaynak paketlerinde kaynak kodunun dışında depolanır ve dinamik olarak alınırlar. JSF, kaynak paketini işlemek için çok uygun bir yol sağlar.
Bir JSF uygulamasını içselleştirmek için aşağıdaki adımlar gereklidir.
1. Adım: Özellikler dosyalarını tanımlayın
Her yerel ayar için özellikler dosyası oluşturun. Ad, <dosya-adı> _ <yer> .properties biçiminde olmalıdır.
Varsayılan yerel ayarlar, dosya adında ihmal edilebilir.
messages.properties
greeting = Hello World!
messages_fr.properties
greeting = Bonjour tout le monde!
2. Adım: faces-config.xml dosyasını güncelleyin
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. Adım: Kaynak paketi değişkenini kullanın
home.xhtml
<h:outputText value = "#{msg['greeting']}" />
Örnek Uygulama
JSF'de uluslararasılaştırmayı test etmek için bir test JSF uygulaması oluşturalım.
Adım | Açıklama |
---|---|
1 | JSF - First Application bölümünde açıklandığı gibi com.tutorialspoint.test paketinin altında helloworld adıyla bir proje oluşturun . |
2 | Src → mai klasörü altında kaynaklar klasörü oluşturun . |
3 | Src → ana → kaynaklar klasörü altında com klasörü oluşturun . |
4 | Src → ana → kaynaklar → com klasörü altında öğretici nokta klasörü oluşturun . |
5 | Src → ana → kaynaklar → com → tutorialspoint klasörü altında messages.properties dosyası oluşturun . Aşağıda açıklandığı gibi değiştirin. |
6 | Src → ana → kaynaklar → com → tutorialspoint klasörü altında messages_fr.properties dosyası oluşturun . Aşağıda açıklandığı gibi değiştirin. |
7 | Create yüzler-config.xml içinde WEB INFf aşağıda açıklandığı gibi daha eski. |
8 | Aşağıda açıklandığı gibi com.tutorialspoint.test paketi altında UserData.java oluşturun . |
9 | Home.xhtml'yi aşağıda açıklandığı gibi değiştirin . Dosyaların geri kalanını değiştirmeyin. |
10 | İş mantığının gereksinimlere göre çalıştığından emin olmak için uygulamayı derleyin ve çalıştırın. |
11 | Son olarak, uygulamayı savaş dosyası biçiminde oluşturun ve Apache Tomcat Web sunucusunda konuşlandırın. |
12 | Son adımda aşağıda açıklandığı gibi uygun URL'yi kullanarak web uygulamanızı başlatın. |
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>
Yapılan tüm değişikliklere hazır olduğunuzda, uygulamayı JSF - İlk Uygulama bölümünde yaptığımız gibi derleyip çalıştıralım. Başvurunuzla ilgili her şey yolundaysa, bu aşağıdaki sonucu verecektir.
Açılır listeden dili değiştirin. Aşağıdaki çıktıyı göreceksiniz.