2012-08-07 8 views
26

उपयोगकर्ता कुछ पेज का अनुरोध करता है और मैं जानना चाहता हूं (सर्वर पर) उसके ब्राउज़र में भाषा क्या है। तो मैं सही संदेशों के साथ टेम्पलेट प्रस्तुत कर सकता था।
मैं node.js (express.js) में ब्राउज़र भाषा कैसे प्राप्त कर सकता हूं?

ग्राहक पक्ष पर यह आसान है:

var language = window.navigator.userLanguage || window.navigator.language 

उत्तर

45

आप req.headers उपयोग कर सकते हैं [ "स्वीकार-भाषा"] भाषा मिलता है/स्थानीय उपयोगकर्ता अपने ब्राउज़र में स्थापित किया है करने के लिए।

आसान समर्थन के लिए, आप locale module पर देख सकते हैं।

+1

req.headers ["स्वीकृति-भाषा"] रिटर्न: "uk, ru; q = 0.8, en-us; q = 0.5, en; q = 0.3" चयनित भाषा "uk" है। इस भाषा को सूची से कैसे प्राप्त करें? –

+4

@OlegDats लोकेल मॉड्यूल आपको इसका विश्लेषण करने में मदद करेगा, लेकिन मूल रूप से इसका मतलब यह है कि उपयोगकर्ता स्थानीय (प्राथमिकता क्रम में) ब्रिटेन (यूके अंग्रेजी), आरयू (रूसी), एन-यूएस (यूएस अंग्रेज़ी), एन (सादा अंग्रेजी), क्यू एक वजन कारक है, उच्च क्यू का मतलब उच्च वरीयता है। –

+9

@ जोचिम इक्सक्सन यूके यूके अंग्रेजी नहीं है, जो 'एन-जीबी' होगा। शायद ब्रिटेन Ukranian है। पहले दो अक्षर हमेशा लेन-देन होते हैं, क्षेत्र नहीं। – UpTheCreek

22

request.acceptsLanguages में request.headers['accept-language'] का एक पार्स संस्करण होगा।

देखें: http://expressjs.com/en/api.html#req.acceptsLanguages

+2

अंतर्निहित पैकेज वार्ताकार है https://github.com/federomero/negotiator –

+5

एक्सप्रेस 4 – Offirmo

+1

में अब सत्य नहीं है एक्सप्रेस 4 में आप 'req.acceptedLanguages' का उपयोग यह जांचने के लिए कर सकते हैं कि उपयोगकर्ता एक या एक सूची स्वीकार करता है या नहीं भाषाओं। इसे जांचें: http://blog.hubii.com/dev-detecting-header-language-on-express-js/ – miduga

15
एक्सप्रेस 4.x के साथ

, आप जांच करने के लिए अगर कुछ भाषाओं स्वीकार किए जाते हैं req.acceptsLanguages(lang [, ...]) में निर्माण का उपयोग कर सकते हैं।

var express = require('express'); 
app.get('/translation', function(request, response) { 
    var lang = request.acceptsLanguages('fr', 'es', 'en'); 
    if (lang) { 
     console.log('The first accepted of [fr, es, en] is: ' + lang); 
     ... 
    } else { 
     console.log('None of [fr, es, en] is accepted'); 
     ... 
    } 
}); 

एक्सप्रेस 4.x का उपयोग करके सभी को स्वीकार कर लिया भाषाओं की सूची प्राप्त करने के लिए, आप मॉड्यूल accepts उपयोग कर सकते हैं।

var express = require('express'), accepts = require('accepts'); 
app.get('/translation', function(request, response) { 
    console.log(accepts(request).languages()); 
    ... 
}); 
+0

दरअसल, 'req.acceptsLanguages' केवल स्वीकार करता है' Accepts मॉड्यूल का उपयोग कर 'लागू' करता है- हुड, इसलिए यदि आप इसे कोई तर्क नहीं देते हैं तो आपको भाषाओं की एक ही सूची मिल जाएगी (प्राथमिकता के क्रम में एक सरणी के रूप में)।ध्यान रखें कि दस्तावेज व्यवहार नहीं है हालांकि, एक्सप्रेस दस्तावेज़ कहते हैं कि 'लांग' तर्क आवश्यक है। – Inkling

0

आपको req.headers["accept-language"] में स्ट्रिंग को पार्स करने की आवश्यकता होगी। जो आपको ग्राहक से पसंदीदा भाषाओं की प्राथमिकता सूची देगा। यदि आपकी भाषा समर्थित है या नहीं तो आप req.acceptsLanguages(lang [, ...]) भी देख सकते हैं।

मैं किसी भी भाषा मिलान कार्य करने के लिए express-request-language का उपयोग करने की दृढ़ता से अनुशंसा करता हूं, क्योंकि इसे पहली बार सही करना मुश्किल हो सकता है।

अधिकांश समय, एक भाषा से मेल खाने के लिए पर्याप्त नहीं है। एक उपयोगकर्ता एक पसंदीदा भाषा बदलना चाह सकता है। express-request-language आपको कुकी में पसंदीदा भाषा संग्रहीत करने में सहायता करता है, यह आपके सर्वर को पसंदीदा भाषा बदलने के लिए एक यूआरएल पथ भी देता है।

सभी कार्यक्षमता ऊपर कोड की लाइनों की सिर्फ एक जोड़े के साथ किया जा सकता है:

app.use(requestLanguage({ 
    languages: ['en-US', 'zh-CN'], 
    cookie: { 
    name: 'language', 
    options: { maxAge: 24*3600*1000 }, 
    url: '/languages/{language}' 
    } 
})); 

कोई मुकाबला नहीं के मामले में, मिडलवेयर भी एक डिफ़ॉल्ट भाषा (en-US ऊपर) से मेल खाएगी।

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