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

Chi*_*ote 5 database internationalization node.js sequelize.js

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

\n\n

目前我的应用程序上只有两种语言可用,但为了可扩展,我想以“最佳”方式做到这一点。

\n\n

我可以复制所有字段description_fr, description_en,但我对此一点也不舒服。我现在所做的是一个外部表,称之为外部表content,它的架构是这样的:

\n\n
id_ref => entity referenced id (2)\ntype => table name (university)\nfield => field of the specific table (description)\nlang => which lang (fr, en, es\xe2\x80\xa6)\ncontent => and finally the appropriate content. \n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为精确性很重要,我使用sequelizeJS 作为 ORM。所以我可以使用一个有用的钩子,如 afterFind、afterCreate 和 afterUpdate。因此,每次我想查找一个资源时,找到它后,我的钩子都会检索该资源的所有内容,并用商品值明确设置我的对象。它有效,但我不喜欢这个。

\n\n

但我对此有一些麻烦:

\n\n
    \n
  • 它大大增加了我对数据库的请求数量:例如,如果我选择 50 行,我必须再执行 50 个请求..,而且只是针对特定模型。如果我有嵌套模型,它是指数\xe2\x80\xa6

  • \n
  • 那么,通过内容来获取数据就变得很复杂。查找具有特定名称的大学的示例很复杂。

  • \n
  • 而且更新等工作量很大......

  • \n
\n\n

所以我想知道,将数据直接保存为 JSON 是否是一个好主意。就像是

\n\n
{\n    fr : { \'name\':\'Ma super universit\xc3\xa9\' },\n    en : { \'name\':\'My kick ass university\' }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

并继续使用 Sequelize Hooks 构建正确的数据并将其插入到我的对象中。

\n\n

你怎么认为 ?\n你如何处理这个?

\n\n
\n\n

编辑

\n\n
    \n
  • 我使用mysql数据库

  • \n
  • 涉及约20个领域(跨模型)

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

  • \n
\n

gts*_*gts 1

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