繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM