2010-03-11 15 views
7

देता है मैं अपनी वेबसाइट पर gettext स्थानीयकरण समर्थन जोड़ने का प्रयास कर रहा हूं। मैं कैसे सेटअप करने के लिए gettext पर विभिन्न गाइड का पालन किया है और निम्नलिखित किया है:PHP gettext फ़ंक्शन केवल orignal untranslated स्ट्रिंग

मैं अपने प्रोजेक्ट निर्देशिका की जड़ में निम्न फ़ाइलें और निर्देशिका बना लिया है:

test.php 

locale/ 
    de_DE 
    LC_MESSAGES 
     messages.mo 
     messages.po 

    en_GB 
    LC_MESSAGES 
     messages.mo 
     messages.po 

मैं Poedit का उपयोग किया है उपरोक्त .po और mo फ़ाइलों को बनाने के लिए। मैंने मुकदमा किया है कि यह यूनिक्स लाइन एंडिंग्स, यूटीएफ -8 का उपयोग करें और तदनुसार भाषा और देश सेट करें।

मैं तो test.php नामक एक PHP स्क्रिप्ट जो निम्नलिखित कोड है बना लिया है: "। यह एक परीक्षण है"

<?php 

    define('LOCALE', 'de_DE'); 

    // Set up environmental variables 
    putenv("LC_ALL=" . LOCALE); 
    setlocale(LC_ALL, LOCALE); 
    bindtextdomain("messages", "./locale"); 
    bind_textdomain_codeset("messages", LOCALE .".utf8"); 
    textdomain("messages"); 

    die(gettext('This is a test.')); 

?> 

मैं पाठ आयात किया है Poedit करने के लिए और अनुवाद की आपूर्ति की और इसे बचाया।

लेकिन किसी कारण से test.php स्क्रिप्ट केवल मूल पाठ को अप्रतिबंधित आउटपुट करेगा। यह अनुवाद फ़ाइलों के लिए संस्करण लोड करने से इंकार कर देता है।

यह ध्यान देने योग्य है कि सर्वर लिनक्स (उबंटू), अपाचे 2.2.11 और PHP 5.2.6-3ubuntu4.5 चला रहा है। मैंने phpinfo() चेक किया है और गेटटेक्स्ट सक्षम है।

क्या कोई मेरी मदद कर सकता है? धन्यवाद।

उत्तर

14

आपकी समस्या आपके सिस्टम पर अनुपलब्ध लोकेल से संबंधित हो सकती है। जर्मन लोकेल स्थापित करें और सब कुछ काम करना चाहिए:

sudo apt-get install language-pack-de-base 

फिर, इस मुद्दे को निम्न आदेश और आप जर्मन स्थानों देखना चाहिए:

locale -a 

उसके बाद, निम्नलिखित कोड काम करना चाहिए, तो आप अभी भी यह सोचते हैं आपके द्वारा वर्णित निर्देशिका संरचना पर .po और .mo फ़ाइलें हैं:

<?php 

    setlocale(LC_ALL, 'de_DE.UTF-8'); 
    bindtextdomain('messages', './locale'); 
    textdomain('messages'); 

    echo gettext('This is a test.'); 

    ?> 
+0

तो, क्या यह काम करता है? क्या वास्तव में एक लापता लोकेल या कुछ और से संबंधित समस्या थी? – bpedro

+0

हां! यह काम किया है आपकी मदद के लिए बहुत बहुत शुक्रिया। – Camsoft

+0

कोई समस्या नहीं! मैं खुश हूं कि मैं मदद कर सका! – bpedro

0

निम्नलिखित

<?php 

    define(LC_MESSAGES, 'de_DE'); 

    // Set up environmental variables 
    putenv("LANGUAGE=de_DE"); 
    bindtextdomain("*", dirname(__FILE__).'/locale'); 
    bind_textdomain_codeset("messages", 'UTF-8');  

    die(gettext('This is a test.')); 

?> 
+0

दुर्भाग्य से यह काम नहीं किया। यह अभी भी अंग्रेजी संस्करण प्रदर्शित करता है। – Camsoft

1

कोशिश हाँ, हाँ, पीएचपी के gettext समर्थन फिर से। बस एक संकेत, जो आपके लिए सहायक हो सकता है या नहीं भी हो सकता है:

PHP के भयानक गेटटेक्स्ट कार्यान्वयन के कारण, वर्डप्रेस जैसे कई ओपन सोर्स प्रोजेक्ट्स ने इसे एक स्विच किया: http://savannah.nongnu.org/projects/php-gettext/ और मूल संस्करण को पूरी तरह से बाईपास करें।

मैंने अपनी परियोजनाओं में से एक में भी ऐसा किया, और मैं यह नहीं कह सकता कि मुझे कुछ याद आती है।

व्यावसायिक परियोजनाओं के लिए नुकसान: यह जीपीएल के तहत है।

+0

दिलचस्प। मैं इसे देख लूंगा। अरह हालांकि यह जीपीएल होने की समस्या है। – Camsoft

+0

इसका उपयोग करने में सक्षम नहीं है क्योंकि आपने कहा है कि यह जीपीएल है और यह मुद्दा मैं एक वाणिज्यिक परियोजना पर हूं। – Camsoft

+0

मुझे समस्या पता है। हमारे यहां एक बंद-स्रोत प्रोजेक्ट भी है, और हम स्वयं को कुछ लागू करने के लिए बाएं हैं, क्योंकि हम php-gettext का उपयोग नहीं कर सकते (या PHP के गेटटेक्स्ट मॉड्यूल पर भरोसा करना चाहते हैं)।हालांकि, मैंने सोचा कि यह एक उत्तर के लायक है, क्योंकि यह अन्य जीपीएल के PHP सॉफ्टवेयर में शामिल करने के लिए एक महत्वपूर्ण परियोजना है। – Boldewyn

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