Symfony3项目中含Twig链接的表单标签翻译方案咨询
解决Symfony3表单标签中带动态链接的翻译问题
你的问题出在Twig语法的错误使用上——在trans过滤器的参数数组里,不需要再嵌套{{ }}标签,直接调用path()函数即可。下面是可行的解决方案:
步骤1:配置翻译字符串
首先在你的翻译文件(比如messages.en.yml或对应语言的文件)中,定义带有占位符的标签文本,占位符用%包裹:
annonces.form.valide_cgu_cgv: "I accept the <a href='%cgu_link%'>CGU</a> and <a href='%cgv_link%'>CGV</a>"
步骤2:正确编写Twig代码
修改你的表单渲染代码,移除参数里多余的{{ }},并确保最后用raw过滤器解析HTML标签:
{{ form_row(form.valid, { 'label': 'annonces.form.valide_cgu_cgv'|trans({ '%cgu_link%': path('page_statique', {'page': 'cgu'}), '%cgv_link%': path('page_statique', {'page': 'cgv'}) })|raw }) }}
为什么原来的写法不行?
你之前在trans的参数数组里写了{'cgu_link' : {{ path(...)}}},这是错误的Twig语法——在过滤器的参数中,直接写表达式(比如函数调用)即可,不需要再用模板输出标签{{ }},否则会导致Twig解析失败。
另外,Symfony翻译组件默认使用%作为占位符的分隔符,所以翻译字符串里的占位符要和参数里的键对应(比如%cgu_link%对应数组里的'%cgu_link%')。最后加上|raw是为了让Twig不转义HTML标签,否则链接会显示成纯文本。
内容的提问来源于stack exchange,提问作者wyllyjon
相关产品推荐
相关产品推荐

