シナリオ
あなたはポーランドにあるオンラインストアの所有者です。あなたの顧客の大多数はポーランドから来ており、彼らはポーランド語を話します。しかし、あなたはあなたの製品を海外にも売りたいと思っており、あなたの海外の顧客は主に英語を話します。したがって、オンラインストアを両方のポーランド語で利用できるようにする必要があります。 および英語 。また、フランスでの商品の販売が好調であると予想されるため、フランス語を準備する必要があると予想されます。 ストアのバージョンも同様です(おそらくスペイン語 なぜですか?)
ユーザーがポーランド語バージョンから切り替えられるようにする必要があります
英語版に戻します。
そして明らかに、製品の詳細をポーランド語から英語に切り替えたいと考えています。
多言語のWebアプリケーションを作成するにはどうすればよいですか?
アプリケーションには2種類のテキストがあります。 1つは静的です データ:ボタンラベル、テーブルヘッダー、グラフィック(多くの場合テキストが含まれます)。もう1つは、ユーザー定義です。 製品名、製品価格、製品説明などのデータ。データは通常、データベースから取得されます。
静的データは、出力に文字列リテラルとして書き込みたいものです。ユーザー定義データは、データベースから取得したデータです。
今日は静的データについては説明しません。妥当なWebフレームワークであれば、静的データの国際化を処理できます。詳細については、Webアプリケーションフレームワークのドキュメントを参照してください。 「国際化」、「i18n」、「ローカリゼーション」、「翻訳」などのキーワードを探します。
今日は、多言語データを処理するためにここでe-pointで通常使用するデータベース構造について説明します。ストアのデータベースには、おそらくproduct
ストアで利用可能なすべての製品に関する情報を格納するテーブル。
product
テーブルにはname
のような列があります 、description
、およびprice
。製品情報を他の言語に翻訳する場合、一部の列を翻訳するだけで済みます。ここでは、name
のみを翻訳します およびdescription
、ただしprice
言語を切り替えても変更されません。
複数の言語のサポートを追加する場合、language_version
、ストアで利用可能なすべての言語バージョンを保存します。通常、code
という列を追加します is_default
と呼ばれるもの (適切な制約があります。デフォルトにできるのは1つのバージョンのみです)。
次に、product
テーブルを2つのテーブルに分割:テーブルproduct
およびテーブルproduct_lv
。製品ごとに、product
product_lv
テーブル;言語バージョンごとに1行。テーブルproduct_lv
変換する必要のある列のみが含まれます:name
およびdescription
。言語に依存しない列(price
など) 、顧客が英語またはポーランド語を話しているかどうかに関係なく同じ価格で販売しているため、テーブルにとどまりますproduct
。
翻訳されたデータを含むすべてのテーブルに対して同じことを行います。翻訳されたデータはtable_lv
テーブルでは、言語に依存しないデータはメインテーブルに残ります。
長所と短所
明らかな欠点は、すべての作成、取得、更新、または削除(CRUD)操作が少し複雑になることです。正しい説明を得るには、常に追加の言語バージョンテーブルに参加する必要があります。
この設計の利点は、新しい言語バージョンを追加するときにデータベーススキーマを変更する必要がないことです。新しい言語バージョンを追加するのが簡単だと言っているのではありません。結局のところ、すべての製品の説明を翻訳する必要があります。これは組織的な課題ですが、データベースの観点からはかなり簡単です。たくさんの挿入物があります。
多言語データベースをどのように設計しますか?