دعم اكثر من لغة للتطبيق - localization in flutter
المقاله علي 3 مستويات
البداية
المتوسط
المتقدم
- البداية
دعم اكثر من لغه للتطبيق(localization) امر ضروري (accessibility) ومفيش خلاف علي كدا , في فلاتر الطرق للهدف ده مختلفه بالختلاف المصدر للكلمات او المكتبة المستخدمه ولكن النتجية واحده تقريبا ,, انت تقدر تنفذ الموضوع بنفسك بدون مكاتب تماما لكن الافضل تسخدم مكتبة للجزء ده .
- ليه نستخدم مكتبة للموضوع ده
علشان توفر علي نفسك الوقت والمجهود بدل ماتكرر الكود في كل مشروع وتهتم انت بالكود ده وتضيف عليه جديد و testing وكدا فانك تختار مكتبه تحللك المشكله دي هتوفر عليك وقت ومجهود الجزء ده . متخترعش العجله من الاول !
- ايه المكاتب المتاحه
منهم "easy_localization" و getx و localize_and_translate وكل مكتبه ليها شرحها وتقدر تستخدمها بسهوله
- مكتبة "امم" - Nations
الكلام انهارده علي المكتبة دي بس علشان اوضح الي فيها وتفرق ايه عن المكاتب الثانية .
مبدائيا هي جزء من اطار Queen - لكن تقدر تشتغل بيها مستقله تماما عنه .
استخدام المكتبة والمميزات
1- المكتبة زيها زي المكاتب الي فوق بتضيف الكلمات لـلتطبيق وتبدا تستخدمهم
اول حاجه هتعمل في فولدر assets فولدر اسمه lang وتضيف فيه الكلمات بتاعتك في ملفات json اسم الملف هو اسم اللغه
مثال
الخطوة الاخيرة هتضع فوق ال App - ودجت اسمها NationsBuilder
علشان لما تغير اللغه تعمل rebuild والتطبيق بتاعك يتاثر بالتغيير ده
وقيلها استخدم سطر البووت await Nations.boot()
المكتبة بتوفر اكثر من نوع للترجمه
- الكلمات
- العبارات
- الجنس
- الارقام
ترجمه الكلمه بسيطة بتحط في ملف اللغه الكلمه والقيمه كانهم key , value في ال json
مثال من ملف العربي
وبكدا لو حبينا نترجم اي كلمه زي التاريخ مثلا
هتظهر "التاريخ" بالعربي ولو الغه انجليزية (او اي لغه اخري ) هتظهر بال value الي في ال key بتاع date
وهكذا نزود كلمات
طريقه تغير اللغه :
nations بتقدم اكثر من ترجمه key - value
تقدر تترجم الجنس
بتعمل Map الي values فيها keys ب male و female ودول كفايه كدا
وتستخدم ال getters دي علشان تاخد الترجمه الذكر او الترجمه الانثي
وتستخدم ال getters دي علشان تاخد الترجمه الذكر او الترجمه الانثي
ملحوظة : تقدر تحدد الجنس مره واحده في ال config وتستخدمه دايما في التطبيق تلقائيا
* تقدر تبدل عبارات من داخل الجمله زي مثلا
" مرحبا بك يا احمد " هنا انت محتاج تبدل كلمه احمد باسم المستخدم الحالي
ودي طريقه استخدماها
وانت بتعمل ال value بتاعت الجمله دي تستخدم ال : قبل الاسم الي عاوز تبدله
وانت بتعمل ال value بتاعت الجمله دي تستخدم ال : قبل الاسم الي عاوز تبدله
مثال
الارقام والجمع
بسبب اختلاف اللغات واننا تقريبا مستحيل نعمل طريقه موحده للجمع في كل الغات لارافل استخدمو طريقه بسيطه ومناسبة استخدمنا فيها نفس المبدا بالظبط طريقه لارافل
الملخص
- المكتبة مضافتش حاجه جديده في طريقه الترجمه العاديه وهي مش معموله علشان تحل مشكله الجزء ده
- سببها اننا نتحكم في الترجمه جواQueen علشان نقدر نوفر ترجمه لبقيت الاجزاء فيه من غير اي تدخل من المبرمجين علشان يبقي كل الاجزاء مترجمه جاهزه بنسبه 100% ومتناسقه مع التطبيق كل مكتبة ليها LOADER خاص بيها
- وبفضل الله علمنا الجزء ده ومكتبه زي queen validators بفت مترجمه جاهزه out of the box
- اي مكتبه تقدر تستخدم nations علشان توفر ترجمه لنفسها مع queen مش شرط الاجزاء الي جوا الفريمورك
- اي مستخدم يقدر يعمل override لاي كلمه عاوزها سوا في مكتبة او في الفريمورك
- nations بتيجي بكلمات جاهزه في اكثر من لغه تقدر تستخدمهم بدون تدخل من المستخدم نهائيا والدعم حاليا ل 3 لغات ( عربي انجليزي اسباني ) وفي زياده ان شاء الله