Aralık 03 2008

Struts 2 Internalization ( i18n )

Etiketler : , , , , ,

Yaptığımız projelerde en çok başımızı ağrıtan yerlerden biride çoklu dil desteği özelliğini geliştirmektir. Struts 2 de, Internalization(i18n) işlemini yazılımcı açısından kolaylaştıran bir yapı sunmuştur. Bu yazımda sizlere struts 2 de internalization işleminin nasıl yapıldığından bahsedeceğim.

Struts 2 projelerinde internalization işlemini gerçekleştirmek için öncelikle src/struts.properties dosyamızda “struts.custom.i18n.resources” değerini “i18n” olarak belirtmemiz gerekmektedir. struts.properties dosyasının içeriği aşağıdaki gibi olmalıdır;

struts.ui.theme=simple
struts.custom.i18n.resources=i18n
struts.i18n.encoding=UTF-8
struts.action.extension=action


Daha sonra Login.java mızın bulunduğu dizin olan src/net/gokhansabir/login dizininin altına dil dosyalarımızı yaratalım. Ben sadece İngilizce ve Türkçe için yapıyorum.

Türkçe dil dosyamızı Login_tr.properties olarak yaratıyoruz. Dosya içeriğide aşağıdaki gibi olmalıdır;

gks.login.form.username=Kullan\u0131c\u0131 Ad\u0131
gks.login.form.password=\u015eifre
gks.login.form.login=G\u00f6nder
gks.success.message=Ba\u015far\u0131l\u0131

Türkçe karakterlerin yerine kodlarını yazıyoruz. Yukarda gördüğünüz gks.login.form.username değişkeni, bizim Login.jsp’ de “Kullanıcı Adı” yazısını ekranda göstermek için kullandığımız s:text struts 2 tagının name özelliğine verdiğimiz değerdir. Şifre, gönder butonu ve başarılı yazısı içinde aynısı geçerlidir. WebContent/jsp/login/ dizini altında yer alan Login.jsp nin içeriğide aşağıdaki gibi olmalıdır;

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Sign On</title>
</head>

<body>
<s:form action="Login_showLogin" >
<s:fielderror />
<s:actionerror/>
<table>
 <tr>
   <td><s:text name="gks.login.form.username" /> </td>
   <td><s:textfield name="username" /></td>
 </tr>
 <tr>
  <td><s:text name="gks.login.form.password" /></td>
  <td><s:password name="password"/></td>
 </tr>
 <tr>
  <td colspan="2">
    <s:submit key="gks.login.form.login"  action="Login_doLogin" />
  </td>
 </tr>
</table>
</s:form>
</body>
</html>

Kullanıcı adı ve şifre doğru ise karşımıza çıkacak mesajı içeren WebContent/jsp/success/ dizini altındaki Success.jsp içeriğide aşağıdaki gibi olmalıdır;

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Sign On</title>
</head>
<body>
<s:text name="gks.success.message" />
</body>
</html>

JSP’lerimizi verdik hatırlatma olması açısından Login.java içeriğinide tekrar vermek istiyorum;

package net.gokhansabir.login;

import com.opensymphony.xwork2.ActionSupport;
public class Login extends ActionSupport{

  public String showLogin() throws Exception {
    return net.gokhansabir.util.Constant.SUCCESS;
  }

  public String showErorr() throws Exception {
   return net.gokhansabir.util.Constant.ERROR;
  }

  public String showEnter() throws Exception {
   return net.gokhansabir.util.Constant.LOGGEDIN;
  }

  public String execute() throws Exception {
   return showLogin();
  }

  public String doLogin(){
   if(getUsername().trim().equals("gokhansabir@gmail.com")
      && getPassword().equals("123456"))
       return net.gokhansabir.util.Constant.LOGGEDIN;
   else{
	addActionError("Usename or password doesn't match!!!");
	return net.gokhansabir.util.Constant.ERROR;
	}

}

 private String username;

 public String getUsername() {
   return username;
 }

 public void setUsername(String username) {
   this.username = username;
 }

 private String password;

 public String getPassword() {
   return password;
 }

 public void setPassword(String password) {
   this.password = password;
 }

}

Evet artık işlemimiz bitmek üzere sıra geldi İngilizce dil dosyamızı hazırlamaya. Türkçe dil dosyamız ile aynı dizinde olacak ve aynı değişkenleri kapsayacak tek farkı değişkenlere Türkçe değerler değilde İngilizce değerlerin eşitlenecek olmasıdır.

İngilizce dil dosyamızı Login_en.properties olarak yaratıyoruz. Dosya içeriğide aşağıdaki gibi olmalıdır;

gks.login.form.username=User Name
gks.login.form.password=Password
gks.login.form.login=Send
gks.success.message=success

Evet artık işlemimiz bitti. Şimdi yaptığımız uygulamayı test edebiliriz.Fakat test etmeden önce bişeyi daha söylemem gerekiyor. Oda nasıl test edeceğiniz :))

http://localhost:8080/LoginForm/Login_showLogin.action?request_locale=en

http://localhost:8080/LoginForm/Login_showLogin.action?request_locale=tr

Yukarıdaki adreslerde de göreceğiniz gibi request_locale değişkeni ile sisteme en veya tr değerlerini gönderdiğiniz takdirde sistem seçmiş olduğunuz dil ile işleme devam edecektir. Örneği İndir

Yorumlar:

"Struts 2 Internalization ( i18n )" » (3) Yorum

Yorum Yazın

Clicky Web Analytics