首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何i18n一个express-graphql应用程序?

如何i18n一个express-graphql应用程序?
EN

Stack Overflow用户
提问于 2017-09-14 14:58:18
回答 2查看 1.8K关注 0票数 1

我正在寻找一个示例来解析graphql- i18n :我不想将语言传递到每个查询中,但我只找到了非常稀少的文档,说明如何将语言放入上下文中以使其可用于解析。

我正在使用node和graphql-express,每一个使用这个组合或其他组合的提示都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 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会比这复杂得多):

代码语言:javascript
复制
app.use('/api/v1'
        ,graphqlHTTP((req) =>{
          return {
            schema: schema.schema,
            rootValue: schema.root,
            graphiql: false,
            pretty: true,
            context: {language: req.language}
          }
        }));

现在,您可以从解析器的上下文中选取所选语言:

代码语言:javascript
复制
var root = {
    ... 
    yourApiCall: async (query, context, schema) => {
      let language = context.language || "en"
      ...
      return {localizedStrings: ...}
    }

如果您不显式设置上下文,则将上下文设置为请求:您可以从那里派生它,但我仍然认为显式控制您的上下文会更好。请检查此解决方案是否适用于您的graphql版本-这里最费力的部分是找出调用的正确签名,因为graphql倾向于过于聪明地省略配置参数以使其更容易开箱即用-大多数示例因此缺少这种方法正常工作所需的查询、上下文和模式的签名。

票数 1
EN

Stack Overflow用户

发布于 2017-09-19 22:35:47

不是深入了解graphql,而是确信您可以使用http://i18next.com ->或更具体地说是express中间件https://github.com/i18next/i18next-express-middleware来解决问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46212494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档