2012-11-21 35 views
9

एक जर्मन सिस्टम पर विजुअल स्टूडियो 2012 आरसी का उपयोग कर विंडोज 8 पर, मुझे अपने सभी अपवादों को जर्मन में स्थानांतरित किया जाता है, जिसका प्रभावी अर्थ है कि मैं उनके लिए कुछ भी उपयोगी नहीं कर सकता।स्थानीय भाषा के बजाय अंग्रेजी अपवाद संदेश प्राप्त करें

Tools --> Options --> Internetional Settings --> Language --> English 

फिर भी, मैं स्थानीय जर्मन भाषा में मेरी अपवाद मिलता है: इस का समाधान करने के लिए, मैं पहले से ही अंग्रेजी भाषा के लिए मेरे आईडीई बदलने के लिए निम्नलिखित का इस्तेमाल किया। मैं इस कोड का उपयोग कोड में ThreadUI संस्कृति को बदलने की कोशिश की:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us"); 

दुःख की बात है WinRT में थ्रेड नाम स्थान WinRT में चला गया है। इसलिए मैंने कोशिश की:

System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-us"); 

मुझे जर्मन अपवाद संदेश अभी भी मिलता है। क्या किसी को अपवाद संदेशों के अन-लोकलाइज्ड संस्करण को कैसे प्राप्त किया जाए?

+0

गूगल अनुवाद? :) – mcalex

+1

मैं इस प्रणाली में कम से कम दो महीने तक काम करूंगा, और मैं वास्तव में Google अनुवाद का उपयोग नहीं करना चाहता हूं। – Akku

+0

क्या आपने इसे देखा है: http://stackoverflow.com/questions/209133/c-sharp-exception-messages-in-english। unlocalize.com उपयोगी दिखता है – mcalex

उत्तर

-5

अपवादों के डिजाइन द्वारा स्थानीयकृत संदेश हैं, यह वांछित व्यवहार है। आपको अपनी स्थानीय कंप्यूटर सेटिंग्स बदलनी चाहिए।

+1

यह बेहतर जवाब होगा यदि आपने समझाया कि वह ऐसा करने के बारे में कैसे जा सकता है, और शायद यह भी क्यों आईडीई सेटिंग्स केवल आईडीई को ही प्रभावित करती हैं और न कि प्रोग्राम जिन्हें संकलित किया गया है, और आईडीई से चलाया जाता है। – TomH

+0

... और यदि ओपी ने कहा कि वह ऐसा नहीं करेगा या नहीं कर सकता है। – mcalex

+3

ठीक है, संदेश वहां हैं, समस्या है, और एक प्रोग्रामेटिक समाधान .NET 4 के लिए उपलब्ध है और अपवादों के संदिग्ध डिज़ाइन के बावजूद कम है (थ्रेड लोकेल बदलने के माध्यम से), इसलिए मैं नहीं देख सकता कि क्यों नहीं होना चाहिए .NET 4.5 के लिए एक समाधान। यह जवाब आलसी है और मेरे प्रश्न के लिए उपयुक्त नहीं है। – Akku

2

आपका दूसरा विकल्प Exception.HResult मान पुनर्प्राप्त और प्रदर्शित करना है, जिसे खोजा जा सकता है और अंग्रेजी में एक उपयोगी त्रुटि संदेश में बदल दिया जा सकता है।

एक और संभावना है, अगर इन अपवादों Win32 कोड, एक हैक यद्यपि:

[DllImport("kernel32.dll", 
      EntryPoint = "FormatMessageW", 
      SetLastError = true, 
      CharSet = CharSet.Auto)] 
private static extern int FormatMessage(
    int dwFlags, 
    IntPtr lpSource, 
    int dwMessageId, 
    int dwLanguageId, 
    StringBuilder lpBuffer, 
    int nSize, 
    IntPtr[] Arguments); 

// used like: 
var builder = new StringBuilder(2048); 
var res = FormatMessage(
    0x1000|0x0200/*System Message, Ignore Inserts*/, 
    IntPtr.Zero, 
    exception.HResult, 
    new CultureInfo("en-US").LCID, 
    builder, 
    builder.Capacity, 
    null); 
Console.WriteLine("{0}", builder.ToString()); 
// throw new StackOverflowException() 
// "Recursion too deep; the stack overflowed." 
+0

मैं आज कोशिश करूँगा और स्वीकार करता हूं कि यह सुविधाजनक है या नहीं। धन्यवाद। – Akku