diff --git a/src/mibew/configs/routing.yml b/src/mibew/configs/routing.yml index cdccd8c3..436d5510 100644 --- a/src/mibew/configs/routing.yml +++ b/src/mibew/configs/routing.yml @@ -90,6 +90,13 @@ cron: path: /cron defaults: { _controller: Mibew\Controller\CronController::runAction } +# A set of localization constants for the client side applications is generated +# dynamically +js_translation: + path: /locales/{locale}/translation.js + defaults: + _controller: Mibew\Controller\Localization\JsTranslationController::indexAction + license: path: /license defaults: { _controller: Mibew\Controller\LicenseController::indexAction } diff --git a/src/mibew/libs/classes/Mibew/Controller/Localization/JsTranslationController.php b/src/mibew/libs/classes/Mibew/Controller/Localization/JsTranslationController.php new file mode 100644 index 00000000..af5fb4a4 --- /dev/null +++ b/src/mibew/libs/classes/Mibew/Controller/Localization/JsTranslationController.php @@ -0,0 +1,64 @@ +attributes->get('locale'); + + $item = $this->getCache()->getItem('translation/js/' . $locale); + $content = $item->get(Invalidation::OLD); + if ($item->isMiss()) { + $item->lock(); + + $messages = load_messages($locale); + $content = sprintf( + '%s(%s);', + 'Mibew.Localization.set', + json_encode($messages) + ); + + $item->set($content); + } + + $response = new Response(); + $response->headers->set('Content-Type', 'text/javascript'); + $response->setContent($content); + + return $response; + } +} diff --git a/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationController.php b/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationController.php index 73ee1bc4..36bf250f 100644 --- a/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationController.php +++ b/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationController.php @@ -190,6 +190,9 @@ class TranslationController extends AbstractController save_message($target, $string['source'], $translation); + // Remove cached client side translations. + $this->getCache()->getItem('translation/js/' . $target)->clear(); + $page['saved'] = true; $page['title'] = getlocal("Translations"); $page = array_merge( diff --git a/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationImportController.php b/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationImportController.php index c936e454..a4131752 100644 --- a/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationImportController.php +++ b/src/mibew/libs/classes/Mibew/Controller/Localization/TranslationImportController.php @@ -116,6 +116,9 @@ class TranslationImportController extends AbstractController // Try to import new messages. import_messages($target, $file->getRealPath(), $override); + // Remove cached client side translations. + $this->getCache()->getItem('translation/js/' . $target)->clear(); + // The file is not needed any more. Remove it. unlink($file->getRealPath()); } catch (\Exception $e) { diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/chat.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/chat.handlebars index 8b354d49..ac492117 100644 --- a/src/mibew/styles/dialogs/default/templates_src/server_side/chat.handlebars +++ b/src/mibew/styles/dialogs/default/templates_src/server_side/chat.handlebars @@ -22,6 +22,9 @@ + + + @@ -30,43 +33,11 @@ + {{{additional_js}}}