質問: 1のニュース項目の英語版を参照)。しかし、この方法には2つの大きな欠点があります。1つ目はデータベース内の大量のデータでかなり長くなる傾向があり、2つ目はこの設定を使用してテーブルを検索するのが面倒なことです。例えば。アイテムのseoナメクジを検索するのは全文検索になるでしょう。しかし、その一方で、すべてのテーブルに翻訳可能なコンテンツを非常に高速に作成するための迅速な方法ですが、このプロが欠点を克服するとは考えていません。 フロントエンドの作業:フロントエンドについてもいくつかの考え方が必要になります。もちろん、利用可能な言語をデータベースに保存し、必要な言語を(非)アクティブにします。このようにして、スクリプトは言語を選択するためのドロップダウンを生成することができ、バックエンドはcmsを使ってどんな翻訳ができるかを自動的に決めることができます。選択された言語(例えばen_en)は、それから、ビューのための言語ファイルを得るとき、またはウェブサイト上のコンテンツアイテムのための正しい翻訳を得るために使用されるであろう。 だから、そこにあります。私の考えはこれまでのところ。日付などのローカライズオプションもまだ含まれていませんが、私のサーバーはphp5.3.2以降をサポートしているので、ここで説明するようにintl拡張子を使用するのが最善の選択肢です。 http://devzone.zend.com/1500/internationalization-in-php-53 / - しかし、これは後の開発スタジアムで役に立ちます。今のところ主な問題はウェブサイトの内容の翻訳のベストプラクティスを持つ方法です。私がここで説明したすべてのものの他に、私はまだ私がまだ決めていない別のことをまだ持っています、それは簡単な質問のように見えます、しかし実際にそれは私に頭痛を与えています:urlの翻訳これをするべきかどうか?そしてどのように?だから、私がこのurlを持っているなら:http://www.domain.com/about-usそして英語が私のデフォルトの言語です。自分の言語にオランダ語を選択した場合、このurlをhttp://www.domain.com/over-onsに翻訳する必要がありますか?あるいは、簡単な道を進んで、/aboutに表示されているページの内容を変更するだけでよいのです。最後のものは同じurlの複数のバージョンを生成するので、有効なオプションではないように見えます。これはコンテンツのインデックス作成が正しく行われないためです。他の選択肢は代わりにhttp://www.domain.com/nl/about-usを使うことです。これにより、コンテンツごとに少なくとも一意のurlが生成されます。また、http://www.domain.com/en/about-usなどの別の言語に移動する方が簡単であり、提供されるurlはgoogleとhumanの両方のユーザーにとって理解しやすいものです。このオプションを使用して、デフォルトの言語で何をしますか?デフォルトの言語で、デフォルトで選択されている言語を削除する必要がありますか?それでhttp://www.domain.com/en/about-usをhttp://www.domain.com/about-usにリダイレクトします...私の目にはこれが最善の解決策です、なぜならcmsが1つの言語だけのためにセットアップされるときurlにこの言語識別を持つ必要がないからです。そして3番目のオプションは両方のオプションからの組み合わせです:主言語に "language-identification-less" -url(http://www.domain.com/about-us)を使うこと。そして、サブ言語用に翻訳されたseoスラッグを含むurlを使用してください:http://www.domain.com/nl/over-ons&http://www.domain.com/de/uber-uns私の質問があなたの頭が割れるのを願っている、彼らは確かに私のものを割った!それは私がすでにここで質問として物事を解決するのを助けました。私が以前に使用した方法と私が今後のcmsのために持っているという考えを見直す可能性を私に与えてください。私はこのテキストの束を読むために時間を割いてくれてありがとうございます!// edit #1:私は言及するのを忘れていました:__()関数は与えられた文字列を翻訳するための別名です。このメソッドの中には、明らかに利用可能な翻訳がまだないときにデフォルトのテキストがロードされるある種の代替メソッドがあるはずです。翻訳が見つからない場合は、挿入するか、翻訳ファイルを再生成する必要があります。
回答: 私はあなたが車輪を発明してgettextとiso言語の略語リストを使わないことを勧めます。国際化/ l10nが一般的なcmsやフレームワークにどのように実装されているかを見たことがありますか?gettextを使用すると、複数形の数のようにすでに多くのケースが実装されている強力なツールが得られます。英語では、単数形と複数形の2つの選択肢しかありません。しかし例えばロシア語には3つの形式があり、それは英語ほど単純ではありません。また多くの翻訳者はすでにgettextを扱う経験があります。 cakephp または drupal をご覧ください。どちらも多言語対応。インターフェースのローカライゼーションの例としてのcakephpとコンテンツ翻訳の例としてのdrupal。データベースを使用するl10nの場合はまったくそうではありません。それはクエリにトンになります。標準的なアプローチは、初期段階で(あるいは遅延ロードを好む場合は最初にi10n関数を呼び出すときに)、すべてのl10nデータをメモリに取得することです。それは一度に.poファイルまたはdbからすべてのデータを読み取ることができます。そして単に配列から要求された文字列を読むだけではありません。あなたがインタフェースを翻訳するためにオンラインツールを実装する必要があるならば、あなたはそれを扱うためにまだすべてのデータをファイルに保存するよりもdbにそのデータを持つことができます。メモリ内のデータ量を減らすために、翻訳されたすべてのメッセージ/文字列をグループに分割し、必要に応じて必要なグループだけを読み込むことができます。それであなたはあなたの#3で全く正しいです。 1つ例外があります。通常、これはコントローラごとのファイルではなく、1つの大きなファイルです。一つのファイルを開くのがパフォーマンス上最適だからです。 include/requireが呼び出されたときのファイル操作を回避するために、一部の高負荷のwebアプリケーションはすべてのphpコードを1つのファイルにまとめてコンパイルしていることをご存知でしょう。urlについて googleは間接的に推奨します 翻訳を使用する: フランス語の内容を明確に示すために、 http://example.ca/fr/vélo-de-montagne.html また、私はあなたがデフォルトの言語プレフィックスにユーザーをリダイレクトする必要があると思います。 http://examlpe.com/about-us にリダイレクトされます http://examlpe.com/en/about-us しかしあなたのサイトが1つの言語しか使用していない場合接頭辞はまったく必要ありません。チェックアウト: http://www.audiomicro.com/trailer-hit-impact-psychodrama-sound-effects-836925 http://nl.audiomicro.com/aanhangwagen-hit -effect-psychodrama-geluidseffecten-836925 http://de.audiomicro.com/anhanger-hit-auswirkungen-psychodrama-sound-effekte-836925 コンテンツを翻訳するのはもっと難しい仕事です。私はそれが異なるタイプのコンテンツとのいくつかの違いになると思います。記事、メニュー項目などしかし#4では正しい方向に進んでいます。もっとdrupalを見てアイデアを得てください。それは十分に明確なdbスキーマと翻訳に十分なインタフェースを持っています。あなたが記事を作成し、それに言語を選択するように。そしてあなたが後でそれを他の言語に翻訳することができます。urlスラッグでは問題ないと思います。ナメクジ用に別のテーブルを作成するだけで、正しい判断になります。正しいインデックスを使用しても、大量のデータがあってもテーブルをクエリするのは問題ありません。全文検索ではなく、slugにvarcharデータ型を使用する場合は文字列が一致し、そのフィールドにもインデックスを付けることができます。ps申し訳ありませんが、私の英語は完璧とは言い難いものです。