我正在寻找一个示例来解析graphql- i18n :我不想将语言传递到每个查询中,但我只找到了非常稀少的文档,说明如何将语言放入上下文中以使其可用于解析。
我正在使用node和graphql-express,每一个使用这个组合或其他组合的提示都是非常感谢的!
发布于 2017-09-21 17:38:59
正如@jamuhl建议的那样,这里有一个示例,它使用i18next将选定的语言放在请求上,然后使用上下文将其传递给graphql:
首先设置i18next:
const i18next = require(' i18next ') //使用i18next i18next .use(i18nMiddleware.LanguageDetector) .init({ preload:'en','de‘});app.use(i18nMiddleware.handle(I18next))从查询、cookies或接受语言中检测语言;
下一步是在设置graphql时将其传递给context-object (通常,context-object会比这复杂得多):
app.use('/api/v1'
,graphqlHTTP((req) =>{
return {
schema: schema.schema,
rootValue: schema.root,
graphiql: false,
pretty: true,
context: {language: req.language}
}
}));现在,您可以从解析器的上下文中选取所选语言:
var root = {
...
yourApiCall: async (query, context, schema) => {
let language = context.language || "en"
...
return {localizedStrings: ...}
}如果您不显式设置上下文,则将上下文设置为请求:您可以从那里派生它,但我仍然认为显式控制您的上下文会更好。请检查此解决方案是否适用于您的graphql版本-这里最费力的部分是找出调用的正确签名,因为graphql倾向于过于聪明地省略配置参数以使其更容易开箱即用-大多数示例因此缺少这种方法正常工作所需的查询、上下文和模式的签名。
发布于 2017-09-19 22:35:47
不是深入了解graphql,而是确信您可以使用http://i18next.com ->或更具体地说是express中间件https://github.com/i18next/i18next-express-middleware来解决问题
https://stackoverflow.com/questions/46212494
复制相似问题