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

如何同时更新customField及其所有语言版本的对应翻译内容

Shopware 6 自定义字段全语言同步更新方案

你遇到的现象是正常的,Context::createDefaultContext() 默认仅携带系统默认语言ID,当你的自定义字段设置了可翻译属性时,默认更新操作只会写入对应默认语言的翻译值,其他语言的customFields值不会被覆盖。

根据你的业务需求,可选择以下两种解决方案:

场景1:该自定义字段无需多语言差异化设置(推荐方案)

如果product_is_new这类全局属性不需要针对不同语言设置不同值,直接关闭自定义字段的可翻译属性即可:

  • 后台进入「设置」→「系统」→「自定义字段」,找到对应字段编辑
  • 取消勾选「可翻译」选项后保存,重新更新索引
  • 此时你原有代码直接运行即可全局生效,不需要额外处理多语言逻辑

场景2:该自定义字段需要保留可翻译能力,本次需同步更新所有语言值

如果需要保留字段的多语言能力,仅本次需要全语言同步赋值,可以直接在更新数据中传入所有语言的翻译配置,不需要循环创建Context,一次更新即可完成:

前置依赖

提前注入language.repository服务用于获取所有语言ID。

示例代码

$context = Context::createDefaultContext();
// 获取所有已激活的语言ID,不需要过滤激活状态可移除Filter规则
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('active', true));
$languageIds = $this->languageRepository->searchIds($criteria, $context)->getIds();

// 构造全语言翻译数据
$translations = [];
foreach ($languageIds as $languageId) {
    $translations[$languageId] = [
        'customFields' => [
            'product_is_new' => true
        ]
    ];
}

// 执行更新
$updateData = [[
    'id' => $productId,
    'translations' => $translations
]];
$this->productRepository->update($updateData, $context);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:04