Gettext无法翻译

时间:2013-12-09 22:53:37

标签: php gettext

在过去的几天里,我一直在努力学习php,gettext,并将我的,很快成为新网站从丹麦语翻译成英语。

我的.po和.mo文件的目录设置如下:

/locale/en_US/LC_MESSAGES/

根据本教程:Localizing PHP web sites using gettext我添加了这个:

$locale = "en_US";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
textdomain("messages");

我在我的页面上添加了五个内容:

echo _('Overskrift 1')

但是当我在我的服务器上查看页面时,启用了PHP 5.4的Debian框并启用了gettext支持,没有任何内容被翻译。

我不知道我做错了什么。我确定它很小,但我看不到它。也许你们有一些指示?

我的.po文件:

msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Portfolio\n"
"Language: en\n"

#: 
msgid "Overskrift 1"
msgstr "Headline 1"

#: 
msgid "Overskrift 2"
msgstr "Headline 2"

#: 
msgid "Overskrift 3"
msgstr "Headline 3"

#: 
msgid "Overskrift 4"
msgstr "Headline 4"

#: 
msgid "Overskrift 5"
msgstr "Headline 5"

1 个答案:

答案 0 :(得分:7)

最典型的问题是您的系统没有安装您正在设置的区域设置。 gettext深深地集成到系统的语言环境系统中。您使用setlocale设置的区域设置实际上需要安装和/或别名为您提供的名称。例如,在大多数系统中,没有区域设置ja_JP,而是区域设置ja_JP.UTF8和/或ja_JP.eucJP。在这种情况下,您需要setlocale(LC_ALL, 'ja_JP.UTF8')jaja_JP不会。{/ p>

要检查安装了哪些语言环境,请在命令行上运行locale -a。如果您要查找的区域设置不存在,则需要安装它。在Ubuntu和类似系统上,这就像运行sudo locale-gen ja_JP.UTF8一样简单。

替代解决方案

某些罕见的语言环境可能不容易找到,因此您可能无法安装所需的内容。在这种情况下,您可以找到最接近的区域设置。例如,如果您托管应用的服务器上没有ku_IQku_TR,则可以使用后者。确保将目录重命名为您实际设置的目录。您的文本仍会正常翻译,但您的区域格式(如日期,时间和数字)将无法正确显示。你将不得不忍受这一点。