2011-07-10 15 views
6

संभव डुप्लिकेट:
C# localization , really confusing meसी # स्थानीयकरण

कोई बड़ा C# अनुप्रयोगों के लिए उनके स्थानीयकरण चरणों का हिस्सा कर सकते हैं?

मुझे पूरा यकीन है कि बुनियादी संसाधन-आधारित रणनीति छोटे से मध्यम परियोजनाओं के बारे में बात करते समय काम कर सकती है।

हालांकि, अगर हम बड़े उत्पादों के बारे में बात करते हैं, तो इस दृष्टिकोण को कस्टम बिल्ड चरणों और विशेष रूप से भाषाविदों द्वारा उपयोग किए जाने वाले कुछ तृतीय पक्ष अनुप्रयोगों के साथ जोड़ा जाना चाहिए।

तो, आपको सलाह दे सकता है कृपया/(पर्याप्त कुछ वैश्विक स्थानीयकरण रणनीति है कि अपने अनुप्रयोगों में प्रयोग किया जाता है का हिस्सा बड़ा, स्पष्ट रूप से :)

धन्यवाद।

+1

@Kon यह एक डुप्लिकेट नहीं है, बी पारिस्थितिकी मैंने प्रत्येक प्रश्न देखा है जो 'सी # स्थानीयकरण' से संबंधित है। और लोग स्थानीय निर्माण को और अधिक आरामदायक बनाने के लिए उपयोग किए जाने वाले कस्टम बिल्ड चरणों और साफ-सुथरे कार्यों का उपयोग करने के बारे में बात करते हैं। हालांकि, वे केवल उनका उल्लेख करते हैं और मैं एक पूरा जवाब देखना चाहता हूं। –

+0

निश्चित रूप से, आपको वास्तव में अंतर्राष्ट्रीयकरण की आवश्यकता है (आपको पहले अपना आवेदन तैयार करने की आवश्यकता है)। जैसा कि आप कल्पना कर सकते हैं कि इसका उत्तर दिया गया है [http://stackoverflow.com/questions/5253614/effective-strategies-for-localization-in-net/5524981#55249810) ... –

+0

क्षमा करें, मुझे कुछ गलत समझना होगा ... कृपया मेरी पिछली टिप्पणी को नजरअंदाज करें। –

उत्तर

2

मूल संसाधन-आधारित रणनीति बड़े उद्यम अनुप्रयोगों में भी काम करती है। यह अंतर्निहित और आसानी से समझने योग्य समाधान है, इसलिए प्रत्येक प्रोग्रामर बिना किसी समस्या के इसका उपयोग कर सकता है।

एकमात्र समस्या यह है कि आपको किसी भी तरह से अपनी संसाधन फ़ाइलों को अनुवाद मेमोरी फ़ाइलों (यानी टीएमएक्स) और पीछे में बदलने की आवश्यकता है - ताकि अनुवादक अपने मानक उपकरण का उपयोग कर सकें।

तो आपको वास्तव में एक स्थानीयकरण प्रक्रिया की आवश्यकता है। क्या यह बड़े अनुप्रयोगों के लिए अलग है? खैर, अगर आप सही प्रक्रिया को सेट अप करते हैं तो यह स्केल होगा। अब प्रक्रिया पर। देखने की मेरी बात से यह इस तरह दिखना चाहिए:

  1. में उचित फ़ोल्डर संरचना की प्रतिलिपि संसाधन फ़ाइलों (स्थानीयकरण इंजीनियर्स आवेदन कोड बेस के साथ सीधे काम नहीं होना चाहिए)। उपयुक्त फ़ोल्डर संरचना किसी भी तरह से होनी चाहिए:
    [परियोजना का नाम]


    [तटस्थ] [जर्मन] [जापानी] [फ्रेंच]


    (प्रत्येक फ़ोल्डर में दी गई भाषा में अनुवादनीय संसाधन होते हैं, तटस्थ आमतौर पर अंग्रेजी होता है)
    बेशक आपको किसी भी तरह फ़ोल्डर कोड में अपना कोड बेस बदलने की आवश्यकता होगी, लेकिन यह स्वचालित हो सकता है।

  2. अपने अनुवादनीय संसाधनों को संसाधित करें और ट्रांसकिट बनाएं - ज़िप अभिलेखागार जिसमें फाइलों को अनुवादित करने की आवश्यकता है (इस मामले में यह उन सभी की तरह लगता है)। फ़ाइलों को शायद रूपांतरित किया जाना चाहिए, इसलिए आप resx फ़ाइलों को भेजने को समाप्त नहीं करेंगे। परिवर्तन अनुप्रयोग को resx फ़ाइलों की सामग्री पढ़नी चाहिए और अनुवादकों के साथ सहमत प्रारूप के कुछ फ़ाइल में अनुवादनीय स्ट्रिंग डालना चाहिए (यह केवल एक्सेल हो सकता है लेकिन मैं इस समाधान की अनुशंसा नहीं करूंगा)। अब, मैं आपको ऐसे औजारों का नाम नहीं दे सकता, हालांकि मुझे पता है कि कुछ वाणिज्यिक अनुप्रयोग मौजूद हैं, क्योंकि मैंने केवल कस्टम लोगों के साथ काम किया है।

  3. अनुवादकों को ट्रांसकिट भेजें (सबसे अधिक संभावना अनुवाद विक्रेता)।

  4. अनुवादित फ़ाइलों (ट्रांसकिट) को वापस प्राप्त करने पर, आपको इसे सत्यापित करने की आवश्यकता है (यह चरण महत्वपूर्ण है)। आपको यह सुनिश्चित करने की ज़रूरत है कि ट्रांसकिट पूरा हो गया है (यानी।कोई अनुवाद करने योग्य तार गायब नहीं हैं) और तकनीकी रूप से सही (यानी फ़ाइल एन्कोडिंग सही है, आमतौर पर यूटीएफ -8 या यूटीएफ -16)। यह भी देखने के लिए फ़ाइल में एक नज़र डालना कम से कम अच्छा है कि 1/2, 3/4 या कुछ जैसी कोई अजीब पात्र नहीं हैं - इसका आमतौर पर टूटा एन्कोडिंग होता है।

  5. अपना ट्रांसकिट आयात करें। यह 2 का रिवर्स चरण है - आपको अनुवादित तारों को उचित फ़ाइलों पर वापस रखना होगा।

  6. अनुवादित फ़ाइलों को मूल कोड बेस पर वापस कॉपी करें और "स्थानीयकरण" निर्माण चलाएं।

  7. स्थानीयकरण समस्याओं के लिए अपने आवेदन का परीक्षण करें (यानी ओवरलैपिंग नियंत्रण, क्लिपिंग स्ट्रिंग्स, गलत एन्कोडिंग इत्यादि - इसका आमतौर पर मतलब है कि i18n सही नहीं किया गया है)।
  8. स्थानीयकरण/अंतर्राष्ट्रीयकरण (स्थानीयकरण) दोषों को ठीक करें।
  9. यूआई/स्ट्रिंग फ्रीज अवधि तक 1 तक आगे बढ़ें। यह मानता है कि अनुवादक किसी प्रकार की अनुवाद मेमोरी का उपयोग करेंगे और पहले अनुवादित तारों का पुन: अनुवाद करने के लिए आपको चार्ज नहीं करेंगे (या कम शुल्क लेंगे)।
  10. सभी संभव चरणों को स्वचालित करें और अपना काम पूरा करें।

इसके अलावा आप शब्दों की अपनी सामान्य शब्दावली स्थापित नहीं कर पाएंगे और अनुवादित सामग्री पर भाषाई समीक्षा नहीं कर पाएंगे।

2

मुझे लगता है कि आप बड़ी परियोजनाओं के लिए इसे अधिक उपयुक्त बनाने के लिए .NET द्वारा प्रदान किए गए संसाधन ढांचे पर भारी भरोसा कर सकते हैं, अर्थात् आवेदन के स्वतंत्र रूप से संसाधनों का निर्माण और रखरखाव करना और उत्पन्न गुणों को समाप्त करना नाम से प्रत्येक संसाधन। यदि बड़े परियोजना स्थानीयकरण के लिए अन्य लक्ष्य उपयुक्त हैं जो नीचे संबोधित नहीं हैं, तो कृपया उनका वर्णन करें ताकि मैं उन्हें भी विचार कर सकूं।

  1. अपने संसाधनों का प्रतिनिधित्व करने के लिए एक स्टैंडअलोन परियोजना बनाएं जो एक अलग डीएलएल के रूप में लोड किया जा सकता है।
  2. प्रोजेक्ट गुणों के संसाधन टैब पर लिंक का चयन करके अपनी परियोजना में "संसाधन" फ़ाइल जोड़ें: "इस प्रोजेक्ट में डिफ़ॉल्ट संसाधन फ़ाइल नहीं है। एक बनाने के लिए यहां क्लिक करें।"
  3. किसी अन्य भाषा का प्रतिनिधित्व करने के लिए एक ही रूट नाम के साथ एक और संसाधन जोड़ें, उदाहरण के लिए जर्मन के लिए "Resource.de.resx"। (विज़ुअल स्टूडियो स्पष्ट रूप से फ़ाइल नाम का प्रतिनिधित्व करने वाली भाषा निर्धारित करने के लिए फ़ाइल नाम का उपयोग करता है)। इसे डिफ़ॉल्ट संसाधन फ़ाइल के रूप में उसी निर्देशिका/फ़ोल्डर में ले जाएं। (प्रत्येक भाषा के लिए दोहराएं।)
  4. Resources.resx फ़ाइल के गुणों में, कस्टम टूल प्रॉपर्टी से "ResXFileCodeGenerator" को हटाएं ताकि एप्लिकेशन के "गुण" नामस्थान में डिफ़ॉल्ट कोड जनरेशन को रोका जा सके। (हर भाषा के लिए दोहराएँ।)
  5. स्पष्ट/मैन्युअल रूप से अपने स्वयं के संसाधन प्रबंधक इस तरह एक लाइन के साथ नव निर्मित संसाधनों को लोड करता है की घोषणा:

    स्थिर System.Resources.ResourceManager resourceMan = नई सिस्टम.संसाधन। संसाधन प्रबंधक ( "LocalizeDemo.Properties.Resources", टाइपऑफ (संसाधन) .Assembly);

  6. उत्पन्न किया जा सकता है कि कि सभी संसाधनों आप उल्लेख कर सकते हैं की एक सूची है एक फ़ाइल को लागू करें (चित्रा 1 देखें)

  7. पुनः प्राप्त करने के एक समारोह और प्रारूप तार (आंकड़ा 2 देखें) को लागू करें।

  8. अब आपके पास पर्याप्त है कि आप किसी भी अनुप्रयोग से अनुवादित तारों का संदर्भ ले सकते हैं (चित्र 3 देखें)।

  9. सिस्टम का उपयोग करें। स्रोत। ResXResourceWriter (System.Windows.Forms.dll से) या System.Resources.ResourceWriter (System.dll) Resx फ़ाइलों को आपके प्राथमिक स्रोत होने के बजाय संसाधन उत्पन्न करने के लिए। हमारी प्रोजेक्ट में, हमारे पास एक SQL डेटाबेस है जो प्रत्येक भाषा में हमारे सभी स्ट्रिंग को परिभाषित करता है और हमारी बिल्ड प्रक्रिया का हिस्सा संसाधन प्रोजेक्ट बनाने से पहले सभी रेज़िक्स फ़ाइलों को उत्पन्न करता है।

  10. अब जब आप किसी भी प्रारूप से अपनी रेक्स फाइलें जेनरेट कर सकते हैं, तो आप किसी भी प्रारूप का उपयोग कर सकते हैं (हमारे मामले में एक SQL डेटाबेस, जिसे हम एक्सेल स्प्रेडशीट से निर्यात और आयात करते हैं) अनुवादकों को भेजने के लिए फाइलें प्रदान करने के लिए ।

  11. यह भी ध्यान दें कि अनुवादित संसाधन सैटेलाइट डीएलएल के रूप में निर्माण कर रहे हैं। आप सही कमांड लाइन टूल्स के साथ स्वतंत्र रूप से प्रत्येक भाषा का निर्माण कर सकते हैं। यदि वह आपके प्रश्न का हिस्सा है (यह कैसे करें) मुझे बताएं। लेकिन इस पल के लिए, मुझे लगता है कि आप इसके बारे में जानते हैं क्योंकि आपने पहले से ही कस्टम बिल्ड चरणों का उल्लेख किया है।

चित्रा 1 - enum की पहचान सभी उपलब्ध संसाधनों:

namespace MyResources 
{ 
    public enum StrId 
    { 
     Street 
     .... 
    } 
} 

चित्र 2 - कोड लोड और स्वरूपित संसाधन तार वापस जाने के लिए:

namespace MyResources 
{ 
    public class Resources 
    { 
     static System.Resources.ResourceManager resourceMan = 
     new System.Resources.ResourceManager("MyResources.Properties.Resources", 
     typeof(Resources).Assembly); 

     public static string GetString(StrId name, 
     System.Globalization.CultureInfo culture = null, params string[] substitutions) 
     { 
     if (culture == null) culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 
     string format = resourceMan.GetString(name.ToString(), culture); 
     if (format != null) 
     { 
      return string.Format(format, substitutions); 
     } 
     return name.ToString(); 
     } 
    } 
} 

चित्रा 3 - तक पहुँचने संसाधन:

using MyResources; 

namespace LocalizationDemo 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = 
      new System.Globalization.CultureInfo("de-DE"); 
     Console.WriteLine(Resources.GetString(StrId.Street)); 
     } 
    } 
} 
+0

ध्यान दें कि हमारी परियोजना किसी भी विंडोज फॉर्म को स्थानीयकृत नहीं करती है क्योंकि हम एक तृतीय पक्ष UI API का उपयोग करते हैं जो .NET के स्थानीयकरण के साथ एकीकृत नहीं है। यदि आप संसाधन फ़ाइल से नियंत्रण में तारों को मैन्युअल रूप से लोड करने के बजाय स्वचालित रूप से अपने विंडोज़ फॉर्म को स्थानीयकृत करना चाहते हैं, तो आपको यहां कुछ अतिरिक्त अन्वेषण करने की आवश्यकता होगी जो मैंने नहीं किया है। – BlueMonkMN

+0

मैंने एक परीक्षण किया और यह सभी Form.xx.resx फ़ाइलों से मुख्य संसाधनों .xx.resx फ़ाइलों में सभी अनुवादित संसाधनों को मर्ज करना संभव प्रतीत होता है, लेकिन यदि आपका फॉर्म संसाधन में नहीं है तो इसमें कुछ जेनरेट कोड को ओवरराइड करना शामिल है DLL। – BlueMonkMN

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