如何在 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') 

它输出:

&lt;strong&gt;Find&lt;/strong&gt; 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 5 中更改语言

Laravel:如何访问本地磁盘中的文件? - 文件不存在

如何在 Laravel 中将服务器时间转换为本地时间?

Laravel - 如何在本地开发中使用 https 服务 laravel 项目

Laravel 5:如何将本地文件复制到 Amazon S3?

如何将 Laravel Blade 中的第一个字母大写