التعريب في الـ ASP.NET 5

17 يناير 2016     425 مشاهدة    1 تعليق
تم النشر في #التعريب  #Localization 

الـ Localization هي عملية تمكين التطبيق من التحدث باللغة المحلية وذلك باستخدام معلومات لمساحه جغرافية وثقافه معينة (Regional/Culture). فمثلا ar-SA هي الثقافة السعودية في اللغة العربية, طبعا هذا يؤثر على الأرقام والتواريخ .. إلخ.

بالنسبه لموضوع تعريب أي موقع في الـ ASP.NET 5 يمكن ان يمر بثلاثة :خطوات

1- إنشاء موارد التعريب

في هذه الخطوة يتم إنشاء ملف الموارد Resource والذي يحتوى على جميع المفردات المراد تعريبها, وطبعاً هي نفس ملفات الموارد .resx المستخدمه في الاصدارات السابقه, ففي مثالنا سيتم انشاء ملف بإسم Startup.ar-SA.resx ليتم حفظ مفردات ar-SA ونفس الحال ينطبق على بقية اللغات والثقافات.

<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Hello" xml:space="preserve">
<value>مرحباً</value>
</data>
</root>

2- إضافة الـ Middleware الخاص بعملية الـ Localization

في هذه الخطوة يتم إضافة الـ Localization Middleware في الإجراء ConfigureServices ليتم تفعيل خدمة الـتعريب في مثالنا

public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
}

3- ضبط خيارات الـ Localization

في هذه الخطوة يتم ضبط خيارات الـ Localization مثل اللغة الإفتراضية واللغات التي سيدعمها التطبيق في الإجراء Configure. ففي مثالنا تم دعم الـ ar-SA و ar-YE حيث ان العربية السعوديه هي اللغة الإفتراضيه

public void Configure(IApplicationBuilder app, IStringLocalizer<Startup> localize)
{
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("ar-SA"),
SupportedCultures = new List<CultureInfo>
{
new CultureInfo("ar-SA"),
new CultureInfo("ar-YE")
},
SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA"),
new CultureInfo("ar-YE")
}
});
}

أخيرا يمكننا تعريب اي نص في الموقع وذلك بإستخدام كائن من نوع IStringLocalizer ولو تلاحظ سابقا في الإجراء Configure وجود كائن باسم localize وقد تم استخدام الـ Dependency Injection ليمكننا بسهوله الوصول للمفردات من المصدر الخاص بها على النحو التالي localize[“Hello”] حيث ان Hello هي المفتاح المراد البحث عن قيمته والذي تم تعريفه مسبقاً في ملف الموارد.

تويتر فيسبوك قوقل + لينكد إن


1 تعليق

نجد علي عبدة (20/01/2016 01:35:06 م)

شرح قمة في الروعه بارك الله فيك أخي


اكتب تعليقك