public function preDispatch($request) { try { $locale = new Zend_Locale(); $locale->setDefault('en'); $locale->setLocale(Zend_Locale::BROWSER); $requestedLanguage = key($locale->getBrowser()); $formatter = new Zend_Log_Formatter_Simple('%message%' . PHP_EOL); $writer = new Zend_Log_Writer_Stream(APPLICATION_LOG_PATH . 'translations.log'); $writer->setFormatter($formatter); $logger = new Zend_Log($writer); $frontendOptions = array('cache_id_prefix' => 'translation', 'lifetime' => 86400, 'automatic_serialization' => true); $backendOptions = array('cache_dir' => APPLICATION_CACHE_PATH); $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); $options = array('adapter' => 'gettext', 'scan' => Zend_Translate::LOCALE_FILENAME, 'content' => APPLICATION_PATH . '/languages/en/en.mo', 'locale' => 'auto', 'disableNotices' => true); $translate = new Zend_Translate($options); if (!$translate->isAvailable($locale->getLanguage())) { $locale->setLocale('en'); } else { $translate->setLocale($locale); } $translate->setCache($cache); Zend_Registry::set('locale', $locale->getLanguage()); Zend_Registry::set('Zend_Translate', $translate); } catch (Exception $e) { try { $writer = new Zend_Log_Writer_Stream(APPLICATION_LOG_PATH . 'plugin-locale.log'); $logger = new Zend_Log($writer); $logger->log($e->getMessage(), Zend_Log::ERR); } catch (Exception $e) { } } }
/** * Retturn translation string * example $l->translate('Field %1 is incorrect', 'FieldName'); * * @param string $msg Message to transalte. */ public function translate($msg) { $translated = $msg; if ($this->translate->isTranslated($msg, true, $this->locale)) { $translated = $this->translate->translate($msg); } else { foreach ($this->translationsPaths as $name => $value) { if (!$this->translate->isAvailable($name)) { try { $this->translate->addTranslation($this->translationsPaths[$name], $name); $this->translate->setLocale($this->getLocale()); } catch (Zend_Translate_Exception $e) { continue; } } if ($this->translate->isTranslated($msg, $name)) { $translated = $this->translate->translate($msg, $name); break; } } } if (func_num_args() > 1) { $params = func_get_args(); $params[0] = $translated; $translated = @call_user_func_array("sprintf", $params); //add shield for incorrect translations(warning about incorrect number of arguments) } return $translated; }
public function setIniFilenameScanTranslator($path, $defaultLanguage, $language = null) { require_once 'Zend/Translate.php'; $translate = new Zend_Translate(Zend_Translate::AN_INI, $path, $defaultLanguage, array('scan' => Zend_Translate::LOCALE_FILENAME)); if ($translate->isAvailable($language)) { $translate->setLocale($language); } $this->setTranslator($translate->getAdapter()); }
public function _initTranslate() { $locale = new Zend_Locale(Zend_Locale::BROWSER); $translate = new Zend_Translate(array('adapter' => 'csv', 'content' => APPLICATION_PATH . '/configs/languages/lang.en', 'locale' => 'en')); $translate->addTranslation(array('content' => APPLICATION_PATH . '/configs/languages/lang.hi', 'locale' => 'hi')); if ($translate->isAvailable($locale->getLanguage())) { $translate->setLocale($locale); } else { $translate->setLocale('en'); } Zend_Registry::set('Translate', $translate); }
public function _initLocale() { $config = $this->getOptions(); try { $locale = new Zend_Locale(Zend_Locale::BROWSER); } catch (Zend_Locale_Exception $e) { $locale = new Zend_Locale($config['resources']['locale']['default']); } Zend_Registry::set('Zend_Locale', $locale); $translator = new Zend_Translate(array('adapter' => 'Csv', 'content' => APPLICATION_PATH . '/../data/lang/', 'scan' => Zend_Translate::LOCALE_DIRECTORY, 'delimiter' => ',', 'disableNotices' => true)); if (!$translator->isAvailable($locale->getLanguage())) { $translator->setLocale($config['resources']['locale']['default']); } Zend_Registry::set('Zend_Translate', $translator); Zend_Form::setDefaultTranslator($translator); }
function init() { Zend_Registry::set('languages', array('en' => 'English', 'es' => 'Español', 'ca' => 'Català', 'gl' => 'Galego', 'eu' => 'Euskara', 'nl' => 'Nederlands', 'de' => 'Deutsch', 'fr' => 'Français', 'pt' => 'Português', 'it' => 'Italiano')); $activelangs = array('en' => 0, 'es' => 0, 'ca' => 1, 'gl' => 1, 'eu' => 1, 'nl' => 1, 'de' => 1, 'fr' => 1, 'pt' => 1, 'it' => 1); Zend_Registry::set('activelangs', $activelangs); $this->lang = $this->getRequest()->getParam("language"); if ($this->lang == null) { $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $this->lang = $auth->getIdentity()->lang; } } if ($this->lang == null && isset($_COOKIE['lang'])) { $this->lang = $_COOKIE['lang']; } $locale = new Zend_Locale(); // El setLocale del Zend está malito... // uso también el nativo de php $locale->setLocale($this->lang . '_' . strtoupper($this->lang) . '.utf8'); setlocale(LC_ALL, $this->lang . '_' . strtoupper($this->lang) . '.utf8'); if (!isset($activelangs[$locale->getLanguage()])) { $locale->setLocale('es_ES.utf8'); } $this->lang = $locale->getLanguage(); $this->langtest = $activelangs[$this->lang] == 1; $options = array('scan' => Zend_Translate::LOCALE_FILENAME); $translate = new Zend_Translate('csv', APPLICATION_PATH . '/languages/', $this->lang, $options); if ($translate->isAvailable($this->lang)) { $translate->setLocale($locale); Zend_Form::setDefaultTranslator($translate); Zend_Registry::set('Zend_Translate', $translate); } else { header('Location: /es'); exit; } if ($this->langtest && (!isset($_COOKIE['langtest']) || $_COOKIE['langtest'] != "0")) { $controller = $this->getActionController(); if (isset($controller->view)) { $controller->view->extra .= " advices"; if (!$controller->view->advices) { $controller->view->advices = array(); } $controller->view->advices["langtest"] = $controller->view->translate("BetaTranslation", "/{$this->lang}/page/translate?lang={$this->lang}"); $controller->view->headScript()->appendFile('/js/jquery.advice.js'); } } }
public function routeShutdown(Zend_Controller_Request_Abstract $request) { $locale = new Zend_Locale(); $options = array('scan' => Zend_Translate::LOCALE_FILENAME, 'clear' => false, 'disableNotices' => true); Zend_Translate::setCache(Zend_Registry::get('cache')); if (isset($_COOKIE['language_select'])) { $language = $_COOKIE['language_select']; } else { $language = 'en'; } $translate = new Zend_Translate('csv', APPLICATION_PATH . '/languages', 'auto', $options); $translate->addTranslation(APPLICATION_PATH . '/languages/ot'); $translate->addTranslation(APPLICATION_PATH . '/../overrides/languages'); if (!$translate->isAvailable($language)) { throw new Exception('Language ' . $language . ' is not available'); } $locale->setLocale($language); $translate->setLocale($locale); Zend_Registry::set('Zend_Locale', $locale); Zend_Registry::set('Zend_Translate', $translate); }
public function testIsAvailable() { $lang = new Zend_Translate(Zend_Translate::AN_ARRAY, array('msg1' => 'Message 1'), 'en'); $lang->addTranslation(array('msg1' => 'Message 1 (ru)'), 'ru'); $this->assertTrue($lang->isAvailable('en')); $this->assertTrue($lang->isAvailable('ru')); $this->assertFalse($lang->isAvailable('fr')); }
$writer->setFormatter(new Zend_Log_Formatter_Simple('%timestamp% %priorityName% %request% %remote%: %message%' . "\n")); $filter = new Zend_Log_Filter_Priority((int) $configuration->log->level); $writer->addFilter($filter); $logger = new Zend_Log($writer); $logger->setEventItem('pid', getmypid()); $logger->setEventItem('request', $_SERVER['REQUEST_URI']); $logger->setEventItem('remote', $_SERVER['REMOTE_ADDR']); // TRANSLATIONS $locale = new Zend_Locale(); Zend_Registry::set('Zend_Locale', $locale); // default language when requested language is not available $defaultlanguage = 'en'; define('DEFAULT_LANGUAGE', 'en'); $translate = new Zend_Translate('csv', APPLICATION_PATH . '/languages/', null, array('scan' => Zend_Translate::LOCALE_FILENAME)); $translate->setOptions(array('log' => $logger, 'logUntranslated' => true)); if (!$translate->isAvailable($locale->getLanguage())) { // not available languages are rerouted to another language $translate->setLocale(DEFAULT_LANGUAGE); } // REGISTRY - setup the application registry // An application registry allows the application to store application // necessary objects into a safe and consistent (non global) place for future // retrieval. This allows the application to ensure that regardless of what // happends in the global scope, the registry will contain the objects it // needs. $registry = Zend_Registry::getInstance(); $registry->configuration = $configuration; $registry->arsConfig = $arsConfig; $registry->logger = $logger; $registry->translate = $translate; Zend_Registry::set('Zend_Translate', $translate);
/** * Initialize the translate component. * * Scans the application and project dirs for available translations * * Use $this->translate to access afterwards * Also sets $this->translateAdapter to access afterwards * * @return \Zend_Translate */ protected function _initTranslate() { $this->bootstrap('locale'); $language = $this->locale->getLanguage(); /* * Scan for files with -<languagecode> and disable notices when the requested * language is not found */ $options = array('adapter' => 'gettext', 'content' => GEMS_LIBRARY_DIR . '/languages/', 'disableNotices' => true, 'scan' => \Zend_Translate::LOCALE_FILENAME); $translate = new \Zend_Translate($options); // If we don't find the needed language, use a fake translator to disable notices if (!$translate->isAvailable($language)) { $translate = \MUtil_Translate_Adapter_Potemkin::create(); } //Now if we have a project specific language file, add it $projectLanguageDir = APPLICATION_PATH . '/languages/'; if (file_exists($projectLanguageDir)) { $options['content'] = $projectLanguageDir; $options['disableNotices'] = true; $projectTranslations = new \Zend_Translate($options); //But only when it has the requested language if ($projectTranslations->isAvailable($language)) { $translate->addTranslation(array('content' => $projectTranslations)); } unset($projectTranslations); //Save some memory } $translate->setLocale($language); \Zend_Registry::set('Zend_Translate', $translate); // Fix for _init resourcea being case insensitive $container = $this->getContainer(); $adapter = $translate->getAdapter(); $container->translateAdapter = $adapter; $this->translateAdapter = $adapter; return $translate; }