Javascript 使用继电器时本地化GraphQL结果
我希望Javascript 使用继电器时本地化GraphQL结果,javascript,graphql,relay,graphql-js,Javascript,Graphql,Relay,Graphql Js,我希望GraphQL/Relay社区中有人遇到这个问题 我们有一个多语言系统,这意味着结果是本地化的。因此,我们有一个名为lang的参数,它被传递给字段解析器 查询是这样写的: query { viewer(lang: ja) { books { <- Type is `Book` id title <- This would be localized to Japanese. } } } 这是可能的,因为可翻译字段的解析器如下所示(
GraphQL/Relay
社区中有人遇到这个问题
我们有一个多语言系统,这意味着结果是本地化的。因此,我们有一个名为lang
的参数,它被传递给字段解析器
查询是这样写的:
query {
viewer(lang: ja) {
books { <- Type is `Book`
id
title <- This would be localized to Japanese.
}
}
}
这是可能的,因为可翻译字段的解析器如下所示(请注意,我使用的是):
如果存在翻译,它将使用该翻译,而不是原始值。
在我们将Relay
引入我们的项目之前,这一切都很顺利
我们希望利用继电器的节点
,并使其部分工作,即:
query {
node(id: "SOMETHINGSOMETHING123") {
...b
}
}
fragment b on Book {
id
name
}
但是由于使用node
不能接受像viewer
can这样的参数,
没有办法通过这种语言
如何将
语言参数
传递给同时处理标准查询和节点的解析器?由于graphql js v0.6,每个解析器都会接收一个上下文
对象作为第三个参数。这有利于将上下文信息从服务器传递到GraphQL的执行阶段。例如,我们使用它来处理身份验证和授权。你可以在那里用你想要的语言通过考试。如果使用express graphql或koa graphql,默认情况下,它们将请求
对象作为上下文
传递。您可以从解析器中检查头
编辑:下面是一个使用express graphql在graphql解析器中处理会话的示例:嘿,谢谢你的回答。我们正在使用上下文,当我们通过节点ID查询中继时,它将不起作用。也感谢您的编辑。我将编辑我的答案以反映这一点,但这些查询是代表用户抛出的,这意味着我可能希望结果是日语的,但您可能希望结果是英语的。
...
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)
}
query {
node(id: "SOMETHINGSOMETHING123") {
...b
}
}
fragment b on Book {
id
name
}