【问题标题】:Attempting to use gettext to internationalize a php site尝试使用 gettext 国际化 php 站点
【发布时间】:2011-05-24 05:09:43
【问题描述】:

好的,我有以下 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 文件,并将它们存储在上述代码所在目录的子目录中。该目录的路径是:

locale/es/LC_MESSAGES

根据 phpinfo,gettext 在我所在的 Web 服务器上启用(由 A Small Orange 托管)。

调用页面显示 getenv 调用返回 'es',但输出的是原始英文字符串,而不是预期的西班牙文。我也试过 _("Hello World!"),也无济于事。

我没有收到任何警告,没有错误,什么也没有。因此,我完全不知道如何解决可能失败的问题。

任何指导将不胜感激。

【问题讨论】:

  • 可能不是问题,但是“./locale”是相对路径;如果您的脚本在该目录以外的任何地方运行,那么它总是会中断。
  • 虽然这可能是问题所在,但我已尝试将整个路径放入:/home/marklybr/public_html/ 并且这也证明不会提供任何更改。我真的希望我有一些警告消息或日志记录功能,这样我就可以看到系统正在尝试做什么以及它为什么放弃并决定英语只是最好的选择......
  • 你试过重启apache服务器了吗?我也有同样的问题,但是当我尝试重新启动 apache 服务器时,它可以工作

标签: php internationalization gettext


【解决方案1】:

我可能错了,但是,尝试改变......

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

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

【讨论】:

  • 你错了 :) 双引号确实执行变量插值。
  • 堆栈并非完全错误@ElYobo。虽然这不能解决问题,但两者都可以正常工作。 ;)
  • Stack 的建议根本没有改变行为,所以答案是错误的。
猜你喜欢
  • 2011-10-07
  • 2011-07-12
  • 2012-08-12
  • 2010-12-21
  • 1970-01-01
  • 2010-10-09
  • 2019-09-19
  • 2010-09-10
  • 2011-04-15
相关资源
最近更新 更多