diff options
author | emkael <emkael@tlen.pl> | 2016-02-24 23:18:07 +0100 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-02-24 23:18:07 +0100 |
commit | 6f7fdef0f500cd4bb540affd3bc1482243f337c1 (patch) | |
tree | 4853eecd0769a903e6130c1896e1d070848150dd /lib/prado/framework/I18N/Translation.php | |
parent | 61f2ea48a4e11cb5fb941b3783e19c9e9ef38a45 (diff) |
* Prado 3.3.0
Diffstat (limited to 'lib/prado/framework/I18N/Translation.php')
-rw-r--r-- | lib/prado/framework/I18N/Translation.php | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/lib/prado/framework/I18N/Translation.php b/lib/prado/framework/I18N/Translation.php new file mode 100644 index 0000000..69b3eb4 --- /dev/null +++ b/lib/prado/framework/I18N/Translation.php @@ -0,0 +1,106 @@ +<?php +/** + * Translation, static. + * + * @author Wei Zhuo <weizhuo[at]gmail[dot]com> + * @link https://github.com/pradosoft/prado + * @copyright Copyright © 2005-2015 The PRADO Group + * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT + * @package System.I18N + */ + +/** + * Get the MessageFormat class. + */ +Prado::using('System.I18N.core.MessageFormat'); + + +/** + * Translation class. + * + * Provides translation using a static MessageFormatter. + * + * @author Xiang Wei Zhuo <weizhuo[at]gmail[dot]com> + * @version v1.0, last update on Tue Dec 28 11:54:48 EST 2004 + * @package System.I18N + */ +class Translation extends TComponent +{ + /** + * The array of formatters. We define 1 formatter per translation catalog + * This is a class static variable. + * @var array + */ + protected static $formatters=array(); + + /** + * Initialize the TTranslate translation components + */ + public static function init($catalogue='messages') + { + static $saveEventHandlerAttached=false; + + //initialized the default class wide formatter + if(!isset(self::$formatters[$catalogue])) + { + $app = Prado::getApplication()->getGlobalization(); + $config = $app->getTranslationConfiguration(); + $source = MessageSource::factory($config['type'], + $config['source'], + $config['filename']); + + $source->setCulture($app->getCulture()); + + if(TPropertyValue::ensureBoolean($config['cache'])) + $source->setCache(new MessageCache($config['cache'])); + + self::$formatters[$catalogue] = new MessageFormat($source, $app->getCharset()); + + //mark untranslated text + if($ps=$config['marker']) + self::$formatters[$catalogue]->setUntranslatedPS(array($ps,$ps)); + + //save the message on end request + // Do it only once ! + if(!$saveEventHandlerAttached && TPropertyValue::ensureBoolean($config['autosave'])) + { + Prado::getApplication()->attachEventHandler( + 'OnEndRequest', array('Translation', 'saveMessages')); + $saveEventHandlerAttached=true; + } + } + } + + /** + * Get the static formatter from this component. + * @return MessageFormat formattter. + * @see localize() + */ + public static function formatter($catalogue='messages') + { + return self::$formatters[$catalogue]; + } + + /** + * Save untranslated messages to the catalogue. + */ + public static function saveMessages() + { + static $onceonly = true; + + if($onceonly) + { + foreach (self::$formatters as $catalogue=>$formatter) + { + $app = Prado::getApplication()->getGlobalization(); + $config = $app->getTranslationConfiguration(); + if(isset($config['autosave'])) + { + $formatter->getSource()->setCulture($app->getCulture()); + $formatter->getSource()->save($catalogue); + } + } + $onceonly = false; + } + } +} |