2013-03-21 8 views
10

मैं एक ओपन सोर्स प्रोजेक्ट अंतर्राष्ट्रीयकरण के लिए विकल्पों को देख रहा है स्थापित करने के लिए बिना:उपयोग पीएचपी gettext स्थानों

  • gettext, हर कोई सिफारिश करने के लिए लगता है जो, जाहिरा तौर पर स्थानों की जरूरत होने के लिए "अपने सिस्टम पर स्थापित " इस्तेमाल किया जाएगा। PHP मैनुअल पर यह note देखें, जो मेरी स्थिति को बिल्कुल दर्शाता है। यह SO question भी एक ही समस्या के बारे में पूछता है। यह ओपन सोर्स प्रोजेक्ट के लिए उपयुक्त नहीं है क्योंकि मुझे विश्वास नहीं है कि अंतिम उपयोगकर्ताओं के पास उनके सिस्टम पर उचित लोकेशन स्थापित हैं। इसके अलावा, यह बहुत अजीब बात है कि आपको केवल तारों का उपयोग करने के लिए स्थानीय लोगों को स्थापित करना होगा (आईएमओ)।

  • कभी-कभी गेटटेक्स्ट के पक्ष में Zend_Translate की भी अनुशंसा की जाती है, लेकिन मैं ज़ेंड फ्रेमवर्क का उपयोग नहीं कर रहा हूं इसलिए मुझे नहीं लगता कि यह मेरे लिए एक विकल्प है। कुछ लोगों ने कहा है कि आप इसे ज़ेंड फ्रेमवर्क से विभाजित कर सकते हैं, लेकिन मुझे कोई सुराग नहीं होगा। अगर कोई मुझे बता सकता है कि मुझे कौन सी फाइलें चाहिए (मैंने ज़ेंड फ्रेमवर्क की टैरबॉल डाउनलोड की है) तो मैं ज़ेंड_Translate का उपयोग करने के लिए खुला होगा।

  • Arrays। यही वह है जो मैं अब कर रहा हूं, लेकिन यह आदर्श नहीं है क्योंकि:

    • यह प्रत्येक अनुवाद को परिभाषित करने के लिए बहुत सारी मेमोरी का उपयोग करेगा, जब अधिकांश वर्तमान पृष्ठ द्वारा उपयोग नहीं किया जाएगा।
    • मैं अपने आप को सरणी, जो पहले से ही है लंबे कोड की 1000 लाइनों हो जाते हैं और मैं मुश्किल से अभी तक कुछ भी जोड़ दिया है में कुंजी डुप्लिकेट खोजने के साथ समस्या हो रहा हूँ ...
    • इसका मतलब है कि नान प्रोग्रामर्स वास्तव में अनुवाद नहीं कर सकता , जबकि POedit मानक है कि हर किसी का उपयोग करने की उम्मीद है।

मैं किसी भी तरह gettext या Zend_Translate बिना .mo फ़ाइलों को पढ़ सकता है, या मैं gettext का उपयोग करना चाहिए? यदि हां, तो मैं उपरोक्त से जुड़े प्रश्न में सभी लोकेशंस कैसे काम कर सकता हूं?

संपादित करें: अब मैं Zend_Translate का उपयोग करने के लिए तैयार हूं। मुझे बस काम करने की ज़रूरत है कि मुझे कौन सी फाइलें चाहिए (यह बहुत अच्छा होगा अगर उन्हें एक फाइल में जोड़ा जा सके) - मैं अपनी परियोजना में संपूर्ण ज़ेंड फ्रेमवर्क नहीं चाहता हूं।


अद्यतन:

  • Moodle arrays का उपयोग करता है: मैं यह देखने के लिए कितना बड़ा ओपन सोर्स प्रोजेक्ट i18n संभाल दिलचस्पी थी।
  • ड्रूपल arrays, with a database fallback का उपयोग करने लगता है। वे एक सामान्य लोकेल प्राप्त करने और पूरे setlocale गड़बड़ को बाधित करने के लिए setlocale('C') चलाते हैं।
  • वर्डप्रेस i18n के लिए heaps of their own functions का उपयोग करता है, हालांकि नीचे गेटटेक्स्ट का उपयोग करता है।

तो उन तीनों यादृच्छिक परियोजनाओं में से कोई भी Zend_Translate का उपयोग नहीं करता है, न ही gettext सीधे, जहां तक ​​मैं देख सकता हूं।

शायद C लोकेल का उपयोग करना एक अच्छा विचार है, टेक्स्ट डोमेन नाम में भाषा का नाम संग्रहीत करें, और वहां से जाएं।


तो यहाँ

जहाँ तक मैं उस के साथ लिया है:

$lang = 'de'; //debug 
setlocale(LC_ALL, 'C'); 
bindtextdomain('default', PATH . "/locale/$lang"); 
bind_textdomain_codeset('default', 'UTF-8'); 
textdomain('default'); 

var_dump(file_exists(PATH . "/locale/$lang/C/LC_MESSAGES/default.mo")); //bool(true) 

लेकिन मैं अभी भी सिर्फ अंग्रेजी स्ट्रिंग मिलता है, भले ही मैं poedit का उपयोग किया है, msgfmt आदि उचित बनाने के लिए फ़ाइलें। मैंने अपाचे को पुनरारंभ करने का भी प्रयास किया है।

+0

स्थानीय स्थापित करें? आपका क्या अर्थ है? आप केवल विशिष्ट '.mo' फ़ाइलों को शामिल करते हैं और उपयुक्त लोकेल सेट करते हैं। यह वास्तव में उतना डरावना नहीं है जितना आप इसे बनाते हैं। – vanneto

+2

यह मामला अच्छा होगा अगर यह मामला था, लेकिन मुझे नहीं लगता कि यह है ... प्रश्न के शीर्ष पर लिंक देखें। [उपयोगकर्ता नोट्स] (http://www.php.net/manual/en/book.gettext.php#91187) PHP मैनुअल पर यह भी कहता है, और आपको यह देखने के लिए 'लोकेल-ए' चलाने की आवश्यकता है कि कौन से स्थान अतिरिक्त भाषा पैक स्थापित करने के लिए उपयोग करने के लिए उपलब्ध हैं (और 'सुडो एपीटी-स्थापित भाषा-पैक-लैंगकोड-बेस' स्थापित करें)। मेरे अपने परीक्षण भी इसे प्रतिबिंबित करते हैं। यह ओपन सोर्स प्रोजेक्ट के लिए उपयुक्त नहीं है क्योंकि मैं उपयोगकर्ताओं को ऐसा करने की उम्मीद नहीं कर सकता। – stackunderflow

+0

सरल कुंजी => मूल्य सरणी पूरी अनुवाद प्रणाली के लिए शायद ही पर्याप्त हैं। क्या वे बहुवचन का समर्थन करते हैं? प्रसंग? श्रेणियाँ? डोमेन? टिप्पणियाँ? ये सभी सुविधाएं हैं जिन्हें आप * उपयोग कर रहे हैं, शायद आप इसे अभी तक नहीं जानते हैं। यदि आप गेटटेक्स्ट के विपरीत हैं, तो Zend_Translate को एक शॉट दें। इसके खिलाफ आपके कारण वास्तव में गैर कारण हैं। – deceze

उत्तर

2

यहाँ समाधान है:

$lang = 'de'; //debug 
setlocale(LC_ALL, 'C.UTF-8'); 
bindtextdomain('default', PATH . "/locale/$lang"); 
bind_textdomain_codeset('default', 'UTF-8'); 
textdomain('default'); 

कि और उदाहरण मैं अपने जवाब के तल पर तैनात के बीच फर्क सिर्फ इतना है कि यह C.UTF-8 न सिर्फ C का उपयोग करता है।

मैं इसका अधिक परीक्षण करूँगा, और यदि यह क्रॉस-प्लेटफ़ॉर्म काम करता है, और यदि मुझे कुछ और पता चलता है तो यह उत्तर अपडेट कर देगा।

+0

बधाई हो, यह मेरे लिए भी काम करता प्रतीत होता है। लेकिन यह वास्तव में हैकी लगता है और मुझे विश्वास नहीं है कि यह हल करने का यह एक आम तरीका है। मुझे समझ में नहीं आता कि "सीयूटीएफ -8" भाषा क्या है लेकिन यह हर पर्यावरण पर स्थापित होने लगती है। चूंकि आपकी पोस्ट 2 साल पहले है, इसलिए मैं आपसे पूछूंगा कि क्या आपको इस दौरान कोई बेहतर समाधान मिला है। – steven

+0

क्षमा करें @steven, मैंने वास्तव में PHP का उपयोग नहीं किया है। हालांकि आजकल मैं सबसे अच्छे अभ्यास से परेशान हूं और शायद गेटटेक्स्ट की निराशा को जानकर सरणी आधारित समाधान के लिए सीधे जाऊंगा। – stackunderflow

+0

क्या आप जानते हैं कि विंडोज़ के लिए xampp पर लोकल कैसे स्थापित करें? – Gonzalo

3

gettext-php आज़माएं। यह PHP में लिखित गेटटेक्स्ट के लिए एक ड्रॉप-इन प्रतिलिपि है। यह मूल रूप से वर्डप्रेस के लिए किया गया था, मुझे लगता है, क्योंकि डब्ल्यूपी को साझा मेजबानों पर चलाने की ज़रूरत है जो हमेशा हर लोकेल के लिए कॉन्फ़िगर नहीं होते हैं। ऐसा लगता है कि यह भी आपका मुद्दा है।

इसमें कुछ प्रदर्शन हिट है, लेकिन यह मेरे लिए कोई मुद्दा नहीं है।

+0

सुझाव के लिए धन्यवाद। अब जब मुझे (अंततः) गेटटेक्स्ट जा रहा है, मुझे लगता है कि मैं इसके साथ रहूंगा, लेकिन मैं इसे ध्यान में रखूंगा क्योंकि मुझे कोई और समस्या है। – stackunderflow

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