2010-06-28 15 views
8

मैं अपने ग्राहकों के देश को पाने की कोशिश कर रहा हूं, इसलिए मैं CultureInfo.CurrentCulture का उपयोग करता हूं। समस्या यह है कि जब मेरे कनाडाई ग्राहक मेरी वेबसाइट का उपयोग करते हैं, तो वे अमेरिकी के रूप में दिखाई दे रहे हैं।CultureInfo.CurrentCulture मुझे गलत संस्कृति दे रहा है

ऐसा लगता है जैसे CultureInfo.CurrentCulture अपने देश के बजाय मेरे सर्वर का देश लौट रहा है। तो मैं अपने ग्राहकों का देश कैसे प्राप्त करूं?

उत्तर

2

मैं तुम्हें भेजे ब्राउज़र अनुरोध से उपयोगकर्ता की संस्कृति को पढ़ने लिए कोड लिखने, और कहा कि से अपने CultureInfo निर्धारित करने की आवश्यकता विश्वास करते हैं।

This fellow describes how they do it: वर्तमान थ्रेड के लिए प्रदर्शन संस्कृति को उपयोगकर्ता के आने वाले एचटीपी "अनुरोध" ऑब्जेक्ट से सबसे उपयुक्त संस्कृति में सेट करें।

वह वहाँ एक उत्कृष्ट चर्चा है, लेकिन इस मूल रूप से है वह यह कैसे करता है: UIUtilities.setCulture(Request);

कहाँ यह क्या कहा जाता हो जाता है:

Page_Load में, वे यह कॉल करने के

/// Set the display culture for the current thread to the most 
/// appropriate culture from the user's incoming Http "request" object. 
internal static void setCulture(HttpRequest request) 
{ 
    if (request != null) 
    { 
     if (request.UserLanguages != null) 
     { 
     if (request.UserLanguages.Length > -1) 
     { 
      string cultureName = request.UserLanguages[0]; 
      UIUtilities.setCulture(cultureName); 
     } 
     } 
     // TODO: Set to a (system-wide, or possibly user-specified) default 
     // culture if the browser didn't give us any clues. 
    } 
} 

/// Set the display culture for the current thread to a particular named culture. 
/// <param name="cultureName">The name of the culture to be set 
/// for the thread</param> 
private static void setCulture(string cultureName) 
{ 
    Thread.CurrentThread.CurrentCulture = 
     CultureInfo.CreateSpecificCulture(cultureName); 
    Thread.CurrentThread.CurrentUICulture = new 
     CultureInfo(cultureName); 
} 
+0

सही लाइनों पर, लेकिन ध्यान दें कि ब्राउज़र द्वारा भेजे गए स्वीकार्य-भाषा शीर्षलेख उपयोगकर्ता की पसंदीदा भाषा आवश्यक नहीं है। मैं यूरोप में हूं और विंडोज़ का एक यूएस संस्करण है, इसलिए मेरा आईई 8 एन-यूएस भेजता है। यह भी ध्यान रखें कि स्वीकृति-भाषा शीर्षलेख में नाम वैध .NET संस्कृति नाम नहीं हो सकता है, इसलिए CreateSpecificCulture को कॉल करने का प्रयास प्रयास/पकड़ में संलग्न होना चाहिए। – Joe

+0

कोई भाग्य नहीं। मैं अभी भी – thchaver

+0

परीक्षण में एन-हम प्राप्त कर रहा हूं Request.UserLanguages ​​से आप क्या प्राप्त करते हैं? यही है, क्या आप सुनिश्चित हैं कि आपका ब्राउज़र किस भाषा का अनुरोध कर रहा है? – DOK

18

आपको अपने वेब.कॉन्फिग फ़ाइल में विशेषता auto पर सेट करने की आवश्यकता है:

<system.web> 
    <globalization culture="auto" /> 
<system.web> 

यह स्वचालित रूप से CurrentCulture क्लाइंट की संस्कृति पर सेट हो जाएगा।

यदि आप स्थानीयकृत संसाधनों का उपयोग कर रहे हैं तो आप uiCulture से auto पर भी सेट कर सकते हैं।

+1

मेरी इच्छा है कि मैं इसे एक से अधिक बार बढ़ा सकता हूं, धन्यवाद। यह काम करने के लिए मुझे 3 घंटे लगे :) – Thousand

1

मेरे मामले में मेरी मशीन मूल रूप से अंग्रेजी - यूके स्थापित थी। मैंने अंग्रेजी - यूएस भाषा जोड़ा और इसे डिफ़ॉल्ट के रूप में सेट किया। मैंने यह भी सत्यापित किया कि रजिस्ट्री में यूएस सही ढंग से सेट किया गया था। अफसोस की बात है, System.Threading.Thread.CurrentThread.CurrentCulture अभी भी गलत संस्कृति, ब्रिटेन प्रदर्शित किया। मैंने पाया कि आपको भाषा विकल्पों को सेट करने की आवश्यकता है। भाषा पैक, हस्तलेखन और भाषण डाउनलोड करें।

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

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