Salve,

Sto realizzando un template engine in un contesto multilanguage.

Dispongo dei seguenti file:

- home.php
- home.html.tpl
- languages/en.php
- languages/it.php
- configurazione.php
- template.php


Per il momento analizziamo la parte dedicata alle lingue:

configurazione.php

Codice PHP:
<?php

//Lingua di default
$defaultlang "it";

//Cartella dei file di lingua (relativa in base alla posizione del file di config)
$langpath "languages";

//Iniziamo ad avviare le sessioni (toglietelo se già le avete aperte)
session_start();

//Se esiste la variabile di sessione 'lingua'
if (isset($_SESSION['lingua'])) { 
    
//Se esiste il parametro WEB inviato tramite GET 'lang'
    
if(isset($_GET['lang'])) {
        
//Effettuiamo qualche aggiusto per eventuali hack...
        
$_GET['lang'] = str_replace("/",""trim(strtolower($_GET['lang'])));
        
//Se esiste il file di lingua corrispondente al parametro GET richiesto
        
if (is_file($langpath."/".$_GET['lang'].".php")) {
            
//Imposta la sessione 'lingua' con la lingua scelta
            
$_SESSION['lingua'] = $_GET['lang'];
        
//Altrimenti
        
} else {
            
//Imposta la sessione 'lingua' in quella di default
            
$_SESSION['lingua'] = $defaultlang;
        }
    }
//Altrimenti
} else {
    
//Imposta la sessione 'lingua' in quella di default
    
$_SESSION['lingua'] = $defaultlang;
}
//Finalmente includiamo il file di lingua giusto
include($langpath."/".$_SESSION['lingua'].".php");

?>
languages/it.php

Codice PHP:
<?
//Impostiamo data, ora e giorni della settimana, insomma tutto in italiano
setlocale(LC_ALL"it_IT");

//Iniziamo quindi con i contenuti in italiano del sito
$trad['titolo'] = "BlaBlaBla";
$trad['autore'] = "Bla....";
?>

Ora il template:

template.php

Codice PHP:
<?
class sysTemplate
{
  var 
$template;

  function 
sysTemplate($ts=array(),$cache='d_cache.txt',$sec=3600,$tpl='tpl.html')
  {
    if(!
$this->template=$this->r($cache,$sec))
    {
      (@
file_exists($tpl))?$this->template=@file_get_contents($tpl):die('
      Attenzione: Il file '
.$tpl.' non è presente');
      
$this->parserT($ts,$cache);
    }
  }

  function 
parserT($ts,$cache)
  {
    if(@
count($ts)>0)
    {
      foreach(
$ts as $t=>$d)
      {
        
$d=(@file_exists($d))?$this->getFile($d):$d;
        
$this->template=@str_replace('{'.$t.'}',$d,$this->template);
      }
      
$this->buildCache($cache,$this->template);
    }else{
      die(
'Attenzione: impossibile eseguire il replace dei tags.');
    }
  }

  function 
getFile($doc)
  {
    @
ob_start();
    include(
$doc);
    
$contenuto=@ob_get_contents();
    @
ob_end_clean();
    return 
$contenuto;
  }

  function 
buildCache($cache,$contenuto)
  {
    
$f=@fopen($cache,'w');
    @
fwrite($f,$contenuto);
    @
fclose($f);
  }

  function 
r($cache,$sec)
  {
    if(@
file_exists($cache)&&@filemtime($cache)>(@time()-$sec))
    {
      return @
file_get_contents($cache);
    }
    return 
false;
  }
   
  function 
show()
  {
    return 
$this->template;
  }
}
?>
e i file:

home.php

Codice PHP:
<?php

//Recupero il valore di lang
$lang $_GET['lang'];
//Se la variabile lang è nulla viene selezionata di default
//la lingua italiana (it)
if ($lang == FALSE)
{
    
$lang "italiano";
}

//Includo il file di linguaggio interessato
require("languages/{$lang}.php");
includeLang('home');
//Aggiungo dei link per cambiare la lingua
echo "Scelta:
"
;
echo 
"[url='" $_SERVER[']IT[/url] - ";
echo "[url='" . 
$_SERVER[']EN[/url]";



@require_once(
'template.php');

$temp=&new sysTemplate($ts,'cache.txt',0,'home.tpl.html');
echo 
$temp->show();

?>
e home.html.tpl

Codice PHP:
<html>
<
head>
<
title>{titolo}</title>
<
meta 
http
-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
link rel="stylesheet" type="text/css" href="style.css" />
</
head>
<
head>
<
body>
<
div id="autore">{autore}</div>
</
body>
</
html

Purtroppo per quanto riguarda le lingue sono riuscito a risolvere in questo modo.
Ma nel momento in cui lo devo combinare con il template engine, ho dei problemi.

Vorrei ottenere che la pagina HOME.PHP ricevi la lingua da languages/IT.PHP e il template da HOME.HTML.TPL e che in quest'ultimo io possa utilizzare il {titolo} estrapolandolo dal file di lingua:

$trad['titolo'] = "BlaBlaBla";

Mentre invece questa cosa non avviene.. E mi stampa sempre {titolo} cosi come è scritto senza leggere nulla dal file di lingua.

Sono sicuro di aver sbagliato il template engine, e di non saperlo utilizzare per il mio scopo.
Potreste aiutarmi a delucidare i miei dubbi e fare luce sui miei errori sia in pratica (aiuto con esempio di codice) sia in logica (dal momento in cui non costruisco un sito web, ma voglio studiare e imparare tutto su questi affascinanti linguaggi di programmazione )

Grazie infinite per tutto coloro che si accingeranno a leggere e "capire" il mio problema (spiegato malissimo ^-^')