Вывод пустого значения в переводе

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Вывод пустого значения в переводе

Сообщение vitovt »

Реализовал переводы через базу данных. Все ключи для переводов в виде

page.about.page_title
page.about.heading
page.about.subheading

и так далее

Если в базе есть перевод = все хорошо, если в базе в качестве перевода пустая строка - то выводится ключ. Не могу понять, как мне разрешить отображать пустое значение ?

Кусок кода который отвечает за вывод сообщений в стандартом MessageSource такой

Код: Выделить всё

protected function translateMessage($category, $message, $language)
    {
        $key = $language . '/' . $category;
        if (!isset($this->_messages[$key])) {
            $this->_messages[$key] = $this->loadMessages($category, $language);
        }
        if (isset($this->_messages[$key][$message]) && $this->_messages[$key][$message] !== '') {
            return $this->_messages[$key][$message];
        } elseif ($this->hasEventHandlers(self::EVENT_MISSING_TRANSLATION)) {
            $event = new MissingTranslationEvent([
                'category' => $category,
                'message' => $message,
                'language' => $language,
            ]);
            $this->trigger(self::EVENT_MISSING_TRANSLATION, $event);
            if ($event->translatedMessage !== null) {
                return $this->_messages[$key][$message] = $event->translatedMessage;
            }
        }

        return $this->_messages[$key][$message] = false;
    }
единсвтенное, что приходит в голову, это создать свой класс, отнаследовать его от DbMessageSource и переопределить метод translateMessage

убрав проверку

Код: Выделить всё

&& $this->_messages[$key][$message] !== ''
но может как-то гибче можно?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вывод пустого значения в переводе

Сообщение zelenin »

Код: Выделить всё

$this->trigger(self::EVENT_MISSING_TRANSLATION, $event);
            if ($event->translatedMessage !== null) {
                return $this->_messages[$key][$message] = $event->translatedMessage;
            }
я так понимаю, можно подписаться на событие, и задать на лету перевод, в т.ч. пустое (не null)
Ответить