Задать вопрос

Как задать язык для локализации дат Carbon?

Привет. Занимаюсь интернализацией проекта на Yii2. Появилась необходимость переводить даты и время. Для интернализации использую Yii2 Locale URLs, а для работы с датами Carbon.

Раньше, когда язык был только русский, делал таким образом (web/index.php):
<?php

use Carbon\Carbon;

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

$config = require __DIR__ . '/../config/web.php';

Carbon::setLocale('ru');

(new yii\web\Application($config))->run();


Решение еще тогда казалось мне достаточно костыльным. А сейчас оно и вовсе не будет работать, т.к. я хочу передать в функцию setLocale значение Yii::$app->language, а оно еще не будет сформировано.

Попробовал создать компонент, который будет устанавливать язык перевода. Для этого в конфиге прописал следующее:
'as afterRequest' => [
        'class' => 'app\components\CarbonLang',
    ],

А в компоненте CarbonLang:
class CarbonLang extends \yii\base\Behavior
{
    public function events()
    {
        return [
            Application::EVENT_AFTER_REQUEST => 'setCarbonLocale'
        ];
    }

    public function setCarbonLocale($event)
    {
        Carbon::setLocale(Yii::$app->language);
    }
}


В Yii::$app->language хранится верное значение языка (ru). При переключении языка оно также меняется. Но переводы не работают, отображаются всегда на английском.

Пожалуйста подскажите в каком направлении двигаться, чтобы решить данную задачу. Спасибо!
  • Вопрос задан
  • 162 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы