1

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');

しかし、これは翻訳されたバージョンではなく、'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」に変更してみましたが、何も翻訳されません。

4

1 に答える 1

4

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
于 2012-08-06T20:16:12.187 に答える