如何使用 graphql 获得 drupal 节点的特定翻译
Posted
技术标签:
【中文标题】如何使用 graphql 获得 drupal 节点的特定翻译【英文标题】:How to get a specific translation of drupal node with graphql 【发布时间】:2019-10-26 07:37:57 【问题描述】:我正在使用drupal 8
构建一个带有gatsby
和graphql
的无头页面。
如何查询页面的翻译?
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
不会返回法语的翻译。仅当您将drupal
的gatsby
中的api 路由更改为localhost/fr/jsonapi 时。但我认为你不能在运行时更改 api 路由。
您能否再次编辑您的问题,并提供有关您问题的更多详细信息。你到底想达到什么目标,是什么阻碍了你到达那里?默认语言是什么,还有多少其他语言?
节点的relationships
下是否有东西可以让你看到当前页面的翻译版本?
relationships
中没有翻译。我更新了问题。
我认为您肯定需要找到一种方法来创建翻译页面之间的关系,对吧?否则,您需要为每种语言单独构建。以上是关于如何使用 graphql 获得 drupal 节点的特定翻译的主要内容,如果未能解决你的问题,请参考以下文章
使用 apollo angular GraphQL 在 Drupal8 中添加用户
Gatsby / Drupal8 解耦:如何在从 Drupal 文件目录中提取的 Gatsby 页面上呈现图像?
在Neo4j中,我们如何使用graphql将生成查询后获得的键值对存储到另一个现有节点?