[英]How to translate collections in Laravel 5?
我正在使用pluck 方法来检索值。 如何翻译这些值? (这些值是选择输入字段的选项)
$relationtypes = Relationtype::pluck('name', 'id');
我的关系类型是:供应商、客户等。
我还找到了一个更方便的解决方案:
$relationtypes = RelationType::pluck('name', 'id')->map(function ($item, $key) {
return trans('labels.' . $item . '');
});
将此传递给您的视图,您可以使用:
{!! Form::select('relationtypes[]', $relationtypes,
isset($relation) ? $relation->relationtypes->pluck('id')->toArray() : 0, ['class' => 'form-control']) !!}
希望这可以帮助其他人!
您的控制器方法可能如下所示:
public function index () {
$relationtypes = Relationtype::pluck('name', 'id');
// A better place for this might be a middleware
App::setlocale('your-locale');
return view('relationtypes.index, compact('relationtypes'));
}
在您看来,迭代它们:
<select>
@foreach (types as type)
<option value="{{ type.id }}">{{ trans(type.name) }}</option>
@endforeach
</select>
如果您想使用trans
函数翻译值,您需要事先在resources\\lang\\<locale>\\<file>.php
例如,让我们对数据库中的值进行映像:
| id | name |
|----|------------|
| 1 | slug-one |
| 2 | slug-two |
| 3 | slug-three |
然后在resources\\lang\\nl\\slugs.php
return [
'slug-one' => 'whatever translation for slug-on in nl',
// ...
];
这种方法适用于非动态值,如果您的值是动态的,则翻译可能必须在某些 db 字段中,例如: name_nl
, name_en
也许?
但是已经有很多软件包可以解决这个问题。
我们可以创建自定义 Collection 方法。
Collection::macro('translate', function ($prefix) {
return $this->map(function ($item) use ($prefix) {
return trans($prefix . $item);
});
});
在 AppServiceProvider 中。
和用法:
Model::pluck('code_name', 'id')->translate('system.code.')->implode(',');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.