[英]php-gettext don't work in production server. (Ubuntu)
我在PHP中遇到gettext問題; 我有兩台服務器,一台是Windows(使用vs.php)在本地(我在其中開發)並可以工作,另一台是在Amazon EC2(已更新Ubuntu 12.04)中,這是生產服務器,在該服務器中,相同的代碼不找不到。
這是我的代碼:
我以此來初始化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服務,但是沒有用。
任何想法?
新的一天新的想法! 我有解決辦法!
如果您遇到相同的問題,則需要檢查此步驟。
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>對不起,我的英語不好
如果它不能在其他環境中運行,則最好檢查關鍵功能是否已成功處理。
我建議您首先檢查bindtextdomain()和bind_textdomain_codeset()的返回值。 如果它們返回空白,則意味着PHP找不到消息資源文件(僅在Ubuntu上),然后您可以從運行Web服務器和PHP的Unix用戶檢查文件夾和文件的權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.