سلسلة net. للمحترفين التدويل Internationalization والتوطين localization في dot NET


رضوى العربي

يُوفِّر إطار عمل ‎.NET طرائق مُبسطة لتَدْويِل (Internationalization) وتَوْطِين (localization) مشروعك. التَدْويِل هو بناء مشروعك بطريقة تُسهِل من عملية تَهيئته للعَمَل بلغات مُختلفة دون إجراء تَغْييرات جوهرية عليه. يتم ذلك بفَصْل ملفات الترجمة عن ملفات شيفرة المشروع. في المقابل، فإن التَوْطِين هو عملية تهيئة المشروع ذاتها ليعَمَل مع لغة بعينها من خلال ترجمة النصوص إلى تلك اللغة. يُطلَق مُصطلح العَولمة (Globalization) ليشمل كُلًا من التَدْويِل والتَوْطِين.

مثال بمشروع ASP.NET MVC

أولًا: أَضِف حزمة I18N إلى مشروع الـ MVC الخاص بك.

ثانيًا: أَضِف i18n.LocalizingModule لقسم <httpModules> أو لقسم <modules> بملف web.config، كالتالي:

<!-- IIS 6 -->
<httpModules>
    <add name="i18n.LocalizingModule" 
        type="i18n.LocalizingModule, i18n" />
</httpModules>

<!-- IIS 7 -->
<system.webServer>
    <modules>
        <add name="i18n.LocalizingModule" 
            type="i18n.LocalizingModule, i18n" />
    </modules>
</system.webServer>

ثالثًا: أَضِف مجلد باسم locale للمجلد الرئيسي الخاص بموقعك، ثم انشِئ بداخله مجلد فرعي لكل لغة ترغب بدَعْمها، مثلًا /locale/ar/.

رابعًا: انشِئ ملفًا نصيًا باسم messages.po بداخل كل مجلد من المجلدات الفرعية من الخطوة السابقة.

خامسًا: يُمكِنك كتابة السطور التالية بملف messages.po، فقط بغرض الاختبار:

#: Translation test
msgid "Hello, world!"
msgstr "أهلًا بالعالم‏!‏"

سادسًا: أَضِف مُتحكِمًا (controller) إلى المشروع، يُعيد نصًا ما بغرض تجربة الترجمة. في المثال التالي، يُعيد المُتحكِم القيمة "[[[Hello, world!‎]]]". لاحظ أنه لابُد للنص الموجود داخل الأقواس الثلاثة أن يتطابق مع قيمة msgid ضِمْن ملف الترجمة ‎.po

using System.Web.Mvc;
namespace I18nDemo.Controllers
{
    public class DefaultController : Controller
    {
        public ActionResult Index()
        {
            return Content("[[[Hello, world!]]]");
        }
    }
}

سابعًا: شغِّل المشروع، ثم اِفتَح الرابط المُقابِل للإجراء (action) الذي عَرَّفناه للتو، مثلًًا http://localhost:[yourportnumber]/default. ستُلاحِظ أنه قد تم تَغْيير الرابط تلقائيًا ليَعكِس اللغة الافتراضية الخاصة بك كالتالي http://localhost:[yourportnumber]/en/default -بفرض أن الانجليزية هي اللغة الافتراضية بمُتصفحك.

ثامنًا: إذا استبدلت كلمة ar (أو اللغة التي أَعددت ملف ترجمة خاص بها) بكلمة en الموجودة بالرابط، فستظهر النُسخة المُترجمة من النص.

تاسعًا: إذا غَيّرت إعدادات اللغة بمُتصفحك لتفضِيل لغة أُخرى، ثم فتحت الرابط ‎/‎‎default مُجددًا دون تخصيص اللغة، ستجد أنه مثل المرة السابقة قد تم تَغْيير الرابط تلقائيًا ليَعكِس لغتك الافتراضية التي قمت بضَبطِها في الخطوة السابقة، وسيَظهر النص مُترجمًا بتلك اللغة.

عاشرًا: أَضِف مُعالِجَات (handlers) بملف web.config لمنع مُستخدِمي موقعك من فَتح مجلد locale.

<!-- IIS 6 -->
<system.web>
    <httpHandlers>
        <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
</system.web>

<!-- IIS 7 -->
<system.webServer>
    <handlers>
        <remove name="BlockViewHandler"/>
        <add name="BlockViewHandler" 
            path="*" 
            verb="*" preCondition="integratedMode"  
            type="System.Web.HttpNotFoundHandler"/>
    </handlers>
</system.webServer>

ترجمة -وبتصرف- للفصل Globalization من كتاب ‎.NET Framework Notes for Professionals





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن