Laravel Collective表单Blade:无法直接在Form::label中用翻译语法?求高效方案
问题解答
首先明确说:你不能这么写是正确的,Blade的echo语法({{ }})和未转义输出语法({!! !!})是不能嵌套使用的,这么写会导致Laravel无法正确解析,最终可能把{!! __('messages.rep_findUsr') !!}当成纯字符串输出,而不是执行翻译逻辑。
接下来给你两种更快捷的实现方式,分场景来看:
场景1:翻译内容是纯文本(无HTML标签)
这是最常见的情况,你完全不需要嵌套语法,直接把__()函数的返回值作为Form::label的第二个参数传入即可:
{{ Form::label('search', __('messages.rep_findUsr')) }}
__()函数会自动返回翻译后的字符串,Form::label默认会对这个字符串进行转义输出(防止XSS),纯文本场景下完全够用。
场景2:翻译内容包含HTML标签(需要渲染HTML)
如果你的翻译内容里有HTML标签(比如<em>查找用户</em>),不想让Laravel转义这些标签,可以利用Form::label的第四个参数$escape,将它设置为false:
{{ Form::label('search', __('messages.rep_findUsr'), [], false) }}
第三个参数是标签的属性数组(比如['class' => 'form-label']),如果不需要额外属性,传空数组就行。设置$escape = false后,翻译内容里的HTML会被正常渲染,不需要用{!! !!}嵌套。
至于是否需要先把翻译结果存入变量?其实没必要,直接传入__()的返回值是最简洁的写法。当然如果同一个翻译内容需要在多个地方复用,提前存变量会更高效,比如:
$findUsrText = __('messages.rep_findUsr'); {{ Form::label('search', $findUsrText) }}
但这属于可选优化,不是必须的。
内容的提问来源于stack exchange,提问作者JahStation
相关产品推荐
相关产品推荐

