سؤال

هل من الممكن وضع ملفات الموارد (.resx) داخل المجلدات الفرعية داخل App_GlobalResources؟

فمثلا:

/app_globalresources/someresources/myfile.resx

/app_globalresources/someresources/myfile.fr-fr.resx

/app_globalresources/othereresources/otherfile.resx

/app_globalresources/othereresources/otherfile.fr-fr.resx

أم هل يتم وضع جميع ملفات .resx مباشرة داخل App_globalResources؟

إذا كان من الممكن استخدام المجلدات الفرعية ، فكيف يمكنك الوصول إلى الموارد برمجيًا داخل المجلدات الفرعية؟

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

المحلول

من الناحية الفنية ، نعم هذا ممكن ولكن هناك بعض المزالق. أولاً ، اسمحوا لي أن أريكم مثالاً. افترض بلدي App_GlobalResources المجلد يبدو هكذا:

/App_GlobalResources
    /Test
        TestSubresource.resx
    TestResource.resx

يحتوي كل ملف مورد على إدخال واحد يسمى "TestString". أضفت كل ملف مورد باستخدام قائمة Visual Studio حتى قام بإنشاء فئة لي. بشكل افتراضي ، تمت إضافة جميع الفئات إلى App_GlobalResources سيكون لدى المجلد نفس مساحة الاسم Resource. لذا ، إذا أردت استخدام مولد الفصل وأريده Test في مساحة الاسم ، أحتاج إلى الذهاب إلى ملف TestSubResource.designer.cs وتغيير مساحة الاسم يدويًا. بمجرد أن أفعل ذلك ، يمكنني القيام بما يلي:

var rootResource = Resources.TestResource.TestString;
var subResource = Resources.Test.TestSubResource.TestString;

يمكنني أيضًا الرجوع إليهم باستخدام GetGlobalResourceObject:

var rootResource = GetGlobalResourceObject( "TestResource", "TestString" );
var subResource1 = GetGlobalResourceObject( "TestSubresource", "TestString" );

لاحظ أنني ما زلت أستخدم "TestSubresource" كوسيلة للرجوع إلى الموارد في هذا الملف على الرغم من أنها في مقلع فرعي. الآن ، أحد المصيد ، هو أن جميع الملفات يجب أن تكون فريدة من نوعها في جميع المجلدات في App_GlobalResources أو سوف يرمي مشروعك خطأ في وقت التشغيل. إذا قمت بإضافة مورد يسمى "TestResource.resx" إلى /اختبار ، فسيتم رمي خطأ وقت التشغيل التالي:

لا يمكن استخدام ملف المورد '/app_globalresources/testresource.resx ، لأنه يتعارض مع ملف آخر بنفس الاسم.).

هذا صحيح حتى لو قمت بتغيير مساحة الاسم على المورد الجديد.

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

نصائح أخرى

انه ممكن. على الأقل ، تمكنت من القيام بذلك.

ضمن موقع ويب أضفت مجلد App_GlobalResources. داخلها قمت بإنشاء مجلد آخر "MyFolder" ووضعت ملف myResource.resx في الداخل. يحتوي ملف Resx على زوج واحد mykey1 - myValue1.

باستخدام GetResource طريقة الفئة التالية التي استخرجتها بنجاح "myValue1" for name = "myKey1"

static class Class1 {

    static Assembly FindGlobalResAssembly() {
        foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
            if(asm.FullName.StartsWith("App_GlobalResources."))
                return asm;
        }
        return null;
    }

    public static object GetResource(string name) {
        Assembly asm = FindGlobalResAssembly();
        if(asm == null)
            return null;
        return new ResourceManager("Resources.MyResource", asm).GetObject(name);
    }

}

هذا النهج يعمل في ثقة متوسطة أيضا.

يبدو أن المجلدات لا تحدث فرقًا عند الوصول إلى الموارد من الكود.

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