2012-09-04 51 views
0

我在PHP中遇到gettext問題;我有兩臺服務器,一臺是本地(在我開發中)在Windows中(使用vsphp)和工程查找,另一臺在Amazon EC2中(Ubuntu 12.04更新),這是生產服務器,在這臺服務器中,找到了。php-gettext在生產服務器中不起作用。 (Ubuntu)

這是我的代碼:

我用這個初始化gettext。

function initialize_i18n($locale) { 
    $locales_root = "./librerias/noAuto/locale"; 
    putenv('LANG='.$locale); 
    putenv("LC_ALL=" . $locale); 
    setlocale(LC_ALL,$locale); 
    $domains = glob($locales_root.'/'.$locale.'/LC_MESSAGES/messages*.mo'); 
    if (count ($domains) > 0) 
    { 
     $current = basename($domains[0],'.mo'); 
     $timestamp = preg_replace('{messages-}i','',$current); 
     bindtextdomain($current,$locales_root); 
     bind_textdomain_codeset($current, "UTF-8"); 
     textdomain($current); 
     if ($locale == "en_US") 
     { 
      if(_("Modificar") === "Modify") { 
       $system->setDebug("Translated correctly"); 
      } else { 
       $system->setDebug("Gettext don't working"); 
      } 
     } 
    } 
} 
initialize_i18n("en_US"); 

所有文件在我的項目在UTF-8(在西班牙語)的編碼,而和的.mo的.po已與poEdit的產生。

我嘗試重新加載Apache服務,但沒有奏效。

有什麼想法?

回答

4

新的一天新想法!我有一個解決方案!

我你有同樣的問題,你需要檢查這個步驟。

1 - 你的Linux安裝了這種語言嗎?

你可以用這個檢查:

locale -a 

如果沒有列出您的語言安裝它,例如你可以用這個安裝ENGLSH定位:

# aptitude install language-pack-en 

,並重新啓動Apache的時候完成。

2 - 您的語言代碼在PHP中是否正確?

如果您列出與地區語言代碼-a你會看到,你可以使用的語言代碼,例如,對於英語我的系統列出的清單: [...] en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 [...] 我的錯誤之一是,我使用了「en_US」而不是「en_US.utf8」。

3 - 該文件夾具有相同的名稱作爲語言代碼。 (我的第二個錯誤)

PD>對不起我的英文不好

+0

拯救生命!我會花幾個小時甚至在這個方向思考:)謝謝! –

2

如果它不適用於不同的環境,最好檢查一下按鍵功能是否成功處理。

我建議你先檢查bindtextdomain()和bind_textdomain_codeset()的返回值。如果它們返回空白,這意味着PHP無法找到消息資源文件(僅在Ubuntu上),那麼您可以從運行Web服務器和PHP的Unix用戶檢查文件夾和文件的權限。

+0

感謝您的時間,我嘗試你的建議,這是德輸出: bindtextdomain($當前,$ locales_root) - > /首頁/ gudymail/librerias/noAuto/locale ---- bind_textdomain_codeset($ current,「UTF-8」) - > UTF-8 ----- textdomain($ current) - > messages ---- 預期? – gokuhs