Skip to content

5. Örnek 04 – Uluslararasılaştırma

Bu örnek, ilk örnekte incelenen uluslararasılaştırma konusuna geri dönmektedir.

5.1. NetBeans projesi

Burada şunlar bulunur:

  • bir [Page1.JSP] görünümü
  • iki mesaj dosyası [messages*.properties]
  • hiçbir eylem yok

5.2. Proje yapılandırması

[struts.xml] dosyası şu şekildedir:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
  <!-- uluslararasılaştırma -->
  <constant name="struts.custom.i18n.resources" value="messages" />
  <!-- varsayılan paket -->
  <package name="default" namespace="/" extends="struts-default">
    <default-action-ref name="index" />
    <action name="index">
      <result type="redirectAction">
        <param name="actionName">Action1</param>
        <param name="namespace">/actions</param>
      </result>
    </action>
  </package>
  <!-- paket eylemleri -->
  <package name="actions" namespace="/actions" extends="struts-default">
    <action name="Action1">
      <result name="success">/vues/Page1.JSP</result>
    </action>
  </package>
</struts>
  • 8. satırda, uluslararasılaştırılmış mesaj dosyasının adını belirleyen bir Struts sabiti tanımlanmıştır; burada bu ad messages'tir. [messages_xx.properties] dosyaları, projenin ClassPath dizininde aranacaktır. Bu nedenle, bu dosyalar [Source Packages] ve [1] dizinlerinin kök dizinine yerleştirilmiştir.
  • 21-23. satırlar: İlişkili bir sınıfı olmayan bir [Action1] eylemini tanımlar. Bu durumda, Struts'un varsayılan sınıfı kullanılır ve bu sınıfın execute yöntemi, success anahtarını döndürür. Böylece [/vues/Page1.JSP] görünümü istemciye geri gönderilecektir. Bunun, [/vues/Page1.JSP] görünümünü doğrudan çağırmakla aynı şey olmadığını anlamak önemlidir. Çünkü bir eylemin çağrılması, interceptörlerin çalışmasını tetikler; oysa bir görünümü doğrudan çağırmak bunu yapmaz. Interceptörlerden biri uluslararasılaştırmayı yönetir.

5.3. Mesaj dosyaları

messages.properties


page.texte=Ici, on met un texte fran\u00e7ais...
page.titre1=Fran\u00e7ais
page.titre2=Fran\u00e7ais

messages_en.properties


page.texte=Here, we put some english text...
page.titre1=English
page.titre2=English

Bu dosyalar üç anahtar tanımlar: page.texte, page.titre1, page.titre2. Sayfanın dili İngilizce (en) ise [messages_en.properties] dosyası kullanılacaktır. Diğer tüm diller için [messages.properties] dosyası kullanılacaktır. Bu, varsayılan mesaj dosyasıdır. Kullanılan dil şunlardan biridir:

  • sunucuya gönderilen tercihlerinde belirtilen istemci tarayıcısının dili
  • request_locale=xx parametresiyle istemcinin isteğinde belirtilen dil.

5.4. [Page1.JSP] görünümü

Görünüm şu şekildedir:


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title><s:text name="page.titre1"/></title>
  </head>
  <body>
    <h1><s:text name="page.titre2"/></h1>
    <s:text name="page.texte"/>
  </body>
</html>
  • 7. satır: page.titre1 anahtar mesajını görüntüler
  • 10. satır: page.titre2 anahtar mesajını görüntüler
  • 11. satır: page.texte anahtar mesajını görüntüler

5.5. Testler

Projeyi çalıştıralım:

  • [1]'te sayfa Fransızca olarak görüntülendi. Kullanılan tarayıcının tercih edilen dili Fransızca olduğu için [messages.properties] dosyası kullanıldı.
  • [3] dosyasında sayfa İngilizce olarak görüntülendi. [messages_en.properties] dosyası kullanıldı çünkü URL ve [2] dosyalarında request_locale=en parametresi kullanılmıştı.

[4] dosyasında, Almanca (de) bir sayfa istenmiştir. [messages_de.properties] dosyası bulunmadığından, varsayılan dosya olan [messages.properties] kullanılır [5].

[6]'te, tarayıcının tercih edilen dili olarak İngilizce ayarlanır.

[7]'te, [Action1] eylemi dil parametreleri olmadan talep edilir. İstek, tercih edilen dili İngilizce (en) olan bir tarayıcıdan geliyor. Dolayısıyla, [8] yerine [messages_en.properties] dosyası kullanılır.

Bundan böyle, tüm projelerde tüm diller için kullanılacak tek bir [messages.properties] dosyası bulunacaktır. Bu durum, bu dosyanın anahtarlarını kullanan görünümler yazmamızı gerektirecektir. İngilizceye uluslararasılaştırma işlemi, İngilizce mesajlar için [messages_en.properties] dosyasını oluşturmakla gerçekleşecektir. Yapılması gereken başka bir değişiklik yoktur.