如何在 Laravel 本地化文件中使用 HTML 标签?
Posted
技术标签:
【中文标题】如何在 Laravel 本地化文件中使用 HTML 标签?【英文标题】:How can I use HTML tags in a Laravel localization file? 【发布时间】:2015-08-28 22:02:45 【问题描述】:我正在尝试利用 Laravel 的本地化功能,但我需要能够强调或加粗部分短语。将 html 标记插入语言文件会导致它在输出到刀片时被转义。
例如,这是我的语言文件条目:
return [
'nav' => [
'find' => '<strong>Find</strong> Your Home',
]
];
当我从刀片中调用它时:(我也尝试过使用三重大括号。)
trans('base.nav.find')
它输出:
<strong>Find</strong> Your Home
我可能会将措辞拆分为:
return [
'nav' => [
'fyh' => [
'find' => 'Find',
'yh' => 'Your Home',
]
]
]
然后输出:
<strong> trans('base.nav.fyh.find') </strong> trans('base.nav.fyh.yh')
但这似乎有点矫枉过正。有更好的解决方案吗?
【问题讨论】:
第二个选项不仅矫枉过正,而且已经坏了。如果在他们的语言中动词出现在句子的末尾,翻译应该怎么做?您可以将翻译后的字符串彼此靠近放置在页面上,但通常不希望将它们连接起来形成句子或段落。 【参考方案1】:使用@lang
指令:
@lang('nav.find')
来源:Retrieving Translation Strings
【讨论】:
此@lang 指令在用于“占位符”时对跨度标记没有帮助【参考方案2】:使用 Laravel 5.6 及更高版本,可以使用 __
助手和刀片语法:
!! __('pagination.next') !!
必须为分页刀片模板执行这些操作。
【讨论】:
【参考方案3】:使用!! !!
而不是
来防止转义:
!! trans('nav.find') !!
【讨论】:
啊,该死的!我不知道我是怎么忽略的。谢谢你。当 SO 允许时,我会接受答案。 @MichaelIrigoyen 你提到了三重大括号,所以我只想提一下,他是 L4 和 L5 之间的变化之一。在 L4 中,
未转义,
已转义。在 L5 中,!! !!
未转义,
已转义。
谢谢,我上一次使用 Laravel 是第 4 版,所以现在我正在使用全新安装的 5.1,我错过了这个更改
请注意,如果攻击者能够以某种方式写入 /lang,那么未转义的方法可能会导致 XSS 等漏洞以上是关于如何在 Laravel 本地化文件中使用 HTML 标签?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 如何在本地开发中使用 https 服务 laravel 项目