Многие сайты нуждаются в поддержки нескольких языков. Например, если ваш стартап раскручивается как к России, так и зарубежом. Разработчики yii2 сделали удобный механизм с переводом текста. Давайте разбираться.
Для начала создайте папку messages в корне проекта. Помните, отталкиваться надо от английского. Скорее всего вы захотите сделать английскую и русскую версию сайта. На этом примере и рассмотрим.
Создаём папку messages/ru-RU и заходим в неё. Теперь мы можем создать различные .php файлы, в которых массивы будут возвращать переводы. Создайте app.php и вносите туда общие сообщения. Затем можно создать buttons.php и помещать туда переводы кнопок. Это удобно и позволяет вам редактировать без долгого поиска по одному файлу.
Формат файлов такой:
<?php return [ 'Message' => 'Сообщение', 'Test' => 'Тест', //и так далее ];
Теперь, чтобы воспользоваться переводом просто воспользуйтесь такой строчкой:
Yii::t('app', 'Test');
Как вы догадались, app — название файла, а test — текст. Если у вас в настройках выставлен русский язык, то выведется «Тест», а если английский — Test.
Для тех, кто хочет дать пользователям менять язык — воспользуйтесь данной техникой:
1. Создайте модель Lang.php в папке models соответственно.
<?php namespace app\models; use Yii; use yii\base\Model; class Lang extends Model { public function getCurrentLang() { $lang = Yii::$app->request->cookies->getValue('lang'); return $lang; } }
Затем создайте файл /assets/LangRequest.php с содержимым:
<?php namespace app\assets; use Yii; use yii\web\Request; use app\models\Lang; class LangRequest extends Request { CONST RU = "ru-RU"; CONST EN = "en-US"; public function resolve() { $resolve = parent::resolve(); $lang = Lang::getCurrentLang(); ($lang == "en") ? $language = self::EN : $language = self::RU; Yii::$app->language = $language; return $resolve; } private function getCurrentLang() { $lang = Yii::$app->request->cookies->getValue('lang'); return $lang; } } ?>
Теперь нам нужно подключить LangRequest. Открываем настройки и в request вставляем
'class' => 'app\assets\LangRequest'
Теперь вы можете менять ваш язык по запросу http://site.com/lang/.
Язык меняется автоматически. То есть, если у вас сейчас русский, то станет английский и наоборот.
Спасибо за прочтение. Пишите в комментарии, что хотите видеть в следующем уроке.