2013-07-16 7 views
14

प्रश्न: वहाँ एक जावास्क्रिप्ट (क्लाइंट-साइड) आगंतुकों देश/भाषा कोड प्राप्त करने के कोड है, कि सही है और पार "आधुनिक" -browser है ? मैं आदि 'en-US' जैसे परिणाम, 'sv-SE', 'nl-NL',आगंतुकों भाषा और जावास्क्रिप्ट (क्लाइंट-साइड) के साथ देश कोड प्राप्त करें

इस से संबंधित प्रश्नों से पहले कहा गया है के लिए देख रहा हूँ (कुछ अतः लिंक: 1, 2, 3, 4, दूसरों के बीच), लेकिन मैं उत्तर नहीं मिलता और कुछ जवाब कुछ साल पुराने हैं और कुछ मामलों में और भी पुराने लेखों का जिक्र है, जो मुझे लगता है कि इसके लिए नए समाधान हैं।

मैंने कोशिश की:

var language = window.navigator.userLanguage || window.navigator.language; 
console.log(language); 

और एक ही मशीन, एक ही स्थान पर फ़ायरफ़ॉक्स में क्रोम में "sv" और "en-GB" मिला है,।

उत्तर

14

navigator.language आपके लिंक किए गए प्रश्नों में से एक के रूप में विश्वसनीय नहीं है।

कारण यह बहुत पूछा जाता है, लेकिन आप अभी भी समस्या के बारे में कुछ कह रहे हैं। क्लाइंट साइड पर उस भाषा का पता लगाने पूरी तरह से विश्वसनीय नहीं है।

सभी भाषा प्राथमिकताओं में से केवल भाषा प्राथमिकताओं का पता लगाने के लिए उपयोग किया जाना चाहिए - यानी स्थान नहीं। मेरा ब्राउज़र en_US पर सेट है, क्योंकि मैं अंग्रेजी संस्करण चाहता था। लेकिन मैं ब्रिटेन में हूं, इसलिए मुझे अपने ब्राउज़र सेटिंग्स के माध्यम से पता चला है कि en_GB पर इसे बदलना होगा। 'ग्राहक' के रूप में यह मेरी समस्या नहीं है। यह भाषा के लिए ठीक है, लेकिन कोई अच्छा नहीं है कि आपकी साइट पर सभी कीमतें $ USD में हैं।

भाषा का पता लगाएं आपको वास्तव में सर्वर साइड स्क्रिप्ट तक पहुंच की आवश्यकता है। यदि आप बैक एंड डे नहीं हैं और क्लाइंट साइड (जितना संभव हो सके) पर जितना संभव हो उतना करना चाहते हैं, तो आपको केवल एक लाइन PHP स्क्रिप्ट चाहिए जो Accept-Language शीर्षलेख को वापस ले लेती है। इसके सरलतम पर, यह केवल हो सकता है:

<?php 
echo $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
// e.g. "en-US,en;q=0.8" 

आप कर सकते थे अजाक्स के माध्यम से इस मिलता है और लेख प्रतिसाद क्लाइंट पक्ष, जैसे (jQuery का उपयोग) पार्स:

$.ajax({ url: 'script.php', success: function(raw){ 
    var prefs = raw.split(','); 
    // process language codes .... 
} }); 

तो आप अपने HTML उत्पन्न करने में सक्षम थे बैक एंड के माध्यम से, आप अपने पृष्ठ में भाषा प्राथमिकताओं को प्रिंट करके पूरी तरह से अजाक्स का उपयोग करने से बच सकते हैं, उदाहरण के लिए

<script> 
    var prefs = <?php echo json_encode($_SERVER['HTTP_ACCEPT_LANGUAGE'])?>; 
</script> 

आप सर्वर से पहुँच नहीं था, लेकिन एक और सर्वर पर एक स्क्रिप्ट मिल सकता है, तो एक सरल JSONP सेवा दिखाई देगा:

<?php 
$prefs = $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
$jsonp = 'myCallback('.json_encode($prefs).')'; 

header('Content-Type: application/json; charset=UTF-8', true); 
header('Content-Length: '.strlen($jsonp), true); 
echo $jsonp; 

अपने अजाक्स के लिए jQuery का उपयोग करके आप की तरह कुछ करना चाहते हैं :

function myCallback(raw){ 
    var prefs = raw.split(','); 
    // process language codes .... 
} 
$.ajax({ 
    url: 'http://some.domain/script.php', 
    dataType: 'jsonp' 
}); 

देश का पता लगाने अलग बात है। ग्राहक पक्ष पर navigator.geolocation है, लेकिन यह संभवतः आपके उपयोगकर्ता को अनुमति के लिए संकेत देगा, इसलिए एक सहज उपयोगकर्ता अनुभव के लिए कोई अच्छा नहीं है।

अदृश्य तरीके से करने के लिए, आप भू-आईपी पहचान तक ही सीमित हैं।उपरोक्त के समान टोकन द्वारा, देश को लागू करने के लिए भाषा का उपयोग न करें।

ग्राहक पक्ष पर देश का पता लगाने के लिए, आपको क्लाइंट आईपी पता प्राप्त करने और आईपी/स्थान मैपिंग के डेटाबेस तक पहुंचने के लिए बैक एंड सेवा की भी आवश्यकता होगी। Maxmind's GeoIP2 JavaScript client यह सब आपके लिए क्लाइंट-साइड बंडल में लपेटने के लिए प्रतीत होता है, इसलिए आपको अपने सर्वर की आवश्यकता नहीं होगी (हालांकि मुझे यकीन है कि यह एक दूरस्थ jsonp सेवा का उपयोग करेगा)। freegeoip.net भी है, जो साइन अप करने के मामले में मैक्समिंड की तुलना में शायद कम परेशानी है, और यह भी ओपन सोर्स प्रतीत होता है।

39

jQuery का उपयोग करके, यह लाइन आपके उपयोगकर्ता का देश कोड प्रदर्शित करेगी।

$.getJSON('http://freegeoip.net/json/', function(result) { 
    alert(result.country_code); 
    }); 
+1

मैं के साथ देश कोड हो रही 'XMLHttpRequest https://freegeoip.net/json लोड नहीं कर सकता। अनुरोधित संसाधन पर 'पहुंच-नियंत्रण-अनुमति-उत्पत्ति' शीर्षलेख मौजूद नहीं है। उत्पत्ति 'my.domain.com' को इसलिए एक्सेस की अनुमति नहीं है। –

+0

यह यूआरएल अब मान्य नहीं है। – johnluetke

+3

यह यूआरएल मान्य है – sonida

1

ipdata.co

$.get("https://api.ipdata.co", function (response) { 
 
    $("#response").html(response.country_code); 
 
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<pre id="response"></pre>

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