التدويل (i18n) في C# (.NET)
\nالتدويل (اختصاراً i18n - من الكلمة الإنجليزية "internationalization"، حيث 18 هو عدد الحروف بين الحرف الأول "i" والحرف الأخير "n") هو عملية تصميم البرمجيات بحيث يمكن تكييفها مع لغات ومناطق وخصائص ثقافية مختلفة دون إجراء تغييرات على الكود المصدري. في منصة .NET (C#)، يتم تنفيذ i18n من خلال آليات التوطين والعولمة المضمنة في نواة الإطار.
\n\nالمفاهيم الأساسية لـ i18n في .NET
\n- \n
- العولمة — تصميم التطبيق لدعم ثقافات متعددة (مثل تنسيق التواريخ والأرقام والعملات). \n
- التوطين — تكييف الواجهة مع ثقافة معينة (ترجمة النصوص والصور والأصوات). \n
- الثقافة (Culture) — مزيج من اللغة والإعدادات الإقليمية، يُرمز له برمز مثل
ru-RUأوen-USأوde-DE. \n - ملفات الموارد (.resx) — ملفات XML تحتوي على أزواج "مفتاح-قيمة" لكل لغة محلية. \n
كيف يعمل i18n في C# (.NET)
\nفي .NET، يتم استخدام ملفات الموارد للتوطين. الملف الرئيسي (مثل Strings.resx) يحتوي على النصوص باللغة الافتراضية (عادة الإنجليزية). لكل لغة إضافية، يتم إنشاء ملف منفصل مع لاحقة رمز الثقافة: Strings.ru.resx (الروسية)، Strings.de.resx (الألمانية). أثناء التجميع، يتم تحويل هذه الملفات إلى تجميعات تابعة يتم تحميلها بناءً على الثقافة الحالية للخيط.
// مثال على ملف موارد (Strings.resx)\n// المفتاح: HelloMessage، القيمة: "Hello, World!"\n// Strings.ru.resx\n// المفتاح: HelloMessage، القيمة: "Привет, мир!"\n\n\nتنفيذ التوطين خطوة بخطوة في تطبيق وحدة التحكم
\n- \n
- أنشئ ملف موارد في المشروع: انقر بزر الماوس الأيمن على المشروع ← Add ← New Item ← Resources File. سمِّه
Strings.resx. \n - أضف النصوص: أدخل المفتاح
GreetingوالقيمةHello, user!. \n - أنشئ ملفاً للغة الروسية:
Strings.ru.resxبنفس المفتاح والقيمةПривет, пользователь!. \n - اكتب الكود لتعيين الثقافة والحصول على النص المترجم: \n
using System.Globalization;\nusing System.Resources;\nusing System.Threading;\n\nclass Program\n{\n static void Main()\n {\n // تعيين الثقافة الروسية\n Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");\n Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");\n\n // الحصول على مدير الموارد\n ResourceManager rm = new ResourceManager("YourNamespace.Strings", typeof(Program).Assembly);\n string greeting = rm.GetString("Greeting");\n\n Console.WriteLine(greeting); // سيطبع: "Привет, пользователь!"\n }\n}\n\n\nتوطين تطبيقات الويب ASP.NET Core
\nفي ASP.NET Core، يتم تنفيذ i18n من خلال middleware والخدمات المضمنة. لنلقِ نظرة على مثال إعداد لتطبيقات MVC أو Razor Pages.
\n\n1. الإعداد في Program.cs
\nusing Microsoft.AspNetCore.Localization;\nusing System.Globalization;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddLocalization(options => options.ResourcesPath = "Resources");\nbuilder.Services.AddControllersWithViews()\n .AddViewLocalization()\n .AddDataAnnotationsLocalization();\n\nvar app = builder.Build();\n\nvar supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("ru-RU") };\napp.UseRequestLocalization(new RequestLocalizationOptions\n{\n DefaultRequestCulture = new RequestCulture("en-US"),\n SupportedCultures = supportedCultures,\n SupportedUICultures = supportedCul