بناء تطبيق Flutter متعدد اللغات (RTL + LTR) متوافق مع اللهجات العربية وخيارات الترجمة الديناميكية

٢٤ نوفمبر ٢٠٢٥
Low angle view of Denmark's flag waving on a pole against a clear blue sky with a tree in the foreground.

مقدمة سريعة: لماذا التعريب الصحيح مهم لتطبيقات Flutter؟

تعريب التطبيق لا يقتصر على ترجمة كلمات؛ بل يتضمن ضبط اتجاه النص (RTL/LTR)، قواعد الجمع والتذكير (plural & gender)، إدارة اللهجات المحلية (مثل المصرية، الشامية، الخليجية) وسير عمل يسمح بتحديث الترجمات دون إصدار نسخة جديدة من التطبيق. في بيئة Flutter توجد أدوات رسمية وغير رسمية تساعدك على بناء نظام متين ومرن للتعريب.

في هذا المقال سنعرض منهجاً عملياً: إعداد gen_l10n الرسمي، استراتيجيات لإدارة RTL وBidi، طرق لدعم لهجات عربية، وأساليب الترجمة الديناميكية (remote/update-in-runtime) مع أمثلة عملية وحزم شائعة.

الأساس التقني: استخدام الأدوات الرسمية (gen_l10n, flutter_localizations, intl)

Flutter يوفر أداة توليد تعريب داخلية (gen_l10n) مع دعم لملفات .arb وتكامل سهل مع MaterialApp/WidgetsApp عبر flutter_localizations. بإعداد ملف l10n.yaml ووضع ملفات app_en.arb ونسخها للغات الأخرى يمكنك توليد كلاس AppLocalizations تلقائياً لتسهيل الوصول للنصوص من الشفرة. هذا هو المسار الموصى به للتعريب الرسمي في Flutter.

مثال مبسّط لـ l10n.yaml:

arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart

ولتحميل الدعم عند التشغيل تحتاج إضافة localizationsDelegates وsupportedLocales في الـ MaterialApp أو CupertinoApp.

المراجع الرسمية تشرح خطوات الإعداد والتوليد بالتفصيل وتُعد المرجع الأساسي لتنفيذ gen_l10n.

تعامل مع اتجاهية النص (RTL) والـ BiDi بفعالية

في Flutter يمكنك التحكم باتجاه النص والواجهات عبر ويدجت Directionality أو بالاعتماد على الـ locale resolution في MaterialApp. يجب أيضاً استخدام خصائص Directional مثل EdgeInsetsDirectional وAlignmentDirectional بدلاً من نظائرها الثابتة للحفاظ على توافق RTL/LTR بشكل صحيح.

عند عرض نصوص مختلطة (عربية وإنجليزية معاً) انتبه لقواعد Unicode Bidirectional؛ فهي التي تحدد كيفية عرض المقاطع متعددة الاتجاهات. استخدام علامات تحكم اتجاهية أو مكوّنات مخصّصة في حالات متقدمة يساعد على الحفاظ على ترتيب الكلمات والرموز (مثل الأرقام والكود) بشكل متوقع للمستخدمين العرب.

راجع فئة Directionality لتفاصيل الخصائص والأمثلة وكيف يتكامل مع بقية الـ widgets.

إدارة اللهجات العربية والـ plural/gender والاختيارات الديناميكية

التحدّي العملي هو دعم لهجات عربية متعددة مع قواعد جمع وصياغة مختلفة. استراتيجيات مقترحة:

  • ملفات تعريب منفصلة لكل لهجة/منطقة: مثل ar.json, ar_EG.json, ar_SA.json لتخصيص النصوص بحسب السوق.
  • نمط fallbacks ذكي: اجعل الإعداد الافتراضي يعيد إلى العربية الفصحى (ar) إن لم توجد ترجمة متخصّصة للِّيْلكة.
  • استخدم آليات ICU للـ plural/gender: تعتمد معظم حزم التعريب على قواعد ICU لتفادي أخطاء الصياغة عند الأعداد أو تذكير/تأنيث.

حزم شائعة تقدم ميزات متقدّمة: easy_localization تدعم plural، gender، والـ RTL، وتسهّل تحميل الملفات من الأصول (assets) مع آليات للFallback والـ named params. هناك أيضاً مكتبات أحدث مثل easiest_localization التي تضيف توليد كود آمن من النوعية (type-safe) ودعم التحديث عن بُعد (remote) مما يسهل إدارة إضافة لهجات جديدة دون نشر تحديث كامل للتطبيق.

إذا كنت تحتاج تحميل ترجمات من خادم (remote translations) فطبق التخزين المؤقت (cache) وإصدار النسخة (versioning) لتجنّب كسور التوافق عند تغيّر البنية.

خريطة تنفيذ سريعة (Checklist) ونصائح عملية للاختبار

  1. ابدأ بإعداد gen_l10n الرسمي ووضع ملفات .arb كقالب.
  2. اعتمد Directional widgets وEdgeInsetsDirectional لتصميم متوافق RTL/LTR.
  3. اختر استراتيجية لهجات: ملفات مخصّصة لكل لهجة + fallback إلى ar (فصحى).
  4. استعمل مكتبة تدعم plural/gender وICU (مثل easy_localization) لتجنّب أخطاء الصياغة.
  5. إذا أردت تحديث الترجمات دون إصدار نسخة جديدة، فكّر في نظام remote + cache + versioning (توفره بعض المكتبات الحديثة).
  6. اختبر: محاكاة Locale مختلفة، وضع RTL، نصوص مختلطة BiDi، وأجهزة ذات إعدادات أرقام/تواريخ مختلفة.

خلاصة: الجمع بين الأدوات الرسمية (gen_l10n) ومكتبة مرنة لإدارة الموارد الديناميكية يوفّر توازناً جيداً بين الموثوقية وسهولة التحديث. ابدأ بنموذج بسيط ثم أضف دعم اللهجات والتحديثات البعيدة تدريجياً.