Как создать мультиязычную метку в Yii
Мне интересно, использует ли фреймворк Yii определенные атрибуты Labels в мультиязычном процессе.
Так что если у меня есть
public function attributeLabels() {
return array(
'email' => 'Email address',
'rememberMe' => 'Remember me next time',
'password' => 'Password'
);
}
Будет ли это переведено на другой язык? Или я должен сделать что-то вручную, чтобы работать?
3 ответа
Yii не переводит это автоматически. Вам необходимо использовать встроенный в Yii i18n, вручную добавить переводы и изменить метки следующим образом:
public function attributeLabels() {
return array(
'email' => Yii::t('account','Email address'),
'rememberMe' => Yii::t('account','Remember me next time'),
'password' => Yii::t('account','Password')
);
}
Вы можете получить более подробную информацию об интернационализации вашего приложения на Quick Start, чтобы интернационализировать ваше приложение в Yii Framework
Ну, вы можете использовать встроенную систему перевода для перевода меток вашего атрибута, например:
public function attributeLabels() {
return array(
'email' => Yii::t('myapp','Email address'),
);
}
а затем в папке сообщений создайте каталог для вашего языка, например:
messages\dk\myapp.php
myapp.php должен вернуть перевод, например:
return array('Email address' => 'TRANSLATION...');
Затем вам нужно установить язык вашего приложения в файле конфигурации, например.
'language' => 'dk',
Я предполагал, что Yii AR будет запускать getAttributeLabel через Yii::t. Не желая делать все это копирование и вставку на десятках моделей, я добавил эту функцию в свой промежуточный класс AR:
public function getAttributeLabel($attribute)
{
$baseLabel = parent::getAttributeLabel($attribute);
return Yii::t(get_called_class(), $baseLabel);
}
Теперь нужно написать команду оболочки, которая перебирает модели и добавляет их метки в файл сообщений.