2009-03-23 8 views
101

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

एफवाईआई, मैं प्रॉक्सी प्रतिबंधों के कारण सर्वर-स्क्रिप्ट का उपयोग नहीं कर सकता, इसलिए मुझे लगता है कि समस्या हल करने के लिए जावास्क्रिप्ट या एक्शनस्क्रिप्ट उपयुक्त होगा।

सवाल:

  1. क्या अनुमान 'उपयोगकर्ता किसी भी स्थान के लिए सबसे अच्छा तरीका हो सकता है?

  2. क्या कोई मौजूदा सरल वर्ग/कार्य है जो मेरी मदद कर सकता है (कोई जटिल स्थानीयकरण बंडल नहीं)? विशेष रूप से एक स्मार्ट नंबर पर सभी संभावित भाषाओं को एक छोटी संख्या (मेरे पास अनुवाद) में तोड़ने के लिए।

  3. मुझे किस बिंदु पर इस तरह के समाधान पर भरोसा है?

  4. कोई अन्य कामकाज या सुझाव?

+0

एक ही तरीका है एक ब्राउज़र अपने उपयोगकर्ता के बारे में मेटा डेटा साझा कर सकता है और अनुरोध यूआरएल और हेडर के माध्यम से है। फ़ायरफ़ॉक्स पकड़ो और अनुरोध किए जाने पर भेजे जाने वाले शीर्षलेखों पर एक नज़र डालें। सामान्य अनुरोध और प्रतिक्रिया शीर्षलेखों की जांच करना काफी दिलचस्प है। आपके सुझावों के लिए –

उत्तर

115

सर्वर पर भेजे गए HTTP Accept-Language शीर्षलेख को देखने का उचित तरीका है। इसमें उन भाषाओं की क्रमबद्ध, भारित सूची शामिल है जिन्हें उपयोगकर्ता ने अपने ब्राउज़र को प्राथमिकतापूर्वक कॉन्फ़िगर किया है।

दुर्भाग्यवश यह हेडर जावास्क्रिप्ट के अंदर पढ़ने के लिए उपलब्ध नहीं है; आपको जो भी मिलता है वह navigator.language है, जो आपको बताता है कि वेब ब्राउज़र का स्थानीय संस्करण किस प्रकार स्थापित किया गया था। यह जरूरी नहीं है कि उपयोगकर्ता की पसंदीदा भाषाएं हों।आईई पर आपको systemLanguage (ओएस स्थापित भाषा), browserLanguage (language के समान) और userLanguage (उपयोगकर्ता कॉन्फ़िगर किया गया ओएस क्षेत्र) मिलता है, जो सभी समान रूप से अनुपयोगी होते हैं।

अगर मैं उन गुणों के बीच चयन करने के लिए किया था, मैं पहले userLanguage के लिए सूंघ चाहते हैं, language करने और उस के बाद ही वापस गिरने (अगर उन किसी भी उपलब्ध भाषा से मेल नहीं खाती) browserLanguage और अंत में systemLanguage को देखकर।

आप नेट कि बस स्वीकार करें-भाषा शीर्ष लेख पढ़ता है और स्ट्रिंग में हैडर मूल्य के साथ एक JavaScript फ़ाइल के रूप में बाहर इसे वापस थूक, जैसे .:

var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3'; 
पर कहीं और एक सर्वर साइड स्क्रिप्ट डाल सकते हैं

तो आप HTML में उस बाहरी सेवा पर इंगित करने वाले < स्क्रिप्ट स्रोत> और भाषा शीर्षलेख को पार्स करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं। ऐसा करने के लिए मुझे किसी भी मौजूदा लाइब्रेरी कोड के बारे में पता नहीं है, हालांकि, चूंकि स्वीकार्य-भाषा पार्सिंग लगभग हमेशा सर्वर की ओर होती है।

जो भी आप कर रहे हैं, आपको निश्चित रूप से उपयोगकर्ता को ओवरराइड की आवश्यकता है क्योंकि यह हमेशा कुछ लोगों के लिए गलत अनुमान लगाएगा। अक्सर यूआरएल में भाषा सेटिंग डालना सबसे आसान होता है (उदाहरण के लिए http: //www.example.com/en/site बनाम http: //www.example.com/de/site), और उपयोगकर्ता को क्लिक करने दें दोनों के बीच संबंध। कभी-कभी आप दोनों भाषा संस्करणों के लिए एक यूआरएल चाहते हैं, इस मामले में आपको कुकीज़ में सेटिंग स्टोर करना होगा, लेकिन यह उपयोगकर्ता एजेंटों को कुकीज़ और सर्च इंजन के लिए कोई समर्थन नहीं दे सकता है।

+0

धन्यवाद! यह सब बहुत समझ में आता है। –

31

This article पता चलता है ब्राउज़र की नाविक वस्तु के निम्नलिखित गुण:

  • navigator.language (नेटस्केप - ब्राउज़र स्थानीयकरण)
  • navigator.browserLanguage (आईई विशिष्ट - ब्राउज़र स्थानीयकृत भाषा)
  • navigator.systemLanguage (आईई-विशिष्ट - विंडोज ओएस - स्थानीयकृत भाषा)
  • नेवी gator.userLanguage

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

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

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

+0

धन्यवाद फिल। लेख के बारे में, यह 6 साल का है ... सुनिश्चित नहीं है कि हम इस पर भरोसा कर सकते हैं? –

+1

मुझे संदेह है कि आधुनिक ब्राउज़र सभी नेविगेटर का समर्थन करते हैं। भाषा। मेरा ब्राउजर (उबंटू 8.10 पर एफएफ 3) रिपोर्ट 'एन-जीबी'। अगर कोई अभी भी आईई 6 का उपयोग कर रहा है - लगभग 20% लोगों - तो इसके लिए अनुमति देने लायक है। आईई 6 8 साल पहले दिखाई दिया। –

+0

आईई 8 नेविगेटर का समर्थन नहीं करता है। भाषा। शायद आईई 9 होगा? – spig

-4

के लिए फ्लैश आप flash.system.Capabilities.language — है OS language detectionअनुमान को approprieate स्थान पर विचार करें।

31

क्रोम और फ़ायरफ़ॉक्स 32+ पर, नेविगेटर.भाषाओं में उपयोगकर्ता वरीयता के क्रम में स्थानीय लोगों की एक सरणी होती है, और नेविगेटर से अधिक सटीक है। भाषा, हालांकि इसे पीछे की ओर संगत बनाने के लिए (परीक्षण क्रोम/आईई/फ़ायरफ़ॉक्स/सफारी), तो इसका उपयोग करें:

function getLang() 
{ 
if (navigator.languages != undefined) 
return navigator.languages[0]; 
else 
return navigator.language; 
} 
+1

यह IE9 और IE10 के लिए काम नहीं करता है। उनके लिए, आपको इसके बजाय navigator.browser भाषा का परीक्षण करना होगा। – user393274

+0

वनलाइनर: 'फ़ंक्शन getLang() {वापसी (navigator.language || navigator.languages ​​[0]); } ' – JorgeGarza

+3

@ChStark यह 'वापसी नेविगेटर नहीं होना चाहिए। भाषाएं [0] || navigator.language; '? –

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

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