質問

いくつかの言語を処理するためにかなり大きなWebアプリを微調整する必要があるプロジェクトに取り組みます。ものは手作りのPHPコードで実行されますが、かなりきれいです。

これを行う最善の方法は何だろうと思っていましたか?

  1. 自分で何かを作り、実際のアーキテクチャに合わせようとしています。

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

オプション1の場合、i18nデータはどこに保存すればよいですか? * .po、xliff、pure DB?

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

しかし、Webフレームワーク全体よりもうまく機能するスタンドアロンの翻訳エンジンがあるかもしれません。バズーカを使ってハエを殺すようなものです...

役に立ちましたか?

解決

これに取り組むにはいくつかの方法があります。それらのどれも「最良の方法」ではありません短期的または長期的に問題のあるすべての人。 最初に言いたいのは、多言語サイトは簡単ではなく、翻訳者や素敵な人たちと一緒に仕事をするのは難しく、ほとんどのプログラマーはこの問題を技術的なものとしてのみ見ているということです。翻訳するのかローカライズするのかに関して、この答えの範囲外の別の側面もあります。これには、対象読者の文化的慣習を見てから、その文化に合わせて言語、スタイル、レイアウト、色、書体などを調整することが含まれます。最後に、MT、機械翻訳を使用しないでください。深刻な場合、または正確である必要があり、翻訳者を取得する場合は、翻訳者が外国語から母国語に翻訳していることを確認してください。つまり、ターゲット言語のすべてのニュアンスを理解します。 / p>

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

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

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

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

他のヒント

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

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

これは小規模サイト用です。

大きくなる場合は、ファイルをDBに置き換えます。 :)

翻訳する前に、次の2つのステップがあることに注意することが重要です。

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

詳細については、Wikipediaをご覧ください

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

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

  1. ローカライズする必要のあるテキストごとにサイトをスキャンします
  2. 各ページ/セクションごとに、 $ lang ['sectionname'] [] 配列を作成します
  3. 各テキストに対して $ lang ['sectionname'] ['textname'] エントリを作成します
  4. インスタンス化時に lang パラメータを受け取る Lang.php クラスを作成しますが、 lang が存在しない場合はデフォルトを使用します(このメソッドは、パラメータに応じて langcode.php を、または優先言語に応じてデフォルトをロードします)
  5. クラスには、表示するページ/セクションを受け取る setPage()メソッドがあります
  6. クラスには、表示するテキストを受け取る show()メソッドがあります( show()は、テキストが指定されたページ... echo $ lang ['mypage'] ['mytext']
  7. の一種のラッパーである show()

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

私のサイトで同様のアプローチを使用しています。それは1ページだけですが、このアイデアでマルチページサイトを作成しました。

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

Zend_Translate をご覧ください。十分に文書化されており、全体的なコード品質は素晴らしいです。また、gettext、csv、db、iniファイル、配列、または最終的に翻訳された文字列を保存するものすべてに統一されたAPIを使用できます。

また、このスレッドを見てください: PHPコードベースのi18nに適したツール/フレームワークは何ですか?。あなたの質問に似ているようです。

マルチバイト文字をサポートしている場合、PHPのマルチバイト文字列関数を確認する価値があります。

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

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

私はhlパラメーターとgettextを使用し、エンジンまたは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 %}

重複を避け、すでに存在する翻訳を完全に使用することで、エンジンチームが追加するかアプリ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top