[英]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.