使用 GraphQL 查询从多语言模式中获取本地化数据

Posted

技术标签:

【中文标题】使用 GraphQL 查询从多语言模式中获取本地化数据【英文标题】:Get localized data from multilingual schema with GraphQL query 【发布时间】:2019-02-25 23:18:58 【问题描述】:

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

非常感谢!

【问题讨论】:

【参考方案1】:

针对特定语言查询(具有多个字段)的一般解决方案可能是:

将语言参数传递给查询解析器 将语言存储在解析器上下文中 根据需要使用上下文中的语言

查询:

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

【讨论】:

以上是关于使用 GraphQL 查询从多语言模式中获取本地化数据的主要内容,如果未能解决你的问题,请参考以下文章

IOS:启动镜像多语言

纸壳CMS可视化建站系统搭建多语言网站

iOS 国际化(多语言)

iOS 国际化(多语言)

iOS 国际化(多语言)

德尔福。使用 idHTTP 显示获取。在多语言 Windows 中获取 Unicode 文本