2011-03-10 24 views
15

निम्न उदाहरण मैक ओएस एक्स पर अपाचे के साथ काम करता है, यानी मुझे अनुवादित स्ट्रिंग को प्रतिबिंबित किया जाता है। लेकिन उबंटू पर lighttpd के साथ मुझे मूल पाठ 'निष्क्रिय खाता' मिलता है। मैंने बिना किसी किस्मत के पर्यावरण वैरिएबल के संयोजन के सभी प्रकार की कोशिश की है। यह फ़ाइल अनुमतियां नहीं है क्योंकि मैं .mo फ़ाइल की सामग्री को प्रतिबिंबित कर सकता हूं।Ubuntu पर गेटटेक्स्ट (php) प्राप्त नहीं कर सकता

<?php 

//$locale = 'sv_SE.UTF-8'; 
$locale = 'sv_SE'; 

$dir = dirname(__FILE__); 

// File permission is apparantly not a problem as this works... 
//echo file_get_contents($dir . '/sv_SE/LC_MESSAGES/flattr.mo'); 

putenv("LANG=$locale"); 
putenv("LANGUAGE=$locale"); 
putenv("LC_ALL=$locale"); 
putenv("LC_MESSAGES=$locale"); 
setlocale(LC_ALL, $locale); 
setlocale(LC_MESSAGES, $locale); 
//setlocale(LANG, $locale); 
//setlocale(LANGUAGE, $locale); 

bindtextdomain('flattr', $dir); 
//bind_textdomain_codeset("flattr", 'UTF-8'); 
textdomain('flattr'); 

echo _("Inactive account"); 

?> 

किसी के पास कोई विचार है?

+0

ठीक से ओएस ही में स्थापित भाषा है? मेरा पिछला प्रश्न देखें शायद http://stackoverflow.com/questions/1431354/php-gettext-in-norwegian – fabrik

+1

मदद कर सकते हैं क्या आपने sv_SE के लिए लोकेल बनाया है? यदि नहीं, तो 'sv_SE.UTF-8' युक्त'/etc/locale.gen' वाली रेखा जोड़ें (या असम्बद्धता) और फिर 'सुडो लोकेल-जीन' चलाएं। –

+0

सुडो लोकेल-जेन sv_SE.UTF-8 (और फिर lighttpd को पुनरारंभ करें) काम किया। क्या आप इसे इस प्रश्न के उत्तर के रूप में पोस्ट कर सकते हैं ताकि मैं इसे सही के रूप में चिह्नित कर सकूं? धन्यवाद! – pthulin

उत्तर

33

मुझे एक ही समस्या का सामना करना पड़ रहा था। मैं उबंटू 10.10 पर इसे ठीक करने के लिए किए गए कार्यों का वर्णन करूंगा।

1) सुनिश्चित करें कि आप 'gettext' इंस्टॉल किया गया है,

sudo apt-get install gettext 

वैकल्पिक रूप से, आप स्थापित कर सकते हैं 'php-gettext' अगर 'gettext' स्थापित नहीं किया जा सकता है। यदि आपके पास पहले से 'gettext' स्थापित है तो पैकेज 'php-gettext' की आवश्यकता नहीं है।

2) फिर अपनी भाषा के लिए लोकेल उत्पन्न करें। इस उदाहरण में मैं 'sv_SE' का उपयोग करूंगा। '/ Usr/share/i18n/समर्थित' में समर्थित स्थान को फिर से देखें,

less /usr/share/i18n/SUPPORTED 

आप कई पंक्तियों 'sv_SE' के साथ शुरू मिल जाएगा,

sv_SE.UTF-8 UTF-8 
sv_SE ISO-8859-1 
sv_SE.ISO-8859-15 ISO-8859-15 

इसका मतलब है आप कई विकल्प हैं sv_SE के लिए लोकेल उत्पन्न करने के लिए। विकल्पों में से एक के पास अवधि (।) नहीं है (यानी sv_SE ISO-8859-1); यह उस लोकेल के लिए डिफ़ॉल्ट वर्ण सेट है। डिफ़ॉल्ट वर्ण सेट के लिए स्थान

sudo locale-gen sv_SE.UTF-8 

पुनः प्रारंभ अपाचे उत्पन्न करने के लिए, निम्न आदेश चला,

sudo locale-gen sv_SE 

आप, UTF-8 वर्ण सेट के लिए कि वातावरण उत्पन्न इस आदेश को चलाने के लिए चाहते हैं, स्थानों पैदा करने के बाद,

sudo service apache2 restart 

3) अंत में (यह नई जनरेट स्थानों अन्यथा नहीं मिलेगा), अपने PHP स्क्रिप्ट लोकेल आप उत्पन्न मैच के लिए अद्यतन करें। यदि आपने 'sv_SE' के लिए लोकेल बनाया है,

सेटलोकेल (LC_ALL, "sv_SE");

लेकिन आपको लगता है कि स्थान, उपयोग की UTF-8 बराबर,

setlocale उत्पन्न करता है, तो (LC_ALL, "sv_SE.UTF-8");

सभी को अभी काम करना चाहिए।

+0

+1 बहुत बहुत धन्यवाद! – iLLin

+4

डेबियन पर पता चला है कि 'लोकेशंस-ऑल' नामक एक पैकेज है जो मैन्युअल रूप से 'लोकेल-जीन 'किए बिना एक आसान तरीका प्रदान कर सकता है। मुझे 'लोकेशन स्थापित करने के लिए भी उपयुक्त' – kizzx2

+0

+1 की आवश्यकता है, बहुत अच्छी तरह समझाया गया है! –

1

हालांकि मैंने स्वीकार किए गए उत्तर में उल्लिखित चरणों का पालन किया, लेकिन मैं इसे उबंटू 14.04 एलटीएस पर काम नहीं कर सका। मुझे दो महत्वपूर्ण चीजें करना पड़ा:

(1) संदेश.एमओ फ़ाइल उत्पन्न करने से पहले, मुझे संदेश में निर्दिष्ट करना था।पो स्पष्ट रूप से UTF-8 चारसेट के लिए:

msgid "" 
msgstr "Project-Id-Version: PACKAGE VERSION\n" 
     "Report-Msgid-Bugs-To: \n" 
     "POT-Creation-Date: 2016-12-19 16:28+0530\n" 
     "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
     "Last-Translator: FULL NAME <[email protected]>\n" 
     "Language-Team: LANGUAGE <[email protected]>\n" 
     "Language: \n" 
     "MIME-Version: 1.0\n" 
     "Content-Type: text/plain; charset=UTF-8\n" <---------change here 
     "Content-Transfer-Encoding: 8bit\n" 

(2) मैं एक ही फ़ोल्डर नाम बनाए रखने के लिए के रूप में स्थान स्थापित किया था। उदाहरण के लिए, मैंने sudo locale-gen kn_IN चलाकर कन्नड़ स्थापित किया। यह kn_IN.UTF-8 उत्पन्न हुआ। यूटीएफ -8 में पूंजी अक्षरों और हाइफ़न पर ध्यान दें।

पीएचपी स्क्रिप्ट::

// I18N support information 
$locale = "kn_IN.UTF-8";  <----------change here 
putenv("LANG=".$locale); 
putenv("LC_ALL=".$locale); 
setlocale(LC_ALL, $locale); 

$domain = 'messages'; 
bindtextdomain($domain, "./Locale"); 
bind_textdomain_codeset($domain, 'UTF-8'); 
textdomain($domain); 

फ़ोल्डर का नाम:

project_folder 
    /Locale 
     /kn_IN.UTF-8  <------change here 
      /LC_MESSAGES 
       /messages.mo 

मेरी php स्क्रिप्ट में और के लिए फ़ोल्डर का नाम जहाँ मैं messages.mo फ़ाइल डाल लोकेल सेट करते समय मैं इस एक ही नाम का इस्तेमाल किया उबंटू फ़ोल्डर और फ़ाइल नामों के प्रति संवेदनशील है। तो सुनिश्चित करें कि उपरोक्त दिखाए गए अनुसार पूंजी अक्षरों को बनाए रखा जाता है।

संदर्भ दस्तावेज़ जो मुझे सही दिशा में इशारा किया: https://sendy.co/forum/discussion/935/translation-not-being-picked-up-on-ubuntu/p1