php-gettext在生产服务器中不起作用。 (Ubuntu的)

时间:2012-09-04 10:21:56

标签: php internationalization gettext ubuntu-server php-gettext

我在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服务但是没有用。

有什么想法吗?

2 个答案:

答案 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用户的文件夹和文件的权限。