Estoy programando el nuevo sitio web para un famoso grupo de música y me han pedido hacerlo en 4 idiomas: catalán, castellano, inglés e francés.
Podría hacerlo de muchas maneras pero he escojido la siguiente: Mediante carpetas /en, /es, /fr, /ca voy a ir poniendo archivos con los textos del sitio traducidos (excepto el contenido dinámico, por supuesto). Usaré la función define() para a una misma variable darle diferentes valores.
También habrá una variable de session expandida por todo el sitio llamada $_SESSION['lang']. Así pues dependiendo de esa variable con 4 posibles valores (es, ca, en, fr) la usaremos para incluir un archivo u otro. Por ejemplo:
$l = $_SESSION['lang'] = 'es';
include 'es/traduccion_'. $l .'.php';
Otro problema que he tenido ha sido, cómo cambiar de idioma mediante sesiones y que hacer la primera vez que alguien entra en el sitio.
El script consta de un sólo archivo que lo he llamado lang.inc.php
session_start();
function initLang(){
if(!$_SESSION['lang'] || $_SESSION['lang'] == ""){
$_SESSION['lang'] = "es";
}
}
function setLang($lang){
if($lang == "" || empty($lang)){ initLang();
}else{
switch($lang){
case "en": case "fr": case "ca": case "es": $_SESSION['lang'] = $lang; break;
default: $lang = "es";
}$_SESSION['lang'] = $lang;
}
}
Y para su uso es tan fácil cómo llamar a la siguiente función al inicio de cada pàgina:
require 'inc/lang.inc.php';
setLang($lang); // donde $lang puede venir mediante $_GET ej: ?lang=fr
Así de fácil
Espero que os sirva.
{ 6 comments… read them below or add one }
Un saludo, ecelente ejemplo, muchas gracias por el aporte ya que precisamente necesitava esto mismo y todo lo que había probado me había funcionado a media.
El problema mas grande con el que me encuentro siempre es en componer una función como dios manda para gestionar el cambio de idioma durante la navegación, para que se mantenga en la misma página.
Y con el paso de parámetros por GET, también me encuentro con un soberano problema a la hora de tener que gestionar procesos, peticiones de inserción de formularios, paginaciones de listado.. etc… que siempre tienes que ir recogiendo lo que te viene por $_GET y luego devolverlo para mostrar el listado….
Un tema rudo y peliagudo… a ver, eso siempre se puede solucionar con una $_SESSION, pero personalmente no me gustan…
Si alguien tiene una forma lógica de proceder y evitar esto, sería algo fabuloso
Gracias
Hola Marc!,
Em permeto el luxe de respondre en català.
Amb la sessió enmegatzaada i la funció $_SERVER['REQUEST_URI'] pots fer alguna cosa del tipus:
$url = $_SERVER['REQUEST_URI'].$_SESSION['lang'];
A veure si et pot ser d’ajuda.
Salutacions!
Buenas, no me funciona.. no llega ni a hacer una selección e codigo todos los codigos que muestra y he seguido las instruccines y no consigo hacerlo :/&
Hola Manel i Marc. Jo el que faig, per mantenir tota la cadena de les variables, i per tal que no em dupliqui el paràmetre de l’idioma, és el següent:
$value)
// Si el paràmetre no és l’idioma
if($key != lang){
$gets.=”&”.$key.”=”.$value;
}
?>
I llavors, a l’enllaç a cada idioma, el “href” apunta a:
?lang=nomdelidioma
Pot ser una mica liós, però a mi em funciona. Si teniu cap dubte, el meu correu és jaume@espaipixel.com
Salut!
Collons! Veig que se m’ha menjat part del codi…
Miro de tornar-lo a enganxar:
// Recullo els paràmetres _GET (si n’hi ha)
$gets=”";
foreach ($_GET as $key => $value)
// Si el paràmetre no és l’idioma
if($key != lang){
$gets.=”&”.$key.”=”.$value;
}
Faig el link:
echo $_SERVER["PHP_SELF"].”?lang=nomdelidioma”.$gets
A veure si ara es veu bé…
Salut!