gpt4 book ai didi

php - 使用 gettext 不会翻译任何内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:41 43 4
gpt4 key购买 nike

如何调试 gettext 的使用?我已按照描述的步骤进行操作 here , 创建了两个 .pot .po 文件,并生成了一个 .mo 文件。

但是当我启动我的页面时,没有任何翻译,也没有错误消息,所以我不知道出了什么问题。

这是我创建翻译文件的方式(项目名称是“ft”):

find ft/. -name "*.php" ! -path "*.svn*" > ft/i18n/listpot.txt
xgettext --from-code=utf-8 --default-domain=ft --output=ft/i18n/ft.pot --files-from=ft/i18n/listpot.txt
rm ft/i18n/listpot.txt
#wrote the translated strings in poedit
msgfmt -c -v -o ft/i18n/en/LC_MESSAGES/en.mo ft/i18n/ft_en.po
#restarted apache

在我的 ft.php 页面中,我包含 i18n.php,其中包含:

    $folder     = 'ft';
$lang = 'en_US.UTF8';
$domain = 'messages';

setlocale(LC_ALL, 'en_US.UTF8', 'en.UTF8', 'en_US.UTF-8', 'en.UTF-8')."<br />";
putenv("LC_ALL=$lang");

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

在 ft.php 中,我用 :

回显字符串
echo _('test_string');

但这回应了'test_string',而不是翻译版本:(

有没有办法显示 php-gettext 脚本产生的错误?我是不是忘记了一步?

编辑:我有以下文件夹树:

./ft/i18n/en/LC_MESSAGES/messages.mo 
messages.po
fr/LC_MESSAGES/messages.po
messages.mo

我尝试将“en”文件夹更改为“en_US”和“en_US.UTF8”,并将“messages.mo”文件更改为“en.mo”、“en_US.mo”、“en_US.UTF8.mo” ",但没有翻译。

最佳答案

gettext 不是很容易调试,因为当出现问题时它什么也不会说。尝试使用 is_dir() 检查 .po 和 .mo 文件所在的文件夹。

我在 require() 中的变量范围也有问题

这是对我有用的:

$folder     = 'ft';
$domain = 'messages';
$lang = 'fr_FR.utf8';

$directory = dirname(__FILE__)."/../../$folder/i18n";

//putenv("LANG=".$locale); //not needed for my tests, but people say it's useful for windows
setlocale(LC_MESSAGES, $lang);
bindtextdomain($domain, $directory);
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');

目录是:

./ft/i18n/en/LC_MESSAGES/messages.mo 
messages.po
fr/LC_MESSAGES/messages.po
messages.mo

关于php - 使用 gettext 不会翻译任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828542/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com