|
Server IP : 10.2.73.233 / Your IP : 216.73.216.223 Web Server : Apache/2.4.59 (Debian) System : Linux polon 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 User : www-data ( 33) PHP Version : 5.6.40-64+0~20230107.71+debian10~1.gbp673146 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/ifk/web/prado4.3.2/I18N/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<?php
/**
* Translation, static.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
* @link https://github.com/pradosoft/prado
* @license https://github.com/pradosoft/prado/blob/master/LICENSE
*/
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>
*/
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 = [];
/**
* Initialize the TTranslate translation components
* @param mixed $catalogue
*/
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 (isset($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([$ps, $ps]);
}
//save the message on end request
// Do it only once !
if (!$saveEventHandlerAttached && TPropertyValue::ensureBoolean($config['autosave'])) {
Prado::getApplication()->attachEventHandler(
'OnEndRequest',
['Translation', 'saveMessages']
);
$saveEventHandlerAttached = true;
}
}
}
/**
* Get the static formatter from this component.
* @see localize()
* @param mixed $catalogue
* @return MessageFormat formattter.
*/
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;
}
}
}