基本的に3つの選択肢があり、それぞれに長所と短所があります。
1: Dainis Abolsが示唆しているように、データベースにそれをチャックします-サーバーの設定方法によっては、これは最も遅く、最もシステムが重いルートになる可能性があります(ただし、すべて相対的ですが、何百万ものサーバーを取得しない限り、違いが生じる可能性はほとんどありません1時間を表示)。
2: PHPライブラリファイルを使用します。私は、フィールドラベル(名前、名前など)などの小さな単一のアイテムにライブラリファイルを使用し、CMS管理のHTMLなどの大きなものをデータベースに保存する傾向があります...これにより、データベースの呼び出しは減りますが、ロードする辞書ごとに小さなオーバーヘッドが追加されますスクリプト<?php $this->page->dictionary->product = Dictionary::load("product"); ?>
のようなものに。
3:最後に、PO(圧縮された翻訳ファイル)を維持するにはpoeditのようなものが必要ですが、個人的にはPHPのgettextの実装を確認する価値があると思います。これにより、単純なアンダースコア関数でテキストをラップすることにより、PHPドキュメントにテキストを入力するだけで、翻訳を非常に迅速に維持することができます。
例えば<?= _("Hello World"); ?>
次に、圧縮されたPOファイルで翻訳を維持します。これは非常に効率的です(ネイティブPHPファイルで行うよりも高速になる可能性があります)が、自然言語のニュアンスに関してはいくつかの欠点があります。
たとえば、フィールドラベル「title」がある<?= _("Title"); ?>
場合、のすべてのインスタンスが_("Title")
同じ方法で翻訳されます。
つまり、「タイトル」を人のタイトルのフォームラベルと本のタイトルの両方として使用することはできません。たとえば、ドイツ語では、一方の「タイトル」にAnredeを使用し、もう一方の「タイトル」にTitelを使用することができます。
ただし、実際に使用gettext
するには、おそらく独自のサーバーを実行する必要があります。POファイルを変更するときにApacheの再起動が必要になる場合があります:\
検索エンジンに関しては、コードからの出力を読み取るため、翻訳を実行するために使用する方法に大きな違いはありませんが、理想的には、URLをRESTfulに保ち、PHP辞書を含めるかどうかにかかわらず、データベースまたはgettextを使用して(または後で気が変わったら)、URLを変更せずにプログラムの動作を変更http://www.mysite.com/en_gb/widgets
できるように言語をURLにマップすることができます。