/** * Save new messages * * @author Krzysztof Bednarczyk */ public function onKernelTerminate(PostResponseEvent $event) { if (!$event->isMasterRequest()) { return; } if (!method_exists($this->translator, 'getCollectedMessages')) { return; } $messages = $this->translator->getCollectedMessages(); if (empty($messages)) { return; } $languagesToClear = []; foreach ($messages as $message) { if (!in_array((int) $message['state'], [DataCollectorTranslator::MESSAGE_MISSING, DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK])) { continue; } if (!$this->manager->hasLocale($message['locale'])) { continue; } $language = $this->manager->getLanguage($message['locale']); $languagesToClear[$language->getId()] = $language; $this->manager->createTranslation($language, $message['id'], $message['domain']); } foreach ($languagesToClear as $language) { $this->manager->clearTranslationCache($language); } }
/** * @author Krzysztof Bednarczyk * @param Language|null $language * @return $this|LanguageManager */ public function clearTranslationCache(Language $language = null) { $cacheDir = $this->translator->getOptions()['cache_dir']; if (!file_exists($cacheDir)) { return $this; } $finder = (new \Symfony\Component\Finder\Finder())->in($cacheDir); if ($language) { $finder = $finder->contains(".{$language->getLocale()}."); } /** @var \SplFileInfo $file */ foreach ($finder->files() as $file) { @unlink($file->getRealPath()); } if ($language && $language->getAlias()) { return $this->clearTranslationCache($language->getAlias()); } return $this; }