Gettext不工作,有什么不对?

时间:2014-03-22 14:28:17

标签: php gettext poedit

我使用gettext将不同的翻译添加到我的网页中。我刚安装它,我认为它工作正常。我还将Poedit用于 .po 文件。

这是我的gettext测试代码:

<?php
// I18N support information here
$language = "en_US";
putenv("LANG=" . $language);
setlocale(LC_ALL, $language);

// Set the text domain as "messages"
$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');

textdomain($domain);
//
// test if gettext extension is installed with php
//

if (!function_exists("gettext"))
{
    echo "gettext is not installed\n";
}
else
{
    echo "gettext is supported\n";
}
echo '<br>';
echo _("HELLO WORLD");
echo _("TEST TRANSLATION");
?>

该代码,返回我&#39; gettext支持&#39;,但它没有向我显示翻译,而是向我展示了&#39; HELLO WORLD&#39;和&#39; TEST TRANSLATION&#39;。

这是我的messages.po文件:

msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2014-03-22 14:45+0100\n"
"PO-Revision-Date: 2014-03-22 15:23+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-Language: English\n"
"X-Poedit-Country: UNITED STATES\n"
"X-Poedit-SourceCharset: utf-8\n"

# Test token 1
msgid "HELLO WORLD"
msgstr "Hello World!"

# Test token 2
msgid "TEST TRANSLATION"
msgstr "Testing translation..."

它位于我的&#39; Locale / en_US / LC_MESSAGES&#39;文件夹,还成功转换了 messages.mo 文件。 (我已隐藏文件,名称,项目等信息)

我做错了什么? 谢谢!

编辑:我还可以补充一点,我使用Ubuntu与PHP,Apache以及所有这些东西安装。

4 个答案:

答案 0 :(得分:4)

我也一直担心这个问题。我添加了这个并且它有效:

putenv('LANGUAGE=en_US');

接下来我使用以下内容:

$domain = 'woohoo';
setlocale(LC_ALL, 'en_US.utf8');
putenv('LANGUAGE=en_US');

if( ENV != 'live' ){
    // reset caching nocache is a simlink to "."
    bindtextdomain($domain, dirname(__FILE__) . '/../locale/nocache');
}

bindtextdomain($domain, dirname(__FILE__) . '/../locale');
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);

另外,在我的设置中,只有当我将iso代码添加到.po文件时才开始工作:

msgid ""
msgstr ""
"Language: en_US\n"

答案 1 :(得分:1)

对我来说,解决方案是使用“ en”作为目录名称,而不是“ en-US”。

PHP 5.2,gettext 0.19.8.1,Ubuntu 18.04,apache2

答案 2 :(得分:0)

我会考虑两件事:

  • 检查(例如,使用区域设置-a)如果您要使用的语言已安装,可在此处找到更详细的说明:here

  • 检查apache是​​否正在缓存您的文件,“禁用”它或重新启动apache以获取新文件。有关上一个链接和here

  • 的更多信息

答案 3 :(得分:0)

只需添加以下行

putenv("LANGUAGE=en_US");