【发布时间】:2017-02-08 14:02:18
【问题描述】:
我希望GraphQL/Relay 社区中的某个人遇到了这个问题。
我们有一个多语言系统,这意味着结果是本地化的。所以我们有一个名为lang 的参数,它被传递给字段解析器。
查询是这样写的:
query {
viewer(lang: ja) {
books { <- Type is `Book`
id
title <- This would be localized to Japanese.
}
}
}
哪个会返回:
{
"data": {
"viewer": {
"books": [
{
"id": "SOMETHINGSOMETHING123",
"name": "ハリー・ポッター" // "Harry Potter" in Japanese.
}
]
}
}
}
这是可能的,因为可翻译字段的解析器看起来像这样(注意我使用的是dataloader):
...
resolve: (parent, args, ast, { rootValue }) => {
const { language } = rootValue
const { BookLoader } = rootValue.loaders
return BookLoader.TranslationsLoader(language).load(parent.id).then(translations => translations[parent.id].title || parent.title)
}
如果存在翻译,它将使用该翻译而不是原始值。
在我们将Relay 引入我们的项目之前,它一直运行良好。
我们想利用 Relay 的 node,并使其部分工作,即:
query {
node(id: "SOMETHINGSOMETHING123") {
...b
}
}
fragment b on Book {
id
name
}
但是由于使用node 不能像viewer 这样的参数可以,
没有办法通过语言。
我如何将language parameters 传递给适用于标准查询和节点的解析器?
【问题讨论】:
标签: javascript graphql relay graphql-js