Newsgroup: it.comp.www.php
Titolo: Sito multilingua - info sulle variabili di sessione

Ciao a tutti,
vorrei capire meglio come gestire un sito multilingua usando le
variabili di sessione.
Attualmente, ho impostato il sito con una pagina di benvenuto che
permette di selezionare la lingua.
La selezione della lingua avviene con un piccolo script PHP tipo
questo all'inizio della pagina in questione (prima della sezione
header):
<?php
session_start();
if(isset($_GET['lingua'])) {
	$_SESSION['lingua']=$_GET['lingua'];
	header("Location:".$lingua."/default.htm");
}
 
if (!isset($_SESSION['lingua'])) {
	session_register ('lingua');
	$_SESSION['lingua'] = 'it';
}
?>
Fin qui tutto bene, ma i problemi iniziano se qualcuno entra sul sito
da una pagina specifica che non e' la pagina di selezione lingua.
Le pagine successive alla selezione lingua, infatti, non hanno il
controllo della presenza della variabile di sessione, ma ne leggono il
contenuto soltanto.
Come posso controllare se la variabile lingua e' stata settata e agire
di conseguenza:
- la variabile e' settata correttamente: visualizza la pagina corrente
nella lingua specificata
- la variabile NON e' settata: vai alla pagina di selezione lingua.
Non riesco a far funzionare questo 'semplice' meccanismo.
Chi mi puo' aiutare?
Vi ringrazio in anticipo.
Tony

 - la variabile NON e' settata: vai alla pagina di selezione lingua.
Esattamente come hai scritto tu.
Fai un controllo in ogni pagina, all'inizio del file, prima di qualsiasi 
output.
Se la variabile è settata, procedi.
Altrimenti fai una redirezione alla pagina di scelta.
Ciao
Marco 

Altrimenti fai una redirezione alla pagina di scelta.
e' proprio qui che mi inceppo.
in caso di test negativo (variabile non settata) uso header("location:
selezione_lingua.php")
ma come faccio, in caso di un test positivo (lingua settata) a farlo
continuare nella stessa pagina?
Se uso header("location: _SELF"), logicamente, mi va in loop.
:(.
Ciao  e grazie ancora.
tony

 continuare nella stessa pagina?
// inizio della pagina
if(NON ho scelto la lingua){
    header("location: sceltaLingua.php");
    exit;
}
...qui prosegui con il contenuto della pagina "corretta"
// fine della pagina
Ciao
Marco 

Grazie,
risolto.
in effetti, ho cercato di complicarmi la vita per niente (LOL).
Ho risolto facendo cosi', seguendo i tuoi suggerimenti; se puo'
servire a qualcuno:
nella pagina di seleizone lingua ho inserito questo codice:
//INIZIO PAGINA
<?php session_start(); 
if(isset($_GET['lingua'])) {
	$_SESSION['lingua']=$_GET['lingua'];
	header("Location: home.php");
  }
//SEGUITO PAGINA...
In ogni pagina successiva ho inserito questo controllo (inserito in un
file incluso):
<?php session_start();
if (!isset($_SESSION['lingua'])){
	header("Location: index.php");
	exit;
}
?>

 file incluso):
non so se hai notato, ma quando usi header location, il nome della pagina ti 
rimane inviariato (rimane lo stesso che richiami te, anche se in realta' e' 
l'index o altro).  questo a volte puo' essere un 'problema'. 


bruttino :-(
crei un file dove ficchi le impostazioni
poi questo file include i contenuti
<?
session _start(); // te tocca tenerlo qui
include("miaconf.php");
switch($_GET['altro']){
case 1:
include("quellopassato.php");
break;
?>
miaconf.php
<?
if(empty($_SESSION['lingua'])){
 qui so che le espressioni regolari lo fanno ma non sono ferrato
$_SESSION['lingua']= $risultato;
}
switch($_SESSION['lingua']){
default:
case "it":
include("ita.php");
 (che puo diventare una selezione automatica leggendo la sringa dal browser)
break;
case "uk":
include("uk.php");
break;
}
lingua se la sceglie in automatico "cazzi suoi" o la sceglie da un menu


sweetman ha scritto:

Io ho trovato questo se ti può interessare
			if(isset($_GET['lang'])and(!isset($_SESSION['lang']))){
				$_SESSION['lang']=$_GET['lang'];
				$lang=$_SESSION['lang'];
			}
			elseif(!isset($_GET['lang'])and(isset($_SESSION['lang']))){
				$lang=$_SESSION['lang'];
			}
			elseif(isset($_GET['lang'])and(isset($_SESSION['lang']))){
				// per eliminare una specifica variabile di sessione useremo:
				unset($_SESSION['lang']);
				$_SESSION['lang']=$_GET['lang'];
				$lang=$_SESSION['lang'];
			}
			else{
				$lang=$conf['sito']['linguaggio'];
			}
			// registra la variabile $lang
			session_register("lang");
			// se la lingua richiamata fa parte dell'array
			if(in_array($lang, $array_file)){
				include($conf['cartella']['linguaggio'].'/'.$lang.'.php');
			}
			else{
 
include($conf['cartella']['linguaggio'].'/'.$conf['sito']['linguaggio'].'.php');
			}