我在PHP中遇到gettext问题;我有两个服务器,一个本地(我在其中开发)在Windows(与vsphp)和工程查找,其他在亚马逊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服务但是没有用。
有什么想法吗?
答案 0 :(得分: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 - 该文件夹具有SAME名称作为语言代码。 (我的第二个错误)
PD>抱歉我的英文不好
答案 1 :(得分:2)
如果它在不同的环境中不起作用,您应该更好地检查是否成功处理了关键功能。
我建议您首先检查bindtextdomain()和bind_textdomain_codeset()的返回值。如果它们返回空白,则表示PHP无法找到消息资源文件(仅在Ubuntu上),那么您可以检查运行Web服务器和PHP的Unix用户的文件夹和文件的权限。