2009-03-06 14 views
9

मैं PHP द्वारा उपयोगकर्ता के ब्राउज़र की भाषा कैसे देख सकता हूं?PHP द्वारा ब्राउज़र की भाषा की जांच करना?

मुझे अमेरिका और ब्रिटेन में लोगों के लिए एक अलग पृष्ठ दिखाने की ज़रूरत है।

मैं निम्नलिखित कोड की असफल कोशिश

<?php 
if(ereg("us", $_SERVER["HTTP_ACCEPT_LANGUAGE"])) 
    include('http://page.com/us.txt'); 
else 
    include('http://page.com/uk.txt'); 
?> 

मैं अमेरिका में लोगों के लिए एक विशिष्ट कोड चलाने के लिए और उन्हें ब्रिटेन में के लिए।

+0

आप "अमेरिका में लोगों को" या मतलब है? "भाषा के साथ लोगों को: en-us"

<?php include_once "Zend/Locale.php"; $zend_locale = new Zend_Locale(Zend_Locale::BROWSER); // returns en for English, de for German etc. echo $browser_language = $zend_locale->getLanguage(); echo "<br />\n"; // returns en_US for American English, en_GB for British English etc. echo $browser_locale = $zend_locale->toString(); echo "<br />\n"; 

समाधान पर देखा? क्या होता है जब मैं अपनी एन-यूके नोटबुक को अमेरिका के ए में ले जाता हूं? – Piskvor

+0

मेरा मतलब केवल वे लोग हैं जिनके पास भाषा सेटिंग है। –

उत्तर

8

संभावना सिर्फ एक केस संवेदनशीलता मुद्दा; ईरेगी ('एन-यूएस') या preg_match ('/ en-us/i') इसे उठाया जाना चाहिए था।

हालांकि, हेडर में 'en-us' की तलाश करना कभी-कभी गलत हो सकता है, खासकर जब यूएस और यूके दोनों भाषाओं को सूचीबद्ध किया जाता है। "स्वीकार्य-भाषा" वास्तव में एक जटिल शीर्षलेख है, जो वास्तव में आप के लिए उचित पार्सर चाहते हैं।

आप PECL है, तो पूरे काम पहले से ही आप के लिए किया जाता है: http://www.php.net/manual/en/function.http-negotiate-language.php

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

+0

क्या आप HTTP_USER_AGENT को HTTP_ACCEPT_LANGUAGE द्वारा उपरोक्त कोड में प्रतिस्थापित करना चाहते हैं? –

+0

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

2

शायद ऐसा करने का अधिक विश्वसनीय तरीका $_SERVER['HTTP_USER_AGENT'] स्ट्रिंग पर एक रेगेक्स निष्पादित करना है।

<?php 
    if(preg_match('/en-US/', $_SERVER['HTTP_USER_AGENT'])) 
    include('http://page.com/us.txt'); 
    else 
    include('http://page.com/uk.txt'); 
?> 

आपको एक वैध और उपयोगी उपयोगकर्ता के एजेंट स्ट्रिंग मिलता है, इसलिए ध्यान रखें कि किसी और बयान एक उचित विकल्प होता है बनाने के लिए गारंटी नहीं है।

+0

मुझे निम्न त्रुटि मिलती है http://dpaste.com/8204/ –

+0

आह, शूट करें। मैंने देखा कि आपने स्वीकार कर लिया है तो जवाब को स्वीकार कर लिया है। ऐसा लगता है कि मैं आगे की स्लैश भूल गया (अराजकता के रूप में)। – jonstjohn

3

इस प्रयास करें:

<? 
if(preg_match('/en-us/i', $_SERVER['HTTP_USER_AGENT'])) 
    include('http://page.com/us.txt'); 
else 
    include('http://page.com/uk.txt'); 
?> 
+0

यह अब काम करता है! क्या आपका आदेश हमें केस-प्रेरक बना देता है? –

+0

HTTP_USER_AGENT उन लोगों में से अधिकांश से मेल खाएगा जिनके पास * ब्राउज़र * का en-us संस्करण है। आपको HTTP_ACCEPT_LANGUAGE – Piskvor

+0

Piskvor की जांच करनी चाहिए: मुझे नहीं पता, सामान्य फ़ायरफ़ॉक्स डाउनलोड मेरे लिए एन-जीबी के रूप में दिखाता है। – Ross

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