Domanda

Sono solo in cerca di qualche consiglio. Sto creando un sito web che offre (almeno) 2 lingue. Il modo in cui sto sua creazione è quello di utilizzare i file XML per la lingua, PHP per recuperare i valori nei nodi XML. Diciamo che avete un file XML, in corso di caricamento come segue:

<?php
$lang = "en";
$xmlFile = simplexml_load_file("$lang/main.xml");
?>

Una volta che il contenuto del file sono disponibili, ho appena uscita ogni nodo in un tag HTML in questo modo:

<li><?php echo $xmlFile->navigation->home; ?></li>
which in turn is equal to : <li><a href="#">Home</a></li>
as a nav bar link.

Ora, il modo in cui io sono il passaggio lingue è cambiando il valore della variabile "$ lang", attraverso un "$ _POST", in questo modo:

if(isset($_POST['es'])){
$lang = "es";
}elseif(isset($_POST['en'])){
$lang = "en";
}

Il valore della variabile "$ lang" viene resettato e il nuovo file viene caricato, carico, nonché tutti i nuovi nodi del nuovo file XML, quindi la modifica della lingua.

Mi chiedo solo se c'è un altro modo per reimpostare la variabile "$ lang" usando qualcos'altro, diverso da "$ _POST" o "$ _GET". Non voglio usare string query sia. So che potrei usare JavaScript o jQuery per raggiungere questo obiettivo, ma mi piacerebbe rendere il sito non troppo affidabili su JavaScript.

Apprezzerei tutto idee o consigli.

Grazie

È stato utile?

Soluzione

Vorrei andare per variabile di sessione.

All'inizio delle tue pagine avrete:

 if (!isset($_SESSION['language']))
    $_SESSION['language'] = "en";

Allora dovrai alcuni link per cambiare la lingua

<a href="changelanguage.php?lang=es">Español</a>
<a href="changelanguage.php?lang=fr">Français</a>

Changelanguage.php è semplicemente qualcosa di simile

$language = $_GET['lang'];
// DO SOME CHECK HERE TO ENSURE A CORRECT LANGUAGE HAS BEEN PASSED
// OTHERWISE REVERT TO DEFAULT
$_SESSION['language'] = $language;
header("Location:index.php"); // Or wherever you want to redirect

Altri suggerimenti

Avete pensato di usare $_SERVER["HTTP_ACCEPT_LANGUAGE"]? Qualcosa di simile a questo:

if ($_SERVER["HTTP_ACCEPT_LANGUAGE"]) { 
    $langs = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
    for ($i = 0; $i < count($langs); $i++) { 
        if ($langs[$i] == "en") { 
            $lang = "en";
            break;
        } 
        elseif($langs[$i] == "es") {
            $lang = "es";
            break;
        }
    } 
}

Naturalmente, un'istruzione switch potrebbe andare bene un po 'meglio qui, e c'è di più modi di dire inglese che solo en, ma questo dovrebbe funzionare, senza che l'utente debba fare una cosa. Se cambiano manualmente, conservarlo in un cookie, come per ogni risposta di Ben.

Che ne dite di riporlo in un cookie?

Il modo più comune sarebbe quella di utilizzare come parte dell'URL ed estrarlo quando una pagina viene caricata:

http://www.your-site.com/en/somepage

Si sta utilizzando un framework?

Il più comune modo per passare un identificatore di lingua è sottodominio.

http://en.wikipedia.com/

entrambi i sottodomini deve puntare nella stessa directory e la lingua attuale può essere facilmente estratto dal HTTP_HOST

e per memorizzare la lingua deposita la soluzione è gettext

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top