إنتقل إلى المحتوى الرئيسي

التوطين (i18n)

cMind قابل للتوطين بالكامل ويشحن في نفس 23 لغة cTrader نفسها تدعم، لذا المتداول يستخدم المنصة — ويقرأ هذه الوثائق — بلغتهم الخاصة. الإنجليزية هي fallback؛ أي ترجمة مفقودة يتدهور بأناقة إلى الإنجليزية بدلاً من عرض blank أو مفتاح خام.

اللغات المدعومة​

العربية (RTL) والصينية (المبسطة) والتشيكية والإنجليزية والفرنسية والألمانية واليونانية والمجرية والإندونيسية و الإيطالية واليابانية والكورية والملايو والبولندية والبرتغالية (البرازيل) والروسية والصربية والسلوفاكية والسلوفينية و الإسبانية والتايلاندية والتركية والفيتنامية.

المصدر الوحيد للحقيقة هو Core.Constants.SupportedCultures — وسيط ثقافة الطلب و محول اللغة واختبار تكافؤ المورد وبوابة بدون سلسلة hardcoded جميعها قراءة من عنده. إضافة لغة هي تغيير من سطر واحد هناك بالإضافة إلى ملفات المورد الخاصة به.

كيف يعمل (Blazor Server)​

  • المصادر. تعيش السلاسل في src/Web/Resources/Ui.resx (القاعدة الإنجليزية) بالإضافة إلى واحد Ui.<culture>.resx لكل لغة. تقرأها المكونات من خلال IStringLocalizer<Ui> — @L["key"]، أبدًا حرفي. يتم إنشاء ملفات .resx من tools/i18n/ui-translations.json (pwsh tools/i18n/gen-resx.ps1)، مصدر الحقيقة الودية للمترجم.
  • حل الثقافة. RequestLocalizationMiddleware يختار الثقافة من .AspNetCore.Culture كوكيز أولاً، ثم Accept-Language الخاص بالمتصفح، ثم الإنجليزية.
  • التبديل. يقوم مبدل اللغة بشريط التطبيق (و الإعدادات → اللغة القسم) بالانتقال إلى نقطة النهاية GET /set-culture — إعادة تحميل كاملة خارج الدائرة Blazor، لأن الدائرة لا تستطيع تغيير الثقافة مباشرة. يكتب ملف تعريف الارتباط ولمستخدم مسجل دخول يثابر الاختيار إلى ملفه الشخصي (UserProfile.Locale)؛ إعادة التحميل يجهز دائرة جديدة باللغة المختارة.
  • الاستمرار وتسجيل الدخول. يتم كتابة لغة الملف الشخصي المحفوظة مرة أخرى في ملف تعريف الارتباط الثقافة عند تسجيل الدخول، لذا يهبط المستخدم بلغته على كل جهاز.
  • من اليمين إلى اليسار. العربية (وأي لغة RTL مستقبلية) تعيين <html dir="rtl"> وتلف المحرك في MudRTLProvider الخاص بـ MudBlazor، مرآة الصدفة بأكملها.
  • ICU. يعمل مضيف الويب مع تمكين ICU (InvariantGlobalization=false)؛ رمز السلك/Parse البقاء على CultureInfo.InvariantCulture، لذا فقط تنسيق الواجهة لكل ثقافة تتأثر — أبدًا backtest أو CSV.

البوابة — لا توجد نصوص واجهة المستخدم hardcoded​

لا يمكن دمج السلاسل التي يواجهها المستخدم الجديد دون تحويل في النطاق المغطى:

  • اختبار حراسة معمارية فاشلة-build (NoHardcodedUiTextTests) ملفات .razor المهاجرة وتفشل على أي حرفي وسمة تحمل نص (Label وText وTitle وPlaceholder وHelperText و aria-label وalt) وهذا ليس @L["…"] يبحث.
  • اختبار تكافؤ المورد (ResourceParityTests) يفشل البناء إذا كانت أي لغة تفتقد مفتاحًا أو سفن قيمة فارغة — كل لغة لديها دائمًا كل مفتاح.

إضافة أو تغيير سلسلة​

  1. أضف/حرر المفتاح في tools/i18n/ui-translations.json لـ كل ثقافة.
  2. أعد إنشاء .resx: pwsh tools/i18n/gen-resx.ps1.
  3. الرجوع إليها في المكون مع @L["your.key"].
  4. dotnet test — البوابات توازن وhardcoded-text تبقيك صادقة.

توطين الوثائق​

تم توطين هذه الوثائق أيضًا. تم تكوين Docusaurus i18n لجميع 23 موقعًا (website/i18n/)، مع ا قائمة منسدلة محلية في شريط التنقل و RTL للعربية. قم بنقالة ملفات ترجمة المحلية مع npm run write-translations -- --locale <code> و ترجمة تحت website/i18n/<code>/. وفقًا لـ ولاية التوطين، ** إضافة أو تغيير أي وثيقة تعني تحديث كل محلية بنفس التغيير.**