我在从我创建的完全多语言数据库中获取数据时遇到问题,我希望这里有人可以帮助我。
我将所有桌子分成两部分; “通用”表(不包含任何需要翻译的文本)和包含需要翻译的所有字段及其翻译的表。
示例表:
base_material
id
picture
base_material_i18n
base_material_id
localization_id
name
description
review_status
review_notes
localization
id
language_name
查询以获取翻译(如果没有可用翻译,则使用英语 (en) 作为后备语言):
SELECT o.id
, o.type
, o.code
, o.position
, ifnull(t.name,d.name) name
, ifnull(t.description,d.description) description
FROM base_material o
INNER JOIN base_material_i18n d
ON ( o.id=d.base_material_id)
LEFT OUTER JOIN base_material_i18n t
ON ( d.base_material_id=t.base_material_id AND t.localization_id='nl' )
WHERE d.localization_id='en'
我的问题是,当我搜索 base_material 对象时,如何自动将这些翻译(使用此查询中的后备语言)附加到 Yii 中的模型上? (这只是 1 个示例表,但几乎我所有的表(20+)都是以这种方式构建的,所以如果可能的话我需要一些灵活的东西)
使用我需要的现有系统的一个例子是 Propel:http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters
有什么想法如何去做吗?我检查了有关多语言网站的现有 Yii 扩展(例如多语言活动记录 http://www.yiiframework.com/extension/multilingual-active-record),但它们都使用不同的数据库设计(主表中的一般信息+后备语言,i18n 表中的翻译),并且我不确定如何更改这些扩展以使用我的数据库模型。
如果有人知道一种方法来更改现有扩展,以便它可以使用我的数据库方案,那么这绝对是绝妙的,并且可能是实现此目的的最佳方法。
编辑:我添加了一个赏金,因为我仍然找不到任何关于如何让 Propel 与 Yii 一起工作的信息(确实存在 Doctrine 的扩展,但 Doctrine 也不支持这种带翻译的数据库模型),也不有关如何使用现有 Yii 扩展或范围来处理此问题的更多信息。
Edit:浏览了 98 次,但只有 3 条点赞和 1 条评论。我不禁觉得我在这里做错了什么,无论是在我的问题还是应用程序/数据库设计中;要么就是我的问题非常独特(这会让我感到惊讶,因为我不认为我的多语言数据库设计那么荒谬;-)。因此,如果有人知道使用 Yii 和/或 Propel 的多语言网站有更好的全面解决方案(除了当前的扩展,由于文本字段的重复,我真的不喜欢)或类似的东西,请告诉我以及。
提前致谢!