多语言NodeJs API

我正在用swagger和mongoDB在nodejs中开发一个REST API。

我正在寻找一个模块或一个良好的做法,以帮助我的多语言支持。 每个collections品都应该有自己的翻译,我不确定最好的办法。

我看了几个模块,但我发现的一切都是为了静态数据。

翻译由用户决定,可以随时以任何语言发布。 我需要确保用户能够以他发布的每种语言检索他的数据。

这里是我想要做的一个例子,但我不确定这是一个推荐的做法。

集合:公寓

英文资料:

var apartment = { "id": "1x213" "name": "Flat 1", "price": 100000, "rooms": 2, "city": "paris", "country": "france", "zipcode": 75016, "address": "11 avenue du general de Gaulles", "description": "A wonderful apartment at 2 minutes from the eiffel tower" } 

法国的数据:

 var apartment = { "id": "1x214" "name": "Appartement 1", "price": 100000, "rooms": 2, "city": "paris", "country": "france", "zipcode": 75016, "address": "11 avenue du general de Gaulles", "description": "Un magnifique appartement, à 2 minutes de la tour eiffel" } 

集合:多语言

 var multilanguage = { "id": "1y679" "language": [{'en': '1x213' }, { 'fr': '1x214'}] } 

我在这里读了一些其他的做法,但我不确定这是不是很大的目的。 这对我来说似乎有点混乱。

谢谢

我终于select了以下方法。 我认为这是最简单和可扩展的方法。 我从ruby的Rails良好的实践中吸取了灵感。

英文资料:

 var apartment = { "id": "1x213", "group_id": "c3por2d2", "language": "en", "name": "Flat 1", "price": 100000, "rooms": 2, "city": "paris", "country": "france", "zipcode": 75016, "address": "11 avenue du general de Gaulles", "description": "A wonderful apartment at 2 minutes from the eiffel tower" } 

数据在法国:

 var apartment = { "id": "1x214", "group_id": "c3por2d2", "language": "fr", "name": "apartment 1", "price": 100000, "rooms": 2, "city": "paris", "country": "france", "zipcode": 75016, "address": "11 avenue du general de Gaulles", "description": "Un magnifique appartement, à 2 minutes de la tour eiffel" } 

我现在有一个普通的group_id,我可以查询获取用户发布的每种语言的数据,我也可以查询特定语言的数据。

在像mongoDB这样的文档存储中,我通常会把语言相关的信息变成如下的对象数组:

 var apartment = { "id": "1x214", "group_id": "c3por2d2", "price": 100000, "rooms": 2, "city": "Paris", "country": "France", "zipcode": 75016, "address": "11 Avenue du Général de Gaulle", "names": [{ "language": "fr_FR", "text": "Appartement 1" }, { "language": "en_US", "text": "Apartment 1" }, { "language": "en_GB", "text": "Flat 1" }], "descriptions": [{ "language": "fr_FR", "text": "Un magnifique appartement, à 2 minutes de la tour eiffel" }, { "language": "en_US", "text": "A wonderful apartment at 2 minutes from the eiffel tower" }, { "language": "en_GB", "text": "A wonderful flat at 2 minutes from the eiffel tower" }] } 

或者像这样键入一个键值对象:

 var apartment = { "id": "1x214", "group_id": "c3por2d2", "price": 100000, "rooms": 2, "city": "Paris", "country": "France", "zipcode": 75016, "address": "11 Avenue du Général de Gaulle", "names": { "fr_FR": "Appartement 1", "en_US": "Apartment 1", "en_GB": "Flat 1" }, "descriptions": { "fr_FR": "Un magnifique appartement, à 2 minutes de la tour eiffel", "en_US": "A wonderful apartment at 2 minutes from the eiffel tower", "en_GB": "A wonderful flat at 2 minutes from the eiffel tower" } } 

他们都是灵活的解决scheme。 它们还允许前端在不重新加载对象的情况下在语言之间进行切换。 您不需要在多个对象中重复非翻译。 一个数组往往与静态types语言一起工作得更好。

我知道这是一段时间,但你可能想检查一下: http : //dnd1.com/blog/2016/08/19/multilanguage-api-mongo/

它为您的API中的多种语言设置了一个框架。 也许“响应钩”部分将帮助你。