وثائق

فحص العولمة

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

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

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

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

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

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

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

أكواد الفهارس

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

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

تؤدي عملية الترجمة إلى حذف النصوص القديمة من كل اللغات، وحذف ترجمات الصفحة التي اختفى مصدرها. ولا يتم حذف سوى ملفات Coroid المترجمة، وليس الصفحة الموجودة بلغة واحدة فقط.

أكواد الكود

كودما يتم اكتشافهيتم حظره بشكل افتراضي
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وحدة مثل ميل أو رطل أو درجة فهرنهايت مكتوبة بجانب الرقم المعروضلا
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كيفية تشغيل التطبيق لصفحات التوطين الزائف؛ انظر توطين زائف

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

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

ترجمة نصوص صفحة الدفعمهمة
تم العثور على مشكلات
  • فتح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العولمة · تنسيقات الجمع غير متوفرة لهذا الإقليم

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

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

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

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

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

  • وكلاء Coroid العاملون على مشروع مدولّ باستمرار يُخبرون بكل مهمة: فهرس المصدر ودالة الترجمة، ورسالة واحدة لكل جملة، وبرنامج التنسيق الخاص بالمشروع، والتخطيط المنطقي عند كتابة لغة من اليمين إلى اليسار، بالإضافة إلى اتفاقيات الأسواق من خلال الثقافة.
  • طلبات سحب من أشخاص وأدوات أخرى تخضع لعملية الفحص عبر Coroid Check، مع نفس النتائج والملاحظات. تُشغل على كل pull request بمجرد تثبيت تطبيق Coroid GitHub على المستودع وتفعيل سياسة المشروع عند طلبات السحب.
  • التغييرات التي تم دمجها دون اجتياز عملية الفحص يتم اكتشافها بعد الدمج. ترجمة النصوص التي تم دمجها خارج Coroid يقرأ نتائج الفحص الذي تم تنفيذه على pull request. ثم يقوم بإنشاء مهمة ترجمة للنصوص التي تركها pull request ناقصة أو قديمة. وعندما أدى الفحص إلى اكتشاف عيوب في الكود، فإنه يقوم أيضًا بإنشاء مهمة تُسمى تدويل الكود المدمج في 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 للحصول على تقرير قابل للقراءة آليًا.