التدويل (i18n) في C# (.NET): دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التدويل (i18n) في C# (.NET): دليل شامل



التدويل (غالبًا ما يُختصر بـ i18n - من الكلمة الإنجليزية "internationalization"، حيث يوجد بين الحرف الأول 'i' والحرف الأخير 'n' 18 حرفًا) هو عملية تصميم البرمجيات بحيث يمكن تكييفها بسهولة مع اللغات والمعايير الإقليمية المختلفة دون إجراء تغييرات على الكود المصدري. في بيئة C# (.NET)، يعتبر التدويل ميزة مدمجة وقوية، تتيح للمطورين إنشاء تطبيقات متعددة اللغات حقًا.



في هذه المقالة، سننظر بالتفصيل في كيفية تنفيذ i18n في .NET (بما في ذلك .NET Core و .NET 5/6/7/8 و .NET Framework). ستتعرف على المفاهيم الأساسية - الثقافات، ملفات الموارد (RESX)، توطين السلاسل النصية والصور، وتنسيق البيانات.



المفاهيم الأساسية



قبل الانتقال إلى الكود، من المهم فهم مصطلحين رئيسيين:

  • العولمة (Globalization): عملية تصميم تطبيق يدعم الواجهات المترجمة والبيانات الإقليمية للمستخدمين من ثقافات مختلفة. في .NET، يتم تحقيق ذلك من خلال الفئات CultureInfo و RegionInfo.
  • التوطين (Localization): عملية تكييف تطبيق تمت عولمته بالفعل مع لغة/منطقة معينة (على سبيل المثال، ترجمة النصوص، ضبط تنسيقات التواريخ والعملات).


يستخدم .NET الثقافات (Cultures)، والتي يتم تحديدها بتنسيق اللغة-المنطقة (على سبيل المثال، ar-SA - العربية (المملكة العربية السعودية)، en-US - الإنجليزية (الولايات المتحدة)، de-DE - الألمانية (ألمانيا)).



الخطوة 1: إنشاء ملفات الموارد (.resx)



الطريقة الأساسية لتخزين السلاسل النصية المترجمة في .NET هي ملفات الموارد (.resx). وهي عبارة عن ملفات XML يتم تجميعها في التجميعة (assembly).



لنأخذ مثالاً. سننشئ ملفات للغتين العربية والإنجليزية:



  1. Resources.resx - ملف الموارد الافتراضي (عادةً باللغة الإنجليزية).
  2. Resources.ar.resx - ملف للغة العربية.
  3. Resources.de.resx - ملف للغة الألمانية.


داخل كل ملف، سنضيف موارد نصية بنفس الأسماء ولكن بقيم مختلفة:



Resources.resx (اللغة الافتراضية - en-US):

Name: GreetingValue: Hello, World!

Name: WelcomeMessageValue: Welcome to our application!


Resources.ar.resx (العربية):

Name: GreetingValue: مرحباً بالعالم!

Name: WelcomeMessageValue: مرحباً بك في تطبيقنا!


الخطوة 2: الوصول إلى الموارد في كود C#



يقوم .NET تلقائيًا بإنشاء فئة مقيدة النوع (strongly-typed) للوصول إلى الموارد. لنفترض أن الملفات موجودة في مجلد Resources الخاص بالمشروع. سيكون الوصول على النحو التالي:



using System;using System.Globalization;using System.Threading;

class Program{ static void Main(string[] args) { // تعيين الثقافة للخيط الحالي Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-SA"); Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-SA");

// الحصول على السلاسل النصية المترجمة string greeting = Resources.Messages.Greeting; string welcome = Resources.Messages.WelcomeMessage;

Console.WriteLine(greeting); // سيطبع: مرحباً بالعالم! Console.WriteLine(welcome); // سيطبع: مرحباً بك في تطبيقنا! }}


لاحظ: Resources.Messages هي فئة تم إنشاؤها تلقائيًا بناءً على اسم ملف RESX الخاص بك (إذا كان الملف يسمى Messages.resx).



الخطوة 3: التوطين في ASP.NET Core



في تطبيقات الويب ASP.NET Core، تكون العملية

توصيات