
لقد تم بالفعل كتابة الكثير عن توطين (تدويل) تطبيقات الرفرفة.
تتناول الوثائق الرسمية هذه المسألة بشيء من التفصيل ، بالإضافة إلى ذلك ، يصف عدد من المتحمسين مجموعة متنوعة من الأساليب .
لا تتظاهر هذه المقالة بأنها شاملة ، لكنها وصف لممارسة تقلل بشكل فعال للغاية من الإدخال اليدوي.
نحن نتحدث عن التعريب باستخدام flutter_i18n ، وهو مكون إضافي يعمل بنظام Android Studio والذي يمكن استخدامه للتخلص من العمل الروتيني ورمز التشفير.
تدريب
قم بتثبيت البرنامج المساعد flutter-i18n أولاً

بعد إعادة التشغيل ، سيتم تلقائيًا إضافة الملفات التي تم إنشاؤها / i18n.dart و res / values / strings_en.arb إلى بنية المشروع

(أضفت ملف strings_ru.arb يدويًا للغة الروسية)
يرجى ملاحظة أن Android Studio 3.3.1 - 3.4 يحتوي على نوع من أنواع القفز ، بسبب عدم إنشاء ملفات الترجمة. وصفت هذه المشكلة على stackoverflow ، وحصلت على حل . حل آخر هو البقاء مؤقتًا على AS 3.2 ، ولكن هذا هو أحد الهواة.
ستحتاج أيضًا إلى تثبيت حزمة flutter_localizations لتوطين عناصر واجهة تعامل Flutter الداخلية (سيتم ذلك لك على مستوى النظام).
dev_dependencies: flutter_localizations: sdk: flutter
بعد ذلك ، سيكون كافياً لإضافة معلمات الترجمة إلى المنشئ:
return MaterialApp( localizationsDelegates: [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales,
ولا تنسى استيراد الحزمة
import 'package:f_latte/generated/i18n.dart';
التعريب
ما عليك سوى البدء في إضافة الأسطر اللازمة ، مع ملاحظة تدوين JSON ، مثل هذا:
strings_en.arb:
{ "title": "F-Latte", "greeting": "Hi, $name!", "pushingZero": "You pressed NONE (", "pushingOne": "You pressed once", "pushingTwo": "You pressed twice", "pushingOther": "You pressed $cnt times", }
بالمناسبة ، ينفذ البرنامج المساعد منطق العمل مع الجمع ( الجمع ) ، لذلك يجب عليك تسمية المفاتيح في ملفات arb بطريقة معينة. كيف ستصبح هذه الأمور واضحة لك من خلال رمز المثال.
لإضافة لغات ، ما عليك سوى إضافة الملفات الضرورية إلى الحزمة نفسها ، وإضافة سلاسل مترجمة بنفس المفاتيح هناك ، مثل هذا:
strings_ru.arb:
{ "title": "F-", "greeting": ", ${name}!", "pushingZero": " ", "pushingOne": " ", "pushingTwo": " ", "pushingOther": " $cnt ()" }
مع أي تغييرات في هذه الملفات ، سيقوم البرنامج المساعد بإعادة إنشاء ملف i18n.dart . بالمناسبة ، أوصي على الأقل بمشاهدته ، سيصبح الأمر أكثر وضوحًا.
هذا كل شيء. في أي مكان يتطلب الوصول إلى السلاسل المترجمة ، ما عليك سوى استدعاء طريقة المترجم الثابت:
هذا هو كيف يبدو

الرمز مع مثال هنا ( iter_0001_localiz
branch).
مصدر التوضيح.
PS
وفقا ل awaik
الترجمة لن تعمل تحت دائرة الرقابة الداخلية. لجعلها تعمل ، تحتاج إلى إضافة لغات إلى قسم المعلومات في Xcode. خلاف ذلك ، فإنه لا يحدد أي شيء ولا ينتج أخطاء.
هنا