alt



اللهم يا معلم ابراهيم علمنا ويامفهم سليمان فهمنا … اللهم امين.

مقدمة

خلونا نفترض افتراض بسيط اننا راح نبني مشروع جديد وحابين نضيف لهذ المشروع دعم لأكثر من لغة ( عربية - انجليزية - تركية ). دعم اكثر من لغة في المشاريع البرمجية يسمى بـ Localization . واذا اخدنا مثال في الـ iOS الـ Localization مدعوم بشكل ممتاز نوعا ما وينقصه بعض الاشياء البسيطة. الزين ما يكمل 😂. في هذا المقال راح نتطرق على الطرق الموجودة واللي يستخدمها بعض المبرمجين ومن خلالها نتعرف على الاخطاء ونتدارك الاخطاء هذي بأفضل الطرق والأساليب البرمجية لحل المشكلة هذي البسيطة ونقدر نطلع من المشروع بكتابة أكواد برمجية نظيفة وجميلة.

Localization

زي مااتفقنا ان Localization الهدف منها دعم أكثر من لغة في المشروع

الطريقة التقليدية

للأسف الكثيير من المبرمجين المبتدئين يستخدمون هذا الأسلوب في مشاريعهم البرمجية وهذا الشي غير صحيح ويفترض ان اي مبرمج مايستخدم هذا الاسلوب ابداً … الاسلوب بكل بساطة هو ان يتم اسناد قيم عربية للمتغيرات

مثال :

let name : String = “فيصل المعارك”

للأسف الأسلوب هذا فيه اخطاء كثيرة :

  • ابل لديها طريقتها الخاصة في دعم Localization في المشاريع.
  • اسناد القيم العربية للمتغيرات يعد من الكوارث البرمجية لاسباب كثيرة :
    • فريق العمل عادة في المشاريع الكبيرة لايشترط ان يكون جميع المبرمجين يتحدثون اللغة العربية لكن يشترط ان الجميع يجيدون الكتابة باللغة الانجليزية
    • كتابة الكود باللغة العربية يفقد الكود القدرة على القراءة ة والكتابة لغير المتحدثين باللغة العربية.
    • كتابة الكود باللغة العربية يفقد الكود جماله بسبب الخلط بين اللغتين
  • تعديل القيم راح يكون صعب جدا والسبب ان القيم موجودة في ملفات كثيرة جدا في المشروع.
  • هذا الكود لايقبل دعم اكثر من لغة واذا راح تدعم اكثر من لغة راح يكون هناك عدد كبير من الأكواد البرمجية فقط لدعم اكثر من لغة في المشروع.

نصيحتي لك : لاتستخدم هذا الاسلوب أبدا في اي مشروع من مشاريعك. ارجوك (🙏🏻)

طريقة أبل

تعتبر طريقة جيدة نوعاً ما لكن ليست الافضل في دعم Localization لمشروعك لاسباب كثيرة سيتم التطرق لها باذن الله … طريقة اعدادات دعم Localization في مشاريع iOS :



اذا شاهدنا الفيديو راح نعرف ان هذا الأسلوب فيه اخطاء بسيطة مثلا :

  • اي خطأ في key string في NSLocalizedString("key", comment: "test") راح يظهر key الجديد من دون ذكر ان هذا الـ key غير موجود في ملف Localizable.strings
  • لو افترضنا ان Localizable file صارت فيه keys كثيره راح يصعب على المبرمج تذكر كل key في file فيضطر المبرمج الى الرجوع للملف مع الوقت للتأكد من اسماء بعض keys عشان ما يخطي في spelling و رجعنا لنفس المشكلة (وكنك يابو زيد ما غزيت ).
  • في حال تعديل اي key لن يظهر اي تأثير على المشروع تحت علم المبرمج وفعلياً فيه تأثير حدث على المشروع لكن ماصار فيه اي تحذير او خطأ تبين للمبرمج 🤷🏻‍♂️

افضل طريقة ممكن تدعم فيها Localization في مشروعك

R.Swift

افضل طريقة ممكن نستخدمها وتقوم بحل جميع المشاكل التي تم ذكرها سابقاً هي باستخدام R.Swift Framework هذي Framework تحل جميع المشاكل اللي ذكرناها واكثر عن طريق كتابة أكواد اقل. الفكرة بكل بساطة من R.Swift هي انها تستخدم script من اجل تحول كل keys الموجودة في Localizable file في المشروع الى متغيرات قابلة للاستخدام بشكل سريع وبسيط. R.Swift ليست مخصصة للـ Localization فقط. R.Swift تقوم بقراءة Resources ( Images, Custom fonts, Resource files, Colors, Localized String, Storyboards, Segues, Nibs and Reusable Cell) الموجودة في المشروع وتحويلها الى أكواد برمجية لاستخدامها بشكل بسيط بدلا من قيام المبرمج بهذا الأمر

امثلة
الاول :

ملفات storyboards تستطيع استخدامها بشكل مباشر على شكل متغيرات بدلا من تعريفها في الكود :
let main = UIStoryboard(name: "Main", bundle: Bundle.main)
R.storyboard.main()

**الكود الاول هو نفس الكود الثاني لكن R.Swift قامت باستبدال magic keys الى متغيرات يمكن التعامل معها بشكل سريع وآمن.

الثاني:

في Localization مثلا

NSLocalizedString("Book", comment: "")
R.string.localizable.book()

الكود في السطر الأول يقوم بنفس السطر الثاني لكن الكود الثاني سهل التذكر وامن وهو عباره عن متغير في المشروع. استخدام R.swfit في مشاريع يسرع من عملية Localization بشكل آمن من الأخطاء ويكون المشروع لديه قابلية عالية في التغيير والقراءة بشكل افضل من الطرق التي تم ذكرها في التدوينة.

طريقة تثبيت R.Swift

لتحميل Library قم باستخدام cocoapods وا ضافة pod في Podfile التالي:
pod 'R.swift'

ان لم تمكن تعلم ما هو cocoapods قم بقراءة هذه التدوينة ماهي أداة cocoapods ؟

عرض مرئي يشرح عمل الأداة

شاهد الفيديو لمعرفة كيفية استخدام R.Swift Framework :


دمتم بخير 👨🏻‍💻