Вы можете определить перевод внутри объявления $columns
- он сохранит ваш массив результатов ручной итерации для замены типа переведенной строкой:
$columns = [
[
'attribute' => 'description',
'label' => Yii::t('data', 'Description'),
],
[
'attribute' => 'type',
'label' => Yii::t('data', 'Type'),
'value' => function ($data) {
return Yii::t('data', $data['type']);
}
],
];
Если лист большой и типы часто повторяются, выможет попытаться кэшировать переведенную строку - Yii::t()
может быть довольно дорогим:
$columns = [
[
'attribute' => 'description',
'label' => Yii::t('data', 'Description'),
],
[
'attribute' => 'type',
'label' => Yii::t('data', 'Type'),
'value' => function ($data) {
static $translations = [];
if (!isset($translations[$data['type']])) {
$translations[$data['type']] = Yii::t('data', $data['type']);
}
return $translations[$data['type']];
},
],
];
Это вызовет Yii::t()
только один раз для уникального типа.Но если список типов небольшой и жестко запрограммирован, вы можете упростить это еще больше - создайте getTranslatedTypes()
статический метод, который возвращает переведенный список всех типов:
public static function getTranslatedTypes() {
return [
'some type' => Yii::t('data', 'some type'),
// ...
];
}
И используйте его в качестве источника переводов:
$translations = Type::getTranslatedTypes();
$columns = [
[
'attribute' => 'description',
'label' => Yii::t('data', 'Description'),
],
[
'attribute' => 'type',
'label' => Yii::t('data', 'Type'),
'value' => function ($data) use ($translations) {
return $translations[$data['type']] ?? $data['type'];
},
],
];