2012-10-19 19 views
9

मैं अंग्रेजी में मेरी php gettext डिफ़ॉल्ट भाषा है में अनुवाद बनाओ चलो कहते हैं किकई भाषाओं

मैं अपने नियंत्रक में से एक में चाहते हैं, 2 अन्य भाषाओं में कुछ शब्दों का अनुवाद और उन सब एक सरणी में डालने के लिए करते हैं।

आदर्श मैं

$word_sv = gettext($word, 'sv_SV'); 
$word_fi = gettext($word, 'fi_FI'); 

कर सकता है, लेकिन यह मौजूद नहीं है।

प्रत्येक बार कुल gettext settings बदलने का एकमात्र तरीका है?

function setLang($lang){ 
    putenv("LC_ALL=$lang"); 
    setlocale(LC_ALL, $lang); 
    bindtextdomain("myPHPApp", "./locale"); 
    textdomain("myPHPApp"); 
} 

setLang('sv_SV'); 
$word_sv = gettext($word); 
setLang('fi_FI'); 
$word_fi = gettext($word); 

संबंधित: के बाद गूगल पर देखा: i18n with gettext but without the locale hassle?


संपादित

यहाँ प्रस्तावित जवाब समाधान हैं:

+0

बस एक नोट, आप एक क्वेरी स्ट्रिंग का उपयोग कर विशिष्ट साइटों को खोजने के लिए Google की श्रेष्ठ खोज का उपयोग कर सकते हैं: 'site: stackoverflow.com php translate'। यह 'php translate' के लिए बस SO खोजेगा। – Josh

+0

क्या आपने http://www.php.net/manual/en/function.dcgettext.php देखा है? यह कुछ मदद की हो सकती है। – hakre

+1

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

उत्तर

1

मुझे गेटटेक्स्ट का उपयोग करने के दर्द का पता है, लेकिन इसका प्रदर्शन मुझे इसके साथ रखता है!

आपके मामले में, आप इस छोटी परियोजना को देखना चाहेंगे? मुझे यकीन है कि यह आपकी मदद कर सकता है!

यह आसानी से अनुवाद के साथ .ini फाइलों का उपयोग करता है, आप फ़ाइलों के बीच स्वतंत्र रूप से स्विच कर सकते हैं और एक ही शब्द के लिए अलग-अलग भाषाओं को गूंज सकते हैं।

https://github.com/Philipp15b/php-i18n

+1

thx कोशिश करेगा (बहुत खराब PHP यह मूल रूप से ऐसा नहीं कर सकता) –

+0

सच है, मैं अपनी खुद की अनुवाद प्रणाली लिखने के कगार पर रहा हूं, लेकिन जो कुछ भी मैं लिखता हूं वह तुलना नहीं कर सकता कि कितनी तेज़ गेटटेक्स्ट है, इसलिए मैं बाध्य हूं इसके लिए समय के लिए, लेकिन ऐसा इसलिए है क्योंकि मेरा फेसबुक गेम हजारों एक साथ विचारों की सेवा करता है, इसलिए आपके मामले के आधार पर प्रदर्शन मेरे लिए बहुत महत्वपूर्ण है, मेरे द्वारा पोस्ट की गई परियोजना का अच्छा उपयोग हो सकता है :) शुभकामनाएं और हा सीके गिब्सन! ;) –

0

मुझे लगता है कि एक स्पष्ट जवाब अपने स्वयं के वैश्विक समारोह रोल करने के लिए है:

function getLocalText($string, $lang) 
{ 
    putenv("LC_ALL=$lang"); 
    setlocale(LC_ALL, $lang); 
    bindtextdomain("myPHPApp", "./locale"); 
    textdomain("myPHPApp"); 

    return gettext($string); 
} 

$word_fi = getLocalText($word, 'fi_FI'); 
+2

हाँ अगर मैं इसे अंत में प्रारंभिक लोकेल पर सेट करना न भूलूं, तो gettext के लिए कोई और विकल्प है? –

+1

अन्यथा आपका उत्तर वास्तव में मदद नहीं करता है मुझे –

1

आप यहाँ gettext को, कंप्यूटर चलो बाध्य कर रहे हैं, तो आप के लिए कार्य करते हैं।

आपके पास या तो उन शब्दों की एक सूची है जो आप सभी भाषाओं के खिलाफ जांचना चाहते हैं, पहले प्रत्येक भाषा के लिए शब्दसूची करें। यह आपको प्रत्येक शब्द और भाषा के बीच setlanguage फ़ंक्शन पर कॉल करने के लिए कुछ ओवरहेड छोड़ देगा।

आप प्रत्येक भाषा, प्रत्येक शब्द जाना, कार्यों लिखना कि जिस तरह से करना चाहते हैं:

function gettext_by_lang($lang, $word) { 
    putenv("LC_ALL=$lang"); 
    setlocale(LC_ALL, $lang); 
    bindtextdomain("myPHPApp", "./locale"); 
    textdomain("myPHPApp"); 
    return gettext($word); 
} 

$word_sv = gettext_by_lang('sv_SV', $word); 
$word_fi = gettext_by_lang('fi_FI', $word); 

यह कम से कम अपने कोड अधिक कॉम्पैक्ट होगा। एक अन्य विचार जो दिमाग में आता है वह पीओ और एमओ फाइलों के लिए एक पार्सर का उपयोग कर रहा है ताकि आप डेटा की जांच कर सकें।

पीएचपी में से एक Wordpress/Glotpress के साथ शिपिंग है:

हो सकता है कि इस मदद करता है। वह पुस्तकालय बनाए रखा जा रहा है।

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