2009-10-25 18 views
5

मैं एक वेब अनुप्रयोग के लिए बहु भाषा सामग्री स्टोर करने के लिए एक मानक-अनुरूप तरीका की तलाश में हूं। अब तक, मैंने अपने स्वयं के "अनुवाद()" फ़ंक्शंस को नियोजित किया है जो डेटाबेस में किसी फ़ाइल या किसी शब्दकोश तालिका से डेटा पढ़ते हैं। हालांकि, यदि आप वेब ऐप की विभिन्न प्रतियों के साथ काम करते हैं तो डेटाबेस तालिका में शब्दकोश को अद्यतित रखना बहुत बोझिल है।i18n लेकिन लोकेल परेशानी के बिना?

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

क्या यह किसी भी तरह गेटटेक्स्ट का उपयोग कर संभव है? या क्या किसी को PHP के लिए एक और सरल, छोटा, तेज़ (!) I18n समाधान पता है जो .po/.mo फ़ाइलों के साथ काम कर सकता है, अधिमानतः PHP एक्सटेंशन की आवश्यकता के बिना?

+2

गेटटेक्स्ट एक्सटेंशन का उपयोग किये बिना PHP में गेटटेक्स्ट का उपयोग करना व्यावहारिक रूप से संभव नहीं है, लेकिन चिंता न करें यह PHP का एक सामान्य/मानक विस्तार है और अधिकांश स्थापना पहले ही सक्रिय हो चुकी है। – sorin

+1

@ सोरीन: यह संभव है, अधिकांश मूलभूत PHP कार्यान्वयन है, यदि सभी नहीं, गेटटेक्स्ट फ़ंक्शंस। –

+0

@ votingmeisfree वर्डप्रेस और केकफ़्पी, कुछ नाम देने के लिए, gettext कार्यान्वयन के बिना पीओ और एमओ फाइलों का उपयोग करें। वे फ़ाइल को सीधे खोलते हैं। – T0xicCode

उत्तर

2

Zend_Translate यह साथ काम करता है

http://framework.zend.com/manual/en/zend.translate.adapter.html#zend.translate.adapter.gettext

+0

और इसे गेटटेक्स्ट एक्सटेंशन की आवश्यकता नहीं है :) उनके पास अधिक अनुकूल स्रोतों के लिए एडाप्टर भी हैं - सरणी, एक्सएमएल, सीएसवी आदि –

+0

धन्यवाद, यह दिलचस्प लग रहा है। मैं थोड़ी देर के लिए देख रहा हूं और ज़ेंड देख रहा हूं और शायद मैं इसे आज़माउंगा। अगर कोई भी जानता है तो मैं अभी भी हल्के स्टैंड-अलोन समाधान को पसंद करूंगा। –

+0

ओह, यह ऐसा दिखने से अधिक हल्का वजन है। आप केवल उन्हीं कक्षाओं का उपयोग कर सकते हैं जिन्हें आप चाहते हैं: Zend_Translate के लिए, आपको केवल Zend_Translate, Zend_Locale, Zend_Loader और Zend_Exception की आवश्यकता है (शायद मैं गलत हूं और आपको अधिक या कम की आवश्यकता होगी, बस इसे आज़माएं) –

3

इस विधि अमानक स्थानों के साथ भी काम करना चाहिए:

$locale = 'someWeirdLocale'; 

putenv('LC_MESSAGES=' . $locale); 
bindtextdomain('domain', './locale'); 
textdomain('domain'); 

का आनंद लें!

+1

यह विंडोज 7 - PHP5 5.3.0 पर काम नहीं करता है – Blaise