المدونةنُشر في

العربي والإنجليزي في تطبيق Flutter واحد

تطبيق ثنائي اللغة هنا ليس ملف ترجمة إضافيًا. Flutter RTL Arabic هو اتجاه، وصيغ جمع، وخطوط، وكتابة مختلطة، وقائمة لغات في Xcode.

  • Flutter
  • عربي
  • RTL
مستويان يلتقيان في نقطة — Flutter RTL Arabic اتجاهان، لا ملفان.

منتج في الخليج أصلًا ثنائي اللغة. الواجهة عربية. اسم المنتج غالبًا إنجليزي. الأرقام غربية. Flutter RTL Arabic ليس «إضافة ملف ترجمة». اللغة تقلب الاتجاه، والاتجاه يغيّر المسافات والمحاذاة وموضع السهم.

تطبيق Flutter ثنائي اللغة هو تخطيط قابل للانعكاس، لا ملف نصوص إضافي. Flutter يعكسه تلقائيًا. التوثيق الرسمي يشرح ملفات ARB. وهذه المقالة عن العمل الذي يبقى يتعطّل بعد أن يوجد الملف.

Flutter هو الأساس عندنا للجوال. هذا شغل العربي والإنجليزي من هذا الأساس. إذا كان المنتج لـ Apple، نكتبه بـ Swift. المشكلة نفسها هناك. الأدوات تختلف، والانضباط لا.

الاتجاه هو المنتج

Directionality محيط بالشاشة. MaterialApp مع GlobalWidgetsLocalizations يأخذانه من اللغة. العربي يصير من اليمين. عناصر Row الفرعية تنعكس. TextAlign.start يتبع اللغة. TextAlign.left لا يتبع.

تجاوز Directionality فقط لجزيرة صغيرة — شعار إنجليزي، أو خريطة تُراد أن تبقى من اليسار. لا تستخدمه لتتهرّب من المسافات الاتجاهية. إذا جعلت الشاشة كلها من اليسار، فأنت لم تعرّبها، بل أخفيت المشكلة.

بداية ونهاية، مو يسار ويمين

EdgeInsetsDirectional هو القاعدة. start و end تُحسب حسب الاتجاه. AlignmentDirectional و PositionedDirectional و BorderRadiusDirectional تعمل بالطريقة نفسها. أما EdgeInsets.only(left: 16) فيجعل الشاشة العربية تبدو مستعارة.

أيقونات الرجوع والتالي تنعكس. الساعة، والشعار، والصورة ما تنعكس. دليل Apple واضح. لا تعكس صورة جهاز. لا تعكس موجة تلاوة.

اختبر والاتجاه مفروض من اليمين. ثم اختبر على جوال في اليد اليمنى. أول ما يتعطّل غالبًا هو اليسار المكتوب ثابتًا.

صيغ الجمع في العربية ستة أشكال

الإنجليزي عنده واحد وغيره. العربي في CLDR: صفر، وواحد، واثنين، وقليل، وكثير، وغيره. صفر هو 0. واحد هو 1. اثنين هو 2. قليل من 3 إلى 10 (باقي القسمة على 100). كثير من 11 إلى 99. غيره هو 100 و200 ومعظم الكسور. الترتيب في العربي غيره بس.

إذا كانت الشاشة تعرض عددًا — حجوزات، أو أعضاء، أو جلسات، أو آيات، أو عروضًا — فملف ARB يكتب الصيغ الستّ. وصيغة other وحدها تطلع «11 عنصر»، وهذا غلط؛ الصواب «11 عنصرًا». المثنى مو زينة. «2 عنصر» غلط، والصواب «عنصران».

  • صفر — n يساوي 0. اكتب صيغة الصفر. لا تعيد الجمع.
  • واحد — n يساوي 1. المفرد.
  • اثنين — n يساوي 2. المثنى. مو الجمع.
  • قليل — باقي القسمة على 100 من 3 إلى 10.
  • كثير — باقي القسمة على 100 من 11 إلى 99.
  • غيره — 100، 200، 0.5. الاحتياط، مو السطر الوحيد.

صيغة Flutter هي صيغة ICU. الأداة تطلب other فقط، واللغة تطلب ستة. هذي هي الفجوة.

أسماء إنجليزية، وأرقام غربية

واجهة الخليج مختلطة من أول يوم: كروم عربي، واسم منتج لاتيني، وأرقام غربية. Naqrah و T-CODE و Aalim و CareerFolio تبقى لاتينية هنا وفي المنتج. ما نعرّب علامة تجارية لكي تبدو محلية.

خوارزمية يونيكود تُبقي أرقام الرقم الواحد في ترتيب القراءة. 541 لا تصبح 145. لا تعكس سعرًا، ولا رقم جوال، ولا رقم آية. الأرقام الغربية هي التي نستخدمها. وتقول Apple إن الغربي والشرقي يختلفان حسب اللغة. ما نعلن معيار دولة لا نستطيع ضبط تنسيقه.

قطعة إنجليزية داخل جملة عربية — اسم، أو SKU، أو رابط — قد تحتاج إلى علامة اتجاه. لا تتركها لـ toString وتتمنّى. صمّم السطر، ثم اختبره على جوال.

خط يشكّل العربي

شكل الحرف العربي يتغيّر حسب موقعه. خط إنجليزي مع بديل عربي يجعل الشاشة تبدو مستعارة. هذا الموقع يستخدم ثمانية خطوط لهذا السبب. وداخل التطبيق تُختار العائلة المناسبة للمنتج. ما نسمّي خطًا لتطبيق بعينه.

نفس حجم الحرف الإنجليزي الكبير يطلع صغير. توجيه Apple غالبًا نقطتين فوق. ارتفاع السطر والبدائل جزء من نظام التصميم، مو سطر في pubspec بعدين. ما بننشر قائمة خطوط مفضّلة. القائمة موجودة في أماكن ثانية، ومو هي الشغل.

منتجان، وعملان

Aalim جوال. العربي هو المنتج: قارئ قرآن، رسم عثماني، تفسير، حفظ. ليس تطبيقًا إنجليزيًا مترجمًا. ما ندّعي ستاكًا. ندّعي الشغل.

CareerFolio ويب. ملفات أداء ثنائية اللغة لموظفين في التعليم، تنقلب يمينًا ويسارًا. دليل على أن الثنائية قرار منتج على المكتب أيضًا، لا على الجوال فقط. رفيق قرآن، ومنصة دورات، وهذا الملف: ثلاثة أعمال في التعلّم — مقالة مستقلة.

WOSTA أيضًا ويب، والعربي هو الأساس. نفس القاعدة. هذي مو «أضفنا app_ar.arb». هذا هو المنتج. شوف الشغل المنشور.

Xcode قائمة ثانية

ملفات ARB في Flutter ليست قائمة لغات المتجر. تضيف اللغات في Xcode — Runner، Info، Localizations — لكي تستطيع صفحة المتجر أن تقول عربي. ترجمة Flutter لا تنفّذ هذه الخطوة عنك. CFBundleLocalizations هو اسم القائمة نفسها في الملف.

البيانات الوصفية في App Store Connect قائمة ثالثة. العربي لغة مدعومة هناك. وواجهة السعودية عند Apple: الإنجليزي البريطاني هو الافتراضي، والعربي إضافي. إذا رفعت الإنجليزية فقط، يظهر المتجر السعودي بالإنجليزية. لغات الملف ولغات الصفحة ليست الشيء نفسه.

  • مشروع Flutter — لغات، و ARB، ومسافات اتجاهية، وستة صيغ جمع، وخط يشكّل العربي.
  • Xcode — Localizations لكي يعلن الملف العربي.
  • App Store Connect — وصف ولقطات عربية تطابق الملف.

Flutter يقدر. الشغل هو الانضباط

الإطار يعكس Row. لكنه لا يمنعك من كتابة left: 16، أو إسقاط المثنى والقليل، أو وضع اسم إنجليزي داخل جملة عربية، أو الإصدار دون عربي في Xcode. هذه هي الحقيقة الصادقة. Flutter يتولّى RTL. الفجوة انضباط.

إذا كنت تبني تطبيق Flutter ثنائي اللغة للسعودية أو الخليج، فاكتب لنا باللغات التي سيراها أول مستخدم. ليس ملف الترجمة، بل الشاشة.

أخبرنا عن مشروعك.

اكتب لنا وش تبي تبني. يرد عليك من سينفّذ الشغل.

تواصل معنا