Foros del Web » Programando para Internet » PHP »

Aplicación con sistema multilenguaje en php

Estas en el tema de Aplicación con sistema multilenguaje en php en el foro de PHP en Foros del Web. hola, muy buenas. Estoy haciendo una pequeña aplicación en PHP con sistema multilenguaje, por lo que necesito llevar una gestión de los textos de los ...
  #1 (permalink)  
Antiguo 09/09/2009, 16:48
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Aplicación con sistema multilenguaje en php

hola, muy buenas.

Estoy haciendo una pequeña aplicación en PHP con sistema multilenguaje, por lo que necesito llevar una gestión de los textos de los mensajes que tiene la aplicacion. De momento lo tenog montado guardando los textos en una tabla de la bd con estos campos: CLAVE, ESP, ING. Y para obtener un mensaje una funciona q devuelve el texto en el idioma activo.
Quiero montar el sistema de los textos en archivos sin guardarlos en la bd, pero no se me ocurre un buen sistema para hacerlo, alguien me puede echar una mano o damre alguna idea?? la idea es tener un archivo para cada idioma tal que así: "DATOS_GUARDADOS=Datos guardados correctamente" y en le archivo de ingles pues: "DATOS_GUARDADOS=saved succesfull".

gracias! un saludo!
  #2 (permalink)  
Antiguo 09/09/2009, 16:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Aplicación con sistema multilenguaje en php

Carga todo el idioma en una matriz, por ejemplo, para español, con "SELECT clave, esp FROM idioma"

Código php:
Ver original
  1. <?php
  2. // Cargar la consulta en una matriz
  3. $lang = array();
  4. while(list($clave, $esp) = mysql_fetch_row($result))
  5.     $lang[$clave] = $esp;
  6.  
  7. // Guardar el idioma en un archivo
  8. file_put_contents('spanish.php', '<?php $lang = ' . var_export($lang) );
  9.  
  10. // Cuando necesites cargar el idioma
  11. include 'spanish.php';
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 12/09/2009, 08:25
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Respuesta: Aplicación con sistema multilenguaje en php

ola triby, gracias por tu respuestapero creo qno me expliqué bien, la idea es montar el sistema únicamente con los archivos. Lo de tenerlo en la bd es mientras se me ocurre lo otro. Entonces los archivos tedrán todos los textos, uno por linea, y un archivo para cada idioma. Y lo que no se me ocurre cmo hacerlo de manera efectiva es la carga de los archivos. se me ocurre al principio comprobar el idioma y dependiendo del idioma leer el archivo correspondiente linea a linea guardando todos los mensajes en una matriz y definir la matriz como global.
Pero no se si es efectivo o hay alguna forma de hacerlo mejor.

un saludo!
  #4 (permalink)  
Antiguo 12/09/2009, 09:14
Avatar de kike00  
Fecha de Ingreso: febrero-2005
Ubicación: El Salvador
Mensajes: 180
Antigüedad: 19 años, 2 meses
Puntos: 7
Respuesta: Aplicación con sistema multilenguaje en php

pues lo que yo haria es crear una arreglo "$lang[]" y cualquier cosa que fuera texto del sitio en vez de poner el texto directamente usaria el arreglo $lan["comentario1"], $lang["titulo_de_algo"], etc.....

al principio del archivo PHP pondria un include("lang/esp.php") o include("lang/eng.php") dependiendo del idioma que se escoja....

luego cada archivo tendra algo como:

esp.php:
$lan["comentario1"] = "este es un comentario";
$lang["titulo_de_algo"] = "este es un titulo";

eng.php:
$lan["comentario1"] = "this is a comment";
$lang["titulo_de_algo"] = "this is a tittle";

.... espero te ayude
  #5 (permalink)  
Antiguo 12/09/2009, 09:27
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Respuesta: Aplicación con sistema multilenguaje en php

gracias kike!! me ha gustado tu idea la verdad. Más sencilla y ligera q lo q se me habia ocurrido a mi de tener archivos .txt y leer y guardar línea por linea. No se me había ocurrido usar el archivo .php con el array.

Muchas gracias.
Saludos!!
  #6 (permalink)  
Antiguo 12/09/2009, 13:14
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Aplicación con sistema multilenguaje en php

Si ya tienes cargada la base de datos con algo de informacion, prueba el codigo que te sugeri, te va a generar la matriz (arreglo) y podria ahorrarte algo de tiempo.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 13/09/2009, 04:30
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Respuesta: Aplicación con sistema multilenguaje en php

Gracias Triby, ya lo usé asi me ahorré el tiempo de volver a copiarlos. Un saludo!!
  #8 (permalink)  
Antiguo 13/09/2009, 08:17
 
Fecha de Ingreso: marzo-2005
Mensajes: 149
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Aplicación con sistema multilenguaje en php

Hace tiempo descargué un script que es justo lo que necesitas.

plantilla.php
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) == "fr"){$idioma "fr";}
        }
    }
}

// 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("idiomas_$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">català</a></li><? ?>
 <?php if ($idioma != 'fr') { ?><li><a href="plantilla.php?idioma=fr">euskera</a></li><? ?>
</ul>

</body>
</html>
idiomas_es.php
Código PHP:
<?php
// Textos en español. Replicar este documento por cada idioma adicional de la web
$t_titulo "Página en varios idiomas";
$t_cabecera "Bienvenido";
$t_texto "Esta página está disponible en varios idiomas";
?>
idiomas_en.php
Código PHP:
<?php
// Textos en español. Replicar este documento por cada idioma adicional de la web
$t_titulo "Welcome to the web";
$t_cabecera "Welcome";
$t_texto "This is english";
?>
idiomas_fr.php
Código PHP:
<?php
// Textos en español. Replicar este documento por cada idioma adicional de la web
$t_titulo "Página en frances";
$t_cabecera "Bienvenido en frances";
$t_texto "Texto en frances";
?>
Repito, hace tiempo que lo guardé y no recuerdo la fuente para poner los créditos.

Espero te ayude. Saludos

Última edición por etanol; 13/09/2009 a las 08:23
  #9 (permalink)  
Antiguo 13/09/2009, 13:30
 
Fecha de Ingreso: agosto-2009
Ubicación: Lanzarote - Canarias
Mensajes: 57
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Aplicación con sistema multilenguaje en php

Tambien puedes usar la funcion define();

Código PHP:
Ver original
  1. define("INDEX_PAGE","Pagina principal");
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 13:54.