دعم اكثر من لغة للتطبيق - localization in flutter

 

المقاله علي 3 مستويات
البداية
المتوسط
المتقدم
 
- البداية
دعم اكثر من لغه للتطبيق(localization) امر ضروري (accessibility) ومفيش خلاف علي كدا , في فلاتر الطرق للهدف ده مختلفه بالختلاف المصدر للكلمات او المكتبة المستخدمه ولكن النتجية واحده تقريبا ,, انت تقدر تنفذ الموضوع بنفسك بدون مكاتب تماما لكن الافضل تسخدم مكتبة للجزء ده . 
- ليه نستخدم مكتبة للموضوع ده 
علشان توفر علي نفسك الوقت والمجهود بدل ماتكرر الكود في كل مشروع وتهتم انت بالكود ده وتضيف عليه جديد و testing وكدا فانك تختار مكتبه تحللك المشكله دي هتوفر عليك وقت ومجهود الجزء ده . متخترعش العجله من الاول !
- ايه المكاتب المتاحه 
 منهم "easy_localization"   و getx و localize_and_translate  وكل مكتبه ليها شرحها وتقدر تستخدمها بسهوله 
- مكتبة "امم" - Nations   
الكلام انهارده علي المكتبة دي بس علشان اوضح الي فيها وتفرق ايه عن المكاتب الثانية .
مبدائيا هي جزء من اطار Queen  - لكن تقدر تشتغل بيها مستقله تماما عنه . 
استخدام المكتبة والمميزات
1- المكتبة زيها زي المكاتب الي فوق بتضيف الكلمات لـلتطبيق وتبدا تستخدمهم
اول حاجه هتعمل في فولدر assets فولدر اسمه lang وتضيف فيه الكلمات بتاعتك في ملفات json اسم الملف هو اسم اللغه 
مثال 


ثاني حاجه هتضيف المسار في ملف ال pubspec.yaml علشان نقدر نستخدمهم جوا التطبيق 



الخطوة  الاخيرة هتضع فوق ال App - ودجت اسمها NationsBuilder
علشان لما تغير اللغه تعمل rebuild والتطبيق بتاعك يتاثر بالتغيير ده
وقيلها استخدم سطر البووت await Nations.boot()

طب كدا ركبنا المكتبة الاستخدام بقي ؟ 

المكتبة بتوفر اكثر من نوع للترجمه 
- الكلمات
- العبارات
- الجنس
- الارقام

ترجمه الكلمه بسيطة بتحط في ملف اللغه الكلمه والقيمه كانهم key , value في ال json
مثال من ملف العربي 

وبكدا لو حبينا نترجم اي كلمه زي التاريخ مثلا 


هتظهر "التاريخ" بالعربي ولو الغه انجليزية (او اي لغه اخري ) هتظهر بال value الي في ال key بتاع date
وهكذا نزود كلمات 
طريقه تغير اللغه :
nations بتقدم اكثر من ترجمه key - value
تقدر تترجم الجنس 

بتعمل Map الي values فيها keys ب male و female ودول كفايه كدا 
وتستخدم ال getters دي علشان تاخد الترجمه الذكر او الترجمه الانثي



ملحوظة : تقدر تحدد الجنس مره واحده في ال config وتستخدمه دايما في التطبيق تلقائيا

* تقدر تبدل عبارات من داخل الجمله زي مثلا 
" مرحبا بك يا احمد "  هنا انت محتاج تبدل كلمه احمد باسم المستخدم الحالي 
ودي طريقه استخدماها 
وانت بتعمل ال value بتاعت  الجمله دي تستخدم ال : قبل الاسم الي عاوز تبدله 
مثال


الارقام والجمع
بسبب اختلاف اللغات واننا تقريبا مستحيل نعمل طريقه موحده للجمع في كل الغات لارافل استخدمو طريقه بسيطه ومناسبة استخدمنا فيها نفس المبدا بالظبط طريقه لارافل

الملخص
- المكتبة مضافتش حاجه جديده في طريقه الترجمه العاديه وهي مش معموله علشان تحل مشكله الجزء ده 
- سببها اننا نتحكم في الترجمه جواQueen علشان نقدر نوفر ترجمه لبقيت الاجزاء فيه من غير اي تدخل من المبرمجين علشان       يبقي كل الاجزاء مترجمه جاهزه بنسبه 100% ومتناسقه مع التطبيق كل مكتبة ليها LOADER خاص بيها 
- وبفضل الله علمنا الجزء ده ومكتبه زي queen validators بفت مترجمه جاهزه out of the box 
- اي مكتبه تقدر تستخدم nations علشان توفر ترجمه لنفسها مع queen مش شرط الاجزاء الي جوا الفريمورك
- اي مستخدم يقدر يعمل override لاي كلمه عاوزها سوا في مكتبة او في الفريمورك
-  nations بتيجي بكلمات جاهزه في اكثر من لغه تقدر تستخدمهم بدون تدخل من المستخدم نهائيا والدعم حاليا ل 3 لغات ( عربي انجليزي اسباني ) وفي زياده ان شاء الله

المشاركات الشائعة من هذه المدونة

اختبار الكود واجمالي نسبة تغطية الاختبارات - unit testing and test coverage in Arabic

تصحيح شكل الكود "linting" والتطبيق مع دارت "dart" 💡

يعني ايه api والتعامل معاها والمصطلحات ومثال بدارت للمبتدئين ( منين بيودي علي فين )