23

かなり大きなWebアプリを微調整して複数の言語を処理する必要があるプロジェクトに取り組みます。手作りのPHPコードで動作しますが、かなりクリーンです。

私はそれを行うための最良の方法は何でしょうか?

  1. 実際の建築に合わせて、自分で何かを作っています。

  2. 私のためにi18nを管理するフレームワーク(例えば、Symfony)を使用してその大部分を書き直しますか?

オプション1の場合、i18nデータをどこに保存する必要がありますか?* .po、xliff、純粋なDB?

別の方法を考えました。翻訳にのみSymfonyを使用しますが、コントローラーを設定してWebサイトを既にロードするようにします。速いが汚い。一方で、それは私たちが次の変更を行うことを可能にし、ゆっくりと完全なSymfonyに移行します:このWebサイトは本当にそのための良い候補です。

しかし、おそらく、Webフレームワーク全体よりもうまく機能するスタンドアロンの翻訳エンジンがいくつかあります。バズーカを使ってハエを殺すのと少し似ています...

4

6 に答える 6

15

言語ファイルを操作します。

  1. 各テキスト文字列を変数に置き換えます
  2. 言語ごとに1つの言語ファイルを作成し、その中で各変数を対応するテキストで定義します。(french.inc、dutch.inc ...)
  3. 各ページに適切なファイルを含めます。

それは小さなサイト向けです。

大きくなる場合は、ファイルをDBに置き換えてください。:)

于 2008-10-01T09:57:30.767 に答える
12

これに取り組むにはいくつかの方法があります。それらのどれも「最良の方法」ではなく、短期的または長期的に問題を抱えています。最初に言うことは、多言語サイトは簡単ではなく、翻訳者や素敵な人々ですが、一緒に仕事をするのは難しく、ほとんどのプログラマーはこの問題を技術的なものとしてのみ見ています。翻訳するのかローカライズするのかについては、この回答の範囲外の別の側面もあります。これには、対象となる聴衆の文化的慣習を見てから、その文化に合わせて言語、スタイル、レイアウト、色、書体などを調整することが含まれます。最後に、MT、機械翻訳、

右。ソリューション。サイトを書き直したくないということに基づいて、所有しているサイトのクローンを作成し、コピーをターゲット言語に翻訳するだけです。コードベースが安定していると仮定すると、VCSを使用してコードの変更を管理できます。サイトの個々の部分をターゲット言語に合わせて調整できます。たとえば、フランス語のテキストは同等の英語のテキストよりも平均30%大きいため、1つのサイトを使用して配信すると、フォーマットの問題が発生し、言語に応じて、異なるcssファイルを入力および出力します。それを行うには不格好な方法に思えるかもしれませんが、サイトはどのくらいの期間存在するのでしょうか。この方法で行うことによる管理オーバーヘッドは、他のオプションよりも少ない可能性があります。

再構築せずに2番目の方法。現在のサイトのすべてのコンテンツをタグに置き換えてから、ファイルまたはデータベーステーブルに別の言語を配置し、ユーザーの希望する言語をスニッフィングします(設定できる登録ユーザーがいますか、ブラウザーの言語タグを取得しますか?選択を行うのはURLdot-comdot-fr、dot-deになります)、タグをターゲット言語に置き換えます。次に、サイズの問題と画像の問題に別々に対処する必要があります。このソリューションは、SymfonyやZendなどのフレームワークがl10nを実装するときに有効になります。

次に、フレームワークまたはgettextを使用して再構築し、よりクリーンなソリューションを使用できますが、フレームワークは翻訳ではなく他の問題を解決するように設計されており、翻訳コンポーネントは完全なソリューションではなく部分的なソリューションとしてフレームワークに組み込まれています。

すべてのソリューションの大きな問題は、継続的なメンテナンスです。コードベースだけでなく、維持する複数の言語ベースもあるからです。すべてを1つのソリューションにまとめることが本当に賢く効果的でない限り、進行中のタスクを実行することは困難です。

于 2009-10-25T07:50:34.413 に答える
3

翻訳する前に、次の 2 つの手順が必要であることに注意してください。

  1. 国際化: つまり、サイトで複数の言語を処理できるようにする
  2. ローカリゼーション: これには、サポートする予定の各言語への (ステップ 1 で取得した) テキストの翻訳が含まれます。

詳細については Wikipedia を参照してください

ステップ 1 では、一部の言語は右から左 (RTL) で書かれており、日本語や中国語などの非ヨーロッパ文字で書かれているという事実を考慮する必要があります。これらの言語と文字を処理する予定がない場合は、より簡単になる可能性があります。

このような状況では、サイトで使用されるすべてのテキストを含む連想配列を含む言語ファイル (実際には、サポートする予定の言語と同じ数の言語ファイルで、それぞれlangcode.phpen.phpまたはのように名前を付けます) を使用することをお勧めします。fr.php手順は次のようになります。

  1. サイトをスキャンして、ローカライズする必要のあるすべてのテキストを探します
  2. ページ/セクションごとに$lang['sectionname'][]配列を作成します
  3. テキストごとに$lang['sectionname']['textname']エントリを作成します
  4. インスタンス化時にパラメーターをLang.php受け取るクラスを作成しますが、何も受け取らなかった場合に備えてデフォルトを持ちます (このメソッドは、パラメーターに応じてロードされるか、優先言語に応じてデフォルトがロードされます)。langlanglangcode.php
  5. クラスには、setPage()表示するページ/セクションを受け取るメソッドがあります
  6. クラスには、show()表示されるテキストを受け取るメソッドがあります(show()特定のページにテキストが表示されるたびに呼び出されます...show()の一種のラッパーですecho $lang['mypage']['mytext']

このようにして、非常に簡単な方法で必要な数の言語を使用できます。ベース言語ページを開く言語管理者を配置することもできます (実際には、配列を再帰的に読み取り、テキストエリアに表示するだけです)。その後、他の言語で「名前を付けて保存...」することができます。

私のサイトでも同様のアプローチを使用しています。1ページだけですが、このアイデアで複数ページのサイトを作りました。

ユーザーが投稿したコンテンツやかなり複雑な CMS がある場合は、話が異なります。i18n 対応のフレームワークを探すことができます (Drupal が思い浮かびます)。

于 2009-10-25T08:09:51.863 に答える
2

Zend_Translateを見ることができます。これはかなり包括的で、よく文書化されており、全体的なコードの品質は優れています。また、gettext、csv、db、ini ファイル、配列など、翻訳された文字列を保存するための統合 API を使用することもできます。

また、このスレッドを見てください: What are good tools/frameworks for i18n of a php codebase? . あなたの質問に似ているようです。

于 2008-10-01T11:00:09.850 に答える
1

マルチバイト文字のサポートである場合は、PHP のマルチバイト文字列関数を確認する価値があるかもしれません。

http://uk.php.net/manual/en/book.mbstring.php

これらは、マルチバイト文字をより適切に処理します。

于 2008-10-01T11:07:09.990 に答える
-2

私は hl パラメータと gettext を使用して、既に存在するエンジン翻訳を独自の .po と組み合わせます。これにより、エンジンまたは私の django/gae のが追加されたときに新しい翻訳と言語が表示されます。

{% get_current_language as LANGUAGE_CODE %}{{ LANGUAGE_CODE }}{% get_available_languages as LANGUAGES %}{% for LANGUAGE in LANGUAGES %}{% ifnotequal LANGUAGE_CODE LANGUAGE.0 %}{{ LANGUAGE.0 }}{% endifnotequal %}{% endfor %}

したがって、重複を避け、すでに存在する翻訳を完全に使用することで、エンジン チームが追加またはアプリを追加したときに、欠落しているアラビア語の月名などを直接表示できます。

于 2009-10-25T04:31:39.887 に答える