/** * This action is executed before execute any action in the application. * * @param PhalconEvent $event Event object. * @param Dispatcher $dispatcher Dispatcher object. * * @return mixed */ public function beforeDispatch(PhEvent $event, Dispatcher $dispatcher) { $di = $this->getDI(); $cookie = $di->getCookie(); $session = $di->getSession(); $config = $di->getConfig(); $languageCode = ''; if ($di->get('app')->isConsole()) { return; } // Detect language from cookie if ($cookie->has('languageCode')) { $languageCode = $cookie->get('languageCode')->getValue(); } else { // Get default language from language model $languageCode = LanguageModel::findFirst(['default = :isdefault: AND status = :enable:', 'bind' => ['isdefault' => LanguageModel::IS_DEFAULT, 'enable' => LanguageModel::STATUS_ENABLE]])->code; } // Set language code to session if ($session->has('languageCode') && $session->get('languageCode') != $languageCode || !$session->has('languageCode')) { $session->set('languageCode', $languageCode); } $messages = []; $directory = $di->get('registry')->directories->modules . ucfirst($dispatcher->getModuleName()) . '/Lang/' . $languageCode . '/' . strtolower($dispatcher->getControllerName()); $extension = '.php'; if (file_exists($directory . $extension)) { require $directory . $extension; } // add default core lang package require $di->get('registry')->directories->modules . self::DEFAULT_LANG_PACK . '/Lang/' . $languageCode . '/default.php'; $translate = new PhTranslateArray(['content' => array_merge($messages, $default)]); $di->set('lang', $translate); return !$event->isStopped(); }
/** * Check language parameter. * * @return void */ protected function _checkLanguage() { $language = preg_replace("/[^A-Za-z0-9?!]/", '', $this->request->get('lang', 'string')); if ($language && ($languageObject = Language::findFirst("language = '" . $language . "'"))) { $this->di->get('session')->set('language', $languageObject->language); $this->di->get('session')->set('locale', $languageObject->locale); } }
/** * Model validation. * * @return bool */ public function validation() { $condition = "language = '" . $this->language . "' AND locale = '" . $this->locale . "'"; if (!empty($this->id)) { $condition .= "AND id != " . $this->id; } $isValid = !(bool) Language::findFirst($condition); if (!$isValid) { $this->appendMessage(new Message(sprintf('Language "%s" with locale "%s" already exists.', $this->language, $this->locale))); } return $isValid; }
/** * Init locale. * * @param DI $di Dependency injection. * @param Config $config Dependency injection. * * @return void */ protected function _initI18n(DI $di, Config $config) { if ($di->get('app')->isConsole()) { return; } $languageObject = null; if (!$di->get('session')->has('language')) { /** @var Language $languageObject */ if ($config->installed) { $language = Settings::getSetting('system_default_language'); if ($language == 'auto') { $locale = \Locale::acceptFromHttp($_SERVER["HTTP_ACCEPT_LANGUAGE"]); $languageObject = Language::findFirst("language = '" . $locale . "' OR locale = '" . $locale . "'"); } else { $languageObject = Language::findFirst("language = '" . $language . "'"); } } if ($languageObject) { $di->get('session')->set('language', $languageObject->language); $di->get('session')->set('locale', $languageObject->locale); } else { $di->get('session')->set('language', Config::CONFIG_DEFAULT_LANGUAGE); $di->get('session')->set('locale', Config::CONFIG_DEFAULT_LOCALE); } } $language = $di->get('session')->get('language'); $translate = null; if (!$config->application->debug || !$config->installed) { $messages = []; $directory = $config->application->languages->cacheDir; $extension = ".php"; if (file_exists($directory . $language . $extension)) { require $directory . $language . $extension; } else { if (file_exists($directory . Config::CONFIG_DEFAULT_LANGUAGE . $extension)) { // fallback to default require $directory . Config::CONFIG_DEFAULT_LANGUAGE . $extension; } } $translate = new TranslateArray(["content" => $messages]); } else { if (!$languageObject) { $languageObject = Language::findFirst(['conditions' => 'language = :language:', 'bind' => ["language" => $language]]); if (!$languageObject) { $languageObject = Language::findFirst("language = '" . Config::CONFIG_DEFAULT_LANGUAGE . "'"); } } $translate = new TranslationDb($di, $languageObject->getId(), new LanguageTranslation()); } $di->set('i18n', $translate); }
/** * Wizard for language. * * @param int $id Language identity. * * @return void|ResponseInterface * * @Route("/wizard/{id:[0-9]+}", methods={"GET", "POST"}, name="admin-languages-wizard") */ public function wizardAction($id) { $item = Language::findFirst($id); if (!$item) { $this->flashSession->error($this->i18n->_('Language not found!')); return $this->response->redirect(['for' => "admin-languages"]); } if ($this->request->isPost()) { $translationId = $this->request->getPost('translation_id'); $translation = LanguageTranslation::findFirstById($translationId); if ($translation) { $translation->translated = $this->request->getPost('translated'); $translation->checked = true; $translation->save(); } } $condition = 'original = translated AND checked = 0 AND language_id = ' . $id; $this->disableFooter(); $this->view->form = $form = new Wizard($item); $this->view->total = LanguageTranslation::find([$condition])->count(); $this->view->translation = $translation = LanguageTranslation::findFirst([$condition]); $this->view->item = $item; if ($translation) { $form->setValues($translation->toArray()); $form->setValue('translation_id', $translation->getId()); } }