Foros del Web » Programando para Internet » PHP »

[aporte] Pagina web multi idioma por $_GET

Estas en el tema de [aporte] Pagina web multi idioma por $_GET en el foro de PHP en Foros del Web. Hace un tiempo que tengo un currículum online, pero hace un par de dias decidí hacerlo multi idioma. Buscando encontré varios métodos (sesiones,...), pero ninguno ...
  #1 (permalink)  
Antiguo 15/03/2011, 09:02
 
Fecha de Ingreso: octubre-2010
Ubicación: Aachen
Mensajes: 160
Antigüedad: 13 años, 6 meses
Puntos: 22
[aporte] Pagina web multi idioma por $_GET

Hace un tiempo que tengo un currículum online, pero hace un par de dias decidí hacerlo multi idioma.

Buscando encontré varios métodos (sesiones,...), pero ninguno me convenció 100% así que pensé en hacerlo desde cero.

Es una web muy simple, pero espero que pueda ayudar a algún principiante (como yo).


Index.php
Código PHP:
<?php
  
include ('traducciones.php');
        include (
'lenguas.php');
        include (
'menu.php');
        include (
'body.php');
        include (
'footer.php');
?>
Lenguas.php (para poder cambiar de idioma)
Código PHP:
<?php
if (isset($_GET['menu'])){
echo 
"<div id='idiomas'>
    <div id='idioma1'><a href='index.php?lang=es&menu="
.$_GET['menu']."'><img src='objetos/trans.png' border='0'/></a></div> 
    <div id='idioma2'><a href='index.php?lang=en&menu="
.$_GET['menu']."'><img src='objetos/trans.png' border='0'/></a></div> 
</div> <br>"
;
} else {
echo 
"<div id='idiomas'>
    <div id='idioma1'><a href='index.php?lang=es&menu=1'><img src='objetos/trans.png' border='0'/></a></div> 
    <div id='idioma2'><a href='index.php?lang=en&menu=1'><img src='objetos/trans.png' border='0'/></a></div> 
</div> <br>"
;
}
?>
Menu.php (sin menú pocas páginas vas a mostrar)

Código PHP:
<?php
$boton1
'boton1_'.$idioma;
$boton2'boton2_'.$idioma;
$boton3'boton3_'.$idioma;
$boton4'boton4_'.$idioma;
$boton5'boton5_'.$idioma;
$boton6'boton6_'.$idioma;
$boton7'boton7_'.$idioma;
$boton8'boton8_'.$idioma;



echo 
"<ul id='menu'>
    <li><a href='index.php?lang="
.$idioma."&menu=1'>".${$boton1}."</a></li>
    <li><a href='index.php?lang="
.$idioma."&menu=2'>".${$boton2}."</a></li>
    <li><a href='index.php?lang="
.$idioma."&menu=3'>".${$boton3}."</a></li>
    <li><a href='index.php?lang="
.$idioma."&menu=4'>".${$boton4}."</a></li>
    <li><a href='index.php?lang="
.$idioma."&menu=5'>".${$boton5}."</a></li>
    <li><a href='index.php?lang="
.$idioma."&menu=6'>".${$boton6}."</a></li>
    <li><a href='index.php?lang="
.$idioma."&menu=7'>".${$boton7}."</a></li>
    <li><a href='index.php?lang="
.$idioma."&menu=8'>".${$boton8}."</a></li>
</ul>"
;

?>
Body.php (donde se mostraran las páginas)
Código PHP:
<?php
    
if ($_GET['menu']==|| !isset($_GET['menu'])){

echo 
" <div id='fondo1'> </div>     ";
    
    } else {
    echo 

    <div id='fondo"
.$_GET['menu']."'>     </div>";
    
    }
    
    
    
    if (
$_GET['menu']==|| !isset($_GET['menu'])) {
        
$texto'texto1_'.$idioma;
        echo ${
$texto};
    } else if (
$_GET['menu']==2) {
        
$texto'texto2_'.$idioma;
        echo ${
$texto};
    } else if (
$_GET['menu']==3) {
        
$texto'texto3_'.$idioma;
        echo ${
$texto};
    } else if (
$_GET['menu']==4) {
        
$texto'texto4_'.$idioma;
        echo ${
$texto};
    } else if (
$_GET['menu']==5) {
        
$texto'texto5_'.$idioma;
        echo ${
$texto};
    } else if (
$_GET['menu']==6) {
        
$texto'texto6_'.$idioma;
        echo ${
$texto};
    } else if (
$_GET['menu']==7) {
        
$texto'texto7_'.$idioma;
        echo ${
$texto};
    } else if (
$_GET['menu']==8) {
        
$texto'texto8_'.$idioma;
        echo ${
$texto};


 

?>
Footer.php

Código PHP:
<?php
    $footer
'footer_'.$idioma;
    echo ${
$footer};
?>
Traducciones (aquí es donde debes escribir el contenido de la página y los botones en los diferentes idiomas, acepta entradas en html, pero hay que tener cuidado en no escribir "".)

Código PHP:
<?php
//Texto en castellano
//Inicio
$texto1_es "Texto 1
"
;
$boton1_es "Texto boton 1";

//Datos personales
$texto2_es "Texto 2";
$boton2_es "Texto boton 2";

//Estudios
$texto3_es "Texto 3";
$boton3_es "Texto boton 3";

//Trabajos
$texto4_es "Texto boton 4";
$boton4_es "Texto boton 4";

//Aptitudes
$texto5_es "";
$boton5_es "";

//Proyectos
$texto6_es "";
$boton6_es "";

//Futuro
$texto7_es "";
$boton7_es "";

//Contacto
$texto8_es "";
$boton8_es "";

//footer
$footer_es "<div id='firma'>
    <p2>  </p2>
</div>"
;



//Texto en ingles
//Inicio
$texto1_en "Texto 1 en ingles";
$boton1_en "Boton 1";

//Datos personales
$texto2_en "Texto 2 en ingles";
$boton2_en "Boton 2";

//Estudios
$texto3_en "Texto 3 en ingles";
$boton3_en "Boton 3";

//Trabajos
$texto4_en "Texto 4 en ingles";
$boton4_en "Boton 4";

//Aptitudes
$texto5_en "";
$boton5_en "";

//Proyectos
$texto6_en "";
$boton6_en "";

//Futuro
$texto7_en "";
$boton7_en "";

//Contactos
$texto8_en "";
$boton8_en "";


//Footer
$footer_en "<div id='firma'>
    <p2> <span>. .</span> </p2>
</div>"
;

?>
PS: como vereis está hecha para que por css podáis hacer que cada página tenga un div diferente y así poder poner diferente forma, color, fondo...

Última edición por GatorV; 15/03/2011 a las 09:19 Razón: quitar links
  #2 (permalink)  
Antiguo 15/03/2011, 09:15
Avatar de mashter  
Fecha de Ingreso: mayo-2008
Mensajes: 116
Antigüedad: 15 años, 11 meses
Puntos: 6
Respuesta: [aporte] Pagina web multi idioma por $_GET

otra opciones

// variable $idioma revisar bien que no le metan inyecciones de codigo
// tambien puedes almacenar la variable en una session

include "idiomas/$idioma.php"

el archivo de idioma tendra
$portada="Portada";
$bienvenida="Saludos como estas?";
etc...

y tu php final es
bla bla bla
echo "<aki mi html> $bienvenida </etc>";
bla bla bla

--------------------------
un modo facil de frustrar inyecciones es eliminando caracteres que nunca debe de llevar

$idioma=str_replace('/','',$idioma);
$idioma=str_replace('\','',$idioma);
$idioma=str_replace(':','',$idioma);
$idioma=str_replace('%','',$idioma);



si eliminas / : % sera dificil que te les funcione una url de inyeccion tipo http://www.sitiomalo.com/carpeta/codigo_mlicioso.txt

ya que al final tendra
httpwww.sitiomalo.comcarpetacodigo_mlicioso.txt siento este un archivo local que no existe y no afectara a tu pagina, mas que marcar un error de ejecucion

----------
para la session de idioma puedes usar algo como:

$nuevo_idioma=$_GET['idioma'];
if($nuevo_idioma!='')
{
$_SESSION['idioma']=$nuevo_idioma;
}
$idioma=$_SESSION['idioma'];
$idioma=str_replace('/','',$idioma);
$idioma=str_replace('\','',$idioma);
$idioma=str_replace(':','',$idioma);
$idioma=str_replace('%','',$idioma);

include "idiomas/$idioma.php"


bueno esta es la base, solo perfeccionala
__________________
- - - - - - - - -
  #3 (permalink)  
Antiguo 15/03/2011, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: [aporte] Pagina web multi idioma por $_GET

Yo en lo personal prefiero usar la extensión gettext y usar archivos de traducción es mucho más sencillo de mantener ya que en lugar de ver cosas como <?php echo $boton_1_es; ?> Puedes ver el texto literal, lo que hace mucho más fácil y mantenible la web.
  #4 (permalink)  
Antiguo 15/03/2011, 09:56
 
Fecha de Ingreso: octubre-2010
Ubicación: Aachen
Mensajes: 160
Antigüedad: 13 años, 6 meses
Puntos: 22
Respuesta: [aporte] Pagina web multi idioma por $_GET

Muchas gracias por el método para evitar inyecciones de código, me irá de lujo para un script de usuarios que me estoy haciendo.

Ya buscaré un poco sobre el método gettext, que seguro que facilita mucho.

Por cierto, cabrea un poco que después de currarse algo que puede ser de ayuda para algún/a novatillo/a, cambiar el contenido de mi currículum (que es privado y no publicaré aquí) para que se pueda ver un ejemplo de como funciona y subirlo a la web para que todo el mundo pueda verlo vaya y me lleve una sanción.

Etiquetas: multi, 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:53.