ما هي أفضل الممارسات لبناء تطبيقات متعددة اللغات على نظام Win32؟

StackOverflow https://stackoverflow.com/questions/490297

سؤال

لا بد لي من إنشاء تطبيق واجهة المستخدم الرسومية على Windows Mobile، وأود أن يتمكن المستخدم من اختيار اللغة التي يريدها، أو أن يتمكن التطبيق من اختيار اللغة تلقائيًا.أفكر في استخدام ملفات dll متعددة تحتوي على الموارد المطلوبة فقط.

1) ما هي الطريقة المفضلة (الافتراضية؟) لجعل التطبيق يختار لغة المصدر المناسبة تلقائيًا، دون تدخل المستخدم؟أي عينات؟

2) ما هي خياراتي للسماح للمستخدم/التطبيق بالتحكم في اللغة التي يجب أن يعرضها؟

3) إذا كان ذلك ممكنًا، كيف يمكنني إنشاء ملف dll يحتوي على موارد لغة متعددة ثم اختيار اللغة ديناميكيًا؟

هل كانت مفيدة؟

المحلول

ل# 1، يمكنك استخدام GetSystemDefaultLangID ظيفة ل الحصول على معرف اللغة للجهاز.

ل# 2، هل يمكن أن قائمة اللغات التي تدعم وعندما يختار المستخدم واحد، وكتابة التحديد إلى ملف نصي أو التسجيل (هناك التسجيل على ويندوز موبايل؟). عند بدء التشغيل، استخدم الدالة في # 1 فقط إذا لم يكن هناك اختيار في ملف أو التسجيل.

لرقم 3، والطريقة التي نفعل ذلك هو أن يكون DLL مورد واحد لكل لغة، كل منها يحتوي على نفس معرفات الموارد. بمجرد معرفة اللغة، تحميل DLL لتلك اللغة والباقي يعمل فقط.

نصائح أخرى

إعادة 1: يعد اقتراح GetSystemDefuaultLangID السابق اقتراحًا جيدًا.

إعادة 2: يمكنك أن تسأل كخطوة أولى في التثبيت.أو يمكنك حزم أدوات تثبيت مختلفة لكل لغة.

إعادة 3: من الناحية النظرية، تبدو طريقة DLL المذكورة أعلاه رائعة، ولكن من الناحية العملية لم تعمل بشكل جيد على الإطلاق بالنسبة لي شخصيًا.

الطريقة الأفضل هي إحاطة كافة السلاسل في برنامجك إما:تعريب أو NoLocalize.

MessageBox(Localize("Hello"), Localize("Title"), MB_OK);
RegOpenKey(NoLocalize("\\SOFTWARE\\RegKey"), ...);

الترجمة هي مجرد وظيفة تقوم بتحويل النص الإنجليزي إلى اللغة المحددة.NoLocalize لا يفعل شيئًا.

تريد إحاطة سلاسلك بهذه القيم لأنه يمكنك إنشاء بضعة نصوص مفيدة بلغة البرمجة النصية التي تختارها.

1) برنامج نصي يبحث عن جميع بادئات Localize(" ويخرج ملف .ini مع أزواج قيمة الاسم english=otherlangauge.إذا كان ملف الإخراج .ini يحتوي بالفعل على تعيين، فلا تقم بإضافته مرة أخرى.لن تقوم أبدًا بإعادة إنشاء ملف ini بالكامل، بل يقوم البرنامج النصي الخاص بك فقط بإضافة الملفات المفقودة في كل مرة تقوم فيها بتشغيل البرنامج النصي الخاص بك.

2) برنامج نصي يبحث في جميع السلاسل ويتأكد من أنها محاطة إما بـ Localize(" أو NoLocalize(".إذا لم يكن الأمر كذلك فإنه يخبرك بالسلاسل التي لا تزال بحاجة إلى الترجمة.

السبب رقم 2 مهم هو أنك تحتاج إلى التأكد من أن جميع سلاسلك تم وضع علامة عليها بوعي على أنها تحتاج إلى الترجمة أم لا.وإلا فإنه من المستحيل تمامًا التأكد من حصولك على الترجمة المناسبة.

السبب رقم 1 بدلاً من التحميل من ملف DLL هو أنه لا يتطلب أي عمل للحفاظ على هذا الحل ويمكنك إضافة سلاسل جديدة تحتاج إلى ترجمتها بسرعة.

تقوم بشحن ملفات ini التي يتم إخراجها مع برنامجك.يمكنك أيضًا تقديم ملفات ini هذه إلى مترجميك حتى يتمكنوا من تحويل أزواج اللغات الإنجليزية=اللغات الأخرى.عندما يرسلونه إليك مرة أخرى، ما عليك سوى استبدال ملف .ini الذي تم تسجيله بالملف الذي قدمه المترجم الخاص بك.سيؤدي تشغيل البرنامج النصي الخاص بك كما هو مذكور في رقم 1 إلى إعادة إضافة أي ترجمات مفقودة إذا تم إجراؤها أثناء قيام المترجم بالترجمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top