试图使用gettext对php站点进行国际化

试图使用gettext对php站点进行国际化,php,internationalization,gettext,Php,Internationalization,Gettext,好的,我有以下PHP代码: <?php $locale = "es"; //$locale = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; //if (isSet($_GET["locale"])) $locale = $_GET["locale"]; putenv("LC_ALL=$locale"); putenv("LANGUAGE=$locale"); setlocale(LC_ALL, $locale); bindtextdomain("messages",

好的,我有以下PHP代码:

<?php
$locale = "es";
//$locale = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
//if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
putenv("LANGUAGE=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
bind_textdomain_codeset("messages", 'UTF-8');
textdomain("messages");

echo(getenv("LC_ALL"));
echo("<br>");
echo gettext("Hello World!");
?>

我已经创建了西班牙语messages.po和messages.mo文件,并将它们存储在上面代码所在目录的子目录中。所述目录的路径为:

区域设置/es/LC\U消息

根据phpinfo的说法,gettext是在我所在的web服务器上启用的(由一个小桔子托管)

调用该页面显示getenv调用返回“es”,但输出的是原始的英语字符串,而不是预期的西班牙语字符串。我也试过“你好,世界!”,也没用

我没有收到任何警告,没有错误,什么都没有。因此,我完全不知道如何排除可能出现故障的地方


任何指导都将不胜感激。

我可能错了,但请尝试更改

putenv("LC_ALL=$locale");
putenv("LANGUAGE=$locale");


我可能错了,但是,试着改变

putenv("LC_ALL=$locale");
putenv("LANGUAGE=$locale");


你错了:)双引号执行变量插值。堆栈并非完全错误@ElYobo。虽然这不能解决问题,但两者都能正常工作。;)Stack的建议根本没有改变行为,所以答案是错误的。你错了:)双引号执行变量插值。Stack并没有完全错误@ElYobo。虽然这不能解决问题,但两者都能正常工作。;)Stack的建议根本没有改变行为,因此答案是错误的。这可能不是问题所在,但“/locale”是一条相对路径;如果您的脚本运行在除一个目录以外的任何位置,那么它将始终中断。虽然这可能是问题所在,但我已尝试插入整个路径:/home/marklybr/public\u html/,并且这也证明不会提供任何更改。我真的希望我有一些警告消息或日志功能,这样我就可以看到系统正在尝试做什么,为什么它会放弃,并决定英语只是最好的观点……您是否尝试重新启动apache服务器?我也有同样的问题,但是当我尝试重新启动apache服务器时,它工作了。这可能不是问题,但是“/locale”是一个相对路径;如果您的脚本运行在除一个目录以外的任何位置,那么它将始终中断。虽然这可能是问题所在,但我已尝试插入整个路径:/home/marklybr/public\u html/,并且这也证明不会提供任何更改。我真的希望我有一些警告消息或日志功能,这样我就可以看到系统正在尝试做什么,为什么它会放弃,并决定英语只是最好的观点……您是否尝试重新启动apache服务器?我也有同样的问题,但当我尝试重新启动apache服务器时,它可以工作