الـ العولمة تحقق ضبط الجودة يحافظ على جاهزية المشروع متعدد اللغات للاستخدام العالمي. يعمل هذا التحقق على اختبارات المهام وطلبات السحب، ويقرأ فقط ما تم تغييره في الكود:
- فهارس. النصوص التي أضافها أو غيّرها التغيير، بكل اللغات.
- كود. الأسطر التي يضيفها التغيير، للنصوص والتنسيق الذي يفترض لغة أو ثقافة معينة.
- صفحات. عندما يحدد المشروع كيفية بدء تشغيل تطبيقه، تُعرض صفحاته باستخدام ترجمة افتراضية.
يقوم المعالج بتفعيل هذه الميزة بشكل افتراضي بمجرد دمج 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_mapping | toUpperCase() أو 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 mainsource تقرأ الكود دون قراءة الفهارس، لذا تعمل حتى عند عدم إعدادها بعد. بدون --changed أو --diff تقرأ المستودع بأكمله. تنتهي كلا الأمرين بقيمة 1 عند العثور على شيء؛ أضف
--format json للحصول على تقرير قابل للقراءة آليًا.