MantisBugTrackingソフトウェアが国際化をどのように処理するかを見てみましょう。彼らが使用する方法はかなりいいです。
追加情報:
使用してから何年も経ちますが、ソースコードをざっと見てみると、コードのこの部分は大幅に変更されていないことがわかります。彼らは共通のメッセージカタログを使用し、多くの製品が使用するメッセージアプローチを取得します。彼らの言語APIは非常に単純です-phpxref出力が利用可能であり、それはそれほど驚くべきことではありません。include
メッセージカタログは、単に'dを取得するPHPスクリプトとして実装されます。たとえば、英語のカタログには次のようなエントリが含まれています。
$s_new_bug = 'New Issue';
$s_bugnote_added = 'Note Added';
約1,600の宣言が含まれています。興味深い魔法はの中で起こりlang_load
ます。言語がロードされると、カタログファイルが含まれるため、言語が定義するすべての変数がローカルスコープで定義されます。 Lang_load
ローカルで定義された変数を反復処理し、変数名に基づいてメッセージマップを作成して、名前でメッセージを検索できるようにします。たとえば、前のスニペットを読み込んだ後は、次のステートメントが実行されたかのようになります。
$g_lang_strings['en']['new_bug'] = 'New Issue';
$g_lang_strings['en']['bugnote_added'] = 'Note Added';
UIが「ハードコードされた」文字列にアクセスする必要がある場合、UIは次のような呼び出しを使用しますlang_get('new_bug')
。
- 現在のユーザーの設定で優先言語を検索します
- を呼び出して、言語マップがロードされていることを確認します
lang_load()
- 適切な言語マップから値を返します
興味深いのは、すべての機械が怠惰にロードされていることです。そのうちの1つにアクセスする必要があるまで、50ほどの言語が定義されているという事実にお金を払う必要はありません。全体として、これはおそらく私が何年にもわたって掘り下げてきた最も印象的なPHPアプリケーションの1つです。