تظهر رسالة عربية تقول إن للمستخدم ملفاً واحداً، لكن النص يتغير بطريقة غير صحيحة عند اثنين أو خمسة. مشروع تخرج هندسة البرمجيات يبني فاحصاً يقرأ رسائل ICU MessageFormat ويولد حالات اختبار بحسب فروع plural والـplaceholders. تذكر مواصفة Unicode TR35 للرسائل أن اختيار الفرع يعتمد على قواعد locale، وأن category مثل one لا تعني بالضرورة الرقم 1 حرفياً. الجزء الخاص بالأعداد في CLDR يشرح minimal pairs التي تظهر اختلافات الصياغة. الأداة لا تترجم الرسائل ولا تختار صيغة عربية سليمة بدلاً من محرر لغوي.

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

اجمع رسائل صغيرة مع متغيراتها

ابدأ بملف رسائل JSON أو ملفات الموارد التي يستخدمها المشروع، مع locale source وlocale target معلنين. استخرج كل pattern يحوي selector plural أو ordinal وكل متغير داخل braces. لا تكتب parser من regex واحد لأن أنماط ICU تسمح بتداخل وتعبيرات مركبة؛ استخدم مكتبة MessageFormat مناسبة ونسخة محددة. إذا كان الملف لا يمر parsing، سجل السطر ومكان الخطأ من غير تغيير النص. ضع الرسائل الاصطناعية في fixtures تشمل عنصرين، وعدداً، واسم مستخدم، وخيار select. لا تنشر ترجمة طالب أو نصوص العميل ضمن التقرير.

ابن تغطية للفرع لا للرقم وحده

كل pattern قد يحتوي exact selector مثل =0 وفئات zero وone وtwo وfew وmany وother. الفاحص يسجل الفروع الموجودة، ثم يطلب قيماً تولد كل فئة مدعومة في locale المختار عبر قواعد CLDR، إضافة إلى حالات الحدود والعشرية إن كان النوع يسمح بها. لا تفترض أن العربية والإنجليزية تقسمان الأعداد إلى الفئات نفسها، ولا أن category معينة ستستخدم في كل locale. وثائق ICU MessageFormat مرجع لآلية الصياغة في مكتبة ICU؛ النتائج الدقيقة ينبغي أن تثبت إصدارها.

اتبع رسالة حقيبة واحدة حتى الواجهة

أنشئ fixture فيه placeholder count وخيارات عدد متعددة، ثم مرر قيماً اختبارية إلى formatter للـlocale العربي والإنجليزي. خزّن مخرجات كل حالة مع اسم الفئة التي اختيرت، وعدد placeholders التي حلت. اختبر missing variable واسم متغير إضافي وvalue string بدل number. مثال «لديك 0 نتيجة» ليس حكماً لغوياً كافياً؛ قد يحتاج المنتج صيغة خاصة للصفر أو يختار حذف الرسالة، والقرار يرجع إلى مواصفة النص. أظهر للمترجم نص الرسالة الناتج بدلاً من اقتراح ترجمة تلقائية.

تحقق من المتغيرات حول الترجمة

قارن أسماء placeholders بين المصدر والترجمة، لكن اسم المتغير قد يظهر في بنية مختلفة داخل pattern. اكشف حذف متغير أو تهجئة مختلفة أو placeholder بقي دون صياغة، ولا تعتبر ترتيب المتغيرات في العربية خطأ إن كان السياق يسمح بتغييره. افحص علامات bidi الخفية حين تعرض الأقواس أو أسماء متغيرات لاتينية داخل جملة RTL، واعرض code points عند الحاجة. لا تحذف controls تلقائياً لأنها قد تكون جزءاً مقصوداً من العرض. هذه طبقة مختلفة عن مراجعة المصطلحات؛ هدفها ضمان اكتمال الفروع والقيم المدخلة.

ما الذي يجعل الاختبار مستقراً؟

ثبت نسخة ICU وبيانات CLDR وlocale tag المستخدم، ثم شغل fixtures عند كل build. اختبر صفر، المفرد، الاثنين، عدداً من فئة أخرى، وعدداً كسرياً إذا سمحت الرسالة. لا تضع قائمة ثابتة عامة للأعداد قبل التحقق من القواعد الحالية لكل locale؛ استدع المكوّن الذي ينفذ plural rules نفسها. سجل الفرع المختار وحالة parse ومخرجات formatting. إذا لم تغط القيم كل variants، أعط تحذيراً يذكر الفرع الناقص ولا تجعل build يمر بصمت. اطلب مراجعة بشرية للمعنى؛ parser لا يحكم على صحة النحو العربي.

افصل صحة البنية عن جودة النص

قد تكون كل الفروع موجودة وتنتج رسالة ركيكة، وقد تكون الصياغة سليمة ولكن branch واحد لا يملك ترجمة. التقرير يعرض المشكلتين تحت فئتين مستقلتين: بنية pattern واكتمال ترجمة من جهة، مراجعة لغوية من جهة أخرى. لا تجمعهما في score تجميلي. الإعداد يجب أن يحترم plural categories التي لا تظهر في لغة المصدر، وإلا سيفقد الفريق الفروق حين ينسخ string إنجليزية حرفياً. احفظ قرار المراجع مع رقم الرسالة لا بيانات المستخدم التي ظهرت في placeholder.

مخرجات قابلة للصيانة

يسلم الفريق CLI، fixtures، تقرير coverage، وملف استثناءات موثق للرسائل التي لا تتبع ICU. يصلح المشروع ضمن مشاريع التخرج ويرتبط بـالمشاريع البرمجية الجامعية. حد الأداة أنها تفحص القواعد والplaceholders في الرسائل المحملة، ولا تثبت أن واجهة المنتج كاملة أو أن الترجمة ملائمة لكل قارئ. اطبع مخرجات صريحة ونسخة قواعد الاختبار حتى يتمكن المشرف من إعادة الحالة والتحقق من السبب وراء كل branch جرى توليده.

المصادر

مراجعة المصادر: .

اختبار المثال وحدوده

قِيَم الأعداد أمثلة تعليمية؛ يجب تثبيت إصدار CLDR أو مكتبة ICU في test fixture كي تبقى النتيجة محددة.

مقالات ذات صلة

الخدمة المرتبطة: تطوير المشاريع البرمجية الجامعية.

أرسل متطلبات مشروعك