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 ^-^')