From 112f9b91aaea760c4dea1e7e3e43e784bc62be85 Mon Sep 17 00:00:00 2001 From: Franck Allimant Date: Tue, 22 Apr 2014 16:22:53 +0200 Subject: [PATCH] Fixed #326 --- .../Admin/TranslationsController.php | 36 ++++++++++++++++++- .../Thelia/Core/Template/TemplateHelper.php | 25 +++++++++++++ .../backOffice/default/translations.html | 2 +- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/core/lib/Thelia/Controller/Admin/TranslationsController.php b/core/lib/Thelia/Controller/Admin/TranslationsController.php index 84c0f7579..f28ea5792 100644 --- a/core/lib/Thelia/Controller/Admin/TranslationsController.php +++ b/core/lib/Thelia/Controller/Admin/TranslationsController.php @@ -15,6 +15,8 @@ namespace Thelia\Controller\Admin; use Symfony\Component\Finder\Finder; use Thelia\Core\Security\Resource\AdminResources; use Thelia\Core\Security\AccessManager; +use Thelia\Core\Translation\Translator; +use Thelia\Log\Tlog; use Thelia\Model\Module; use Thelia\Model\ModuleQuery; use Thelia\Core\Template\TemplateHelper; @@ -122,6 +124,12 @@ class TranslationsController extends BaseAdminController $walkMode = TemplateHelper::WALK_MODE_TEMPLATE; } + // If the module is not active, load the translation file, + // as it is not already loaded in Thelia.php + if (! empty ($domain) && ! $module->getActivate()) { + $this->loadTranslation($i18n_directory, $domain); + } + // List front and back office templates defined by this module $templateArguments['back_office_templates'] = implode(',', $this->getModuleTemplateNames($module, TemplateDefinition::BACK_OFFICE)); @@ -190,10 +198,16 @@ class TranslationsController extends BaseAdminController $i18n_directory = $template->getAbsoluteI18nPath(); $domain = $template->getTranslationDomain(); + + // Load translations files is this template is not the current template + // as it is not loaded in Thelia.php + if (! TemplateHelper::getInstance()->isActive($template)) { + $this->loadTranslation($i18n_directory, $domain); + } } // Load strings to translate - if ($directory) { + if ($directory && ! empty($domain)) { // Save the string set, if the form was submitted if ($i18n_directory) { @@ -257,4 +271,24 @@ class TranslationsController extends BaseAdminController if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, array(), AccessManager::UPDATE)) return $response; return $this->renderTemplate(); } + + private function loadTranslation($directory, $domain) + { + try { + $finder = Finder::create() + ->files() + ->depth(0) + ->in($directory); + + /** @var \DirectoryIterator $file */ + foreach ($finder as $file) { + list($locale, $format) = explode('.', $file->getBaseName(), 2); + + Translator::getInstance()->addResource($format, $file->getPathname(), $locale, $domain); + } + } catch (\InvalidArgumentException $ex) { + // Ignore missing I18n directories + } + } + } diff --git a/core/lib/Thelia/Core/Template/TemplateHelper.php b/core/lib/Thelia/Core/Template/TemplateHelper.php index 96ed4e89f..d5b996052 100644 --- a/core/lib/Thelia/Core/Template/TemplateHelper.php +++ b/core/lib/Thelia/Core/Template/TemplateHelper.php @@ -47,6 +47,31 @@ class TemplateHelper ); } + /** + * Check if a template definition is the current active template + * + * @param TemplateDefinition $tplDefinition + * @return bool true is the given template is the active template + */ + public function isActive(TemplateDefinition $tplDefinition) { + + switch ($tplDefinition->getType()) { + case TemplateDefinition::FRONT_OFFICE: + $tplVar = 'active-front-template'; + break; + case TemplateDefinition::BACK_OFFICE: + $tplVar = 'active-front-template'; + break; + case TemplateDefinition::PDF: + $tplVar = 'active-front-template'; + break; + case TemplateDefinition::EMAIL: + $tplVar = 'active-front-template'; + break; + } + + return $tplDefinition->getName() == ConfigQuery::read($tplVar, 'default'); + } /** * @return TemplateDefinition */ diff --git a/templates/backOffice/default/translations.html b/templates/backOffice/default/translations.html index 4582a8ae2..0d64b8dd5 100644 --- a/templates/backOffice/default/translations.html +++ b/templates/backOffice/default/translations.html @@ -60,7 +60,7 @@