180 Zeilen
		
	
	
	
		
			5,4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			180 Zeilen
		
	
	
	
		
			5,4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Zend Framework
 | |
|  *
 | |
|  * LICENSE
 | |
|  *
 | |
|  * This source file is subject to the new BSD license that is bundled
 | |
|  * with this package in the file LICENSE.txt.
 | |
|  * It is also available through the world-wide-web at this URL:
 | |
|  * http://framework.zend.com/license/new-bsd
 | |
|  * If you did not receive a copy of the license and are unable to
 | |
|  * obtain it through the world-wide-web, please send an email
 | |
|  * to license@zend.com so we can send you a copy immediately.
 | |
|  *
 | |
|  * @category   Zend
 | |
|  * @package    Zend_View
 | |
|  * @subpackage Helper
 | |
|  * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  * @version    $Id$
 | |
|  */
 | |
| 
 | |
| /** Zend_Locale */
 | |
| require_once 'Zend/Locale.php';
 | |
| 
 | |
| /** Zend_View_Helper_Abstract.php */
 | |
| require_once 'Zend/View/Helper/Abstract.php';
 | |
| 
 | |
| /**
 | |
|  * Translation view helper
 | |
|  *
 | |
|  * @category  Zend
 | |
|  * @package   Zend_View
 | |
|  * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license   http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  */
 | |
| class Zend_View_Helper_Translate extends Zend_View_Helper_Abstract
 | |
| {
 | |
|     /**
 | |
|      * Translation object
 | |
|      *
 | |
|      * @var Zend_Translate_Adapter
 | |
|      */
 | |
|     protected $_translator;
 | |
| 
 | |
|     /**
 | |
|      * Constructor for manually handling
 | |
|      *
 | |
|      * @param Zend_Translate|Zend_Translate_Adapter $translate Instance of Zend_Translate
 | |
|      */
 | |
|     public function __construct($translate = null)
 | |
|     {
 | |
|         if ($translate !== null) {
 | |
|             $this->setTranslator($translate);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Translate a message
 | |
|      * You can give multiple params or an array of params.
 | |
|      * If you want to output another locale just set it as last single parameter
 | |
|      * Example 1: translate('%1\$s + %2\$s', $value1, $value2, $locale);
 | |
|      * Example 2: translate('%1\$s + %2\$s', array($value1, $value2), $locale);
 | |
|      *
 | |
|      * @param  string $messageid Id of the message to be translated
 | |
|      * @return string|Zend_View_Helper_Translate Translated message
 | |
|      */
 | |
|     public function translate($messageid = null)
 | |
|     {
 | |
|         if ($messageid === null) {
 | |
|             return $this;
 | |
|         }
 | |
| 
 | |
|         $translate = $this->getTranslator();
 | |
|         $options   = func_get_args();
 | |
| 
 | |
|         array_shift($options);
 | |
|         $count  = count($options);
 | |
|         $locale = null;
 | |
|         if ($count > 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 ($translate !== null) {
 | |
|             $messageid = $translate->translate($messageid, $locale);
 | |
|         }
 | |
| 
 | |
|         if (count($options) === 0) {
 | |
|             return $messageid;
 | |
|         }
 | |
| 
 | |
|         return vsprintf($messageid, $options);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Sets a translation Adapter for translation
 | |
|      *
 | |
|      * @param  Zend_Translate|Zend_Translate_Adapter $translate Instance of Zend_Translate
 | |
|      * @throws Zend_View_Exception When no or a false instance was set
 | |
|      * @return Zend_View_Helper_Translate
 | |
|      */
 | |
|     public function setTranslator($translate)
 | |
|     {
 | |
|         if ($translate instanceof Zend_Translate_Adapter) {
 | |
|             $this->_translator = $translate;
 | |
|         } else if ($translate instanceof Zend_Translate) {
 | |
|             $this->_translator = $translate->getAdapter();
 | |
|         } else {
 | |
|             require_once 'Zend/View/Exception.php';
 | |
|             $e = new Zend_View_Exception('You must set an instance of Zend_Translate or Zend_Translate_Adapter');
 | |
|             $e->setView($this->view);
 | |
|             throw $e;
 | |
|         }
 | |
| 
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Retrieve translation object
 | |
|      *
 | |
|      * @return Zend_Translate_Adapter|null
 | |
|      */
 | |
|     public function getTranslator()
 | |
|     {
 | |
|         if ($this->_translator === null) {
 | |
|             require_once 'Zend/Registry.php';
 | |
|             if (Zend_Registry::isRegistered('Zend_Translate')) {
 | |
|                 $this->setTranslator(Zend_Registry::get('Zend_Translate'));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $this->_translator;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set's an new locale for all further translations
 | |
|      *
 | |
|      * @param  string|Zend_Locale $locale New locale to set
 | |
|      * @throws Zend_View_Exception When no Zend_Translate instance was set
 | |
|      * @return Zend_View_Helper_Translate
 | |
|      */
 | |
|     public function setLocale($locale = null)
 | |
|     {
 | |
|         $translate = $this->getTranslator();
 | |
|         if ($translate === null) {
 | |
|             require_once 'Zend/View/Exception.php';
 | |
|             $e = new Zend_View_Exception('You must set an instance of Zend_Translate or Zend_Translate_Adapter');
 | |
|             $e->setView($this->view);
 | |
|             throw $e;
 | |
|         }
 | |
| 
 | |
|         $translate->setLocale($locale);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns the set locale for translations
 | |
|      *
 | |
|      * @throws Zend_View_Exception When no Zend_Translate instance was set
 | |
|      * @return string|Zend_Locale
 | |
|      */
 | |
|     public function getLocale()
 | |
|     {
 | |
|         $translate = $this->getTranslator();
 | |
|         if ($translate === null) {
 | |
|             require_once 'Zend/View/Exception.php';
 | |
|             $e = new Zend_View_Exception('You must set an instance of Zend_Translate or Zend_Translate_Adapter');
 | |
|             $e->setView($this->view);
 | |
|             throw $e;
 | |
|         }
 | |
| 
 | |
|         return $translate->getLocale();
 | |
|     }
 | |
| }
 |