2012-08-06 103 views
1

如何调试我对gettext的使用?我按照here所述的步骤,创建了.pot .po文件,并生成了一个.mo文件。没有使用gettext翻译

然而,当我启动我的页面时,没有任何内容被翻译,也没有错误信息,所以我不知道什么是错的。

下面是我创建的翻译文件(项目名称为 '金融时报'):

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”,但没有任何翻译。

+1

你已经display_errors设置开启? – Matt 2012-08-06 12:47:17

+0

我有\t error_reporting(E_ALL^E_NOTICE)和ini_set('display_errors','1') – Manu 2012-08-06 12:53:15

+0

现在将'error_reporting'改为'E_ALL'。您可能会收到“通知”级错误,但不会显示。尽管如此,我可以就此提出所有建议,因为我不熟悉gettext。 – Matt 2012-08-06 12:54:55

回答

4

gettext不是很容易调试,因为它在出现错误时不会说出任何内容。尝试使用is_dir()来检查.po和.mo文件所在的文件夹。

我还与变量范围问题的规定()

这里对我来说是什么在起作用:

$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 
+1

我有同样的问题,事实证明我错过了bind_textdomain_codeset调用。 gettext函数不返回任何错误代码或调试信息令人遗憾。 – Klazen108 2016-02-02 22:32:33