آراء حول صيغ المعدود
This page is in English under Plural Forms |
محتويات
الصيغة الحالية
صيغة المعدود لgettext المستعملة حاليا في جنوم ومكتب ك وربما في مشاريع أخرى خاطئة تماما [5]. أعلم أن هيئة التنقيح بحثت في هذه المسألة لكنها لم تتخذ أي حل نهائي. لهذا، من الواضح أن الصيغة الحالية حل مؤقت وبالطبع متفق على بطلانها. وهي كالتالي:
nplurals=4; plural=n==1 ? 0 : n==2 ? 1 :n>=3 && n<=10 ? 2 : 3;
يذكر في https://www.arabeyes.org/QacDecisions:
This GNU Plural Header will be used when we can find a way to script its functionality:
nplurals = 7; plurals = n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 :n%100==1 ? 5 : n%100==2 ? 6 : 4;
تعدد طرق قراءة الأعداد
تتبع اللغة العربية قواعد معقدة لتحديد صيغة المعدود. إضافة إلى ذلك، توجد قاعدتان مختلفتان، الأولى عند قراءة العدد من اليمين إلى اليسار والثانية عند قراءته من اليسار إلى اليمين. تبقى كلا القاعدتين صحيحتين كما تبين بعض البحوث حيث استعملت بعض النصوص القديمة قراءة الأعداد من اليسار إلى اليمين. غير أن القراءة من اليمين إلى اليسار - كما تقرأ النصوص العربية - تحظى باحترام أكبر رغم أن وسائل الإعلام تقرأها من اليسار. يستحيل إدراج الخيار الأخير في صيغة gettext نظرا لضرورة طرح 1 أو 2 من المتغير. بسبب وجود قاعدتين علينا الاتفاق على قاعدة واحدة.
انظر الصورة. يمكن إدراج القراءة من اليمين [2] مع حالات أقل (6) عوض (8) عند القراءة من اليسار. لا أدري إن كان ذلك صحيحا فقط إذا افترضنا أن "101 كتاب" تقرأ "واحدة ومائة كتاب" وليس "مائة كتاب وكتاب"، انظر [2]. الصيغة المستعملة حاليا غامضة وغير موثقة وخاطئة لغويا. تم دمج حالة (0) مع حالة غريبة (الرابعة) كما لا توجد قاعدة لحالة [11-99].
nplurals=6; plural=n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n >= 3 && n <= 10 ? 3 : n >= 11 && n <= 99 ? 4 : 5;
مشكل حذف المتغيرات في بعض الحالات
لا تتطلب الحالات 0 و1 و2 متغيرا، وهنا يبرز مشكل آخر. إذا وجد في سلسلة واحدة متغيران %s و%d وأن %d حذف فإن البرنامج يتوقف (Segmentation fault) [3]. الحل المقترح هو استعمال توزيع المتغيرات [4]. يجب أن توثق هذه الطريقة وأن تجرب في لغات أخرى غير C. (شكرا لجهاد على الفكرة).
echo 'int main() { printf("%s \n", 2, "text");}' > test.c ; gcc -w test.c -o output ; ./output
echo 'int main() { printf("%2$s \n", 2, "text");}' > test.c ; gcc -w test.c -o output ; ./output
مشكل عدم دعم بعض البرامج لصيغ الجمع
ربما نحتاج يوما ما لترجمة برنامج لا تدعم صيغ المعدود لبساطتها وتستعمل مثلا "user(s)" في الإنجليزية. ما أقترح هو الاتصال بالمطور وطلب دعم صيغ المعدود، ثم إن فشل هذا الاتصال يمكن استعمال "من" كما في "وصل ثلاثة من الرجال". (شكرا لمنذر على الفكرة).
ماذا علينا أن نفعل: - التعليق - تحويل السلاسل إلى الصيغة المتفق عليها.
اقتراح للقراءة من اليسار إلي اليمين
اقترح مشاركون في مجموعة جنو لينكس مصر صيغة تتبنى القراءة من اليسار وهي كالتالي:
- 0 لا كتابا
- 1 كتاب واحد
- 2 كتابات
- 3-10 + (100^n) : n >= 0 كتب
- 11-99 + (100^n) : n >= 0 or 1,2 + (100^n) : n >= 1 كتابا
- 100^n : n >= 1 كتاب
وصيغتها كالتالي:
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : (n % 100 >=3 && n % 100 <=10) ? 3 : (n % 100 >=11 && n % 100 <=99) || (n % 100==1) || (n % 100==2) ? 4 : 5;\n"
يبقى العيب الوحيد في هذا الاقتراح هو حالة 1,2 + (100^n) التي لا توجد لها قاعدة لغوية كما عند القراءة من اليمين. فعند القراءة من اليمين يكون آخر عدد هو مائة أو ألف أو مليون أو مليار، ولذلك يكون المعدود دائما مفردا مجرورا، أما عند القراءة من اليسار فآخر عدد يحتمل أوجها كثيرة، ولا توجد طريقة لقراءة هذه الأرقام إلا بطرق طويلة غير ملائمة للبرمجة ك: 100 كتاب وكتاب. ربما كان سيكون من الملائم قراءة "اثنان ومائة" لكن هذا لا يناسب أعدادا كبيرة مثل 54102: "اثنان وأربعة وخمسون ألفا ومائة".
اقتراح آخر
يعتمد هذا الاقتراح القراءة من اليمين، لكن مع استعمال المفرد المجرور مع حالة 100×ع + 1 أو 2. يلخص الجدول التالي مواصفات الاقتراح:
استنتاج
السبب الأساسي في عدم اعتماد القراءة من اليسار إلى اليمين هو عدد وجود قاعدة لحالة 100^n +1,2. أما قواعد الكتب المدرسية وكتب النحو، فهي لا تغطي إلا حالة القراءة من اليمين. نتمنى إيجاد أي معلومة أو مرجع يؤكد أو ينفي هذا الاقتراح.