c# - सी#में स्थानीयकरण का उपयोग कैसे करें




localization cultureinfo (5)

इसके अलावा @ फ़्रेड्रिक मोर्क के तारों पर स्थानीयकरण जोड़ने के लिए तारों पर शानदार उत्तर निम्नलिखित है:

  • फ़ॉर्म की संपत्ति "Localizable" को true सेट करें
  • फ़ॉर्म की Language प्रॉपर्टी को अपनी इच्छित भाषा में बदलें (उन सभी के साथ एक अच्छी ड्रॉप-डाउन से)
  • उस रूप में नियंत्रणों का अनुवाद करें और आवश्यकता होने पर उन्हें स्थानांतरित करें (उन वाकई लंबे समय तक पूर्ण फ्रेंच वाक्यों को स्क्वैश करें!)

विंडोज़ फॉर्म को स्थानीयकरण पर यह एमएसडीएन आलेख इस पर कुछ और जानकारी देता है।

मुझे बस काम करने के लिए स्थानीयकरण नहीं मिल रहा है।

मेरे पास कक्षा पुस्तकालय है। अब मैं वहां resx फ़ाइलों को बनाना चाहता हूं, और थ्रेड संस्कृति के आधार पर कुछ मान वापस कराना चाहता हूं।

मैं उसे कैसे कर सकता हूँ?


एफ। मॉर्क द्वारा महान जवाब। लेकिन यदि आप अनुवाद को अपडेट करना चाहते हैं, या एप्लिकेशन जारी होने के बाद नई भाषाएं जोड़ना चाहते हैं, तो आप अटक गए हैं, क्योंकि आपको हमेशा संसाधन.dll उत्पन्न करने के लिए इसे पुन: संकलित करना होगा।

संसाधन डीएलएल मैन्युअल रूप से संकलित करने का एक समाधान यहां दिया गया है। यह resgen.exe और al.exe उपकरण (एसडीके के साथ स्थापित) का उपयोग करता है।

मान लें कि आपके पास Strings.fr.resx संसाधन फ़ाइल है, आप निम्न बैच के साथ संसाधन डीएल संकलित कर सकते हैं:

resgen.exe /compile Strings.fr.resx,WpfRibbonApplication1.Strings.fr.resources 
Al.exe /t:lib /embed:WpfRibbonApplication1.Strings.fr.resources /culture:"fr" /out:"WpfRibbonApplication1.resources.dll"
del WpfRibbonApplication1.Strings.fr.resources
pause

मूल नामस्थान को फ़ाइल नामों में रखना सुनिश्चित करें (यहां "WpfRibbonAplication1")


यह वास्तव में काफी सरल है। एक नई संसाधन फ़ाइल बनाएं, उदाहरण के लिए Strings.resxPublic Access Modifier सेट करें। Apprioriate फ़ाइल टेम्पलेट का उपयोग करें, इसलिए विजुअल स्टूडियो स्वचालित रूप से एक एक्सेसर क्लास उत्पन्न करेगा (नाम इस मामले में Strings होगा)। यह आपकी डिफ़ॉल्ट भाषा है।

अब, जब आप जोड़ना चाहते हैं, कहें, जर्मन स्थानीयकरण, एक स्थानीयकृत resx फ़ाइल जोड़ें। यह आमतौर पर Strings.de.resx होगा इस मामले में। यदि आप ऑस्ट्रिया के लिए अतिरिक्त स्थानीयकरण जोड़ना चाहते हैं, तो आप अतिरिक्त रूप से Strings.de-AT.resx

अब एक स्ट्रिंग बनाएं - आइए HelloWorld नाम के साथ एक स्ट्रिंग कहें। अपने स्ट्रिंग्स.एक्सएक्स में, इस स्ट्रिंग को "हैलो, वर्ल्ड!" मान के साथ जोड़ें। Strings.de.resx , "हेलो, वेल्ट!" जोड़ें। और Strings.de-AT.resx , "Servus, Welt!" जोड़ें। यह अब तक है।

अब आपके पास यह जेनरेट Strings क्लास है, और इसमें HelloWorld साथ एक संपत्ति है। इस संपत्ति को प्राप्त करने से "सर्वोस, वेल्ट!" लोड हो जाएगा जब आपका लोकेल डी-एटी है, "हेलो, वेल्ट! जब आपका लोकेल कोई अन्य लोकेल (डी-डीई और डी-सीएच समेत), और" हैलो, वर्ल्ड! "है जब आपका लोकेल कुछ और है। यदि कोई स्ट्रिंग है स्थानीय संस्करण में अनुपलब्ध, संसाधन प्रबंधक सबसे विशेष रूप से परिवर्तनीय संसाधन से श्रृंखला तक चलता रहेगा।

आप ResourceManager लोडर वर्ग का उपयोग अधिक नियंत्रण के लिए कर सकते हैं कि आप वास्तव में चीजें कैसे लोड कर रहे हैं। जेनरेट Strings क्लास भी इसका उपयोग करता है।


@Eric Bole-Feysot उत्तर के अलावा:

उपग्रह असेंबली के लिए धन्यवाद, स्थानीयकरण .dll / .exe फ़ाइलों के आधार पर बनाया जा सकता है। इस तरफ:

  • स्रोत कोड (वीएस परियोजना) भाषा परियोजना से अलग किया जा सकता है,
  • एक नई भाषा जोड़ने के लिए परियोजना को पुन: सम्मिलित करने की आवश्यकता नहीं है,
  • अनुवाद अंतिम उपयोगकर्ता द्वारा भी किया जा सकता है।

LSACreator नामक एक छोटा ज्ञात टूल है (गैर-वाणिज्यिक उपयोग या खरीद विकल्प के लिए मुफ्त) जो आपको .dll / .exe फ़ाइलों के आधार पर स्थानीयकरण बनाने की अनुमति देता है। असल में, आंतरिक रूप से (भाषा प्रोजेक्ट की निर्देशिका में) यह resx फ़ाइलों के स्थानीय संस्करणों को बनाता / प्रबंधित करता है और एक एसिड को संकलित करता है जैसे @Eric Bole-Feysot वर्णित है।


  • अपनी प्रोजेक्ट में एक संसाधन फ़ाइल जोड़ें (आप इसे "strings.resx" कह सकते हैं) निम्न कार्य करके:
    प्रोजेक्ट में गुण राइट-क्लिक करें, संदर्भ मेनू में जोड़ें -> नया आइटम ... का चयन करें, फिर विज़ुअल सी # आइटमों की सूची में "संसाधन फ़ाइल" चुनें और इसे strings.resx नाम दें।
  • Resx फ़ाइल में एक स्ट्रिंग resouce जोड़ें और इसे एक अच्छा नाम दें (उदाहरण: इसे "हैलो" नाम दें और इसे "हैलो" मान दें)
  • संसाधन फ़ाइल सहेजें ( नोट: यह डिफ़ॉल्ट संसाधन फ़ाइल होगी, क्योंकि इसमें दो-अक्षर वाली भाषा कोड नहीं है)
  • अपने प्रोग्राम में संदर्भ जोड़ें: System.Threading और System.Globalization

इस कोड को चलाएं:

Console.WriteLine(Properties.strings.Hello);

इसे "हैलो" प्रिंट करना चाहिए।

अब, "strings.fr.resx" नामक एक नई संसाधन फ़ाइल जोड़ें ("fr" भाग को नोट करें; इसमें फ्रेंच में संसाधन होंगे)। Strings.resx में समान नाम के साथ एक स्ट्रिंग संसाधन जोड़ें, लेकिन फ्रेंच में मूल्य (नाम = "हैलो", मान = "सलात") के साथ। अब, यदि आप निम्न कोड चलाते हैं, तो इसे सलात प्रिंट करना चाहिए:

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Properties.strings.Hello);

क्या होता है कि सिस्टम "एफआर-एफआर" के लिए संसाधन की तलाश करेगा। यह एक नहीं मिलेगा (चूंकि हमने आपकी फ़ाइल में "fr" निर्दिष्ट किया है ")। फिर यह" fr "की जांच करने के लिए वापस आ जाएगा, जो इसे पाता है (और उपयोग करता है)।

निम्नलिखित कोड, "हैलो" प्रिंट करेगा:

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(Properties.strings.Hello);

ऐसा इसलिए है क्योंकि इसे कोई "एन-यूएस" संसाधन नहीं मिला है, और कोई भी "एन" संसाधन नहीं है, इसलिए यह डिफ़ॉल्ट पर वापस आ जाएगा, जिसे हमने शुरुआत से जोड़ा है।

यदि आवश्यक हो तो आप अधिक विशिष्ट संसाधनों के साथ फाइलें बना सकते हैं (उदाहरण के लिए क्रमशः फ्रांस और कनाडा में फ्रेंच के लिए strings.fr-FR.resx और strings.fr-CA.resx)। ऐसी प्रत्येक फ़ाइल में आपको उन स्ट्रिंग्स के संसाधनों को जोड़ने की आवश्यकता होगी जो संसाधन से भिन्न होती हैं जो इसे वापस आती हैं। तो यदि फ्रांस और कनाडा में एक पाठ समान है, तो आप इसे स्ट्रिंग्स.एफ.एआरएक्सएक्स में डाल सकते हैं, जबकि कनाडाई फ्रेंच में अलग-अलग तार स्ट्रिंग्स.एफआर-सीएरेक्स में जा सकते हैं।







cultureinfo