2011-01-13 15 views
5

मैं एक पुलिस और एक फ़ोल्डर जिसका पता /स्थानीय/nld_nld/LC_MESSAGES/ है में एक मो फ़ाइल है। दोनों फाइलों के नाम संदेश हैं।पीएचपी के साथ पीओ/पॉट फाइलों का उपयोग कैसे करें?

try.php:

<?php 
require_once("Localization.php"); 
echo _("Hello World!"); 
?> 

Localization.php यहाँ जाता है:

<?php 
$locale = "nld_nld"; 
if (isSet($_GET["locale"])) $locale = $_GET["locale"]; 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
bindtextdomain("messages", "./locale"); 
bind_textdomain_codeset("messages", 'UTF-8'); 
textdomain("messages"); 
?> 

दोनों try.php और स्थानीयकरण फ़ाइलें हैं मैं निम्नलिखित कोड का उपयोग करने की कोशिश कर रहा है एक ही निर्देशिका में। इसके अलावा, मैं xampp का उपयोग करता हूं। मैंने phpinfo(); भी लागू किया। तालिका में, 'गेटटेक्स्ट सपोर्ट' के सामने, सक्षम किया गया था। messages.po और messages.mo फ़ाइलें मान्य फ़ाइलें जो मैं poedit उपयोग कर बनाई गई है। मैं एक विंडोज उपयोगकर्ता हूँ। हालांकि, जब मैंने try.php खोला, तो उसने बस हैलो वर्ल्ड को प्रतिबिंबित किया! (नहीं अपने अनुवादित स्ट्रिंग। इसके अलावा, मैं पुलिस फ़ाइल 100% (poEdit के अनुसार)। फिर भी, मैं परिणाम नहीं मिल रहा है अनुवाद किया है। इस पर एक छोटी सी मदद की सराहना की जाएगी।

धन्यवाद ! अग्रिम में

उत्तर

0

समस्या हो सकती है "-" UTF-8 में वहाँ भी अन्य लाइनों विंडोज़ संगतता के लिए जोड़ने के लिए कर रहे हैं इस पढ़ने के लिए प्रयास करें:। http://www.php.net/manual/en/function.setlocale.php#89076

2

जब कोड पर वापस देख रहा है। स्पैनिश अनुवाद के लिए एक कार्यस्थल पर जगह पर, मुझे पता है कि मेरे पास एक अलग क्रम में भी एक ही पंक्ति है इससे कोई फर्क पड़ता है? उदाहरण के लिए:

<?php 
putenv('LC_MESSAGES=es_ES'); 
setlocale(LC_MESSAGES, 'es_ES.utf8'); 
bindtextdomain('es','/full/path/here/application/locale'); 
textdomain('messages-es'); 
bind_textdomain_codeset('messages-es', 'UTF-8'); 
?> 

ऊपर कोड काम करने के लिए के लिए, मेरे मो फ़ाइल /full/path/here/application/locale/es_ES.utf8 फ़ोल्डर में है।

<?php 
function TestLang($langCode) { 
    echo('<b>TESTING LANG CODE: ' . strtolower($langCode) . '</b><br />'); 
    putenv('LC_MESSAGES=' . strtolower($langCode) . '_' . strtoupper($langCode)); 
    echo('LC_MESSAGES: ' . getenv('LC_MESSAGES') . '<br />'); 
    $localeResult = setlocale(LC_MESSAGES, strtolower($langCode) . '_' . strtoupper($langCode) . '.utf8'); 
    echo('Locale: ' . $localeResult . '<br />'); 
    $textDomain = bindtextdomain(strtolower($langCode), ROOT . '/' . APP_DIR . '/locale'); 
    echo('Text Domain: ' . $textDomain . '<br />'); 
    textdomain(strtolower($langCode)); 
    $codeSet = bind_textdomain_codeset(strtolower($langCode), 'UTF-8'); 
    echo('Code Set: ' . $codeSet . '<br />'); 
    echo('.mo File: ' . $textDomain . '/' . $localeResult . '/LC_MESSAGES/' . $langCode . '.mo<br />'); 
    echo('<br />-- ' . _('Hello World!') . ' --<br />'); 
} 

TestLang('en'); 
TestLang('de'); 
TestLang('es'); 
TestLang('fr'); 
// etc.. 
?> 
+0

textdomain() आम तौर पर पिछले समारोह कॉल (वास्तव में यह पहले हर उर्फ ​​gettext की आवश्यकता हो सकती है _() कहते हैं यदि आप एकाधिक डोमेन के साथ काम करते हैं।सबसे पहले आप सभी डोमेन बांधते हैं, फिर आप एक का चयन करते हैं। – eckes

+0

आपके उदाहरण में आप दो अलग-अलग डोमेन नाम 'es' और 'message-es' का उपयोग करते हैं। यह काम नहीं कर सकता है (और आमतौर पर आपके पास फ़ाइल नाम में भाषा पहचानकर्ता नहीं है क्योंकि इसे इसके बजाय निर्देशिका द्वारा परिभाषित किया गया है)। तो "/full/path/here/application/locale/es_ES/LC_MESSAGES/messages.mo" डोमेन "संदेश" और LC_TYPE es_ES का फ़ाइल नाम होगा। – eckes

0

आउटपुट $result=bindtextdomain($domain,$path) की वापसी मान, यह आप अगर अपने स्थानीय पथ वास्तव में है पथ बता देंगे आप अपने अनुवाद फ़ाइलें उम्मीद:

शायद निम्नलिखित कोड मैं पहले का उपयोग किया है आप अधिक समस्या निवारण मदद कर सकता है जीवन के लिए। और फिर उन फ़ाइलों की फ़ाइल एक्सेस अनुमतियों की जांच करें यदि वे (और रूट तक निर्देशिका) www-user द्वारा accesable। यह ./locale/LC_MESSAGES/nld_nld/

textdomain($domain) में कहीं पिछले विधि (से पहले वास्तविक gettext अनुवाद) होना चाहिए। बाइंडटेक्स्टोमेन और टेक्स्टडोमेन का डोमेन पैरामीटर एक ही डोमेन नाम होना चाहिए (यह आपके उत्तर में नहीं था) और एमओ फाइल बेस नाम के बराबर होना चाहिए।

मेक भी अपने php फ़ाइलें के बारे में सुनिश्चित कोई भी एक और textdomain का उपयोग करता है, खासकर जब आप "require_once" का उपयोग करें।

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

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