summaryrefslogtreecommitdiff
path: root/lib/prado/framework/I18N/Translation.php
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2016-02-24 23:18:07 +0100
committeremkael <emkael@tlen.pl>2016-02-24 23:18:07 +0100
commit6f7fdef0f500cd4bb540affd3bc1482243f337c1 (patch)
tree4853eecd0769a903e6130c1896e1d070848150dd /lib/prado/framework/I18N/Translation.php
parent61f2ea48a4e11cb5fb941b3783e19c9e9ef38a45 (diff)
* Prado 3.3.0
Diffstat (limited to 'lib/prado/framework/I18N/Translation.php')
-rw-r--r--lib/prado/framework/I18N/Translation.php106
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 &copy; 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;
+ }
+ }
+}