多语言 NodeJs API

Multilingual NodeJs API

我正在用 swagger 和 mongoDB.

在 nodejs 中开发 REST API

我正在寻找一个模块或一个好的实践来帮助我 multi-language 支持。 collections 中的每个 objects 都应该有自己的翻译,我不确定最好的翻译方式。

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

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

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

Collection:公寓

英文数据:

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"
        }

Collection : 多语言

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

我读到了一些其他的做法 here 但我不确定它是否适合大用途。我觉得有点乱。

谢谢

最后我选择了下面的方法。 我认为这是最简单且更具可扩展性的方法。 我从 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"
    }
}

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

我知道已经有一段时间了,但你可能想看看这个:http://dnd1.com/blog/2016/08/19/multilanguage-api-mongo/

它设置了一个框架来管理您 API 中的多种语言。也许 "response hook" 部分会对您有所帮助。