Foros del Web » Programando para Internet » PHP »

Pagina en varios idiomas

Estas en el tema de Pagina en varios idiomas en el foro de PHP en Foros del Web. Holas espero puedan ayudarme, me explico: tengo un código para traducir el texto de mi pagina, utilizando variables en php. el problema que tengo es ...
  #1 (permalink)  
Antiguo 30/04/2010, 14:25
 
Fecha de Ingreso: octubre-2009
Mensajes: 70
Antigüedad: 14 años, 6 meses
Puntos: 0
Pregunta Pagina en varios idiomas

Holas espero puedan ayudarme, me explico:
tengo un código para traducir el texto de mi pagina, utilizando variables en php. el problema que tengo es que soy nuevo en esto del php y el código se ve sencillo pero no puedo hacer que funcione correctamente debe haber algún detalle que no e podido encontrar. dejo el código esperando que alguien me ayude con esto.

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<?php
/* Este código detecta el idioma por defecto del visitante.
Sin embargo, si el visitante indica un idioma mediante la URL (siguiendo un enlace) toma preferencia */

// Miramos si el usuario ha definido un idioma por defecto en su navegador
if ($HTTP_ACCEPT_LANGUAGE != ''){
 
// Si es así, miramos que idiomas ha definido:
    
$idiomas explode(","$HTTP_ACCEPT_LANGUAGE); # Convertimos HTTP_ACCEPT_LANGUAGE en array
   
 /* Recorremos el array hasta que encontramos un idioma del visitante que coincida con los idiomas en que está disponible nuestra web */
    
for ($i=0$i<count($idiomas); $i++){
  
// Si aún no hemos definido la variable $idioma...
        
if (!isset($idioma)){
   
/* Miramos si tiene algún idioma de los disponibles entre sus favoritos.
   Empezando por su primer favorito y acabando por su último favorito */
            
if (substr($idiomas[$i], 02) == "es"){$idioma "es";}
            if (
substr($idiomas[$i], 02) == "en"){$idioma "en";}
            if (
substr($idiomas[$i], 02) == "de"){$idioma "de";}
            
//if (substr($idiomas[$i], 0, 2) == "gl"){$idioma = "gl";}
        
}
    }
}

// Si aún no hemos encontrado ningún idioma que nos convenga, mostramos la web en el idioma por defecto
if (!isset($idioma)){$idioma "es";}

// Ahora incluimos la plantilla de idioma correspondiente al idioma que pertoque:
include("idioma_$idioma.php");
?>
<html>
<head>
<?php // Ahora sustituimos los textos por variables (contenidas en textos_$idioma.php) ?>
 <title><?php echo $t_titulo?></title>
</head>

<body>
<h1><?php echo $t_cabecera?></h1>
<p><?php echo $t_texto?></p>
<ul><?php // Estos textos no los sustituímos porque son los nombres de los idiomas en el idioma al que apuntan ?>
 <?php if ($idioma != 'es') { ?><li><a href="plantilla.php?idioma=es">Español</a></li><? ?>
 <?php if ($idioma != 'en') { ?><li><a href="plantilla.php?idioma=en">English</a></li><? ?>
 <?php if ($idioma != 'de') { ?><li><a href="plantilla.php?idioma=de">Deutsch</a></li><? ?>
 
</ul>

</body>
</html>
Código PHP:
<?php
// Textos en español. 
$t_titulo "Página en varios idiomas";
$t_cabecera "Bienvenido";
$t_texto "Esta página está disponible en varios idiomas";
?>
Código PHP:
<?php
// Textos en Ingles.
$t_titulo "Site in several languages";
$t_cabecera "Welcome";
$t_texto "This page is available in several languages";
?>
Código PHP:
<?php
// Textos en Aleman.
$t_titulo "Diese Seite ist in mehreren Sprachen verfügbar";
$t_cabecera "Willkommen";
$t_texto "Diese Seite ist in mehreren Sprachen verfügbar";
?>
Espero su ayuda muchas gracias.
  #2 (permalink)  
Antiguo 30/04/2010, 14:30
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Pagina en varios idiomas

¿Cuál sería el error?
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 30/04/2010, 14:44
 
Fecha de Ingreso: octubre-2009
Mensajes: 70
Antigüedad: 14 años, 6 meses
Puntos: 0
Pregunta Pagina en varios idiomas

no funciona, al echarlo andar
  #4 (permalink)  
Antiguo 30/04/2010, 14:47
 
Fecha de Ingreso: octubre-2009
Mensajes: 70
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Pagina en varios idiomas

Debería al cargar la pagina el lenguaje del navegador (español) o también al seleccionar el idioma en alguno de los links.
No pasa na de na

ayuda porfavor
  #5 (permalink)  
Antiguo 30/04/2010, 14:48
 
Fecha de Ingreso: septiembre-2009
Mensajes: 67
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Pagina en varios idiomas

Pregunto lo mismo, cual sería el error? especificalo asi te ayudamos.

Igualmente lo que ví de la sintáxis está bien, seguramente si hay algun error no es justamente de sintáxis.

quizás deberías recuperar el valor del idioma así: $_GET['idioma']; en vez de así $idioma , porque en algunas configuraciones de php no te va a funcionar
  #6 (permalink)  
Antiguo 30/04/2010, 14:52
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Pagina en varios idiomas

Otra cosa... ¿tu servidor tiene register_globals en off? Si es así, deberías usar $_SERVER['HTTP_ACCEPT_LANGUAGE'], en vez de la variable global que usas.

Por último, a tu código principal, añádele esto al principio de todo :

Código PHP:
Ver original
  1. error_reporting(E_ALL | E_STRICT);

De esta manera te imprimirá los errores que puedas tener.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 30/04/2010, 15:06
 
Fecha de Ingreso: octubre-2009
Mensajes: 70
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Pagina en varios idiomas

spider_boy gracias por la ayuda, la verdad desconozco si el servidor tiene register_globals en off. De todas maneras puse $_SERVER['HTTP_ACCEPT_LANGUAGE'] y tampoco anda, y ademas puse error_reporting(E_ALL | E_STRICT); y no mnada niun error.

No sera que habrá alguna mala referencia a los archivos???

el primero se llama plantilla.php,
el segundo idioma_es.php,
el tercero idioma_en.php
y el cuarto idioma_de.php

si tu no sabes que pueda ser menos yo recién me estoy metiendo en esto del php y falta muuucho por aprender.
Se agradece la ayuda
  #8 (permalink)  
Antiguo 30/04/2010, 16:56
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Pagina en varios idiomas

Ok, mira, probé tu código, y si me tira un error :

Código:
Parse error: syntax error, unexpected $end in C:\...\file.php on line 49
Pero esa línea correspondía al cierre del tag <html>, así que esa línea no era.

Busqué, y me di cuenta de que hay unos short_tags por ahí, y lo obvio en este caso, es que tu servidor no lo soporta.

Mira estas líneas :

Código PHP:
Ver original
  1. <?php if ($idioma != 'es') { ?><li><a href="plantilla.php?idioma=es">Español</a></li><? } ?>
  2.  <?php if ($idioma != 'en') { ?><li><a href="plantilla.php?idioma=en">English</a></li><? } ?>
  3.  <?php if ($idioma != 'de') { ?><li><a href="plantilla.php?idioma=de">Deutsch</a></li><? } ?>

Si te fijas, cuando cierras la llave, las metes dentro de <? } ?>, pero debería ser <?php } ?>.

Así me mostró el contenido, espero te sirva. Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #9 (permalink)  
Antiguo 01/05/2010, 08:58
 
Fecha de Ingreso: octubre-2009
Mensajes: 70
Antigüedad: 14 años, 6 meses
Puntos: 0
Pregunta Pagina en varios idiomas

Aquí dejo el código no envía ningún error, efectivamente carga los valores de idioma español, pero si selecciono alguno de los otros idiomas no carga nada queda tal cual la pagina en español

No se cual sera el problema espero puedan ayudarme por favor.

index.php
Código PHP:
<?php
error_reporting
(E_ALL E_STRICT);
/* Este código detecta el idioma por defecto del visitante.
Sin embargo, si el visitante indica un idioma mediante la URL (siguiendo un enlace) toma preferencia */

// Miramos si el usuario ha definido un idioma por defecto en su navegador

//$_SERVER['HTTP_ACCEPT_LANGUAGE']
//$_GET['idioma'];
//$HTTP_ACCEPT_LANGUAGE != ''
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] != ''){
 
// Si es así, miramos que idiomas ha definido:
    
$idiomas explode(","$_SERVER['HTTP_ACCEPT_LANGUAGE']); # Convertimos HTTP_ACCEPT_LANGUAGE en array
   
 /* Recorremos el array hasta que encontramos un idioma del visitante que coincida con los idiomas en que está disponible nuestra web */
    
for ($i=0$i<count($idiomas); $i++){
  
// Si aún no hemos definido la variable $idioma...
        
if (!isset($idioma)){
   
/* Miramos si tiene algún idioma de los disponibles entre sus favoritos.
   Empezando por su primer favorito y acabando por su último favorito */
            
if (substr($idiomas[$i], 02) == "es"){$idioma "es";}
            if (
substr($idiomas[$i], 02) == "en"){$idioma "en";}
            if (
substr($idiomas[$i], 02) == "de"){$idioma "de";}
            
//if (substr($idiomas[$i], 0, 2) == "gl"){$idioma = "gl";}
        
}
    }
}

// Si aún no hemos encontrado ningún idioma que nos convenga, mostramos la web en el idioma por defecto
if (!isset($idioma)){$idioma "es";}

// Ahora incluimos la plantilla de idioma correspondiente al idioma que pertoque:
include("idioma_$idioma.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!--// Ahora sustituimos los textos por variables (contenidas en textos_$idioma.php)-->
<title><?php echo $t_titulo?></title>
</head>

<body>

<h1><?php echo $t_cabecera?></h1>
<p><?php echo $t_texto?></p>
<ul>
    <!-- Estos textos no los sustituímos porque son los nombres de los idiomas en el idioma al que apuntan ?>-->
     <?php if ($idioma != 'es') { ?><li><a href="index.php?idioma=es">Español</a></li><?php ?>
     <?php if ($idioma != 'en') { ?><li><a href="index.php?idioma=en">English</a></li><?php ?>
     <?php if ($idioma != 'de') { ?><li><a href="index.php?idioma=de">Deutsch</a></li><?php ?>
</ul>

</body>
</html>

idioma_es.php
Código PHP:
<?php
// Textos en español.
$t_titulo "Página en varios idiomas";
$t_cabecera "Bienvenido";
$t_texto "Esta página está disponible en varios idiomas";
?>

idioma_en.php
Código PHP:
<?php
// Textos en ingles.
$t_titulo "Site in several languages";
$t_cabecera "Welcome";
$t_texto "This page is available in several languages";
?>

idioma_de.php
Código PHP:
<?php
// Textos en aleman.
$t_titulo "Diese Seite ist in mehreren Sprachen verfügbar";
$t_cabecera "Willkommen";
$t_texto "Diese Seite ist in mehreren Sprachen verfügbar";
?>

Última edición por klaudio83; 01/05/2010 a las 09:42
  #10 (permalink)  
Antiguo 01/05/2010, 10:54
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Pagina en varios idiomas

Aquí está, funcionando...

Código PHP:
Ver original
  1. <?php
  2. error_reporting(E_ALL | E_STRICT);
  3. /* Este código detecta el idioma por defecto del visitante.
  4. Sin embargo, si el visitante indica un idioma mediante la URL (siguiendo un enlace) toma preferencia */
  5.  
  6. // Miramos si el usuario ha definido un idioma por defecto en su navegador
  7.  
  8. //$_SERVER['HTTP_ACCEPT_LANGUAGE']
  9. //$_GET['idioma'];
  10. //$HTTP_ACCEPT_LANGUAGE != ''
  11. $idioma = $_GET['idioma'];
  12. if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] != ''){
  13.  // Si es así, miramos que idiomas ha definido:
  14.     $idiomas = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']); # Convertimos HTTP_ACCEPT_LANGUAGE en array
  15.  
  16.  /* Recorremos el array hasta que encontramos un idioma del visitante que coincida con los idiomas en que está disponible nuestra web */
  17.     for ($i=0; $i<count($idiomas); $i++){
  18.   // Si aún no hemos definido la variable $idioma...
  19.         if (empty($idioma)){
  20.    /* Miramos si tiene algún idioma de los disponibles entre sus favoritos.
  21.    Empezando por su primer favorito y acabando por su último favorito */
  22.             if (substr($idiomas[$i], 0, 2) == "es"){$idioma = "es";}
  23.             if (substr($idiomas[$i], 0, 2) == "en"){$idioma = "en";}
  24.             if (substr($idiomas[$i], 0, 2) == "de"){$idioma = "de";}
  25.             //if (substr($idiomas[$i], 0, 2) == "gl"){$idioma = "gl";}
  26.         }
  27.     }
  28. }
  29.  
  30. // Si aún no hemos encontrado ningún idioma que nos convenga, mostramos la web en el idioma por defecto
  31. //if (empty($Idioma)){$idioma = "es";}
  32.  
  33. // Ahora incluimos la plantilla de idioma correspondiente al idioma que pertoque:
  34. include("idioma_$idioma.php");
  35. ?>
  36. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  37. <html>
  38. <head>
  39. <!--// Ahora sustituimos los textos por variables (contenidas en textos_$idioma.php)-->
  40. <title><?php echo $t_titulo; ?></title>
  41. </head>
  42.  
  43. <body>
  44.  
  45. <h1><?php echo $t_cabecera; ?></h1>
  46. <p><?php echo $t_texto; ?></p>
  47. <ul>
  48.     <!-- Estos textos no los sustituímos porque son los nombres de los idiomas en el idioma al que apuntan ?>-->
  49.      <?php if ($idioma != 'es') { ?><li><a href="index.php?idioma=es">Español</a></li><?php } ?>
  50.      <?php if ($idioma != 'en') { ?><li><a href="index.php?idioma=en">English</a></li><?php } ?>
  51.      <?php if ($idioma != 'de') { ?><li><a href="index.php?idioma=de">Deutsch</a></li><?php } ?>
  52. </ul>
  53.  
  54. </body>
  55. </html>
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #11 (permalink)  
Antiguo 01/05/2010, 11:45
 
Fecha de Ingreso: octubre-2009
Mensajes: 70
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Pagina en varios idiomas

Excelente!!! jajajaja... gracias compadre te pasaste wn, ahora funciona filete
Te ganaste todos mis respetos XD
  #12 (permalink)  
Antiguo 01/05/2010, 13:46
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Pagina en varios idiomas

De nada .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Etiquetas: 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 12:18.