如何调试gettext的使用?我遵循了这里描述的步骤,创建了两个.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');
但这与"testrongtring"相呼应,而不是翻译版本:(
有没有办法显示phpgettext脚本生成的错误?我是不是忘了一步?
编辑:我有以下文件夹树:
./ft/i18n/en/LC_MESSAGES/messages.mo
messages.po
fr/LC_MESSAGES/messages.po
messages.mo
我尝试将"en"文件夹更改为"en_US"answers"en_US.UTF8",并将"messages.mo"文件更改为"en-mo"、"en_US_mo"answers"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