2009-10-25 12 views
5

私は、Webアプリケーション用の多言語コンテンツを保存するための標準に準拠した方法を探しています。今まではデータベース内のファイルや辞書テーブルのデータを読み込む独自の "translate()"関数を採用しました。ただし、データベース・テーブルに辞書を最新の状態に保つことは、Webアプリケーションのさまざまなコピーを使用する場合は非常に面倒です。gettextを使用してロケールを使用しないi18n?

私はgettextが好きです。なぜなら、利用できるツールはたくさんあるからです。しかし、私はさまざまなプラットフォーム用のアプリケーションを開発しています。私はsetlocale()とconsortsの厄介なやり方に対処することを絶対に避けています。つまり、働くために提供する必要のあるシステムごとに異なるロケール文字列の数十種類です。決してこれまでにない。 de、en、esなどの言語があり、setlocale()やbindtexdomain()に一度も触れることなく、適切な辞書をロードして_()を使用したいと考えています。

これは何とかgettextを使って可能ですか?または、誰かが.po/.moファイルを扱うことができる、PHP拡張子を必要とせずに、PHPのための簡単で小さな、速い(!)i18nソリューションを知っていますか?

+2

gettext拡張を使用せずにPHPでgettextを使用することは事実上可能ではありませんが、これはPHPの一般的な標準拡張です。 – sorin

+1

@Sorin:可能であれば、すべてではないにせよ、ほとんどのgettext関数を持つネイティブPHP実装があります。 –

+0

@votingmeisfree wordpressとcakephp、いくつか挙げると、gettext実装を使わずにpoとmoファイルを使います。彼らはファイルを直接開きます。 – T0xicCode

答えて

2
+0

そして、gettext拡張子は必要ありません:)さらに、よりフレンドリーなソース(配列、xml、csvなど)用のアダプタもあります。 –

+0

ありがとう、これは興味深いものです。私は探していて、かなり長い間Zendと多分私はそれを試してみます。もし誰かが知っていれば、私はまだ軽量スタンドアロンソリューションを好むでしょう。 –

+0

ああ、見た目よりも軽量です。 Zend_Translateには、Zend_Translate、Zend_Locale、Zend_Loader、Zend_Exceptionだけが必要です(多分私は間違っていて、多かれ少なかれ、それを試してみる必要があります) –

3

この方法は、非標準のロケールでも動作する必要があり、それに動作します:

$locale = 'someWeirdLocale'; 

putenv('LC_MESSAGES=' . $locale); 
bindtextdomain('domain', './locale'); 
textdomain('domain'); 

お楽しみください!

+1

Windows 7では動作しません - PHP5 5.3.0 – Blaise

関連する問題