PHPTAL i18n Вызов функции-члена для необъектной ошибки
Я использую PHPTAL в своем проекте, я могу успешно реализовать его практически во всех случаях, кроме случаев, когда я хочу использовать его сервисы i18n. Я постоянно получаю ошибки "Вызов функции-члена для необъекта"
Я пробовал искать в сетевых форумах и т. Д., Но не нашел никакого решения, буду очень признателен, если кто-нибудь сможет мне помочь.
1 ответ
От всей души разочаровывает, что никто не ответил на мой вопрос, поэтому я наконец-то нашел решение и отвечаю на свой вопрос.
По умолчанию PHPTAL не устанавливает переводчик для перевода текста с одного языка на другой. Так что вы должны сделать это самостоятельно. Ниже приведены некоторые шаги, чтобы сделать это.,,
Шаг 1. Создайте новый файл php (например, MyTranslator.php) и сгенерируйте новый класс, например PHPTAL_MyTranslator, и сохраните его в папке PHPTAL. Этот класс будет реализовывать интерфейс PHPTAL_TranslationService. В этом интерфейсе пять функций, но наша задача - только перевод. Так что просто добавьте объявление для остальных функций и напишите код для функции перевода. Класс, который я написал и использовал в моем случае:
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. Добавьте строку к этой функции, как показано ниже.,,,,
До
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')) {
............
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:attribute, а также i18n:translate работать правильно.
Приветствия...