Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/03/2010, 17:43
Javito73
 
Fecha de Ingreso: febrero-2010
Mensajes: 27
Antigüedad: 14 años, 3 meses
Puntos: 0
Problemas con sesiones

Hola a todos.

Tengo una web que se supone debe funcionar en varios idiomas.
Soy nuevo en php y en principio estaba intentando controlar el idioma a través de una sesión con información que he visto en el foro.

El problema que tengo es que no parece guardar la información y cunado me cambio de pagina vuelve al idioma por defecto.

Lo que tengo mas o menos es:

1. pagina inicio /
session_start($session); #inicio la sesion
header('Cache-control: private'); # IE 6 FIX
require_once('include/language.php'); # Funcion seleccion fichero de idiomas
include_once('Header.php'); # Cabecera de pagina
include_once('home.php'); # cuerpo de pagina
include_once('Footer.php'); # pie de pagina

2. fichero de selección de los lenguajes. En funcion de los valores de las variables de sesion selecciona un idioma para traducción de los textos.
La variable $language la he incluido por que la usaba anteriormente en las consultas a la b.d.

if(isSet($_GET['lang'])){
$lang = $_GET['lang'];
//registra sesion
$_SESSION['lang'] = $lang;
//define cookie
setcookie('lang', $lang, time() + (3600 * 24 * 30));
//busca en variables cookie y session
}else if(isSet($_SESSION['lang'])){
$lang = $_SESSION['lang'];

}else if(isSet($_COOKIE['lang'])){
$lang = $_COOKIE['lang'];

}else{
$lang = 'es';

}

# seleccion del fichero de idiomas.
switch ($lang) {
case 'es':
$lang_file = 'lang.es.php';
$_SESSION['language'] = 1;
break;
case 'en':
$lang_file = 'lang.en.php';
$_SESSION['language'] = 2;
break;
case 'fr':
$lang_file = 'lang.fr.php';
$_SESSION['language'] = 3;
break;
default:
$lang_file = 'lang.es.php'; #por defecto Español
$_SESSION['language'] = 1;
}

include_once ''.$lang_file;

3. una tercera pagina donde selecciono el idioma, en principio tengo un switch que mira si le paso un parametro (por defecto no) y si cambio el lenguaje en la pagina la vuelvo a llamar con el codigo del nuevo idioma y cambiaria el valor de la variable de sesion lang

if (isset($_GET["id"])) {
$newlanguage = $_GET["id"];
switch ($newlanguage) {
case 1: #español
$_SESSION['lang'] = 'es';
break;
case 2: #ingles
$_SESSION['lang'] = 'en';
break;
case 3: #frances
$_SESSION['lang'] = 'fr';
break;
case 4: #portugues
$_SESSION['lang'] = 'po';
break;
case 5: #chino
$_SESSION['lang'] = 'ch';
break;
default: #por defecto español
$_SESSION['lang'] = 'es';
break;
}
} else {
$_SESSION['lang'] = 'es';
};
?>
<?php require_once('include/language.php'); ?>

...
link para ingles
<a href="countries.php?id=2"><img src="image/home/united_kingdom.gif" />United Kingdom</a></li>

...

En la pagina de seleccion cambia perfectamente pero si vuelvo al inicio o me cambio de pagina me vuelve al idioma por defecto (español)

en cada pagina tengo
$language = $_SESSION['language']; (lo deberia cambiar la funcion de lenguaje)
$lang = $_SESSION['lang']; (se me queda vacio)

Alguien me puede echar una mano o decirme como puedo implementarlo.

Muchas gracias.