Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** TTranslate, I18N translation component.** @author Wei Zhuo <weizhuo[at]gmail[dot]com>* @link http://www.pradosoft.com/* @copyright Copyright © 2005-2008 PradoSoft* @license http://www.pradosoft.com/license/* @version $Id: TTranslate.php 2541 2008-10-21 15:05:13Z qiang.xue $* @package System.I18N*//*** Get the parent control class.*/Prado::using('System.I18N.TI18NControl');/*** TTranslate class.** This component performs message/string translation. The translation* source is set in the TGlobalization handler. The following example* demonstrated a simple message translation.* <code>* <com:TTranslate Text="Goodbye" />* </code>** Depending on the culture set on the page, the phrase "Goodbye" will* be translated.** The {@link getParameters Parameters} property can be use to add name values pairs for* substitution. Substrings enclosed with "{" and "}" in the translation message are consider as the* parameter names during substitution lookup. The following example will substitute the substring* "{time}" with the value of the parameter attribute "Parameters.time=<%= time() %>. Note that* the value of the parameter named "time" is evaluated.* <code>* <com:TTranslate Parameters.time=<%= time() %> >* The unix-time is "{time}".* </com:TTranslate>* </code>** More complex string substitution can be applied using the* TTranslateParameter component.** Namespace: System.I18N** Properties* - <b>Text</b>, string,* <br>Gets or sets the string to translate.* - <b>Catalogue</b>, string,* <br>Gets or sets the catalogue for message translation. The* default catalogue can be set by the @Page directive.* - <b>Key</b>, string,* <br>Gets or sets the key used to message look up.* - <b>Trim</b>, boolean,* <br>Gets or sets an option to trim the contents.* Default is to trim the contents.** @author Xiang Wei Zhuo <weizhuo[at]gmail[dot]com>* @version v1.0, last update on Fri Dec 24 21:38:49 EST 2004* @package System.I18N*/class TTranslate extends TI18NControl{/*** @return string the text to be localized/translated.*/public function getText(){return $this->getViewState('Text','');}/*** Sets the text for localization.* @param string the text for translation.*/public function setText($value){$this->setViewState('Text',$value,'');}/*** Set the key for message lookup.* @param string key*/public function setKey($value){$this->setViewState('Key',$value,'');}/*** Get the key for message lookup.* @return string key*/public function getKey(){return $this->getViewState('Key','');}/*** Get the message catalogue.* @return string catalogue.*/public function getCatalogue(){return $this->getViewState('Catalogue','');}/*** Set the message catalogue.* @param string catalogue.*/public function setCatalogue($value){$this->setViewState('Catalogue',$value,'');}/*** Set the option to trim the contents.* @param boolean trim or not.*/public function setTrim($value){$this->setViewState('Trim',TPropertyValue::ensureBoolean($value),true);}/*** Trim the content or not.* @return boolean trim or not.*/public function getTrim(){return $this->getViewState('Trim',true);}/*** Returns the list of custom parameters.* Custom parameters are name-value pairs that may subsititute translation* place holders during rendering.* @return TAttributeCollection the list of custom parameters*/public function getParameters(){if($parameters=$this->getViewState('Parameters',null))return $parameters;else{$parameters=new TAttributeCollection;$parameters->setCaseSensitive(true);$this->setViewState('Parameters',$parameters,null);return $parameters;}}/*** @return boolean whether the named parameter exists*/public function hasParameter($name){if($parameters=$this->getViewState('Parameters',null))return $parameters->contains($name);elsereturn false;}/*** @return string parameter value, null if parameter does not exist*/public function getParameter($name){if($parameters=$this->getViewState('Parameters',null))return $parameters->itemAt($name);elsereturn null;}/*** @param string parameter name* @param string value of the parameter*/public function setParameter($name,$value){$this->getParameters()->add($name,$value);}/*** Removes the named parameter.* @param string the name of the parameter to be removed.* @return string parameter value removed, null if parameter does not exist.*/public function removeParameter($name){if($parameters=$this->getViewState('Parameters',null))return $parameters->remove($name);elsereturn null;}/*** renders the translated string.*/public function render($writer){$textWriter=new TTextWriter;$htmlWriter=new THtmlWriter($textWriter);$subs = array();foreach($this->getParameters() as $key => $value)$subs['{'.$key.'}'] = $value;foreach($this->getControls() as $control){if($control instanceof TTranslateParameter)$subs['{'.$control->getKey().'}'] = $control->getParameter();elseif($control instanceof TControl)$control->render($htmlWriter);elseif(is_string($control))$textWriter->write($control);}$text = $this->getText();if(strlen($text)==0)$text = $textWriter->flush();if($this->getTrim())$text = trim($text);$writer->write($this->translateText($text, $subs));}/*** Translates the text with subsititution.* @param string text for translation* @param array list of substitutions* @return string translated text*/protected function translateText($text, $subs){$app = $this->getApplication()->getGlobalization();//no translation handler providedif(is_null($config = $app->getTranslationConfiguration()))return strtr($text, $subs);$catalogue = $this->getCatalogue();if(empty($catalogue) && isset($config['catalogue']))$catalogue = $config['catalogue'];if (empty($catalogue)) $catalogue='messages';Translation::init($catalogue);$key = $this->getKey();if(!empty($key)) $text = $key;//translate itreturn Translation::formatter($catalogue)->format($text,$subs, $catalogue, $this->getCharset());}}