
- بواسطة x32x01 ||
حل مشكلة الـ Pluralization في مكتبة easy_localization
أكيد يا صاحبي لو اشتغلت قبل كده على مشاريع Flutter، أكيد سمعت عن مكتبة easy_localization، اللي بتسهل ترجمة التطبيق ودعم لغات مختلفة. بس ساعات وانت شغال فيها، ممكن تقابلك مشكلة غريبة جدًا تخص حاجة اسمها Pluralization 
الموضوع شكله بسيط من بره، بس لما تدخل فيه هتكتشف إن فيه شغل لغوي كبير بيحصل ورا الكواليس

يعني إيه Pluralization أصلاً؟
ببساطة كده، الـ Pluralization هو اللي بيخلي النص يتغيّر حسب العدد.يعني مثلاً لما تقول:
- غرفة
- غرفتين
- 5 غرف
- 11 غرفة
كل عدد له صيغة مختلفة في اللغة العربية، صح؟
وهنا بييجي دور مكتبة easy_localization اللي المفروض تتعامل مع الحالات دي تلقائيًا

بس اللي حصل معايا كان مختلف شوية…
كنت بحاول أعرض نص بيقول "5 غرف"، لكن اللي ظهر في التطبيق كان "5 غرفة"!

يعني بدل ما يختار الصيغة الصح (few)، راح جاب الصيغة العامة (other)!
بدأت أبحث في السبب
في الأول قلت يمكن أنا كاتب حاجة غلط، لكن لما راجعت الكود كله لقيت إن كل حاجة تمام.قررت أفتح issue على GitHub وابتديت أحلل الكود خطوة بخطوة… لحد ما اكتشفت السبب الحقيقي!

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

واللي زاد الطين بلة إن القيمة الافتراضية للمتغير ده هي
true
!يعني لو انت مش واخد بالك، التطبيق بتاعك هيتصرف بطريقة غلط من غير ما تفهم السبب

فين المشكلة الكبيرة؟
المشكلة مش بس في الكود… لأ، الكارثة إن الموضوع ده مش مكتوب في الDocumentation نهائيًا!يعني لو مطور جديد دخل يستخدم المكتبة، مش هيعرف إن فيه خيار اسمه
ignorePluralRules
أصلاً!فالمكتبة حرفيًا بتعطل واحدة من أقوى المميزات اللي فيها بشكل افتراضي

وهنا قلت خلاص، لازم أتصرف بنفسي

إيه اللي عملته علشان أصلح الموضوع
طلعت "إيلون ماسك" اللي جوايا 
رحت عدلت الdocumentation ووضحت فيه استخدام المتغير
ignorePluralRules
، وشرحت إمتى ولماذا تستخدمه.كمان عملت unit tests مخصوصة للغة العربية علشان أتأكد إن كل الحالات شغالة صح.
اختبرت الحالات التالية:
zero
one
two
few
many
other
وطبقت التجارب دي كمان على لغتين تانيين علشان أتأكد إن الكود مستقر في كل الحالات.
وبعد كده رفعت Pull Request (PR) للمكتبة الرسمية وبتمنى إنهم يقبلوها

إزاي تحل المشكلة في مشروعك بسهولة
لو واجهتك نفس المشكلة ومش عايز تستنى التحديث الجاي، كل اللي محتاج تعمله إنك تضيف السطر ده في إعدادات المكتبة أثناء التهيئة في ملف main.dart
: Code:
EasyLocalization(
supportedLocales: [Locale('ar'), Locale('en')],
path: 'assets/translations',
fallbackLocale: Locale('en'),
ignorePluralRules: false, // 🧠 لازم السطر ده
child: MyApp(),
);

نصايح سريعة علشان تتجنب المشاكل دي
- دايمًا راجع الـ Documentation لأي مكتبة قبل ما تستخدمها.
- لما تلاحظ سلوك غريب، جرّب تعمل Debug خطوة بخطوة.
- لو اكتشفت Bug فعلاً، متخافش تفتح Issue أو حتى ترفع PR. ده بيساعد كل المجتمع
- جرب دايمًا لغات مختلفة زي العربي والإنجليزي علشان تكتشف مشاكل الترجمة بدري.
الخلاصة
لو الـ Pluralization مش شغالة عندك في easy_localization، فالسبب غالبًا إن المتغير ignorePluralRules
معمول بـ true
.غيّره لـ
false
وخلاص كل حاجة هتمشي زي السكينة في الحلاوة 
الموضوع بسيط، بس مهم جدًا خصوصًا لو تطبيقك بيدعم أكتر من لغة.
وبالطريقة دي هتضمن إن المستخدم يشوف النصوص بطريقة طبيعية ومنسقة صح، وده بيحسّن تجربة المستخدم وكمان SEO app localization على المدى الطويل


التعديل الأخير: