【问题标题】:How can I use HTML tags in a Laravel localization file?如何在 Laravel 本地化文件中使用 HTML 标签?
【发布时间】: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') }}

但这似乎有点矫枉过正。有更好的解决方案吗?

【问题讨论】:

  • 第二个选项不仅矫枉过正,而且已经坏了。如果在他们的语言中动词出现在句子的末尾,翻译应该怎么做?您可以将翻译后的字符串彼此靠近放置在页面上,但通常不希望将它们连接起来形成句子或段落。

标签: php laravel blade laravel-localization


【解决方案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 等漏洞
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多