更新2:我实际上已经使用了它,经过几次调整后,它很棒。这是我关于其实际设计并在实践中的文章:http : //tim.hithlonde.com/2013/lemon-schema-works/
我正在构建一个Web应用程序,并且希望它支持多种语言。此结构包含两个组件:
- 用词条连接语言环境(“英语”,“荷兰语”等),并用Rosetta Stone连接词条和特定语言的词条。
- 按页面对术语进行分组。我不想通过页面上可能需要的30多个术语来选择SELECT term1,term2等。我想问一下他们所连接的页面。
这是我建议的表结构(请注意,所有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
我只需要问两个项目。我需要的语言ID和我需要的页面。它会以指定的语言提供该页面术语组中的所有术语。
我认为这是一个非常好的结构,但我希望收到一些反馈。
更新:为澄清起见,我们只是在谈论UI组件的本地化。(标签,导航,有用的文本)用户输入的所有信息都将以unicode而不是此模式存储。
更新2:我实际上已经使用了它,这很棒。这是我关于实际设计并在实际操作中的文章:http : //tim.hithlonde.com/2013/lemon-schema-works/
<?php echo $term['term_in_english'];?>
争取一种可靠的MVC方法。