/** * Invokes the command * @param \ride\library\i18n\I18n $i18n * @return null */ public function invoke(I18n $i18n) { $translations = array(); // get all locales $locales = $i18n->getLocales(); // gather all translation keys foreach ($locales as $locale) { $translator = $i18n->getTranslator($locale); $localeTranslations = $translator->getTranslations(); foreach ($localeTranslations as $key => $translation) { $translations[$key] = '[' . $key . ']'; } } // add missing translation keys to all locales foreach ($locales as $locale) { $this->output->writeLine($locale); $translator = $i18n->getTranslator($locale); foreach ($translations as $key => $value) { $translation = $translator->getTranslation($key); if ($translation === null) { $translator->setTranslation($key, $value); $this->output->writeLine('- ' . $key); } } } }
/** * Invokes the command * @param \ride\library\i18n\I18n $i18n * @param string $locale * @param string $query * @return null */ public function invoke(I18n $i18n, $locale, $query = null) { $translator = $i18n->getTranslator($locale); $translations = $translator->getTranslations(); if ($query) { foreach ($translations as $key => $translation) { if (strpos($key, $query) !== false || strpos($translation, $query) !== false) { continue; } unset($translations[$key]); } } ksort($translations); foreach ($translations as $key => $translation) { $this->output->writeLine($key . ' = ' . $translation); } }
/** * Invokes the command * @param \ride\library\i18n\I18n $i18n * @param string $locale * @param string $key * @return null */ public function invoke(I18n $i18n, $locale, $key) { $translator = $i18n->getTranslator($locale); $translator->setTranslation($key, null); }
/** * Sets a error view to the response if a status code above 399 is set * @return null */ public function handleHttpError(Event $event, I18n $i18n) { $web = $event->getArgument('web'); $request = $web->getRequest(); $response = $web->getResponse(); $route = $request->getRoute(); if (!$route) { return; } $routeId = $route->getId(); if ($routeId && substr($routeId, 0, 10) !== 'cms.front.') { // don't act on non cms pages return; } $statusCode = $response->getStatusCode(); if ($statusCode != Response::STATUS_CODE_FORBIDDEN && $statusCode != Response::STATUS_CODE_NOT_FOUND || $request->isXmlHttpRequest() && $response->getView() instanceof JsonView) { // js request or not a forbidden or not a not found status return; } $locale = $i18n->getLocale()->getCode(); // lookup site with the current base URL $baseUrl = $request->getBaseUrl(); $site = null; $defaultSite = null; $sites = $this->cms->getSites(); foreach ($sites as $site) { if ($site->getBaseUrl($locale) == $baseUrl) { break; } $defaultSite = $site; $site = null; } if (!$site) { if (!$defaultSite) { return; } $site = $defaultSite; } // get the error node $node = $site->get('error.' . $statusCode); if (!$node) { // no node setup for this error return; } // resolve the locale $locales = $site->getAvailableLocales(); if ($locales != Node::LOCALES_ALL && !isset($locales[$locale])) { $locale = array_pop($locales); $i18n->setCurrentLocale($locale); } // dispatch the error page $routeContainer = $web->getRouter()->getRouteContainer(); $route = $routeContainer->getRouteById('cms.front.' . $site->getId() . '.' . $node . '.' . $locale); if (!$route) { $route = $routeContainer->getRouteById('cms.node.frontend.locale'); $route->setArguments(array('node' => $node, 'locale' => $locale)); } else { $route->setArguments(); } $loginRequest = $web->createRequest($route->getPath()); $loginRequest->setRoute($route); $loginRequest->getHeaders()->setHeader(Header::HEADER_REFERER, $request->getUrl()); if ($request->hasSession()) { $loginRequest->setSession($request->getSession()); } $response->getMessageContainer()->removeAll(); $response->setView(null); $response->setStatusCode(Response::STATUS_CODE_OK); $response->removeHeader(Header::HEADER_CONTENT_TYPE); $response->clearRedirect(); try { $dispatcher = $web->getDispatcher(); $dispatcher->dispatch($loginRequest, $response); } catch (UnauthorizedException $exception) { if ($statusCode === Response::STATUS_CODE_FORBIDDEN) { $response->setRedirect($request->getBaseUrl()); return; } else { throw $exception; } } $response->setStatusCode($statusCode); if ($loginRequest->hasSession()) { $request->setSession($loginRequest->getSession()); } if ($statusCode === Response::STATUS_CODE_FORBIDDEN) { $response->addMessage(new Message($i18n->getTranslator()->translate('error.unauthorized'), Message::TYPE_ERROR)); } }