【发布时间】:2016-05-03 08:55:04
【问题描述】:
我有一些麻烦,在我的数据库中管理我的 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 个请求……而且仅针对特定模型。如果我有嵌套模型,它是指数级的……
那么,通过内容i18ned来获取数据是很复杂的。示例查找具有特定名称的大学很复杂。
而且更新等工作量很大……
所以我想知道,如果将数据保存为 JSON,直接在相关表中是否是个好主意。类似的东西
{
fr : { 'name':'Ma super université' },
en : { 'name':'My kick ass university' }
}
并继续使用 Sequelize Hooks 构建并插入适当的数据到我的对象中。
你怎么看? 你如何管理这个?
编辑
我用的是mysql数据库
它涉及大约 20 个字段(跨模型)
如果没有设置内容,我必须使用 my default_lang 设置默认值(例如,如果没有设置内容,法语中的 event.description 将与英语相同)
【问题讨论】:
-
只是我想知道为什么要将静态 i18n 数据存储在数据库中?因为一般 i18n 数据在更改源时需要更改。
标签: node.js database internationalization sequelize.js