如何在Drupal Views中按语言显示翻译内容?
Drupal视图多语言过滤问题:如何展示巴西葡萄牙语术语表内容
现有视图显示配置
显示1:Articles
- 过滤条件:
- 内容:已发布(= 是)
- 内容:内容类型(= Article)
- 页面设置:
- 路径:
/articles/insights
- 路径:
显示2:Page
- 过滤条件:
- 内容:已发布(= 是)
- 内容:内容类型(= Article)
- 内容:页面分类(= Glossary)
- 页面设置:
- 路径:
/articles/glossary
- 路径:
显示3:A-F
- 过滤条件:
- 内容:已发布(= 是)
- 内容:内容类型(= Article)
- 内容:页面分类(= Glossary)
- 内容:副标题(正则
^[A-Fa-f].*$)
- 区块设置:
- 区块名称:无
- 区块分类:Lists (Views)
- 允许设置:每页项目数
注:
/articles/insights用于展示普通文章列表,Page、A-F及同类显示用于展示文章术语表;页面分类是字段field_page_category,添加文章时可选择该字段。
问题描述
现有一批已翻译为巴西葡萄牙语(pt-br)且页面分类为Glossary的文章,需要实现访问/pt-br/articles/glossary时,页面仅显示这些葡语内容。
尝试的方案及问题
尝试创建新显示,路径设为/pt-br/articles/glossary,并添加以下过滤条件:
- 内容:翻译语言(= 巴西葡萄牙语)
- 内容修订:翻译语言(= 巴西葡萄牙语)
但页面仍显示所有英文链接,找不到合适的语言过滤器实现需求。
生成的SQL查询
SELECT "node_field_data"."langcode" AS "node_field_data_langcode", "node__field_subtitle"."field_subtitle_value" AS "node__field_subtitle_field_subtitle_value", "node_field_data"."nid" AS "nid" FROM {node_field_data} "node_field_data" INNER JOIN {node__field_page_category} "node__field_page_category" ON node_field_data.nid = node__field_page_category.entity_id AND node__field_page_category.deleted = '0' INNER JOIN {node_field_revision} "node_field_revision" ON node_field_data.vid = node_field_revision.vid LEFT JOIN {node__field_subtitle} "node__field_subtitle" ON node_field_data.nid = node__field_subtitle.entity_id AND (node__field_subtitle.deleted = '0' AND node__field_subtitle.langcode = node_field_data.langcode) WHERE ((node__field_page_category.field_page_category_value = 'Glossary')) AND (("node_field_data"."status" = '1') AND ("node_field_data"."type" IN ('article')) AND ("node_field_data"."langcode" IN ('pt-br')) AND ("node_field_revision"."langcode" IN ('pt-br'))) ORDER BY "node__field_subtitle_field_subtitle_value" ASC
可用语言过滤器
| 标题 | 分类 |
|---|---|
| Delivery Language | 内容 |
| 原始语言 | 内容 |
| 翻译语言 | 内容 |
| 翻译源 | 内容 |
| 原始语言 | 内容修订 |
| 原始语言 | 内容修订 |
| 翻译语言 | 内容修订 |
| 翻译源 | 内容修订 |
解决配置方案
方案1:利用Drupal语言系统自动适配(推荐)
无需创建新显示,直接通过视图语言设置实现自动适配:
- 进入视图编辑页面,点击顶部
高级选项卡,找到语言设置项。 - 将语言模式设置为
当前页面语言,保存视图。 - 确保Drupal后台已开启URL语言检测(路径:
/admin/config/regional/language/detection)。
此时访问/pt-br/articles/glossary会自动加载对应语言的内容,无需额外添加过滤器。
方案2:修正现有过滤器配置
如果必须使用独立显示,调整过滤条件:
- 移除
内容修订:翻译语言过滤器,只保留内容:Delivery Language过滤器,并设置为= 巴西葡萄牙语。 - 检查
field_page_category字段的多语言状态:确保该字段已开启多语言支持,且葡语文章的页面分类字段值正确设置为Glossary(需确认语言版本的字段值是否同步)。 - 验证视图关系设置:如果使用字段翻译,确保视图关联的字段调用的是当前语言版本,而非原始语言版本。
方案3:修复SQL关联的语言过滤缺失
从生成的SQL可以看到,node__field_page_category表未按语言过滤,可能导致拉取到原始语言的分类值。需要补充字段语言过滤:
- 在视图中添加
字段:页面分类的关系,选择使用当前语言的值。 - 重新配置页面分类的过滤条件,基于该关系进行筛选,确保只匹配当前语言下分类为Glossary的内容。
内容的提问来源于stack exchange,提问作者Happy Coder
相关产品推荐
相关产品推荐

