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 работать правильно.

Приветствия...

Другие вопросы по тегам