簡體   English   中英

使用GraphQL查詢從多語言架構中獲取本地化數據

[英]Get localized data from multilingual schema with GraphQL query

我有以下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服務器。

非常感謝你!

針對特定語言的查詢(具有多個字段)的一般解決方案可能是:

  • 將language參數傳遞給查詢解析器
  • 將語言存儲在解析器上下文中
  • 在需要的地方使用上下文中的語言

查詢:

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

解析器:

{
  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),
  })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM