多语言界面和内容与mongo /节点

时间:2016-11-04 13:40:45

标签: node.js mongodb schema data-modeling database

我们正在开发一个新的应用程序,它将在saas模型中在线提供。用户可以访问某些工具和一些有关如何使用它的教程。

我的问题是什么是使(界面和内容)多语言的最佳方法。举个例子 - 想象一下使用以下链接的简单导航:

  

-section 1   | -page a   | -page b
  第2节   第3节   | -page c

每个页面都包含明显的标签,标题,按钮等。

我一直在寻找一段时间,我找到的最接近的答案就在这里: Schema for a multilanguage database 但是,它描述了关于关系数据库的方法。

在研究了其他问题之后,看起来最好的方法是将section / page / label / title / button的每个名称存储为具有ID的对象保持翻译在单独的表中,包括对象的对应ID,语言和内容。在SQL世界中,简单连接可以完成工作,但是因为我们使用Mongo,我想有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

我建议将所有翻译存储在您的mongoDb数据库中,然后使用Express API从首页执行有关翻译的请求。

[FRONT] ----> [Send mongoDB _id(s)] ---> [EXPRESS API] ===> [MONGOOSE]

[FRONT] <---------- [Translations] <---- [EXPRESS API] <=== [MONGOOSE]

Mongoose Schema

       const Content = Schema({
                // Type of item you are dealing with
                contentType: {
                    type: String,
                    enum: ['link', 'title', 'section', 'page'],
                },

                // Value of translations
                translations: [{
                    languageName: String,
                    value: String,
                }],

                // All Contents that are inside
                childs: [{
                    type: Schema.Types.ObjectId,
                    ref: 'Content',
                }],
        });

数据示例(MongoDB文档)

       [{
             _id: '00000000000000000000001',
             contentType: 'section',
             translations: [{
                 languageName: 'French',
                 value: 'Section Enfant',
             }, {
                 languageName: 'English',
                 value: 'Child Section',
             }],
             dads: ['00000000000000000000002'],
        }, {
             _id: '00000000000000000000002',
             contentType: 'page',
             translations: [{
                 languageName: 'French',
                 value: 'Page Baguette',
             }, {
                 languageName: 'English',
                 value: 'Tee Page',
             }],
             childs: [],
       }]

请求示例:检索有关一个随机部分的所有数据

   Content.find({
       contentType: 'section',
   })
   .then((ret) => {
       if (!ret) return [];

       // Here recursively get childs and childs and childs
       // until you got everything
   })
   .then(() => {})
   .catch(err => {});

工具

Mongoose

----&GT; Mongoose Queries

----&GT; Mongoose Populate

Express

PS Here是一个github项目,解释了如何从头开始创建Web /节点项目(安装工具......等) [Babel,Gulp, Webpack,ES6 ......]