Foros del Web » Programando para Internet » PHP »

COOKIE en Web con varios idiomas

Estas en el tema de COOKIE en Web con varios idiomas en el foro de PHP en Foros del Web. Hola forer@S! mirar tengo este codigo que permite cambiar de idioma mediante un array. El problema es que si por ejemplo el idioma por defecto ...
  #1 (permalink)  
Antiguo 29/09/2010, 02:48
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
COOKIE en Web con varios idiomas

Hola forer@S!

mirar tengo este codigo que permite cambiar de idioma mediante un array.

El problema es que si por ejemplo el idioma por defecto en index.php es Ingles, pero el usuario selecciona el idoma en Español, y despues se va a otra pagina, por ejemplo cursos.php, pues vuelve a aparecer el idioma en Ingles, en lugar de recordar que el idioma que selecciono el usuario es el Español.

He estado viendo manuales, y creo que necesito una COOKIE en php pero no se com aplicarlo, necesito una ayuda por favor.

Os paso el codigo que tengo:

index.php
Código PHP:
<?php  

if (isset ($_GET['lang'])) 

    
$idioma $_GET['lang']; 

elseif (
preg_match("/^es/"$_SERVER['HTTP_ACCEPT_LANGUAGE']))  

$idioma "es"

else  

$idioma "en"


        

$idiomas = array(  
    
'en' => array( 
        
'otro_idioma' => 'es'
        
'portada' => 'Home'//Menú 

 
    
), 
    
'es' => array( 
        
'otro_idioma' => 'en'
        
'portada' => 'Portada'//Menú 

    
),        
); 
?> 
<html>
<body>
<a href="index.php?lang=<?php echo $idiomas['en']['otro_idioma']; ?>">Espa&ntilde;ol</a> 
<a href="index.php?lang=<?php echo $idiomas['es']['otro_idioma']; ?>">English</a> 

<a href="index.php" title="<?php echo $idiomas[$idioma]['portada'];?>">+ <?php echo $idiomas[$idioma]['portada'];?></a> 

<a href="cursos.php" title="second page">Cursos</a>
</body>
</html>
  #2 (permalink)  
Antiguo 29/09/2010, 03:15
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: COOKIE en Web con varios idiomas

Hay varias maneras de hacerlo. Cookies o Sessiones. Personalmente mejor sessiones. Al menos yo suelo utilizar sessiones.

Una manera sencilla de hacer que reordara el idioma que ha elejido el usuario, sería, como digo, guardarlo en una session.
Código PHP:
Ver original
  1. <?php  
  2. if (isset ($_GET['lang']))
  3. {
  4.     $idioma = $_GET['lang'];
  5.     $session = $_SESSION['idioma'] = $idioma;
  6. }
  7. elseif (preg_match("/^es/", $_SERVER['HTTP_ACCEPT_LANGUAGE']))  
  8. {
  9. $idioma = "es";
  10. }
  11. else  
  12. {
  13. $idioma = "en";
  14. }
  15.  
  16.        
  17.  
  18. $idiomas = array(  
  19.     'en' => array(
  20.         'otro_idioma' => 'es',
  21.         'portada' => 'Home', //Menú
  22.  
  23.  
  24.     ),
  25.     'es' => array(
  26.         'otro_idioma' => 'en',
  27.         'portada' => 'Portada', //Menú
  28.  
  29.     ),        
  30. );
  31. ?>
  32. <html>
  33. <body>
  34. <a href="index.php?lang=<?php echo $idiomas['en']['otro_idioma']; ?>">Espa&ntilde;ol</a>
  35. <a href="index.php?lang=<?php echo $idiomas['es']['otro_idioma']; ?>">English</a>
  36.  
  37. <a href="index.php" title="<?php echo $idiomas[$idioma]['portada'];?>">+ <?php echo $idiomas[$idioma]['portada'];?></a>
  38.  
  39. <a href="cursos.php" title="second page">Cursos</a>
  40. </body>
  41. </html>


Luego en tu página cursos.php bastaria con poner al principio de la misma el session_start(); y llamar a $_SESSION['idioma'];

De esta manera en todo momento recordara el idioma quie ha elejido.

:ados:
  #3 (permalink)  
Antiguo 29/09/2010, 04:41
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: COOKIE en Web con varios idiomas

No hay manera, pongo la pagina de cursos.php haber donde esta el error. Además me he dado cuenta de la necesidad de crear un archivo idiomas.php para no repetir el array en cada pagina, y pongo esto require 'idiomas.php'; pero tampoco furru ayudaaa

cursos.php
Código PHP:
<?php  
session_start
();
$session $_SESSION['idioma'] = $idioma;
$idiomas = array(  
    
'en' => array( 
        
'0' => 'es'
        
'1' => 'Home'//Menú 
        
'2' => 'Welcome to Courses',   
        
'3' => 'This is the home page'
        
'4' => 'go to Courses'
        
'5' => 'go to Home'
 
    ), 
    
'es' => array( 
        
'0' => 'en'
        
'1' => 'Portada'//Menú 
        
'2' => 'Bienvenido a nuestros Cursos',  
        
'3' => 'Estas en la pagina de inicio',   
        
'4' => 'mira nuestros cursos',    
        
'5' => 'Ve la pagina de inicio'
     
 
    ),       
); 
?> 
<html>
<body>
<a href="cursos.php?lang=<?php echo $idiomas['en']['0']; ?>">Espa&ntilde;ol</a> 
<a href="cursos.php?lang=<?php echo $idiomas['es']['0']; ?>">English</a> 
 
<br><br><a><?php echo $idiomas[$idioma]['2'];?></a><br><br>
<a href="index.php?lang=<?php echo $idiomas['es']['0']; ?>"><?php echo $idiomas[$idioma]['5'];?></a>  

</body>
</html>

Última edición por manupalaya; 29/09/2010 a las 04:56
  #4 (permalink)  
Antiguo 29/09/2010, 05:45
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: COOKIE en Web con varios idiomas

Prueba así:

index.php

Código PHP:
Ver original
  1. <?php  
  2. if (isset ($_GET['lang']))
  3. {
  4.     $idioma = $_GET['lang'];
  5.     $session = $_SESSION['idioma'] = $idioma;
  6. }
  7. elseif (preg_match("/^es/", $_SERVER['HTTP_ACCEPT_LANGUAGE']))  
  8. {
  9. $idioma = "es";
  10. }
  11. else  
  12. {
  13. $idioma = "en";
  14. }
  15.  
  16. $idiomas = array(  
  17.     'en' => array(
  18.         'otro_idioma' => 'es',
  19.         'portada' => 'Home', //Menú
  20.  
  21.  
  22.     ),
  23.     'es' => array(
  24.         'otro_idioma' => 'en',
  25.         'portada' => 'Portada', //Menú
  26.  
  27.     ),        
  28. );
  29. ?>
  30. <html>
  31. <body>
  32. <a href="index.php?lang=<?php echo $idiomas['en']['otro_idioma']; ?>">Espa&ntilde;ol</a>
  33. <a href="index.php?lang=<?php echo $idiomas['es']['otro_idioma']; ?>">English</a>
  34.  
  35. <a href="index.php" title="<?php echo $idiomas[$idioma]['portada'];?>">+ <?php echo $idiomas[$idioma]['portada'];?></a>
  36.  
  37. <a href="cursos.php" title="second page">Cursos</a>
  38. </body>
  39. </html>

cursos.php

Código PHP:
Ver original
  1. <?php  
  2. if (empty($_GET['lang']))
  3. {
  4. $idioma = $_SESSION['idioma'];
  5. }else{
  6. $idioma = $_GET['lang'];
  7. $session = $_SESSION['idioma'] = $idioma;  
  8. }
  9.  
  10. $idiomas = array(  
  11.     'en' => array(
  12.         '0' => 'es',
  13.         '1' => 'Home', //Menú
  14.         '2' => 'Welcome to Courses',  
  15.         '3' => 'This is the home page',
  16.         '4' => 'go to Courses',
  17.         '5' => 'go to Home',
  18.  
  19.     ),
  20.     'es' => array(
  21.         '0' => 'en',
  22.         '1' => 'Portada', //Menú
  23.         '2' => 'Bienvenido a nuestros Cursos',  
  24.         '3' => 'Estas en la pagina de inicio',  
  25.         '4' => 'mira nuestros cursos',    
  26.         '5' => 'Ve la pagina de inicio',
  27.      
  28.  
  29.     ),      
  30. );
  31. ?>
  32. <html>
  33. <body>
  34. <a href="cursos.php?lang=<?php echo $idiomas['en']['0']; ?>">Espa&ntilde;ol</a>
  35. <a href="cursos.php?lang=<?php echo $idiomas['es']['0']; ?>">English</a>
  36.  
  37. <br><br><a><?php echo $idiomas[$idioma]['2'];?></a><br><br>
  38. <a href="index.php?lang=<?php echo $idiomas['es']['0']; ?>"><?php echo $idiomas[$idioma]['5'];?></a>  
  39.  
  40. </body>
  41. </html>

Debería de ir. Lo acabo de probar y si me va

Saludos,
  #5 (permalink)  
Antiguo 29/09/2010, 06:45
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: COOKIE en Web con varios idiomas

lo siento pero no funciona, mira con tu ejemplo:

1. limpia el cache y ve a la url

3. selecciona Español, y después haz clic en Cursos.

Podras ver que sale en Ingles.


Además por defecto cuando carga la pagina, no sale nada, es necesario hacer clic en un idioma.

Última edición por manupalaya; 29/09/2010 a las 07:50
  #6 (permalink)  
Antiguo 30/09/2010, 03:50
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: COOKIE en Web con varios idiomas

Buenas manu,

Lo he arreglado y ahora hace lo que quieres (o eso creo )

Veamos, cuando accedes a la página que sea y, no has elegido ningun idioma, por defecto se pone el idioma que tiene tu navegador.
Si por el contrario has elegido un idioma pues se pone el idioma elegido y se extiende por todas las páginas. En este caso, se extiende a cursos...

Aquí van los códigos.

index.php:

Código PHP:
Ver original
  1. <?php  
  2.  
  3. if ($_GET["lang"]) {
  4. $lang = $_GET["lang"];
  5. $_SESSION["idioma"]= $lang;
  6. } elseif (empty($_SESSION["idioma"]) && empty($_GET["lang"])) {
  7. $accion = (preg_match("/^es/", $_SERVER['HTTP_ACCEPT_LANGUAGE'])) ?  $idioma = "es" :  $idioma = "en";
  8. $_SESSION["idioma"]= $idioma;
  9. }
  10.  
  11.  
  12.  
  13. $idiomas = array(  
  14.     'en' => array(
  15.         'otro_idioma' => 'es',
  16.         'portada' => 'Home', //Menú
  17.  
  18.  
  19.     ),
  20.     'es' => array(
  21.         'otro_idioma' => 'en',
  22.         'portada' => 'Portada', //Menú
  23.  
  24.     ),        
  25. );
  26. ?>
  27. <html>
  28. <body>
  29. <a href="index.php?lang=<?php echo $idiomas['en']['otro_idioma']; ?>">Espa&ntilde;ol</a>
  30. <a href="index.php?lang=<?php echo $idiomas['es']['otro_idioma']; ?>">English</a>
  31.  
  32. <a href="index.php" title="<?php echo $idiomas[$idioma]['portada'];?>">+ <?php echo $idiomas[$idioma]['portada'];?></a>
  33.  
  34. <a href="cursos.php" title="second page">Cursos</a>
  35. </body>

cursos.php

Código PHP:
Ver original
  1. <?php  
  2.  
  3. if ($_GET["lang"]) {
  4. $lang = $_GET["lang"];
  5. $_SESSION["idioma"]= $lang;
  6. } elseif (empty($_SESSION["idioma"]) && empty($_GET["lang"])) {
  7. $accion = (preg_match("/^es/", $_SERVER['HTTP_ACCEPT_LANGUAGE'])) ?  $idioma = "es" :  $idioma = "en";
  8. $_SESSION["idioma"] = $idioma;
  9. }
  10.  
  11.  
  12. $idiomas = array(  
  13.     'en' => array(
  14.         '0' => 'es',
  15.         '1' => 'Home', //Menú
  16.         '2' => 'Welcome to Courses',  
  17.         '3' => 'This is the home page',
  18.         '4' => 'go to Courses',
  19.         '5' => 'go to Home',
  20.  
  21.     ),
  22.     'es' => array(
  23.         '0' => 'en',
  24.         '1' => 'Portada', //Menú
  25.         '2' => 'Bienvenido a nuestros Cursos',  
  26.         '3' => 'Estas en la pagina de inicio',  
  27.         '4' => 'mira nuestros cursos',    
  28.         '5' => 'Ve la pagina de inicio',
  29.      
  30.  
  31.     ),      
  32. );
  33. ?>
  34. <html>
  35. <body>
  36. <a href="cursos.php?lang=<?php echo $idiomas['en']['0']; ?>">Espa&ntilde;ol</a>
  37. <a href="cursos.php?lang=<?php echo $idiomas['es']['0']; ?>">English</a>
  38.  
  39. <br><br><a><?php echo $idiomas[$idioma]['2'];?></a><br><br>
  40. <a href="index.php?lang=<?php echo $_SESSION["idioma"]; ?>"><?php echo $idiomas[$idioma]['5'];?></a>  
  41.  
  42. </body>
  43. </html>

Saludos,
  #7 (permalink)  
Antiguo 30/09/2010, 03:56
 
Fecha de Ingreso: septiembre-2010
Ubicación: http://nomenrecordo.blogspot.com/
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: COOKIE en Web con varios idiomas

También podrías pasar por URL el idioma y recogerlo co un GET en la página de destino y entonces solo te queda ejecutar el script de idiomas pasandole el idioma en el cual deseas ver la página.

Etiquetas: cookie, idiomas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:52.