如何使用Zend,l18n mysql建模多语言数据库?

时间:2011-07-06 07:29:51

标签: zend-framework internationalization zend-db zend-db-table zend-locale

我知道这个话题已经讨论了几次,但它们都没有代表我的最终解决方案。

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

到目前为止,

我的想法是为了解决问题:

两个主键:( ID,语言) 优点:通过数据库抽象层轻松访问数据库。 问题:外键,关系出货,后备

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

是否有任何概念证明自己或优于其他概念?有没有人已经创建了这样的东西,可以与我分享他的经验?在这种情况下是否存在修改过的Zend DB Controller?如何将此信息链接到表单?

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

亲切的问候,

曼努埃尔

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我现在正在解决同样的问题。

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

答案 2 :(得分:0)

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

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

@tawfekov是这样的还是类似的东西可以用学说轻易实现?