Skip to content

5. مثال ۰۴ – بین‌المللی‌سازی

این مثال، بین‌المللی‌سازی پوشش‌داده‌شده در مثال اول را مجدداً بررسی می‌کند.

5.1. پروژه NetBeans

این شامل:

  • یک نما [Page1.JSP]
  • دو فایل پیام [messages*.properties]
  • اقداماتی وجود ندارد

5.2. پیکربندی پروژه

فایل [struts.xml] به شرح زیر است:


<?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>
  <!--بین‌المللی‌سازی -->
  <constant name="struts.custom.i18n.resources" value="messages" />
  <!-- پکیج پیش‌فرض -->
  <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>
  <!-- پکیج اکشن‌ها -->
  <package name="actions" namespace="/actions" extends="struts-default">
    <action name="Action1">
      <result name="success">/vues/Page1.JSP</result>
    </action>
  </package>
</struts>
  • خط ۸ یک ثابت Struts را تعریف می‌کند که نام فایل پیام بین‌المللی را مشخص می‌کند، در این مورد messages. فایل‌های [messages_xx.properties] در داخل دایرکتوری ClassPath پروژه جستجو خواهند شد. به همین دلیل، آنها در اینجا در ریشه [Source Packages] و [1] قرار داده شده‌اند.
  • خطوط 21–23: یک اکشن [Action1] بدون کلاس مرتبط تعریف می‌شود. سپس از یک کلاس پیش‌فرض Struts استفاده خواهد شد که متد execute آن کلید success را برمی‌گرداند. در این صورت، ویو [/vues/Page1.JSP] به کلاینت بازگردانده می‌شود. مهم است که درک کنیم این کار با فراخوانی مستقیم ویو [/vues/Page1.JSP] یکسان نیست. این به این دلیل است که فراخوانی یک اکشن، اجرای اینترسپتورها را تحریک می‌کند، در حالی که فراخوانی مستقیم یک ویو این کار را انجام نمی‌دهد. یکی از اینترسپتورها مسئول بین‌المللی‌سازی است.

5.3. فایل‌های پیام

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

آنها سه کلید را تعریف می‌کنند: page.texte، page.titre1 و page.titre2. فایل [messages_en.properties] در صورتی که زبان صفحه انگلیسی (en) باشد، استفاده خواهد شد. فایل [messages.properties] برای سایر زبان‌ها استفاده خواهد شد. این فایل پیام پیش‌فرض است. زبان مورد استفاده یکی از موارد زیر است:

  • زبان مرورگر مشتری، همان‌طور که در ترجیحات آن که به سرور ارسال می‌شود، مشخص شده است
  • زبان درخواست‌شده توسط یک درخواست مشتری با استفاده از پارامتر request_locale=xx.

5.4. نما [Page1.JSP]

نما به شرح زیر است:


<%@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>
  • خط ۷: پیام کلیدی page.titre1 را نمایش می‌دهد
  • خط ۱۰: پیام کلیدی page.titre2 را نمایش می‌دهد
  • خط ۱۱: پیام کلیدی page.texte را نمایش می‌دهد

5.5. آزمایش

بیایید پروژه را اجرا کنیم:

  • در [1]، صفحه به زبان فرانسوی نمایش داده شد. فایل [messages.properties] استفاده شد زیرا مرورگر زبان فرانسوی را به عنوان زبان ترجیحی خود تنظیم کرده بود.
  • هنگام استفاده از [3]، صفحه به زبان انگلیسی نمایش داده شد. از فایل [messages_en.properties] استفاده شد زیرا URL و [2] از پارامتر request_locale=en استفاده کرده بودند.

در [4]، یک صفحه به زبان آلمانی (de) درخواست شده است. از آنجا که فایلی به نام [messages_de.properties] وجود ندارد، فایل پیش‌فرض [messages.properties] به جای [5] استفاده می‌شود.

در [6]، زبان انگلیسی به‌عنوان زبان ترجیحی مرورگر تنظیم شده است.

در [7]، اقدام [Action1] بدون هیچ‌گونه پارامتر زبانی درخواست شده است. درخواست از مرورگری می‌آید که زبان ترجیحی آن انگلیسی (en) است. بنابراین، به جای [8]، از فایل [messages_en.properties] استفاده می‌شود.

از این پس، تمام پروژه‌ها یک فایل واحد [messages.properties] خواهند داشت که برای همه زبان‌ها استفاده می‌شود. این امر مستلزم نوشتن ویوهایی است که از کلیدهای این فایل استفاده می‌کنند. بین‌المللی‌سازی به زبان انگلیسی به سادگی شامل ایجاد فایل [messages_en.properties] برای پیام‌های انگلیسی خواهد بود. هیچ تغییر دیگری لازم نیست.