更新:私は数年後に私がしたこの質問に出くわしました:今私はこれが非常に悪いアプローチであることを知っています。これは使用しないでください。i18nにはいつでも追加のテーブル(たとえばproducts
とproducts_lang
)を使用でき、ロケールごとに個別のエントリがあります。インデックスに適している、検索に適しているなどです。
MySQL/PHPサイトにi18nを実装しようとしています。
「i18nは通常データベースの一部ではない」という回答を読んだことがありますが、これはやや偏狭なアプローチだと思います。名前の付いた製品、または私の例のように、データベースに格納されているメニュー構造とコンテンツはどうですか?
言語は拡張可能でなければならないことを考慮して、私のアプローチについてどう思いますか。そのため、「言語ソリューションごとに1つの列」を避けようとしています。
1つの解決策は、翻訳する文字列に参照(id)を使用し、翻訳可能なすべての列に、主キー、文字列ID、言語ID、および翻訳を含むテーブルを用意することです。
私が考えたもう1つの解決策は、JSONを使用することでした。したがって、私のデータベースのメニューエントリは次のようになります。
idmenu label
------ -------------------------------------------
5 {"en":"Homepage", "it":"pagina principale"}
このアプローチについてどう思いますか?