PHP と MySQL を使用して Web サイトを開発しています 静的データに XML を使用して、多言語 Web サイトを作成できるようにしました データベース内の他のコンテンツに問題があります 各テーブルのすべての言語の列を作成する方が良いですか、それとも何ですか? テンプレートエンジンを使用していないので、この問題を解決するための良いアプローチを知りたいです。
前もって感謝します
PHP と MySQL を使用して Web サイトを開発しています 静的データに XML を使用して、多言語 Web サイトを作成できるようにしました データベース内の他のコンテンツに問題があります 各テーブルのすべての言語の列を作成する方が良いですか、それとも何ですか? テンプレートエンジンを使用していないので、この問題を解決するための良いアプローチを知りたいです。
前もって感謝します
language
データベース テーブルに列を追加することをお勧めします。新しいコンテンツがデータベースに保存されるとき、言語を設定する必要があります。フロントエンドでは、ユーザーが選択した言語に基づいてコンテンツをプルします。
SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='en'
SELECT * FROM ContentTable WHERE ContentID=<pageid> AND Language='fr'
いいえ、言語ごとに列を作成しないでください。これは不適切な非正規化です。新しい言語ごとにテーブルを変更する必要があります。
次のような言語のテーブルを用意します。
language_id, name, code
たとえば、テーブルがある場合、次のようになりますtext_pages
。
page_id, language_id, title, content
次に、ページごとに言語ごとに行があります。または、なしでメインテーブルを作成することもできますlanguage_id
-レコードはデフォルト言語であり、text_pages_ml
保持される2番目のテーブルpage_id, language_id, title, content
は他の言語、翻訳のみです! LEFT JOIN
次に、現在の言語がデフォルトの言語と異なる場合に備えて、メイン レコードを で簡単に上書きできます。
2 番目の例の利点は、翻訳してはならない多くの列を含めることができることです。たとえばauthor_id, date_created, date_updated
、など - は、LEFT JOIN
翻訳されたメイン フィールドのみを上書きし、翻訳の必要のないデータの重複はありません。
多くの実装がありますが、RDB 正規化について読んで、フィールド設計ごとに言語ごとの列を考慮しないでください。