От всей души разочаровывает, что никто не ответил на мой вопрос, поэтому здесь я наконец-то нашел решение и отвечаю на свой вопрос.
По умолчанию PHPTAL не устанавливает переводчик для перевода вашего текста с одного языка на другой. Так что вы должны сделать это самостоятельно. Ниже приведены некоторые шаги, чтобы сделать это. , .
Шаг 1. Создайте новый файл php (например, MyTranslator.php ) и сгенерируйте новый класс, например PHPTAL_MyTranslator , и сохраните его в папке PHPTAL , Этот класс будет реализовывать интерфейс PHPTAL_TranslationService . В этом интерфейсе пять функций, но наша задача - translate . Так что просто добавьте объявление для остальных функций и напишите код для функции перевода. Класс, который я написал и использовал в моем случае:
<pre><code>class PHPTAL_MyTranslator implements PHPTAL_TranslationService {
/**
* current execution context
*/
protected $_context = null;
/**
* @param string (name of the language)
* @return string (language you've just set)
*
* This method sets translation language.
* Name of the language is a dir name where you keep your translation files
*/
public function setLanguage() {
}
public function __construct( $context ) {
$this->_context = $context;
}
/**
* @param string (translation file name)
* @return void
*
* You can separate translations in several files, and use only when needed.
* Use this method to specify witch translation file you want to
* use for current controller.
*/
public function useDomain( $domain ) {
}
/**
* Set an interpolation var.
* Replace all ${key}s with values in translated strings.
*/
public function setVar( $key, $value ) {
}
/**
* Translate a text and interpolate variables.
*/
public function translate( $key, $htmlescape=true ) {
$value = $key;
if( empty( $value ) ) {
return $key;
}
while( preg_match( '/\${(.*?)\}/sm', $value, $m ) ) {
list( $src, $var ) = $m;
if( !array_key_exists( $var, $this->_context ) ) {
$err = sprintf( 'Interpolation error, var "%s" not set', $var );
throw new Exception( $err );
}
$value = str_replace( $src, $this->_context->$var, $value );
}
return gettext( $value );
}
/**
* Not implemented yet, default encoding is used
*/
public function setEncoding( $encoding ) {
}
}
Шаг 2. Теперь откройте файл PHPTAL.php и измените конструктор класса PHPTAL . Добавьте строку к этой функции, как показано ниже. , , , .
До
<pre><code>public function __construct($path=false)
{
$this->_path = $path;
$this->_globalContext = new StdClass();
$this->_context = new PHPTAL_Context();
$this->_context->setGlobal($this->_globalContext);
if (function_exists('sys_get_temp_dir')) {
............
После
<pre><code>public function __construct($path=false)
{
$this->_path = $path;
$this->_globalContext = new StdClass();
$this->_context = new PHPTAL_Context();
$this->_context->setGlobal($this->_globalContext);
//Set translator here
$this->setTranslator( new PHPTAL_MyTranslator( $this->_context ) );
if (function_exists('sys_get_temp_dir')) {
.............
Эти два простых шага приведут к правильной работе атрибутов i18n: , а также i18n: translate .
Ура ...