2010-12-30 4 views
10

मैं ज़ेंड फ्रेमवर्क (जर्मन और अंग्रेजी) के साथ एक बहुभाषी परियोजना पर काम कर रहा हूं जहां मेरे पास उत्पाद का ऑर्डर करने के लिए एक छोटा सा रूप है। उपयोगकर्ता सक्षम करने के लिए किया जाना चाहिए: उत्पाद की कीमतों के लिएमुद्राओं और भाषा स्विच के साथ स्थानीय लोगों को संभालने का सर्वोत्तम अभ्यास

  • बदलें अपने पसंदीदा मुद्रा
  • बदलें पूरी वेबसाइट

फिलहाल के लिए अपने पसंदीदा भाषा का उपयोग मैं Zend_Locale :: findLocale() के लिए उपयोगकर्ता का लोकेल प्राप्त करें। मेरी ब्राउज़र सेटिंग्स के साथ मुझे 'de_CH' मिलता है और यह अच्छी तरह से काम करता है।

  • उपयोगकर्ता अपने ब्राउज़र बस मुझे भाषा कोड ('डी' 'de_CH' के बजाय)
  • उपयोगकर्ता एक भाषा है जो समर्थित नहीं है पसंद देने के लिए कॉन्फ़िगर किया है: लेकिन वहाँ कुछ समस्याओं जैसे ही हैं मेरी वेबसाइट द्वारा
  • उपयोगकर्ता एक देश से है, जहां वे एक मुद्रा जो अपने उत्पाद आदेश फार्म

बस भाषा कोड भाषा कोड Zend_Translate को संभालने के लिए पर्याप्त है, ख द्वारा समर्थित नहीं है मिल गया Zend_Currency को अधिक जानकारी चाहिए। मुझे लगता है कि प्रत्येक संभावित उपयोगकर्ता से देश कोड के साथ पूर्ण लोकेल प्राप्त करने का कोई समाधान नहीं है। मेरा सवाल है: आप इन परिस्थितियों को कैसे संभालेंगे? क्या आप अपने बूटस्ट्रैप के _initLocale() में जांचते हैं यदि कोई देश कोड गुम है और डिफ़ॉल्ट देश कोड का उपयोग करता है? क्या ऐसा करने के लिए कोई ज़ेन फ्रेमवर्क विधियां हैं?

एक असमर्थित भाषा उपयोगकर्ताओं भाषा 'fr' है, मैं एक डिफ़ॉल्ट भाषा के उपयोग करने के लिए है, क्योंकि हमारी वेबसाइट फ्रेंच का समर्थन नहीं करता चाहते हैं, तो। बूटस्ट्रैप में श्वेतसूची सरणी जोड़ने की तुलना में बेहतर संभावना है? उदाहरण के लिए Zend_Translate से एक विधि?

एक असमर्थित मुद्रा यदि उपयोगकर्ता की भाषा समर्थित है, लेकिन उसकी मुद्रा नहीं है तो क्या होगा? क्या मुझे बूटस्ट्रैप में लोकेल बदलना चाहिए या क्या मुझे लोकेल की प्रतिलिपि बनाना चाहिए और इसे Zend_Currency के लिए बदलना चाहिए?

मुख्य समस्या मुझे लगता है कि मेरी मुख्य समस्या यह है कि मैं कैसे इन सभी विभिन्न वातावरण के मुद्दों को संभालने के लिए यकीन नहीं है। मेरा पसंदीदा दृष्टिकोण बूटस्ट्रैप के _initLocale() में लोकेल सेट को सत्यापित करना होगा, इसलिए मैं सुनिश्चित कर सकता हूं कि मैं इसकी भाषा और मुद्रा का समर्थन कर सकता हूं।

आपकी सलाह के लिए धन्यवाद।

सादर, निको

संपादन 1 मैं एक तरह से इन मुद्दों को संभालने के लिए के बारे में अपने आप को कुछ और विचारों को बना दिया है। इस दृष्टिकोण के बारे में आप क्या सोचते हैं?

  1. Zend_Locale(): सभी छोटे स्थानों (एक देश कोड के बिना) को फ़िल्टर और भाषाओं आपके एप्लिकेशन द्वारा समर्थित (सिर्फ भाषा कोड) के साथ एक श्वेत सूची का उपयोग करता है। यदि कोई मिलान नहीं है, तो अपने आवेदन द्वारा दिए गए डिफ़ॉल्ट का उपयोग करें।
  2. Zend_Translate: लोकेल से भाषा कोड से शुरू करें।लेकिन यदि उपयोगकर्ता पसंदीदा भाषा बदलता है, तो लोकेल को छोड़ दें (शायद नए भाषा कोड और पुराने देश कोड के आधार पर कोई मेल खाने वाला लोकेल नहीं है) और Zend_Translate में भाषा कोड बदलें।
  3. Zend_Currency: लोकेल को डिफ़ॉल्ट के रूप में उपयोग करें। यदि उपयोगकर्ता पसंदीदा मुद्रा बदलता है, तो बस मुद्रा बदलें, न कि लोकेल। तो स्वरूपण पुराने लोकेल पर आधारित रहेगा क्योंकि मुद्रा में परिवर्तन का मतलब यह नहीं है कि उपयोगकर्ता भी अपना लोकेल बदलना चाहता है।

इस दृष्टिकोण स्वीकार्य होगा? ब्राउज़रों लोकेल इस तरह सेट कर रहे हैं, तो चरण 1 के साथ एक समस्या है: शायद आवेदन जर्मन का समर्थन नहीं करता

  • डी
  • en_US

, लेकिन क्योंकि यह एक छोटी स्थान, अनुप्रयोग है इसके बजाय en_US का उपयोग करेंगे। लेकिन मुझे नहीं पता कि कौन सा समाधान इस समस्या को ठीक करेगा, क्योंकि मैं एक पूर्ण लोकेल में एक छोटे से लोकेल को 'अपग्रेड नहीं कर सकता'।

+2

मैं अगर यह मदद करता है यकीन नहीं है, लेकिन एक उपयोगकर्ता के रूप में मैं अनुप्रयोगों और वेबसाइटों है कि मेरे लिए यह पता लगाने की कोशिश मेरी भाषा पसंद नहीं। मुझे लगता है कि आपकी साइट पर भाषा बटन या ड्रॉपडाउन होना हमेशा बेहतर होता है। आपको लाभ यह है कि आपको विचित्र भाषा संयोजनों का पता लगाने की चिंता नहीं है। मैट के सुझाव पर – Matt

+0

+1। मैं इस बात से परेशान हूं कि आप हर भाषा और मुद्रा का समर्थन क्यों करना चाहते हैं। आप शायद अपनी साइट का सबसे अधिक अनुवाद केवल 5 से 10 भाषाओं में करेंगे। तो एक लोकेल को 'पहचानने' की कोशिश कर रहा है और सही भाषा खोजने के लिए जो भी जादू की आवश्यकता है, वह अनावश्यक हो सकता है। एम्स्टर्डम से आने वाले लोगों के बारे में क्या, जो अंग्रेजी या फ्रेंच पसंद करेंगे, लेकिन आपकी साइट का पता लगाता है कि वे डच को सबसे ज्यादा समझेंगे? मैं एक भाषा/मुद्रा चयनकर्ता के लिए वोट देता हूं। चुम्मा। –

+0

ठीक है, लेकिन पूर्ण लोकेल उत्पन्न करने में सक्षम होने के लिए उपयोगकर्ता को भी अपना देश चुनना होगा। अन्यथा मैं चुने गए मुद्रा को गलत तरीके से आउटपुट करूंगा (EUR 12.000.- उदाहरण के लिए 12'000 EUR के बजाय)। लेकिन हाँ, शायद के.आई.एस.एस. यहां सही मध्यमार्ग है ;-)। आपका सुझाव देने के लिए धन्यवाद। – Nico

उत्तर

1

समस्या आप पर प्रकाश डाला आम है और मुझे लगता है काम की एक छोटी राशि अपने उपयोगकर्ता के लिए स्थान निर्धारित करने के लिए की आवश्यकता होगी।

डी de_DE को जानना चाहते हैं कि वे जर्मनी में स्थित हैं की आवश्यकता है, लेकिन यह de_CH के लिए डिफ़ॉल्ट कर सकते हैं जो आपके इलाके है, यदि आप उन इलाके पता नहीं है।

* The user has configured his browser to just give me the language code ('de' instead of 'de_CH') 

अपने आवेदन में इसे मानचित्र करें। जर्मनी में रहने वाले निवासियों के लिए आपका मैपिंग इसे de_DE में परिवर्तित कर सकता है। या स्विट्ज़रलैंड में रहने वाले निवासियों के लिए de_CH जो जर्मन बोलते हैं। या फ्रांसीसी बोलने वाले स्विट्ज़रलैंड के निवासियों के लिए fr_CH और अंग्रेजी बोलने वालों के लिए यह en_CH या en_DE होगा। तो यह 2 समस्या हल करता है।

उपयोगकर्ताओं भाषा और स्थान सही रूप में उपयोगकर्ता के लिए स्थान निर्धारित करने के लिए आवश्यक हैं।

तुम वहाँ स्थान नहीं जानते, तो आप अपने खुद के डिफ़ॉल्ट भाषा और इलाके के लिए डिफ़ॉल्ट चाहिए।

लिंक: Unicode - locality and language mapping

* The user prefers a language which is not supported by my website 

यदि आप यूरोप में हैं तो विकल्प होगा जो कुछ भी है, अपना डिफ़ॉल्ट इलाके और भाषा है अगर आप स्विस हैं तो de_CH समझ में आता है, एक डिफ़ॉल्ट भाषा और मुद्रा होनी चाहिए।

* The user is from a country where they got a currency which isn't supported by my product order form 

इस मामले में आपको अपने डिफ़ॉल्ट पर वापस जाना चाहिए।

ज़ेंड में उनके विकी पर लोकेल का उपयोग करने के कई उदाहरण हैं। ज़ेंड में इलाके को स्थापित करने के लिए सबसे आम जगह बूटस्ट्रैप फ़ाइल है।

मैंने इस लिंक का उपयोग ज़ेंड फ्रेमवर्क विकी पर इस प्रतिक्रिया के संदर्भ में संदर्भ के लिए किया था। नीचे दिया गया कोड एक छोटा सा उदाहरण प्रदान करता है कि यदि लोकेल अमान्य है तो Zend_Locale क्लास अपवाद फेंकता है। आप इस बिंदु पर स्थान और भाषा की जांच कर सकते हैं और उपयोगकर्ता के लिए लोकेल को सटीक रूप से सेट करने के लिए ब्राउज़र से प्राप्त जानकारी के साथ संयोजन में इसका उपयोग कर सकते हैं।

लिंक: Zend Locale Introduction

// within the bootstrap file 
    try { 
     $locale = new Zend_Locale('auto'); 
    } catch (Zend_Locale_Exception $e) { 
     $locale = new Zend_Locale('de'); 
    } 
    // within your model/controller 
    $date = new Zend_Date($locale); 
    $currency = new Zend_Currency($locale) 
+0

बहुत बहुत धन्यवाद। – Nico

+0

कोई समस्या नहीं, आपकी परियोजना के साथ शुभकामनाएं। –

0

यहाँ एक लेख मैं स्थानीयकरण मुझे लगता है कि आप अपने प्रश्न के कुछ जवाब देने में उपयोगी मिल सकता है के बारे में लिखा है।

http://phpadvent.org/2010/localization-by-anthony-gentile

+0

आपके उत्तर के लिए धन्यवाद। मुझे लगता है कि यह दृष्टिकोण अभी भी विभिन्न भाषाओं वाले देशों में कुछ समस्याएं पैदा करेगा। इसके अलावा मैं प्रत्येक अंग्रेजी भाषी देश के लिए en_US का उपयोग करने में सक्षम नहीं हूं। – Nico

0

मेरे मामले में, मैं उपयोगकर्ता पूछने के लिए उनकी भाषा और मुद्रा जब वे पहली बार मेरी साइट पर जाएँ चयन करना चाहते हैं। भाषा में इंटरफ़ेस का चयन करें, मैं डिफ़ॉल्ट भाषा के संदर्भ के रूप में उपयोगकर्ता के ब्राउज़र से भाषा कोड लेता था। और मैं अपनी साइट में त्वरित भाषा स्विच बटन भी प्रदान करता हूं।

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

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