我有问题的gettext在PHP;我有两个服务器,一个本地(其中我开发)在视窗(与vs.php)和works find,另一个在亚马逊EC2 (Ubuntu12.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");我的项目中的所有文件都是用UTF8(西班牙语)编码的,并且.mo和.po是用poedit生成的。
我尝试重新加载apache服务,但不起作用。
有什么想法吗?
发布于 2012-09-05 15:43:34
新的一天,新的想法!我有一个解决方案!
如果你有同样的问题,你需要检查这些步骤。
1-您的Linux安装了此语言?
您可以使用以下命令进行检查:
locale -a如果没有列出您的语言安装它,例如,您可以使用以下命令安装英语本地化:
# 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>为我糟糕的英语道歉
发布于 2012-09-04 21:44:40
如果在不同的环境下不能正常工作,最好检查一下关键函数是否处理成功。
我建议您先检查bindtextdomain()和bind_textdomain_codeset()的返回值。如果它们返回为空,则意味着PHP无法找到消息资源文件(仅在Ubuntu上),然后您可以检查运行您的web服务器和PHP的Unix用户对文件夹和文件的权限。
https://stackoverflow.com/questions/12261458
复制相似问题