以下示例适用于带有 Apache 的 Mac OS X,即我得到回显的已翻译字符串。但是在带有 lighttpd 的 Ubuntu 上,我得到了原始文本“非事件帐户”。我已经尝试了各种环境变量的组合,但没有任何运气。这也不是文件权限,因为我可以回显 .mo 文件的内容。
<?php
//$locale = 'sv_SE.UTF-8';
$locale = 'sv_SE';
$dir = dirname(__FILE__);
// File permission is apparantly not a problem as this works...
//echo file_get_contents($dir . '/sv_SE/LC_MESSAGES/flattr.mo');
putenv("LANG=$locale");
putenv("LANGUAGE=$locale");
putenv("LC_ALL=$locale");
putenv("LC_MESSAGES=$locale");
setlocale(LC_ALL, $locale);
setlocale(LC_MESSAGES, $locale);
//setlocale(LANG, $locale);
//setlocale(LANGUAGE, $locale);
bindtextdomain('flattr', $dir);
//bind_textdomain_codeset("flattr", 'UTF-8');
textdomain('flattr');
echo _("Inactive account");
?>
有人有什么想法吗?
最佳答案
我遇到了同样的问题。我将描述我在 Ubuntu 10.10 上修复它所做的事情。
1) 确保你安装了'gettext',
sudo apt-get install gettext
或者,如果无法安装“gettext”,您可以安装“php-gettext”。如果您已经安装了“gettext”,则不需要“php-gettext”包。
2) 然后为您的语言生成语言环境。在此示例中,我将使用“sv_SE”。在“/usr/share/i18n/SUPPORTED”中查找支持的语言环境,
less /usr/share/i18n/SUPPORTED
您会发现多行以“sv_SE”开头,
sv_SE.UTF-8 UTF-8
sv_SE ISO-8859-1
sv_SE.ISO-8859-15 ISO-8859-15
这意味着您有多个选项来为 sv_SE 生成语言环境。其中一个选项的名称中没有句点 (.)(即 sv_SE ISO-8859-1
);这是该语言环境的默认字符集。要为默认字符集生成语言环境,请运行以下命令,
sudo locale-gen sv_SE
如果要为 UTF-8 字符集生成该语言环境,请运行此命令,
sudo locale-gen sv_SE.UTF-8
生成语言环境后重启Apache(否则找不到新生成的语言环境),
sudo service apache2 restart
3) 最后,更新您的 PHP 脚本以匹配您生成的语言环境。如果您为“sv_SE”生成了语言环境,
setlocale(LC_ALL, "sv_SE");
但是如果您生成了该语言环境的 UTF-8 等价物,请使用,
setlocale(LC_ALL, "sv_SE.UTF-8");
现在一切正常。
关于php - 无法在 Ubuntu 上运行 gettext (php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5257519/