
Web開発に関連するプロジェクトを扱うとき、サイト、ポータル、およびWebアプリケーションの複数の言語のサポートを実装するためのさまざまなオプションに出会いました。 ここでは、私が最もよく会ったデータベースアーキテクチャを実装するための基本的なオプションについて説明しました。
この記事は、Web開発の初心者に役立つと思います。多言語システムの構築経験のある方は、お好みのオプションについてお話しください。
1.各言語のフィールドを作成する

実装:テーブル内の各言語の各フィールドに対して、個別の列が作成されます
機能:多数の言語、または以前は未知の数の言語を使用していた場合、このアプローチでは、新しい言語のサポートを実装する必要があるたびにデータベース構造を変更する必要があります。
使用する場合:サポートされる言語の数が事前に明確にわかっており、各エンティティがすべての言語バリアントに存在する必要がある場合。
2.ローカライズテーブルの作成

実装:ローカライズが必要なエンティティごとに、2つのテーブルが作成されます。 特定の言語に依存しないフィールドを含むメインテーブルと、翻訳が必要なフィールドを含むテーブル。 使用可能な言語のリストを含むデータベースもデータベースに作成されます。
機能:このアプローチにより、サポートされる言語の非常に柔軟な拡張性を実装できます。 このオプションの構造は前のものよりもやや複雑で、ローカライズされたフィールドを含む各テーブルのサテライトテーブルの作成を伴います。
3.複雑な構造のシリアル化されたデータを使用する

実装:シリアル化された形式の情報は、JSON、XML、バイナリなど、翻訳が必要な各フィールドに書き込まれます。 この場合のオブジェクトは、たとえば、キーが言語であり、値がテキストである辞書です。 または他の構造。
機能:主な機能は、データの整合性がデータベースだけでなく、シリアル化メカニズムにも依存することです。 さらに、この実施形態では、データベースの正規化も大幅に削減されます。
4.各言語のテーブル内の個別のエントリ

実装:エンティティを記述する各テーブルで、レコードが属する言語を示すローカライズが必要なフィールド。 使用可能な言語のリストを含むデータベースもデータベースに作成されます。
機能:このオプションは、実際、サブジェクト領域の1つのオブジェクトがデータベース内の複数のオブジェクトと複数の関係に対応できるという点で注目に値します。 それはビジネスロジックをかなり複雑にする可能性があります。
5.データベースレベルでのローカリゼーションの欠如。 外部ローカライズツールの使用
このオプションは記事のトピックに直接関係しませんが、言及する価値があると思います。
実装:メソッドは外部プラグイン(Google翻訳、Bing翻訳など)を介して実装されます。
機能:このオプションは、リソースの所有者ができるだけ多くの訪問者に情報を提供できるようにする場合に適用できます。 多くの場合、機械翻訳の品質には多くの課題が残されていることを理解してください。 このオプションは、非常に予算が限られている(各出版物の翻訳のためのリソースがない場合)と見なすことができます。その適用前に、慎重に考えることをお勧めします。
6.各言語の翻訳テーブルを作成する

VolChが 提供するオプション。
実装:言語ごとに、翻訳が必要なフィールドを含むデータベースに個別のテーブルが作成されます。
機能:新しい言語を追加する場合、データベースに変更を加える必要があります。 サポートされている言語が多数ある場合、テーブルの数は非常に多くなる可能性があります。
「静的な」テキスト情報の保存
静的テキスト情報の保存に関するいくつかの言葉。 つまり、ボタンラベル、フッター内の情報、およびほとんどの場合コンテンツマネージャーによって変更されないタイプのテキストの残りの部分を意味し、モノリンガルサイトを実装する場合は、テンプレートに直接入力されます。 そのようなテキストを保存するための多言語サイトの場合、いくつかのオプションがあります。
- テキストはデータベースに保存され、Webアプリケーションの起動時にキャッシュされます -このオプションにより、サポートされる言語の数を潜在的に増やすことができます。 実際、テキストは静的ではなく、動的なコンテンツになります。
- テキストはリソースファイルに保存されます -パフォーマンスオプションは前のオプションよりも高速ですが、言語を追加するにはWebアプリケーションのファイルを編集する必要があります
- 静的テキストを含む言語バリアントごとに個別のテンプレートが作成されます-私の意見では、過度に冗長なバリアントです。 これには前のものと同じ欠点があります。
その他のオプション
説明されている以外の多言語を実装する他のオプションを提供したい場合は、私に書いてください。記事にそれらを含めます。
また、好みの実装オプションを選択する際に、上記の説明に加えて、どの引数が重要であるかを知ることは興味深いでしょう。