Урок 4: Включение поддержки нескольких языков в Yii2 (translations)

Многие сайты нуждаются в поддержки нескольких языков. Например, если ваш стартап раскручивается как к России, так и зарубежом. Разработчики 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/.
Язык меняется автоматически. То есть, если у вас сейчас русский, то станет английский и наоборот.

Спасибо за прочтение. Пишите в комментарии, что хотите видеть в следующем уроке.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *