Foros del Web » Programando para Internet » PHP »

web con idiomas

Estas en el tema de web con idiomas en el foro de PHP en Foros del Web. Hola. Estoy "intentando" hacer una web en PHP con varios idiomas. Mi caso es el siguiente: Tengo un frame llamado index.php que se compone de ...
  #1 (permalink)  
Antiguo 28/02/2006, 14:21
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 11 años, 9 meses
Puntos: 3
web con idiomas

Hola.

Estoy "intentando" hacer una web en PHP con varios idiomas.

Mi caso es el siguiente:

Tengo un frame llamado index.php que se compone de cabecera.php y cuerpo.php.

En la cabecera.php tengo el menú principal y 4 banderitas, cada una de un pais distinto.

Quisiera saber si es posible que al hacer clic en una de las banderitas, se recargue nuevamente la página mostrándola en ese idioma. Si pulso otra banderita distinta, se cargue ese nuevo idioma.

Admito sugerencias de todo tipo y ayuda posible ya que soy novato en PHP y no se como hacer esto.

Mil gracias de antemano y espero vuestra ayuda por favor.
  #2 (permalink)  
Antiguo 28/02/2006, 17:34
 
Fecha de Ingreso: diciembre-2005
Mensajes: 122
Antigüedad: 12 años
Puntos: 0
asignale a cada bandera algún identificador de idioma y crea un enlace enviando ese dato por la url( GET ). en cabecera.php verifica que el parametro este definido, si no existe asignale un valor por defecto. crea una cookie que guarde ese valor. crea 4 archivos .php que contengan las traducciones de los terminos que quieras usando define(). ahora lo único que falta es hacer un include del archivo correspondiente al idioma seleccionado, eso lo haces leyendo la cookie creada.
  #3 (permalink)  
Antiguo 03/03/2006, 05:57
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 11 años, 9 meses
Puntos: 3
Hola.

Soy novato en PHP y lo que me cuentas me suena a chino. ¿Hay algun ejemplo del que me pueda servir o que explique como hacer eso? No se como se asigna a cada bandera el identificador ese y tampoco como crear una cookie. Leí que no era recomendables utilizar cookies debido a que no todos los usuarios pueden tenerla activadas.
  #4 (permalink)  
Antiguo 03/03/2006, 07:02
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 11 años, 9 meses
Puntos: 3
idiomas

He estado mirando la ayuda y encontrado un ejemplo en el que desde un combo se elije el idioma y se envia por GET utilizando cookies y obteniendo los datos de distintos ficheros: es.php, en.php, etc...

El problema está en que en el combo (ver codigo) me sale un error y no doy con el problema para solucionarlo.

<html>
<body>
<?=$txt_cambiarIdioma?>
<select onchange="document.location = '<?=$_SERVER['PHP_SELF']?>?idioma=' + this.value"> <option><?=$txt_idiomas?>
<option value="ca"><?=$txt_catalan?>
<option value="es"><?=$txt_espanol?>
<option value="en"><?=$txt_ingles?>
</body>
</html>

El error que sale (según dreamweaver) es este:

Form.Nulo
Marcado como no valido porque es una etiqueta superpuesta o abierta
Si la visualzación es correcta puede borrar estas etiquetas con seguridad.

¿Como se puede solucionar esto?
  #5 (permalink)  
Antiguo 03/03/2006, 07:53
Avatar de The_Dark_Roy  
Fecha de Ingreso: enero-2004
Mensajes: 218
Antigüedad: 13 años, 10 meses
Puntos: 0
De acuerdo

loq ue pasa es que te faltana las etiquetas form estas en cierran cada campo, ya sea input, select, textarea, etc. es como decir que captura los campos los empaqueta y los envia, todo esto claro tu no lo ves.
aqui te dejo un ejemplo:
Código HTML:
<html>
<body>
<?=$txt_cambiarIdioma?>
<form>
    <select onchange="document.location = '<?=$_SERVER['PHP_SELF']?>?idioma=' + this.value"> 
        <option><?=$txt_idiomas?>
        <option value="ca"><?=$txt_catalan?>
        <option value="es"><?=$txt_espanol?>
        <option value="en"><?=$txt_ingles?>
    </select>
</form>
</body>
</html> 
PD:Tambien se te olvido cerrar la etiqueta select ;), y recuerda que lo que te correji es solo html
__________________
ojala te hayas quitado la venda

http://www.surire.cl
http://www.uta.cl
  #6 (permalink)  
Antiguo 03/03/2006, 08:04
Avatar de The_Dark_Roy  
Fecha de Ingreso: enero-2004
Mensajes: 218
Antigüedad: 13 años, 10 meses
Puntos: 0
De acuerdo

lo que pasa es que te faltana las etiquetas form estas en cierran cada campo, ya sea input, select, textarea, etc. es como decir que captura los campos los empaqueta y los envia, todo esto claro tu no lo ves.
aqui te dejo un ejemplo:
Código HTML:
<html>
<body>
<?=$txt_cambiarIdioma?>
<form>
    <select onchange="document.location = '<?=$_SERVER['PHP_SELF']?>?idioma=' + this.value"> 
        <option><?=$txt_idiomas?>
        <option value="ca"><?=$txt_catalan?>
        <option value="es"><?=$txt_espanol?>
        <option value="en"><?=$txt_ingles?>
    </select>
</form>
</body>
</html> 
__________________
ojala te hayas quitado la venda

http://www.surire.cl
http://www.uta.cl
  #7 (permalink)  
Antiguo 03/03/2006, 08:10
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 11 años, 9 meses
Puntos: 3
casi solucionado

Hola.

Efectivamente me faltaban las etiquetas <form> y <select>

Ya he corregido esto pero al ejecutar el código me sale un error diciendo:

Parse error: parse error in d:\idiomas\index.php on line 34

El codigo del fichero index.php es este:

<?
// Definimos el idioma por defecto, en este
// caso será -es- (español)
$idiomaActual = 'es';

// Si se ha seleccionado un idioma se guarda
// una cookie con el idioma
if(isset($_GET['idioma']))
{
setcookie ("idioma", $_GET['idioma'], time () + 7*24*60*60);
$idiomaActual = $_GET['idioma'];
}
elseif(isset($_COOKIE['idioma']))
{

// Miramos que exista el archivo del idioma
if(file_exists("lang/".$_COOKIE['idioma'].".php"))
{
$idiomaActual = $_COOKIE['idioma'];
}
}

// Incluimos el archivo del idioma seleccionado
// o el archivo por defecto si no se seleccionó
// idioma o si no se encuentra el archivo
include "lang/".$idiomaActual.".php";

?>

<html>
<head></head>
<body>

(Esta es la línea 34)<? =$txt_cambiarIdioma //Muestra la frase correspondiente según el idioma elegido.
?>

<form>
<select onchange="document.location ='<? =$_SERVER['PHP_SELF']?>?idioma=' + this.value">
<option><? =$txt_idiomas ?>
<option value="fr"><? =$txt_catalan ?>
<option value="es"><? =$txt_espanol ?>
<option value="en"><? =$txt_ingles ?>
</select>
</form>

</body>
</html>


Naturalmente tengo tres ficheros más: es.php, en.php, fr.php con el idioma de cada pais. Los tres ficheros tienen las mismas lineas pero en su correspondiente idioma los textos que deben aparecer.

contenido de es.php

<?
//Idioma Castellano (Español)
$txt_cambiarIdioma='Seleccione su idioma de la lista:';
$txt_idiomas='idiomas';
$txt_frances='Frances';
$txt_espanol='Español';
$txt_ingles='Ingles';
?>

¿Sabéis porqué me da ese error? He revisado el código y no le veo nada raro en esa línea 34 y no se porqué da fallos. Este ejemplo lo he tomado de las FAQ que venía explicando y según dicen funciona bien, entonces ¿Porqué a mi no me funciona?

Espero podáis ayudarme o indicarme donde pueda estar el problema.

Muchas gracias por vuestra ayuda.
  #8 (permalink)  
Antiguo 03/03/2006, 08:29
Avatar de The_Dark_Roy  
Fecha de Ingreso: enero-2004
Mensajes: 218
Antigüedad: 13 años, 10 meses
Puntos: 0
Desacuerdo

Compadre no se si sera por el editor de esta pagina o tu, pero si eres tu te recomiendo que uses tabulaciones para programa de esta manera el codigo se hace mas legible tanto para ti como para nosotros.
__________________
ojala te hayas quitado la venda

http://www.surire.cl
http://www.uta.cl
  #9 (permalink)  
Antiguo 03/03/2006, 08:50
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 11 años, 9 meses
Puntos: 3
editor

Yo tengo el código tabulado en el Dreaweaver.

Al copiarlo en el editor me ha salido todo en línea y no me he dado cuenta de tabularlo.

No obstante he probado una cosilla y me ha funcionado.

Resulta que el error estaba en el = que ponía delante de las variables.

<? =$txt_cambiarIdioma; ?>

Entonces no me sale nada ni error ni texto y he puesto "echo" delante:

<? echo $txt_cambiarIdioma; ?> y ahora ya si me sale el texto.
  #10 (permalink)  
Antiguo 03/03/2006, 09:58
Avatar de rafaconpu  
Fecha de Ingreso: febrero-2006
Mensajes: 331
Antigüedad: 11 años, 9 meses
Puntos: 3
cargar JS

Hola.

Ya he conseguido que funcione el tema de cargar un idioma u otro.

Otra pregunta que me surje es la siguiente:

Tengo un menú DHTML hecho con el sothink DHTML Menu. La cuestión es que al cargar el idioma me pregunto si es posible actualizar el menú según el idioma elegido.

Los ficheros generados están en *.js (javaScript). He probado intercalando codigo PHP pero no me hace nada, solo me da errores.

¿Cabría la posibilidad de tener varios menús DHTML ya cambiados y que al elegir un idioma se carge un menú u otro?

He puesto algo asi:

<? if ($idioma="es"){ ?>
<script type="text/javascript" language="JavaScript1.2" src="menu/menu_es.js"></script>
<? }else{ ?>
<script type="text/javascript" language="JavaScript1.2" src="menu/menu_en.js"></script>
<? } ?>

Según esa condición si $idioma es igual a "es" entonces me debería cargar el menú dinámico "menu_es" y si no es verdad la condición me cargaría el otro, pero no me lo hace. ¿Donde puede estar el fallo?

Gracias.
  #11 (permalink)  
Antiguo 03/03/2006, 10:54
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 11 años, 11 meses
Puntos: 0
Por favor se les recomienda ENMARCAR los codigos en sus etiquetas para que todos podamos leer los codigos largos BIEN
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #12 (permalink)  
Antiguo 04/03/2006, 00:00
Avatar de The_Dark_Roy  
Fecha de Ingreso: enero-2004
Mensajes: 218
Antigüedad: 13 años, 10 meses
Puntos: 0
De acuerdo

claro que es posible solo tienes que colocarlo en el lugar indicado ;)
__________________
ojala te hayas quitado la venda

http://www.surire.cl
http://www.uta.cl
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:46.