如何使用laravelcollective/html实现本地化并完成表单标签翻译
当然有办法用laravelcollective/html直接实现表单标签的翻译,不用退回到原生<label>标签~这里有两种实用方案:
方案1:直接传递翻译后的文本作为标签内容
Laravel的翻译辅助函数__()或者Lang::get()可以直接在Form::label()的第二个参数里使用,和你用Blade的@lang()效果完全一致:
// 使用翻译辅助函数(推荐,更简洁) {{ Form::label('name', __('messages.name')) }} // 或者使用Lang门面 {{ Form::label('name', Lang::get('messages.name')) }}
只要你的语言文件(比如resources/lang/en/messages.php)里已经定义了对应的键值,这个写法就能直接输出翻译后的标签文本。
方案2:自定义Form宏(适合频繁使用的场景)
如果你的项目里大量需要翻译表单标签,可以自定义一个Form宏,让调用更简洁。在App\Providers\AppServiceProvider的boot()方法里添加以下代码:
use Illuminate\Support\Facades\Form; public function boot() { Form::macro('transLabel', function ($name, $translationKey = null, $options = []) { // 如果没传翻译键,默认用 "messages.$name" 作为键 $key = $translationKey ?? "messages.$name"; // 调用原生的label方法,传入翻译后的文本 return Form::label($name, __($key), $options); }); }
之后你就可以这样调用:
// 默认使用messages.name作为翻译键 {{ Form::transLabel('name') }} // 自定义翻译键 {{ Form::transLabel('email', 'forms.user_email') }} // 还可以添加标签属性 {{ Form::transLabel('name', null, ['class' => 'form-label']) }}
补充说明
Laravel Collective的Form组件本身并没有内置专门的翻译参数,但通过上面两种方式,你完全可以保持使用Form类的写法,同时实现和原生@lang一样的翻译效果。记得提前在对应的语言文件中配置好翻译内容哦~
内容的提问来源于stack exchange,提问作者Danabek Duisekov
相关产品推荐
相关产品推荐

