- Home
- Categorie
- Coding e Sistemistica
- Coding
- Sito multi-lingua in PHP. Dov'è l'errore?
-
Sito multi-lingua in PHP. Dov'è l'errore?
Ciao a tutti

Sto realizzando un sito in PHP con più lingue.
Nell'index voglio mettere una parte di codice che mi riconosca automaticamente la lingua del browser utilizzato dall'utente che naviga sul sito e poi caricare il relativo file con le variabili tradotte.Eccovi il codice:
<?php # Recupero il valore della lingua usata $language = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $lang = substr($language,0,2); $lang = $_GET['lang']; # Includo il file di linguaggio interessato require("{$lang}.php"); # Stampo a video il testo nella lingua selezionata echo $output[0] . " " . $output[1] . "<br>"; echo $output[3] . "<br><br>"; # Aggiungo dei link per cambiare la lingua echo $output[6] . "<br>"; echo "<a href='" . $_SERVER['PHP_SELF'] . "?lang=it'>IT</a> - "; echo "<a href='" . $_SERVER['PHP_SELF'] . "?lang=en'>EN</a> - "; echo "<a href='" . $_SERVER['PHP_SELF'] . "?lang=de'>DE</a> - "; echo "<a href='" . $_SERVER['PHP_SELF'] . "?lang=fr'>FR</a>"; ?>Il file {$lang}.php contiene le variabili $output[xxx] tradotte nella lingua definita.
Il problema sta nel fatto che quando faccio girare per la prima volta questo piccolo script mi viene generato un errore:
Notice: Undefined index: lang in C:\Programmi\EasyPHP5.2.10\www\Script di prova\Multilingua\Lingua.php on line 5Se invece scelgo una lingua dal menu per cambiare lingua allora il messaggio di errore scompare...
Significa che c'è un problema quì: $lang = $_GET['lang'];
Di preciso dove sbaglio?

Qualcuno sa aiutarmi?Grazie a tutti

Ciao ciao!

-
Guarda qui:
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $lang = substr($language,0,2); $lang = $_GET['lang'];Così facendo stai sovrascrivendo il valore che avevi prima preso da $language.
Per ovviare a tale problema, potresti fare così: SE non passi niente da GET allora usi il valore che prendi da $_SERVER, altrimenti usi quello da GET.
Come fai a vedere se in GET c'è una variabile lang? Usi array_key_exists.
$lang = (array_key_exists('lang', $_GET)) ? $_GET['lang'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);con questo dovresti ovviare al tuo problema.
$lang =
-
@PaTeR said:
Guarda qui:
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $lang = substr($language,0,2); $lang = $_GET['lang'];Così facendo stai sovrascrivendo il valore che avevi prima preso da $language.
Per ovviare a tale problema, potresti fare così: SE non passi niente da GET allora usi il valore che prendi da $_SERVER, altrimenti usi quello da GET.
Come fai a vedere se in GET c'è una variabile lang? Usi array_key_exists.
$lang = (array_key_exists('lang', $_GET)) ? $_GET['lang'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);con questo dovresti ovviare al tuo problema.
$lang =mmm non mi è tanto chiaro...
E' vero che comunque che nello script originale (pescato sul web) non c'era "$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];"... insomma, sono stato io ad aggiungerlo perchè pensavo che ovviamente GET non trovasse nulla.
Però dal tuo suggerimento, mi devi scusare, non sono riuscito a capire come risolvere il problema.Facciamo finta che quel codice non esiste.
Come faccio nella pagina index a riconoscere la lingua del browser, ad inserire questo valore in una variabile e a rimandare questa variabile (con POST o GET?) ad un'altra pagina?Abbi pazienda con me

-
Potresti usare le sessioni per portarti dietro il valore della lingua scelta.
Dal fatto che il codice usasse $_GET pensavo che fosse possibile adoperare una scelta tramite per esempio una select, pertanto il valore a cui si dovrebbe dare più peso sarebbe questo.
Insomma... in ordine di peso:
GET - SESSION - HTTP_ACCEPT_LANGUAGEL'informazione che prendi la metti in una variabile di sessione così te la puoi portare sempre dietro.
SE si usa una select o quant'altro per passarti il valore della lingua, verrà creata ( in GET o POST dipende dal tipo di form che implementi ) una chiave nell'array _GET o _POST, e sarà questo il valore più importante, perchè deciso dall'utente!
$lang = $_SESSION['lang'] = $_GET['lang'];
Così nel frattempo ce lo scriviamo nella sessione e ce lo possiamo portare in giro durante la navigazione.
Se non c'è niente in _GET? Vediamo nella sessione. Se la sessione è vuota? vediamo da HTTP_ACCEPT_LANGUAGE.
Io farei così!
-
Io farei così!
Ok, grazie

ciao ciao
