我遇到了一些麻烦,在我的数据库中管理我的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将与英语中的相同)
答案 0 :(得分:0)
我使用了这个npm包sequelize-i18n。使用sequelize 3.23.2对我来说效果很好,不幸的是它似乎还没有对sequelize 4.x的支持。