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

自定义Offcanvas插件中代码片段翻译失效求助

问题分析与解决方案

核心问题

你的自定义Offcanvas渲染时使用的Locale上下文和主页面不一致——主页面Locale是nl-NL,但Offcanvas里是en-GB,这直接导致翻译始终读取英文版本。

具体解决步骤

  • 检查Offcanvas的加载方式
    如果是通过AJAX异步加载Offcanvas内容,要确保请求时带上当前页面的Locale参数。比如在发起AJAX请求时,把_locale作为参数传递:
    fetch('/path/to/offcanvas', {
      method: 'GET',
      headers: {
        'X-Requested-With': 'XMLHttpRequest'
      },
      params: {
        _locale: document.documentElement.lang // 取页面当前语言
      }
    })
    
  • 手动指定trans过滤器的Locale
    在模板里的trans过滤器中显式传入当前页面的Locale,强制使用正确的语言环境:
    {{ 'enquiry.amount.subtitle'|trans({}, 'messages', app.request.get('_locale'))|sw_sanitize }}
    
    这里第三个参数就是指定翻译使用的Locale,直接用主页面的请求Locale覆盖Offcanvas上下文里的错误值。
  • 排查插件的控制器/路由逻辑
    如果你的Offcanvas是通过插件自定义的路由返回的,检查对应控制器是否正确继承了Storefront的基础控制器,或者是否在代码中硬编码了Locale为en-GB。确保控制器里没有手动设置Locale的错误逻辑,比如:
    // 错误示例:硬编码Locale
    $this->request->setLocale('en-GB');
    
    要改为动态获取当前请求的Locale,或者从Storefront的上下文里读取:
    $locale = $this->context->getLanguage()->getLocale();
    
  • 验证Offcanvas的模板继承上下文
    确认你扩展的@Storefront/storefront/utilities/offcanvas.html.twig模板是否正确继承了Storefront的基础模板上下文,没有被插件的其他逻辑覆盖掉Locale变量。可以在Offcanvas模板里先输出上下文里的Locale来源,比如检查context.locale的值,而不是只看app.request.get('_locale')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:47:07