管理数据库国际化的最佳方式

时间:2016-01-26 17:19:51

标签: node.js database internationalization sequelize.js

我遇到了一些麻烦,在我的数据库中管理我的i18n

目前,我的应用程序只提供两种语言,但为了实现可扩展性,我希望以“最佳”方式实现。

我可以复制description_fr, description_en之类的所有字段,但我根本无法解决这个问题。我现在所做的是一个外部表,称之为content,它的架构是这样的:

id_ref => entity referenced id (2)
type => table name (university)
field => field of the specific table (description)
lang => which lang (fr, en, es…)
content => and finally the appropriate content. 

我认为精确起来很重要,我使用sequelizeJS作为ORM。所以我可以使用有用的钩子作为afterFind,afterCreate和afterUpdate。因此,每次我想找到一个资源时,在找到它之后,我的钩子会检索该资源的所有内容,并使用货物值确定我的对象。它有效,但我并不喜欢这个。

但我有一些麻烦:

  • 它大大增加了我对数据库的请求数量:例如,如果我选择50行,我必须多做50个请求..而且仅针对特定模型。如果我有嵌套模型,那就是指数......

  • 然后,通过内容获取数据很复杂。查找具有特定名称的大学的示例很复杂。

  • 这是更新等工作的很多工作......

所以我想知道,如果这是一个好主意,可以直接在相关表中保存为JSON数据。像

这样的东西
{
    fr : { 'name':'Ma super université' },
    en : { 'name':'My kick ass university' }
}

继续使用Sequelize Hooks构建并在我的对象中插入适当的数据。

你怎么看? 你是如何管理的?

修改

  • 我使用的是mysql数据库

  • 它涉及大约20个领域(交叉模型)

  • 如果没有内容集,我必须使用我的default_lang设置默认值(例如,如果没有内容设置,法语中的event.description将与英语中的相同)

1 个答案:

答案 0 :(得分:0)

我使用了这个npm包sequelize-i18n。使用sequelize 3.23.2对我来说效果很好,不幸的是它似乎还没有对sequelize 4.x的支持。