2010-03-06 10 views
12

मैं समय के साथ एकत्रित विभिन्न PHP सहायक कार्यों के साथ एक बड़ी पुरानी लाइब्रेरी को भंग कर रहा हूं। मैं जितना संभव हो उतने कार्यों के लिए ज़ेंड फ्रेमवर्क आधारित प्रतिस्थापन की तलाश में हूं।ज़ेंड फ्रेमवर्क में ब्राउज़र भाषा निर्धारित करें?

मेरी पहली उम्मीदवार एक समारोह है कि विशाल सूची है कि http_accept_language हो सकता है से उपयोगकर्ताओं के सबसे पसंदीदा ब्राउज़र की भाषा देता है।

क्या ZF के लिए कोई फ़ंक्शन है?

मुझे एहसास है कि Zend_Translate किसी भी तरह ब्राउज़र भाषा का पता लगाने में सक्षम है, लेकिन मुझे वास्तव में भाषा स्ट्रिंग प्राप्त करने के लिए सार्वजनिक रूप से उपलब्ध फ़ंक्शन नहीं दिख रहा है।

उत्तर

11

निर्दिष्ट किए बिना तुम जाओ:

$locale = new Zend_Locale(); 

// if locale is 'de_AT' then 'de' will be returned as language 
print $locale->getLanguage(); 

// if locale is 'de_AT' then 'AT' will be returned as region 
print $locale->getRegion(); 
+0

क्या होता है यदि वरीयता केवल "एन" या "एस" है? http://stackoverflow.com/questions/16469629/zend-locale-zend-currency-region-code – Michelangelo

+0

मैं सीधे आपके सवाल का जवाब दे दिया। –

9

Zend_Locale इसके बारे में मदद करने में सक्षम होना चाहिए।

उदाहरण और पृष्ठ पर स्पष्टीकरण देखें Using Zend_Locale(के हवाले से):

ज्यादातर स्थितियों के लिए, new Zend_Locale() स्वचालित रूप से सही स्थान का चयन करेंगे, जानकारी उपयोगकर्ता के वेब द्वारा प्रदान करने के लिए दिया वरीयता के साथ ब्राउज़र।


और कुछ और जानकारी है कि पेज (के हवाले से) पर बाद में देखते हैं:

खोज के लिए कोई स्थान का स्वत: चयन के लिए Zend_Locale द्वारा प्रयोग किया जाता एल्गोरिथ्म के तीन स्रोतों का उपयोग करता सूचना:

1.const Zend_Locale::BROWSER - उपयोगकर्ता का वेब ब्राउज़र जानकारी प्रदान करता है प्रत्येक अनुरोध के साथ, जिसे PHP द्वारा में वैश्विक चर HTTP_ACCEPT_LANGUAGE में प्रकाशित किया गया है। यदि कोई मिलान लोकेल पाया जा सकता है, तो वरीयता ENVIRONMENT और अंतिम FRAMEWORK पर दी गई है।

2.const Zend_Locale::ENVIRONMENT - पीएचपी पीएचपी आंतरिक समारोह setlocale() के माध्यम से होस्ट सर्वर किसी भी स्थान प्रकाशित करती है। यदि कोई मिलान करने वाला लोकेल पाया जा सकता है, तो वरीयता FRAMEWORK और अंतिम BROWSER पर दी जाती है।

3.const Zend_Locale::FRAMEWORK - Zend फ्रेमवर्क को निर्दिष्ट घटक चूक के एक मानकीकृत तरीका होता है जब (योजना बनाई, लेकिन अभी तक उपलब्ध नहीं), तो यह लगातार का उपयोग कर इन्स्टेन्शियशन दौरान एक स्थान का चयन करने के लिए प्राथमिकता दे देंगे आधारित इन डिफ़ॉल्ट पर। यदि कोई मिलान लोकेल पाया जा सकता है, तो ENVIRONMENT और अंतिम BROWSER पर वरीयता दी जाती है।

(सलाह: उस पृष्ठ पढ़ जाना - मैं नहीं कॉपी-पेस्ट जाएगा सब कुछ वहाँ पढ़ने के लिए है ^^)


संपादित करें: और यहाँ कोड वाले हिस्से की दिखाता है मेरी टिप्पणी:

$locale = new Zend_Locale(); 
var_dump($locale->getLanguage()); 
var_dump($locale->getRegion()); 
die; 

मुझे देता है:

string(2) "fr" 
bool(false) 

ठीक है, अपने ब्राउज़र के लिए फ्रेंच पूछ रहा है, यहाँ एक क्षेत्र ^^

+0

चीयर्स @Pascal, लंबे समय पर मैं 'Zend_Locale' के साथ काम करने में सक्षम हो जाएगा। फिलहाल, मैं अपने मौजूदा लोकेल हैंडलिंग के साथ मौजूदा एप्लिकेशन में सहायक फ़ंक्शन लाइब्रेरी को प्रतिस्थापित कर रहा हूं, इसलिए मुझे वास्तविक आईएसओ कोड प्राप्त करने की आवश्यकता है। –

+0

ओह :-(बहुत बुरा :-(;;; humph ... इसके बारे में thiking: क्या पहले स्थान instanciating दे जेडएफ अपना जादू करते हैं, और फिर बुला 'getLanguage()' और/या 'getRegion के बारे में() 'तरीकों स्थान के कोड प्राप्त करने के –

+0

मैं अपने जवाब संपादित किया है कोड के एक हिस्से को प्राप्त करने के लिए - लेकिन मैं देख रहा हूँ मैं @henchman द्वारा इसे करने के लिए पीटा गया है ^^ –

5

मैं दोनों जवाब upvoted गए हैं। Zend_Locale साथ भाषा हो रही करने के लिए एक विकल्प के रूप पर विचार

+1

पहले के लिए +1: भले ही यह केवल PHP> = 5.3 में उपलब्ध है, मूल कार्यों का उपयोग करना अच्छा है * (और intl कक्षाएं PHP के लिए एक महान जोड़ हैं)। * ​​ –

+1

मैं ज़ेंड आधारित उत्तर स्वीकार करूंगा क्योंकि यही है मैंने पूछा, लेकिन +1 क्योंकि यह वास्तव में अच्छा है और यहां तक ​​कि अंतर्निहित 5.3.0 अभी पूछने के लिए बहुत अधिक है लेकिन एक वर्ष में नहीं होगा। चीयर्स। –

1

वहाँ पहले पूर्ण स्थान (भाषा कोड और क्षेत्र कोड प्राप्त करने के Zend_Locale() मजबूर करने के लिए एक संभावना है, जैसे 'en_US') बस भाषा कोड ('एन') की बजाय? यदि नहीं, तो मुद्राओं को संभालने में समस्या है क्योंकि उन्हें पूर्ण लोकेल की आवश्यकता है।

कैसे आप इस मुद्दे निपटेंगे? मुझे अभी तक उस समस्या के लिए कोई स्वीकार्य समाधान नहीं मिला है और मेरे लिए ऐसा लगता है कि Zend_Locale के लिए यह _prepareLocale($locale, $strict = false) में एक कार्य होना चाहिए।

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