2012-01-11 20 views
14

का उपयोग कर मैं एक सी # कक्षा में संसाधन प्रबंधक का उपयोग करने की कोशिश कर रहा हूं, लेकिन संसाधन प्रबंधक श्रेणी का नया उदाहरण बनाते समय बेसनाम के लिए विकल्प को बदलने के बारे में नहीं पता। अगर मैं एक कोड स्निपेट • Resources.resx • Resources.es-ES.resxसंसाधन प्रबंधक

:

मैं एक अलग परियोजना है कि संसाधन फ़ाइलों जो अपने प्रोजेक्ट द्वारा संदर्भित है निम्नलिखित के रूप में नामित ऊपर शामिल है निम्नानुसार, जब मैं संसाधनों के अंग्रेजी या स्पेनिश संस्करण का उपयोग करना चाहता हूं, तो मुझे बेसनाम के लिए क्या स्थान देना चाहिए?

ResourceManager RM = new ResourceManager(basename,Assembly.GetExecutingAssembly()); 

मैं दृष्टिकोण टॉम ने सुझाव दिया कोशिश की, लेकिन कुख्यात त्रुटि "किसी भी संसाधन निर्दिष्ट संस्कृति या तटस्थ संस्कृति के लिए उपयुक्त नहीं खोजा जा सका" हो रही है।

मेरे पास 2 परियोजनाएं हैं जहां परियोजना YeagerTech एक वेब अनुप्रयोग प्रोजेक्ट है और परियोजना YeagerTechResources एक परियोजना है (उसी समाधान में) जिसमें सभी संसाधन शामिल हैं। परियोजना YeagerTech में YeagerTechResources में इसका संदर्भ है।

मैं अपने संसाधन प्रबंधक बनाते समय निम्न सिंटैक्स है:

ResourceManager RM = new ResourceManager("YeagerTechResources.Resources", Assembly.GetExecutingAssembly()); 

जाहिर है, यह गलत है।

YeagerTechResources प्रोजेक्ट में संसाधन फ़ाइलों को उनके BuildAction को एम्बेडेड संसाधन पर सेट किया गया है।

मेरी संसाधन फ़ाइलों का नाम हैं: Resources.resx और Resources.es-ES.resx।

अगर किसी बस मुझे सटीक सिंटैक्स अपने प्रोजेक्ट और संसाधन फ़ाइल नाम के आधार पर उपयोग करने के लिए जब संसाधन प्रबंधक instantiating बता सकते हैं, मैं बहुत यह जानना चाहेंगे ...

मैं सब कुछ मैं के बारे में सोच सकते हैं किया है

0: इस को हल करने और नहीं कर सकते करने के लिए ....

यह

ResourceManager RM = new ResourceManager("YeagerTechResources.Resources", Assembly.GetExecutingAssembly()); 

इसे यहाँ हल करने के लिए अपने अंतिम प्रयास ... मैं निम्नलिखित कोड को क्रियान्वित करने के बाद निम्न त्रुटि हो रही है है

sb.Append(RM.GetString("RegisterThanks")); 

निर्दिष्ट संस्कृति या तटस्थ संस्कृति के लिए उपयुक्त कोई भी संसाधन नहीं मिला। सुनिश्चित करें कि "YeagerTechResources.Resources.resources" को संकलित समय पर असेंबली "YeagerTech" में सही ढंग से एम्बेड या लिंक किया गया था, या आवश्यक सभी उपग्रह असेंबली लोड करने योग्य और पूरी तरह से हस्ताक्षरित हैं।

मेरे पास एक समाधान और दो परियोजनाएं हैं। एक वेब प्रोजेक्ट है और दूसरा संसाधन प्रोजेक्ट है। संसाधन परियोजना वेब प्रोजेक्ट में संदर्भ के रूप में निहित है।

मैं पूरी तरह से कोई समस्या के साथ HTML मार्कअप में संसाधनों का उपयोग करने में सक्षम हूं, लेकिन नियंत्रक में सी # कोड में आने पर, मैं उपरोक्त त्रुटि प्राप्त करता रहता हूं।

मेरी परियोजनाओं के आधार पर मुझे आवश्यक सटीक वाक्यविन्यास के लिए कोई भी मदद की सराहना की जाएगी।

+6

एफवाईआई, विजुअल स्टूडियो में यदि आप अपनी परियोजना में "नया आइटम जोड़ें" चुनते हैं, तो "संसाधन फ़ाइल" का चयन करें और इसे "Resources.resx" नाम दें, फिर विजुअल स्टूडियो संसाधन प्रबंधक श्रेणी के लिए एक रैपर क्लास को स्वतः उत्पन्न करेगा "Resources.Designer.cs" नाम की फ़ाइल।आप यह कोड देख सकते हैं कि यह कैसे काम करता है। दुर्भाग्यवश, रैपर वर्ग परियोजना के लिए आंतरिक के रूप में उत्पन्न होता है, इसलिए आप एक अलग प्रोजेक्ट से उस रैपर वर्ग को नहीं देख पाएंगे, जब तक कि आप 'InternalsVisibleTo' विशेषता' का उपयोग न करें। –

+0

@ sagesky36 क्या आपके पास एक भाषा-तटस्थ resx फ़ाइल (भाषा कोड के बिना एक) और एक भाषा-विशिष्ट resx (उदाहरण के लिए, Resources.en-US.resx) है? आपको कम से कम भाषा-तटस्थ की आवश्यकता है, और परियोजना सेटिंग्स में निर्दिष्ट करें कि कौन सी भाषा आपके आवेदन के लिए तटस्थ भाषा है। –

+0

संबंधित: ['संसाधन प्रबंधक' का उदाहरण बनाये बिना स्थानीय संसाधन स्ट्रिंग एक्सेस करें?] (Http://stackoverflow.com/q/5246631/1497596) – DavidRR

उत्तर

4

MSDN प्रलेखीकरण here के अनुसार, basename तर्क निर्दिष्ट करता है "इसके विस्तार के बिना संसाधन फ़ाइल की जड़ नाम, लेकिन किसी भी पूरी तरह से योग्य नाम स्थान नाम भी शामिल है। उदाहरण के लिए, संसाधन फ़ाइल के लिए रूट नाम नाम" MyApplication.MyResource .en-US.resources "है" MyAplication.MyResource "।"

संसाधन प्रबंधक स्वचालित UI संस्कृति के मानों को पुनर्प्राप्त करने का प्रयास करेगा। यदि आप किसी विशिष्ट भाषा का उपयोग करना चाहते हैं, तो आपको वर्तमान यूआई संस्कृति को उस भाषा में सेट करने की आवश्यकता होगी, जिसका आप उपयोग करना चाहते हैं।

+0

मामूली सुधार - वर्तमान यूआई संस्कृति बदलने के बाद संसाधन प्रबंधक को जरूरी नहीं है। –

13

जेनरेट की गई फ़ाइलों को देखने के लिए आपको किस स्ट्रिंग की आवश्यकता है, यह देखने के लिए त्वरित और गंदा तरीका है।

आपके। स्रोत संसाधन परियोजनाओं ओबीजे/डीबग निर्देशिका में उत्पन्न होते हैं। (यदि समाधान एक्सप्लोरर में .resx फ़ाइल पर राइट क्लिक नहीं है और .resources फ़ाइलों को उत्पन्न करने के लिए 'कस्टम कस्टम टूल' दबाएं)

इस निर्देशिका पर नेविगेट करें और फ़ाइल नामों पर नज़र डालें। आपको XYZ.resources में समाप्त होने वाली फ़ाइल देखना चाहिए। उस फ़ाइल नाम की प्रतिलिपि बनाएँ और पीछे हटने वाले स्रोतों को हटा दें और वह फ़ाइल है जिसे आप लोड करना चाहिए।

मेरी obj/बिन निर्देशिका में उदाहरण के लिए मैं फ़ाइल है:

MyLocalisation.Properties.Resources.resources

संसाधन फ़ाइलों में एक ही कक्षा पुस्तकालय/आवेदन में हैं, तो मैं प्रयोग करेंगे निम्नलिखित सी #

ResourceManager RM = new ResourceManager("MyLocalisation.Properties.Resources", Assembly.GetExecutingAssembly()); 

हालांकि, के रूप में यह लग रहा है तो आपको एक अलग वर्ग पुस्तकालय/आवेदन से संसाधनों फ़ाइल उपयोग कर रहे हैं तो आप शायद

चाहते
Assembly localisationAssembly = Assembly.Load("MyLocalisation"); 
ResourceManager RM = new ResourceManager("MyLocalisation.Properties.Resources", localisationAssembly); 
8

This SO answer इस मामले में मदद कर सकता है।
मुख्य परियोजना पहले से ही संदर्भित करती हैं संसाधन परियोजना है, तो आप सिर्फ स्पष्ट रूप से अपने उत्पन्न संसाधन वर्ग के साथ अपने कोड में काम करते हैं, और उस से अपने ResourceManager का उपयोग कर सकते हैं। इसलिए, की तर्ज पर कुछ:

ResourceManager resMan = YeagerTechResources.Resources.ResourceManager; 

// then, you could go on working with that 
ResourceSet resourceSet = resMan.GetResourceSet(CultureInfo.CurrentUICulture, true, true); 
// ... 
31

वहाँ स्ट्रिंग द्वारा पढ़ने संसाधन का आश्चर्यजनक रूप से आसान तरीका है:

ResourceNamespace.ResxFileName.ResourceManager.GetString("ResourceKey") 

यह जहां "डॉट नोटेशन" नहीं किया जा सकता कुंजी द्वारा संसाधनों को पढ़ने के लिए स्वच्छ और सुरुचिपूर्ण समाधान है (उदाहरण के लिए जब डेटाबेस में संसाधन कुंजी जारी है)।

+2

यहां तक ​​कि सरल: अपनी कोड फ़ाइल में रूट रूटस्पेस.प्रॉपर्टीज का उपयोग करके जोड़ें (जहां रूट प्रोजेक्ट्स को आपके प्रोजेक्ट गुणों में परिभाषित किया गया है) और फिर बस करें: संसाधन। <संसाधन नाम>। मुझे यकीन नहीं है कि आप इसके साथ स्थानीयकरण कर सकते हैं, हालांकि। – user169771

+0

संसाधन नामस्थान क्या है? क्या आप पूरा कोड प्रदान कर सकते हैं? – Muflix

+1

@Muflix यह संसाधन फ़ाइल का नामस्थान है। – Landeeyo

0

मैं एक समान मुद्दे से गुजर गया। यदि आप अपने "YeagerTechResources.Resources" पर विचार करते हैं, तो इसका मतलब है कि आपके संसाधन.रेक्स आपके प्रोजेक्ट के रूट फ़ोल्डर पर हैं।

पूर्ण पथ को शामिल करने के लिए सावधान रहें उदाहरण: "प्रोजेक्ट \ सबफोल्डर (फाइल] \ file [.resx]" संसाधन प्रबंधक निर्माता को।

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