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

Drupal 8-9 REST PATCH提交带翻译节点报422验证错误如何解决?

可以通过一次PATCH请求完成多语言节点的提交,不需要分多次更新,你之前报错是因为请求体结构不符合Drupal REST接口的多语言提交规范。

报错原因

Drupal核心REST/JSON:API默认的单字段值校验逻辑不支持直接在字段数组内传入多语言值,可翻译字段的不同语言版本值不能放在顶层字段的数组内,所以会触发title字段不能存储超过1个值的422校验错误。

单请求提交多语言节点的实现方案

前置要求

  • 后台已开启对应内容类型的翻译功能,且需要翻译的字段已勾选「允许用户翻译」
  • 接口调用账号已分配以下权限:
    • 管理内容翻译
    • 对应内容类型的编辑权限
    • 对应内容类型的翻译权限
  • REST接口已启用Content资源的PATCH方法,接受JSON格式提交

请求配置

  1. 请求地址:PATCH /entity/node/{{你的节点ID}}
  2. 请求头:
    Content-Type: application/json
    X-CSRF-Token: 你的请求csrf令牌
    Authorization: 你的认证信息(如Basic Auth、Bearer令牌等,根据你的认证方式配置)
    
  3. 请求体结构调整为如下格式:
    const data = {
      "type": [{"target_id": "charset"}],
      // 源语言(这里示例为英文)的字段值
      "langcode": [{"value": "en"}],
      "title": [{"value": sName1}],
      "field_unicode_range": [{"from": iFrom, "to": iTo}],
      // 所有其他语言的翻译内容统一放在translations字段下
      "translations": {
        "ru": {
          "title": [{"value": sName2}]
          // 俄语版本的其他可翻译字段也放在此处
        }
        // 需新增更多语言翻译时,直接在translations下加对应语言code为键的配置即可
      }
    };
    

注意事项

  • 如果字段是全站共享的非翻译字段,直接放在顶层结构即可,不需要在每个翻译里重复提交
  • 不需要提前手动创建各语言的翻译版本,接口会自动根据translations的配置创建不存在的翻译
  • 如果你用JSON:API接口,核心原生实现暂时不支持单请求提交多语言,需要配合第三方贡献模块才能实现,建议直接用上述REST接口方案更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:07