sprachwechsel durch preg_replace

xlanhackerx

Mitglied
Hallo liebe Community.

Leider stehe ich im Moment an einem Punkt, beidem ich nicht ganz weiterkomme.

Meine Website arbeitet auf der php-template Ebene, welche nun folgendes machen soll.

Ich habe zwei phpdateien erstellt. In beiden stehen entsprechend die sprache:
PHP:
<?php 
$lg = array();
$lg['willkommen'] = "welcome"; // Für deutsch nach englisch 
?>

In meiner Config möchte ich nun alle Buchstaben bzw Wörter mittels preg_replace suchen und dementsprechend duch $lg Array ersetzen.
Und genau da ist mein Problem. Wie müsste mein preg_replace aussehen, damit egal ob groß oder kleingeschrieben die Wörter durch die oben genannte Arrays zu ersetzen.
PHP:
<?php
// index.php

// Sprachauswahl
if ( isset($_GET['lang']) ) {
$_SESSION['lang'] = $_GET['lang'];
}
elseif ( !isset($_SESSION['lang']) ) {
$_SESSION['lang'] = 'de'; // Standartsprache
}

include("config/config.php") // Enthält sämtliche Functions und Classes

// Templates ausarbeiten
eval ("\$navigation_links= \"".template("pages/nav_links")."\";");
eval ("\$navigation_rechts= \"".template("pages/nav_rechts")."\";");
eval ("\$site_header= \"".template("pages/header")."\";");
eval ("\$site_footer= \"".template("pages/footer")."\";");
eval ("\$site_content= \"".template("pages/content")."\";");
eval ("echo \$page= \"".template("pages/site")."\";");
?>
Nun hatte ich erst gedacht ich könnte folgendes machen:
PHP:
<?php
// config.php

switch($_SESSION['lang']) { 
        case "de": 
            include("./lang/lang_de.php");
        case "en": 
             include("./lang/lang_en.php");
        default: 
             include("./lang/lang_de.php");
            break;    
    }    
return preg_replace('/^([0-9]{10})([A-Z]{1}) ([0-9]{7}) ([0-9]{7}) ([0-9]{1}) '$lg[\'\']', $temp);
und in der index.php
PHP:
<?php
// index.php

// Code usw..
$tmp =ob_start();
eval ("echo \$page= \"".template("page/site")."\";");
ob_end_flush();

?>

Allerdings klappt das nicht. Ich weiß nicht wie ich das echo als eine Variable deklarieren kann um so preg_replace ausführen zu können.

Vielleicht könnt ihr mir ja helfen meine Idee richtig umzusetzen.


Danke schonmal.


Mfg. Oli
 
Was macht die Funktion template?
Den regulären Ausdruck den du preg_replace übergibst erkennt einen String der mit 7 Ziffern anfängt dann folgt ein Buchstabe und anschließend folgen 15 Ziffern. Kurzum es ergibt keinen Sinn.

Ich würde dir empfehlen alle Ausgaben der Seite ganz normal stattfinden zu lassen.
Dabei sorgst du dafür dass als erste Anweisung deines Codes das Output-Buffering eingeschaltet wird. Als letzte aktion lässt du dir den Puffer in ner Variablen speichern, ersetzt deine Strings und gibst diesen dann aus. Also in etwa so:
PHP:
ob_start();
//alles ganz normal ausgeben
$content = ob_get_contents();
ob_end_clean();
switch($_SESSION['lang']) {  
        case "de":  
            include("./lang/lang_de.php"); 
        case "en":  
             include("./lang/lang_en.php"); 
        default:  
             include("./lang/lang_de.php"); 
            break;     
}
foreach($lg as $key=>$value) {
       $content = preg_replace("/".$key."/i", $lg[$key], $content);
}   
echo $content;
 
Hi ja das klingt logisch.

Allerdings klappt deine Lösung nicht mehr mit meinem Templateparser.

Ich werde mal den Code posten:
PHP:
<?php
// config.php

// Templateparser Script
function template($template)
{
$templatefolder = "templates"; // Template Ordner
$endung ="htm"; // Templatedatei-Endung
return str_replace("\"","\\\"",implode("",file($templatefolder."/".$template.".".$endung)));
} 

?>

Vielleicht beschreibe ich einfach mal wie ich meine Idee verwenden möchte !!
  • Template Parser baut Seite zusammen siehe function template
  • Template wird ausgegeben (Standart)
  • Function Preg_Replace soll vorhandenen Text durch Sprachvariablen ersetzen
  • Template soll ausgeben werden ( Nach Sprachwechsel)

Bloß denke ich, dass man vielleicht schon vorher die preg_replace function einsetzen sollte, nicht erst wenn man das template bereits schon ausgibt.

Hoffe mein Vorhaben ist nun verständlicher :)

Mfg. Oliver
 

Neue Beiträge

Zurück