blob: d26665c657901018fb785abd8c9c0ab45877a706 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
<?php
/**
* Translation, static.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
* @link http://www.pradosoft.com/
* @copyright Copyright © 2005-2014 PradoSoft
* @license http://www.pradosoft.com/license/
* @package Prado\I18N
*/
namespace Prado\I18N;
/**
* Get the MessageFormat class.
*/
use Prado\I18N\core\MessageCache;
use Prado\I18N\core\MessageFormat;
use Prado\I18N\core\MessageSource;
use Prado\Prado;
use Prado\TPropertyValue;
/**
* Translation class.
*
* Provides translation using a static MessageFormatter.
*
* @author Xiang Wei Zhuo <weizhuo[at]gmail[dot]com>
* @package Prado\I18N
*/
class Translation extends \Prado\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;
}
}
}
|