3

我知道这个话题被讨论过几次,但没有一个能代表我的最终解决方案。

情况 我正在设计一个关系 mysql 数据库,该数据库以后应该包含多语言内容。您可以从 Wikipedia 或 Microsoft 技术支持页面了解这一点。每种语言的内容应该相同。例如,如果缺少翻译,则该站点会自动为您提供相同的内容,或以信息可用的语言提供。如果未设置某些值,则应回退到第二种或默认浏览器语言或通过谷歌进行翻译。开发环境是Zend。

到目前为止,我的想法是解决问题:

两个主键:(ID,语言) 优势:通过数据库抽象层轻松访问数据库。问题:外键、关系船、回退

带有语言后缀的列:优势:数据库性能,没有关系问题。问题:数据库抽象层不能处理这个?

是否有任何概念证明了自己或比其他概念更可取?有没有人已经创造了这样的东西并可以与我分享他的经验?对于这种情况,是否存在修改后的 Zend DB 控制器?您如何将此信息链接到表格?

感谢您的帮助、提示和建议!

亲切的问候,

曼努埃尔

4

3 回答 3

1

第二个选项是不可维护的(应该在缺点方面添加)。要实际添加另一种语言,您需要修改表抽象层。听起来像一场噩梦。

第一个选项似乎更有希望,但不幸的是,要让它发挥作用还有很多工作要做。但是,根据我的经验,这是相当典型的解决方案,所以我不会重新发明轮子。
我要补充的是,语言回退应该在 Zend 端完成,数据库会丢失一些信息。您可能会想到某种索引表来保存诸如内容的唯一 ID 和可用语言之类的信息。如果您需要提供某些内容,您将阅读此类记录,将其与 Accept Languages 进行比较,然后再次向数据库询问有效内容(使用最合适的语言)。唯一的问题是,您需要以某种方式创建这样的索引表(我看到的最好的方法是在将内容插入内容表时触发)。

很多工作,但问题并不容易。

于 2011-07-06T08:15:00.380 回答
0

我的平台将是一个社区驱动的数据库。所以我实际上会依靠人类来翻译它。无论如何,您必须存储信息,所以我首先关心的不是数据库大小或性能,而是易用性。到目前为止,我的想法是实现一些如上所述的结构,但尚不确定我是否会在教义中做到这一点。

语言决定: 开始,应用程序获取用户预设的文章语言、次要语言、英文母语。从数据库中获取文章我将为每一列检查以下内容: 1. 主要语言是否可用?2. 可以使用第二语言吗?3. 如果两者都不是,则以母语或英文显示文章,并提供用户翻译,并提供谷歌翻译 api 的建议。我想这将是相当多的涂层和操纵控制器或建立一个商业模式这样做。

@tawfekov 是像这样或类似的东西很容易用教义实现吗?

于 2011-07-07T06:13:36.263 回答
0

我现在正在解决完全相同的问题。

不知何故,将所有内容添加到同一个数据库中对我来说没有意义。假设我想走极端并支持大约 50 种语言,这只会使我的数据库膨胀。所以,我倾向于将我的主数据库保留在我的主要语言中,然后在其中引入一些 Zend_Translate 概念。Zend_Translate 应该为您提供您正在寻找的后备解决方案。虽然主要导航和核心设计对我的网站来说不是什么大问题,但我现在最关心的是如何存储所有主要内容以及如何翻译,因为这些元素包含 HTML 等。对于主要内容,我可能会使用一些替代方法,并为每种语言使用带有表格的单独数据库。

于 2011-07-06T14:00:48.147 回答