我希望有人在GraphQL/Relay
社区遇到此问题。本地化使用中继时的GraphQL结果
我们有一个多语言系统,这意味着结果是本地化的。所以我们有一个叫做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)
}
如果存在翻译,则将使用该翻译而不是第e原始值。 这工作正常,直到我们将Relay
引入到我们的项目中。
我们要利用继电器的node
,并取得了其部分的工作,即:
query {
node(id: "SOMETHINGSOMETHING123") {
...b
}
}
fragment b on Book {
id
name
}
但由于使用node
不能带参数,像viewer
可以, 没有办法通过的语言。
如何将language parameters
传递给解析器,该解析器可以同时处理标准查询和节点?
嘿,感谢您的回答。我们正在使用上下文,当我们通过Node ID进行中继查询时,它不起作用。 –
感谢您的编辑。我会编辑我的答案以反映这一点,但这些查询是代表用户抛出的,这意味着我可能需要日语结果,但您可能需要英语。 –