2012-03-12 9 views
2

ドメインでは、gettextドメインを意味します。私はこのコードPHPアプリケーションのgettextで複数のドメインを使用する

$domain = "default"; 
$locale = 'en_US'; 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
bindtextdomain($domain, 'my_path'); 
bind_textdomain_codeset($domain, 'UTF-8');  
textdomain($domain); 

だから、それはmy_pathを使用します/ en_USの/ LC_MESSAGES/default.po

を持っているしかし、私はオーバーライドはデフォルトの値を上書きすることができるように1つの以上のファイルを使用します。 po admin.po、blog.poなどの別のpoファイル

+1

「オーバーライド」とはどういう意味ですか? 2つの.poファイルで同じ 'msgid'を定義しますか? –

+0

彼はいつもdefault.moをロードしたいと思いますが、ページ固有のmoファイルもロードしたいと思います。それは私の見解では全く必要ではなく、実際の利益のためにアプリ全体をより複雑にするでしょう。また、異なるpoファイル間で文字列を再利用することもできません。たとえば、 "admin.po"に "cancel"という文字列があり、後で "blog.po"に必要な文字列がある場合は、それらをコピーするかdefault.poなどに移動する必要があります。 .. –

+0

私はドメイン*が何を意味し、なぜドメインが必要なのか分かりません。説明や関連リンクを教えてください。 – cuixiping

答えて

0

AFAIKのgettextは、アプリケーションごとに1つのPOTファイルを使用することを目的としていますが、ton of utilities to manipulate themです。このphp.net commentには、スクリプトのさまざまな場所で異なるテキストドメインを使用できるようにする素晴らしいテクニックがあります。あなたが使った最後のテキストドメインは何だったのかを自動的に記憶しています。

14

まずすべてあなたのドメインを定義し、このような何か:今、あなたは、あなたが使用したい異なるドメインから文字列を取得したい場合は

bindtextdomain('domain1', DIR_LOCALE); 
bindtextdomain('domain2', DIR_LOCALE); 
bindtextdomain('domain3', DIR_LOCALE); 
textdomain('domain1'); // set default domain for _() function 

いずれかdgettext()dcgettext()(ないLC_MESSAGESからの場合)を取得します指定された別のドメインからの単一の文字列。例:

echo dgettext('domain2', "msgid"); 
+0

これは答えとして受け入れられるべきです!魅力的な作品! – aurora

+0

"loc2/en_US/LC_MESSAGES/default.po"のようにDIR_LOCALE2に定義されたディレクトリ構造が必要ですか? "loc3/en_US/LC_MESSAGES/default.po" – SarwarCSE

+0

複数のmoファイルがそれぞれ異なる場合は、どのように一緒に読み込むことができますか?各gettextはこれをサポートしていますか? –

関連する問題