Sí, en realidad mencioné que lo había cambiado pero olvidé hacerlo. Volvé a fijarte en el código que pegué antes y ahora sí lo dejé como debería ser.
No me había fijado antes, pero hay un problema de orden en el código. Es lógico el comportamiento que describís:
La primera vez que hacés clic, aún no existe $_SESSION['lang'] (o está como "es")
el caso es que primero se incluye el archivo y DESPUÉS se asigna el nuevo valor pasado por GET a la variable de sesión.
A ver si ahora sí queda
Código PHP:
session_start();
if (isset($_GET['lang'])) {
// el valor que tiene prioridad es el de GET, por eso se asigna de entrada
$_SESSION['lang'] = $_GET['lang'];
} elseif ( !isset($_SESSION['lang']) ) {
// si no tengo la variable GET ni la de sesión, creo la variable de sesión
// con el valor por defecto.
$_SESSION['lang'] = "es";
}
// para terminar, sin importar el caso, defino $lang con el valor de la variable de sesión
// en este punto podrías quitar la variable $lang y usar siempre $_SESSION['lang']
$lang = $_SESSION['lang'];
include( 'lang/' . $lang . EX );
Ya que estamos en esto yo le agregaría algo de seguridad: cambiar el primer IF por:
Código PHP:
$idiomas = array('es', 'en');
if ( isset($_GET['lang']) AND in_array($_GET['lang'], $idiomas) ) {
...
}
Esto aseguraría que solamente se acepta el "nuevo" idioma si la variable contiene es, o en.
Y te lo haría más fácil si en el futuro por algún motivo quisieras agregar otro idioma.
Saludos.