【问题标题】:Best way to manage internationalization in database在数据库中管理国际化的最佳方法
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多