حزم و نشر الموارد

يستخدم .NET Framework نموذج الموزع و الوصلات لحزم و نشر الموارد. الموزع هو التجميع الرئيسي الذي يحتوي على التعليمات البرمجية التنفيذية الغير القابلة للترجمة و الموارد لثقافة واحدة تسمى الثقافة المحايدة أو الافتراضية. الثقافة الافتراضية هي الثقافة البديلة للتطبيق. تتصل كل وصلة بتجميع تابع يحتوي على الموارد لثقافة واحدة، لكن لا يحتوي على أية تعليمات برمجية.

هناك العديد من المزايا لهذا النموذج:

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

  • يمكنك تحديث و تغيير التجميعات التابعة لأحد التطبيقات بدون إعادة التحويل البرمجي للتطبيق.

  • يحتاج التطبيق إلى تحميل فقط تلك التجميعات التابعة التي تحتوي على الموارد المطلوبة لثقافة معينة. يمكن أن يقلل هذا استخدام موارد النظام بشكل كبير.

ومع ذلك، هناك أيضاً عيوب لهذا النموذج:

  • يجب عليك إدارة مجموعات متعددة من الموارد.

  • تزيد التكلفة الأولية لاختبار التطبيق لأن يجب عليك اختبار تكوينات متعددة. لاحظ أنه على المدى الطويل سيكون من الأسهل و أقل تكلفة اختبار تطبيق أساسي واحد مع العديد من التجميعات التابعة من اختبار و المحافظة على عدة إصدارات متوازية الدولية.

اصطلاحات تسمية الموارد

عند قيامك بحزم موارد التطبيق الخاص بك، يجب عليك استخدام اصطلاحات تسمية الموارد التي يتوقعها وقت تشغيل اللغة العامة. يعرّف وقت التشغيل المورد عن طريق توقيع الثقافة الخاصة به أو اسمه. يتم إعطاء اسم فريد لكل ثقافة، و هو تركيبة من اسم ثقافة ذي حرفين بالأحرف الصغيرة، المقترن بلغة، و إذا لزم الأمر، اسم ثقافة فرعية ذي حرفين، بالأحرف الكبيرة المقترن ببلد أو منطقة. يتبع اسم الثقافة الفرعية اسم الثقافة، مفصولة بواسطة واصلة (-). تتضمن الأمثلة ja-JP لليابانية في اليابان، en-US للانجليزية في الولايات المتحدة أو de-DE للألمانية في ألمانيا (بخلاف البديل مثل de-AT للألمانية في النمسا). راجع فئة CultureInfo للحصول على قائمة كاملة من أسماء الثقافات.

عملية الرجوع للمورد الاحتياطي

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

  1. يقوم وقت التشغيل أولاً بالتحقق من مخزن التجميع العمومي المؤقت للحصول على تجميع يطابق الثقافة المطلوبة للتطبيق الخاص بك.

    يمكن لمخزن التجميع العمومي المؤقت تخزين تجميعات المورد التي تتم مشاركتها من قبل العديد من التطبيقات. وهذا يحررك من الحاجة إلى تضمين مجموعات معينة من الموارد في دليل البنية لكل تطبيق تقوم بإنشائه. إذا عثر وقت التشغيل على مرجع للتجميع، يبحث في التجميع عن المورد المطلوب. إذا قام بإيجاد الإدخال في التجميع، يستخدم المورد المطلوب. إذا لم يجد الإدخال، فإنه يستمر في البحث.

  2. يقوم وقت التشغيل بعد ذلك بالتحقق من الدليل للتجميع الذي يتم تنفيذه حالياً للحصول على دليل يطابق الثقافة المطلوبة. إذا عثر على الدليل، فهو يبحث في ذلك الدليل على تجميع تابع صالح للثقافة المطلوبة. ثم يبحث وقت التشغيل في التجميع التابع عن المورد المطلوب. إذا عثر على المورد في التجميع، يقوم باستخدامه. إذا لم يجد المورد، فإنه يستمر في البحث.

  3. ثم يبحث وقت التشغيل في مخزن التجميع العمومي المؤقت مرة أخرى، هذه المرة، عن التجميع الأصل للمورد المطلوب. إذا كان التجميع الأصل يوجد في مخزن التجميع العمومي المؤقت، يبحث وقت التشغيل عن التجميع للمورد المطلوب.

    يتم تعريف "الأصل" على أنه الثقافة الاحتياطية المناسبة. خذ بعين الاعتبار الأصول كالمرشحين الأكثر تناسباً; لأن توفير أي مورد يكون أكثر تفضيلاً عن طرح استثناء. كما تسمح لك هذه العملية بإعادة استخدام الموارد. فقط تحتاج إلى تضمين مورد معين في المستوى الأصل إذا كانت الثقافة الفرع لا تحتاج لترجمة المورد المطلوب. على سبيل المثال، إذا قمت بتوفير تجميعات تابعة لـ en (الإنجليزية المحايدة) ، en-GB (الإنجليزية المنطوقة في المملكة المتحدة) و en-US (الإنجليزية المنطوقة في الولايات المتحدة) ، سيحتوي التجميع التابع على المصطلحات الشائعة و التجميعات التابعة en-GB و en-US قد توفر تجاوزات فقط لتلك الحدود التي تختلف.

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

  5. بعد ذلك يقوم وقت التشغيل بالبحث في التجميعات الأصل، كما في الخطوة السابقة، خلال عدة مستويات محتملة. كل ثقافة لها أصل واحد فقط، و لكن الأصل قد يكون له أصل خاص به.

  6. وقت التشغيل بعد ذلك بالبحث عن البيانات الموروثة الاحتياطية المفضلة من قائمة المتوفرة بواسطة النظام التشغيل. إذا كان أحد العناصر الموجودة في lهوt هو ليس اسماً صالحاً لثقافة، هذا العنصر هو تخطي دون التسبب في حدوث خطأ وبحث باستمرار مع العنصر التالي. يتم تطبيق هذه الخطوة فقط إلى .NET Framework الإصدار 4والإصدارات الأحدث.

  7. إذا تم البحث في الثقافة التي تم تحديدها، و كافة الأصول و المورد لا يزال لم يتم العثور عليه، يتم استخدام المورد الافتراضي (الاحتياطي). ابتداءً من .NET Framework الإصدار 2.0، يمكنك أن تحدد الموقع النهائي البديل للموارد هو تجميع تابع بدلاً من التجميع الرئيسي. باستخدام NeutralResourcesLanguageAttribute مع التعداد UltimateResourceFallbackLocation، يمكنك التحكم ما إذا كان الموقع النهائي البديل للموارد في التجميع الرئيسي أو في التجميع التابع.

    ملاحظةملاحظة

    المورد الافتراضي هو المورد الوحيد الذي يتم تحويله برمجياً بواسطة التجميع الرئيسي.إلا إذا قمت بتحديد تجميع تابع باستخدام الـ NeutralResourcesLanguageAttribute ، و هو الرجوع النهائي (الأصل النهائي).لذلك، من المقترح بشدة أن تقوم دائماً بتضمين مجموعة افتراضية من الموارد في التجميع الرئيسي.يساعد هذا على التأكد من أنه لا يتم طرح استثناءات.عن طريق تضمين ملف الموارد، تقوم بتوفير احتياطي لكافة الموارد، و التأكد من أن مورد واحد على الأقل موجود دوماً للمستخدم ، حتى إذا لم يكن محدد الثقافة.

  8. وأخيراً، إذا لم يجد وقت التشغيل مورد لثقافة افتراضية (احتياطية)، يتم طرح استثناء يشير إلى تعذر العثور على المورد.

مثال عن كيفية إجراء البحث عن مورد مطلوب، بافتراض أن المستخدم يطلب مورد مترجم إلى الأسبانية المكسيكة. بالتوافق مع اصطلاحات تسمية الموارد الموضحة أعلاه، يقوم وقت التشغيل أولاً بالبحث في مخزن التجميع العمومي المؤقت عن التجميع الذي يطابق الثقافة المطلوبة "es-MX". و في حالة عدم العثور عليه، يقوم وقت التشغيل بعد ذلك بالبحث في دليل التجميع الذي يتم تنفيذه حالياً عن دليل "es-MX". إذا فشل في ذلك، يقوم وقت التشغيل بالبحث في مخزن التجميع العمومي المؤقت مرة أخرى عن تجميع أصل يعكس الثقافة الاحتياطية المناسبة — في هذه الحالة، "es" (الإسبانية). إذا لم يتم العثور على التجميع الأصل، يقوم وقت التشغيل بالبحث في كافة المستويات المحتملة للتجميعات الأصل عن الثقافة "es - MX" حتى يتم العثور على المورد المقابل. إذا لم يتم العثور على مورد، يستخدم وقت التشغيل مورد الثقافة الافتراضية.

الرجوع النهائي للتجميع التابع البديل

ابتداءً من .NET Framework الإصدار 2.0، يمكنك بشكل اختياري إزالة الموارد من التجميع الرئيسي ثم تحديد أن الموارد الاحتياطية النهائية يتم العثور عليها في تجميع تابع مقابل لثقافة معينة. للتحكم في عملية العودة للاحتياطي, يمكنك استخدام NeutralResourcesLanguageAttribute. تمت إضافة مُنشئ جديد إلى الفئة NeutralResourcesLanguageAttribute التي تأخذ معامل UltimateResourceFallbackLocation إضافي لتعيين الموقع الذي يجب أن يستخرج منه ResourceManager الموارد البديلة: التجميع الرئيسي أو تجميع تابع.

المثال التالي يوضح كيفية تطبيق السمة على مستوى الفئة:

[assembly: NeutralResourcesLanguageAttribute("de" , UltimateResourceFallbackLocation.Satellite)]

للموقع النهائي البديل، يقوم ببناء ResourceManager للبحث عن الموارد في الدليل الفرعي "de" في دليل التجميع الذي يتم تنفيذه حالياً.

بديل التحزيم المقترح

بسبب قيود الوقت أو الميزانية، قد لا يكون مجدياً لك أن تنشئ مجموعة من الموارد لكل ثقافة فرعية يدعمها التطبيق الخاص بك. في هذه الحالة، يمكنك إنشاء تجميع تابع واحد لثقافة أصل، يمكن استخدامها بواسطة كل الثقافات الفرعية ذات الصلة. على سبيل المثال، قد تقوم بتوفير تجميع تابع إنجليزي واحد (en) يمكن استعادته من قبل المستخدمين الذين يطلبون موارد إنجليزية خاصة بالمنطقة، و تجميع تابع ألماني واحد (de) للمستخدمين الذين يطلبون موارد ألمانية خاصة بالمنطقة. على سبيل المثال، طلبات الألمانية في ألمانيا (de-DE) و الألمانية في النمسا (de-AT) و الألمانية في سويسرا (de-CH) ستؤول إلى التجميع التابع الألماني (de). حدد بدقة الموارد الافتراضية المراد تحويلها برمجياً بواسطة التجميع الرئيسي. الموارد الافتراضية هي الاحتياطية النهائية والموارد و لذلك يجب أن تكون الموارد التي سيطلبها معظم المستخدمين للتطبيق الخاص بك. على الرغم من أن هذا الحل ينشر الموارد الأقل تحديداً للثقافة، يمكنه تقليل تكاليف تعريب التطبيق الخاص بك بشكل كبير.

راجع أيضًا:

المبادئ

الموارد في التطبيقات

ذاكرة التخزين المؤقتة للتجميع العمومي

إنشاء التجميعات التابعة