
مرحباً ، اسمي ألكساندر وأنا مطور تطبيقات أندرويد. بمجرد أن حصلت على مشروع يحتوي على 11 لغة واجهة وأكثر من 600 سطر. لم يكن هناك مبرمجون من جانب العميل ، لذا قاموا بتخزين كل شيء في جدول بيانات Excel. عندما غيّروا شيئًا ما فيه ، أرسلوا هذا الجدول إلينا بعبارة "لقد أبرزنا الخلايا مع تغييرات في اللون الأصفر ، وقم بتحديث تطبيقات Android و iOS ، على التوالي." بعد ذلك ، فقد اثنين من المطورين بضع ساعات ، وإجراء تغييرات يدويا. ثم اتضح أن شخصًا ما قد نسي شيئًا ما في مكان ما ، أو ارتكب خطأ أو لم ينته ، فقد كانت هناك تباينات بين المنصات ، وكان العميل متوترًا ، وكان المطورون يخافون. لم يناسبني هذا الموقف ، لقد بدأت في البحث عن طرق لأتمتة تفريغ الصفوف من Excel. كانت النتيجة رمز VBScript رائعًا ، والذي ما زلنا نستمتع باستخدامه. الآن سوف أقدم هذا السيناريو لك. تحت القص ، وعدد معين من الصور ورمز البرنامج النصي.
لذا ، أولاً ، ألقِ نظرة على الجدول نفسه وقيّم حجم المشكلة:

ها هي ، الجمال! كما نرى ، هناك العديد من أعمدة الخدمة وأسماء الخطوط العامة وترجماتها. علاوة على ذلك ، يتم تقديم بعض الأسطر باللغة الإنجليزية والألمانية فقط ، لأنه في الإصدار 2.0 من التطبيق ، قرر العميل ترك لغتين فقط في الوقت الحالي وإضافة الباقي لاحقًا. أو ربما يشفق على المال للمترجمين. ولكن هذا من أعماله ، لكن علينا أن نأخذ ذلك في الاعتبار. بمعنى ، يجب على البرنامج النصي تخطي الخلايا الفارغة وعدم إنشاء خطوط فارغة لمثل هذه اللغة. بالإضافة إلى ذلك ، يجب مراعاة أحرف التنسيق مثل "٪ s" في الخلية F5. سيتعين عليهم العمل ، لأن ما يجب أن يكون عليه Android في iOS يجب استبداله بـ "٪ @". سأخبرك عن الفروق الدقيقة الأخرى على طول الطريق.
لكي لا أضع القطة ولا تسحبها من الذيل ، سأقوم بنشر النص بأكمله الآن:
الآن هو الوقت المناسب للذهاب من خلال الفروق الدقيقة.
يتطلب تطبيقنا العديد من أذونات المستخدم. في نظام التشغيل iOS ، لا يتم تخزين أسطر طلب هذه الأذونات كالمعتاد في Localizable.strings ، ولكن في InfoPlist.strings ، لذلك في بداية البرنامج النصي لدينا نحدد أسماء تلك الخطوط التي سيتم إرسالها إلى InfoPlist:
Const NsCameraUsageDescription = "NsCameraUsageDescription" Const NSLocationAlwaysAndWhenInUseUsageDescription = "NSLocationAlwaysAndWhenInUseUsageDescription" Const NSLocationAlwaysUsageDescription = "NSLocationAlwaysUsageDescription" Const NSLocationWhenInUseUsageDescription = "NSLocationWhenInUseUsageDescription" Const NSPhotoLibraryAddUsageDescription = "NSPhotoLibraryAddUsageDescription" Const NSPhotoLibraryUsageDescription = "NSPhotoLibraryUsageDescription"
الجزء التالي الجدير بالملاحظة هو أسماء المجلدات التي سيتم حفظ جميع الملفات بها. في نظام التشغيل iOS ، تتم تسمية جميع المجلدات بتسمية لغة مؤلفة من حرفين ، مثل "en.lproj" ، و "de.lproj". كل شيء ما عدا الروسية ، وهنا "رو رو". وفي الجدول نفسه ، توجد الأعمدة بترميز Android. لذلك ، parsim:
If objFSOandroid = "values" Then objFSOios = "en" & ".lproj" ElseIf objFSOandroid = "values-ru" Then objFSOios = "ru-RU" & ".lproj" Else objFSOios = Right(objFSOandroid,2) & ".lproj" End If
والمهمة الأخيرة ، استبدال والهروب من الشخصيات. بالنسبة لنظام التشغيل iOS ، سوف نتغير ، كما قلت ، ٪ s إلى ٪ @ ونهرب من علامات اقتباس الفواصل العليا:
iOSString = Replace(oTranslations.Sheets(1).Cells(nCounter, LanguageColumnIndex).Value, "%s", "%@") iOSString = Replace(iOSString, "'", "\'") iOSString = Replace(iOSString, chr(34), "\" & chr(34))
بالنسبة إلى نظام Android ، نهرب أيضًا من الفواصل العليا ونستبدل حرف ما يسمى سطر التغذية ( Chr (10) ) بحرف الخط الجديد المعتاد \ n . وهناك سبب لذلك. في إحدى الخلايا ، يوجد نص كبير نوعًا ما ، يتم تجميعه بواسطة العميل في برنامج MS Word ووضعه في خلية Excel باستخدام لصق النسخ التقني. وعلى الرغم من أننا لم نعثر على البديل الصحيح عن طريق التجربة والخطأ ، فقد تم عرض النص في نظام التشغيل iOS في الفقرات الضرورية ، وتم دمجه في Android في فقرة واحدة.
استنتاج
كما قد تكون خمنت بالفعل ، يتم تشغيل البرنامج النصي في سطر أوامر Windows. للبساطة ، نضع البرنامج النصي وملف .xlsx في مجلد واحد ، وانتقل إلى سطر الأوامر هناك واكتب الأمر:
cscript ConvertExcelToTXTandXML.vbs <filename>.xlsx
بعد ذلك ، اضغط على Enter والتمتع بتصور جميل للبرنامج النصي في شكل نقاط تظهر في نافذة الأوامر لكل خطوة من خطوات البرنامج. نتيجة العمل الضخم للبرنامج النصي الخاص بنا هي مجلدين ، "ios" و "res" ، تبقى محتوياتهما لنسخها إلى مشروع iOS و Android ، على التوالي.
هذا كل شيء. آمل أن يكون هذا البرنامج مفيدًا لشخص ما ويوفر الكثير من الوقت.