В 17-ом уроке мы изучим тему, которая сделает ваше приложение доступным для пользователей из разных стран. Локализация это не просто перевод текста, а адаптация форматов дат, чисел и даже логики под культурные особенности аудитории. В Yii 2 всё это реализуется элегантно и эффективно.
Перевод текстов с помощью компонента i18n
Первое, с чем сталкивается разработчик при создании мультиязычного приложения, это необходимость переводить статический текст: кнопки, заголовки, сообщения. В Yii 2 за это отвечает компонент i18n (сокращение от internationalization).
Чтобы начать работу, нужно настроить компонент в конфигурации приложения. Откройте файл config/web.php и добавьте секцию i18n:
'components' => [ 'i18n' => [ 'translations' => [ 'app*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@app/messages', 'fileMap' => [ 'app' => 'app.php', 'app/error' => 'error.php', ], ], ], ], ],
Здесь:
app*— шаблон, определяющий категории переводов (например,app,app/error).PhpMessageSource— используем PHP-файлы для хранения переводов (можно заменить наDbMessageSourceдля БД).basePath— путь к папке с языковыми файлами.
Для перевода текста в коде используется метод Yii::t(). Например:
echo Yii::t('app', 'Welcome to our site!');
Практическая задача 1:
Создайте базовую конфигурацию i18n и переведите фразу «Hello, world!» на русский язык. Проверьте результат на странице.
Создание языковых файлов
Языковые файлы хранят соответствия между исходными строками и их переводами. В Yii 2 они обычно располагаются в папке messages, а их структура зависит от локали (например, ru-RU, en-US).
Допустим, мы хотим поддерживать русский и английский языки. Создадим следующую структуру:
messages/
├── en-US/
│ └── app.php
└── ru-RU/
└── app.php
Содержимое ru-RU/app.php:
return [ 'Welcome to our site!' => 'Добро пожаловать на наш сайт!', 'You have {n, plural, =0{no items} =1{one item} other{# items}}.' => 'У вас {n, plural, =0{нет элементов} =1{один элемент} other{# элементов}}.', ];
Особенности:
- Поддерживаются плейсхолдеры (например,
{n}) и плюрализация. - Для сложных проектов файлы можно группировать в подпапки (например,
messages/ru-RU/app/error.php).
Практическая задача 2:
Добавьте в языковой файл фразу с плюрализацией для отображения количества товаров в корзине. Используйте её в шаблоне.
Динамическое переключение языка
Чтобы пользователи могли выбирать язык, нужно реализовать механизм переключения. Чаще всего это делается через URL-параметр, куки или сессию.
Добавим в контроллер действие actionSetLanguage:
public function actionSetLanguage($lang) { Yii::$app->language = $lang; Yii::$app->session->set('userLanguage', $lang); return $this->redirect(Yii::$app->request->referrer); }
Теперь в шаблоне можно разместить переключатель:
<?= Html::a('Русский', ['site/set-language', 'lang' => 'ru-RU']) ?> <?= Html::a('English', ['site/set-language', 'lang' => 'en-US']) ?>
Важно:
- Убедитесь, что выбранный язык сохраняется между запросами (например, в сессии).
- Для SEO добавьте альтернативные ссылки с атрибутом
hreflang.
Практическая задача 3:
Создайте виджет «Выбор языка», который отображает флаги стран и сохраняет выбор пользователя в куки.
Локализация дат и чисел
Разные регионы используют разные форматы. Например, в США дата пишется как «MM/DD/YYYY», а в Германии «DD.MM.YYYY». Yii 2 предоставляет форматтеры для автоматического преобразования.
Форматирование даты:
echo Yii::$app->formatter->asDate('2024-01-15', 'long'); // 15 января 2024 г.
Форматирование чисел:
echo Yii::$app->formatter->asDecimal(1234.567, 2); // 1 234,57 (для ru-RU)
Настройка локали:
Форматтер использует текущий язык приложения. Если нужно переопределить локаль, сделайте это в конфиге:
'components' => [ 'formatter' => [ 'locale' => 'ru-RU', 'dateFormat' => 'php:d.m.Y', ], ],
Практическая задача 4:
Выведите текущее время в формате «14:30» для английского и «14 час. 30 мин.» для русского языка, используя настройки форматтера.
Заключение
Локализация важный этап в разработке международных приложений. Сегодня вы научились работать с переводами, динамически менять язык и адаптировать форматы данных. Не забывайте тестировать приложение на разных языках, чтобы убедиться в корректности отображения.
Если вы хотите глубже освоить Yii 2, посмотрите полный курс для начинающих. Там вас ждёт ещё больше практики и примеров!
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


