Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/10/2012, 06:22
noruas
 
Fecha de Ingreso: junio-2012
Mensajes: 80
Antigüedad: 11 años, 10 meses
Puntos: 11
Pregunta Web multi-idioma usando "session_start();"

Buenas.

Estoy liado con el tema de cambiar el cuerpo de texto de mi web en varios, antes tenia una pagina por cada idioma, y claro cada vez que tenia que editar algo tenia que editar en muchos documentos, asi que pense en sustituir el cuerpo de texto por variables y en funcion del idioma que pusiera un contenido u otro. Todo eso fue facil, el problema ha llegado cuando quiero guardar el valor de una variable "$idioma" dentro de una sesion para cuando el usuario valla a otra pagina conserve el valor del idioma elegido.

La pagina adquiere por un lado el idioma por defecto de su navegador usando

Código PHP:
Ver original
  1. $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
  2. $languages = strtolower($lang);
  3. $languages = str_replace( ' ', '', $languages );
  4. $languages = explode( ",", $languages );
  5. $idioma = $languages[0];

Eso me devuelve valores tipo: "es", "es-es", "en-us", "en"... Que luego uso para cambiar el valor de una variable $idioma que introduzco en una funcion con un switch donde tengo almacenados los textos en distintos idiomas.

Y luego tengo un menu que es en realidad un formulario que permite cambiar el valor de la variable a otro idioma (con estilos css para que parezca un menu de botones).

Código HTML:
Ver original
  1. <form method="post">
  2.    <input hidden="true" type="text" value="fr" name="languages" />
  3.    <input class="fr" type="submit" value="Fran&ccedil;aise" />
  4. </form>
  5.  
  6. <form method="post">
  7.   <input hidden="true" type="text" value="es" name="languages" />
  8.   <input class="es" type="submit" value="Español" />
  9. </form>
Hay varios idiomas mas, pero con eso os haceis una idea.

Y recojo al final todo de la siguiente forma:

Código PHP:
Ver original
  1. <?php
  2.     require ('idiomas.php');
  3.     if ($_POST) {
  4.         $idioma = $_POST["languages"];
  5.     }elseif ($_GET){
  6.         $idioma = $_GET["languages"];
  7.     }else{
  8.         $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
  9.         $languages = strtolower($lang);
  10.         $languages = str_replace( ' ', '', $languages );
  11.         $languages = explode( ",", $languages );
  12.         $idioma = $languages[0];
  13.     }        
  14. ?>

Hasta aquí todo funciona perfectamente.

Mi problema empieza aquí, como combino esto con las sesiones para guardar el valor de la variable y que anule todo eso si el valor ya ha sido almacenado en la variable idioma desde la pagina de procedencia.

Pense en algo asi, pero no funciona (del todo):

Código PHP:
Ver original
  1. <?php
  2.         require ('idiomas.php');
  3.         session_start();
  4.        
  5.         if(isset($_SESSION['language'])){
  6.             if ($_POST){
  7.                 $_SESSION['language'] = $_POST["languages"];
  8.                 $idioma = $_SESSION['language'];
  9.             }elseif ($_GET){
  10.                 $_SESSION['language'] = $_GET["languages"];
  11.                 $idioma = $_SESSION['language'];
  12.             }else{
  13.                 $idioma = $_SESSION['language'];
  14.             }
  15.         }else{
  16.             if ($_POST){
  17.                     $idioma = $_POST["languages"];
  18.                     $_SESSION['language'] = $idioma;
  19.             }elseif ($_GET){
  20.                     $idioma = $_GET["languages"];
  21.                     $_SESSION['language'] = $idioma;
  22.             }else{
  23.                     $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
  24.                     $languages = strtolower($lang);
  25.                     $languages = str_replace( ' ', '', $languages );
  26.                     $languages = explode( ",", $languages );
  27.                     $idioma = $languages[0];
  28.                     $_SESSION['language'] = $idioma;
  29.             }
  30.         }
  31.     ?>

Lo máximo que he sacado así es que si me voy a otra pagina vuelva a salir por defecto el idioma y no guarde el valor de la variable, peeeero si en la pagina de destino cambio el idioma y vuelvo al index.php si que me guarda el idioma que tenia... Osease me funciona desde la otra web al index pero no del index a otra web y siempre y cuando una vez en la web de destino modifique el idioma denuevo para volver a la anterior.

No paro de probar y probar pero no sale nada... A ver si me podeis hechar un cable.

PD: una forma de sacar esto fue poner una url dinamica en el menu en funcion del idioma, eso si funciono, pero me generaba URLs muy feas... Así que me gustaria hacerlo de esta forma.

PDD: no puedo o no consigo que mi proveedor active o haga funcionar el mod_rewrite para enmascar las URLs de forma amigable asi que solo me queda esto creo .