7

क्या App_GlobalResources के अंदर उपफोल्डर्स के भीतर संसाधन फ़ाइलों (.resx) को रखना संभव है?App_GlobalResources (ASP.NET) में सबफ़ोल्डर

उदाहरण के लिए:

/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 अंदर सीधे रखा जाता है?

यदि सबफ़ोल्डर का उपयोग करना संभव है, तो आप सबफ़ोल्डर के भीतर प्रोग्रामेटिक रूप से संसाधनों का उपयोग कैसे करते हैं?

उत्तर

12

तकनीकी रूप से, हाँ यह संभव है लेकिन कुछ नुकसान हैं। सबसे पहले, मुझे आपको एक उदाहरण दिखाएं। मान लीजिए मेरी App_GlobalResources फ़ोल्डर तो दिखाई देता है:

/App_GlobalResources 
    /Test 
     TestSubresource.resx 
    TestResource.resx 

प्रत्येक संसाधन फ़ाइल को एक प्रविष्टि "TestString" कहलाता है। मैंने विजुअल स्टूडियो मेनू का उपयोग करके प्रत्येक संसाधन फ़ाइल को जोड़ा, इसलिए उसने मेरे लिए एक कक्षा बनाई। डिफ़ॉल्ट रूप से, 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" नामक एक संसाधन जोड़ने, यह निम्न रनटाइम त्रुटि फेंक देगा:

The resource file '/App_GlobalResources/TestResource.resx' cannot be used, as it conflicts with another file with the same name.).

यह सच है, भले ही मैं नए संसाधन पर नाम स्थान बदल जाते हैं।

तो, निष्कर्ष में, हाँ, यह संभव है, लेकिन App_GlobalResources फ़ोल्डर संरचना के विभिन्न हिस्सों में दो समान नामित संसाधन फ़ाइलों की वजह से रनटाइम त्रुटि प्राप्त करने की बाधाओं को बढ़ाएं, जो फ़ाइल सिस्टम द्वारा अनुमत है लेकिन नहीं। नेट।

1

यह संभव है। कम से कम, मैं इसे करने में कामयाब रहा।

किसी वेब साइट के भीतर मैंने App_GlobalResources फ़ोल्डर जोड़ा। इसके अंदर मैंने एक और फ़ोल्डर "माईफोल्डर" बनाया और MyResource.resx फ़ाइल को अंदर रखा। Resx फ़ाइल में एक जोड़ी MyKey1 - MyValue1 शामिल है।

निम्नलिखित वर्ग मैं सफलतापूर्वक "MyValue1" नाम = "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); 
    } 

} 

यह दृष्टिकोण मध्यम विश्वास भी में काम करता है के लिए निकाले की GetResource पद्धति का उपयोग करना।

ऐसा लगता है कि कोड से संसाधनों का उपयोग करते समय फ़ोल्डर में कोई फर्क नहीं पड़ता।

संबंधित मुद्दे