如何在Shopware插件中创建名称可翻译的客户组
解决Shopware客户组多语言翻译不生效问题
问题出在你直接使用语言代码(如de_DE、en_GB)作为翻译数组的键,而Shopware要求翻译关联的是语言实体的ID,而非语言代码。系统无法识别这些代码对应的语言,因此始终显示默认语言的翻译内容。
修正步骤:
- 先通过
languageRepository根据语言代码获取对应的语言ID - 将翻译数组的键替换为获取到的语言ID
- 操作时确保上下文(
$context)权限足够,插件安装场景建议使用Context::createDefaultContext()
修正后的代码示例:
// 从DI容器获取languageRepository(可在插件类构造函数注入) /** @var LanguageRepository $languageRepository */ $languageRepository = $this->container->get('language.repository'); // 根据语言代码查询对应ID $deLangId = $languageRepository->search((new Criteria())->addFilter(new EqualsFilter('code', 'de_DE')), $context)->first()->getId(); $enGbLangId = $languageRepository->search((new Criteria())->addFilter(new EqualsFilter('code', 'en_GB')), $context)->first()->getId(); // 创建带多语言翻译的客户组 $customerGroupRepository->create([ [ 'id' => Uuid::randomHex(), 'registrationActive' => false, 'displayGross' => true, 'translations' => [ Defaults::LANGUAGE_SYSTEM => [ 'name' => 'Customer group', ], $deLangId => [ 'name' => 'Kundengruppe', ], $enGbLangId => [ 'name' => 'Customer group', ] ] ], ], $context);
额外注意事项:
- 确保目标语言(
de_DE、en_GB)已在Shopware后台安装并启用 - 若在插件
install方法中执行,优先使用Context::createDefaultContext()避免语言上下文干扰 - 可添加语言存在性判断,防止因语言未安装导致的报错
内容的提问来源于stack exchange,提问作者M.E.
相关产品推荐
相关产品推荐

