我们正在开发一个新的应用程序,它将在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,我想有更好的方法来做到这一点。
答案 0 :(得分:1)
我建议将所有翻译存储在您的mongoDb数据库中,然后使用Express API从首页执行有关翻译的请求。
[FRONT] ----> [Send mongoDB _id(s)] ---> [EXPRESS API] ===> [MONGOOSE]
[FRONT] <---------- [Translations] <---- [EXPRESS API] <=== [MONGOOSE]
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',
}],
});
[{
_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 => {});
----&GT; Mongoose Queries
----&GT; Mongoose Populate
PS :Here是一个github项目,解释了如何从头开始创建Web /节点项目(安装工具......等) [Babel,Gulp, Webpack,ES6 ......]