From 8b2e6985254e906fd0e93e2917d0aa341d0de0ce Mon Sep 17 00:00:00 2001 From: Fredric N Date: Sun, 22 Aug 2010 02:40:55 +0200 Subject: [PATCH] Translate fix --- application/Bootstrap.php | 8 ++- application/configs/navigation.xml | 6 +- library/Fiktiv/Translate.php | 7 +++ library/Fiktiv/Translate/Adapter.php | 74 ++++++++++++++++++++++++ library/Fiktiv/Translate/Adapter/Ini.php | 36 ++++++++++++ 5 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 library/Fiktiv/Translate.php create mode 100644 library/Fiktiv/Translate/Adapter.php create mode 100644 library/Fiktiv/Translate/Adapter/Ini.php diff --git a/application/Bootstrap.php b/application/Bootstrap.php index a5f9a7b..d1eb930 100644 --- a/application/Bootstrap.php +++ b/application/Bootstrap.php @@ -153,8 +153,14 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap */ protected function _initTranslate() { + $this->bootstrap('autoloader'); - $translate = new Zend_Translate('ini', APPLICATION_PATH . '/languages/se.ini', 'sv'); + $translate = new Fiktiv_Translate(array( + 'adapter' => 'Fiktiv_Translate_Adapter_Ini', + 'locale' => 'sv', + 'content' => APPLICATION_PATH . '/languages/se.ini' + )); + $translate->addTranslation(APPLICATION_PATH . '/languages/en.ini', 'en'); Zend_Form::setDefaultTranslator($translate); diff --git a/application/configs/navigation.xml b/application/configs/navigation.xml index 56a777d..c1a3430 100644 --- a/application/configs/navigation.xml +++ b/application/configs/navigation.xml @@ -2,20 +2,20 @@ - + index index default - + index index blog default - + index about default diff --git a/library/Fiktiv/Translate.php b/library/Fiktiv/Translate.php new file mode 100644 index 0000000..5bb1972 --- /dev/null +++ b/library/Fiktiv/Translate.php @@ -0,0 +1,7 @@ + 0) { + if (Zend_Locale::isLocale($options[($count - 1)], null, false) !== false) { + $locale = array_pop($options); + } + } + + if ((count($options) === 1) and (is_array($options[0]) === true)) { + $options = $options[0]; + } + + if ($options[count($options)-1] === true) { + foreach ($options as &$opt) { + $opt = parent::translate($opt, $locale); + } + } + + if (stristr($messageId,':')) { + + $parts = explode(':', $messageId); + $flag = $parts[0]; + $key = $parts[1]; + return $this->transform($flag, parent::translate($key, $options)); + } + + return parent::translate($messageId, $options); + } + + /** + * Transform the translated text. + * This function defines the transfomation flags. + * + * @param string $flag + * @param string $text + * @return string $text + */ + protected function transform($flag, $text) + { + switch ($flag) { + case 'u': + return ucfirst($text); + break; + case 'uw': + return ucwords($text); + break; + case 'ua': + return strtoupper($text); + break; + } + } + +} \ No newline at end of file diff --git a/library/Fiktiv/Translate/Adapter/Ini.php b/library/Fiktiv/Translate/Adapter/Ini.php new file mode 100644 index 0000000..50651b7 --- /dev/null +++ b/library/Fiktiv/Translate/Adapter/Ini.php @@ -0,0 +1,36 @@ +_translateAdapter = new Zend_Translate_Adapter_Ini($options); + + parent::__construct($options); + } + + public function __call($name, $args) { + return call_user_func_array(array($this->_translateAdapter, $name), $args); + } + + /** + * Just wrap Zend_Translate_Adapter_Ini + */ + protected function _loadTranslationData($data, $locale, array $options = array()) + { + return $this->_translateAdapter->_loadTranslationData($data, $locale, $options); + } + + /** + * returns the adapters name + * + * @return string + */ + public function toString() + { + return "Ini"; + } +} \ No newline at end of file