Exemplo n.º 1
0
 /**
  * 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();
 }
Exemplo n.º 2
0
 /**
  * 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);
     }
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
 /**
  * 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);
 }
Exemplo n.º 5
0
 /**
  * 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());
     }
 }