diff --git a/src/Kdyby/Translation/DI/TranslationExtension.php b/src/Kdyby/Translation/DI/TranslationExtension.php index b12a5c31..148c0976 100644 --- a/src/Kdyby/Translation/DI/TranslationExtension.php +++ b/src/Kdyby/Translation/DI/TranslationExtension.php @@ -54,6 +54,7 @@ class TranslationExtension extends Nette\DI\CompilerExtension self::RESOLVER_REQUEST => TRUE, self::RESOLVER_HEADER => TRUE, ), + 'hookToMonolog' => TRUE, // checks for \Monolog\Logger and automatically hooks logging of untranslated messages ); /** @@ -100,6 +101,10 @@ public function loadConfiguration() $catalogueCompiler->addSetup('enableDebugMode'); } + if ( $config['hookToMonolog'] && class_exists('\Monolog\Logger' ) ) { + $translator->addSetup('setLogger', array( '@Monolog\Logger' )); + } + $this->loadLocaleResolver($config); $builder->addDefinition($this->prefix('helpers')) diff --git a/src/Kdyby/Translation/Translator.php b/src/Kdyby/Translation/Translator.php index 24dae9fe..673ada2c 100644 --- a/src/Kdyby/Translation/Translator.php +++ b/src/Kdyby/Translation/Translator.php @@ -73,7 +73,11 @@ class Translator extends BaseTranslator implements ITranslator */ private $localeWhitelist; + /** @var callable[] */ + public $onUntranslated; + /** @var \Monolog\Logger */ + private $logger; /** * @param IUserLocaleResolver $localeResolver @@ -134,6 +138,9 @@ public function translate($message, $count = NULL, $parameters = array(), $domai return $message; } elseif ($message instanceof Nette\Utils\Html) { + if (!empty($this->onUntranslated) ) + $this->onUntranslated( $message ); + if ($this->panel) { $this->panel->markUntranslated($message); } @@ -173,6 +180,9 @@ public function trans($message, array $parameters = array(), $domain = NULL, $lo $result = parent::trans($id, $parameters, $domain, $locale); if ($result === "\x01") { + if (!empty($this->onUntranslated) ) + $this->onUntranslated( $message ); + if ($this->panel !== NULL) { $this->panel->markUntranslated($message); } @@ -211,6 +221,9 @@ public function transChoice($message, $number, array $parameters = array(), $dom } if ($result === "\x01") { + if (!empty($this->onUntranslated) ) + $this->onUntranslated( $message ); + if ($this->panel !== NULL) { $this->panel->markUntranslated($message); } @@ -416,6 +429,26 @@ public static function buildWhitelistRegexp($whitelist) return $whitelist ? '~^(' . implode('|', $whitelist) . ')~i' : NULL; } + /** + * @param \Monolog\Logger $logger + * @return Translator + */ + public function setLogger( $logger ) { + $this->logger = $logger; + if ( $logger !== NULL ) { + $this->onUntranslated[] = array( $this, 'logUntranslated' ); + } + return $this; + } + + /** + * @param string $message + */ + public function logUntranslated($message) { + if ( $this->logger !== NULL ) { + $this->logger->warning( "Untranslated message '{$message}'" ); + } + } /*************************** Nette\Object ***************************/