UPDATE 2:私は実際にこれを使用してしまいましたが、2、3の調整後は素晴らしいです。実際のデザインと実際の動作に関する私の投稿は次のとおりです。http://tim.hithlonde.com/2013/lemon-schema-works/
私はWebアプリを作成していますが、複数の言語をサポートしたいと考えています。この構造には2つのコンポーネントがあります。
- ロケール( 'english'、 'Deutch'など)と用語を関連付け、ロゼッタストーンの接続用語と特定の言語の用語を使用します。
- ページごとに用語をグループ化します。私は言いたくない、私がページで必要とするかもしれない30以上の用語を通して、term1、term2などを選択します。彼らが接続しているページで尋ねたいのですが。
これが私の提案するテーブル構造です(すべてのIDには非常に効率的なクエリを作成するために、ID間に関係/インデックスがあることに注意してください)。
* locale
* id
* value //English, Deutch, etc//
* terms
* id
* value //In English//
* page
* id
* value //Think add entry, menu//
* page_group //group all terms to a page, for easy pulling//
* id
* page.id
* term.id
* rosetta
* id
* locale.id
* term.id
* value //french word for amount, description, etc//
これにより、次のようなクエリが可能になります。
SELECT localization.value,
terms.value
FROM localization
INNER JOIN terms ON terms.id=localization.termid
INNER JOIN page_group ON page_group.termid=localization.termid
INNER JOIN page ON page.id=page_group.pageid
INNER JOIN locale ON locale.id=localization.localeid
WHERE page.value='add_entry' AND locale.id=custlangid
ORDER BY terms.id
2つのアイテムを要求するだけで済みます。必要な言語IDと必要なページ。指定した言語で、そのページの用語グループの一部であるすべての用語を提供します。
これは本当に良い構造だと思いますが、フィードバックが欲しいです。
更新:明確にするために、UIコンポーネントのローカライズについて話しているだけです。(ラベル、ナビゲーション、役立つテキスト)ユーザーが入力するすべての情報は、このスキーマではなくUnicodeで保存されます。
アップデート2:私は実際にこれを使用してしまいました、そしてそれは素晴らしいです。実際のデザインと実際の動作に関する私の投稿は次のとおりです。http://tim.hithlonde.com/2013/lemon-schema-works/
<?php echo $term['term_in_english'];?>
は、しっかりとしたMVCアプローチを目指して努力したいと思います。