وثائق

فحص العولمة

تحقق من كل تغيير للكشف عن ترجمات مفقودة أو تالفة، وعن النصوص والتنسيق في الكود الجديد الذي يفترض لغة أو ثقافة معينة، وبعد إعداده، عن الصفحات التي لا تعمل بشكل صحيح بلغات أخرى.

الـ العولمة عملية التحقق في ضبط الجودة تضمن جاهزية المشروع متعدد اللغات للاستخدام العالمي. تعمل هذه العملية على اختبار المهام وطلبات السحب، وتتحقق فقط من الأجزاء التي تأثرت بالتغيير:

  1. فهارس. النصوص التي أضافها أو غيّرها التغيير، بكل اللغات.
  2. كود. الأسطر التي يضيفها التغيير، للنصوص والتنسيق الذي يفترض لغة أو ثقافة معينة.
  3. صفحات. عندما يحدد المشروع كيفية تشغيل تطبيقه، تُعرض صفحاته باستخدام ترجمة افتراضية.

يقوم المعالج بتفعيل عملية التحقق بشكل افتراضي بمجرد دمج pull request. وإعداداته موجودة في ضبط الجودة → العولمة؛ مساحة عمل إعدادات تُظهر ما إذا كانت عملية التحقق مفعلة أم لا.

ما الذي يتم حظره بشكل افتراضي

يعود التغيير للإصلاح إذا نقصت أو تضررت النصوص فيه، أو إذا أدى الكود المضاف إلى وضع النصوص التي يقرأها المستخدم مباشرةً داخل الكود أو تجميع جملة من أجزاء منفصلة. أما باقي النتائج فتُسجل كملاحظات ولا تحظر أي شيء إلا إذا اخترت حظرها. تظل ملاحظات التنسيق والترتيب والتخطيط مسجلة حتى يلاحظها المشروع في كوده الخاص.

اختر ما يتم حظره تحت ضبط الجودة → العولمة: رموز الفهارس، ما في الكود الذي يؤدي لإعادة التغيير، و مشاكل الصفحات التي تؤدي لإعادة التغيير للإصلاح. فحص الكود المصدري و عرض الصفحات لإيقاف خطوات الكود والصفحات.

رموز الفهارس

كودالمعنىيتم حظره بشكل افتراضي
missingالنص لا يحتوي على ترجمةنعم
invalid_syntaxالترجمة غير قابلة للتحليل، مثل تنسيق ICU التالفنعم
placeholder_mismatchالمرادفات تختلف عن المصدرنعم
plural_categoriesصيغة الجمع التي تحتاجها اللغة غير موجودةنعم
staleتغير المصدر بعد ترجمة النصلا

تُبلغ قواعد القاموس وطول النص والعبارات المحظورة عن رموزها الخاصة عندما تحدد ملف الإعدادات ذلك.

رموز الكود

كودما الذي يتم اكتشافهيتم حظره بشكل افتراضي
hardcoded_textالنص الذي يقرأه الشخص ومكتوب داخل الكود بدلاً من الفهرس: نص JSX والقوالب، والسمات المرئية مثل placeholder، title، alt و aria-label، الرسائل المنبثقة والتنبيهاتنعم
concatenated_textجملة مكونة من أجزاء: ترجمة مدمجة مع نص أو قيمة بواسطة +، تعبير قالب أو عناصر مجاورةنعم
locale_numberرقم مُنسق دون اعتبار لإعدادات المستخدم المحلية، مثل toFixed في كود الواجهة أو toLocaleString() بدون تحديد لغة محليةلا
locale_dateتاريخ أو وقت مُنسق دون اعتبار لإعدادات المستخدم المحلية، أو بنمط ثابت مثل MM/dd/yyyyلا
hardcoded_currencyرمز عملة أو كود مكتوب بجانب المبلغلا
ordinal_sortنص مُرتب أو مُقارن حسب رمز الحرف، أو localeCompare بدون تحديد لغة محليةلا
case_mappingtoUpperCase() أو toLowerCase() على نص دون تحديد لغة محليةلا
physical_directionالاتجاه اليساري واليميني في CSS وفئات الأدوات المساعدة، في مشروع يستخدم لغة من اليمين لليسارلا
postal_code_formatرمز بريد إلكتروني تم التحقق منه وفقًا لنمط بلد معينلا
phone_number_formatرقم هاتف تم التحقق منه كرقم أمريكي شماليلا
latin_only_inputاسم أو مدينة أو شارع أو عنوان محدود بحروف a-zلا
joined_listقائمة يقرأها الأشخاص مفصولة بفاصلة أو "و"لا
calendar_namesأسماء أيام الأسبوع أو الشهور مكتوبة في الكود، أو يوم البدء الثابت للأسبوعلا
paper_sizeحرف أو مقاس A4 وما شابه مُحدد في إعدادات الطباعة أو PDFلا
fixed_unitوحدة مثل mi أو lb أو °F مكتوبة بجانب رقم معروضلا
locale_parsingرقم يكتبه المستخدم ويُقرأ بواسطة parseFloat أو Numberلا
ime_compositionمعالجة زر الإدخال في حقل نصي دون التحقق من أن كلمة بالصينية أو اليابانية أو الكورية لا تزال قيد التكوينلا

تصميم يناسب كل سوق تُظهر الحل لكل حالة.

ما الذي تقرأه عملية التحقق

تحلل خطوة الكود لغات JavaScript وTypeScript، مع JSX، وتقرأ قوالب Vue وSvelte وAstro وHTML وERB وHandlebars بالإضافة إلى CSS كنص. تُطبق كل قاعدة فقط في السياق المحدد لها: فنمط رمز البريد الإلكتروني يُسجل فقط بجانب حقل رمز البريد الإلكتروني، وقائمة مفصولة بفاصلة تُسجل فقط حيث يقرأها المستخدم.

  • مترجم بحكم التعريف. النص داخل استدعاءات الترجمة ومكونات المشروع (t()، formatMessage، <Trans>، <FormattedMessage>، $t()) والدوال المدرجة في ملف الإعدادات.
  • لا أبداً. المصطلحات المحمية، وكلمات يسمح بها ملف الإعدادات.
  • تم تركه عن قصد. سطر يحتوي على i18n-ignore تعليق، والسطر التالي منه. حدد السبب: // i18n-ignore: product name.

الخياري world قسم .coroid/i18n.json يحدد الباقي:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
حقلمعنى
excludeملفات يتم تجاهلها وفقاً للقواعد.
translateدوال توطين بخلاف تلك المدمجة في الأطر.
allowكلمات لا يتم توطينها أبداً، باستثناء المصطلحات المحمية.
formatter، currenciesيتم تحديده عبر خطوة الثقافة في المعالج؛ انظر ثقافة
renderكيفية تشغيل التطبيق لصفحات ذات توطين افتراضي؛ انظر توطين افتراضي

نتائج وإصلاحات

كل نتيجة تُخزن ضمن عملية التحقق من صحة Coroid Check وتظهر في مهمة المراجعة. مشاكل مكتشفة: تصنيف النتائج حسب الفئة والمفتاح واللغة، وتصنيف الأخطاء البرمجية حسب الملف والسطر والنص المكتشف، وتصنيف نتائج الصفحات حسب الصفحة والعنصر والنص. تُعتبر النتيجة مُصلحة عندما لا تعود تظهر في آخر عملية تحقق من صحة Coroid Check لنفس العمل.

ترجمة نصوص صفحة الدفعمهمة
تم العثور على مشكلات
  • فتحui · checkout.total · fr: missingالعولمة · غير مترجم
  • قيد الإصلاحsrc/pricing.tsx:7 · “تسعير بسيط”العولمة · نص مكتوب داخل الكود
  • فتح/{locale}/ · p#promo · “شحن مجاني على كل الطلبات” · runtime_text (de-DE, ar-SA)العولمة · نص لم يأتِ من قائمة الكتالوج
  • قيد الإصلاحui · cart.items · ja: placeholder_mismatchالعولمة · العناصر النائبة تختلف عن المصدر
  • تم إصلاحهاui · cart.count · ar: plural_categoriesالعولمة · تنسيقات الجمع غير متوفرة لهذا الإقليم

نتائج جودة من فحص العولمة: سلاسل نصية في الكتالوج، تغيير أُضيف إلى الكود وصفحة ذات ترجمة زائفة، رمز مشكلة واحد لكل نتيجة. بيانات توضيحية.

في طلبات السحب، تظهر أخطاء الكود أيضاً كتعليقات على الأسطر المتغيرة: فشل عندما تعيق العمل، وتحذير عندما تُذكر فقط.

عندما تمنع عملية التحقق من صحة Coroid Check مهمة ما، يتلقى وكيل المطور كل نتيجة تعيق العمل، مثل src/pricing.tsx:7 hardcoded_text: “Simple pricing”، مع طريقة الإصلاح. يقوم بإصلاح عمليات التوطين عبر جلسة توطين للمهمة، وليس عن طريق تعديل ملفات القوائم الخاصة بلغات أخرى يدوياً. ينقل النص إلى قائمة المصادر، ويعيد كتابة الجمل المجمعة كرسالة واحدة تحتوي على مواقع احتواء، ويطبق قواعد الكود على التغييرات التي أجراها قبل تسليم المهمة.

مساهمات من كل مصدر

تطبق عملية التحقق من صحة Coroid Check نفس المعيار على كل تغيير، بغض النظر عن من قام بكتابته:

  • وكلاء Coroid العاملون على مشروع متعدد اللغات يُخبرون بكل تفاصيل المهمة: قائمة المصادر ودالة التوطين، رسالة واحدة لكل جملة، أداة التنسيق المستخدمة في المشروع، التخطيط المنطقي عند كتابة اللغة من اليمين إلى اليسار، وأعراف الأسواق المحددة في إعدادات الثقافة.
  • طلبات سحب من أشخاص وأدوات أخرى تخضع لعملية التحقق من صحة Coroid Check، مع نفس النتائج والتعليقات. قم بتفعيل مراجعة كل PR لتشغيله على كل pull request.
  • التغييرات التي تم دمجها دون خضوعها للتحقق تُكتشف بعد الدمج. ترجمة النصوص التي تم دمجها خارج Coroid يقرأ نتائج عملية التحقق من صحة Coroid Check التي تمت على pull request. ويُنشئ مهمة توطين عندما تكون هناك نصوص مفقودة أو قديمة. وعندما تعيق عملية التحقق من صحة Coroid Check أخطاء برمجية، يُنشئ أيضاً مهمة تُسمى توطين الكود المدمج لـ pull request، مع تحديد مكان البحث. تتلقى كل عملية دمج مهمة واحدة على الأكثر من كل نوع.

الكود الحالي لا يُعيق العمل أبداً: جاهزية عالمية يسردها ويُنشئ مهام إصلاح تبدأها عند اختيارك.

قم بتشغيله بنفسك

المحرك هو أداة سطر الأوامر coroid-i18n، الإصدار المحدد في ملف الإعدادات الخاص بك:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

source يقرأ الكود دون الحاجة إلى قراءة القوائم، لذا يعمل حتى عند عدم إعدادها بعد. بدون --changed أو --diff يقرأ المستودع بأكمله. تنتهي كلا الأمرين بقيمة 1 عند العثور على مشكلة؛ أضف --format json للحصول على تقرير قابل للقراءة آلياً.