उचित तरीका यह है कि सर्वर पर भेजे गए HTTP Accept-Language हेडर को देखें। इसमें उन भाषाओं की क्रमबद्ध, भारित सूची होती है, जिन्हें उपयोगकर्ता ने पसंद करने के लिए अपने ब्राउज़र को कॉन्फ़िगर किया है।
दुर्भाग्य से यह हेडर जावास्क्रिप्ट के अंदर पढ़ने के लिए उपलब्ध नहीं है; आपको केवल वह मिलता है navigator.language
, जो आपको बताता है कि वेब ब्राउज़र का स्थानीयकृत संस्करण क्या स्थापित किया गया था। यह आवश्यक रूप से उपयोगकर्ता की पसंदीदा भाषा (ओं) के समान नहीं है। IE पर आपको इसके बजाय systemLanguage
(OS स्थापित भाषा), browserLanguage
(समान language
) और userLanguage
(उपयोगकर्ता कॉन्फ़िगर किया गया OS क्षेत्र) मिलता है, जो सभी समान रूप से अप्रभावी हैं।
अगर मुझे उन संपत्तियों में से चुनना था, तो मैं userLanguage
पहली बार सूँघता हूँ , वापस गिरता हूँ language
और उसके बाद (यदि वे किसी भी उपलब्ध भाषा से मेल नहीं खाते हैं) browserLanguage
और अंत में देखते हैं systemLanguage
।
यदि आप नेट पर कहीं और एक सर्वर-साइड स्क्रिप्ट रख सकते हैं, जो केवल एक्सेप्ट-लैंग्वेज हैडर को पढ़ता है और इसे स्ट्रिंग में हेडर मान के साथ जावास्क्रिप्ट फाइल के रूप में वापस थूकता है, जैसे:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
तब आप HTML में उस बाहरी सेवा को इंगित करते हुए एक <script src> शामिल कर सकते हैं, और भाषा हेडर को पार्स करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं। मुझे यह करने के लिए किसी भी मौजूदा लाइब्रेरी कोड का पता नहीं है, हालांकि, चूंकि एक्सेप्ट-लैंग्वेज पार्सिंग लगभग हमेशा सर्वर साइड पर की जाती है।
आप जो कुछ भी कर रहे हैं, आपको निश्चित रूप से एक उपयोगकर्ता ओवरराइड की आवश्यकता है क्योंकि यह हमेशा कुछ लोगों के लिए गलत अनुमान लगाएगा। अक्सर भाषा सेटिंग को URL में रखना सबसे आसान होता है (जैसे। Http: //www.example.com/en/site vs http: //www.example.com/de/site), और उपयोगकर्ता को क्लिक करने दें दोनों के बीच संबंध। कभी-कभी आप दोनों भाषा संस्करणों के लिए एक ही URL चाहते हैं, जिस स्थिति में आपको सेटिंग कुकीज़ में संग्रहीत करनी होगी, लेकिन यह उपयोगकर्ता एजेंटों को कुकीज़ और खोज इंजन के लिए कोई समर्थन नहीं दे सकता है।