Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Sito multilingua

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154

    Sito multilingua

    Sto provando a creare un sito multilingua usando come riferimento questa guida.
    Ho un file config.php dove inizializzo una sessione in cui viene memorizzata la lingua scelta. Solo che la lingua non cambia e rimane sempre in italiano. Il php non dà nessun errore e nessun warning; proprio non riesco a capire il problema. Posto il codice del file config.php
    codice:
    session_start();
    $defaultlang = "it"; 
    $browserlang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    
    if (isset($_SESSION['lingua'])) { 
        if(isset($_GET['intl'])) { 
            if (is_file("lang/".$_GET['intl'].".php")) { 
                $_SESSION['lingua'] = $_GET['intl']; 
            } else { 
                $_SESSION['lingua'] = $defaultlang; 
            } 
        } 
    } else { 
        if(isset($browserlang) and !empty($browserlang) and is_file("lang/".$browserlang.".php")) { 
            $_SESSION['lingua'] = $browserlang; 
        } else { 
        $_SESSION['lingua'] = $defaultlang; 
        } 
    } 
    if(preg_match('/[a-z]+/',$_SESSION['lingua']) && is_file("lang/".$_SESSION['lingua'].".php")) { 
        include("lang/".$_SESSION['lingua'].".php"); 
    } else { 
        include("lang/".$defaultlang.".php"); 
    }
    Se nell'url scrivo ?intl=en ad esempio, invece di cambiare la lingua non succede nulla.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    "nulla" non è possibile... semplicemente fai un po' di debugging... p.es. metti dei "print" dopo ogni diramazione per vedere quale parte di codice viene eseguita... noto cmq che all'inizio $_SESSION['lingua'] verosimilmente non è settato ed allora si passa al ramo else, dove isset($browserlang) and !empty($browserlang) sono inutili perchè setti tu la variabile all'inizio (sempre true, dunque)... il parametro _GET viene dunque ignorato. Mi sembra quindi sbagliata la logica dei controlli

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    Dicevo nulla nel senso che la lingua rimane sempre it, anche se viene passato en o altro nella querystring. Per il resto proverò a rivedere i controlli come mi hai suggerito, ma non penso sia quello il problema perchè come dicevo mi sono rifatto a questa guida e non ho fatto altro che copiare il codice. Agli utenti e all'autore di quel post funzionava sicuramente credo

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mah... rincontrolla, così a occhio mi sembra sbagliato... la prima volta mi pare che faccia come ti ho detto, poi a un eventuale refresh (e solo allora) controlla $_GET (che infatti è controllato solo in un punto), ma deve essere passato sempre (se a un terzo passaggio non lo ripassi come parametro reimposta il default e la sessione non servirebbe a nulla, allora)

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    Niente da fare, ho rivoltato il codice in tutti i modi possibili, ma il risultato è sempre uguale: non legge la variabile $_GET e la lingua rimane sempre la stessa. Bho

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    A questo punto mi chiedo se non sia un problema di configurazione di php...

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    non credo... non so che prove hai fatto... semplicemente io farei un controllo del tipo:

    SE il parametro $_GET è settato usa questo per la lingua
    ALTRIMENTI se c'è già una variabile di sessione usa quella, altrimenti usa un default, con una cosa tipo:

    Codice PHP:
    // ...
    $defaultlang "it"// lingua base
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $defaultlang substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 02); // se c'è nel browser invece uso questa
    // ...
    $lang = ((isset($_SESSION['lingua']))?($_SESSION['lingua']):($defaultlang)); // se c'è cià in sessione uso piuttosto questa
    if (isset($_GET['lingua'])) $lang $_GET['lingua']; // se c'è nei parametri è da preferire
    // ...
    $_SESSION['lingua'] = $lang// imposto la sessione
    // ... 
    Poi usi "$lang" per scegliere il file...

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    Ho ridotto il codice al minino per capirci qualcosa
    codice:
    session_start();
    if (isset($_SESSION['lingua'])) {
    	if(isset($_GET['intl'])) {
    		$_SESSION['lingua']=$_GET['intl'];
    		}else{
    		$_SESSION['lingua']="it";
    		}
    	}	
    include("lang/".$_SESSION['lingua'].".php");
    In questo modo prende il parametro GET e mostra la lingua giusta. Ma solo per una volta.
    Come faccio a farglielo ricordare per tutte le altre pagine? Dovrei impostare il ciclo nel modo giusto ma non riesco a capire come fare.

  9. #9
    Utente di HTML.it L'avatar di bode
    Registrato dal
    Feb 2007
    Messaggi
    304
    basta mettere nelle altre pagine

    Codice PHP:
    session_start(); 

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    session_start() c'è in tutte le pagine, perchè il codice che ho postato viene incluso in tutte le pagine del sito. Ci deve essere un errore nel ciclo di if, ma non riesco proprio a capire come sistemarlo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.