سؤال

لدي مكتبة صفية - أطلق عليها اسم Framework.في ملف Assemblyinfo.cs، لدي:

[assembly: NeutralResourcesLanguage("en-US")]

ضمن دليل esources\، لدي FrameworkResources.resx و FrameworkResources.fr-FR.resx

في الفصل المساعد، أستخدم هذا كمدير الموارد الخاص بي:

private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());

في الكود، إذا قمت بشيء مثل هذا:

String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);

يمكنني تصحيح الأخطاء والتمرير فوق CurrentCulture وتم تعيينها (وUICulture) على fr-FR، ومع ذلك فإن هذا دائمًا يعيد رسالتي الإنجليزية الافتراضية - وليس الرسالة الفرنسية من ملف الموارد fr-FR.

هل يجب أن يقوم ResourceManager تلقائيًا بتوصيل ذلك، أم يجب أن أكتب تعليمات برمجية للاستعلام عن الثقافة الحالية، ثم أفتح الملف الصحيح؟هل أنا مخطئ في افتراض أن مدير الموارد سيعرف كيفية الحصول على سلسلة fr-FR، لأن هذه هي الثقافة الحالية؟

لست متأكدا لماذا هذا لا يعمل.

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

ResourceManager manager =
    new ResourceManager("Framework.Resources.FrameworkResources",
        Assembly.GetExecutingAssembly());

Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
Debug.WriteLine("el    : " + manager.GetString(resourceName, new CultureInfo("el")));
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
Debug.WriteLine("hi    : " + manager.GetString(resourceName, new CultureInfo("hi")));
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));

وينتج عن ذلك:

de-DE : Argument '%ArgumentName%' cannot be null or empty.
el    : Argument '%ArgumentName%' cannot be null or empty.
es-MX : Argument '%ArgumentName%' cannot be null or empty.
fr-FR : Argument '%ArgumentName%' cannot be null or empty.
hi    : Argument '%ArgumentName%' cannot be null or empty.
zh-CN : Argument '%ArgumentName%' cannot be null or empty.

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

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

المحلول

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

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