如何使用 graphql 获得 drupal 节点的特定翻译

Posted

技术标签:

【中文标题】如何使用 graphql 获得 drupal 节点的特定翻译【英文标题】:How to get a specific translation of drupal node with graphql 【发布时间】:2019-10-26 07:37:57 【问题描述】:

我正在使用drupal 8 构建一个带有gatsbygraphql 的无头页面。

如何查询页面的翻译?

query MyQuery 
  allNodePage 
    nodes 
      body 
        value
      
    
  

我想以特定语言获取此allNodePage.nodes.body.value

编辑: 这是 graphiql allNodePage 实体。

编辑_1:

根据this issue,您只能通过修改drupal 8中的api host-route(/fr/jsonapi/node/page)来查询翻译。

但在gatsby-source-drupal-plugin 中,api 主机路由在运行时是不可更改的。

编辑_2:

我尝试翻译一个页面节点。默认语言为英语。我想请求drupal中存在的德语翻译。

【问题讨论】:

语言代码是否出现在页面节点中的任何位置? 我用 allPageNode 实体的屏幕截图更新了这个问题。有语言代码,但无法设置语言代码。 我正在做类似的事情,我会尝试在 graphql 查询中获取节点翻译。你是如何翻译你的节点的?是通过 UI 主选项卡菜单吗?如果您已经找到解决方案,请发布。谢谢 嗨@Rick。我切换到strapi 来维护数据。如上所述,您只能在 drupal 中翻译带有 /fr/jsonapi/node/page/en/jsonapi/node/page 的内容。另一种可能性是为模型中的每种语言添加值。例如 title__en、title__fr 或 content__en、content__fr。 嗨@Tomole。还有另一种方式(如果您或其他人有兴趣),我会发布作为答案 【参考方案1】:

经过一些实验,我发现它还不能与 Drupal JSON API 一起使用,但我可以使用 Drupal GraphQL 模块。这可以与 Gatsby 和 gatsby-source-graphql 一起使用,而不是 gatsby-source-drupal。查询看起来像这样:


  nodeQuery(
    filter: 
      conditions:[
        operator: IN, field: "type", value: ["my_node_type"],
        operator: EQUAL, field: "langcode", value: "de",
      ]
    
  ) 
    entities 
      ...on NodeMyNodeType 
        entityTranslation(language: DE) 
          entityLabel
        
      
    
  

【讨论】:

【参考方案2】:

如果您想通过langcode 过滤allNodePage,您可以这样做:

    query MyQuery 
      allNodePage(filter: langcode: eq: "fr_FR") 
        nodes 
          body 
            value
          
        
      
    

当然,您可以使用变量代替“fr_FR”而不是硬编码

query MyQuery($lang: String!) 
      allNodePage(filter: link: eq: $lang:) 
        nodes 
          body 
            value
          
        
      
    

【讨论】:

这似乎是一个很棒的解决方案,但drupal 不会返回法语的翻译。仅当您将drupalgatsby 中的api 路由更改为localhost/fr/jsonapi 时。但我认为你不能在运行时更改 api 路由。 您能否再次编辑您的问题,并提供有关您问题的更多详细信息。你到底想达到什么目标,是什么阻碍了你到达那里?默认语言是什么,还有多少其他语言? 节点的relationships 下是否有东西可以让你看到当前页面的翻译版本? relationships 中没有翻译。我更新了问题。 我认为您肯定需要找到一种方法来创建翻译页面之间的关系,对吧?否则,您需要为每种语言单独构建。

以上是关于如何使用 graphql 获得 drupal 节点的特定翻译的主要内容,如果未能解决你的问题,请参考以下文章

使用 apollo angular GraphQL 在 Drupal8 中添加用户

Gatsby / Drupal8 解耦:如何在从 Drupal 文件目录中提取的 Gatsby 页面上呈现图像?

在Neo4j中,我们如何使用graphql将生成查询后获得的键值对存储到另一个现有节点?

Drupal 6:在 tpl.php 中对多个值进行分组

如何从 drupal 7 视图中删除重复项(具有相同字段的节点)?

Drupal GraphQL 集成问题