summaryrefslogtreecommitdiff
path: root/lib/prado/framework/Exceptions
diff options
context:
space:
mode:
Diffstat (limited to 'lib/prado/framework/Exceptions')
-rw-r--r--lib/prado/framework/Exceptions/TErrorHandler.php399
-rw-r--r--lib/prado/framework/Exceptions/TException.php409
-rw-r--r--lib/prado/framework/Exceptions/messages/messages-fr.txt420
-rw-r--r--lib/prado/framework/Exceptions/messages/messages-id.txt466
-rw-r--r--lib/prado/framework/Exceptions/messages/messages-zh.txt436
-rw-r--r--lib/prado/framework/Exceptions/messages/messages.txt514
-rw-r--r--lib/prado/framework/Exceptions/templates/error-fr.html31
-rw-r--r--lib/prado/framework/Exceptions/templates/error-id.html32
-rw-r--r--lib/prado/framework/Exceptions/templates/error-zh.html32
-rw-r--r--lib/prado/framework/Exceptions/templates/error.html32
-rw-r--r--lib/prado/framework/Exceptions/templates/error400-en.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error400-id.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error400-zh.html32
-rw-r--r--lib/prado/framework/Exceptions/templates/error400.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error404-en.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error404-fr.html32
-rw-r--r--lib/prado/framework/Exceptions/templates/error404-id.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error404-zh.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error404.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error500-en.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error500-fr.html32
-rw-r--r--lib/prado/framework/Exceptions/templates/error500-id.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error500-zh.html32
-rw-r--r--lib/prado/framework/Exceptions/templates/error500.html33
-rw-r--r--lib/prado/framework/Exceptions/templates/error503-en.html31
-rw-r--r--lib/prado/framework/Exceptions/templates/error503-fr.html30
-rw-r--r--lib/prado/framework/Exceptions/templates/error503-id.html31
-rw-r--r--lib/prado/framework/Exceptions/templates/error503-zh.html31
-rw-r--r--lib/prado/framework/Exceptions/templates/error503.html31
-rw-r--r--lib/prado/framework/Exceptions/templates/exception-en.html43
-rw-r--r--lib/prado/framework/Exceptions/templates/exception-fr.html43
-rw-r--r--lib/prado/framework/Exceptions/templates/exception-id.html43
-rw-r--r--lib/prado/framework/Exceptions/templates/exception-zh.html45
-rw-r--r--lib/prado/framework/Exceptions/templates/exception.html42
-rw-r--r--lib/prado/framework/Exceptions/templates/readme.txt18
35 files changed, 3617 insertions, 0 deletions
diff --git a/lib/prado/framework/Exceptions/TErrorHandler.php b/lib/prado/framework/Exceptions/TErrorHandler.php
new file mode 100644
index 0000000..f9a120a
--- /dev/null
+++ b/lib/prado/framework/Exceptions/TErrorHandler.php
@@ -0,0 +1,399 @@
+<?php
+/**
+ * TErrorHandler class file
+ *
+ * @author Qiang Xue <qiang.xue@gmail.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.Exceptions
+ */
+
+/**
+ * TErrorHandler class
+ *
+ * TErrorHandler handles all PHP user errors and exceptions generated during
+ * servicing user requests. It displays these errors using different templates
+ * and if possible, using languages preferred by the client user.
+ * Note, PHP parsing errors cannot be caught and handled by TErrorHandler.
+ *
+ * The templates used to format the error output are stored under System.Exceptions.
+ * You may choose to use your own templates, should you not like the templates
+ * provided by Prado. Simply set {@link setErrorTemplatePath ErrorTemplatePath}
+ * to the path (in namespace format) storing your own templates.
+ *
+ * There are two sets of templates, one for errors to be displayed to client users
+ * (called external errors), one for errors to be displayed to system developers
+ * (called internal errors). The template file name for the former is
+ * <b>error[StatusCode][-LanguageCode].html</b>, and for the latter it is
+ * <b>exception[-LanguageCode].html</b>, where StatusCode refers to response status
+ * code (e.g. 404, 500) specified when {@link THttpException} is thrown,
+ * and LanguageCode is the client user preferred language code (e.g. en, zh, de).
+ * The templates <b>error.html</b> and <b>exception.html</b> are default ones
+ * that are used if no other appropriate templates are available.
+ * Note, these templates are not Prado control templates. They are simply
+ * html files with keywords (e.g. %%ErrorMessage%%, %%Version%%)
+ * to be replaced with the corresponding information.
+ *
+ * By default, TErrorHandler is registered with {@link TApplication} as the
+ * error handler module. It can be accessed via {@link TApplication::getErrorHandler()}.
+ * You seldom need to deal with the error handler directly. It is mainly used
+ * by the application object to handle errors.
+ *
+ * TErrorHandler may be configured in application configuration file as follows
+ * <module id="error" class="TErrorHandler" ErrorTemplatePath="System.Exceptions" />
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TErrorHandler extends TModule
+{
+ /**
+ * error template file basename
+ */
+ const ERROR_FILE_NAME='error';
+ /**
+ * exception template file basename
+ */
+ const EXCEPTION_FILE_NAME='exception';
+ /**
+ * number of lines before and after the error line to be displayed in case of an exception
+ */
+ const SOURCE_LINES=12;
+
+ /**
+ * @var string error template directory
+ */
+ private $_templatePath=null;
+
+ /**
+ * Initializes the module.
+ * This method is required by IModule and is invoked by application.
+ * @param TXmlElement module configuration
+ */
+ public function init($config)
+ {
+ $this->getApplication()->setErrorHandler($this);
+ }
+
+ /**
+ * @return string the directory containing error template files.
+ */
+ public function getErrorTemplatePath()
+ {
+ if($this->_templatePath===null)
+ $this->_templatePath=Prado::getFrameworkPath().'/Exceptions/templates';
+ return $this->_templatePath;
+ }
+
+ /**
+ * Sets the path storing all error and exception template files.
+ * The path must be in namespace format, such as System.Exceptions (which is the default).
+ * @param string template path in namespace format
+ * @throws TConfigurationException if the template path is invalid
+ */
+ public function setErrorTemplatePath($value)
+ {
+ if(($templatePath=Prado::getPathOfNamespace($value))!==null && is_dir($templatePath))
+ $this->_templatePath=$templatePath;
+ else
+ throw new TConfigurationException('errorhandler_errortemplatepath_invalid',$value);
+ }
+
+ /**
+ * Handles PHP user errors and exceptions.
+ * This is the event handler responding to the <b>Error</b> event
+ * raised in {@link TApplication}.
+ * The method mainly uses appropriate template to display the error/exception.
+ * It terminates the application immediately after the error is displayed.
+ * @param mixed sender of the event
+ * @param mixed event parameter (if the event is raised by TApplication, it refers to the exception instance)
+ */
+ public function handleError($sender,$param)
+ {
+ static $handling=false;
+ // We need to restore error and exception handlers,
+ // because within error and exception handlers, new errors and exceptions
+ // cannot be handled properly by PHP
+ restore_error_handler();
+ restore_exception_handler();
+ // ensure that we do not enter infinite loop of error handling
+ if($handling)
+ $this->handleRecursiveError($param);
+ else
+ {
+ $handling=true;
+ if(($response=$this->getResponse())!==null)
+ $response->clear();
+ if(!headers_sent())
+ header('Content-Type: text/html; charset=UTF-8');
+ if($param instanceof THttpException)
+ $this->handleExternalError($param->getStatusCode(),$param);
+ else if($this->getApplication()->getMode()===TApplicationMode::Debug)
+ $this->displayException($param);
+ else
+ $this->handleExternalError(500,$param);
+ }
+ }
+
+
+ /**
+ * @param string $value
+ * @param Exception|null$exception
+ * @return string
+ * @since 3.1.6
+ */
+ protected static function hideSecurityRelated($value, $exception=null)
+ {
+ $aRpl = array();
+ if($exception !== null && $exception instanceof Exception)
+ {
+ $aTrace = $exception->getTrace();
+ foreach($aTrace as $item)
+ {
+ if(isset($item['file']))
+ $aRpl[dirname($item['file']) . DIRECTORY_SEPARATOR] = '<hidden>' . DIRECTORY_SEPARATOR;
+ }
+ }
+ $aRpl[$_SERVER['DOCUMENT_ROOT']] = '${DocumentRoot}';
+ $aRpl[str_replace('/', DIRECTORY_SEPARATOR, $_SERVER['DOCUMENT_ROOT'])] = '${DocumentRoot}';
+ $aRpl[PRADO_DIR . DIRECTORY_SEPARATOR] = '${PradoFramework}' . DIRECTORY_SEPARATOR;
+ if(isset($aRpl[DIRECTORY_SEPARATOR])) unset($aRpl[DIRECTORY_SEPARATOR]);
+ $aRpl = array_reverse($aRpl, true);
+
+ return str_replace(array_keys($aRpl), $aRpl, $value);
+ }
+
+ /**
+ * Displays error to the client user.
+ * THttpException and errors happened when the application is in <b>Debug</b>
+ * mode will be displayed to the client user.
+ * @param integer response status code
+ * @param Exception exception instance
+ */
+ protected function handleExternalError($statusCode,$exception)
+ {
+ if(!($exception instanceof THttpException))
+ error_log($exception->__toString());
+
+ $content=$this->getErrorTemplate($statusCode,$exception);
+
+ $serverAdmin=isset($_SERVER['SERVER_ADMIN'])?$_SERVER['SERVER_ADMIN']:'';
+
+ $isDebug = $this->getApplication()->getMode()===TApplicationMode::Debug;
+
+ $errorMessage = $exception->getMessage();
+ if($isDebug)
+ $version=$_SERVER['SERVER_SOFTWARE'].' <a href="https://github.com/pradosoft/prado">PRADO</a>/'.Prado::getVersion();
+ else
+ {
+ $version='';
+ $errorMessage = self::hideSecurityRelated($errorMessage, $exception);
+ }
+ $tokens=array(
+ '%%StatusCode%%' => "$statusCode",
+ '%%ErrorMessage%%' => htmlspecialchars($errorMessage),
+ '%%ServerAdmin%%' => $serverAdmin,
+ '%%Version%%' => $version,
+ '%%Time%%' => @strftime('%Y-%m-%d %H:%M',time())
+ );
+
+ $this->getApplication()->getResponse()->setStatusCode($statusCode, $isDebug ? $exception->getMessage() : null);
+
+ echo strtr($content,$tokens);
+ }
+
+ /**
+ * Handles error occurs during error handling (called recursive error).
+ * THttpException and errors happened when the application is in <b>Debug</b>
+ * mode will be displayed to the client user.
+ * Error is displayed without using existing template to prevent further errors.
+ * @param Exception exception instance
+ */
+ protected function handleRecursiveError($exception)
+ {
+ if($this->getApplication()->getMode()===TApplicationMode::Debug)
+ {
+ echo "<html><head><title>Recursive Error</title></head>\n";
+ echo "<body><h1>Recursive Error</h1>\n";
+ echo "<pre>".$exception->__toString()."</pre>\n";
+ echo "</body></html>";
+ }
+ else
+ {
+ error_log("Error happened while processing an existing error:\n".$exception->__toString());
+ header('HTTP/1.0 500 Internal Error');
+ }
+ }
+
+ /**
+ * Displays exception information.
+ * Exceptions are displayed with rich context information, including
+ * the call stack and the context source code.
+ * This method is only invoked when application is in <b>Debug</b> mode.
+ * @param Exception exception instance
+ */
+ protected function displayException($exception)
+ {
+ if(php_sapi_name()==='cli')
+ {
+ echo $exception->getMessage()."\n";
+ echo $exception->getTraceAsString();
+ return;
+ }
+
+ if($exception instanceof TTemplateException)
+ {
+ $fileName=$exception->getTemplateFile();
+ $lines=empty($fileName)?explode("\n",$exception->getTemplateSource()):@file($fileName);
+ $source=$this->getSourceCode($lines,$exception->getLineNumber());
+ if($fileName==='')
+ $fileName='---embedded template---';
+ $errorLine=$exception->getLineNumber();
+ }
+ else
+ {
+ if(($trace=$this->getExactTrace($exception))!==null)
+ {
+ $fileName=$trace['file'];
+ $errorLine=$trace['line'];
+ }
+ else
+ {
+ $fileName=$exception->getFile();
+ $errorLine=$exception->getLine();
+ }
+ $source=$this->getSourceCode(@file($fileName),$errorLine);
+ }
+
+ if($this->getApplication()->getMode()===TApplicationMode::Debug)
+ $version=$_SERVER['SERVER_SOFTWARE'].' <a href="https://github.com/pradosoft/prado">PRADO</a>/'.Prado::getVersion();
+ else
+ $version='';
+
+ $tokens=array(
+ '%%ErrorType%%' => get_class($exception),
+ '%%ErrorMessage%%' => $this->addLink(htmlspecialchars($exception->getMessage())),
+ '%%SourceFile%%' => htmlspecialchars($fileName).' ('.$errorLine.')',
+ '%%SourceCode%%' => $source,
+ '%%StackTrace%%' => htmlspecialchars($exception->getTraceAsString()),
+ '%%Version%%' => $version,
+ '%%Time%%' => @strftime('%Y-%m-%d %H:%M',time())
+ );
+
+ $content=$this->getExceptionTemplate($exception);
+
+ echo strtr($content,$tokens);
+ }
+
+ /**
+ * Retrieves the template used for displaying internal exceptions.
+ * Internal exceptions will be displayed with source code causing the exception.
+ * This occurs when the application is in debug mode.
+ * @param Exception the exception to be displayed
+ * @return string the template content
+ */
+ protected function getExceptionTemplate($exception)
+ {
+ $lang=Prado::getPreferredLanguage();
+ $exceptionFile=Prado::getFrameworkPath().'/Exceptions/templates/'.self::EXCEPTION_FILE_NAME.'-'.$lang.'.html';
+ if(!is_file($exceptionFile))
+ $exceptionFile=Prado::getFrameworkPath().'/Exceptions/templates/'.self::EXCEPTION_FILE_NAME.'.html';
+ if(($content=@file_get_contents($exceptionFile))===false)
+ die("Unable to open exception template file '$exceptionFile'.");
+ return $content;
+ }
+
+ /**
+ * Retrieves the template used for displaying external exceptions.
+ * External exceptions are those displayed to end-users. They do not contain
+ * error source code. Therefore, you might want to override this method
+ * to provide your own error template for displaying certain external exceptions.
+ * The following tokens in the template will be replaced with corresponding content:
+ * %%StatusCode%% : the status code of the exception
+ * %%ErrorMessage%% : the error message (HTML encoded).
+ * %%ServerAdmin%% : the server admin information (retrieved from Web server configuration)
+ * %%Version%% : the version information of the Web server.
+ * %%Time%% : the time the exception occurs at
+ *
+ * @param integer status code (such as 404, 500, etc.)
+ * @param Exception the exception to be displayed
+ * @return string the template content
+ */
+ protected function getErrorTemplate($statusCode,$exception)
+ {
+ $base=$this->getErrorTemplatePath().DIRECTORY_SEPARATOR.self::ERROR_FILE_NAME;
+ $lang=Prado::getPreferredLanguage();
+ if(is_file("$base$statusCode-$lang.html"))
+ $errorFile="$base$statusCode-$lang.html";
+ else if(is_file("$base$statusCode.html"))
+ $errorFile="$base$statusCode.html";
+ else if(is_file("$base-$lang.html"))
+ $errorFile="$base-$lang.html";
+ else
+ $errorFile="$base.html";
+ if(($content=@file_get_contents($errorFile))===false)
+ die("Unable to open error template file '$errorFile'.");
+ return $content;
+ }
+
+ private function getExactTrace($exception)
+ {
+ $trace=$exception->getTrace();
+ $result=null;
+ // if PHP exception, we want to show the 2nd stack level context
+ // because the 1st stack level is of little use (it's in error handler)
+ if($exception instanceof TPhpErrorException)
+ $result=isset($trace[0]['file'])?$trace[0]:$trace[1];
+ else if($exception instanceof TInvalidOperationException)
+ {
+ // in case of getter or setter error, find out the exact file and row
+ if(($result=$this->getPropertyAccessTrace($trace,'__get'))===null)
+ $result=$this->getPropertyAccessTrace($trace,'__set');
+ }
+ if($result!==null && strpos($result['file'],': eval()\'d code')!==false)
+ return null;
+
+ return $result;
+ }
+
+ private function getPropertyAccessTrace($trace,$pattern)
+ {
+ $result=null;
+ foreach($trace as $t)
+ {
+ if(isset($t['function']) && $t['function']===$pattern)
+ $result=$t;
+ else
+ break;
+ }
+ return $result;
+ }
+
+ private function getSourceCode($lines,$errorLine)
+ {
+ $beginLine=$errorLine-self::SOURCE_LINES>=0?$errorLine-self::SOURCE_LINES:0;
+ $endLine=$errorLine+self::SOURCE_LINES<=count($lines)?$errorLine+self::SOURCE_LINES:count($lines);
+
+ $source='';
+ for($i=$beginLine;$i<$endLine;++$i)
+ {
+ if($i===$errorLine-1)
+ {
+ $line=htmlspecialchars(sprintf("%04d: %s",$i+1,str_replace("\t",' ',$lines[$i])));
+ $source.="<div class=\"error\">".$line."</div>";
+ }
+ else
+ $source.=htmlspecialchars(sprintf("%04d: %s",$i+1,str_replace("\t",' ',$lines[$i])));
+ }
+ return $source;
+ }
+
+ private function addLink($message)
+ {
+ $baseUrl='http://pradosoft.github.io/docs/manual/class-';
+ return preg_replace('/\b(T[A-Z]\w+)\b/',"<a href=\"$baseUrl\${1}\" target=\"_blank\">\${1}</a>",$message);
+ }
+}
+
diff --git a/lib/prado/framework/Exceptions/TException.php b/lib/prado/framework/Exceptions/TException.php
new file mode 100644
index 0000000..651adb5
--- /dev/null
+++ b/lib/prado/framework/Exceptions/TException.php
@@ -0,0 +1,409 @@
+<?php
+/**
+ * Exception classes file
+ *
+ * @author Qiang Xue <qiang.xue@gmail.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.Exceptions
+ */
+
+/**
+ * TException class
+ *
+ * TException is the base class for all PRADO exceptions.
+ *
+ * TException provides the functionality of translating an error code
+ * into a descriptive error message in a language that is preferred
+ * by user browser. Additional parameters may be passed together with
+ * the error code so that the translated message contains more detailed
+ * information.
+ *
+ * By default, TException looks for a message file by calling
+ * {@link getErrorMessageFile()} method, which uses the "message-xx.txt"
+ * file located under "System.Exceptions" folder, where "xx" is the
+ * code of the user preferred language. If such a file is not found,
+ * "message.txt" will be used instead.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TException extends Exception
+{
+ private $_errorCode='';
+ static $_messageCache=array();
+
+ /**
+ * Constructor.
+ * @param string error message. This can be a string that is listed
+ * in the message file. If so, the message in the preferred language
+ * will be used as the error message. Any rest parameters will be used
+ * to replace placeholders ({0}, {1}, {2}, etc.) in the message.
+ */
+ public function __construct($errorMessage)
+ {
+ $this->_errorCode=$errorMessage;
+ $errorMessage=$this->translateErrorMessage($errorMessage);
+ $args=func_get_args();
+ array_shift($args);
+ $n=count($args);
+ $tokens=array();
+ for($i=0;$i<$n;++$i)
+ $tokens['{'.$i.'}']=TPropertyValue::ensureString($args[$i]);
+ parent::__construct(strtr($errorMessage,$tokens));
+ }
+
+ /**
+ * Translates an error code into an error message.
+ * @param string error code that is passed in the exception constructor.
+ * @return string the translated error message
+ */
+ protected function translateErrorMessage($key)
+ {
+ $msgFile=$this->getErrorMessageFile();
+
+ // Cache messages
+ if (!isset(self::$_messageCache[$msgFile]))
+ {
+ if(($entries=@file($msgFile))!==false)
+ {
+ foreach($entries as $entry)
+ {
+ @list($code,$message)=explode('=',$entry,2);
+ self::$_messageCache[$msgFile][trim($code)]=trim($message);
+ }
+ }
+ }
+ return isset(self::$_messageCache[$msgFile][$key]) ? self::$_messageCache[$msgFile][$key] : $key;
+ }
+
+ /**
+ * @return string path to the error message file
+ */
+ protected function getErrorMessageFile()
+ {
+ $lang=Prado::getPreferredLanguage();
+ $msgFile=Prado::getFrameworkPath().'/Exceptions/messages/messages-'.$lang.'.txt';
+ if(!is_file($msgFile))
+ $msgFile=Prado::getFrameworkPath().'/Exceptions/messages/messages.txt';
+ return $msgFile;
+ }
+
+ /**
+ * @return string error code
+ */
+ public function getErrorCode()
+ {
+ return $this->_errorCode;
+ }
+
+ /**
+ * @param string error code
+ */
+ public function setErrorCode($code)
+ {
+ $this->_errorCode=$code;
+ }
+
+ /**
+ * @return string error message
+ */
+ public function getErrorMessage()
+ {
+ return $this->getMessage();
+ }
+
+ /**
+ * @param string error message
+ */
+ protected function setErrorMessage($message)
+ {
+ $this->message=$message;
+ }
+}
+
+/**
+ * TSystemException class
+ *
+ * TSystemException is the base class for all framework-level exceptions.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TSystemException extends TException
+{
+}
+
+/**
+ * TApplicationException class
+ *
+ * TApplicationException is the base class for all user application-level exceptions.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TApplicationException extends TException
+{
+}
+
+/**
+ * TInvalidOperationException class
+ *
+ * TInvalidOperationException represents an exception caused by invalid operations.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TInvalidOperationException extends TSystemException
+{
+}
+
+/**
+ * TInvalidDataTypeException class
+ *
+ * TInvalidDataTypeException represents an exception caused by invalid data type.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TInvalidDataTypeException extends TSystemException
+{
+}
+
+/**
+ * TInvalidDataValueException class
+ *
+ * TInvalidDataValueException represents an exception caused by invalid data value.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TInvalidDataValueException extends TSystemException
+{
+}
+
+/**
+ * TConfigurationException class
+ *
+ * TConfigurationException represents an exception caused by invalid configurations,
+ * such as error in an application configuration file or control template file.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TConfigurationException extends TSystemException
+{
+}
+
+/**
+ * TTemplateException class
+ *
+ * TTemplateException represents an exception caused by invalid template syntax.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.1
+ */
+class TTemplateException extends TConfigurationException
+{
+ private $_template='';
+ private $_lineNumber=0;
+ private $_fileName='';
+
+ /**
+ * @return string the template source code that causes the exception. This is empty if {@link getTemplateFile TemplateFile} is not empty.
+ */
+ public function getTemplateSource()
+ {
+ return $this->_template;
+ }
+
+ /**
+ * @param string the template source code that causes the exception
+ */
+ public function setTemplateSource($value)
+ {
+ $this->_template=$value;
+ }
+
+ /**
+ * @return string the template file that causes the exception. This could be empty if the template is an embedded template. In this case, use {@link getTemplateSource TemplateSource} to obtain the actual template content.
+ */
+ public function getTemplateFile()
+ {
+ return $this->_fileName;
+ }
+
+ /**
+ * @param string the template file that causes the exception
+ */
+ public function setTemplateFile($value)
+ {
+ $this->_fileName=$value;
+ }
+
+ /**
+ * @return integer the line number at which the template has error
+ */
+ public function getLineNumber()
+ {
+ return $this->_lineNumber;
+ }
+
+ /**
+ * @param integer the line number at which the template has error
+ */
+ public function setLineNumber($value)
+ {
+ $this->_lineNumber=TPropertyValue::ensureInteger($value);
+ }
+}
+
+/**
+ * TIOException class
+ *
+ * TIOException represents an exception related with improper IO operations.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TIOException extends TSystemException
+{
+}
+
+/**
+ * TDbException class
+ *
+ * TDbException represents an exception related with DB operations.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TDbException extends TSystemException
+{
+}
+
+/**
+ * TDbConnectionException class
+ *
+ * TDbConnectionException represents an exception caused by DB connection failure.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TDbConnectionException extends TDbException
+{
+}
+
+/**
+ * TNotSupportedException class
+ *
+ * TNotSupportedException represents an exception caused by using an unsupported PRADO feature.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TNotSupportedException extends TSystemException
+{
+}
+
+/**
+ * TPhpErrorException class
+ *
+ * TPhpErrorException represents an exception caused by a PHP error.
+ * This exception is mainly thrown within a PHP error handler.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class TPhpErrorException extends TSystemException
+{
+ /**
+ * Constructor.
+ * @param integer error number
+ * @param string error string
+ * @param string error file
+ * @param integer error line number
+ */
+ public function __construct($errno,$errstr,$errfile,$errline)
+ {
+ static $errorTypes=array(
+ E_ERROR => "Error",
+ E_WARNING => "Warning",
+ E_PARSE => "Parsing Error",
+ E_NOTICE => "Notice",
+ E_CORE_ERROR => "Core Error",
+ E_CORE_WARNING => "Core Warning",
+ E_COMPILE_ERROR => "Compile Error",
+ E_COMPILE_WARNING => "Compile Warning",
+ E_USER_ERROR => "User Error",
+ E_USER_WARNING => "User Warning",
+ E_USER_NOTICE => "User Notice",
+ E_STRICT => "Runtime Notice"
+ );
+ $errorType=isset($errorTypes[$errno])?$errorTypes[$errno]:'Unknown Error';
+ parent::__construct("[$errorType] $errstr (@line $errline in file $errfile).");
+ }
+}
+
+
+/**
+ * THttpException class
+ *
+ * THttpException represents an exception that is caused by invalid operations
+ * of end-users. The {@link getStatusCode StatusCode} gives the type of HTTP error.
+ * It is used by {@link TErrorHandler} to provide different error output to users.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System.Exceptions
+ * @since 3.0
+ */
+class THttpException extends TSystemException
+{
+ private $_statusCode;
+
+ /**
+ * Constructor.
+ * @param integer HTTP status code, such as 404, 500, etc.
+ * @param string error message. This can be a string that is listed
+ * in the message file. If so, the message in the preferred language
+ * will be used as the error message. Any rest parameters will be used
+ * to replace placeholders ({0}, {1}, {2}, etc.) in the message.
+ */
+ public function __construct($statusCode,$errorMessage)
+ {
+ $this->_statusCode=$statusCode;
+ $this->setErrorCode($errorMessage);
+ $errorMessage=$this->translateErrorMessage($errorMessage);
+ $args=func_get_args();
+ array_shift($args);
+ array_shift($args);
+ $n=count($args);
+ $tokens=array();
+ for($i=0;$i<$n;++$i)
+ $tokens['{'.$i.'}']=TPropertyValue::ensureString($args[$i]);
+ parent::__construct(strtr($errorMessage,$tokens));
+ }
+
+ /**
+ * @return integer HTTP status code, such as 404, 500, etc.
+ */
+ public function getStatusCode()
+ {
+ return $this->_statusCode;
+ }
+}
+
diff --git a/lib/prado/framework/Exceptions/messages/messages-fr.txt b/lib/prado/framework/Exceptions/messages/messages-fr.txt
new file mode 100644
index 0000000..84f5306
--- /dev/null
+++ b/lib/prado/framework/Exceptions/messages/messages-fr.txt
@@ -0,0 +1,420 @@
+prado_application_singleton_required = Il ne peut y avoir qu'une instance de : Prado.Application.
+prado_component_unknown = Le type du composant '{0}' est inconnu. Cela peut être causé par l'erreur de syntaxe dans le fichier {0} : {1}
+prado_using_invalid = Le namespace '{0}' n'est pas valide. Assurez-vous que '.*' a été ajouté si vous souhaitez utiliser un namespace qui fasse référence à ce dossier
+prado_alias_redefined = L'alias '{0}' ne peut pas être redéfini.
+prado_alias_invalid = L'alias '{0}' fait référence à un chemin de dossier non valide : '{1}'. Seul les dossiers existants peuvent être mis en alias.
+prado_aliasname_invalid = L'alias '{0}' contient un caractère non autorisé : '.'.
+
+component_property_undefined = La proriété de l'objet '{0}.{1}' n'est pas définie.
+component_property_readonly = La proriété de l'objet '{0}.{1}' est en lecture seule.
+component_event_undefined = L'événement de l'objet '{0}.{1}' n'est pas défini.
+component_eventhandler_invalid = L'événement de l'objet '{0}.{1}' n'est pas rataché à un handler valide '{2}'.
+component_expression_invalid = L'objet '{0}' essaye d'évaluer un expression invalide '{1}' : {2}.
+component_statements_invalid = L'objet '{0}' essaye d'évaluer une déclaration PHP invalide '{1}' : {2}.
+
+propertyvalue_enumvalue_invalid = La valeur '{0}' n'est pas une valeur possible pour l'énumération ({1}).
+
+list_index_invalid = L'indice '{0}' est hors limite.
+list_item_inexistent = L'élément ne peut être trouvé dans la liste.
+list_data_not_iterable = Data must be either an array or an object implementing Traversable interface.
+list_readonly = {0} est en lecture seule.
+
+map_addition_disallowed = Le nouveau élément ne peut être ajouter dans la liste(map).
+map_item_unremovable = L'élément ne peut être supprimé de la liste (map).
+map_data_not_iterable = Data must be either an array or an object implementing Traversable interface.
+map_readonly = {0} est en lecture seule.
+
+application_includefile_invalid = Impossible de trouver les paramètres de configuration de l'application {0}. Assurez-vous qu'il soit dans le bon espace d'adressage (namespace format) et que l'extension du fichier soit en ".xml".
+application_basepath_invalid = Le dossier de base de l'application '{0}' n'existe pas ou n'est pas un répertoire.
+application_runtimepath_invalid = Le dossier "runtime" de l'application '{0}' n'existe pas ou le serveur Web n'a pas les droits en écriture sur ce dossier.
+application_service_invalid = Le service '{0}' doit implémenter l'interface "IService".
+application_service_unknown = Le service '{0}' que vous demandez n'est pas défini.
+application_unavailable = L'application n'est pas disponible actuellement.
+application_service_unavailable = Le service '{0}' n'est pas disponible actuellement.
+application_moduleid_duplicated = Le module d'ID '{0}' de l'application n'est pas unique.
+application_runtimepath_failed = Impossible de créer le dossier "runtime" '{0}'. Assurez-vous que le dossier parent existe et qu'il est accessible en écriture par le serveur Web.
+
+appconfig_aliaspath_invalid = Configuration de l'application : l'élement <alias id="{0}"> pointe vers un chemin invalide "{1}".
+appconfig_alias_invalid = Confirugation de l'application : l'élement <alias> doit avoir un attribut "id" et un attribut "path".
+appconfig_alias_redefined = Configuration de l'application : l'élement <alias id="{0}"> ne peut pas être redéfini.
+appconfig_using_invalid = Configuration de l'application : l'élément <using> doit avoir un attribut "namespace".
+appconfig_moduleid_required = Configuration de l'application : l'élément <module> doit avoir un attribut "id".
+appconfig_moduletype_required = Configuration de l'application : l'élement <module id="{0}"> doit avoir un attribut "class".
+appconfig_serviceid_required = Configuration de l'application : l'élément <service> doit avoir un attribut "id".
+appconfig_servicetype_required = Configuration de l'application : l'élément <service id="{0}"> doit avoit un attribut "class".
+appconfig_parameterid_required = Configuration de l'application : l'élément <parameter> doit avoir un attribut "id".
+appconfig_includefile_required = Configuration de l'application : l'élément <include> doit avoir un attribut "file".
+
+securitymanager_validationkey_invalid = TSecurityManager.ValidationKey ne doit pas être vide.
+securitymanager_encryptionkey_invalid = TSecurityManager.EncryptionKey ne doit pas être vide.
+securitymanager_mcryptextension_required = L'extension PHP Mcrypt est nécessaier pour utiliser les fonctions de cryptage de TSecurityManager.
+
+uri_format_invalid = '{0}' n'est pas une URI valide.
+
+httprequest_separator_invalid = THttpRequest.UrlParamSeparator ne peut contenir qu'un seul caractère.
+httprequest_urlmanager_inexist = THttpRequest.UrlManager '{0}' ne pointe pas vers un momdule exitant.
+httprequest_urlmanager_invalid = THttpRequest.UrlManager '{0}' doit pointer vers un module héritant de TUrlManager.
+
+httpcookiecollection_httpcookie_required = THttpCookieCollection n'accepte que des objets de type THttpCookie.
+
+httpresponse_bufferoutput_unchangeable = THttpResponse.BufferOutput ne peut pas être modifié après que THttpResponse ait été initialisé.
+httpresponse_file_inexistent = THttpResponse ne peut pas envoyer le fichier '{0}'. Ce fichier n'existe pas.
+
+httpsession_sessionid_unchangeable = THttpSession.SessionID ne peut pas être modifié après que la session ait démarré.
+httpsession_sessionname_unchangeable = THttpSession.SessionName ne peut pas être modifié après que la session ait démarré.
+httpsession_sessionname_invalid = THttpSession.SessionName ne peut contenir que des caractères alphanumériques.
+httpsession_savepath_unchangeable = THttpSession.SavePath ne peut pas être modifié après que la session ait démarré.
+httpsession_savepath_invalid = THttpSession.SavePath '{0}' est invalide.
+httpsession_storage_unchangeable = THttpSession.Storage ne peut pas être modifié après que la session ait démarré.
+httpsession_cookiemode_unchangeable = THttpSession.CookieMode ne peut pas être modifié après que la session ait démarré.
+httpsession_autostart_unchangeable = THttpSession.AutoStart ne peut pas être modifié après que le module de session ait été initialisé.
+httpsession_gcprobability_unchangeable = THttpSession.GCProbability ne peut pas être modifié après que la session ait démarré.
+httpsession_gcprobability_invalid = THttpSession.GCProbability doit être un entier compris entre 0 et 100.
+httpsession_transid_unchangeable = THttpSession.UseTransparentSessionID ne peut pas être modifié après que la session ait démarré.
+httpsession_transid_cookieonly = THttpSession.UseTransparentSessionID ne peut pas être utilisé quand THttpSession.CookieMode est fixé à "Only".
+httpsession_maxlifetime_unchangeable = THttpSession.Timeout ne peut pas être modifié après que la session ait démarré.
+
+assetmanager_basepath_invalid = TAssetManager.BasePath '{0}' est invalide. Vérifier qu'il est bien au format 'namespace' et qu'il pointe bien vers un répertoire accessible en écriture par le propriétaire du processus serveur Web
+assetmanager_basepath_unchangeable = TAssetManager.BasePath ne peut pas être modifié après l'initialisation du module.
+assetmanager_baseurl_unchangeable = TAssetManager.BaseUrl ne peut pas être modifié après l'initialisation du module.
+assetmanager_filepath_invalid = TAssetManager essaye de publier un fichier invalide '{0}'.
+assetmanager_tarchecksum_invalid = TAssetManager essaye de publier une archive 'tar' avec un checksum invalide '{0}'.
+assetmanager_tarfile_invalid = TAssetManager essaye de publier une archive 'tar' invalide '{0}'.
+assetmanager_source_directory_invalid = TAssetManager essaye de copier un répertoire invalide '{0}'.
+
+cache_primary_duplicated = Un seul module au maximum de cache primaire est autorisé. {0} essaye de déclarer un autre module de cache primaire.
+sqlitecache_extension_required = TSqliteCache nécessite l'extension PHP SQLLite.
+sqlitecache_dbfile_required = TSqliteCache.DbFile est nécessaire.
+sqlitecache_connection_failed = Echec de la connexion à la base de données TSqliteCache. {0}.
+sqlitecache_table_creation_failed = Echec de la créatin de la base de données TSqliteCache. {0}.
+sqlitecache_dbfile_unchangeable = TSqliteCache.DbFile ne peut pas être modifié après l'initialisation du module.
+sqlitecache_dbfile_invalid = TSqliteCache.DbFile est invalide. Vérifier qu'il est écrit au format 'Namespace'.
+
+memcache_extension_required = TMemCache nécessite l'extension PHP memcache.
+memcache_connection_failed = TMemCache ne peut pas se connecter au serveur memcache {0}:{1}.
+memcache_host_unchangeable = TMemCache.Host ne peut pas être modifié après l'initialisation du module.
+memcache_port_unchangeable = TMemCache.Port ne peut pas être modifié après l'initialisation du module.
+
+apccache_extension_required = TAPCCache nécessite l'extension PHP APC.
+apccache_add_unsupported = TAPCCache.add() n'est pas supporté.
+apccache_replace_unsupported = TAPCCache.replace() n'est pas supporté.
+apccache_extension_not_enabled = TAPCCache nécessite apc.enabled = 1 dans php.ini.
+apccache_extension_not_enabled_cli = TAPCCache nécessite apc.enable_cli = 1 dans php.ini pour fonctionner en ligne de commande.
+
+errorhandler_errortemplatepath_invalid = TErrorHandler.ErrorTemplatePath '{0}' est invalide. Vérifier qu'il est écrit au format 'namespace' et qu'il pointe bien vers un répertoire valide
+
+pageservice_page_unknown = La page '{0}' n'a pas été trouvée
+pageservice_pageclass_unknown = La classe de la page '{0}' est inconnue.
+pageservice_basepath_invalid = TPageService.BasePath '{0}' n'est pas un répertoire valide.
+pageservice_page_required = Le nom de la page est requis.
+pageservice_defaultpage_unchangeable = TPageService.DefaultPage ne peut pas être modifié après l'initialisation du service.
+pageservice_basepath_unchangeable = TPageService.BasePath ne peut pas être modifié après l'initialisation du service.
+pageservice_pageclass_invalid = La classe de la page {0} est invalide. Cela devrait être TPage ou un héritage de TPage.
+pageservice_includefile_invalid = Impossible de trouver le fichier de configuration du service de page {0}. Verifier qu'il est au format 'namespace' et que l'extension du fichier est '.xml'.
+
+pageserviceconf_file_invalid = Unable to open page directory configuration file '{0}'.
+pageserviceconf_aliaspath_invalid = <alias id="{0}"> uses an invalid file path "{1}" in page directory configuration file '{2}'.
+pageserviceconf_alias_invalid = <alias> element must have an "id" attribute and a "path" attribute in page directory configuration file '{0}'.
+pageserviceconf_using_invalid = <using> element must have a "namespace" attribute in page directory configuration file '{0}'.
+pageserviceconf_module_invalid = <module> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_moduletype_required = <module id="{0}"> must have a "class" attribute in page directory configuration file '{1}'.
+pageserviceconf_parameter_invalid = <parameter> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_page_invalid = <page> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_includefile_required = Page configuration <include> element must have a "file" attribute.
+
+template_closingtag_unexpected = Unexpected closing tag '{0}' is found.
+template_closingtag_expected = Closing tag '{0}' is expected.
+template_directive_nonunique = Directive '<%@ ... %>' must appear at the beginning of the template and can appear at most once.
+template_comments_forbidden = Template comments are not allowed within property tags.
+template_matching_unexpected = Unexpected matching.
+template_property_unknown = {0} has no property called '{1}'.
+template_event_unknown = {0} has no event called '{1}'.
+template_property_readonly = {0} has a read-only property '{1}'.
+template_event_forbidden = {0} is a non-control component. No handler can be attached to its event '{1}' in a template.
+template_databind_forbidden = {0} is a non-control component. Expressions cannot be bound to its property '{1}'.
+template_component_required = '{0}' is not a component. Only components can appear in a template.
+template_format_invalid = Invalid template syntax: {0}
+template_property_duplicated = Property {0} is configured twice or more.
+template_eventhandler_invalid = {0}.{1} can only accept a static string.
+template_controlid_invalid = {0}.ID can only accept a static text string.
+template_controlskinid_invalid = {0}.SkinID can only accept a static text string.
+template_content_unexpected = Unexpected content is encountered when instantiating template: {0}.
+template_include_invalid = Invalid template inclusion. Make sure {0} is a valid namespace pointing to an existing template file whose extension is .tpl.
+template_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}.
+
+xmldocument_file_read_failed = TXmlDocument is unable to read file '{0}'.
+xmldocument_file_write_failed = TXmlDocument is unable to write file '{0}'.
+
+xmlelementlist_xmlelement_required = TXmlElementList can only accept TXmlElement objects.
+
+authorizationrule_action_invalid = TAuthorizationRule.Action can only take 'allow' or 'deny' as the value.
+authorizationrule_verb_invalid = TAuthorizationRule.Verb can only take 'get' or 'post' as the value.
+
+authorizationrulecollection_authorizationrule_required = TAuthorizationRuleCollection can only accept TAuthorizationRule objects.
+
+usermanager_userfile_invalid = TUserManager.UserFile '{0}' is not a valid file.
+usermanager_userfile_unchangeable = TUserManager.UserFile cannot be modified. The user module has been initialized already.
+
+authmanager_usermanager_required = TAuthManager.UserManager must be assigned a value.
+authmanager_usermanager_inexistent = TAuthManager.UserManager '{0}' does not refer to an ID of application module.
+authmanager_usermanager_invalid = TAuthManager.UserManager '{0}' does not refer to a valid TUserManager application module.
+authmanager_usermanager_unchangeable = TAuthManager.UserManager cannot be modified after the module is initialized.
+authmanager_session_required = TAuthManager requires a session application module.
+
+thememanager_service_unavailable = TThemeManager requires TPageService to be available. This error often occurs when you configure TThemeManager outside of the page service configuration.
+thememanager_basepath_invalid = TThemeManager.BasePath '{0}' is not a valid path alias. Make sure you have defined this alias in configuration and it points to a valid directory.
+thememanager_basepath_invalid2 = TThemeManager.BasePath '{0}' is not a valid directory.
+thememanager_basepath_unchangeable = TThemeManager.BasePath cannot be modified after the module is initialized.
+
+theme_baseurl_required = TThemeManager.BasePath is required. By default, a directory named 'themes' under the directory containing the application entry script is assumed.
+theme_path_inexistent = Theme path '{0}' does not exist.
+theme_control_nested = Skin for control type '{0}' in theme '{1}' cannot be within another skin.
+theme_skinid_duplicated = SkinID '{0}.{1}' is duplicated in theme '{2}'.
+theme_databind_forbidden = Databind cannot be used in theme '{0}' for control skin '{1}.{2}' about property '{3}'.
+theme_property_readonly = Skin is being applied to a read-only control property '{0}.{1}'.
+theme_property_undefined = Skin is being applied to an inexistent control property '{0}.{1}'.
+theme_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}.
+
+control_object_reregistered = Duplicated object ID '{0}' found.
+control_id_invalid = {0}.ID '{1}' is invalid. Only alphanumeric and underline characters are allowed. The first character must be an alphabetic or underline character.
+control_skinid_unchangeable = {0}.SkinID cannot be modified after a skin has been applied to the control or the child controls have been created.
+control_enabletheming_unchangeable = {0}.EnableTheming cannot be modified after the child controls have been created.
+control_stylesheet_applied = StyleSheet skin has already been applied to {0}.
+control_id_nonunique = {0}.ID '{1}' is not unique among all controls under the same naming container.
+
+templatecontrol_mastercontrol_invalid = Master control must be of type TTemplateControl or a child class.
+templatecontrol_mastercontrol_required = Control '{0}' requires a master control since the control uses TContent.
+templatecontrol_contentid_duplicated = TContent ID '{0}' is duplicated.
+templatecontrol_placeholderid_duplicated= TContentPlaceHolder ID '{0}' is duplicated.
+templatecontrol_directive_invalid = {0}.{1} can only accept a static text string through a template directive.
+templatecontrol_placeholder_inexistent = TContent '{0}' does not have a matching TContentPlaceHolder.
+
+page_form_duplicated = A page can contain at most one TForm. Use regular HTML form tags for the rest forms.
+page_isvalid_unknown = TPage.IsValid has not been evaluated yet.
+page_postbackcontrol_invalid = Unable to determine postback control '{0}'.
+page_control_outofform = {0} '{1}' must be enclosed within TForm.
+page_head_duplicated = A page can contain at most one THead.
+page_statepersister_invalid = Page state persister must implement IPageStatePersister interface.
+
+csmanager_pradoscript_invalid = Unknown Prado script library name '{0}'.
+csmanager_invalid_packages = Unkownn packages '{1}' for javascript packages defined in '{0}'. Valid packages are '{2}'.
+
+contentplaceholder_id_required = TContentPlaceHolder must have an ID.
+
+content_id_required = TContent must have an ID.
+
+controlcollection_control_required = TControlList can only accept strings or TControl objects.
+
+webcontrol_accesskey_invalid = {0}.AccessKey '{1}' is invalid. It must be a single character only.
+webcontrol_style_invalid = {0}.Style must take string value only.
+
+listcontrol_selection_invalid = {0} has an invalid selection that is set before performing databinding.
+listcontrol_selectedindex_invalid = {0}.SelectedIndex has an invalid value {1}.
+listcontrol_selectedvalue_invalid = {0}.SelectedValue has an invalid value '{1}'.
+listcontrol_expression_invalid = {0} is evaluating an invalid expression '{1}' : {2}
+listcontrol_multiselect_unsupported = {0} does not support multiselection.
+
+label_associatedcontrol_invalid = TLabel.AssociatedControl '{0}' cannot be found.
+
+hiddenfield_focus_unsupported = THiddenField does not support setting input focus.
+hiddenfield_theming_unsupported = THiddenField does not support theming.
+hiddenfield_skinid_unsupported = THiddenField does not support control skin.
+
+panel_defaultbutton_invalid = TPanel.DefaultButton '{0}' does not refer to an existing button control.
+
+tablestyle_cellpadding_invalid = TTableStyle.CellPadding must take an integer equal to or greater than -1.
+tablestyle_cellspacing_invalid = TTableStyle.CellSpacing must take an integer equal to or greater than -1.
+
+pagestatepersister_pagestate_corrupted = Page state is corrupted.
+
+sessionpagestatepersister_pagestate_corrupted = Page state is corrupted.
+sessionpagestatepersister_historysize_invalid = TSessionPageStatePersister.History must be an integer greater than 0.
+
+listitemcollection_item_invalid = TListItemCollection can only take strings or TListItem objects.
+
+dropdownlist_selectedindices_unsupported= TDropDownList.SelectedIndices is read-only.
+
+bulletedlist_autopostback_unsupported = TBulletedList.AutoPostBack is read-only.
+bulletedlist_selectedindex_unsupported = TBulletedList.SelectedIndex is read-only.
+bulletedlist_selectedindices_unsupported= TBulletedList.SelectedIndices is read-only.
+bulletedlist_selectedvalue_unsupported = TBulletedList.SelectedValue is read-only.
+
+radiobuttonlist_selectedindices_unsupported = TRadioButtonList.SelectedIndices is read-only.
+
+logrouter_configfile_invalid = TLogRouter.ConfigFile '{0}' does not exist.
+logrouter_routeclass_required = Class attribute is required in <route> configuration.
+logrouter_routetype_required = Log route must be an instance of TLogRoute or its derived class.
+
+filelogroute_logpath_invalid = TFileLogRoute.LogPath '{0}' must be a directory in namespace format and must be writable by the Web server process.
+filelogroute_maxfilesize_invalid = TFileLogRoute.MaxFileSize must be greater than 0.
+filelogroute_maxlogfiles_invalid = TFileLogRoute.MaxLogFiles must be greater than 0.
+
+emaillogroute_sentfrom_required = TEmailLogRoute.SentFrom cannot be empty.
+
+repeatinfo_repeatcolumns_invalid = TRepeatInfo.RepeatColumns must be no less than 0.
+
+basevalidator_controltovalidate_invalid = {0}.ControlToValidate is empty or contains an invalid control ID path.
+basevalidator_validatable_required = {0}.ControlToValidate must point to a control implementing IValidatable interface.
+basevalidator_forcontrol_unsupported = {0}.ForControl is not supported.
+
+comparevalidator_controltocompare_invalid = TCompareValidator.ControlToCompare contains an invalid control ID path.
+
+listcontrolvalidator_invalid_control = {0}.ControlToValidate contains an invalid TListControl ID path, "{1}" is a {2}.
+
+repeater_template_required = TRepeater.{0} requires a template instance implementing ITemplate interface.
+repeater_itemtype_unknown = Unknow repeater item type {0}.
+repeateritemcollection_item_invalid = TRepeaterItemCollection can only accept objects that are instance of TControl or its descendant class.
+
+datalist_template_required = TDataList.{0} requires a template instance implementing ITemplate interface.
+datalistitemcollection_datalistitem_required = TDataListItemCollection can only accept TDataListItem objects.
+
+datagrid_template_required = TDataGrid.{0} requires a template instance implementing ITemplate interface.
+templatecolumn_template_required = TTemplateColumn.{0} requires a template instance implementing ITemplate interface.
+datagrid_currentpageindex_invalid = TDataGrid.CurrentPageIndex must be no less than 0.
+datagrid_pagesize_invalid = TDataGrid.PageSize must be greater than 0.
+datagrid_virtualitemcount_invalid = TDataGrid.VirtualItemCount must be no less than 0.
+datagriditemcollection_datagriditem_required = TDataGridItemCollection can only accept TDataGridItem objects.
+datagridcolumncollection_datagridcolumn_required = TDataGridColumnCollection can only accept TDataGridColumn objects.
+datagridpagerstyle_pagebuttoncount_invalid = TDataGridPagerStyle.PageButtonCount must be greater than 0.
+
+datafieldaccessor_data_invalid = TDataFieldAccessor is trying to evaluate a field value of an invalid data. Make sure the data is an array, TMap, TList, or object that contains the specified field '{0}'.
+datafieldaccessor_datafield_invalid = TDataFieldAccessor is trying to evaluate data value of an unknown field '{0}'.
+
+tablerowcollection_tablerow_required = TTableRowCollection can only accept TTableRow objects.
+
+tablecellcollection_tablerow_required = TTableCellCollection can only accept TTableCell objects.
+
+multiview_view_required = TMultiView can only accept TView as child.
+multiview_activeviewindex_invalid = TMultiView.ActiveViewIndex has an invalid index '{0}'.
+multiview_view_inexistent = TMultiView cannot find the specified view.
+multiview_viewid_invalid = TMultiView cannot find the view '{0}' to switch to.
+
+viewcollection_view_required = TViewCollection can only accept TView as its element.
+
+view_visible_readonly = TView.Visible is read-only. Use TView.Active to toggle its visibility.
+
+wizard_step_invalid = The step to be activated cannot be found in wizard step collection.
+wizard_command_invalid = Invalid wizard navigation command '{0}'.
+
+table_tablesection_outoforder = TTable table sections must be in the order of: Header, Body and Footer.
+
+completewizardstep_steptype_readonly = TCompleteWizardStep.StepType is read-only.
+
+wizardstepcollection_wizardstep_required = TWizardStepCollection can only accept objects of TWizardStep or its derived classes.
+
+texthighlighter_stylesheet_invalid = Unable to find the stylesheet file for TTextHighlighter.
+
+hotspotcollection_hotspot_required = THotSpotCollection can only accept instance of THotSpot or its derived classes.
+
+htmlarea_textmode_readonly = THtmlArea.TextMode is read-only.
+htmlarea_tarfile_invalid = THtmlArea is unable to locate the TinyMCE tar file.
+
+parametermodule_parameterfile_unchangeable = TParameterModule.ParameterFile is not changeable because the module is already initialized.
+parametermodule_parameterfile_invalid = TParameterModule.ParameterFile '{0}' is invalid. Make sure it is in namespace format and the file extension is '.xml'.
+parametermodule_parameterid_required = Parameter element must have 'id' attribute.
+
+datagridcolumn_id_invalid = {0}.ID '{1}' is invalid. Only alphanumeric and underline characters are allowed. The first character must be an alphabetic or underline character.
+datagridcolumn_expression_invalid = {0} is evaluating an invalid expression '{1}' : {2}
+
+outputcache_cachemoduleid_invalid = TOutputCache.CacheModuleID is set with an invalid cache module ID {0}. Either the module does not exist or does not implement ICache interface.
+outputcache_duration_invalid = {0}.Duration must be an integer no less than 0.
+
+stack_data_not_iterable = TStack can only fetch data from an array or a traversable object.
+stack_empty = TStack is empty.
+
+queue_data_not_iterable = TQueue can only fetch data from an array or a traversable object.
+queue_empty = TQueue is empty.
+
+pager_pagebuttoncount_invalid = TPager.PageButtonCount must be an integer no less than 1.
+pager_currentpageindex_invalid = TPager.CurrentPageIndex is out of range.
+pager_pagecount_invalid = TPager.PageCount cannot be smaller than 0.
+pager_controltopaginate_invalid = TPager.ControlToPaginate {0} must be a valid ID path pointing to a TDataBoundControl-derived control.
+
+databoundcontrol_pagesize_invalid = {0}.PageSize must be an integer no smaller than 1.
+databoundcontrol_virtualitemcount_invalid = {0}.VirtualItemCount must be an integer no smaller than 0.
+databoundcontrol_currentpageindex_invalid = {0}.CurrentPageIndex is out of range.
+databoundcontrol_datasource_invalid = {0}.DataSource is not valid.
+databoundcontrol_datasourceid_inexistent = databoundcontrol_datasourceid_inexistent.
+databoundcontrol_datasourceid_invalid = databoundcontrol_datasourceid_invalid
+databoundcontrol_datamember_invalid = databoundcontrol_datamember_invalid
+
+clientscript_invalid_file_position = Invalid file position '{1}' for TClientScript control '{0}', must be 'Head', 'Here' or 'Begin'.
+clientscript_invalid_package_path = Invalid PackagePath '{0}' for TClientScript control '{1}'.
+
+tdatepicker_autopostback_unsupported = '{0}' does not support AutoPostBack.
+globalization_cache_path_failed = Unable to create translation message cache path '{0}'. Make sure the parent directory exists and is writable by the Web process.
+globalization_source_path_failed = Unable to create translation message path '{0}'. Make sure the parent directory exists and is writable by the Web process.
+callback_not_support_no_priority_state_update = Callback request does not support unprioritized pagestate update.
+callback_invalid_callback_options = '{1}' is not a valid TCallbackOptions control for Callback control '{0}'.
+callback_invalid_clientside_options = Callback ClientSide property must be either a string that is the ID of a TCallbackOptions control or an instance of TCallbackClientSideOptions.=======
+callback_not_support_no_priority_state_update = Callback request does not support unprioritized pagestate update.
+callback_invalid_handler = Invalid callback handler, control {0} must implement ICallbackEventHandler.
+callback_invalid_target = Invalid callback target, no such control with ID {0}.
+
+callback_interval_be_positive = Interval for TCallbackTimer "{0}" must be strictly greater than zero seconds.
+callback_decay_be_not_negative = Decay rate for TCallbackTimer "{0}" must be not negative.
+
+callback_no_autopostback = Control "{0}" can not enable AutoPostBack.
+
+xmltransform_xslextension_required = TXmlTransform requires the PHP's XSL extension.
+xmltransform_transformpath_invalid = TXmlTransform.TransformPath '{0}' is invalid.
+xmltransform_documentpath_invalid = TXmlTransform.DocumentPath '{0}' is invalid.
+xmltransform_transform_required = Either TransformContent or TransformPath property must be set for TXmlTransform.
+
+ttriggeredcallback_invalid_controlid = ControlID property for '{0}' must not be empty.
+tactivecustomvalidator_clientfunction_unsupported = {0} does not support client side validator function.
+
+dbconnection_open_failed = TDbConnection failed to establish DB connection: {0}
+dbconnection_connection_inactive = TDbConnection is inactive.
+dbconnection_unsupported_driver_charset = Le pilote de base de données '{0}' ne supporte pas la modification du jeu de caractères.
+
+dbcommand_prepare_failed = TDbCommand failed to prepare the SQL statement "{1}": {0}
+dbcommand_execute_failed = TDbCommand failed to execute the SQL statement "{1}": {0}
+dbcommand_query_failed = TDbCommand failed to execute the query SQL "{1}": {0}
+dbcommand_column_empty = TDbCommand returned an empty result and could not obtain the scalar.
+dbdatareader_rewind_invalid = TDbDataReader is a forward-only stream. It can only be traversed once.
+dbtransaction_transaction_inactive = TDbTransaction is inactive.
+
+dbcommandbuilder_value_must_not_be_null = Property {0} must not be null as defined by column '{2}' in table '{1}'.
+
+dbcommon_invalid_table_name = Database table '{0}' not found. Error message: {1}.
+dbcommon_invalid_identifier_name = Invalid database identifier name '{0}', see {1} for details.
+dbtableinfo_invalid_column_name = Invalid column name '{0}' for database table '{1}'.
+dbmetadata_invalid_table_view = Invalid table/view name '{0}', or that table/view '{0}' contains no accessible column/field definitions.
+dbmetadata_requires_php_version = PHP version {1} or later is required for using {0} database.
+
+dbtablegateway_invalid_criteria = Invalid criteria object, must be a string or instance of TSqlCriteria.
+dbtablegateway_no_primary_key_found = Table '{0}' does not contain any primary key fields.
+dbtablegateway_missing_pk_values = Missing primary key values in forming IN(key1, key2, ...) for table '{0}'.
+dbtablegateway_pk_value_count_mismatch = Composite key value count mismatch in forming IN( (key1, key2, ..), (key3, key4, ..)) for table '{0}'.
+dbtablegateway_mismatch_args_exception = TTableGateway finder method '{0}' expects {1} parameters but found only {2} parameters instead.
+dbtablegateway_mismatch_column_name = In dynamic __call() method '{0}', no matching columns were found, valid columns for table '{2}' are '{1}'.
+dbtablegateway_invalid_table_info = Table must be a string or an instanceof TDbTableInfo.
+
+directorycachedependency_directory_invalid = TDirectoryCacheDependency.Directory {0} does not refer to a valid directory.
+cachedependencylist_cachedependency_required = Only objects implementing ICacheDependency can be added into TCacheDependencyList.
+
+soapservice_configfile_invalid = TSoapService.ConfigFile '{0}' does not exist. Note, it has to be specified in a namespace format and the file extension must be '.xml'.
+soapservice_request_invalid = SOAP server '{0}' not found.
+soapservice_serverid_required = <soap> element must have 'id' attribute.
+soapservice_serverid_duplicated = SOAP server ID '{0}' is duplicated.
+soapserver_id_invalid = Invalid SOAP server ID '{0}'. It should not end with '.wsdl'.
+soapserver_version_invalid = Invalid SOAP version '{0}'. It must be either '1.1' or '1.2'.
+
+dbusermanager_userclass_required = TDbUserManager.UserClass is required.
+dbusermanager_userclass_invalid = TDbUserManager.UserClass '{0}' is not a valid user class. The class must extend TDbUser.
+dbusermanager_connectionid_invalid = TDbUserManager.ConnectionID '{0}' does not point to a valid TDataSourceConfig module.
+dbusermanager_connectionid_required = TDbUserManager.ConnectionID is required.
+
+feedservice_id_required = TFeedService requires 'id' attribute in its feed elements.
+feedservice_feedtype_invalid = The class feed '{0}' must implement IFeedContentProvider interface.
+feedservice_class_required = TFeedService requires 'class' attribute in its feed elements.
+feedservice_feed_unknown = Unknown feed '{0}' requested.
+
+tactivetablecell_control_outoftable = {0} '{1}' must be enclosed within a TTableRow control.
+tactivetablecell_control_notincollection = {0} '{1}' no member of the TTableCellCollection of the parent TTableRow control.
+
+tactivetablerow_control_outoftable = {0} '{1}' must be enclosed within a TTable control.
+tactivetablerow_control_notincollection = {0} '{1}' no member of the TTableRowCollection of the parent TTable control.
+
+juidatepicker_settextmode_unsupported = TextMode of TJuiDatePicker cannot be changed. \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/messages/messages-id.txt b/lib/prado/framework/Exceptions/messages/messages-id.txt
new file mode 100644
index 0000000..dfba22b
--- /dev/null
+++ b/lib/prado/framework/Exceptions/messages/messages-id.txt
@@ -0,0 +1,466 @@
+prado_application_singleton_required = Prado.Application harus disetel hanya sekali.
+prado_component_unknown = Tipe komponen '{0}' tidak dikenal. Ini bisa disebabkan oleh kesalahan penguraian dalam file kelas {0}: {1}
+prado_using_invalid = '{0}' bukan namespace yang benar untuk dipakai. Pastikan '.*' ditambahkan jika anda ingin menggunakan namespace merujuk ke sebuah direktori.
+prado_alias_redefined = Alias '{0}' tidak bisa didefinisikan ulang.
+prado_alias_invalid = Alias '{0}' merujuk ke path '{1}' yang tidak benar. Hanya direktori yang sudah ada bisa dialiaskan.
+prado_aliasname_invalid = Alias '{0}' berisi karakter tidak benar '.'.
+
+component_property_undefined = Properti komponen '{0}.{1}' tidak didefinisikan.
+component_property_readonly = Properti komponen '{0}.{1}' hanya-baca.
+component_event_undefined = Event komponen '{0}.{1}' tidak didefinsikan.
+component_eventhandler_invalid = Event komponen '{0}.{1}' dilampirkan dengan pengendali event tidak benar '{2}'.
+component_expression_invalid = Komponen '{0}' mengevaluasi ekspresi yang tidak benar '{1}' : {2}.
+component_statements_invalid = Komponen '{0}' mengevaluasi pernyataan PHP yang tidak benar '{1}' : {2}.
+
+propertyvalue_enumvalue_invalid = Nilai '{0}' bukan nilai enumerasi yang benar ({1}).
+
+list_index_invalid = Indeks '{0}' diluar jangkauan.
+list_item_inexistent = Item tidak bisa ditemukan dalam daftar.
+list_data_not_iterable = Data harus berupa array atau obyek yang mengimplementasikan antarmuka Traversable.
+list_readonly = {0} hanya-baca.
+
+map_addition_disallowed = Item baru tidak bisa ditambahkan ke peta.
+map_item_unremovable = Item tidak bisas dihapus dari peta.
+map_data_not_iterable = Data harus berupa array atau obyek yang mengimplementasikan antarmuka Traversable.
+map_readonly = {0} hanya-baca.
+
+application_includefile_invalid = Tidak bisa menemukan konfigurasi aplikasi {0}. Pastikan ia ada dalam format namespace dan file berakhir dengan ".xml".
+application_basepath_invalid = Path basis aplikasi '{0}' tidak ada atau bukan sebuah direktori.
+application_runtimepath_invalid = Path runtime aplikasi '{0}' tidak ada atau tidak bisa ditulis oleh proses server Web.
+application_service_invalid = Layanan '{0}' harus mengimplementasikan antarmuka IService.
+application_service_unknown = Layanan yang diminta '{0}' tidak didefinisikan.
+application_unavailable = Aplikasi tidak tersedia saat ini.
+application_service_unavailable = Layanan '{0}' tidak tersedia saat ini.
+application_moduleid_duplicated = ID modul aplikasi '{0}' tidak unik.
+application_runtimepath_failed = Tidak bisa membuat path runtime '{0}'. Pastikan direktori leluhur ada dan bisa ditulis oleh proses Web.
+
+appconfig_aliaspath_invalid = Konfigurasi aplikasi <alias id="{0}"> menggunakan path file tidak benar "{1}".
+appconfig_alias_invalid = Konfigurasi aplikasi elemen <alias> harus mempunyai atribut "id" dan atribut "path".
+appconfig_alias_redefined = Konfigurasi aplikasi <alias id="{0}"> tidak bisa didefinisikan ulang.
+appconfig_using_invalid = Konfigurasi aplikasi elemen <using> harus mempunyai atribut "namespace".
+appconfig_moduleid_required = Konfigurasi aplikasi elemen <module> harus mempunyai atribut "id".
+appconfig_moduletype_required = Konfigurasi aplikasi <module id="{0}"> harus mempunyai atribut "class".
+appconfig_serviceid_required = Konfigurasi aplikasi elemen <service> harus mempunyai atribut "id".
+appconfig_servicetype_required = Konfigurasi aplikasi <service id="{0}"> harus mempunyai atribut "class".
+appconfig_parameterid_required = Konfigurasi aplikasi elemen <parameter> harus mempunyai atribut "id".
+appconfig_includefile_required = Konfigurasi aplikasi elemen <include> harus mempunyai atribut "file".
+
+securitymanager_validationkey_invalid = TSecurityManager.ValidationKey tidak boleh kosong.
+securitymanager_encryptionkey_invalid = TSecurityManager.EncryptionKey tidak boleh kosong.
+securitymanager_mcryptextension_required = Ekstensy mcrypt PHP diperlukan agar bisa menggunakan fitur enkripsi TSecurityManager.
+
+uri_format_invalid = '{0}' bukan URI yang benar.
+
+httprequest_separator_invalid = THttpRequest.UrlParamSeparator hanya bisa berisi karakter tunggal.
+httprequest_urlmanager_inexist = THttpRequest.UrlManager '{0}' tidak mengarah ke modul yang sudah ada.
+httprequest_urlmanager_invalid = THttpRequest.UrlManager '{0}' harus mengarah ke modul yang diperluas dari TUrlManager.
+
+httpcookiecollection_httpcookie_required = THttpCookieCollection hanya bisa menerima obyek THttpCookie.
+
+httpresponse_bufferoutput_unchangeable = THttpResponse.BufferOutput tidak bisa diubah setelah THttpResponse diinisialisasi.
+httpresponse_file_inexistent = THttpResponse tidak bisa mengirimkan file '{0}'. File tidak ada.
+
+httpsession_sessionid_unchangeable = THttpSession.SessionID tidak bisa diubah setelah sesi dimulai.
+httpsession_sessionname_unchangeable = THttpSession.SessionName tidak bisa diubah setelah sesi dimulai.
+httpsession_sessionname_invalid = THttpSession.SessionName harus berisi hanya karakter alfanumerik.
+httpsession_savepath_unchangeable = THttpSession.SavePath tidak bisa diubah setelah sesi dimulai.
+httpsession_savepath_invalid = THttpSession.SavePath '{0}' tidak benar.
+httpsession_storage_unchangeable = THttpSession.Storage tidak bisa diubah setelah sesi dimulai.
+httpsession_cookiemode_unchangeable = THttpSession.CookieMode tidak bisa diubah setelah sesi dimulai.
+httpsession_autostart_unchangeable = THttpSession.AutoStart tidak bisa diubah setelah modul sesi diinisialisasi.
+httpsession_gcprobability_unchangeable = THttpSession.GCProbability tidak bisa diubah setelah sesi dimulai.
+httpsession_gcprobability_invalid = THttpSession.GCProbability harus integer antara 0 dan 100.
+httpsession_transid_unchangeable = THttpSession.UseTransparentSessionID tidak bisa diubah setelah sesi dimulai.
+httpsession_transid_cookieonly = THttpSession.UseTransparentSessionID cannot be set when THttpSession.CookieMode is set to Only.
+httpsession_maxlifetime_unchangeable = THttpSession.Timeout tidak bisa diubah setelah sesi dimulai.
+
+assetmanager_basepath_invalid = TAssetManager.BasePath '{0}' tidak benar. Pastikan ia dalam bentuk namespace dan mengarah ke direktori yang bisa ditulis oleh proses server Web.
+assetmanager_basepath_unchangeable = TAssetManager.BasePath tidak bisa diubah setelah modul diinisialisasi.
+assetmanager_baseurl_unchangeable = TAssetManager.BaseUrl tidak bisa diubah setelah modul diinisialisasi.
+assetmanager_filepath_invalid = TAssetManager menerbitkan file yang tidak benar '{0}'.
+assetmanager_tarchecksum_invalid = TAssetManager menerbitkan file tar dengan checksum '{0}' yang salah.
+assetmanager_tarfile_invalid = TAssetManager menerbitkan file tar yang tidak benar '{0}'.
+assetmanager_source_directory_invalid = TAssetManager meng-copy direktori '{0}' yang tidak benar.
+
+cache_primary_duplicated = Paling banyak satu modul cache primer yang dibolehkan. {0} mencoba meregistrasi cache primer lain.
+sqlitecache_extension_required = TSqliteCache memerlukan ekstensi SQLite PHP.
+sqlitecache_dbfile_required = TSqliteCache.DbFile diperlukan.
+sqlitecache_connection_failed = TSqliteCache koneksi database gagal. {0}.
+sqlitecache_table_creation_failed = TSqliteCache gagal untuk membuat cache database. {0}.
+sqlitecache_dbfile_unchangeable = TSqliteCache.DbFile tidak bisa diubah setelah modul diinisialisasi.
+sqlitecache_dbfile_invalid = TSqliteCache.DbFile tidak benar. Pastikan ia ada dalam format namespace yang benar.
+
+memcache_extension_required = TMemCache memerlukan ekstensi memcache PHP.
+memcache_connection_failed = TMemCache gagal menghubungi server memcache {0}:{1}.
+memcache_host_unchangeable = TMemCache.Host tidak bisa diubah setelah modul diinisialisasi.
+memcache_port_unchangeable = TMemCache.Port tidak bisa diubah setelah modul diinisialisasi.
+
+apccache_extension_required = TAPCCache memerlukan ekstensi APC PHP.
+apccache_add_unsupported = TAPCCache.add() tidak didukung.
+apccache_replace_unsupported = TAPCCache.replace() tidak didukung.
+apccache_extension_not_enabled = TAPCCache memerlukan apc.enabled = 1 dalam php.ini agar bekerja.
+apccache_extension_not_enabled_cli = TAPCCache memerlukan apc.enable_cli = 1 dalam php.ini agar bekerja dengan PHP dari baris perintah.
+
+errorhandler_errortemplatepath_invalid = TErrorHandler.ErrorTemplatePath '{0}' tidak benar. Pastikan ia ada dalam bentuk namespace dan mengarah ke direktori yang berisi file template kesalahan.
+
+pageservice_page_unknown = Halaman '{0}' Tidak Ditemukan
+pageservice_pageclass_unknown = Kelas Halaman '{0}' tidak dikenal.
+pageservice_basepath_invalid = TPageService.BasePath '{0}' bukan direktori yang benar.
+pageservice_page_required = Nama Halaman Diperlukan
+pageservice_defaultpage_unchangeable = TPageService.DefaultPage tidak bisa diubah setelah layanan diinisialisasi.
+pageservice_basepath_unchangeable = TPageService.BasePath tidak bisa diubah setelah layanan diinisialisasi.
+pageservice_pageclass_invalid = Kelas halaman {0} tidak benar. Ia harus berupa TPage atau diperluas dari TPage.
+pageservice_includefile_invalid = Tidak bisa menemukan konfigurasi layanan {0}. Pastikan ia ada dalam format namespace dan file berakhir dengan ".xml".
+
+pageserviceconf_file_invalid = Tidak bisa membuka file konfigurasi direktori halaman '{0}'.
+pageserviceconf_aliaspath_invalid = <alias id="{0}"> menggunakan path file tidak benar "{1}" dalam file konfigurasi direktori halaman '{2}'.
+pageserviceconf_alias_invalid = Elemen <alias> harus mempunyai atribut "id" dan atribut "path" dalam file konfigurasi direktori halaman '{0}'.
+pageserviceconf_using_invalid = Elemen <using> harus mempunyai atribut "namespace" dalam file konfigurasi direktori halaman '{0}'.
+pageserviceconf_module_invalid = Elemen <module> harus mempunyai atribut "id" dalam file konfigurasi direktori halaman '{0}'.
+pageserviceconf_moduletype_required = <module id="{0}"> harus mempunyai atribut "class" dalam file konfigurasi direktori halaman '{1}'.
+pageserviceconf_parameter_invalid = Elemen <parameter> harus mempunyai atribut "id" dalam file konfigurasi direktori halaman '{0}'.
+pageserviceconf_page_invalid = Elemen <page> harus mempunyai atribut "id" dalam file konfigurasi direktori halaman '{0}'.
+pageserviceconf_includefile_required = Konfigurasi halaman elemen <include> harus mempunyai atribut "file".
+
+template_closingtag_unexpected = Tag penutup '{0}' yang tidak diharapkan ditemukan.
+template_closingtag_expected = Tag penutup '{0}' diharapkan.
+template_directive_nonunique = Direktif '<%@ ... %>' harus muncul di awal template dan bisa muncul paling banyak satu kali.
+template_comments_forbidden = Komentar template tidak dibolehkan dalam tag properti.
+template_matching_unexpected = Penyamaan tidak diharapkan.
+template_property_unknown = {0} tidak memiliki properti bernama '{1}'.
+template_event_unknown = {0} tidak memiliki event bernama '{1}'.
+template_property_readonly = {0} memiliki properti hanya-baca '{1}'.
+template_event_forbidden = {0} bukan kontrol komponen. Tidak ada pengendali yang dapat dilampirkan ke event '{1}' dalam template.
+template_databind_forbidden = {0} bukan kontrol komponen. Ekspresi tidak bisa diikat ke propertinya '{1}'.
+template_component_required = '{0}' bukan komponen. Hanya komponen yang dapat terlihat dalam template.
+template_format_invalid = Sintaks template salah: {0}
+template_property_duplicated = Properti {0} dikonfigurasi dua kali atau lebih.
+template_eventhandler_invalid = {0}.{1} hanya bisa menerima string statis.
+template_controlid_invalid = {0}.ID hanya bisa menerima string teks statis.
+template_controlskinid_invalid = {0}.SkinID hanya bisa menerima string teks statis.
+template_content_unexpected = Konten tidak diharapkan ditemukan saat menurunkan template: {0}.
+template_include_invalid = Inklusi template tidak benar. Pastikan {0} adalah namespace yang benar mengarah ke file template yang sudah ada yang mempunyai ekstensi .tpl.
+template_tag_unexpected = Inisialisasi properti {0} berisi tipe tag tidak dikenal {1}.
+
+xmldocument_file_read_failed = TXmlDocument tidak bisa membaca file '{0}'.
+xmldocument_file_write_failed = TXmlDocument tidak bisa menulis file '{0}'.
+
+xmlelementlist_xmlelement_required = TXmlElementList hanya bisa menerima obyek TXmlElement.
+
+authorizationrule_action_invalid = TAuthorizationRule.Action hanya bisa mengambil 'allow' atau 'deny' sebagai nilainya.
+authorizationrule_verb_invalid = TAuthorizationRule.Verb hanya bisa mengambil 'get' atau 'post' sebagai nilainya.
+
+authorizationrulecollection_authorizationrule_required = TAuthorizationRuleCollection hanya bisa menerima obyek TAuthorizationRule.
+
+usermanager_userfile_invalid = TUserManager.UserFile '{0}' bukan file yang benar.
+usermanager_userfile_unchangeable = TUserManager.UserFile tidak bisa diubah. Modul pengguna sudah diinisialisasi.
+
+authmanager_usermanager_required = TAuthManager.UserManager harus menempatkan nilai.
+authmanager_usermanager_inexistent = TAuthManager.UserManager '{0}' tidak merujuk ke ID modul aplikasi.
+authmanager_usermanager_invalid = TAuthManager.UserManager '{0}' tidak merujuk ke modul aplikasi TUserManager yang benar.
+authmanager_usermanager_unchangeable = TAuthManager.UserManager tidak bisa diubah setelah modul diinisialisasi.
+authmanager_session_required = TAuthManager memerlukan modul aplikasi sesi.
+
+thememanager_service_unavailable = TThemeManager memerlukan ketersediaan TPageService. Kesalahan ini sering terjadi saat anda mengkonfigurasi TThemeManager di luar konfigurasi layanan halaman.
+thememanager_basepath_invalid = TThemeManager.BasePath '{0}' bukan alias path yang benar. Pastikan anda telah mendefinisikan alias ini dalam konfigurasi dan mengarahkan ke direktori yang benar.
+thememanager_basepath_invalid2 = TThemeManager.BasePath '{0}' bukan direktori yang benar.
+thememanager_basepath_unchangeable = TThemeManager.BasePath tidak bisa diubah setelah modul diinisialisasi.
+
+theme_baseurl_required = TThemeManager.BasePath diperlukan. Standarnya direktori bernama 'themes' di bawah direktori berisi naskah entri aplikasi diasumsikan.
+theme_path_inexistent = Path tema '{0}' tidak ada.
+theme_control_nested = Skin untuk tipe kontrol '{0}' dalam tema '{1}' tidak bisa di dalam skin lain.
+theme_skinid_duplicated = SkinID '{0}.{1}' diduplikasi dalam tema '{2}'.
+theme_databind_forbidden = Databind tidak bisa dipakai dalam tema '{0}' untuk skin kontrol '{1}.{2}' mengenai properti '{3}'.
+theme_property_readonly = Skin diterapkan ke properti kontrol hanya-baca '{0}.{1}'.
+theme_property_undefined = Skin diterapkan ke properti kontrol yang tidak ada '{0}.{1}'.
+theme_tag_unexpected = Inisialisasi properti {0} berisi tipe tag tidak dikenal {1}.
+
+control_object_reregistered = Ditemukan duplikasi obyek ID '{0}'.
+control_id_invalid = {0}.ID '{1}' tidak benar. Hanya alfanumerik dan karakter bergaris bawah dibolehkan. Karakter pertama harus alfabetikatau karakter garis bawah.
+control_skinid_unchangeable = {0}.SkinID tidak bisa diubah setelah skin diterapkan ke kontrol atau kontrol anak sudah dibuat.
+control_enabletheming_unchangeable = {0}.EnableTheming tidak bisa diubah setelah kontrol anak dibuat.
+control_stylesheet_applied = StyleSheet skin sudah diterapkan ke {0}.
+control_id_nonunique = {0}.ID '{1}' tidak unik diantara semua kontrol di bawah tempat penamaan yang sama.
+
+templatecontrol_mastercontrol_invalid = Kontrol master harus bertipe TTemplateControl atau kelas anak.
+templatecontrol_mastercontrol_required = Kontrol '{0}' memerlukan kontrol master karena kontrol menggunakan TContent.
+templatecontrol_contentid_duplicated = TContent ID '{0}' duplikasi.
+templatecontrol_placeholderid_duplicated= TContentPlaceHolder ID '{0}' duplikasi.
+templatecontrol_directive_invalid = {0}.{1} hanya menerima teks statis melalui direktif template.
+templatecontrol_placeholder_inexistent = TContent '{0}' tidak mempunyai TContentPlaceHolder yang sama.
+
+page_form_duplicated = Halaman bisa berisi paling banyak satu TForm. Gunakan tag form HTML reguler untuk sisa form-nya.
+page_isvalid_unknown = TPage.IsValid belum dievaluasi.
+page_postbackcontrol_invalid = Tidak bisa menentukan kontrol postback '{0}'.
+page_control_outofform = {0} '{1}' harus dikurung di dalam TForm.
+page_head_duplicated = Halaman dapat berisi paling banyak satu THead.
+page_head_required = Kontrol THead dibutuhkan dalam template halaman untuk menyajikan CSS dan JS dalam seksi head HTML.
+page_statepersister_invalid = Persister kondisi halaman harus mengimplementasikan antarmuka IPageStatePersister.
+
+csmanager_pradoscript_invalid = Nama librari naskah Prado '{0}' tidak dikenal.
+csmanager_invalid_packages = Paket '{1}' tidak dikenal untuk paket javascript yang didefinisikan dalam '{0}'. Paket yang benar adalah '{2}'.
+
+contentplaceholder_id_required = TContentPlaceHolder harus mempunyai ID.
+
+content_id_required = TContent harus mempunyai ID.
+
+controlcollection_control_required = TControlList hanya bisa menerima string atau obyek TControl.
+
+webcontrol_accesskey_invalid = {0}.AccessKey '{1}' tidak benar. Ia harus berupa hanya karakter tunggal.
+webcontrol_style_invalid = {0}.Style harus berisi hanya nilai string.
+
+listcontrol_selection_invalid = {0} mempunyai pilihan tidak benar yang disetel sebelum melakukan penyatuan data.
+listcontrol_selectedindex_invalid = {0}.SelectedIndex mempunyai nilai '{1}' yang tidak benar.
+listcontrol_selectedvalue_invalid = {0}.SelectedValue mempunyai nilai '{1}' yang tidak benar.
+listcontrol_expression_invalid = {0} mengevaluasi ekspresi yang tidak benar '{1}' : {2}
+listcontrol_multiselect_unsupported = {0} tidak mendukung multi pilihan.
+
+label_associatedcontrol_invalid = TLabel.AssociatedControl '{0}' tidak bisa ditemukan.
+
+hiddenfield_focus_unsupported = THiddenField tidak mendukung setelan fokus input.
+hiddenfield_theming_unsupported = THiddenField tidak mendukung tema.
+hiddenfield_skinid_unsupported = THiddenField tidak mendukung skin kontrol.
+
+panel_defaultbutton_invalid = TPanel.DefaultButton '{0}' tidak merujuk ke kontrol tombol yang sudah ada.
+
+tablestyle_cellpadding_invalid = TTableStyle.CellPadding harus mengambil integer sama dengan atau lebih besar dari.
+tablestyle_cellspacing_invalid = TTableStyle.CellSpacing harus mengambil integer sama dengan atau lebih besar dari -1.
+
+pagestatepersister_pagestate_corrupted = Kondisi halaman rusak.
+
+sessionpagestatepersister_pagestate_corrupted = Kondisi halaman rusak.
+sessionpagestatepersister_historysize_invalid = TSessionPageStatePersister.History harus integer lebih besar dari 0.
+
+listitemcollection_item_invalid = TListItemCollection hanya bisa mengambil strings atau obyek TListItem.
+
+dropdownlist_selectedindices_unsupported= TDropDownList.SelectedIndices hanya-baca.
+
+bulletedlist_autopostback_unsupported = TBulletedList.AutoPostBack hanya-baca.
+bulletedlist_selectedindex_unsupported = TBulletedList.SelectedIndex hanya-baca.
+bulletedlist_selectedindices_unsupported= TBulletedList.SelectedIndices hanya-baca.
+bulletedlist_selectedvalue_unsupported = TBulletedList.SelectedValue hanya-baca.
+
+radiobuttonlist_selectedindices_unsupported = TRadioButtonList.SelectedIndices hanya-baca.
+
+logrouter_configfile_invalid = TLogRouter.ConfigFile '{0}' tidak ada.
+logrouter_routeclass_required = Atribut Class diperlukan dalam konfigurasi <route>.
+logrouter_routetype_required = Rute catatan harus turunan dari TLogRoute atau kelas turunannya.
+
+filelogroute_logpath_invalid = TFileLogRoute.LogPath '{0}' harus berupa direktori dalam format namespace dan harus bisa ditulis oleh proses server Web.
+filelogroute_maxfilesize_invalid = TFileLogRoute.MaxFileSize harus lebih besar dari 0.
+filelogroute_maxlogfiles_invalid = TFileLogRoute.MaxLogFiles harus lebih besar dari 0.
+
+emaillogroute_sentfrom_required = TEmailLogRoute.SentFrom tidak boleh kosong.
+
+repeatinfo_repeatcolumns_invalid = TRepeatInfo.RepeatColumns tidak boleh kurang dari 0.
+
+basevalidator_controltovalidate_invalid = {0}.ControlToValidate kosong atau berisi path ID kontrol yang tidak benar.
+basevalidator_validatable_required = {0}.ControlToValidate harus mengarah ke sebuah kontrol yang mengimplementasikan antarmuka IValidatable.
+basevalidator_forcontrol_unsupported = {0}.ForControl tidak didukung.
+
+comparevalidator_controltocompare_invalid = TCompareValidator.ControlToCompare berisi path ID kontrol tidak benar.
+
+listcontrolvalidator_invalid_control = {0}.ControlToValidate berisi path ID TListControl tidak benar, "{1}" adalah {2}.
+
+repeater_template_required = TRepeater.{0} memerlukan turunan template yang mengimplementasikan antarmuka ITemplate.
+repeater_itemtype_unknown = Tipe item repeater {0} tidak dikenal.
+repeateritemcollection_item_invalid = TRepeaterItemCollection hanya bisa menerima obyek yang adalah turunan dari TControl atau kelas turunannya.
+
+datalist_template_required = TDataList.{0} requires a template instance implementing ITemplate interface.
+datalistitemcollection_datalistitem_required = TDataListItemCollection hanya bisa menerima obyek TDataListItem.
+
+datagrid_template_required = TDataGrid.{0} memerlukan turunan template yang mengimplementasikan antarmuka ITemplate.
+templatecolumn_template_required = TTemplateColumn.{0} memerlukan turunan template yang mengimplementasikan antarmuka ITemplate.
+datagrid_currentpageindex_invalid = TDataGrid.CurrentPageIndex harus tidak kurang dari0.
+datagrid_pagesize_invalid = TDataGrid.PageSize harus lebih besar dari 0.
+datagrid_virtualitemcount_invalid = TDataGrid.VirtualItemCount harus tidak kurang dari0.
+datagriditemcollection_datagriditem_required = TDataGridItemCollection hanya bisas menerima obyek TDataGridItem.
+datagridcolumncollection_datagridcolumn_required = TDataGridColumnCollection hanya bisa menerima obyek TDataGridColumn.
+datagridpagerstyle_pagebuttoncount_invalid = TDataGridPagerStyle.PageButtonCount harus lebih besar dari 0.
+
+datafieldaccessor_data_invalid = TDataFieldAccessor mencoba untuk mengevaluasi nilai field dari data yang tidak benar. Pastikan data adalah sebuah array, TMap, TList, atau obyek yang berisi field yang ditetapkan '{0}'.
+datafieldaccessor_datafield_invalid = TDataFieldAccessor mencoba untuk mengevaluasi nilai data dari field '{0}' yang tidak dikenal.
+
+tablerowcollection_tablerow_required = TTableRowCollection hanya bisa menerima obyek TTableRow.
+
+tablecellcollection_tablerow_required = TTableCellCollection hanya bisa menerima obyek TTableCell.
+
+multiview_view_required = TMultiView hanya bisa menerima TView sebagai anak.
+multiview_activeviewindex_invalid = TMultiView.ActiveViewIndex mempunyai indeks'{0}' yang tidak benar.
+multiview_view_inexistent = TMultiView tidak bisa menemukan tampilan yang ditetapkan.
+multiview_viewid_invalid = TMultiView tidak bisa menemukan tampilan '{0}' untu beralih ke sana.
+
+viewcollection_view_required = TViewCollection hanya bisa menerima TView sebagai elemennya.
+
+view_visible_readonly = TView.Visible hanya baca. Gunakan TView.Active untuk menghidup-matikan visibilitasnya.
+
+wizard_step_invalid = Langkah yang diaktifkan tidak bisa ditemukan dalam koleksi langkah bimbingan.
+wizard_command_invalid = Perintah navigasi bimbingan '{0}' tidak benar.
+
+table_tablesection_outoforder = Seksi tabel TTable harus dalam urutan: Header, Body dan Footer.
+
+completewizardstep_steptype_readonly = TCompleteWizardStep.StepType hanya-baca.
+
+wizardstepcollection_wizardstep_required = TWizardStepCollection hanya bisa menerima obyek dari TWizardStep atau kelas anaknya.
+
+texthighlighter_stylesheet_invalid = Tidak bisa menemukan file stylesheet untuk TTextHighlighter.
+
+hotspotcollection_hotspot_required = THotSpotCollection hanya bisa meneruma turunan dari THotSpot atau kelas anaknya.
+
+htmlarea_textmode_readonly = THtmlArea.TextMode hanya-baca.
+htmlarea_tarfile_invalid = THtmlArea tidak bisa mencari file tar TinyMCE.
+
+parametermodule_parameterfile_unchangeable = TParameterModule.ParameterFile tidak bisa diubah karena modul sudah diinisialisasi.
+parametermodule_parameterfile_invalid = TParameterModule.ParameterFile '{0}' tidak benar. Pastikan ia ada dalam format namespace dan ekstensi file adalah '.xml'.
+parametermodule_parameterid_required = Elemen parameter harus mempunyai atribut 'id'.
+
+datagridcolumn_id_invalid = {0}.ID '{1}' tidak benar. Hanya alfanumerik dan karakter bergaris bawah yang dibolehkan. Karakter pertama harus alfabetik atau karakter garis bawah.
+datagridcolumn_expression_invalid = {0} mengevaluasi ekspresi yang tidak benar '{1}' : {2}
+
+outputcache_cachemoduleid_invalid = TOutputCache.CacheModuleID disetel dengan ID modul cacheID {0} yang tidak benar. Baik modul yang tidak ada ataupun tidak mengimplementasikan antarmuka ICache.
+outputcache_duration_invalid = {0}.Duration harus integer tidak kurang dari 0.
+
+stack_data_not_iterable = TStack hanya bisa mengambil data dari array atau obyek yang dapat dijelajahi.
+stack_empty = TStack kosong.
+
+queue_data_not_iterable = TQueue hanya bisa mengambil data dari array atau obyek yang dapat dijelajahi.
+queue_empty = TQueue kosong.
+
+pager_pagebuttoncount_invalid = TPager.PageButtonCount harus integer tidak kurang dari 1.
+pager_currentpageindex_invalid = TPager.CurrentPageIndex diluar jangkauan.
+pager_pagecount_invalid = TPager.PageCount tidak bisa lebih kecil dari 0.
+pager_controltopaginate_invalid = TPager.ControlToPaginate {0} harus path ID yang merngarah ke kontrol turunan-TDataBoundControl.
+
+databoundcontrol_pagesize_invalid = {0}.PageSize harus integer tidak lebih kecil dari 1.
+databoundcontrol_virtualitemcount_invalid = {0}.VirtualItemCount harus integer tidak lebih kecil dari 0.
+databoundcontrol_currentpageindex_invalid = {0}.CurrentPageIndex diluar jangkauan.
+databoundcontrol_datasource_invalid = {0}.DataSource tidak benar.
+databoundcontrol_datasourceid_inexistent = databoundcontrol_datasourceid_inexistent.
+databoundcontrol_datasourceid_invalid = databoundcontrol_datasourceid_invalid
+databoundcontrol_datamember_invalid = databoundcontrol_datamember_invalid
+
+clientscript_invalid_file_position = Posisi file '{1}' tidak benar untuk kontrol TClientScript '{0}', harus 'Head', 'Here' atau 'Begin'.
+clientscript_invalid_package_path = PackagePath '{0}' tidak benar untuk kontrol TClientScript '{1}'.
+
+tdatepicker_autopostback_unsupported = '{0}' tidak mendukung AutoPostBack.
+globalization_cache_path_failed = Tidak bisa membuat path cache pesan terjemahan '{0}'. Pastikan direktori leluhur ada dan bisa ditulis oleh proses Web.
+globalization_source_path_failed = Tidak bisa membuat path pesan terjemahan '{0}'. Pastikan direktori leluhur ada dan bisa ditulis oleh proses Web.
+callback_not_support_no_priority_state_update = Permintaan callback tidak mendukung pemutakhiran kondisi halam yang tidak diprioritaskan.
+callback_invalid_callback_options = '{1}' bukan kontrol TCallbackOptions yang benar untuk kontrol Callback '{0}'.
+callback_invalid_clientside_options = Properti ClientSide Callback harus berupa string yakni ID dari kontrol TCallbackOptions atau turunan dari TCallbackClientSideOptions.=======
+callback_not_support_no_priority_state_update = Permintaan callback tidak mendukung pemutakhiran kondisi halaman yang tidak diprioritaskan.
+callback_invalid_handler = Pengendali callback tidak benar, kontrol {0} harus mengimplementasikan ICallbackEventHandler.
+callback_invalid_target = Target callback tidak benar, tidak ada kontrol dengan ID {0}.
+
+callback_interval_be_positive = Interval TCallbackTimer "{0}" harus tepat lebih besar dari nol detik.
+callback_decay_be_not_negative = Rata-rata kekurangan TCallbackTimer "{0}" tidak boleh negatif.
+
+callback_no_autopostback = Kontrol "{0}" tidak bisa menghidupkan AutoPostBack.
+
+xmltransform_xslextension_required = TXmlTransform memerlukan ekstensi XSL PHP.
+xmltransform_transformpath_invalid = TXmlTransform.TransformPath '{0}' tidak benar.
+xmltransform_documentpath_invalid = TXmlTransform.DocumentPath '{0}' tidak benar.
+xmltransform_transform_required = Baik properti TransformContent ataupun TransformPath harus disetel untuk TXmlTransform.
+
+ttriggeredcallback_invalid_controlid = Properti ControlID '{0}' tidak boleh kosong.
+tactivecustomvalidator_clientfunction_unsupported = {0} tidak mendukung fungsi validator sisi klien.
+
+dbconnection_open_failed = TDbConnection gagal untuk menyelesaikan koneksi DB: {0}
+dbconnection_connection_inactive = TDbConnection tidak aktif.
+dbconnection_unsupported_driver_charset = Database driver '{0}' doesn't support setting charset.
+
+dbcommand_prepare_failed = TDbCommand gagal untuk menyiapkan pernyataan SQL "{1}": {0}
+dbcommand_execute_failed = TDbCommand gagal untuk menjalankan pernyataan SQL "{1}": {0}
+dbcommand_query_failed = TDbCommand gagal untuk menjalankan query SQL "{1}": {0}
+dbcommand_column_empty = TDbCommand mengembalikan hasil kosong dan tidak bisa memperoleh skalar.
+dbdatareader_rewind_invalid = TDbDataReader adalah stream hanya-maju. Ia hanya bisa sekali menjelajah.
+dbtransaction_transaction_inactive = TDbTransaction tidak aktif.
+
+dbcommandbuilder_value_must_not_be_null = Properti {0} tidak boleh null seperti didefinisikan oleh kolom '{2}' dalam tabel '{1}'.
+
+dbcommon_invalid_table_name = Tabel database '{0}' tidak ditemukan. Pesan kesalahan: {1}.
+dbcommon_invalid_identifier_name = Nama pengenal database '{0}' tidak benar, lihat {1} untuk lebih jelasnya.
+dbtableinfo_invalid_column_name = Nama kolom '{0}' tidak benar untuk tabel database '{1}'.
+dbmetadata_invalid_table_view = Nama table/view '{0}', atau table/view '{0}' itu tidak berisi definisi kolom/field yang bisa diakses.
+dbmetadata_requires_php_version = Versi PHP {1} atau yang terbaru diperlukan untuk menggunakan database {0}.
+
+dbtablegateway_invalid_criteria = Obyek kriteria tidak benar, harus berupa string atau turunan dari TSqlCriteria.
+dbtablegateway_no_primary_key_found = Tabel '{0}' tidak berisi field kunci primer manapun.
+dbtablegateway_missing_pk_values = Nilai kunci primer tidak ada dalam bentuk IN(key1, key2, ...) untuk tabel '{0}'.
+dbtablegateway_pk_value_count_mismatch = Jumlah nilai kunci gabungan tidak sama dalam bentuk IN( (key1, key2, ..), (key3, key4, ..)) untuk tabel '{0}'.
+dbtablegateway_mismatch_args_exception = Metode finder TTableGateway '{0}' mengharapkan parameter {1} tapi sebaliknya hanya menemukan parameter {2}.
+dbtablegateway_mismatch_column_name = Dalam metode dynamic __call() '{0}', tidak ada kolom yang ditemukan, kolom yang benar untuk tabel '{2}' adalah '{1}'.
+dbtablegateway_invalid_table_info = Tabel harus string atau turunan dari TDbTableInfo.
+
+directorycachedependency_directory_invalid = TDirectoryCacheDependency.Directory {0} tidak merujuk ke direktori yang benar.
+cachedependencylist_cachedependency_required = Hanya obyek yang mengimplementasikan ICacheDependency yang dapat ditambahkan ke dalam TCacheDependencyList.
+
+soapservice_configfile_invalid = TSoapService.ConfigFile '{0}' tidak ada. Catatan, ia harus ditetapkan dalam format namespace dan mempunyai ekstensi file '.xml'.
+soapservice_request_invalid = Server SOAP '{0}' tidak ditemukan.
+soapservice_serverid_required = Elemen <soap> harus memiliki atribut 'id'.
+soapservice_serverid_duplicated = ID server SOAP '{0}' duplikasi.
+soapserver_id_invalid = ID Server SOAP '{0}'. Ia tidak boleh diakhiri dengan '.wsdl'.
+soapserver_version_invalid = Versi SOAP tidak benar '{0}'. Ia harus berupa '1.1' atau '1.2'.
+
+dbusermanager_userclass_required = TDbUserManager.UserClass diperlukan.
+dbusermanager_userclass_invalid = TDbUserManager.UserClass '{0}' bukan kelas pengguna yang benar. Kelas harus memperluas TDbUser.
+dbusermanager_connectionid_invalid = TDbUserManager.ConnectionID '{0}' tidak mengarah ke modul TDataSourceConfig yang benar.
+dbusermanager_connectionid_required = TDbUserManager.ConnectionID diperlukan.
+
+feedservice_id_required = TFeedService memerlukan atribut 'id' dalam elemen feed-nya.
+feedservice_feedtype_invalid = Kelas feed '{0}' harus mengimplementasikan antarmuka IFeedContentProvider.
+feedservice_class_required = TFeedService memerlukan atribut 'class' dalam elemen feed-nya.
+feedservice_feed_unknown = Feed '{0}' yang diminta tidak dikenal.
+
+tabviewcollection_tabview_required = TTabPanel hanya menerima TTabView sebagai anaknya.
+tabpanel_activeviewid_invalid = TTabPanel.ActiveViewID mempunyai ID '{0}' yang tidak benar.
+tabpanel_activeviewindex_invalid = TTabPanel.ActiveViewIndex mempunyai Indeks '{0}' yang tidak benar.
+tabpanel_view_inexistent = TTabPanel tidak bisa menemukan tampilan yang ditetapkan.
+
+cachesession_cachemoduleid_required = TCacheHttpSession.CacheModuleID diperlukan.
+cachesession_cachemodule_inexistent = TCacheHttpSession.CacheModuleID '{0}' mengarah ke modul yang tidak ada.
+cachesession_cachemodule_invalid = TCacheHttpSession.CacheModuleID '{0}' mengarah ke modul yang tidak mengimplementasikan antarmuka ICache.
+
+urlmapping_urlmappingpattern_required = TUrlMapping can hanya berisi TUrlMappingPattern atau kelas anaknya.
+urlmapping_global_required = TUrlMapping harus dikonfigurasi sebagai modul global.
+urlmapping_configfile_inexistent = TUrlMapping.ConfigFile '{0}' bukan sebuah file.
+urlmapping_configfile_invalid = TUrlMapping.ConfigFile '{0}' harus menunjuk ke file XML dalam format namespace.
+
+urlmappingpattern_serviceparameter_required = TUrlMappingPattern.ServiceParameter diperlukan untuk pola '{0}'.
+urlmapping_global_required = TUrlMapping harus dikonfigurasi sebagai modul global.
+urlmapping_configfile_inexistent = TUrlMapping.ConfigFile '{0}' bukan sebuah file.
+urlmapping_configfile_invalid = TUrlMapping.ConfigFile '{0}' harus mengarah ke file XML file dalam format namespace.
+
+urlmappingpattern_serviceparameter_required = TUrlMappingPattern.ServiceParameter diperlukan untuk pola '{0}'.
+
+keyboard_forcontrol_required = TKeyboard.ForControl tidak boleh kosong.
+keyboard_forcontrol_invalid = TKeyboard.ForControl '{0}' tidak benar.
+
+captcha_tokenimagetheme_invalid = TCaptcha.TokenImageTheme harus integer antara {0} dan {1}.
+captcha_tokenfontsize_invalid = TCaptcha.TokenFontSize harus integer antara {0} dan {1}.
+captcha_mintokenlength_invalid = TCaptcha.MinTokenLength harus integer antara {0} dan {1}.
+captcha_maxtokenlength_invalid = TCaptcha.MaxTokenLength harus integer antara {0} dan {1}.
+captcha_tokenalphabet_invalid = TCaptcha.TokenAlphabet harus berupa string yang terdiri dari setidaknya 2 karakter.
+captcha_privatekey_unknown = TCaptcha.PrivateKey tidak dikenal. Pastikan bahwa direktori assets anda bisa ditulisi oleh proses server Web.
+captcha_gd2_required = TCaptcha memerlukan ekstensi GD2 PHP.
+captcha_imagettftext_required = TCaptcha memerlukan ekstensi GD2 PHP dengan dukungan font TrueType.
+captcha_imagepng_required = TCaptcha memerlukan ekstensi GD2 PHP dengan dukungan format gambar PNG.
+
+slider_handle_class_invalid = TSlider.HandleClass '{0}' bukan kelas pengguna yang benar. Kelas harus memperluas TSliderHandle.
+
+cachepagestatepersister_cachemoduleid_invalid = TCachePageStatePersister.CacheModuleID '{0}' tidak mengarah ke modul cache yang benar.
+cachepagestatepersister_cache_required = TCachePageStatePersister memerlukan modul cache untuk diambil.
+cachepagestatepersister_timeout_invalid = TCachePageStatePersister.Timeout harus berupa integer tidak kurang dari nol.
+cachepagestatepersister_pagestate_corrupted = Kondisi halaman rusak.
+
+conditional_condition_invalid = TConditional.Condition '{0}' bukan ekspresi PHP yang benar: {1}
+
+db_cachetable_inexistent = TDbCache tidak bisa menemukan tabel DB '{0}' untuk menyimpan data yang di-cache.
+
+ar_data_invalid = {0}.copyFrom() hanya bisa menggunakan obyek atay array sebagai parameter.
+ar_save_invalid = Turunan {0} tidak bisa disimpan karena kondisi sudah dihapus ataupun tidak dikenal.
+ar_delete_invalid = Turunan {0} tidak bisa dihapus karena ada rekaman baru atau rekaman sudah dihapus.
+
+datasource_dbconnection_invalid = TDataSourceConfig.DbConnection '{0}' tidak benar. ia merujuk ke modul aplikasi yang benar.
+
+juidatepicker_settextmode_unsupported = TextMode of TJuiDatePicker cannot be changed. \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/messages/messages-zh.txt b/lib/prado/framework/Exceptions/messages/messages-zh.txt
new file mode 100644
index 0000000..7490ccd
--- /dev/null
+++ b/lib/prado/framework/Exceptions/messages/messages-zh.txt
@@ -0,0 +1,436 @@
+prado_application_singleton_required = Prado.Application只能被设置一次。
+prado_component_unknown = 未知组件类型“{0}”。这有可能是因为{0}类文件里有如下错误:{1}
+prado_using_invalid = “{0}”不是一个合法的命名空间。如果命名空间指向一个目录,请确认命名空间以“.*”结尾。
+prado_alias_redefined = 路径别名“{0}”不能被重定义。
+prado_alias_invalid = 路径别名“{0}”所指的文件目录{1}不存在。
+prado_aliasname_invalid = 路径别名“{0}”不允许包含“.”字符。
+
+component_property_undefined = 组件属性“{0}.{1}”未定义。
+component_property_readonly = 组件属性“{0}.{1}”是只读的。
+component_event_undefined = 组件事件“{0}.{1}”未定义。
+component_eventhandler_invalid = 组件事件“{0}.{1}”所指事件响应函数“{2}”非法。
+component_expression_invalid = 组件{0}执行了一个非法的表达式“{1}”:{2}
+component_statements_invalid = 组件{0}执行了一段非法的PHP代码“{1}”:{2}
+
+propertyvalue_enumvalue_invalid = 枚举类型“{1}”不存在枚举值“{0}”。
+
+list_index_invalid = 列表下标“{0}”越界。
+list_item_inexistent = 无法在列表里找到要找的项目。
+list_data_not_iterable = 所传参数必须是一个数组或是一个实现Traversable接口的对象。
+list_readonly = 列表“{0}”是只读的。
+
+map_addition_disallowed = Map无法添加新项目。
+map_item_unremovable = Map无法删除项目。
+map_data_not_iterable = Map数据必须是个数组或是实现Traversable接口的对象。
+map_readonly = Map类型“{0}”是只读的。
+
+application_includefile_invalid = 无法找到应用配置文件“{0}”。注意,配置文件应该以命名空间的形式指定;文件名必须以.xml结尾。
+application_basepath_invalid = 应用的基本路径“{0}”不存在或不是一个目录。
+application_runtimepath_invalid = 应用的runtime路径“{0}”不存在,或Web服务进程无法写入该目录。
+application_service_invalid = 服务“{0}”必须实现IService接口。
+application_service_unknown = 请求的服务“{0}”未定义。
+application_unavailable = 应用暂时不可用。
+application_service_unavailable = 服务“{0}”暂时不可用。
+application_moduleid_duplicated = 应用模块的ID “{0}”不唯一。
+application_runtimepath_failed = 无法创建runtime路径“{0}”。请确认父目录是否存在,是否可被Web服务进程写入。
+
+appconfig_aliaspath_invalid = 应用配置<alias id="{0}">使用了一个非法的文件目录“{1}”。
+appconfig_alias_invalid = 应用配置<alias>元素必须指定“id”和“path”属性。
+appconfig_alias_redefined = 应用配置<alias id="{0}">不允许重复定义。
+appconfig_using_invalid = 应用配置<using>元素必须指定“namespace”属性。
+appconfig_moduleid_required = 应用配置<module>元素必须指定“id”属性。
+appconfig_moduletype_required = 应用配置<module id="{0}">元素必须指定“class”属性。
+appconfig_serviceid_required = 应用配置<service>元素必须指定“id”属性。
+appconfig_servicetype_required = 应用配置<service id="{0}">元素必须指定“class”属性。
+appconfig_parameterid_required = 应用配置<parameter>元素必须指定“id”属性。
+appconfig_includefile_required = 应用配置<include>元素必须指定“file”属性。
+appconfig_paths_invalid = 应用配置<paths>不允许包含<{0}>元素。
+appconfig_modules_invalid = 应用配置<modules>不允许包含<{0}>元素。
+appconfig_services_invalid = 应用配置<services>不允许包含<{0}>元素。
+appconfig_parameters_invalid = 应用配置<parameters>不允许包含<{0}>元素。
+appconfig_tag_invalid = 应用配置不允许包含<{0}>元素。
+
+securitymanager_validationkey_invalid = TSecurityManager.ValidationKey不能为空。
+securitymanager_encryptionkey_invalid = TSecurityManager.EncryptionKey不能为空。
+securitymanager_mcryptextension_required = TSecurityManager的加密功能需要使用Mcrypt的PHP扩展模块。
+
+uri_format_invalid = “{0}”不是一个合法的URI。
+
+httprequest_separator_invalid = THttpRequest.UrlParamSeparator只能包含一个字符。
+httprequest_urlmanager_inexist = THttpRequest.UrlManager “{0}”所指的模块不存在。
+httprequest_urlmanager_invalid = THttpRequest.UrlManager “{0}”所指的模块必须继承TUrlManager。
+
+httpcookiecollection_httpcookie_required = THttpCookieCollection只能包含THttpCookie对象。
+
+httpresponse_bufferoutput_unchangeable = THttpResponse.BufferOutput无法被修改,因为THttpResponse已经初始化完毕。
+httpresponse_file_inexistent = THttpResponse无法发送文件“{0}”。该文件不存在。
+
+httpsession_sessionid_unchangeable = THttpSession.SessionID无法被修改,因为session已经启动了。
+httpsession_sessionname_unchangeable = THttpSession.SessionName无法被修改,因为session已经启动了。
+httpsession_sessionname_invalid = THttpSession.SessionName只能包含字母或数字字符。
+httpsession_savepath_unchangeable = THttpSession.SavePath无法被修改,因为session已经启动了。
+httpsession_savepath_invalid = THttpSession.SavePath所指目录“{0}”不存在。
+httpsession_storage_unchangeable = THttpSession.Storage无法被修改,因为session已经启动了。
+httpsession_cookiemode_unchangeable = THttpSession.CookieMode无法被修改,因为session已经启动了。
+httpsession_autostart_unchangeable = THttpSession.AutoStart无法被修改,因为session已经启动了。
+httpsession_gcprobability_unchangeable = THttpSession.GCProbability无法被修改,因为session已经启动了。
+httpsession_gcprobability_invalid = THttpSession.GCProbability必须是个0到100之间的整数。
+httpsession_transid_unchangeable = THttpSession.UseTransparentSessionID无法被修改,因为session已经启动了。
+httpsession_transid_cookieonly = THttpSession.UseTransparentSessionID cannot be set when THttpSession.CookieMode is set to Only.
+httpsession_maxlifetime_unchangeable = THttpSession.Timeout无法被修改,因为session已经启动了。
+
+assetmanager_basepath_invalid = TAssetManager.BasePath所指路径“{0}”非法。请确认它以命名空间方式指定,并且它所对应的文件目录可以被Web服务器进程写入。
+assetmanager_basepath_unchangeable = TAssetManager.BasePath无法被修改,因为该模块已经初始化完毕。
+assetmanager_baseurl_unchangeable = TAssetManager.BaseUrl无法被修改,因为该模块已经初始化完毕。
+assetmanager_filepath_invalid = TAssetManager试图发布一个不存在的文件“{0}”。
+assetmanager_tarchecksum_invalid = TAssetManager试图发布一个校验值不正确的tar文件。
+assetmanager_tarfile_invalid = TAssetManager试图发布一个不存在的tar文件“{0}”。
+assetmanager_source_directory_invalid = TAssetManager试图复制一个不存在的文件目录“{0}”。
+
+cache_primary_duplicated = 一个应用最多只能指定一个主缓存模块。模块“{0}”正在被注册为第二个主缓存模块。
+sqlitecache_extension_required = TSqliteCache需要SQLite PHP扩展模块。
+sqlitecache_dbfile_required = TSqliteCache.DbFile必须指定一个值。
+sqlitecache_connection_failed = TSqliteCache连接数据库失败:{0}
+sqlitecache_table_creation_failed = TSqliteCache无法创建缓存数据库:{0}
+sqlitecache_dbfile_unchangeable = TSqliteCache.DbFile无法被修改,因为该模块已经初始化完毕。
+sqlitecache_dbfile_invalid = TSqliteCache.DbFile所指文件不存在。请确认它以命名空间方式指定。
+
+memcache_extension_required = TMemCache需要memcache PHP扩展模块。
+memcache_connection_failed = TMemCache连接memcache服务器“{0}”失败:{1}
+memcache_host_unchangeable = TMemCache.Host无法被修改,因为该模块已经初始化完毕。
+memcache_port_unchangeable = TMemCache.Port无法被修改,因为该模块已经初始化完毕。
+
+apccache_extension_required = TAPCCache需要APC PHP扩展模块。
+apccache_add_unsupported = TAPCCache不支持add()函数。
+apccache_replace_unsupported = TAPCCache不支持replace()函数。
+apccache_extension_not_enabled = TAPCCache需要在php.ini里指定apc.enabled = 1。
+apccache_extension_not_enabled_cli = TAPCCache需要在php.ini里指定apc.enable_cli = 1。
+
+errorhandler_errortemplatepath_invalid = TErrorHandler.ErrorTemplatePath所指路径“{0}”不存在。请确认它以命名空间的方式指定,并且它指向一个包含错误信息模板的文件目录。
+
+pageservice_page_unknown = 无法找到页面“{0}”。
+pageservice_pageclass_unknown = 未知页面类“{0}”。
+pageservice_basepath_invalid = TPageService.BasePath所指路径“{0}”不存在。
+pageservice_page_required = 请提供页面名字。
+pageservice_defaultpage_unchangeable = TPageService.DefaultPage无法被修改,因为页面服务已经初始化完毕。
+pageservice_basepath_unchangeable = TPageService.BasePath无法被修改,因为页面服务已经初始化完毕。
+pageservice_pageclass_invalid = 页面类“{0}”必须继承TPage。
+pageservice_includefile_invalid = 无法找到页面服务配置“{0}”。请确认它以命名空间方式指定,并且文件名以“.xml”结尾。
+
+pageserviceconf_file_invalid = 无法打开页面配置文件“{0}”。
+pageserviceconf_aliaspath_invalid = <alias id="{0}"> uses an invalid file path "{1}" in page directory configuration file '{2}'.
+pageserviceconf_alias_invalid = <alias> element must have an "id" attribute and a "path" attribute in page directory configuration file '{0}'.
+pageserviceconf_using_invalid = <using> element must have a "namespace" attribute in page directory configuration file '{0}'.
+pageserviceconf_module_invalid = <module> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_moduletype_required = <module id="{0}"> must have a "class" attribute in page directory configuration file '{1}'.
+pageserviceconf_parameter_invalid = <parameter> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_page_invalid = <page> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_includefile_required = Page configuration <include> element must have a "file" attribute.
+
+template_closingtag_unexpected = Unexpected closing tag '{0}' is found.
+template_closingtag_expected = Closing tag '{0}' is expected.
+template_directive_nonunique = Directive '<%@ ... %>' must appear at the beginning of the template and can appear at most once.
+template_comments_forbidden = Template comments are not allowed within property tags.
+template_matching_unexpected = Unexpected matching.
+template_property_unknown = {0} has no property called '{1}'.
+template_event_unknown = {0} has no event called '{1}'.
+template_property_readonly = {0} has a read-only property '{1}'.
+template_event_forbidden = {0} is a non-control component. No handler can be attached to its event '{1}' in a template.
+template_databind_forbidden = {0} is a non-control component. Expressions cannot be bound to its property '{1}'.
+template_component_required = '{0}' is not a component. Only components can appear in a template.
+template_format_invalid = Invalid template syntax: {0}
+template_property_duplicated = Property {0} is configured twice or more.
+template_eventhandler_invalid = {0}.{1} can only accept a static string.
+template_controlid_invalid = {0}.ID can only accept a static text string.
+template_controlskinid_invalid = {0}.SkinID can only accept a static text string.
+template_content_unexpected = Unexpected content is encountered when instantiating template: {0}.
+template_include_invalid = Invalid template inclusion. Make sure {0} is a valid namespace pointing to an existing template file whose extension is .tpl.
+template_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}.
+
+xmldocument_file_read_failed = TXmlDocument is unable to read file '{0}'.
+xmldocument_file_write_failed = TXmlDocument is unable to write file '{0}'.
+
+xmlelementlist_xmlelement_required = TXmlElementList can only accept TXmlElement objects.
+
+authorizationrule_action_invalid = TAuthorizationRule.Action can only take 'allow' or 'deny' as the value.
+authorizationrule_verb_invalid = TAuthorizationRule.Verb can only take 'get' or 'post' as the value.
+
+authorizationrulecollection_authorizationrule_required = TAuthorizationRuleCollection can only accept TAuthorizationRule objects.
+
+usermanager_userfile_invalid = TUserManager.UserFile '{0}' is not a valid file.
+usermanager_userfile_unchangeable = TUserManager.UserFile cannot be modified. The user module has been initialized already.
+
+authmanager_usermanager_required = TAuthManager.UserManager must be assigned a value.
+authmanager_usermanager_inexistent = TAuthManager.UserManager '{0}' does not refer to an ID of application module.
+authmanager_usermanager_invalid = TAuthManager.UserManager '{0}' does not refer to a valid TUserManager application module.
+authmanager_usermanager_unchangeable = TAuthManager.UserManager cannot be modified after the module is initialized.
+authmanager_session_required = TAuthManager requires a session application module.
+
+thememanager_service_unavailable = TThemeManager requires TPageService to be available. This error often occurs when you configure TThemeManager outside of the page service configuration.
+thememanager_basepath_invalid = TThemeManager.BasePath '{0}' is not a valid path alias. Make sure you have defined this alias in configuration and it points to a valid directory.
+thememanager_basepath_invalid2 = TThemeManager.BasePath '{0}' is not a valid directory.
+thememanager_basepath_unchangeable = TThemeManager.BasePath cannot be modified after the module is initialized.
+
+theme_baseurl_required = TThemeManager.BasePath is required. By default, a directory named 'themes' under the directory containing the application entry script is assumed.
+theme_path_inexistent = Theme path '{0}' does not exist.
+theme_control_nested = Skin for control type '{0}' in theme '{1}' cannot be within another skin.
+theme_skinid_duplicated = SkinID '{0}.{1}' is duplicated in theme '{2}'.
+theme_databind_forbidden = Databind cannot be used in theme '{0}' for control skin '{1}.{2}' about property '{3}'.
+theme_property_readonly = Skin is being applied to a read-only control property '{0}.{1}'.
+theme_property_undefined = Skin is being applied to an inexistent control property '{0}.{1}'.
+theme_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}.
+
+control_object_reregistered = Duplicated object ID '{0}' found.
+control_id_invalid = {0}.ID '{1}' is invalid. Only alphanumeric and underline characters are allowed. The first character must be an alphabetic or underline character.
+control_skinid_unchangeable = {0}.SkinID cannot be modified after a skin has been applied to the control or the child controls have been created.
+control_enabletheming_unchangeable = {0}.EnableTheming cannot be modified after the child controls have been created.
+control_stylesheet_applied = StyleSheet skin has already been applied to {0}.
+control_id_nonunique = {0}.ID '{1}' is not unique among all controls under the same naming container.
+
+templatecontrol_mastercontrol_invalid = Master control must be of type TTemplateControl or a child class.
+templatecontrol_mastercontrol_required = Control '{0}' requires a master control since the control uses TContent.
+templatecontrol_contentid_duplicated = TContent ID '{0}' is duplicated.
+templatecontrol_placeholderid_duplicated= TContentPlaceHolder ID '{0}' is duplicated.
+templatecontrol_directive_invalid = {0}.{1} can only accept a static text string through a template directive.
+templatecontrol_placeholder_inexistent = TContent '{0}' does not have a matching TContentPlaceHolder.
+
+page_form_duplicated = A page can contain at most one TForm. Use regular HTML form tags for the rest forms.
+page_isvalid_unknown = TPage.IsValid has not been evaluated yet.
+page_postbackcontrol_invalid = Unable to determine postback control '{0}'.
+page_control_outofform = {0} '{1}' must be enclosed within TForm.
+page_head_duplicated = A page can contain at most one THead.
+page_head_required = A THead control is needed in page template in order to render CSS and js in the HTML head section.
+page_statepersister_invalid = Page state persister must implement IPageStatePersister interface.
+
+csmanager_pradoscript_invalid = Unknown Prado script library name '{0}'.
+csmanager_invalid_packages = Unkownn packages '{1}' for javascript packages defined in '{0}'. Valid packages are '{2}'.
+
+contentplaceholder_id_required = TContentPlaceHolder must have an ID.
+
+content_id_required = TContent must have an ID.
+
+controlcollection_control_required = TControlList can only accept strings or TControl objects.
+
+webcontrol_accesskey_invalid = {0}.AccessKey '{1}' is invalid. It must be a single character only.
+webcontrol_style_invalid = {0}.Style must take string value only.
+
+listcontrol_selection_invalid = {0} has an invalid selection that is set before performing databinding.
+listcontrol_selectedindex_invalid = {0}.SelectedIndex has an invalid value {1}.
+listcontrol_selectedvalue_invalid = {0}.SelectedValue has an invalid value '{1}'.
+listcontrol_expression_invalid = {0} is evaluating an invalid expression '{1}' : {2}
+listcontrol_multiselect_unsupported = {0} does not support multiselection.
+
+label_associatedcontrol_invalid = TLabel.AssociatedControl '{0}' cannot be found.
+
+hiddenfield_focus_unsupported = THiddenField does not support setting input focus.
+hiddenfield_theming_unsupported = THiddenField does not support theming.
+hiddenfield_skinid_unsupported = THiddenField does not support control skin.
+
+panel_defaultbutton_invalid = TPanel.DefaultButton '{0}' does not refer to an existing button control.
+
+tablestyle_cellpadding_invalid = TTableStyle.CellPadding must take an integer equal to or greater than -1.
+tablestyle_cellspacing_invalid = TTableStyle.CellSpacing must take an integer equal to or greater than -1.
+
+pagestatepersister_pagestate_corrupted = Page state is corrupted.
+
+sessionpagestatepersister_pagestate_corrupted = Page state is corrupted.
+sessionpagestatepersister_historysize_invalid = TSessionPageStatePersister.History must be an integer greater than 0.
+
+listitemcollection_item_invalid = TListItemCollection can only take strings or TListItem objects.
+
+dropdownlist_selectedindices_unsupported= TDropDownList.SelectedIndices is read-only.
+
+bulletedlist_autopostback_unsupported = TBulletedList.AutoPostBack is read-only.
+bulletedlist_selectedindex_unsupported = TBulletedList.SelectedIndex is read-only.
+bulletedlist_selectedindices_unsupported= TBulletedList.SelectedIndices is read-only.
+bulletedlist_selectedvalue_unsupported = TBulletedList.SelectedValue is read-only.
+
+radiobuttonlist_selectedindices_unsupported = TRadioButtonList.SelectedIndices is read-only.
+
+logrouter_configfile_invalid = TLogRouter.ConfigFile '{0}' does not exist.
+logrouter_routeclass_required = Class attribute is required in <route> configuration.
+logrouter_routetype_required = Log route must be an instance of TLogRoute or its derived class.
+
+filelogroute_logpath_invalid = TFileLogRoute.LogPath '{0}' must be a directory in namespace format and must be writable by the Web server process.
+filelogroute_maxfilesize_invalid = TFileLogRoute.MaxFileSize must be greater than 0.
+filelogroute_maxlogfiles_invalid = TFileLogRoute.MaxLogFiles must be greater than 0.
+
+emaillogroute_sentfrom_required = TEmailLogRoute.SentFrom cannot be empty.
+
+repeatinfo_repeatcolumns_invalid = TRepeatInfo.RepeatColumns must be no less than 0.
+
+basevalidator_controltovalidate_invalid = {0}.ControlToValidate is empty or contains an invalid control ID path.
+basevalidator_validatable_required = {0}.ControlToValidate must point to a control implementing IValidatable interface.
+basevalidator_forcontrol_unsupported = {0}.ForControl is not supported.
+
+comparevalidator_controltocompare_invalid = TCompareValidator.ControlToCompare contains an invalid control ID path.
+
+listcontrolvalidator_invalid_control = {0}.ControlToValidate contains an invalid TListControl ID path, "{1}" is a {2}.
+
+repeater_template_required = TRepeater.{0} requires a template instance implementing ITemplate interface.
+repeater_itemtype_unknown = Unknow repeater item type {0}.
+repeateritemcollection_item_invalid = TRepeaterItemCollection can only accept objects that are instance of TControl or its descendant class.
+
+datalist_template_required = TDataList.{0} requires a template instance implementing ITemplate interface.
+datalistitemcollection_datalistitem_required = TDataListItemCollection can only accept TDataListItem objects.
+
+datagrid_template_required = TDataGrid.{0} requires a template instance implementing ITemplate interface.
+templatecolumn_template_required = TTemplateColumn.{0} requires a template instance implementing ITemplate interface.
+datagrid_currentpageindex_invalid = TDataGrid.CurrentPageIndex must be no less than 0.
+datagrid_pagesize_invalid = TDataGrid.PageSize must be greater than 0.
+datagrid_virtualitemcount_invalid = TDataGrid.VirtualItemCount must be no less than 0.
+datagriditemcollection_datagriditem_required = TDataGridItemCollection can only accept TDataGridItem objects.
+datagridcolumncollection_datagridcolumn_required = TDataGridColumnCollection can only accept TDataGridColumn objects.
+datagridpagerstyle_pagebuttoncount_invalid = TDataGridPagerStyle.PageButtonCount must be greater than 0.
+
+datafieldaccessor_data_invalid = TDataFieldAccessor is trying to evaluate a field value of an invalid data. Make sure the data is an array, TMap, TList, or object that contains the specified field '{0}'.
+datafieldaccessor_datafield_invalid = TDataFieldAccessor is trying to evaluate data value of an unknown field '{0}'.
+
+tablerowcollection_tablerow_required = TTableRowCollection can only accept TTableRow objects.
+
+tablecellcollection_tablerow_required = TTableCellCollection can only accept TTableCell objects.
+
+multiview_view_required = TMultiView can only accept TView as child.
+multiview_activeviewindex_invalid = TMultiView.ActiveViewIndex has an invalid index '{0}'.
+multiview_view_inexistent = TMultiView cannot find the specified view.
+multiview_viewid_invalid = TMultiView cannot find the view '{0}' to switch to.
+
+viewcollection_view_required = TViewCollection can only accept TView as its element.
+
+view_visible_readonly = TView.Visible is read-only. Use TView.Active to toggle its visibility.
+
+wizard_step_invalid = The step to be activated cannot be found in wizard step collection.
+wizard_command_invalid = Invalid wizard navigation command '{0}'.
+
+table_tablesection_outoforder = TTable table sections must be in the order of: Header, Body and Footer.
+
+completewizardstep_steptype_readonly = TCompleteWizardStep.StepType is read-only.
+
+wizardstepcollection_wizardstep_required = TWizardStepCollection can only accept objects of TWizardStep or its derived classes.
+
+texthighlighter_stylesheet_invalid = Unable to find the stylesheet file for TTextHighlighter.
+
+hotspotcollection_hotspot_required = THotSpotCollection can only accept instance of THotSpot or its derived classes.
+
+htmlarea_textmode_readonly = THtmlArea.TextMode is read-only.
+htmlarea_tarfile_invalid = THtmlArea is unable to locate the TinyMCE tar file.
+
+parametermodule_parameterfile_unchangeable = TParameterModule.ParameterFile is not changeable because the module is already initialized.
+parametermodule_parameterfile_invalid = TParameterModule.ParameterFile '{0}' is invalid. Make sure it is in namespace format and the file extension is '.xml'.
+parametermodule_parameterid_required = Parameter element must have 'id' attribute.
+
+datagridcolumn_id_invalid = {0}.ID '{1}' is invalid. Only alphanumeric and underline characters are allowed. The first character must be an alphabetic or underline character.
+datagridcolumn_expression_invalid = {0} is evaluating an invalid expression '{1}' : {2}
+
+outputcache_cachemoduleid_invalid = TOutputCache.CacheModuleID is set with an invalid cache module ID {0}. Either the module does not exist or does not implement ICache interface.
+outputcache_duration_invalid = {0}.Duration must be an integer no less than 0.
+
+stack_data_not_iterable = TStack can only fetch data from an array or a traversable object.
+stack_empty = TStack is empty.
+
+queue_data_not_iterable = TQueue can only fetch data from an array or a traversable object.
+queue_empty = TQueue is empty.
+
+pager_pagebuttoncount_invalid = TPager.PageButtonCount must be an integer no less than 1.
+pager_currentpageindex_invalid = TPager.CurrentPageIndex is out of range.
+pager_pagecount_invalid = TPager.PageCount cannot be smaller than 0.
+pager_controltopaginate_invalid = TPager.ControlToPaginate {0} must be a valid ID path pointing to a TDataBoundControl-derived control.
+
+databoundcontrol_pagesize_invalid = {0}.PageSize must be an integer no smaller than 1.
+databoundcontrol_virtualitemcount_invalid = {0}.VirtualItemCount must be an integer no smaller than 0.
+databoundcontrol_currentpageindex_invalid = {0}.CurrentPageIndex is out of range.
+databoundcontrol_datasource_invalid = {0}.DataSource is not valid.
+databoundcontrol_datasourceid_inexistent = databoundcontrol_datasourceid_inexistent.
+databoundcontrol_datasourceid_invalid = databoundcontrol_datasourceid_invalid
+databoundcontrol_datamember_invalid = databoundcontrol_datamember_invalid
+
+clientscript_invalid_file_position = Invalid file position '{1}' for TClientScript control '{0}', must be 'Head', 'Here' or 'Begin'.
+clientscript_invalid_package_path = Invalid PackagePath '{0}' for TClientScript control '{1}'.
+
+tdatepicker_autopostback_unsupported = '{0}' does not support AutoPostBack.
+globalization_cache_path_failed = Unable to create translation message cache path '{0}'. Make sure the parent directory exists and is writable by the Web process.
+globalization_source_path_failed = Unable to create translation message path '{0}'. Make sure the parent directory exists and is writable by the Web process.
+callback_not_support_no_priority_state_update = Callback request does not support unprioritized pagestate update.
+callback_invalid_callback_options = '{1}' is not a valid TCallbackOptions control for Callback control '{0}'.
+callback_invalid_clientside_options = Callback ClientSide property must be either a string that is the ID of a TCallbackOptions control or an instance of TCallbackClientSideOptions.=======
+callback_not_support_no_priority_state_update = Callback request does not support unprioritized pagestate update.
+callback_invalid_handler = Invalid callback handler, control {0} must implement ICallbackEventHandler.
+callback_invalid_target = Invalid callback target, no such control with ID {0}.
+
+callback_interval_be_positive = Interval for TCallbackTimer "{0}" must be strictly greater than zero seconds.
+callback_decay_be_not_negative = Decay rate for TCallbackTimer "{0}" must be not negative.
+
+callback_no_autopostback = Control "{0}" can not enable AutoPostBack.
+
+xmltransform_xslextension_required = TXmlTransform requires the PHP's XSL extension.
+xmltransform_transformpath_invalid = TXmlTransform.TransformPath '{0}' is invalid.
+xmltransform_documentpath_invalid = TXmlTransform.DocumentPath '{0}' is invalid.
+xmltransform_transform_required = Either TransformContent or TransformPath property must be set for TXmlTransform.
+
+ttriggeredcallback_invalid_controlid = ControlID property for '{0}' must not be empty.
+tactivecustomvalidator_clientfunction_unsupported = {0} does not support client side validator function.
+
+dbconnection_open_failed = TDbConnection failed to establish DB connection: {0}
+dbconnection_connection_inactive = TDbConnection is inactive.
+dbconnection_unsupported_driver_charset = Database driver '{0}' doesn't support setting charset.
+
+dbcommand_prepare_failed = TDbCommand failed to prepare the SQL statement "{1}": {0}
+dbcommand_execute_failed = TDbCommand failed to execute the SQL statement "{1}": {0}
+dbcommand_query_failed = TDbCommand failed to execute the query SQL "{1}": {0}
+dbcommand_column_empty = TDbCommand returned an empty result and could not obtain the scalar.
+dbdatareader_rewind_invalid = TDbDataReader is a forward-only stream. It can only be traversed once.
+dbtransaction_transaction_inactive = TDbTransaction is inactive.
+
+dbcommandbuilder_value_must_not_be_null = Property {0} must not be null as defined by column '{2}' in table '{1}'.
+
+dbcommon_invalid_table_name = Database table '{0}' not found. Error message: {1}.
+dbcommon_invalid_identifier_name = Invalid database identifier name '{0}', see {1} for details.
+dbtableinfo_invalid_column_name = Invalid column name '{0}' for database table '{1}'.
+dbmetadata_invalid_table_view = Invalid table/view name '{0}', or that table/view '{0}' contains no accessible column/field definitions.
+dbmetadata_requires_php_version = PHP version {1} or later is required for using {0} database.
+
+dbtablegateway_invalid_criteria = Invalid criteria object, must be a string or instance of TSqlCriteria.
+dbtablegateway_no_primary_key_found = Table '{0}' does not contain any primary key fields.
+dbtablegateway_missing_pk_values = Missing primary key values in forming IN(key1, key2, ...) for table '{0}'.
+dbtablegateway_pk_value_count_mismatch = Composite key value count mismatch in forming IN( (key1, key2, ..), (key3, key4, ..)) for table '{0}'.
+dbtablegateway_mismatch_args_exception = TTableGateway finder method '{0}' expects {1} parameters but found only {2} parameters instead.
+dbtablegateway_mismatch_column_name = In dynamic __call() method '{0}', no matching columns were found, valid columns for table '{2}' are '{1}'.
+dbtablegateway_invalid_table_info = Table must be a string or an instanceof TDbTableInfo.
+
+directorycachedependency_directory_invalid = TDirectoryCacheDependency.Directory {0} does not refer to a valid directory.
+cachedependencylist_cachedependency_required = Only objects implementing ICacheDependency can be added into TCacheDependencyList.
+
+soapservice_configfile_invalid = TSoapService.ConfigFile '{0}' does not exist. Note, it has to be specified in a namespace format and the file extension must be '.xml'.
+soapservice_request_invalid = SOAP server '{0}' not found.
+soapservice_serverid_required = <soap> element must have 'id' attribute.
+soapservice_serverid_duplicated = SOAP server ID '{0}' is duplicated.
+soapserver_id_invalid = Invalid SOAP server ID '{0}'. It should not end with '.wsdl'.
+soapserver_version_invalid = Invalid SOAP version '{0}'. It must be either '1.1' or '1.2'.
+
+dbusermanager_userclass_required = TDbUserManager.UserClass is required.
+dbusermanager_userclass_invalid = TDbUserManager.UserClass '{0}' is not a valid user class. The class must extend TDbUser.
+dbusermanager_connectionid_invalid = TDbUserManager.ConnectionID '{0}' does not point to a valid TDataSourceConfig module.
+dbusermanager_connectionid_required = TDbUserManager.ConnectionID is required.
+
+feedservice_id_required = TFeedService requires 'id' attribute in its feed elements.
+feedservice_feedtype_invalid = The class feed '{0}' must implement IFeedContentProvider interface.
+feedservice_class_required = TFeedService requires 'class' attribute in its feed elements.
+feedservice_feed_unknown = Unknown feed '{0}' requested.
+
+tabviewcollection_tabview_required = TTabPanel can only accept TTabView as child.
+tabpanel_activeviewid_invalid = TTabPanel.ActiveViewID has an invalid ID '{0}'.
+tabpanel_activeviewindex_invalid = TTabPanel.ActiveViewIndex has an invalid Index '{0}'.
+tabpanel_view_inexistent = TTabPanel cannot find the specified view.
+
+cachesession_cachemoduleid_required = TCacheHttpSession.CacheModuleID is required.
+cachesession_cachemodule_inexistent = TCacheHttpSession.CacheModuleID '{0}' points to a non-existent module.
+cachesession_cachemodule_invalid = TCacheHttpSession.CacheModuleID '{0}' points to a module that does not implement ICache interface.
+
+urlmapping_urlmappingpattern_required = TUrlMapping can only contain TUrlMappingPattern or its child classes.
+urlmapping_global_required = TUrlMapping must be configured as a global module.
+urlmapping_configfile_inexistent = TUrlMapping.ConfigFile '{0}' is not a file.
+urlmapping_configfile_invalid = TUrlMapping.ConfigFile '{0}' must point to an XML file in namespace format.
+
+urlmappingpattern_serviceparameter_required = TUrlMappingPattern.ServiceParameter is required for pattern '{0}'.
+
+juidatepicker_settextmode_unsupported = TextMode of TJuiDatePicker cannot be changed. \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/messages/messages.txt b/lib/prado/framework/Exceptions/messages/messages.txt
new file mode 100644
index 0000000..46dde55
--- /dev/null
+++ b/lib/prado/framework/Exceptions/messages/messages.txt
@@ -0,0 +1,514 @@
+prado_application_singleton_required = Prado.Application must only be set once.
+prado_component_unknown = Unknown component type '{0}'. This may be caused by the following parsing error in the {0} class file: {1}
+prado_using_invalid = '{0}' is not a valid namespace to be used. Make sure '.*' is appended if you want to use a namespace referring to a directory.
+prado_alias_redefined = Alias '{0}' cannot be redefined.
+prado_alias_invalid = Alias '{0}' refers to an invalid path '{1}'. Only existing directories can be aliased.
+prado_aliasname_invalid = Alias '{0}' contains invalid character '.'.
+
+component_property_undefined = Component property '{0}.{1}' is not defined.
+component_property_readonly = Component property '{0}.{1}' is read-only.
+component_event_undefined = Component event '{0}.{1}' is not defined.
+component_method_undefined = Component method '{0}.{1}' is not defined.
+component_eventhandler_invalid = Component event '{0}.{1}' is attached with an invalid event handler '{2}'.
+component_expression_invalid = Component '{0}' is evaluating an invalid expression '{1}' : {2}.
+component_statements_invalid = Component '{0}' is evaluating invalid PHP statements '{1}' : {2}.
+component_class_behavior_defined = Component '{0}' already has a class behavior of '{1}'.
+component_not_a_behavior = Component '{0}' is being added as behavior is not a TBaseBehavior.
+component_no_tcomponent_class_behaviors = TComponent cannot have class behaviors attached due to recursion.
+component_no_class_provided_nor_late_binding = Adding or Removing Class Behaviors must have PHP feature Late Static Binding or a class provided as a parameter
+
+propertyvalue_enumvalue_invalid = Value '{0}' is a not valid enumeration value ({1}).
+
+list_index_invalid = Index '{0}' is out of range.
+list_item_inexistent = The item cannot be found in the list.
+list_data_not_iterable = Data must be either an array or an object implementing Traversable interface.
+list_readonly = {0} is read-only.
+
+map_addition_disallowed = The new item cannot be added to the map.
+map_item_unremovable = The item cannot be removed from the map.
+map_data_not_iterable = Data must be either an array or an object implementing Traversable interface.
+map_readonly = {0} is read-only.
+
+application_includefile_invalid = Unable to find application configuration {0}. Make sure it is in namespace format and the file ends with ".xml" or ".php".
+application_basepath_invalid = Application base path '{0}' does not exist or is not a directory.
+application_runtimepath_invalid = Application runtime path '{0}' does not exist or is not writable by Web server process.
+application_service_invalid = Service '{0}' must implement IService interface.
+application_service_unknown = Requested service '{0}' is not defined.
+application_unavailable = Application is unavailable at this time.
+application_service_unavailable = Service '{0}' is unavailable at this time.
+application_moduleid_duplicated = Application module ID '{0}' is not unique.
+application_runtimepath_failed = Unable to create runtime path '{0}'. Make sure the parent directory exists and is writable by the Web process.
+
+appconfig_aliaspath_invalid = Application configuration <alias id="{0}"> uses an invalid file path "{1}".
+appconfig_alias_invalid = Application configuration <alias> element must have an "id" attribute and a "path" attribute.
+appconfig_alias_redefined = Application configuration <alias id="{0}"> cannot be redefined.
+appconfig_using_invalid = Application configuration <using> element must have a "namespace" attribute.
+appconfig_moduleid_required = Application configuration <module> element must have an "id" attribute.
+appconfig_moduletype_required = Application configuration <module id="{0}"> must have a "class" attribute.
+appconfig_serviceid_required = Application configuration <service> element must have an "id" attribute.
+appconfig_servicetype_required = Application configuration <service id="{0}"> must have a "class" attribute.
+appconfig_parameterid_required = Application configuration <parameter> element must have an "id" attribute.
+appconfig_includefile_required = Application configuration <include> element must have a "file" attribute.
+appconfig_paths_invalid = Application configuration <paths> cannot contain element <{0}>.
+appconfig_modules_invalid = Application configuration <modules> cannot contain element <{0}>.
+appconfig_services_invalid = Application configuration <services> cannot contain element <{0}>.
+appconfig_parameters_invalid = Application configuration <parameters> cannot contain element <{0}>.
+appconfig_tag_invalid = Application configuration cannot contain element <{0}>.
+
+securitymanager_validationkey_invalid = TSecurityManager.ValidationKey must not be empty.
+securitymanager_encryptionkey_invalid = TSecurityManager.EncryptionKey must not be empty.
+securitymanager_mcryptextension_required = Mcrypt PHP extension is required in order to use TSecurityManager's encryption feature.
+securitymanager_mcryptextension_initfailed = TSecurityManager failed to initialize the mcrypt module.
+
+uri_format_invalid = '{0}' is not a valid URI.
+
+httprequest_separator_invalid = THttpRequest.UrlParamSeparator can only contain a single character.
+httprequest_urlmanager_inexist = THttpRequest.UrlManager '{0}' does not point to an existing module.
+httprequest_urlmanager_invalid = THttpRequest.UrlManager '{0}' must point to a module extending from TUrlManager.
+
+httpcookiecollection_httpcookie_required = THttpCookieCollection can only accept THttpCookie objects.
+
+httpresponse_bufferoutput_unchangeable = THttpResponse.BufferOutput cannot be modified after THttpResponse is initialized.
+httpresponse_file_inexistent = THttpResponse cannot send file '{0}'. The file does not exist.
+
+httpsession_sessionid_unchangeable = THttpSession.SessionID cannot be modified after the session is started.
+httpsession_sessionname_unchangeable = THttpSession.SessionName cannot be modified after the session is started.
+httpsession_sessionname_invalid = THttpSession.SessionName must contain alphanumeric characters only.
+httpsession_savepath_unchangeable = THttpSession.SavePath cannot be modified after the session is started.
+httpsession_savepath_invalid = THttpSession.SavePath '{0}' is invalid.
+httpsession_storage_unchangeable = THttpSession.Storage cannot be modified after the session is started.
+httpsession_cookiemode_unchangeable = THttpSession.CookieMode cannot be modified after the session is started.
+httpsession_autostart_unchangeable = THttpSession.AutoStart cannot be modified after the session module is initialized.
+httpsession_gcprobability_unchangeable = THttpSession.GCProbability cannot be modified after the session is started.
+httpsession_gcprobability_invalid = THttpSession.GCProbability must be an integer between 0 and 100.
+httpsession_transid_unchangeable = THttpSession.UseTransparentSessionID cannot be modified after the session is started.
+httpsession_transid_cookieonly = THttpSession.UseTransparentSessionID cannot be set when THttpSession.CookieMode is set to Only.
+httpsession_maxlifetime_unchangeable = THttpSession.Timeout cannot be modified after the session is started.
+
+assetmanager_basepath_invalid = TAssetManager.BasePath '{0}' is invalid. Make sure it is in namespace form and points to a directory writable by the Web server process.
+assetmanager_basepath_unchangeable = TAssetManager.BasePath cannot be modified after the module is initialized.
+assetmanager_baseurl_unchangeable = TAssetManager.BaseUrl cannot be modified after the module is initialized.
+assetmanager_filepath_invalid = TAssetManager is publishing an invalid file '{0}'.
+assetmanager_tarchecksum_invalid = TAssetManager is publishing a tar file with invalid checksum '{0}'.
+assetmanager_tarfile_invalid = TAssetManager is publishing an invalid tar file '{0}'.
+assetmanager_source_directory_invalid = TAssetManager is copying an invalid directory '{0}'.
+
+cache_primary_duplicated = At most one primary cache module is allowed. {0} is trying to register as another primary cache.
+sqlitecache_extension_required = TSqliteCache requires SQLite PHP extension.
+sqlitecache_dbfile_required = TSqliteCache.DbFile is required.
+sqlitecache_connection_failed = TSqliteCache database connection failed. {0}.
+sqlitecache_table_creation_failed = TSqliteCache failed to create cache database. {0}.
+sqlitecache_dbfile_unchangeable = TSqliteCache.DbFile cannot be modified after the module is initialized.
+sqlitecache_dbfile_invalid = TSqliteCache.DbFile is invalid. Make sure it is in a proper namespace format.
+
+memcache_extension_required = TMemCache requires memcache PHP extension.
+memcache_connection_failed = TMemCache failed to connect to memcache server {0}:{1}.
+memcache_host_unchangeable = TMemCache.Host cannot be modified after the module is initialized.
+memcache_port_unchangeable = TMemCache.Port cannot be modified after the module is initialized.
+
+apccache_extension_required = TAPCCache requires APC PHP extension.
+apccache_extension_not_enabled = TAPCCache need apc.enabled = 1 in php.ini in order to work.
+apccache_extension_not_enabled_cli = TAPCCache need apc.enable_cli = 1 in php.ini in order to work with PHP from the command line.
+
+eacceleratorcache_extension_required = TEACache requires eAccellerator PHP extension.
+
+errorhandler_errortemplatepath_invalid = TErrorHandler.ErrorTemplatePath '{0}' is invalid. Make sure it is in namespace form and points to a valid directory containing error template files.
+
+pageservice_page_unknown = Page '{0}' Not Found
+pageservice_pageclass_unknown = Page class '{0}' is unknown.
+pageservice_basepath_invalid = TPageService.BasePath '{0}' is not a valid directory.
+pageservice_page_required = Page Name Required
+pageservice_defaultpage_unchangeable = TPageService.DefaultPage cannot be modified after the service is initialized.
+pageservice_basepath_unchangeable = TPageService.BasePath cannot be modified after the service is initialized.
+pageservice_pageclass_invalid = Page class {0} is invalid. It should be TPage or extend from TPage.
+pageservice_includefile_invalid = Unable to find page service configuration {0}. Make sure it is in namespace format and the file ends with ".xml" or ".php".
+
+pageserviceconf_file_invalid = Unable to open page directory configuration file '{0}'.
+pageserviceconf_aliaspath_invalid = <alias id="{0}"> uses an invalid file path "{1}" in page directory configuration file '{2}'.
+pageserviceconf_alias_invalid = <alias> element must have an "id" attribute and a "path" attribute in page directory configuration file '{0}'.
+pageserviceconf_using_invalid = <using> element must have a "namespace" attribute in page directory configuration file '{0}'.
+pageserviceconf_module_invalid = <module> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_moduletype_required = <module id="{0}"> must have a "class" attribute in page directory configuration file '{1}'.
+pageserviceconf_parameter_invalid = <parameter> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_page_invalid = <page> element must have an "id" attribute in page directory configuration file '{0}'.
+pageserviceconf_includefile_required = Page configuration <include> element must have a "file" attribute.
+
+template_closingtag_unexpected = Unexpected closing tag '{0}' is found.
+template_closingtag_expected = Closing tag '{0}' is expected.
+template_directive_nonunique = Directive '<%@ ... %>' must appear at the beginning of the template and can appear at most once.
+template_comments_forbidden = Template comments are not allowed within property tags.
+template_matching_unexpected = Unexpected matching.
+template_property_unknown = {0} has no property called '{1}'.
+template_event_unknown = {0} has no event called '{1}'.
+template_property_readonly = {0} has a read-only property '{1}'.
+template_event_forbidden = {0} is a non-control component. No handler can be attached to its event '{1}' in a template.
+template_databind_forbidden = {0} is a non-control component. Expressions cannot be bound to its property '{1}'.
+template_component_required = '{0}' is not a component. Only components can appear in a template.
+template_format_invalid = Invalid template syntax: {0}
+template_property_duplicated = Property {0} is configured twice or more.
+template_eventhandler_invalid = {0}.{1} can only accept a static string.
+template_controlid_invalid = {0}.ID can only accept a static text string.
+template_controlskinid_invalid = {0}.SkinID can only accept a static text string.
+template_content_unexpected = Unexpected content is encountered when instantiating template: {0}.
+template_include_invalid = Invalid template inclusion. Make sure {0} is a valid namespace pointing to an existing template file whose extension is .tpl.
+template_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}.
+
+xmldocument_file_read_failed = TXmlDocument is unable to read file '{0}'.
+xmldocument_file_write_failed = TXmlDocument is unable to write file '{0}'.
+
+xmlelementlist_xmlelement_required = TXmlElementList can only accept TXmlElement objects.
+
+authorizationrule_action_invalid = TAuthorizationRule.Action can only take 'allow' or 'deny' as the value.
+authorizationrule_verb_invalid = TAuthorizationRule.Verb can only take 'get' or 'post' as the value.
+
+authorizationrulecollection_authorizationrule_required = TAuthorizationRuleCollection can only accept TAuthorizationRule objects.
+
+usermanager_userfile_invalid = TUserManager.UserFile '{0}' is not a valid file.
+usermanager_userfile_unchangeable = TUserManager.UserFile cannot be modified. The user module has been initialized already.
+
+authmanager_usermanager_required = TAuthManager.UserManager must be assigned a value.
+authmanager_usermanager_inexistent = TAuthManager.UserManager '{0}' does not refer to an ID of application module.
+authmanager_usermanager_invalid = TAuthManager.UserManager '{0}' does not refer to a valid TUserManager application module.
+authmanager_usermanager_unchangeable = TAuthManager.UserManager cannot be modified after the module is initialized.
+authmanager_session_required = TAuthManager requires a session application module.
+
+thememanager_service_unavailable = TThemeManager requires TPageService to be available. This error often occurs when you configure TThemeManager outside of the page service configuration.
+thememanager_basepath_invalid = TThemeManager.BasePath '{0}' is not a valid path alias. Make sure you have defined this alias in configuration and it points to a valid directory.
+thememanager_basepath_invalid2 = TThemeManager.BasePath '{0}' is not a valid directory.
+thememanager_basepath_unchangeable = TThemeManager.BasePath cannot be modified after the module is initialized.
+
+theme_baseurl_required = TThemeManager.BasePath is required. By default, a directory named 'themes' under the directory containing the application entry script is assumed.
+theme_path_inexistent = Theme path '{0}' does not exist.
+theme_control_nested = Skin for control type '{0}' in theme '{1}' cannot be within another skin.
+theme_skinid_duplicated = SkinID '{0}.{1}' is duplicated in theme '{2}'.
+theme_databind_forbidden = Databind cannot be used in theme '{0}' for control skin '{1}.{2}' about property '{3}'.
+theme_property_readonly = Skin is being applied to a read-only control property '{0}.{1}'.
+theme_property_undefined = Skin is being applied to an inexistent control property '{0}.{1}'.
+theme_tag_unexpected = Initialization for property {0} contains an unknown tag type {1}.
+
+control_object_reregistered = Duplicated object ID '{0}' found.
+control_id_invalid = {0}.ID '{1}' is invalid. Only alphanumeric and underline characters are allowed. The first character must be an alphabetic or underline character.
+control_skinid_unchangeable = {0}.SkinID cannot be modified after a skin has been applied to the control or the child controls have been created.
+control_enabletheming_unchangeable = {0}.EnableTheming cannot be modified after the child controls have been created.
+control_stylesheet_applied = StyleSheet skin has already been applied to {0}.
+control_id_nonunique = {0}.ID '{1}' is not unique among all controls under the same naming container.
+
+templatecontrol_mastercontrol_invalid = Master control must be of type TTemplateControl or a child class.
+templatecontrol_mastercontrol_required = Control '{0}' requires a master control since the control uses TContent.
+templatecontrol_contentid_duplicated = TContent ID '{0}' is duplicated.
+templatecontrol_placeholderid_duplicated= TContentPlaceHolder ID '{0}' is duplicated.
+templatecontrol_directive_invalid = {0}.{1} can only accept a static text string through a template directive.
+templatecontrol_placeholder_inexistent = TContent '{0}' does not have a matching TContentPlaceHolder.
+
+page_form_duplicated = A page can contain at most one TForm. Use regular HTML form tags for the rest forms.
+page_isvalid_unknown = TPage.IsValid has not been evaluated yet.
+page_postbackcontrol_invalid = Unable to determine postback control '{0}'.
+page_control_outofform = {0} '{1}' must be enclosed within TForm.
+page_head_duplicated = A page can contain at most one THead.
+page_head_required = A THead control is needed in page template in order to render CSS and js in the HTML head section.
+page_statepersister_invalid = Page state persister must implement IPageStatePersister interface.
+page_csmanagerclass_invalid = ClientScriptManager class '{0}' must be an instance of TClientScriptManager.
+
+csmanager_pradoscript_invalid = Unknown Prado script library name '{0}'.
+csmanager_invalid_packages = Unkownn packages '{1}' for javascript packages defined in '{0}'. Valid packages are '{2}'.
+
+contentplaceholder_id_required = TContentPlaceHolder must have an ID.
+
+content_id_required = TContent must have an ID.
+
+controlcollection_control_required = TControlList can only accept strings or TControl objects.
+
+webcontrol_accesskey_invalid = {0}.AccessKey '{1}' is invalid. It must be a single character only.
+webcontrol_style_invalid = {0}.Style must take string value only.
+
+listcontrol_selection_invalid = {0} has an invalid selection that is set before performing databinding.
+listcontrol_selectedindex_invalid = {0}.SelectedIndex has an invalid value {1}.
+listcontrol_selectedvalue_invalid = {0}.SelectedValue has an invalid value '{1}'.
+listcontrol_expression_invalid = {0} is evaluating an invalid expression '{1}' : {2}
+listcontrol_multiselect_unsupported = {0} does not support multiselection.
+
+label_associatedcontrol_invalid = TLabel.AssociatedControl '{0}' cannot be found.
+
+hiddenfield_focus_unsupported = THiddenField does not support setting input focus.
+hiddenfield_theming_unsupported = THiddenField does not support theming.
+hiddenfield_skinid_unsupported = THiddenField does not support control skin.
+
+panel_defaultbutton_invalid = TPanel.DefaultButton '{0}' does not refer to an existing button control.
+
+tablestyle_cellpadding_invalid = TTableStyle.CellPadding must take an integer equal to or greater than -1.
+tablestyle_cellspacing_invalid = TTableStyle.CellSpacing must take an integer equal to or greater than -1.
+
+pagestatepersister_pagestate_corrupted = Page state is corrupted.
+
+sessionpagestatepersister_pagestate_corrupted = Page state is corrupted.
+sessionpagestatepersister_historysize_invalid = TSessionPageStatePersister.History must be an integer greater than 0.
+
+listitemcollection_item_invalid = TListItemCollection can only take strings or TListItem objects.
+
+dropdownlist_selectedindices_unsupported= TDropDownList.SelectedIndices is read-only.
+
+bulletedlist_autopostback_unsupported = TBulletedList.AutoPostBack is read-only.
+bulletedlist_selectedindex_unsupported = TBulletedList.SelectedIndex is read-only.
+bulletedlist_selectedindices_unsupported= TBulletedList.SelectedIndices is read-only.
+bulletedlist_selectedvalue_unsupported = TBulletedList.SelectedValue is read-only.
+
+radiobuttonlist_selectedindices_unsupported = TRadioButtonList.SelectedIndices is read-only.
+
+logrouter_configfile_invalid = TLogRouter.ConfigFile '{0}' does not exist.
+logrouter_routeclass_required = Class attribute is required in <route> configuration.
+logrouter_routetype_required = Log route must be an instance of TLogRoute or its derived class.
+
+filelogroute_logpath_invalid = TFileLogRoute.LogPath '{0}' must be a directory in namespace format and must be writable by the Web server process.
+filelogroute_maxfilesize_invalid = TFileLogRoute.MaxFileSize must be greater than 0.
+filelogroute_maxlogfiles_invalid = TFileLogRoute.MaxLogFiles must be greater than 0.
+
+emaillogroute_sentfrom_required = TEmailLogRoute.SentFrom cannot be empty.
+
+repeatinfo_repeatcolumns_invalid = TRepeatInfo.RepeatColumns must be no less than 0.
+
+basevalidator_controltovalidate_invalid = {0}.ControlToValidate is empty or contains an invalid control ID path.
+basevalidator_validatable_required = {0}.ControlToValidate must point to a control implementing IValidatable interface.
+basevalidator_forcontrol_unsupported = {0}.ForControl is not supported.
+
+comparevalidator_controltocompare_invalid = TCompareValidator.ControlToCompare contains an invalid control ID path.
+
+listcontrolvalidator_invalid_control = {0}.ControlToValidate contains an invalid TListControl ID path, "{1}" is a {2}.
+
+repeater_template_required = TRepeater.{0} requires a template instance implementing ITemplate interface.
+repeater_itemtype_unknown = Unknown repeater item type {0}.
+repeateritemcollection_item_invalid = TRepeaterItemCollection can only accept objects that are instance of TControl or its descendant class.
+
+datalist_template_required = TDataList.{0} requires a template instance implementing ITemplate interface.
+datalistitemcollection_datalistitem_required = TDataListItemCollection can only accept TDataListItem objects.
+
+datagrid_template_required = TDataGrid.{0} requires a template instance implementing ITemplate interface.
+templatecolumn_template_required = TTemplateColumn.{0} requires a template instance implementing ITemplate interface.
+datagrid_currentpageindex_invalid = TDataGrid.CurrentPageIndex must be no less than 0.
+datagrid_pagesize_invalid = TDataGrid.PageSize must be greater than 0.
+datagrid_virtualitemcount_invalid = TDataGrid.VirtualItemCount must be no less than 0.
+datagriditemcollection_datagriditem_required = TDataGridItemCollection can only accept TDataGridItem objects.
+datagridcolumncollection_datagridcolumn_required = TDataGridColumnCollection can only accept TDataGridColumn objects.
+datagridpagerstyle_pagebuttoncount_invalid = TDataGridPagerStyle.PageButtonCount must be greater than 0.
+
+datafieldaccessor_data_invalid = TDataFieldAccessor is trying to evaluate a field value of an invalid data. Make sure the data is an array, TMap, TList, or object that contains the specified field '{0}'.
+datafieldaccessor_datafield_invalid = TDataFieldAccessor is trying to evaluate data value of an unknown field '{0}': {1}.
+
+tablerowcollection_tablerow_required = TTableRowCollection can only accept TTableRow objects.
+
+tablecellcollection_tablerow_required = TTableCellCollection can only accept TTableCell objects.
+
+multiview_view_required = TMultiView can only accept TView as child.
+multiview_activeviewindex_invalid = TMultiView.ActiveViewIndex has an invalid index '{0}'.
+multiview_view_inexistent = TMultiView cannot find the specified view.
+multiview_viewid_invalid = TMultiView cannot find the view '{0}' to switch to.
+
+viewcollection_view_required = TViewCollection can only accept TView as its element.
+
+view_visible_readonly = TView.Visible is read-only. Use TView.Active to toggle its visibility.
+
+wizard_step_invalid = The step to be activated cannot be found in wizard step collection.
+wizard_command_invalid = Invalid wizard navigation command '{0}'.
+
+table_tablesection_outoforder = TTable table sections must be in the order of: Header, Body and Footer.
+
+completewizardstep_steptype_readonly = TCompleteWizardStep.StepType is read-only.
+
+wizardstepcollection_wizardstep_required = TWizardStepCollection can only accept objects of TWizardStep or its derived classes.
+
+texthighlighter_stylesheet_invalid = Unable to find the stylesheet file for TTextHighlighter.
+
+hotspotcollection_hotspot_required = THotSpotCollection can only accept instance of THotSpot or its derived classes.
+
+htmlarea_textmode_readonly = THtmlArea.TextMode is read-only.
+htmlarea_tarfile_invalid = THtmlArea is unable to locate the TinyMCE tar file.
+
+parametermodule_parameterfile_unchangeable = TParameterModule.ParameterFile is not changeable because the module is already initialized.
+parametermodule_parameterfile_invalid = TParameterModule.ParameterFile '{0}' is invalid. Make sure it is in namespace format and the file extension is '.xml' or '.php'.
+parametermodule_parameterid_required = Parameter element must have 'id' attribute.
+
+datagridcolumn_id_invalid = {0}.ID '{1}' is invalid. Only alphanumeric and underline characters are allowed. The first character must be an alphabetic or underline character.
+datagridcolumn_expression_invalid = {0} is evaluating an invalid expression '{1}' : {2}
+
+outputcache_cachemoduleid_invalid = TOutputCache.CacheModuleID is set with an invalid cache module ID {0}. Either the module does not exist or does not implement ICache interface.
+outputcache_duration_invalid = {0}.Duration must be an integer no less than 0.
+
+stack_data_not_iterable = TStack can only fetch data from an array or a traversable object.
+stack_empty = TStack is empty.
+
+queue_data_not_iterable = TQueue can only fetch data from an array or a traversable object.
+queue_empty = TQueue is empty.
+
+pager_pagebuttoncount_invalid = TPager.PageButtonCount must be an integer no less than 1.
+pager_currentpageindex_invalid = TPager.CurrentPageIndex is out of range.
+pager_pagecount_invalid = TPager.PageCount cannot be smaller than 0.
+pager_controltopaginate_invalid = TPager.ControlToPaginate {0} must be a valid ID path pointing to a TDataBoundControl-derived control.
+
+databoundcontrol_pagesize_invalid = {0}.PageSize must be an integer no smaller than 1.
+databoundcontrol_virtualitemcount_invalid = {0}.VirtualItemCount must be an integer no smaller than 0.
+databoundcontrol_currentpageindex_invalid = {0}.CurrentPageIndex is out of range.
+databoundcontrol_datasource_invalid = {0}.DataSource is not valid.
+databoundcontrol_datasourceid_inexistent = databoundcontrol_datasourceid_inexistent.
+databoundcontrol_datasourceid_invalid = databoundcontrol_datasourceid_invalid
+databoundcontrol_datamember_invalid = databoundcontrol_datamember_invalid
+
+clientscript_invalid_file_position = Invalid file position '{1}' for TClientScript control '{0}', must be 'Head', 'Here' or 'Begin'.
+clientscript_invalid_package_path = Invalid PackagePath '{0}' for TClientScript control '{1}'.
+
+tdatepicker_autopostback_unsupported = '{0}' does not support AutoPostBack.
+globalization_cache_path_failed = Unable to create translation message cache path '{0}'. Make sure the parent directory exists and is writable by the Web process.
+globalization_source_path_failed = Unable to create translation message path '{0}'. Make sure the parent directory exists and is writable by the Web process.
+messagesource_connectionid_invalid = MessageSource_Database.source '{0}' does not point to a valid TDataSourceConfig module.
+messagesource_connectionid_required = ConnectionID in MessageSource_Database.source is required.
+
+callback_not_support_no_priority_state_update = Callback request does not support unprioritized pagestate update.
+callback_invalid_callback_options = '{1}' is not a valid TCallbackOptions control for Callback control '{0}'.
+callback_invalid_clientside_options = Callback ClientSide property must be either a string that is the ID of a TCallbackOptions control or an instance of TCallbackClientSideOptions.=======
+callback_not_support_no_priority_state_update = Callback request does not support unprioritized pagestate update.
+callback_invalid_handler = Invalid callback handler, control {0} must implement ICallbackEventHandler.
+callback_invalid_target = Invalid callback target, no such control with ID {0}.
+
+callback_interval_be_positive = Interval for TCallbackTimer "{0}" must be strictly greater than zero seconds.
+callback_decay_be_not_negative = Decay rate for TCallbackTimer "{0}" must be not negative.
+
+callback_no_autopostback = Control "{0}" can not enable AutoPostBack.
+
+xmltransform_xslextension_required = TXmlTransform requires the PHP's XSL extension.
+xmltransform_transformpath_invalid = TXmlTransform.TransformPath '{0}' is invalid.
+xmltransform_documentpath_invalid = TXmlTransform.DocumentPath '{0}' is invalid.
+xmltransform_transform_required = Either TransformContent or TransformPath property must be set for TXmlTransform.
+
+ttriggeredcallback_invalid_controlid = ControlID property for '{0}' must not be empty.
+tactivecustomvalidator_clientfunction_unsupported = {0} does not support client side validator function.
+
+dbconnection_open_failed = TDbConnection failed to establish DB connection: {0}
+dbconnection_connection_inactive = TDbConnection is inactive.
+dbconnection_unsupported_driver_charset = Database driver '{0}' doesn't support setting charset.
+
+dbcommand_prepare_failed = TDbCommand failed to prepare the SQL statement "{1}": {0}
+dbcommand_execute_failed = TDbCommand failed to execute the SQL statement "{1}": {0}
+dbcommand_query_failed = TDbCommand failed to execute the query SQL "{1}": {0}
+dbcommand_column_empty = TDbCommand returned an empty result and could not obtain the scalar.
+dbdatareader_rewind_invalid = TDbDataReader is a forward-only stream. It can only be traversed once.
+dbtransaction_transaction_inactive = TDbTransaction is inactive.
+
+dbcommandbuilder_value_must_not_be_null = Property {0} must not be null as defined by column '{2}' in table '{1}'.
+
+dbcommon_invalid_table_name = Database table '{0}' not found. Error message: {1}.
+dbcommon_invalid_identifier_name = Invalid database identifier name '{0}', see {1} for details.
+dbtableinfo_invalid_column_name = Invalid column name '{0}' for database table '{1}'.
+dbmetadata_invalid_table_view = Invalid table/view name '{0}', or that table/view '{0}' contains no accessible column/field definitions.
+dbmetadata_requires_php_version = PHP version {1} or later is required for using {0} database.
+
+dbtablegateway_invalid_criteria = Invalid criteria object, must be a string or instance of TSqlCriteria.
+dbtablegateway_no_primary_key_found = Table '{0}' does not contain any primary key fields.
+dbtablegateway_missing_pk_values = Missing primary key values in forming IN(key1, key2, ...) for table '{0}'.
+dbtablegateway_pk_value_count_mismatch = Composite key value count mismatch in forming IN( (key1, key2, ..), (key3, key4, ..)) for table '{0}'.
+dbtablegateway_mismatch_args_exception = TTableGateway finder method '{0}' expects {1} parameters but found only {2} parameters instead.
+dbtablegateway_mismatch_column_name = In dynamic __call() method '{0}', no matching columns were found, valid columns for table '{2}' are '{1}'.
+dbtablegateway_invalid_table_info = Table must be a string or an instance of TDbTableInfo.
+
+directorycachedependency_directory_invalid = TDirectoryCacheDependency.Directory {0} does not refer to a valid directory.
+cachedependencylist_cachedependency_required = Only objects implementing ICacheDependency can be added into TCacheDependencyList.
+
+soapservice_configfile_invalid = TSoapService.ConfigFile '{0}' does not exist. Note, it has to be specified in a namespace format and the file extension must be '.xml' or '.php'.
+soapservice_request_invalid = SOAP server '{0}' not found.
+soapservice_serverid_required = <soap> element must have 'id' attribute.
+soapservice_serverid_duplicated = SOAP server ID '{0}' is duplicated.
+soapserver_id_invalid = Invalid SOAP server ID '{0}'. It should not end with '.wsdl'.
+soapserver_version_invalid = Invalid SOAP version '{0}'. It must be either '1.1' or '1.2'.
+
+jsonservice_id_required = TJsonService requires 'id' attribute in its JSON elements.
+jsonservice_response_type_invalid = JSON class {0} is invalid. It should be TJsonResponse or extend from TJsonResponse.
+jsonservice_class_required = TJsonService requires 'class' attribute in its JSON elements.
+jsonservice_provider_unknown = Unknown JSON provider '{0}' requested.
+
+dbusermanager_userclass_required = TDbUserManager.UserClass is required.
+dbusermanager_userclass_invalid = TDbUserManager.UserClass '{0}' is not a valid user class. The class must extend TDbUser.
+dbusermanager_connectionid_invalid = TDbUserManager.ConnectionID '{0}' does not point to a valid TDataSourceConfig module.
+dbusermanager_connectionid_required = TDbUserManager.ConnectionID is required.
+
+feedservice_id_required = TFeedService requires 'id' attribute in its feed elements.
+feedservice_feedtype_invalid = The class feed '{0}' must implement IFeedContentProvider interface.
+feedservice_class_required = TFeedService requires 'class' attribute in its feed elements.
+feedservice_feed_unknown = Unknown feed '{0}' requested.
+
+tabviewcollection_tabview_required = TTabPanel can only accept TTabView as child.
+tabpanel_activeviewid_invalid = TTabPanel.ActiveViewID has an invalid ID '{0}'.
+tabpanel_activeviewindex_invalid = TTabPanel.ActiveViewIndex has an invalid Index '{0}'.
+tabpanel_view_inexistent = TTabPanel cannot find the specified view.
+
+cachesession_cachemoduleid_required = TCacheHttpSession.CacheModuleID is required.
+cachesession_cachemodule_inexistent = TCacheHttpSession.CacheModuleID '{0}' points to a non-existent module.
+cachesession_cachemodule_invalid = TCacheHttpSession.CacheModuleID '{0}' points to a module that does not implement ICache interface.
+
+urlmapping_urlmappingpattern_required = TUrlMapping can only contain TUrlMappingPattern or its child classes.
+urlmapping_global_required = TUrlMapping must be configured as a global module.
+urlmapping_configfile_inexistent = TUrlMapping.ConfigFile '{0}' is not a file.
+urlmapping_configfile_invalid = TUrlMapping.ConfigFile '{0}' must point to an XML file in namespace format.
+
+urlmappingpattern_serviceparameter_required = TUrlMappingPattern.ServiceParameter is required for pattern '{0}'.
+
+keyboard_forcontrol_required = TKeyboard.ForControl cannot be empty.
+keyboard_forcontrol_invalid = TKeyboard.ForControl '{0}' is invalid.
+
+captcha_tokenimagetheme_invalid = TCaptcha.TokenImageTheme must be an integer between {0} and {1}.
+captcha_tokenfontsize_invalid = TCaptcha.TokenFontSize must be an integer between {0} and {1}.
+captcha_mintokenlength_invalid = TCaptcha.MinTokenLength must be an integer between {0} and {1}.
+captcha_maxtokenlength_invalid = TCaptcha.MaxTokenLength must be an integer between {0} and {1}.
+captcha_tokenalphabet_invalid = TCaptcha.TokenAlphabet must be a string consisting of at least 2 characters.
+captcha_privatekey_unknown = TCaptcha.PrivateKey is unknown. Please make sure that your assets directory is writable by the Web server process.
+captcha_gd2_required = TCaptcha requires PHP GD2 extension.
+captcha_imagettftext_required = TCaptcha requires PHP GD2 extension with TrueType font support.
+captcha_imagepng_required = TCaptcha requires PHP GD2 extension with PNG image format support.
+
+captchavalidator_captchacontrol_required = TReCaptchaValidator.CaptchaControl must point to an existing TCaptcha control.
+captchavalidator_captchacontrol_inexistent = TReCaptchaValidator.CaptchaControl {0} must point to an existing TCaptcha control.
+captchavalidator_captchacontrol_invalid = TReCaptchaValidator.CaptchaControl {0} must point to an existing TCaptcha control.
+
+recaptcha_privatekey_unknown = TReCaptcha.PrivateKey is unknown. To use reCAPTCHA you must get an API key.
+recaptcha_publickey_unknown = TReCaptcha.PublicKey is unknown. To use reCAPTCHA you must get an API key.
+
+recaptchavalidator_captchacontrol_invalid = TReCaptchaValidator.ControlToValidate must be an instance of TReCaptcha.
+
+slider_handle_class_invalid = TSlider.HandleClass '{0}' is not a valid user class. The class must extends TSliderHandle.
+
+cachepagestatepersister_cachemoduleid_invalid = TCachePageStatePersister.CacheModuleID '{0}' does not point to a valid cache module.
+cachepagestatepersister_cache_required = TCachePageStatePersister requires a cache module to be loaded.
+cachepagestatepersister_timeout_invalid = TCachePageStatePersister.Timeout must be an integer no less than zero.
+cachepagestatepersister_pagestate_corrupted = Page state is corrupted.
+
+conditional_condition_invalid = TConditional.Condition '{0}' is not a valid PHP expression: {1}
+
+db_cachetable_inexistent = TDbCache cannot find DB table '{0}' to store cached data.
+
+ar_data_invalid = {0}.copyFrom() can only take an object or array as parameter.
+ar_save_invalid = The {0} instance cannot be saved because it is either deleted or in an unknown state.
+ar_delete_invalid = The {0} instance cannot be deleted because it is either a new record or a record already deleted.
+
+datasource_dbconnection_invalid = TDataSourceConfig.DbConnection '{0}' is invalid. Please make sure it points to a valid application module.
+distributeddatasource_child_required = {0} requires one '{1}' child element at minimum.
+masterslavedbconnection_connection_exists = {0}.{1} connection already exists.
+masterslavedbconnection_interface_required = {0}.{1} requires an instance implementing {2} interface.
+slavedbconnection_requires_master = {0} requires a {1}.
+
+response_status_reason_missing = HTTP 1.1 need reason for extended status-codes
+response_status_reason_badchars = For HTTP 1.1 header, the token status-reason must not contain token CR or LF
+
+activefileupload_temppath_invalid = TActiveFileUpload TempPath path '{0}' does not exist or is not writable by Web server process.
+
+tactivetablecell_control_outoftable = {0} '{1}' must be enclosed within a TTableRow control.
+tactivetablecell_control_notincollection = {0} '{1}' no member of the TTableCellCollection of the parent TTableRow control.
+
+tactivetablerow_control_outoftable = {0} '{1}' must be enclosed within a TTable control.
+tactivetablerow_control_notincollection = {0} '{1}' no member of the TTableRowCollection of the parent TTable control.
+
+juioptions_control_invalid = Control '{0}' must implement IJuiOptions.
+juioptions_option_invalid = '{1}' is not a valid option for control '{0}'.
+
+ratinglist_invalid_caption_id = '{0}' is not a valid caption control for TRatingList '{0}'.
+
+accordion_activeviewid_invalid = TAccordion.ActiveViewID has an invalid ID '{0}'.
+accordion_activeviewindex_invalid = TAccordion.ActiveViewIndex has an invalid Index '{0}'.
+accordion_view_inexistent = TAccordion cannot find the specified view.
+
+juidatepicker_settextmode_unsupported = TextMode of TJuiDatePicker cannot be changed. \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error-fr.html b/lib/prado/framework/Exceptions/templates/error-fr.html
new file mode 100644
index 0000000..c9c1901
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error-fr.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
+<head>
+<title>%%ErrorMessage%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Erreur %%StatusCode%%</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+Cette erreur est survenue en essayant de répondre à votre requête.
+</p>
+<p>
+Si vous pensez qu'il s'agit d'une erreur inattendue du serveur, merci de contacter l'<a href="mailto:%%ServerAdmin%%">administrateur</a>
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error-id.html b/lib/prado/framework/Exceptions/templates/error-id.html
new file mode 100644
index 0000000..608805a
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error-id.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>%%ErrorMessage%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Kesalahan %%StatusCode%%</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+Kesalahan di atas terjadi ketika server memproses permintaan anda.
+</p>
+<p>
+Jika anda pikir ini merupakan kesalahan server, silahkan hubungi <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error-zh.html b/lib/prado/framework/Exceptions/templates/error-zh.html
new file mode 100644
index 0000000..f69d0e4
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error-zh.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>%%ErrorMessage%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>错误%%StatusCode%%</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+服务器在处理您的页面请求时出现了以上错误。
+</p>
+<p>
+如果您认为这是服务器的原因,请联系通知<a href="mailto:%%ServerAdmin%%">系统管理员</a>。
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error.html b/lib/prado/framework/Exceptions/templates/error.html
new file mode 100644
index 0000000..e1715f4
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>%%ErrorMessage%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Error %%StatusCode%%</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+The above error happened when the server was processing your request.
+</p>
+<p>
+If you think this is a server error, please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error400-en.html b/lib/prado/framework/Exceptions/templates/error400-en.html
new file mode 100644
index 0000000..629b360
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error400-en.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Bad Request</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Bad Request</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+The request could not be understood by the server due to malformed syntax.
+Please do not repeat the request without modifications.
+</p>
+<p>
+If you think this is a server error, please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error400-id.html b/lib/prado/framework/Exceptions/templates/error400-id.html
new file mode 100644
index 0000000..9f02010
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error400-id.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Bad Request</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Permintaan Salah</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+Permintaan tidak dimengerti oleh server karena sintaks tidak benar.
+Harap tidak mengulangi permintaan tanpa memodifikasinya.
+</p>
+<p>
+Jika anda pikir ini merupakan kesalahan server, silahkan hubungi <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error400-zh.html b/lib/prado/framework/Exceptions/templates/error400-zh.html
new file mode 100644
index 0000000..08f9311
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error400-zh.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>错误请求</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>错误请求</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+服务器无法理解您的请求。请勿重复同样的请求。
+</p>
+<p>
+如果您确认这是服务器错误,请联系<a href="mailto:%%ServerAdmin%%">系统管理员</a>。
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error400.html b/lib/prado/framework/Exceptions/templates/error400.html
new file mode 100644
index 0000000..629b360
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error400.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Bad Request</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Bad Request</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+The request could not be understood by the server due to malformed syntax.
+Please do not repeat the request without modifications.
+</p>
+<p>
+If you think this is a server error, please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error404-en.html b/lib/prado/framework/Exceptions/templates/error404-en.html
new file mode 100644
index 0000000..40862e0
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error404-en.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Page Not Found</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorMessage%%</h1>
+<h2>Error 404</h2>
+<p>
+The requested URL was not found on this server.
+If you entered the URL manually please check your spelling and try again.
+</p>
+<p>
+If you think this is a server error, please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error404-fr.html b/lib/prado/framework/Exceptions/templates/error404-fr.html
new file mode 100644
index 0000000..4a417d7
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error404-fr.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
+<head>
+<title>Page Introuvable</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorMessage%%</h1>
+<h2>Erreur 404</h2>
+<p>
+L'URL demandée n'a pas été trouvée sur ce serveur.
+Si vous avez tapé cette URL manuellement dans la barre d'adresse, merci de vérifier qu'il n'y aucune faute de frappe pour essayer à nouveau.
+</p>
+<p>
+Si vous pensez qu'il s'agit d'une erreur inattendue du serveur, merci de contacter l'<a href="mailto:%%ServerAdmin%%">administrateur</a>
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error404-id.html b/lib/prado/framework/Exceptions/templates/error404-id.html
new file mode 100644
index 0000000..3a24992
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error404-id.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Halaman Tidak Ditemukan</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorMessage%%</h1>
+<h2>Kesalahan 404</h2>
+<p>
+URL yang diminta tidak ditemukan pada server ini.
+Jika anda memasukan URL secara manual silahkan periksa ejaan anda dan coba lagi.
+</p>
+<p>
+Jika anda pikir ini kesalahan server, silahkan hubungi <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error404-zh.html b/lib/prado/framework/Exceptions/templates/error404-zh.html
new file mode 100644
index 0000000..c834f9b
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error404-zh.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>无法找到页面</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorMessage%%</h1>
+<h2>错误代码404</h2>
+<p>
+服务器无法找到您所请求的页面。
+如果您是手工输入页面地址的,请检查拼写是否正确。
+</p>
+<p>
+如果您确认这是服务器错误,请联系<a href="mailto:%%ServerAdmin%%">系统管理员</a>。
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error404.html b/lib/prado/framework/Exceptions/templates/error404.html
new file mode 100644
index 0000000..40862e0
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error404.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Page Not Found</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorMessage%%</h1>
+<h2>Error 404</h2>
+<p>
+The requested URL was not found on this server.
+If you entered the URL manually please check your spelling and try again.
+</p>
+<p>
+If you think this is a server error, please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a>.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error500-en.html b/lib/prado/framework/Exceptions/templates/error500-en.html
new file mode 100644
index 0000000..69408d2
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error500-en.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Internal Server Error</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Internal Server Error</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+An internal error occurred while the Web server was handling your request.
+Please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a> to report this problem.
+</p>
+<p>
+Thank you.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error500-fr.html b/lib/prado/framework/Exceptions/templates/error500-fr.html
new file mode 100644
index 0000000..1c4df1a
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error500-fr.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
+<head>
+<title>Erreur Interne du Serveur</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Erreur Interne du Serveur</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+Une erreur interne s'est produite pendant que le serveur web traitait votre requête.
+Veuillez contacter l'<a href="mailto:%%ServerAdmin%%">administrateur</a> pour lui signaler le problème.
+</p>
+<p>
+Merci de votre compréhension.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error500-id.html b/lib/prado/framework/Exceptions/templates/error500-id.html
new file mode 100644
index 0000000..592138f
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error500-id.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Kesalahan Server Internal</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Kesalahan Server Internal</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+Kesalahan server internal terjadi saat server Web menangani permintaan anda.
+Silahkan hubungi <a href="mailto:%%ServerAdmin%%">webmaster</a> untuk melaporkan masalah ini.
+</p>
+<p>
+Thank you.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error500-zh.html b/lib/prado/framework/Exceptions/templates/error500-zh.html
new file mode 100644
index 0000000..d655601
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error500-zh.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>服务器内部错误</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>服务器内部错误</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+服务器在处理您的请求时发生了一个内部错误。请向<a href="mailto:%%ServerAdmin%%">系统管理员</a>汇报这个错误。
+</p>
+<p>
+谢谢。
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error500.html b/lib/prado/framework/Exceptions/templates/error500.html
new file mode 100644
index 0000000..69408d2
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error500.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Internal Server Error</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Internal Server Error</h1>
+<h2>%%ErrorMessage%%</h2>
+<p>
+An internal error occurred while the Web server was handling your request.
+Please contact the <a href="mailto:%%ServerAdmin%%">webmaster</a> to report this problem.
+</p>
+<p>
+Thank you.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error503-en.html b/lib/prado/framework/Exceptions/templates/error503-en.html
new file mode 100644
index 0000000..66b8ea0
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error503-en.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Service Unavailable</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Service Unavailable</h1>
+<p>
+Our system is currently under maintenance. Please come back later.
+</p>
+<p>
+Thank you.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error503-fr.html b/lib/prado/framework/Exceptions/templates/error503-fr.html
new file mode 100644
index 0000000..8966525
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error503-fr.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
+<head>
+<title>Service Indisponible</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Service Indisponible</h1>
+<p>
+Le service est actuellement en maintenance et indisponible. Merci de réessayer prochainement.
+</p>
+<p>
+Merci de votre compréhension.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error503-id.html b/lib/prado/framework/Exceptions/templates/error503-id.html
new file mode 100644
index 0000000..43a52de
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error503-id.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Layanan Tidak Tersedia</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Layanan Tidak Tersedia</h1>
+<p>
+Sistem kami saat ini dalam pemeliharaan. Silahkan kembali lagi nanti.
+</p>
+<p>
+Terima kasih.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error503-zh.html b/lib/prado/framework/Exceptions/templates/error503-zh.html
new file mode 100644
index 0000000..b7457d6
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error503-zh.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>系统无法提供服务</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>系统无法提供服务</h1>
+<p>
+系统维护中,请稍后再来访问。
+</p>
+<p>
+谢谢。
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/error503.html b/lib/prado/framework/Exceptions/templates/error503.html
new file mode 100644
index 0000000..66b8ea0
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/error503.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>Service Unavailable</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>Service Unavailable</h1>
+<p>
+Our system is currently under maintenance. Please come back later.
+</p>
+<p>
+Thank you.
+</p>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/exception-en.html b/lib/prado/framework/Exceptions/templates/exception-en.html
new file mode 100644
index 0000000..aed3755
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/exception-en.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>%%ErrorType%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+a {font-family:"Verdana";color:red;}
+code,pre {font-family:"Lucida Console";font-size:10pt;}
+td,.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+.source {font-family:"Lucida Console";font-weight:normal;background-color:#ffffee;}
+.error {background-color: #ffeeee;}/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorType%%</h1>
+<h3>Description</h3>
+<p style="color:maroon">%%ErrorMessage%%</p>
+<h3>Source File</h3>
+<p>%%SourceFile%%</p>
+<div class="source">
+<code><pre>
+%%SourceCode%%
+</pre></code>
+</div>
+<h3>Stack Trace</h3>
+<div class="source">
+<code><pre>
+%%StackTrace%%
+</pre></code>
+</div>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/exception-fr.html b/lib/prado/framework/Exceptions/templates/exception-fr.html
new file mode 100644
index 0000000..7cb6136
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/exception-fr.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
+<head>
+<title>%%ErrorType%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+a {font-family:"Verdana";color:red;}
+code,pre {font-family:"Lucida Console";font-size:10pt;}
+td,.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+.source {font-family:"Lucida Console";font-weight:normal;background-color:#ffffee;}
+.error {background-color: #ffeeee;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorType%%</h1>
+<h3>Description</h3>
+<p style="color:maroon">%%ErrorMessage%%</p>
+<h3>Fichier Source</h3>
+<p>%%SourceFile%%</p>
+<div class="source">
+<code><pre>
+%%SourceCode%%
+</pre></code>
+</div>
+<h3>Trace de la pile d'ex閏ution:</h3>
+<div class="source">
+<code><pre>
+%%StackTrace%%
+</pre></code>
+</div>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/exception-id.html b/lib/prado/framework/Exceptions/templates/exception-id.html
new file mode 100644
index 0000000..75961f5
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/exception-id.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>%%ErrorType%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+a {font-family:"Verdana";color:red;}
+code,pre {font-family:"Lucida Console";font-size:10pt;}
+td,.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+.source {font-family:"Lucida Console";font-weight:normal;background-color:#ffffee;}
+.error {background-color: #ffeeee;}/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorType%%</h1>
+<h3>Deskripsi</h3>
+<p style="color:maroon">%%ErrorMessage%%</p>
+<h3>File Sumber</h3>
+<p>%%SourceFile%%</p>
+<div class="source">
+<code><pre>
+%%SourceCode%%
+</pre></code>
+</div>
+<h3>Jejak Stack</h3>
+<div class="source">
+<code><pre>
+%%StackTrace%%
+</pre></code>
+</div>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/exception-zh.html b/lib/prado/framework/Exceptions/templates/exception-zh.html
new file mode 100644
index 0000000..257e8e6
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/exception-zh.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>%%ErrorType%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+a {font-family:"Verdana";color:red;}
+code,pre {font-family:"Lucida Console";font-size:10pt;}
+td,.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+.source {font-family:"Lucida Console";font-weight:normal;background-color:#ffffee;}
+.error {background-color: #ffeeee;}
+/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorType%%</h1>
+<h3>错误信息</h3>
+<p style="color:maroon">%%ErrorMessage%%</p>
+<p>
+<h3>错误代码文件</h3>
+<p>%%SourceFile%%</p>
+<div class="source">
+<code><pre>
+%%SourceCode%%
+</pre></code>
+</div>
+<h3>错误堆栈信息</h3>
+<div class="source">
+<code><pre>
+%%StackTrace%%
+</pre></code>
+</div>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/exception.html b/lib/prado/framework/Exceptions/templates/exception.html
new file mode 100644
index 0000000..f901220
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/exception.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html PUBLIC
+ "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<title>%%ErrorType%%</title>
+<style type="text/css">
+/*<![CDATA[*/
+body {font-family:"Verdana";font-weight:normal;color:black;background-color:white;}
+h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
+h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
+h3 {font-family:"Verdana";font-weight:bold;font-size:11pt}
+p {font-family:"Verdana";font-weight:normal;color:black;font-size:9pt;margin-top: -5px}
+code,pre {font-family:"Lucida Console";font-size:10pt;}
+td,.version {color: gray;font-size:8pt;border-top:1px solid #aaaaaa;}
+.source {font-family:"Lucida Console";font-weight:normal;background-color:#ffffee;}
+.error {background-color: #ffeeee;}/*]]>*/
+</style>
+</head>
+<body>
+<h1>%%ErrorType%%</h1>
+<h3>Description</h3>
+<p style="color:maroon">%%ErrorMessage%%</p>
+<h3>Source File</h3>
+<p>%%SourceFile%%</p>
+<div class="source">
+<code><pre>
+%%SourceCode%%
+</pre></code>
+</div>
+<h3>Stack Trace</h3>
+<div class="source">
+<code><pre>
+%%StackTrace%%
+</pre></code>
+</div>
+<div class="version">
+%%Time%% %%Version%%
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/lib/prado/framework/Exceptions/templates/readme.txt b/lib/prado/framework/Exceptions/templates/readme.txt
new file mode 100644
index 0000000..635b668
--- /dev/null
+++ b/lib/prado/framework/Exceptions/templates/readme.txt
@@ -0,0 +1,18 @@
+This directory contains templates used to display PRADO exception and error messages to end-users.
+
+All error template files follow the following naming convention:
+
+ error<status code>-<language code>.html
+
+where <status code> refers to a HTTP status code used when raising THttpException, and
+<language code> refers to a valid language such as en, zh, fr.
+
+The naming convention for exception template files is similar to that of error template files.
+
+
+CAUTION: When saving a template file, please make sure the file is saved using UTF-8 encoding.
+On Windows, you may use Notepad.exe to accomplish such saving.
+
+
+Qiang Xue
+Jan. 3, 2006 \ No newline at end of file