تحضير كود C# للعالم العالمي: تدويل التطبيقات

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

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

ابدأ الدورة

لماذا يحتاج تطبيق C# الخاص بك إلى التدويل؟

\n

تخيل: لقد كتبت خدمة رائعة لإدارة الملاحظات. كل شيء يعمل، الواجهة بسيطة، المستخدمون سعداء. لكن فقط الناطقون بالروسية. بمجرد دخولك سوق الولايات المتحدة أو ألمانيا - سيتوقف المشروع. ليس لأن الكود سيء، ولكن لأن زر «حفظ» لا يتحول إلى «Save»، ورسالة «خطأ في الإدخال» تخيف الأجنبي.

\n

هذه هي مشكلة الترجمة. في عالم .NET يسمى حلها تدويل C# (أو i18n - من كلمة «internationalization»، حيث 18 هو عدد الحروف بين i و n). إذا كنت تستخدم C# ومنصة .NET (Core, 5/6/7/8/9)، فلديك بالفعل أدوات قوية جداً تحت الغطاء لجعل التطبيق متعدد اللغات. في هذه المقالة سنشرحها عملياً: من الموارد البسيطة إلى تغيير اللغة «أثناء التشغيل».

\n\n

الأساسيات: ما هي الثقافة واللغة المحايدة

\n

قبل كتابة الكود، دعنا نفهم المصطلحات. في .NET، هناك فئتان رئيسيتان من مساحة الأسماء System.Globalization مسؤولتان عن الترجمة:

\n
    \n
  • CultureInfo — كائن يصف اللغة والمعايير الإقليمية (مثل ru-RU، en-US، de-DE).
  • \n
  • CurrentUICulture — ثقافة واجهة المستخدم الحالية. يعتمد عليها النظام عند البحث عن الترجمات.
  • \n
  • CurrentCulture — تنسيق التواريخ والأرقام والعملة. يمكن تغييره أيضاً، لكن للترجمات الأول هو المهم.
  • \n
\n

في تطبيقات C# نستخدم عادةً ملفات الموارد (.resx). هذه ملفات XML تخزن النصوص والصور والبيانات الأخرى المرتبطة بثقافة معينة. على سبيل المثال:

\n
    \n
  • Messages.resx — النصوص الافتراضية (عادةً الإنجليزية).
  • \n
  • Messages.ru.resx — الترجمة الروسية.
  • \n
  • Messages.de.resx — الترجمة الألمانية.
  • \n
\n

عند تشغيل التطبيق، يختار .NET تلقائياً الملف المطابق لـ UICulture الحالية. إذا لم يكن هناك تطابق دقيق - يستخدم الملف المحايد (الأساسي).

\n\n

إنشاء أول ملف موارد في Visual Studio

\n

لنفترض أن لدينا تطبيق وحدة تحكم أو مشروع ASP.NET Core. دعنا نضيف مجلد Resources وداخله ملف Strings.resx. لنملأه:

\n
الاسم          | القيمة\n-------------|-------------------\nWelcomeMsg   | Welcome to our app!\nGoodbyeMsg   | Goodbye!\n
\n

الآن لننشئ Strings.ru.resx:

\n
الاسم          | القيمة\n-------------|-------------------\nWelcomeMsg   | Добро пожаловать в наше приложение!\nGoodbyeMsg   | До свидания!\n
\n

لاحظ: يجب أن تتطابق أسماء المفاتيح. بعد الحفظ، سيقوم Visual Studio تلقائياً بإنشاء الفئة Strings مع الوصول إلى النصوص عبر خصائص ثابتة.

\n\n

التبديل البرمجي للغة

\n

لكي يعمل تدويل C#، يجب في بداية تنفيذ التطبيق (مثلاً في Main أو Startup) تعيين الثقافة المطلوبة. إليك كيف يبدو ذلك:

\n
using System.Globalization;\nusing System.Threading;\n\n// تعيين اللغة الروسية للواجهة\nCultureInfo culture = new CultureInfo("ru-RU");\nThread.CurrentThread.CurrentUICulture = culture;\nThread.CurrentThread.CurrentCulture = culture; // لتنسيقات التواريخ/الأرقام\n\n// الآن نصل إلى الموارد\nConsole.WriteLine(Strings.WelcomeMsg);  // سيظهر: Добро пожаловать в наше приложение!\n
\n

إذا كنت تريد إعطاء المستخدم إمكانية تبديل اللغة «أثناء التشغيل» (بدون إعادة تشغيل)، فقط قم باستدعاء هذه الأسطر مرة أخرى بعد تغيير الثقافة. في ASP.NET Core يستخدمون middleware لهذا:

\n
app.UseRequestLocalization(new RequestLocalizationOptions\n{\n    DefaultRequestCulture = new RequestCulture("en-US")                

المدونات

توصيات الكتب