Jump to content
Jonno

Script de cambio de idiomas

Recommended Posts

Para una web bilingüe necesito un script para cambiar de idioma, de forma que en cada página y haciendo clic en un enlace puedas ir a la versión en el otro idioma.

 

El concepto sería:

- Clic en el enlace.

- Captar el nombre de la página.

- Eliminar la extensón del idioma "-c" (de castellano)

- Añadir la extensión del otro idioma "-e" (de euskera)

- Cargar la web.

 

En PHP creo que sería capaz de hacerlo, pero preferiría que no fuera dependiente de PHP.

¿Se puede en JavaScript?

He buscado en Google pero me ha resultado imposible encontrar algo con esos datos.

Share this post


Link to post
Share on other sites

Ahíva!! ¿Pero no te has fijado quién dejó el mensaje??

Estoy tonto yo o qué? :lol: :lol:

 

Muchas gracias

Share this post


Link to post
Share on other sites

Debo ser un inepto total porque no consigo que me funcione. Al hacer clic en el enlace me carga siempre la misma página.

 

El script es el mismo cambiando algunas variables: como va en castellano y euskera he usado como definición de sufijos "c" y "e", dejando en blanco el idioma por defecto.

En la longitud del sufijo he puesto 1.

Y como separador he dejado "-"

 

Los archivos se llaman "prueba.html" y "prueba-e.html"

 

Y la llamada al script la hago así: onclick="cambia_idioma (e)" y onclick="cambia_idioma ©"

 

<script language="JavaScript1.2" type="text/javascript">
/* Cambia_idioma Javascript 0.2
  imaginatic dhtml         dhtml@imaginatic.com
 
  Este script cambia entre diferentes idiomas en una pagina web
  utilizando un sufijo en el nombre del archivo, por ejemplo
 
  nombre.html  nombre-fr.html nombre-en.html
 
  Este script puede ser utilizado y manipulado libremente, incluso
  sin mantener esta nota. No tiene ningun tipo de garantia.
*/

var sufijos = new Array ();
sufijos = {'c':'','e':'e'}; // definicion de los diferentes sufijos, dejando vacio el idioma por defecto

var largo_sufijo = 1; // los sufijos definidos anteriormente deben tener todos el mismo largo, especificado aqui

var separador = '-';  // separador, no utilzar signos como #, ? o un punto. El script puede no funcionar si hay puntos
                    // o guiones después de la extensión del archivo

var pagina_indice = 'index.html'; // pagina por defecto, se utiliza cuando no esta presente el nombre de archivo en la URl

function cambia_idioma (idioma){
url_completa = document.location.href;
url_host = document.location.host;
url_texto = url_completa.substring (url_completa.lastIndexOf ('//') + 2);
if (url_texto.lastIndexOf ('.') < url_host.length){
if (url_texto.lastIndexOf ('/') == (url_texto.length - 1)){
 url_completa = url_completa + pagina_indice;
} else {
 url_completa = url_completa + '/' + pagina_indice;
}
}
posicion_separador = url_completa.lastIndexOf (separador);
if (sufijos[idioma] == ''){
if (posicion_separador != -1){
  inicio_url = url_completa.substring (0,posicion_separador);
  final_url = url_completa.substr (posicion_separador + separador.length + largo_sufijo);
  document.location.href = inicio_url + final_url;
}
} else {
if (posicion_separador == -1){
 punto_final = url_completa.lastIndexOf ('.');
 inicio_url = url_completa.substring (0,punto_final);
 final_url = url_completa.substr (punto_final);
 document.location.href = inicio_url + separador + idioma + final_url;
} else if (url_completa.lastIndexOf (separador + idioma + '.') == -1){
  inicio_url = url_completa.substring (0,posicion_separador);
  final_url = url_completa.substr (posicion_separador + separador.length + largo_sufijo);
  nueva_url = inicio_url + separador + sufijos[idioma] + final_url;
  document.location.href = nueva_url;
}
}
}
</script>

Edited by Jonno

Share this post


Link to post
Share on other sites

Creo que es por que faltan las comillas, debería ser onclick="cambia_idioma ('e')", si pones onclick="cambia_idioma (e)" interpreta que e es una variable definida en algún otro sitio.

 

 

 

 

PS de nada, yo tampoco me acordaba que había respondido en ese tema...

Share this post


Link to post
Share on other sites

Se me había olvidado decirlo, pero ya me funciona.

 

Algo mal tenía aparte de la obviedad de las comillas (torpe de mi...), pero empezando todo de cero ya funcionó.

 

Muchas gracias Pintix!

Share this post


Link to post
Share on other sites

Retomo esto porque ahora me encuentro con otro problema.

 

En este tema quim y pintix me echasteis una mano con el envío de variables en la URL para cargar páginas.

 

Lo que me pasa ahora es que al intentar integrar aquello de las variables con esto del cambio de idioma, me encuentro con que el idioma debe cambiar en dos partes de la URL.

 

Es decir, antes me bastaba con manejar una URL estática en HTML como esta:

www.dominio.com/pagina-c.html

Y con el script de cambio de idioma puedo pasar a la versión en euskera sin problemas:

dominio.com/pagina-e.html

 

Pero al haber añadido lo de las variables me encuentro con que tengo que manejar dos páginas diferentes, la plantilla y el contenido, cada una con su sufijo de idioma. Es decir, tengo esto:

www.dominio.com/plantilla-c.php?=contenido-c

 

Con el JavaScript de cambio de idioma tal como está el enlace me pasa al contenido en el segundo idioma, pero con la plantilla en el primero. Es decir:

www.dominio.com/plantilla-c.php?=contenido-e

El JavaScript es lo que hace, y lo hace bien. No esperaba que por arte de magia encontrara todos los sufijos en la URL.

 

Pero ahora lo que necesito es:

www.dominio.com/plantilla-e.php?=contenido-e

... y no consigo nada útil.

 

 

¿Podéis echarme una mano con esto?

 

Gracias mil

PD: A veces vivir en un país bilingüe tiene unos problemas que nadie se imagina... :P

Share this post


Link to post
Share on other sites

Hola,

 

mezclando los scripts no sé

Otra opción sería enviar pagina-e y pagina-c hacia plantilla.php, y en plantilla.php

 

<?php 
if (isset($_GET['contenido'])) { //con el resto de script de seguridad que puso pintix
 $letra = $_GET['contenido'];
 $destino = "plantilla".$letra.".php?contenido=".$letra;
 header("Location: ".$destino);
}
?>

 

saludos!

Share this post


Link to post
Share on other sites

Me he perdido :huh:

Pero lo investigo, porque intuyo lo que quieres decir :)

Gracias!

 

De todas formas preferiría pulir el JavaScript.

 

Por si facilita la respuesta, en el script de cambio de idioma lo que hace el script ahora es coger la URL completa, buscar el separador (guión) y cambiar la letra que hay después. Para el primer sufijo de idioma en lugar de hacer una búsqueda por un carácter determinado podría hacerse que simplemente cambie la letra que hay en una posición determinada, porque el sufijo siempre va a estar en esa posición (el dominio no cambia, y el nombre de la plantilla tampoco). No es tan versátil y para usarlo con otras webs habría que adaptarlo porque la URL tiene diferente longitud (dominio diferente, nombre de plantilla diferente), pero funcionaría perfectamente.

 

Es decir, algo así:

 

- Coge la variable de idioma "e"

- Coge la URL completa "http://www.dominio.com/plantilla-c.php?etcétera"

- Cambia la letra de la posición 34 (donde está la c) por la variable de idioma.

- Esta es la nueva URL "http://www.dominio.com/plantilla-e.php?etcétera"

Share this post


Link to post
Share on other sites

No se si llego un poco tarde... ¿Aún te interesa que le de una vueltecita al tema? Aunque no se si habré aprendido algo desde el 2003... y he acabado un proyecto en javascript un poco denso y no se si no estoy saturado, pero como es bien sabido que soy un vicioso del código...

Share this post


Link to post
Share on other sites

Buaaaaahhhh, soy un hombre poseido por el vicio del código, creo que tendré que ir a terapia... XD

 

Lo que hace el script es buscar todas las coincidencias de -c o -e y las cambia por el contrario de lo que encuentra, espero que esa fuese la idea....

<html>
<body>
<script type="text/javascript">
function cambia_entre_2_idiomas (){
regexunidioma = /-[c]/g;
regexotroidioma = /-[e]/g;
la_url = document.location.href;
if (la_url.search (regexunidioma) != -1){
	nova_url = la_url.replace (regexunidioma,"-e");
	document.location.href = nova_url;
} else if (la_url.search (regexotroidioma) != -1){
	nova_url = la_url.replace (regexotroidioma,"-c");
	document.location.href = nova_url;
}
}
</script>
<a href="#" onclick="cambia_entre_2_idiomas ()">cambia idioma</a>
</body>
</html>

Edited by pintix
Cambio en código

Share this post


Link to post
Share on other sites

Eeesa es la idea!! Gracias Pintix.

Lo pruebo y te digo qué tal me ha ido :)

Share this post


Link to post
Share on other sites

El script parece que funciona, pero Dreamweaver me dice lo siguiente:

 

post-517-063837300 1330946847.png

 

¿Es importante?

 

* Alguno me dirá que no hace falta usar Dreamweaver para un código como este :P, pero uno tiene muchas limitaciones en esto del código... ;)

Share this post


Link to post
Share on other sites

Seguramente es por que se espera el guión "escapado" con la barra invertida, aunque si el guión es el primer elemento de una expresión regular no hace falta que lo esté... (uf, hablo de un clarooo, claro, meridiano, :D )

 

Prueba con:

       regexunidioma = /\-[c]/g;
       regexotroidioma = /\-[e]/g;

Share this post


Link to post
Share on other sites

Me sigue diciendo lo mismo. Pero puesto que el script funciona no le voy a prestar mucha atención a lo que diga Dreamweaver :D

 

Gracias Pintix :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.