如何在XLIFF翻译文件中转义单引号(EasyAdmin3/Symfony7场景)
Symfony7/EasyAdmin3 翻译消息中单引号包裹占位符的正确处理
在EasyAdmin3+Symfony7项目中,给Flash消息的文件名添加单引号包裹时,遇到占位符无法正常解析的问题。
控制器设置Flash消息的代码:
$this->addFlash('success', new TranslatableMessage('import.success', [ 'filename' => 'import.csv', ]));
尝试过的XLIFF写法及问题:
<target>File {filename}-'{filename}'-&apos;{filename}&apos;-"{filename}" imported.</target>
页面实际显示结果:
File import.csv-{filename}-{filename}-"import.csv" imported.
可见单引号内的{filename}占位符未被替换,仅双引号包裹的占位符正常解析。
正确转义方式
Symfony翻译组件中,若要在翻译文本中使用单引号并让占位符正常解析,需要用两个连续的单引号('')来转义单个单引号。转义后的单引号会被解析为单个单引号,同时不会影响占位符的替换逻辑。
修改后的XLIFF代码:
<target>File ''{filename}'' imported.</target>
效果说明
设置完成后,页面会正确显示:
File 'import.csv' imported.
原因解析
- 直接使用
'{filename}'时,Symfony会将单引号内的内容视为纯文本,跳过占位符解析,因此显示{filename}。 - 使用XML实体
&apos;转义单引号,最终仍会被解析为单个单引号,同样触发纯文本规则,占位符无法被替换。 - 双引号不属于Symfony翻译组件的纯文本触发规则,因此
"{filename}"能正常解析。
内容的提问来源于stack exchange,提问作者Falk Berger
相关产品推荐
相关产品推荐

