Использование событий в Yii: Отправка письма на email, если нет перевода на какой-то язык

Использование событий в Yii: Отправка письма на email, если нет перевода на какой-то язык Событие выполняется, когда приложение что-либо сделало. Можно зарегистрировать несколько обработчиков событий, которые будут реагировать на разные типы событий. С помощью Yii::t можно переводить строки на разные языки. Сделаем так, чтобы при отсутствии перевода какой-либо фразы на другой язык нам приходило email письмо, что этот перевод отсутствует.

Обработчик события может получать параметры от события, с которым работает и в соответствии с этими параметрами что-то сделать. Нас интересует событие CMessageSource::onMissingTranslation, которое вызывается, если нет перевода строки (фразы), генерируемой Yii::t. То есть когда Yii::t напарывается на фразу, к которой мы забыли по нерасторопности добавить перевод на русский (или другой язык), наше приложение пускай нам отправит email, чтобы мы пошевелились. По умолчанию, когда такого события нет, Yii::t оставляет оригинальную фразу (т.е. например английскую, даже если язык выбран русский - просто из-за отсутствия фразы на русском).

Надо добавить в protected/config/main.php в компонентах:

... 
'components' => array(
'messages' => array(
		// using static class method as event handler
			'onMissingTranslation' => array('MyEventHandler', 'handleMissingTranslation'),
		),
...
),
...

И теперь создадим свой MyEventHandler в компонентах protected/components/MyEventHandler.php:

	<?php

	
	class MyEventHandler {
		static function handleMissingTranslation($event) {
				// event class for this event is CMissingTranslationEvent 
				// so we can get some info about the message 
				$text = implode("\n", array(
					'Language: '.$event->language, 
					'Category:'.$event->category, 
					'Message:'.$event->message
				)); 
				// sending email 
				mail('email@mysite.ru', 'Missing translation', $text);
		}
}

При просмотре сайта посетителями теперь на вашу почту будут приходить письма, из которых вы увидите чего и где забыли перевести. У нас на Loco.ru тоже есть многоязыковой проект, и такой способ себя оправдал быстро. 


Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.