当前位置: 首页 > 知识库问答 >
问题:

Gettext不工作,怎么了?

梁磊
2023-03-14

我正在使用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受支持”,但它没有显示翻译,而是显示“HELLO WORLD”和“TEST TRANSLATION”。

这是我的留言。采购订单文件:

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文件已成功转换。(我已经隐藏了文件的信息、名称、项目等)

我做错了什么<谢谢!

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

共有3个答案

何华灿
2023-03-14

我会考虑两件事:

>

  • 检查(例如使用locale-a)是否安装了要使用的语言,更详细的描述可以在这里找到:这里

    检查apache是否正在缓存您的文件,或者“禁用”它,或者重新启动apache以获取新文件。更多关于上一个链接的信息,请点击此处

  • 太叔弘壮
    2023-03-14

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

    PHP 5.2,gettext0.19.8.1,Ubuntu 18.04,apache2

    邓才
    2023-03-14

    这个我也一直头疼。我添加了这个,它起作用了:

    putenv('语言=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代码添加到服务器时才开始工作。采购订单文件:

    msgid ""
    msgstr ""
    "Language: en_US\n"
    
     类似资料:
    • 我一直在尝试建立一个PHP网站。不管我怎么努力,我都无法让gettext开始工作。 我正在运行一个ubuntu apache服务器上的流浪框,我需要的所有区域设置都是可用的和生成的(使用区域设置-a检查)。 已安装并启用Gettext(使用phpinfo()检查) 这是我的PHP: 这是我的/vagrant/build/locale/en_US/LC_MESSAGES/en_US。采购订单文件:

    • 我是新手。 这是我的设置:/apache2.2php5.3。6窗口7/ 我在Apache/htdocs/test/index中有以下代码。php 我使用PoEdit在locale/de_de/LC_MESSAGES/MESSAGES下生成必要的翻译。po 当我访问,结果是Hello World!当它应该是霍尔贴边! 作为测试,我打开命令提示符并导航到测试文件夹。然后我打了进去 控制台中显示的结果是

    • Apache2.4PHP5.5 我绝对肯定,比我的和文件位于中 我还将这些文件交给了我在OSX Maverics上的同事,效果很好 我无法使php gettext正常工作。 我已经谷歌/堆栈溢出了大约几个小时,尝试了各种解决方案——仍然不起作用。我做错了什么? 每次更改某些内容以确保重新加载gettext文件时,我都会重新启动apache。 这是我的输出: 还有一个cmd输出: 好吧,我想起来了:

    • 我试图用java在android Studio中制作我的第一个转换器,但2个函数setText和getText不起作用 我希望我说清楚了谢谢

    • 我试图使用PHP gettext扩展在PHP 5.5(在win2008服务器上,使用IIS7)。我正在这样做: 有了这个文件夹结构: 但它总是只是返回Hello world,而不是正确的翻译,目前(基于我缺乏西班牙语技能)在messages.po文件中是这样的: 这从cmd线路和通过IIS失败。所以我看到gettext调用,等等,并执行它,但它没有读取翻译文件。即使删除翻译文件,我得到相同的行为。

    • 两个都不起作用。有人能告诉我为什么或者在雪花中这样做的正确方式是什么吗?提前感谢!