Получить локализованные данные из многоязычной схемы с запросом GraphQL - PullRequest
0 голосов
/ 21 сентября 2018

У меня следующая схема MongoDB.

Item {
  _id: ObjectId,
  translations: [{
    language: String
    name: String
  }]
}

Так что мой экземпляр Item может выглядеть примерно так:

{
  _id: ObjectId("5ba3bf09d3121aba3ba2f488"),
  translations: [
  {
    language: "en"
    name: "a Car"
  },
  {
    language: "de",
    name: "der Wagen"
  }]
}

И я хочу иметь возможность запрашивать мои данные на определенном языкес Graphql таким образом.

{
  item(where: {language: "en"}) {
    name
  }
}

Так что это даст хороший результат с такой формой.

{
  name: "a Car"
}

Пожалуйста, не могли бы вы рассказать мне хорошую практику или хороший способ настроить мой Graphql?карта резольверов?

Я использую Apollo Server.

Большое спасибо!

1 Ответ

0 голосов
/ 25 февраля 2019

Общим решением для конкретного языкового запроса (с более чем одним полем) может быть:

  • передача параметра языка в распознаватель запросов
  • сохранение языка в распознавателеcontext
  • используйте язык из контекста везде, где это необходимо

Запрос:

query {
  item(language: "en") {
    name
    otherField
  }
}

Resolver:

{
  item: (_, { language }, context) => {
    context.language = language;
    return {
      name: (_, context) => getNameByLang(context.language),
      otherField: (_, context) => getOtherByLang(context.language),
    };
  },
}

Илиесли есть только одно переведенное поле:

query {
  item {
    name(language: "en")
  }
}

, то есть вы можете получить язык непосредственно в преобразователе имен в качестве аргумента.

{
  item: () => ({
    name: ({ language }) => getNameByLang(language),
  })
}
...