@Alex122

Как переопределить базовый метод в yii2?

Всем привет! Вопрос заключается в следующим. Есть базовый класс BaseYii в Yii2. В этом классе содержится метод t(). Сейчас я использую yii\i18n\DbMessageSource для переводов, которые хранятся в базе. Перевод можно получиться при помощи вызова метода t() с соответствующими аргументами.

Задача заключается в том, чтобы дописывать в базу переводы, если их еще там нету, при вызове метода t(). Например, вызываем t('category', 'title'), оно само должно проверять есть ли перевод в базе и дописывать его, если его там нету. Как я могу это делать, если я хочу вызывать все тот же Yii::t() в своем приложении?

Простите, если не совсем точно описал, это мой первый вопрос.
  • Вопрос задан
  • 667 просмотров
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Есть все готовое, не надо ничего переопределять.
Просто нужно правильно сконфигурировать компонент.

www.yiiframework.com/doc-2.0/guide-tutorial-i18n.h...

'components' => [
    // ...
    'i18n' => [
        'translations' => [
            'app*' => [
                // ...
                'on missingTranslation' => ['app\components\TranslationEventHandler', 'handleMissingTranslation']
            ],
        ],
    ],
],


Знайте, подобные штуки должны работать только при YII_ENV === 'dev'
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Можно переопределить метод создав свой класс, подключив его в конфиге и унаследовав его от yii\i18n\DbMessageSource
НО!!! Зачем это все нужно? Не проще ли сделать в админке кнопку или по крону запускать скрипт, который будет парсить папку view и собирать не забитые в базу? Действие будет ресурсоемкое, но 1раз в определенный период времени. Внес изменения - запустил, порядок. А в Вашей идеи это будет доп действие при каждом рендере страницы, причем при каждом обращении к t().
Ответ написан
Комментировать
doniys_a
@doniys_a
Backend-разработчик (Php, node.js, python, ruby)
https://github.com/lajax/yii2-translate-manager
В нем из коробки есть акшн scan, который собирает и добавляет в базу новые текста из Yii::t
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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