自定义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,强制使用正确的语言环境:
这里第三个参数就是指定翻译使用的Locale,直接用主页面的请求Locale覆盖Offcanvas上下文里的错误值。{{ 'enquiry.amount.subtitle'|trans({}, 'messages', app.request.get('_locale'))|sw_sanitize }} - 排查插件的控制器/路由逻辑
如果你的Offcanvas是通过插件自定义的路由返回的,检查对应控制器是否正确继承了Storefront的基础控制器,或者是否在代码中硬编码了Locale为en-GB。确保控制器里没有手动设置Locale的错误逻辑,比如:
要改为动态获取当前请求的Locale,或者从Storefront的上下文里读取:// 错误示例:硬编码Locale $this->request->setLocale('en-GB');$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
相关产品推荐
相关产品推荐

