You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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语言系统自动适配(推荐)

无需创建新显示,直接通过视图语言设置实现自动适配:

  1. 进入视图编辑页面,点击顶部高级选项卡,找到语言设置项。
  2. 将语言模式设置为当前页面语言,保存视图。
  3. 确保Drupal后台已开启URL语言检测(路径:/admin/config/regional/language/detection)。

此时访问/pt-br/articles/glossary会自动加载对应语言的内容,无需额外添加过滤器。

方案2:修正现有过滤器配置

如果必须使用独立显示,调整过滤条件:

  1. 移除内容修订:翻译语言过滤器,只保留内容:Delivery Language过滤器,并设置为= 巴西葡萄牙语。
  2. 检查field_page_category字段的多语言状态:确保该字段已开启多语言支持,且葡语文章的页面分类字段值正确设置为Glossary(需确认语言版本的字段值是否同步)。
  3. 验证视图关系设置:如果使用字段翻译,确保视图关联的字段调用的是当前语言版本,而非原始语言版本。

方案3:修复SQL关联的语言过滤缺失

从生成的SQL可以看到,node__field_page_category表未按语言过滤,可能导致拉取到原始语言的分类值。需要补充字段语言过滤:

  1. 在视图中添加字段:页面分类的关系,选择使用当前语言的值。
  2. 重新配置页面分类的过滤条件,基于该关系进行筛选,确保只匹配当前语言下分类为Glossary的内容。

内容的提问来源于stack exchange,提问作者Happy Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:57:22