multilinguale Webseite über Template Klasse

A

adlershof

Hallo Tutorials-Community,

ich arbeite an einer multilingualen Webseite (Deutsch und Englisch) und habe ein Problem bei meiner TemplateEngine. Mit der neusten PHP Version wird mir angezeigt, dass der Modifikator /e veraltet ist und nicht mehr genutzt werden soll. Nun bin ich dabei, dass umzuprogrammieren. Zurzeit nutze ich eine andere Variante, die mir allerdings mehr arbeit verschaft.

Alte Version
PHP:
public function languageSet() {
global $languages;
 
$this->template = preg_replace("/\{l_(.*)\}/isUe", "\$languages[strtolower('\\1')]", $this->template);
 
return $languages;
}

Neue Version
PHP:
public function languageSet() {        

global $languages;
        
$this->template = preg_replace_callback("/\{l_(.*)\}/", create_function('$languages', 'return $languages[0];'), $this->template);
        
return $languages;    
}

Mit der neuen Version wird mir als Beispiel nur {l_home} auf der Seite ausgegeben, aber nicht Startseite für {l_home}. Wie bekomme ich es wieder hin, dass mir Startseite [de] / Home [en] für {l_home} angezeigt wird?
 
Du hast die anderen Pattern-Modifikatoren unter den Tisch fallen lassen. Und es ist vermutlich 'return $languages[1];', ich habe es jetzt aber nicht getestet.
 
Du hast die anderen Pattern-Modifikatoren unter den Tisch fallen lassen. Und es ist vermutlich 'return $languages[1];', ich habe es jetzt aber nicht getestet.

Nein, daran liegt es nicht. Mit 'return $languages[1];' bekomme ich als Ergebnis {l_home. Schreibe ich "/\{l_(.*)\}/isUe" anstatt "/\{l_(.*)\}/isU" bekomme ich wieder {l_home}.
 
PHP:
<?php

class Foo
{
    protected $template = '{l_home}';

    public function languageSet()
    {
        global $languages;

        $this->template = preg_replace_callback(
            "/\{l_([^}]+)\}/",
            function ($matches) use ($languages) {
                return $languages[strtolower($matches[1])];
            },
            $this->template
        );

        return $languages;
    }

    public function getTemplate()
    {
        return $this->template;
    }
}

$languages = array(
    'home' => 'Test'
);

$foo = new Foo();
$foo->languageSet();

echo $foo->getTemplate();

Liefert "Test".
 
Cool, danke für deine Hilfe! Funktioniert und auf diese Variante wäre ich von alleine nicht gekommen.
 
Zurück