代码之家  ›  专栏  ›  技术社区  ›  peregraum

Gettext不工作,怎么了?

  •  1
  • peregraum  · 技术社区  · 10 年前

    我正在使用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");
    ?>
    

    该代码返回我“gettext is supported”,但它没有向我显示翻译,而是向我显示“HELLO WORLD”和“TEST TRANSLATION”。

    这是我的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..."
    

    它位于我的“Locale/en_US/LC_MESSAGES”文件夹中 消息.mo 文件已成功转换。 (我已经隐藏了文件的信息、名称、项目等)

    我做错了什么?
    谢谢

    编辑:我还可以补充一下,我使用的是安装了PHP、Apache和所有这些东西的Ubuntu。

    4 回复  |  直到 10 年前
        1
  •  6
  •   timing stringCode    10 年前

    我也一直头疼这个。我加了这个,效果很好:

    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"
    
        2
  •  1
  •   Nigel    5 年前

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

    PHP 5.2,gettext 0.19.8.1,Ubuntu 18.04,apache2

        3
  •  0
  •   paierlep    10 年前

    我会考虑两件事:

    • 检查(例如,通过使用区域设置-a)是否安装了您要使用的语言,可以在此处找到更详细的描述: here

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

        4
  •  0
  •   Ghon    6 年前

    只需添加以下行

    putenv("LANGUAGE=en_US");