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