2010-05-26 7 views
6

पर काम नहीं करता है मेरे पास एक वेबसाइट है। मैं गेटटेक्स्ट को काम करने की कोशिश कर रहा हूं ताकि मेरी अंग्रेजी, स्वीडन और नॉर्वे साइटें आ सकें। मैं इसे काम नहीं कर सकता। मैंने क्या गल्त किया है?PHP और गेटटेक्स्ट मेरे सर्वर

यह मेरा config कोड है:

// define constants (defualt - danish) 
$lang = 'da_DA'; 
$lang_short = ''; 
$lang_prefix = 'da'; 

if (isset($_GET['lang'])) 
{ 
    switch($_GET['lang']) 
    { 
     case 'en': 
      $lang = 'en_EN'; 
      $lang_short = 'en/'; 
      $lang_prefix = 'en'; 
      break; 
     case 'se': 
      $lang = 'se_SE'; 
      $lang_short = 'se/'; 
      $lang_prefix = 'se'; 
      break; 
     case 'no': 
      $lang = 'no_NO'; 
      $lang_short = 'no/'; 
      $lang_prefix = 'no'; 
      break; 
    } 
} 
define('LANG', $lang_short); 
define('LANG_PREFIX', $lang_prefix); 

putenv("LC_ALL=". $lang); 
bindtextdomain('messages', ROOT .'lang/'); 

और मेरे पथ /var/www/rssbot.dk/lang/ है। क्या मुझे chmod सही बनाना चाहिए, या ...?

+0

आपने 'lang' के तहत .mo फ़ाइलों को कहां रखा? क्या आपके पास '/ var/www/rssbot.dk/lang/en_EN/LC_MESSAGES/messages.mo' है? यह देखने के लिए कि सभी लोकेशंस उपलब्ध हैं या नहीं, 'लोकेल-ए' को भी आजमाएं। –

+0

हाँ "पथ" और -एक अपनी वापसी स्थान में करने के लिए – ParisNakitaKejser

+3

(सी en_GB.utf8 en_US.utf8 POSIX ) मेरे सही अगर मैं गलत हूँ लेकिन मुझे यकीन en_EN एक वैध स्थान है नहीं कर रहा हूँ। 'En_US' या शायद 'एन'' का प्रयास करें जो क्षेत्र तटस्थ होना चाहिए। अन्य भाषाओं को काम करने के लिए आपको अपने ओएस पर अंग्रेजी से अन्य लोकेशंस भी इंस्टॉल करना पड़ सकता है। –

उत्तर

3

मैंने पाया कुछ gettext को स्थापित करता है कि locale-gen चलाने के लिए प्रत्येक स्थान के लिए उपयोग करना चाहते हैं की जरूरत है। मुझे यह विशेष रूप से उबंटू के लिए सच साबित हुआ। locale-gen चलाने के बाद आपको PHP (apache) को पुनरारंभ करने की आवश्यकता हो सकती है।

sudo locale-gen se_SE 
sudo locale-gen no_NO 

मेरे पास है एक test setup (साथ लोकेल फ़ाइलें काम) है कि यदि आप gettext सेटअप काम कर रहा है निर्धारित कर सकते हैं।

<?php 

//Depending on your OS, putenv/setlocale/both will set your language. 
putenv('LC_ALL=es_MX'); 
setlocale(LC_ALL, 'es_MX'); 

bindtextdomain("su", "./locale"); //set the locale folder for a textdomain 
bind_textdomain_codeset("su", "UTF-8"); //set the codeset for a textdomain 
textdomain("su"); //choose a textdomain 

if(gettext("Hello World!") === "Hola a todos!") { 
    print "We translated it correctly"; 
} else { 
    print "Gettext setup isn't working"; 
} 

?> 
+0

यह मेरे लिए भी काम करता है!मैं डॉकर कंटेनर (उबंटू 14.04 एलटीएस) का उपयोग कर एक लैंप स्टैक चला रहा हूं। यहां एक दिलचस्प चर्चा है जिसने अंततः मुझे SO: https://bugs.php.net/bug.php?id=66265 पर इस उत्तर का नेतृत्व किया –

0

कुछ ऐसी चीजें हैं जो गलत हो सकती हैं।

1- सबसे सिस्टम को समायोजित करने के लिए, आप निम्नलिखित लाइनों की जरूरत है:

<?php 
$newlocale = setlocale(LC_MESSAGES, "sv_SE"); 
putenv("LANG=$newlocale"); 
?> 

2- लिनक्स पर, जबके बजाय LC_MESSAGESLC_ALL साथ setlocale का उपयोग कर, तो आप स्थान स्थापित करने की आवश्यकता होगी सर्वर पर!

यह इस एक

sudo locale-gen sv_SE 

3- जैसी कमांड के साथ फिर से कॉन्फ़िगर किया गया (उबंटू के लिए)

aptitude install language-pack-sv 

या सिर्फ इस एक जैसी कमांड के साथ स्थापित किया जा सकता निर्दिष्ट करें मो फाइलें के नाम और स्थान निर्देशिका

<?php 
// Use default.mo located at ./locale/LC_MESSAGES/default.mo 
bindtextdomain("domain", "./locale"); 
?> 

4- gettext() या _() का उपयोग करते समय सिंगल और डबल कोट्स को मिलाते समय, आपको दो bindtextdomain का उपयोग करने की आवश्यकता होगी!

<?php 
// Double quote _("Hello world") is matched 
bindtextdomain("domain", "./locale"); 
// Single quote _('Hello world') is matched 
bindtextdomain('domain', "./locale"); 
?> 

5- कई स्थानों पर एन्कोडिंग एक समस्या हो सकती है। यदि आपकी .mo फ़ाइल आपकी PHP स्क्रिप्ट की तुलना में एक ही एन्कोडिंग (उदाहरण के लिए utf-8) में नहीं है, तो यह मेल नहीं खा सकता है!