いくつかの考慮事項:
1。翻訳
誰が翻訳をしますか?サイトにも接続している人はいますか?翻訳会社? Gettextを使用する場合は、「pot」(。po)ファイルを使用します。これらのファイルには、メッセージIDとメッセージ文字列(翻訳)が含まれています。例:
msgid "A string to be translated would go here"
msgstr ""
さて、これはこれを翻訳する必要がある人にとっては問題なく理解できるように見えます。しかし、全文の代わりにマイクが提案するようなキーワードを使用するとどうなりますか?誰かが「address_home」と呼ばれるmsgidを翻訳する必要がある場合、これがヘッダー「Home address」であるか、それとも全文であるかはわかりません。この場合、gettext関数を呼び出す直前に、次のようにファイルにコメントを追加してください。
/// This is a comment that will be included in the pot file for the translators
gettext("ready_for_lost_episode");
xgettext --add-comments=///
を使用する .poファイルを作成すると、これらのコメントが追加されます。ただし、Gettextがこのように使用されることはないと思います。また、すべてでコメントを追加する必要がある場合 表示したいテキストは、a)ある時点でエラーが発生する可能性があります。b)とにかくスクリプト全体がテキストで埋められますが、コメント形式のみです。c)コメントはGettextの真上に配置する必要があります。関数。コード内の関数の位置によっては、常に便利であるとは限りません。
2。メンテナンス
サイトが(さらに)成長し、それに伴って言語ファイルが成長すると、この方法ですべての異なる翻訳を維持するのがかなり難しくなる可能性があります。テキストを追加するたびに、新しいファイルを作成し、翻訳者にファイルを送信し、ファイルを受け取り、構造が損なわれていないことを確認する必要があります(熱心な翻訳者は常に構文を翻訳して、ファイル全体を作成します)使用できません:))、新しい翻訳のインポートを終了します。それは確かに実行可能ですが、大規模なサイトや多くの異なる言語でこの目的で発生する可能性のある問題に注意してください。
別のオプション:2番目と3番目の選択肢を組み合わせる:
個人的には、(単純な)CMSを使用して翻訳を管理し、変数と翻訳をデータベースに保持し、関連するテキストを自分で言語ファイルにエクスポートする方が便利だと思います。
- データベースに変数を追加します(例:id、page、variable);
- これらの変数に翻訳を追加します(例:id、varId、language、translation);
- 関連する変数と変換を選択し、ファイルに書き込みます。
- 関連する言語ファイルをサイトに含めます。
- 変数テキストを表示する独自の関数を作成します:
text('var');
または、__('faq','register','lost_password_text');
のようなものかもしれません
ポイント3は、データベースから関連するすべての変数と変換を選択し、それらを配列に入れて、serlialized配列をファイルに書き込むのと同じくらい簡単です。
利点:
-
メンテナンス。大規模なプロジェクトでは、テキストの保守がはるかに簡単になります。この変数がサイトのどの部分に属するかを定義する列をデータベースに追加するだけで、サイト内のページ、セクション、またはその他の部分ごとに変数をグループ化できます。そうすれば、たとえばで使用されているすべての変数のリストをすばやく取得できます。 FAQページ。
-
翻訳中。 1つのページにすべての異なる言語のすべての翻訳を含む変数を表示できます。これは、テキストを同時に複数の言語に翻訳できる人に役立つ可能性があります。また、他の翻訳を見てコンテキストの感触をつかむと、翻訳が可能な限り良好になるようにするのに役立つ場合があります。また、データベースにクエリを実行して、何が翻訳され、何が翻訳されていないかを調べることもできます。おそらく、タイムスタンプを追加して、古い翻訳の可能性を追跡します。
-
アクセス。これは、誰が翻訳するかによって異なります。 CMSを簡単なログインでラップして、必要に応じて翻訳会社のユーザーにアクセスを許可し、特定の言語またはサイトの特定の部分のみを変更できるようにすることができます。これがオプションでない場合でも、手動で変換して後でインポートできるファイルにデータを出力できます(ただし、これには前述と同じ問題が発生する可能性があります)。翻訳者のコンテキストとして、すでに存在する翻訳の1つ(英語または別の主要言語)を追加できます。
全体として、特に長期的には、この方法で翻訳をより細かく制御できるようになると思います。ネイティブのgettext関数と比較した場合の、このアプローチの速度や効率については何も言えません。ただし、言語ファイルのサイズによっては、大きな違いはないと思います。ページまたはセクションごとに変数をグループ化する場合は、常に必要な部分のみを含めることができます。