headless-cms - Gentics Mesh - 多语言支持 - 节点列表中的跨语言 - GraphQL查询。
Gentics Mesh版本:v1.5.1
介紹
假设我们有模式 A 类型的字段。list 和列表类型。节点 和允许的模式。B. (见(1))。
- 的实例。B 节点已被创建 (b1-EN)在语言上 褝 和(b1-DE)在 德.
- 一个实例 B 节点已被创建 (b2-EN)的语言。褝.
- 一个实例 A 节点已被创建 (a1-DE)在语言上 德 和 b1-DE 和 b2-EN 被添加到节点列表中 (Bs) a1.
因此,当选择 德 Gentics Mesh CMS中的语言,Node。a1-DE (德)有一个2个节点的列表 b1-DE, b2-EN.
当应用以下GraphQL查询时。
{
node(path: "/a1-DE") {
... on A {
path
uuid
availableLanguages
fields {
Bs {
... on B {
path
fields {
id
}
}
}
}
}
}
}
结果是 。
{
"data": {
"node": {
"path": "/a1-DE",
"uuid": "30dfd534cdee40dd8551e6322c6b1518",
"availableLanguages": [
"de"
],
"fields": {
"Bs": [
{
"path": "/b1-DE",
"fields": {
"id": "b1-DE"
}
},
{
"path": null,
"fields": null
}
]
}
}
}
}
问题:为什么结果没有在节点列表中显示b2-EN节点?
为什么结果没有在节点列表中显示b2-EN节点?是否查询错误?我想得到的是该节点的默认语言版本 (b2-EN),因为 b2-DE 所以预期的结果是 。
{
"data": {
"node": {
"path": "/a1-DE",
"uuid": "30dfd534cdee40dd8551e6322c6b1518",
"availableLanguages": [
"de"
],
"fields": {
"Bs": [
{
"path": "/b1-DE",
"fields": {
"id": "b1-DE"
}
},
{
"path": "/b2-EN",
"fields": {
"id": "b2-EN"
}
}
]
}
}
}
}
在文档中(2)。
如果没有找到其他匹配的内容,将回退到配置的默认语言。如果这也失败了,将返回Null。
谁能告诉我?
(1): Schema
{
"name": "A",
"container": false,
"autoPurge": false,
"displayField": "id",
"segmentField": "id",
"urlFields": [
"id"
],
"fields": [
{
"name": "Bs",
"type": "list",
"label": "Bs",
"required": false,
"listType": "node",
"allow": [
"B"
]
},
{
"name": "id",
"type": "string",
"label": "id",
"required": true
}
]
}
(2) https:/getmesh.iodocsgraphql#_multilanguage_support。
【回答】:
当通过GraphQL加载节点时,有一些已知的问题和不一致的行为。请看这个问题。https:/github.comgenticsmeshissues971)。
在你的例子中,被查询的节点列表将始终使用配置的默认语言(在 mesh.yml
). 在您的情况下,这似乎是 de
. 这就是为什么只有英文的节点没有结果的原因。
在这个问题解决之前,你可以通过加载节点列表的所有语言来解决这个问题。
{
node(path: "/a1-DE") {
... on A {
path
uuid
availableLanguages
fields {
Bs {
... on B {
languages {
path
language
fields {
id
}
}
}
}
}
}
}
}
你将节点列表中所有语言的内容。这意味着你将不得不在收到响应后在你的代码中过滤所需的语言。