Foros del Web » Programando para Internet » PHP »

php idioma: cómo ocultar/mostrar botón de idioma

Estas en el tema de php idioma: cómo ocultar/mostrar botón de idioma en el foro de PHP en Foros del Web. Hola: Primero de todo: soy nueva en este foro. Creo que me he leido bien las normas pero si hay algo que no hago correctamente ...
  #1 (permalink)  
Antiguo 10/12/2013, 03:25
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
php idioma: cómo ocultar/mostrar botón de idioma

Hola:

Primero de todo: soy nueva en este foro. Creo que me he leido bien las normas pero si hay algo que no hago correctamente por favor decídmelo y lo corrijo.
También he estado buscando sobre este tema en el buscador pero no lo encuentro... así que lo mismo: si esto ya está repetido pido disculpas.

No tengo apenas experiencia con php y me cuesta bastante entender algunas cosas.
Ahora estoy haciendo un site pequeñito y hasta ahora le he metido un formulario de contacto y dos idiomas.
Con los idiomas bien, todo funciona correctamente, pero hay una cosa que no sé cómo hacerla.
Tengo un index con 2 botones en un ul, uno que va a español y otro a inglés.
Me gustaría que cuando estoy en inglés solo se viera el link a español y al revés, cuando estoy en espeñol solo se vea el link a inglés. Pero no sé cómo mostrar u ocultar el botón según el idioma que esté!
Cómo podría hacerlo?

Tengo un common.php:
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];

// register the session and set the cookie
$_SESSION['lang'] = $lang;
setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'es';
}

switch ($lang) {
case 'en':
$lang_file = 'lang.en.php';
break;

case 'es':
$lang_file = 'lang.es.php';
break;

default:
$lang_file = 'lang.es.php';

}

include_once 'languages/'.$lang_file;
?>



Luego tengo una carpeta con los idiomas.
Y en mi index.php tengo mi menú con los idiomas:
<ul>
<li class="language en">
<a href="index.php?lang=en"><?php echo $lang['MENU_EN_FULL']; ?></a>
</li>
<li class="language es">
<a href="index.php?lang=es"><?php echo $lang['MENU_ES_FULL']; ?></a>
</li>

</ul>



¿cómo puedo hacer una función que diga algo como
si estoy en index.php?lang=en entonces muéstrame el li class="es" y ocúltame el li class="en" y si estoy en index.php?lang=es muéstrame el li class="en" y ocúltmae el li class="es"?

Muchas gracias!
  #2 (permalink)  
Antiguo 10/12/2013, 04:54
 
Fecha de Ingreso: diciembre-2012
Mensajes: 128
Antigüedad: 11 años, 4 meses
Puntos: 12
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Código PHP:
<?php
if($_GET['lang']=='es'){
?>
<li class="language en">
<a href="index.php?lang=en"><?php echo $lang['MENU_EN_FULL']; ?></a>
</li>
<?php }if($_GET['lang']=='en'){ ?>
<li class="language es">
<a href="index.php?lang=es"><?php echo $lang['MENU_ES_FULL']; ?></a>
</li>
<?php ?>
si esta en castellano le muestras el link al ingles y si esta en ingles le muestras el link al castellano.
__________________
Comparador facturas de luz
  #3 (permalink)  
Antiguo 10/12/2013, 05:47
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Gracias phoneval!
Lo escribes y parece tan fácil... llevaba días buscando . Lo que hace la ignorancia jeje

Pero ahora el tema es que cuando entras en la web, si escribes solo el dominio entras en index.php... y no se ve nada, ninguno de los dos <li>. Para que se vea tengo que escribir index.php?lang=en o index.php?lang=es
y entonces ya sí se hace el intercambio.

Así que tendría que hacer que por defecto entre en un idioma con su url (español) y si ya tienes guardada la cookie en el otro, pues en el otro... pero pensé que eso ya estaba hecho en mi common.php! :

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];

// register the session and set the cookie
$_SESSION['lang'] = $lang;

setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
//Aquí viene a decir que si no decido ningún idioma, el idioma por defecto es el español, no?
$lang = 'es';
}

switch ($lang) {
case 'en':
$lang_file = 'lang.en.php';
break;

case 'es':
$lang_file = 'lang.es.php';
break;

default:
$lang_file = 'lang.es.php';

}

include_once 'languages/'.$lang_file;
?>


Es decir, ya tengo puesto que por defecto entre en español, no? O tengo que añadir algo para que cuando escribes el dominio se vaya a lo de la url con el idioma? En realidad lo que estaría bien es que no se viera esto de "?lang=en" sino www.miweb.com/en o www.miweb.com/es o algo así... aunque de momento es secundario :)
  #4 (permalink)  
Antiguo 10/12/2013, 08:32
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Hola nexj,

No lo ves porque estabas condicionando los <li> con el querystring ($_GET['lang']) entonces si no esta activo el queryString obviamente no se veran las etiquetas.
Pero veo que antes de todo eso guardabas el valor del querySring en una variable de session ($_SESSION['lang']) entonces cambia los $_GET['lang'] por $_SESSION['lang'] entonces seria:

Código PHP:
<?php 
if($_SESSION['lang']=='es'){ 
?> 
<li class="language en"> 
<a href="index.php?lang=en"><?php echo $lang['MENU_EN_FULL']; ?></a> 
</li> 
<?php }if($_SESSION['lang']=='en'){ ?> 
<li class="language es"> 
<a href="index.php?lang=es"><?php echo $lang['MENU_ES_FULL']; ?></a> 
</li> 
<?php ?>
Saludos.
  #5 (permalink)  
Antiguo 11/12/2013, 03:08
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Hola marco64yes:

Muchas gracias!

Suena muy lógico... pero lo he probado y no funciona, sigo sin ver ninguno de los <li> si escribo el dominio sin nada, o sea, si entro en index.php.
Cuando entro en la web se registra que el idioma a cargar por defecto es el español, eso lo hace... pero no entiendo porqué si el idioma lo carga, no carga el <li> correspondiente.
Como decía antes, no tengo mucha idea de php pero puede ser porque en el common.php antes de registrar la sesión tengo otro condicional? Me refiero a

if(isSet($_GET['lang']))
{
A partir de esta premisa entra todo lo demás, no? O igual no, jejeje.

O tal vez en los <li> tendría que poner un "if" en uno y un "else" en el otro?

***Edito: isSet sirve para checkear y debería estar, así que eso no tiene nada que ver (voy leyendo y probando cosas, jeje)

Última edición por nexj; 11/12/2013 a las 05:07 Razón: Errata en el texto
  #6 (permalink)  
Antiguo 11/12/2013, 15:09
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Es muy sencillo lo que planteas basandome en el script de @phoneval y modificandolo un poco por si en un futuro introduces mas idiomas te sea mas facil y ademas te lo he dividido, por una parte resolvemos todo sobre el idioma, por otro lado la vista del boton

Código PHP:
Ver original
  1. <?php
  2.  
  3. // verificamos si existe la variable y si no es nula,false,etc .. .  y si solo contiene letras
  4. // de lo contrario redirecionamos con la variable correcta y por defecto el lenguaje 'es'
  5. // aunque no exista la variable o esta sea incorrecta , esta se creara automaticamente.
  6.  
  7. if( ! isset($_GET['lang']) || empty($_GET['lang']) || ! ctype_alpha($_GET['lang']) ) // ctype validacion solo valido letras
  8. {
  9.     header('location:index.php?lang=es');
  10.     exit();
  11. }
  12.  
  13.  
  14. switch(strtolower($_GET['lang'])) // strtolower convierte el string en minusculas
  15. // aunque en la url se escriba en mayusculas lang=ES este la detectara como valido , sin convertir a minusculas lang=ES te daria fallo
  16. // de esta forma daremos como valido lang=es y lang=ES
  17.  
  18. {
  19.     case 'es':
  20.     $lang = 'es';
  21.     break;
  22.  
  23.     case 'en':
  24.     $lang= 'en';
  25.     break;
  26.  
  27.     // si no existe el idioma redireccionamos con el lenguaje por defecto
  28.     default:
  29.     header('location:index.php?lang=es');
  30.     exit();
  31. }
  32.  
  33.  
  34. include_once 'languages/lang.'.$lang.'.php';
  35.  
  36.  
  37. // view
  38.  
  39.  
  40.     if( $lang === 'es' )
  41.     {
  42.         echo  '<li class="language en"> <a href="index.php?lang=en">'.$lang['MENU_EN_FULL'].'</a> </li>';
  43.     }
  44.     elseif( $lang === 'en' )
  45.     {
  46.         echo '<li class="language es"> <a href="index.php?lang=es">'.$lang['MENU_ES_FULL'].'</a> </li>';
  47.     }
  48.     else
  49.     {
  50.         echo 'error';
  51.     }
  52.  
  53.  
  54. ?>

es un ejemplo ahora amoldalo a tu script , lo de modificar ?lang=es tambien se puede hacer con .htaccess investiga sobre ello y conseguiras cambiar de dominio?lang=es a dominio/es

Última edición por webankenovi; 11/12/2013 a las 17:04
  #7 (permalink)  
Antiguo 12/12/2013, 03:16
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Hola webankenovi:

Gracias por tu respuesta!

He probado a coger tu código y aplicarlo pero esta vez lo que pasa es que salta el error.
Primero he cogido tu código tal cual y luego he añadido lo de la cookie que planteaba Phoneval y en ambos casos me da error. El error creo que debe estar en la parte de los <li> porque el idioma por defecto lo carga y va a la url index.php?lang=es

Igual es porque hay que cambiar algo cuando la parte de vista se escribe en index.php y no en mi common.php?

Finalmente he hecho una mezcla del código de Phoneval con el tuyo y... funciona!
Esto es lo que finalmente he escrito:

En common.php:
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX


if( ! isset($_GET['lang']) || empty($_GET['lang']) || ! ctype_alpha($_GET['lang']) ) // ctype validacion solo valido letras
{
header('location:index.php?lang=es');
exit();
// register the session and set the cookie
$_SESSION['lang'] = $lang;

setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'es';
}

switch(strtolower($_GET['lang'])){
case 'en':
$lang_file = 'lang.en.php';
break;

case 'es':
$lang_file = 'lang.es.php';
break;

default:
$lang_file = 'lang.es.php';
header('location:index.php?lang=es');


}

include_once 'languages/'.$lang_file;
?>


En index.php:

<?php
if($_GET['lang']=='es'){ ?>
<li class="language">
<a href="index.php?lang=en"><span class="abrev">EN</span> <span class="sin-abrev"><?php echo $lang['MENU_EN_FULL']; ?></span></a>
</li>
<?php }
if($_GET['lang']=='en'){ ?>
<li class="language">
<a href="index.php?lang=es"><span class="abrev">ES</span> <span class="sin-abrev"><?php echo $lang['MENU_ES_FULL']; ?></span></a>
</li>
<?php }
?>


Al final en los <li> me funciona lo de $_GET, no lo de $_SESSION... no tengo ni idea de porqué, pero funciona :)

Ahora me pondré a leer lo de htacces... me imagino que tendría que hacer algo que sustituya el string index.php?lang=es por "es" o algo así, no?
Gracias a todos! Es una pasada, qué majos :D. Hasta hace 4 días pensaba que no lo iba a reseolver jamás!


****Edito por tercera vez: Ahora lo que estoy comprobando es si se guarda la cookie... y la cookie no se guarda. si dejo puesto el idioma en inglés, cierro la ventana y la vuelvo a abrir, me abre siempre el idioma "es". Por qué pasa si la url está dentro de un if?

Última edición por nexj; 12/12/2013 a las 03:49 Razón: he seguido probando cosas y parece que se ha resuelto. Vuelvo a editar porque no está resuelto del todo
  #8 (permalink)  
Antiguo 12/12/2013, 15:10
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

common.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. header('Cache-control: private'); // IE 6 FIX
  4.  
  5.  
  6. if( ! isset($_SESSION['lang']) || empty($_SESSION['lang']) )
  7. {
  8.     if( ! isset($_COOKIE['lang']) || empty($_COOKIE['lang']) )
  9.     {
  10.         if( ! isset($_GET['lang']) || empty($_GET['lang']) || ! ctype_alpha($_GET['lang']) )
  11.         {
  12.             header('location:index.php?lang=es');
  13.                exit;
  14.         }
  15.         else
  16.         {
  17.             $language = $_GET['lang'];
  18.             $_SESSION['lang'] = $language;
  19.             setcookie("lang", $language, time() + (3600 * 24 * 30));
  20.         }
  21.     }
  22.     else
  23.     {
  24.         $language = $_COOKIE['lang'];
  25.     }
  26. }
  27. else
  28. {
  29.     $language = $_SESSION['lang'];
  30. }
  31.  
  32.  
  33.  
  34. switch(strtolower($language))
  35. {
  36.     case 'en':
  37.     $lang_file = 'lang.en.php';
  38.     break;
  39.  
  40.     case 'es':
  41.     $lang_file = 'lang.es.php';
  42.     break;
  43.  
  44.     default:
  45.     $lang_file = 'lang.es.php';
  46. }
  47.  
  48. include_once 'languages/'.$lang_file;

index.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. require 'common.php';
  4.  
  5. if(isset($language)){
  6.  
  7. if($language === 'es'){ ?>
  8.  
  9. <li class="language">
  10. <a href="index.php?lang=en"><span class="abrev">EN</span> <span class="sin-abrev"><?php echo $lang['MENU_EN_FULL']; ?></span></a>
  11. </li>
  12.  
  13. <?php }elseif($language === 'en'){ ?>
  14.  
  15. <li class="language">
  16. <a href="index.php?lang=es"><span class="abrev">ES</span> <span class="sin-abrev"><?php echo $lang['MENU_ES_FULL']; ?></span></a>
  17. </li>
  18.  
  19.  
  20. <?php }else{ ?>
  21.  
  22.  
  23. <p>idioma no disponible</p>
  24.  
  25.  
  26. <?php }}else{ ?>
  27.  
  28. <p>Se ha producido un error</p>
  29.  
  30. <?php } ?>

hecha un vistazo bien y observalo , pruebalo y di si te saltan fallos y de que tipo , y por cierto con las sessiones , cookies surge un problema si un usuario cambia de idioma no lo vas a detectar este problema ya te lo dejo que lo resuelvas por ti mismo.

Última edición por webankenovi; 12/12/2013 a las 15:18
  #9 (permalink)  
Antiguo 20/12/2013, 04:20
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Hola Webankenobi:

No lo he podido probar hasta hoy porque estaba con otras cosas de la web...
En mi localhost funciona pero cuando lo subo arriba sale este error:

Warning: strtolower() expects parameter 1 to be string, array given in /home/clubecli/public_html/boujis/common.php on line 32

yo aquí ya estoy totalemente perdida, la verdad.

Además ahora tengo otro "problema". Desde esta página abro una ventana modal que también tiene texto. Esta ventana se abre como popup (con colorbox) pero tiene su propia url, o sea, es un archivo aparte (por temas de poder darle a "me gusta" en Facebook). He metido los textos en los archivos de idiomas pero si escribo arriba lo de
<?php
include_once 'common.php';
?>
entonces lo que pasa es que cuando le doy al botón de abrir la ventana, en vez de cargar el contenido de la ventana me carga index.php?lang=es. Me imagino que porque dentro de common.php le estamos diciendo que la location por defetco es index.php?lang=es, no?

Pero si no escribo lo de
<?php
include_once 'common.php';
?>
entonces no me carga los textos

No tengo ni idea de cómo seguir... ¿igual tengo que hacer un archivo como common.php pero solo para este nuevo archivo y que no tenga lo de location? Supongo que no porque la idea es que si alguien está viendo la web en inglés, cuando abra esta ventana se tiene que abrir en inglés, así que de alguna manera tiene que estar todo enlazado no?

Jo, qué lío

Última edición por nexj; 20/12/2013 a las 04:24 Razón: texto mal
  #10 (permalink)  
Antiguo 20/12/2013, 09:37
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Para la ventana la tienes que abrir ya con el lenguaje ejemplo

link - modal.php?lang=$language , asi pasas el idioma en el que este el usuario y en base a el idioma mostrarle el texto correspondiente.

Cita:
entonces lo que pasa es que cuando le doy al botón de abrir la ventana, en vez de cargar el contenido de la ventana me carga index.php?lang=es. Me imagino que porque dentro de common.php le estamos diciendo que la location por defetco es index.php?lang=es, no?
esto pasa por que esta detectando el common que no existe idioma, puedes usar el common pero tienes que hacer un cambio en el location

Código PHP:
Ver original
  1. header('location:'.$_SERVER['PHP_SELF'].'?lang=es');
  2.                exit;

Asi redireccionara a la misma pagina

Cita:
Pero si no escribo lo de
<?php
include_once 'common.php';
?>
entonces no me carga los textos
no existira lang=idioma por eso no muestra nada

para el asunto de strtolower

Código PHP:
Ver original
  1. var_dump($_GET['lang'],$_SESSION['lang'],$_COOKIE['lang'],$language); // y posteas aqui el resultado , haber que fallo puede ver segun el error $language esta vacio.
  2.  
  3. switch(strtolower($language))
  4. {
  5.     case 'en':
  6.     $lang_file = 'lang.en.php';
  7.     break;
  8.  
  9.     case 'es':
  10.     $lang_file = 'lang.es.php';
  11.     break;
  12.  
  13.     default:
  14.     $lang_file = 'lang.es.php';
  15. }

Última edición por webankenovi; 20/12/2013 a las 09:48
  #11 (permalink)  
Antiguo 23/12/2013, 07:29
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Hola otra vez! Y gracias otra vez!

Pues arriba del todo de la web me sale esto:

string(2) "en" string(2) "es" string(2) "es" string(2) "es"

Un par de cosas que hago distintas a como las escribiste tú:

En mi index.php no pongo require common.php sino include_once common.php. He probado las dos cosas y no hay ninguna diferencia, aunque luego leyendo veo que sí son diferentes (uno chequea errores y otro no o algo así?)

Ya sea require o include_once, la frase la pongo arriba del todo del documento, no solo dentro del menú... creo que esto lo tengo que hacer así, si no solo estaría llamando a common.php desde el ul del menú, no?
  #12 (permalink)  
Antiguo 26/12/2013, 14:42
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

require es igual que include excepto en que en caso de fallo se para el script y se emite un warning , con include el script continua y se emite un warning y con include_once , _once sirve para no incluir mas de una vez un archivo primero comprueba si ya esta incluido y si esta ya no lo incluye mientras que include incluiria el archivo aunque este ya este incluido, revisa el manual.

http://php.net/manual/es/function.include.php
http://www.php.net/manual/es/function.include-once.php
http://www.php.net/manual/es/function.require.php
http://www.php.net/manual/es/function.require-once.php

Haber yo lo haria asi el common lo incluyes en el index y este te resuelve el idioma una vez resuelto creamos los links - link?lang=$language , y en la pagina que quieres abrir tan solo verificas si existe idioma y si existe , segun el idioma mostramos el texto, si no existe el idioma puedes poner por defecto alguno o mostrar un mensaje de error.

Hasta aqui que problemas tienes ahora mismo , donde te has quedado o en que estas atascado?
  #13 (permalink)  
Antiguo 30/12/2013, 04:59
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Hola otra vez!

Tal como lo tengo escrito hay dos cosas que fallan:

1. La cookie no se guarda. Es decir, que si elijo ver la web en inglés, luego cierro la ventana y luego la vuelvo a abrir y pico el dominio, me sale el idioma por defecto, o sea español, cuando debería haberse guardado la cookie y abrírseme en inglés.

2. Cuando abro la ventana modal me coge siempre español, esté en el idioma que esté en la web. Tendría que haber una función que le dijese a los archivos que se abran desde el index, que recojan el idioma del index. Y si no (porque desde Facebook se abre la url sin el index), entonces coger el idioma por defecto.


Esto lo tengo en index.php, arriba del todo y también en el archivo que luego se abre como ventana modal:
Código PHP:

<?php
include_once 'common.php';
?>
Esto lo tengo en el ul del menú en index.php:
Código PHP:
 <?php
            
if($_GET['lang']=='es'){ ?> 
            <li class="language">
                <a href="index.php?lang=en"><span class="abrev">EN</span> <span class="sin-abrev"><?php echo $lang['MENU_EN_FULL']; ?></span></a>
            </li>
            <?php 
            if(
$_GET['lang']=='en'){  ?> 
             <li class="language">
                <a href="index.php?lang=es"><span class="abrev">ES</span> <span class="sin-abrev"><?php echo $lang['MENU_ES_FULL']; ?></span></a>
            </li>
            <?php }
            
?>

Esto es lo que tengo en common.php

Código PHP:
<?php
session_start
();
header('Cache-control: private'); // IE 6 FIX


    
if( ! isset($_GET['lang']) || empty($_GET['lang']) || ! ctype_alpha($_GET['lang']) ) // ctype validacion solo valido letras
    
{
        
// register the session and set the cookie
$_SESSION['lang'] = $lang;

setcookie("lang"$langtime() + (3600 24 30));

}
else if(isSet(
$_SESSION['lang']))
{
$lang $_SESSION['lang'];
}
else if(isSet(
$_COOKIE['lang']))
{
$lang $_COOKIE['lang'];
}
else
{
$lang 'es';
}

switch(
strtolower($_GET['lang'])){
  case 
'en':
  
$lang_file 'lang.en.php';
  break;

  case 
'es':
  
$lang_file 'lang.es.php';
  break;

  default:
  
header('location:'.$_SERVER['PHP_SELF'].'?lang=es');
  
$lang_file 'lang.es.php';



}

include_once 
'languages/'.$lang_file;

?>

Las dos últimas versiones de código que me has pasado no funcionaban, saltaba el error que te comentaba anteriormente.
  #14 (permalink)  
Antiguo 30/12/2013, 05:48
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Puedes usar el cascading de css para evitarte algunos ifs en php
Código HTML:
Ver original
  1. <style type="text/css">
  2. ..
  3. .idioma_en .not_when_language_en, .idioma_fr .not_when_language_fr, ... {display:none}
  4. .when_language_fr, .when_language_en {display:none}
  5. .idioma_en .when_language_en, .idioma_fr .when_language_fr {display:block}
  6. ..
  7. <body class="idioma_<php echo $_GET['lang'];?>">
  8. ...
  9.     <li class="not_when_language_en"><a ...>English</a></li>
  10.     <li class="not_when_language_fr"><a ...>French</a></li>
  11. ...
  12. </body>
Es decir, si al body le añades una clase que indique el idioma actual, y a cualquier cosa que NO deba mostrarse cuando el lenguaje actual sea el de un cierto idioma, le añades la clase "not_when_language_xx", se ocultarán.
Lo inverso (que se muestre cuando el lenguaje actual=='xx'), se consigue con las clases "when_language_xx"

Usar esto también significa que, en realidad, la página carga siempre todos los recursos necesarios para mostrar la página en todos los idiomas, y después los oculta.Si esos recursos son pesados (grandes imágenes,etc), es mejor hacer el "if" por el lado del servidor, para no descargarlos siquiera.
  #15 (permalink)  
Antiguo 30/12/2013, 10:25
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

1- Ya te dije que tendrias un problema a la hora de modificar el idioma si yo estoy en la web en español y pongo ingles este no se modificara tienes que verificar si hay o no cambios de idioma y en base a eso modificar la cookie la session etc...

2- No uses el common.php en el modal , en el link que creas en el index haces referecia al idioma como ya te dije modal.php?lang=$language , eso de facebook es simple no es necesario llamar a index.php?lang=es puede ser "?lang=es" o tambien con htaccess puedes modificarlo.

tienes varios errores de concepto que aun no logras controlar , por ejemplo si en el common resuelves el idioma por que despues verificas el <ul> con $_GET, no es comprensible ,en el switch

header('location:'.$_SERVER['PHP_SELF'].'?lang=es');
$lang_file = 'lang.es.php';

o rediriges o mandas por defecto el lang.es.php

header('location:'.$_SERVER['PHP_SELF'].'?lang=es');
exit;

o

$lang_file = 'lang.es.php';

tambien esta linea siempre te dara error $_SESSION['lang'] = $lang; ya que $lang no existe antes de esto.

Ya que no controlas mucho el tema , te aconsejo empezar con algo sencillo y despues ir añadiendo mas , sessiones , cookies , etc , crea un sistema sencillo que detecte de la url el idioma y en base a eso muestras el texto , cunado consigas eso , añades una session y tambien aprende a modificar el idioma , una vez hecho ya creas las cookies y demas , poco a poco y con buena letra ese es mi consejo , igualmente hecha un vistazo a lo que te dijo @dashtrash.

saludos ::.
  #16 (permalink)  
Antiguo 14/01/2014, 04:26
 
Fecha de Ingreso: septiembre-2005
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: php idioma: cómo ocultar/mostrar botón de idioma

Hola otra vez!

Gracias Dashtrash y webankenovi.

De momento prefiero seguir con el tema de php antes que css... más que nada porque me da la sensación de que ya lo tengo avanzado y si empiezo con otra cosa... puuffff

En cuanto a ir paso a paso estoy de acuerdo... Lo que pasa es que la web está colgada, los idiomas los pilla, cambia de español a inglés sin problemas... o sea que en realidad funciona excepto por un par de cosas!

Realmente me gustaría entender esas dos cosas que no funcionan antes que emnpezar otra vez. Tengo pendiente hacer un curso de php y así afianzaré todo el tema de la sintaxis, cómo se escriben las cosas y etc. Pero mientras tanto, en el punto en el que estoy, me gustaría resolverlo desde donde estoy.

Jejeje.. digo resolverlo pero vamos, que yo sola veo que no puedo

He ido probando diferentes opciones con todas las respuestas que me habéis mandado.

Por ejemplo, si en el strolower pongo
Código PHP:
switch(strtolower($language)){ 
me da fallo.

Si pongo

Código PHP:
switch(strtolower($_GET['lang'])){ 
me funciona.


Si en el strolower pongo
Código PHP:
  default:
  
$lang_file 'lang.es.php'
El index no me carga los <li> de "es" y "en"

Si pongo
Código PHP:
  default:
  
header('location:'.$_SERVER['PHP_SELF'].'?lang=es');
 exit; 
aquí parece todo correcto.

Si en el index, en los <li> pongo
Código PHP:
<?php
 
require 'common.php';
 
if(isset(
$language)){
 
if(
$language === 'es'){ ?>
 
<li class="language">
<a href="index.php?lang=en"><span class="abrev">EN</span> <span class="sin-abrev"><?php echo $lang['MENU_EN_FULL']; ?></span></a>
</li>
 
<?php }elseif($language === 'en'){ ?>
 
<li class="language">
<a href="index.php?lang=es"><span class="abrev">ES</span> <span class="sin-abrev"><?php echo $lang['MENU_ES_FULL']; ?></span></a>
</li>
 
 
<?php }else{ ?>
 
 
<p>idioma no disponible</p>
 
 
<?php }}else{ ?>
 
<p>Se ha producido un error</p>
me da fallos.
Si lo dejo como lo tengo ahora (poniendo al inicio del documento el include del common):
Código PHP:
<?php
            
if($_GET['lang']=='es'){ ?> 
            <li class="language">
                <a href="index.php?lang=en"><span class="abrev">EN</span> <span class="sin-abrev"><?php echo $lang['MENU_EN_FULL']; ?></span></a>
            </li>
            <?php 
            if(
$_GET['lang']=='en'){  ?> 
             <li class="language">
                <a href="index.php?lang=es"><span class="abrev">ES</span> <span class="sin-abrev"><?php echo $lang['MENU_ES_FULL']; ?></span></a>
            </li>
            <?php }
            
?>
Entonces todo funciona ok, aunque no me guarda la cookie.



Si en el archivo de la ventana modal hago el include del common, me carga el texto de idioma PERO SIEMPRE EN ESPAÑOL.

Si no hago el include, no me carga el idioma, se queda vacío.

Desde el index llamo a la ventana así:
<a class="group1 icon zoom" href="session-whos-in-the-house.php?lang=$language" title="<?php echo $lang['MENU_SESIONES']; ?>"></a>

Webankenobi, entiendo esta frase que dices:
Código HTML:
tambien esta linea siempre te dara error $_SESSION['lang'] = $lang; ya que $lang no existe antes de esto.
Lo que quieres decir es que $lang hay que definirlo antes de los if, no?


Aquí se puede ver la web colgada, en realidad yo creo que da el pego... Funciona lo de las newsletters, funcina el formulario de contacto, se puede cambiar de idioma (aunque hay un montón de textos que no están traducidos)... pero saber que hay cosas que están mal me deja la conciencia intranquila:

w w w.b o u j i s b c n.com

Última edición por nexj; 24/01/2014 a las 02:33

Etiquetas: formulario, idioma
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 23:51.