2011-02-15 8 views
13

मैं अपने ऐप को जापानी और साथ ही डिफ़ॉल्ट अंग्रेजी में स्थानांतरित करने के लिए एक मृत-सरल तरीका ढूंढ रहा हूं। एकमात्र आवश्यकता यह है कि हम इसे एक निर्दिष्ट भाषा में लॉन्च करने में सक्षम हैं। हम LocBaml सामान का उपयोग कर रहे थे जो घबराहट, जटिल, त्रुटि-प्रवण है, और हमारी निर्माण प्रक्रिया को बहुत मुश्किल बनाता है।क्या WPF को स्थानीयकरण के लिए मानक resx + स्थिर बाध्यकारी का उपयोग करने का कोई कारण नहीं है?

मैं सब कुछ संसाधन फ़ाइलों (Strings.resx, Strings.ja.resx) करने के लिए वापस जाने और सिर्फ स्थिर बंधन कर रही है, इस तरह पर विचार कर रहा हूँ: क्या भाषा जानने

लांच समय में
<TextBlock Text="{x:Static resx:MyWindow.MessageText}" /> 

तब वे चाहते हैं और स्विचिंग जो संसाधन यह से तार खींचती है:

public static void Main(string[] args) 
{ 
    if (args[0] == "-lang") 
    { 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(args[i + 1]); 
    } 

    App app = new App(); 
    app.InitializeComponent(); 
    app.Run(); 
} 

यह आसान है और यह केवल सच दोष यह लगता है कि हम क्रम है, जो कुछ हम कभी भी करना चाहते हैं जाएगा नहीं है पर स्विच नहीं कर सकते है। मैं इस तरह के कुछ स्थानीयकरण एक्सटेंशन देखा है:

http://wpflocalization.codeplex.com/

http://www.wpftutorial.net/LocalizeMarkupExtension.html

वे क्लीनर Xaml प्रदान करते हैं और डिजाइन समय में एक सा अच्छे लग रहे हैं, लेकिन मैं आपको अनुमति देता है के अलावा किसी कार्यात्मक अंतर नहीं देख सकते हैं रनटाइम पर भाषाओं को बदलने के लिए। क्या मुझे यहां कुछ याद आ रही है, या क्या हमें बस आसान और अंतर्निहित मार्ग के लिए जाना चाहिए? कुल योग में हमारे पास केवल ~ 100 तार हैं जिन्हें स्थानीयकृत करने की आवश्यकता है। मुझे लगता है कि सबसे आसान मार्ग यहां सबसे अच्छा है, विशेष रूप से हमारे ऐप की सापेक्ष सादगी पर विचार करना।

उत्तर

6

मैं निश्चित रूप से रेक्स मार्ग की सिफारिश करता हूं। मैंने अभी एक बड़े डब्ल्यूपीएफ एप्लिकेशन का निर्माण पूरा कर लिया है जिसे विभिन्न भाषाओं में स्थानांतरित किया जाएगा (वर्तमान में केवल en_GB और it_IT लेकिन जल्द ही अधिक लोकेशंस को दबाएगा) और यह पूरी तरह से काम करता है।

कुछ कमियां विचार करने के लिए:

  • जैसा आप उल्लेख किया है, यह वास्तव में एक महान समाधान नहीं है अगर आप ( स्विच भाषाओं गतिशील करना चाहता था, हालांकि यह अभी भी मार्कअप का उपयोग कर काम का एक सा के साथ प्राप्त किया जा सकता एक्सटेंशन)।
  • रूप locBaml दृष्टिकोण का विरोध करने के आप अपने resx अग्रिम जो आप काफी स्थानीयकरण तार (जहां locBaml, जहाँ तक i 'तक ही सीमित हैं ओवरहेड
  • का एक छोटा सा सा कहते हैं में संसाधनों डालने की आवश्यकता मीटर के बारे में पता है, तो आप काफी सभी तत्व गुण स्थानीयकरण कर सकते हैं)

हमारे सम्मान locBaml की खामियों दूर मात द्वारा resx दृष्टिकोण की मामूली ड्रा पीठ में।

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

+0

धन्यवाद! मेरा विश्वास करो, आपको बहुत खुशी होनी चाहिए कि आपको कभी भी पूर्ण बिल्ड प्रोजेक्ट पर लोकबाम का उपयोग नहीं करना पड़ेगा। क्या आपको पता है कि छवियों को resx के साथ स्थानीयकृत किया जा सकता है? मुझे नहीं लगता कि हमें उन्हें कभी भी स्थानीयकृत करने की आवश्यकता होगी, लेकिन केवल परेशान करें ... – Stevoman

+1

@ बेकनचेस - मैं यूआरएल को रेक्स में जोड़ दूंगा, फिर उरी ऑब्जेक्ट का उपयोग यूआरएल होगा, उरी को उस संपत्ति के रूप में उजागर करें एक ViewModel और एक छवि इसके साथ बांध है। –

+0

बढ़िया, धन्यवाद! – Stevoman

5

हम WPF localization extension का उपयोग करते हैं। यह स्थानीय तारों के रनटाइम स्विचिंग और डिज़ाइन-टाइम देखने को प्रदान करता है।

रेक्स का उपयोग करने के बारे में अच्छा हिस्सा यह है कि इसमें अच्छी गिरावट है (उदा।डी-डीई, डी, डिफ़ॉल्ट संसाधन)। इसके अलावा locamaml का नुकसान है कि यह एक सीएसवी फ़ाइल का उपयोग करता है, जो सभी समस्याओं का कारण बन सकता है (जैसे कि स्ट्रिंग से बचने की आवश्यकता है जिसमें कॉमा शामिल है)। साथ ही, टूल के चलने के बाद मजबूत नाम पर हस्ताक्षरित असेंबली को इस्तीफा देना होगा।

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

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