Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cambio de idioma no funciona en Firefox

Estas en el tema de Cambio de idioma no funciona en Firefox en el foro de PHP en Foros del Web. Hola a todos,hace poco un cliente me encargó mi primera página web y en ella el quería que se permitiera cambiar de idioma.Pues bien, yo ...
  #1 (permalink)  
Antiguo 11/04/2016, 04:59
 
Fecha de Ingreso: febrero-2015
Mensajes: 56
Antigüedad: 9 años, 2 meses
Puntos: 1
Pregunta Cambio de idioma no funciona en Firefox

Hola a todos,hace poco un cliente me encargó mi primera página web y en ella el quería que se permitiera cambiar de idioma.Pues bien, yo le dije que sin problema ya que esto ya lo había hecho antes.Y cual es mi sorpresa? que le entrego la página web ya completa y me dice que el cambio de idioma no le funciona cuando en mi ordenador si.Por lo visto funciona en Opera y Chrome (que es donde lo había probado) pero no en Explorer y Firefox debido a que no se puede recuperar nada a través del $_Request.

Mi código es el siguiente:

Formulario del index.php:
Código PHP:
include "FuncionIdioma.php";
session_start();
if (!(isset(
$_SESSION['idioma']))) $_SESSION['idioma']="GALEGO";

$textos idioma(0$_SESSION['idioma']);

<
form class="idioma" action="CambioIdioma.php" method="get"
<
input type="image" name="idioma"  value="GALEGO" src="img/galego.png" class="icoidioma3"/>
<
input type="image" name="idioma"  value="ESPANHOL" src="img/español.png" class="icoidioma"/>
<
input type="image" name="idioma"  value="INGLES" src="img/ingles.png" class="icoidioma2"/>     
</
form>

<
div> echo $textos[6];</div//ejemplo de texto 
CambioIdioma.php
Código PHP:
// CambioIdioma.php
// Esta pagina es invocada por los enlaces de cambio de idioma
// Trae el idioma nuevo a poner en la aplicacion en la variable $idioma
// Recogemos la variable de idioma
$idioma $_REQUEST['idioma'];

// iniciamos la sesion
session_start();

// Sustituimos la variable de sesion de idioma por el nuevo valor
$_SESSION['idioma'] = $idioma;

// invocamos la pagina desde donde se llamo a esta
header("location: index.php"); 
FuncionIdioma.php
Código PHP:
<?php


//******************************************************************
// Read from a file de language texts for a page
// Parameters:
// $codpag : code of page to translate
// $idioma : code of language to use (ESPANHOL, ENGLISH)
// returns an array with all texts of the page in $idioma language
//******************************************************************
function idioma($codpag$idioma){
// initialize the lang array
    
$lang = array();
// define the name of file of language
    
$fichero $idioma.".LANG";
// open file in read mode
    
$FileLang fopen($fichero,"r");
// initialize $finish var for detect that language is totally obtained before eof file
    
$finish false;
// read the first line of file
    
$line fgets($FileLang);
// until eof or language obtained
// while doesnt find end of file or flag $finish be true
    
while (!feof($FileLang) && !$finish ){
    
// if the six firts characters are CodPag and the CodPag value be correct
        
if ((substr($line,0,6)=="CodPag") && (substr($line,6)==$codpag)){
           
            
$line fgets($FileLang);
                
$line trim($line);
                
// while doesnt find end of file or other CodTexto
            
while (!feof($FileLang) && (substr($line,0,8)=="CodTexto"))
                {
                    
// store de number of codtext 
                
$codtext substr($line8);
                
                
$endcodetextlang false;
                
$text "";
                    While ( !
feof($FileLang) && !$endcodetextlang)
                    {
                
// read all lines of codtext of language
                    // initialization of $endcodetextlang to false, will take true value when doesn't find
                    // more CodText for this page lang
                    // read the value of language for the codtext
                
$line fgets($FileLang);
                while (!
feof($FileLang) && (!$endcodetextlang))
                    {
                    if (!(
substr($line,0,3)=="Cod") && !(substr($line,0,1)=="#") && !feof($FileLang))
                    {
                    
// delete special characters of the line
                    
$line trim($line);
                    
$text .= $line;
                    
$line fgets($FileLang);
                    }
                    else
                    
$endcodetextlang true;
                }
                    
// puts the text language in $codtext position of the array
                
}
                
$lang[intval($codtext)] = $text;
            
// read for next codtext or end of codtext
            // read for next line of the same codtext of find other codtext, codpag of eof
                
            //$line = fgets($FileLang);
            
}
            
// all information of language for this codpage has been obtained
            // $finish = true;
            
$finish true;
        }
        else
        {
            
$line fgets($FileLang);
        }
    }
    return 
$lang;
}
?>
Y ya por último un trozo de fichero de lenguaje Galego.lang
Código PHP:
#
# CodPag 0 || index.php
#
CodPag0
CodTexto1
Inicio
CodTexto2
Materias 
CodTexto3 

No se si se entiende la idea y mi problema pero básicamente es que en Chrome si hago un print_r($_REQUEST['idioma']) me sale el idioma escogido pero en Firefox sale vacío y no se muy bien a que se debe, he probado de todo incluso cambiando las preferencias del propio navegador.

Espero que alguien me pueda ayudar,muchas gracias.
  #2 (permalink)  
Antiguo 11/04/2016, 05:03
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: Cambio de idioma no funciona en Firefox

Deberias de hacer este cambio:

Código PHP:
Ver original
  1. $idioma = $_GET['idioma'];

esto:
Código PHP:
Ver original
  1. // iniciamos la sesion
  2.  
  3. // CambioIdioma.php
  4. // Esta pagina es invocada por los enlaces de cambio de idioma
  5. // Trae el idioma nuevo a poner en la aplicacion en la variable $idioma
  6. // Recogemos la variable de idioma
  7. $idioma = $_REQUEST['idioma'];
El inicio de sesion deberia de estar al principio de todo, al menos eso me enseñaron
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 11/04/2016, 05:17
 
Fecha de Ingreso: febrero-2015
Mensajes: 56
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Cambio de idioma no funciona en Firefox

Cita:
Iniciado por xfxstudios Ver Mensaje
Deberias de hacer este cambio:

Código PHP:
Ver original
  1. $idioma = $_GET['idioma'];

esto:
Código PHP:
Ver original
  1. // iniciamos la sesion
  2.  
  3. // CambioIdioma.php
  4. // Esta pagina es invocada por los enlaces de cambio de idioma
  5. // Trae el idioma nuevo a poner en la aplicacion en la variable $idioma
  6. // Recogemos la variable de idioma
  7. $idioma = $_REQUEST['idioma'];
El inicio de sesion deberia de estar al principio de todo, al menos eso me enseñaron
Tienes razón aunque en este caso aún poniéndolo al principio el resultado es el mismo y no consigo que funcione.Y cambiando REQUEST por GET tampoco afecta.
  #4 (permalink)  
Antiguo 11/04/2016, 05:53
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: Cambio de idioma no funciona en Firefox

No creo que el problema este en el php, que si funciona en otros navegadores el php en principio es correcto.

Lo más probable en mi opinión es que por algún motivo las cookies no están funcionando en esos navegadores.

También es posible que haya algún error de sintaxis en el html y esos navegadores no interpreten bien el form.

Puedes empezar por verificar el html que se genera con el mismo ff suele marcar en rojo si hay algún error en la sintaxis.

Y si todo esta bien comprobar con firebug o alguna extensión similar si se crean las cookies necesarias correctamente.
__________________
Unset($vida['malRollo']);
  #5 (permalink)  
Antiguo 11/04/2016, 06:18
 
Fecha de Ingreso: febrero-2015
Mensajes: 56
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Cambio de idioma no funciona en Firefox

Cita:
Iniciado por xerifandtomas Ver Mensaje
No creo que el problema este en el php, que si funciona en otros navegadores el php en principio es correcto.

Lo más probable en mi opinión es que por algún motivo las cookies no están funcionando en esos navegadores.

También es posible que haya algún error de sintaxis en el html y esos navegadores no interpreten bien el form.

Puedes empezar por verificar el html que se genera con el mismo ff suele marcar en rojo si hay algún error en la sintaxis.

Y si todo esta bien comprobar con firebug o alguna extensión similar si se crean las cookies necesarias correctamente.
He comprobado los errores en rojo y solo había dos errores pequeños pero nada relevante, incluso probé a quitar todo el código y dejar solo el formulario y el resultado era erróneo en Firefox y correcto en Chrome.
He probado también el firebug y sólo se crea una cookie (PHPSESSID) que es idéntica que la que se crea en Chrome
  #6 (permalink)  
Antiguo 11/04/2016, 06:59
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: Cambio de idioma no funciona en Firefox

Pues que raro.
PHPSESSID es la cookie que se crea al utilizar sesiones en php.
No se muy bien a que puede ser debido, sinceramente.

Si no entiendo mal, el problema es que no se recibe nada en CambioIdioma.php median get cuando utilizas FF.

Ya que has instalado firebug, en la pestaña de red puedes revisar las cabeceras que se envían y verificar que se envían los datos mediante get, más que nada para tratar de esclarecer si es un problema en el envío o en la recepción. También revisa la ruta, vaya a ser que al definir la de forma relativa no se esté tomando bien en todos los navegadores.

Puedes también probar a cambiarlo al método post. Y comprobar que sucede.
__________________
Unset($vida['malRollo']);
  #7 (permalink)  
Antiguo 11/04/2016, 08:47
 
Fecha de Ingreso: febrero-2015
Mensajes: 56
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Cambio de idioma no funciona en Firefox

Cita:
Iniciado por xerifandtomas Ver Mensaje
Pues que raro.
PHPSESSID es la cookie que se crea al utilizar sesiones en php.
No se muy bien a que puede ser debido, sinceramente.

Si no entiendo mal, el problema es que no se recibe nada en CambioIdioma.php median get cuando utilizas FF.

Ya que has instalado firebug, en la pestaña de red puedes revisar las cabeceras que se envían y verificar que se envían los datos mediante get, más que nada para tratar de esclarecer si es un problema en el envío o en la recepción. También revisa la ruta, vaya a ser que al definir la de forma relativa no se esté tomando bien en todos los navegadores.

Puedes también probar a cambiarlo al método post. Y comprobar que sucede.
Exacto, me sale que la variable $idioma no contiene nada, es decir, el $_REQUEST no recibe nada.
He comprobado que se envían pero no se reciben, me sale un error 302 aunque he comprobado en Chrome y también sale.
No hay direcciones relativas y también he probado a cambiar get por post y el resultado es el mismo...
  #8 (permalink)  
Antiguo 11/04/2016, 10:35
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: Cambio de idioma no funciona en Firefox

la verdad no se que le haces, si es de php o no el problema, el asunto es que si no te genera la variable de sesion algo hay allí, yo traduje una web fué de esta manera:

Este codigo recibe la peticion de idioma y lo cargo por medio de un include en la cabecera de las paginas
Código PHP:
Ver original
  1. header('Cache-control: private'); // IE 6 FIX
  2.  
  3. if(isset($_GET['lang'])){
  4.     $lang = $_GET['lang'];
  5.  
  6.     //registra sesion
  7.     $_SESSION['lang'] = $lang;
  8.    
  9.     //define cookie
  10.     setcookie('lang', $lang, time() + (3600 * 24 * 30));
  11.    
  12.     //busca en variables cookie y session
  13. }else if(isset($_SESSION['lang'])){
  14.     $lang = $_SESSION['lang'];
  15. }else if(isset($_COOKIE['lang'])){
  16.     $lang = $_COOKIE['lang'];
  17. }else{
  18.     $lang = 'es';
  19. }
  20.  
  21. switch ($lang) {
  22.   case 'en':
  23.   $lang_file = 'lang/lang.en.php';
  24.   break;
  25.  
  26.   case 'es':
  27.   $lang_file = 'lang/lang.es.php';
  28.   break;
  29.  
  30.   case 'po':
  31.   $lang_file = 'lang/lang.po.php';
  32.   break;
  33.  
  34.   default:
  35.   $lang_file = 'lang/lang.es.php';
  36.  
  37. }
  38.  
  39. include_once $lang_file;


y la traducción la hago de esta manera:


Código PHP:
Ver original
  1. /*
  2. ------------------
  3. Language: English
  4. ------------------
  5. */
  6.  
  7. define('LANG_TIT1' , '¿WHY CHOOSE US?');
  8. define('LANG_RESTIT1','We are a company that offers a modern, innovative and unique management system Occupational Safety and Health, designed to simplify the work plans of the safety program with a systematic approach, an easy, fast, safe and efficient.');

y así con cada linea en la que tenga que definir el idioma, luego en el archvo solo cargo esto donde debo hacer la traducción:

Código PHP:
Ver original
  1. <?php echo LANG_TIT1; ?>

y ya está, me funciona en cualquier navegador y hasta en los móviles sin problemas. Saludos y espero te sirva
__________________
[email protected]
HITCEL
  #9 (permalink)  
Antiguo 12/04/2016, 03:22
 
Fecha de Ingreso: febrero-2015
Mensajes: 56
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Cambio de idioma no funciona en Firefox

Cita:
Iniciado por xfxstudios Ver Mensaje
la verdad no se que le haces, si es de php o no el problema, el asunto es que si no te genera la variable de sesion algo hay allí, yo traduje una web fué de esta manera:

Este codigo recibe la peticion de idioma y lo cargo por medio de un include en la cabecera de las paginas
Código PHP:
Ver original
  1. header('Cache-control: private'); // IE 6 FIX
  2.  
  3. if(isset($_GET['lang'])){
  4.     $lang = $_GET['lang'];
  5.  
  6.     //registra sesion
  7.     $_SESSION['lang'] = $lang;
  8.    
  9.     //define cookie
  10.     setcookie('lang', $lang, time() + (3600 * 24 * 30));
  11.    
  12.     //busca en variables cookie y session
  13. }else if(isset($_SESSION['lang'])){
  14.     $lang = $_SESSION['lang'];
  15. }else if(isset($_COOKIE['lang'])){
  16.     $lang = $_COOKIE['lang'];
  17. }else{
  18.     $lang = 'es';
  19. }
  20.  
  21. switch ($lang) {
  22.   case 'en':
  23.   $lang_file = 'lang/lang.en.php';
  24.   break;
  25.  
  26.   case 'es':
  27.   $lang_file = 'lang/lang.es.php';
  28.   break;
  29.  
  30.   case 'po':
  31.   $lang_file = 'lang/lang.po.php';
  32.   break;
  33.  
  34.   default:
  35.   $lang_file = 'lang/lang.es.php';
  36.  
  37. }
  38.  
  39. include_once $lang_file;


y la traducción la hago de esta manera:


Código PHP:
Ver original
  1. /*
  2. ------------------
  3. Language: English
  4. ------------------
  5. */
  6.  
  7. define('LANG_TIT1' , '¿WHY CHOOSE US?');
  8. define('LANG_RESTIT1','We are a company that offers a modern, innovative and unique management system Occupational Safety and Health, designed to simplify the work plans of the safety program with a systematic approach, an easy, fast, safe and efficient.');

y así con cada linea en la que tenga que definir el idioma, luego en el archvo solo cargo esto donde debo hacer la traducción:

Código PHP:
Ver original
  1. <?php echo LANG_TIT1; ?>

y ya está, me funciona en cualquier navegador y hasta en los móviles sin problemas. Saludos y espero te sirva
Probé eso tambien y nada, al final di con la solución cambiado el formulario:
Código PHP:
Ver original
  1. <button type="submit" name="idioma" class="botonidioma icoidioma" value="GALEGO" onClick="this.form.submit();">
  2.                             <input type="image"  src="img/galego.png" class="ficoidioma3"/>
  3.                         </button>
  4.                         <button type="submit" name="idioma" class="botonidioma icoidioma" value="ESPANHOL" onClick="this.form.submit();">
  5.                             <input type="image"  src="img/español.png" class="ficoidioma"/>
  6.                         </button>
  7.                         <button type="submit" name="idioma" class="botonidioma icoidioma" value="INGLES" onClick="this.form.submit();">
  8.                              <input type="image"   src="img/ingles.png" class="ficoidioma2"/>
  9.                         </button>
Y metiendole css a los botones para que fueran transparentes y tuvieran los iconos de fondo.Muchas gracias a todos igualmente.
  #10 (permalink)  
Antiguo 12/04/2016, 04:27
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: Cambio de idioma no funciona en Firefox

Investigando un poco creo que he dado con el problema, y es algo ya reportado.

Al utilizar un input type=image el comportamiento natural de los navegadores es enviar las coordenadas X y Y de donde se pincho en la imagen y algunos navegadores omiten el value ya que no se espera.

Lo que más me ha despistado es que dijeras que al comprobar con firebug las cabeceras si se estaba enviando el value.

Por lo tanto esto y como ejemplo :

Código HTML:
Ver original
  1. <input type="image" name="b"  value="mi_valor" src="img.png" class="clase"/>

No asegura que el value se envíe en todos los navegadores, asegura que se enviaran las las coordenadas donde se pincho.

Utilizando get, algo como esto:
Código HTML:
Ver original
  1. Midominio.es?b.x=19&b.y=17

Cuando se esperaría algo como:
Código HTML:
Ver original
  1. Midominio.es?b.x=19&b.y=17&b=mi_valor
__________________
Unset($vida['malRollo']);

Etiquetas: cookie, 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 22:43.