Hola! espero que este aporte le sirva a más de uno, es una pequeña clase que hice para traducir un sitio web, permite crear varios lenguajes fácilmente, aunque no es tan fácil de implementar como se imaginarán, sin embargo a mi me ha servido mucho!
Bueno comienzo explicando que este sistema no usa base de datos, por lo que es fácil para el usuario-cliente modificar, eliminar y agregar idiomas, el primer paso es crear una carpeta llamada "lang" donde creamos los archivos con nombres en un idioma por defecto por ejemplo ingles con extensión ".php" debería quedar así:
english.php
spanish.php
italian.php
después de crear cada archivo de idioma debemos agregar una única declaración de un arreglo llamado $words con las expresiones en el idioma por defecto y traducidas, por ejemplo:
spanish.php
Código PHP:
<?php
$words=array(
"Hello"=>"Hola",
"Name"=>"Nombre",
"E-mail"=>"Correo",
"Cell phone"=>"Celular",
"Password"=>"Contraseña",
"Confirm"=>"Confirmar",
"Access"=>"Acceso",
"Area"=>"Área",
"Minor"=>"Menor",
"Emergency"=>"Emergencia",
"Alarm"=>"Alarma",
"Login"=>"Iniciar sesión",
"Actions"=>"Acciones",
"Logout"=>"Salir"
);
?>
Cada vez que quieran crear un idioma nuevo, bastaría con copiar uno existente y modificarlo.
No es necesario traducir las palabras en ingles, por lo tanto el archivo de ingles podría quedar así:
default.php
Código PHP:
<?php
$words=array(
"Hello"=>"Hello"
);
?>
Cada expresión puede tener más de una palabra, deberían empezar siempre con mayúscula, (de todos modos se traducirán en MAYUSCULAS o minusculas, pero el arreglo debe ser Capitalizado), esto permite traducir correctamente expresiones largas con mayusculas como por ejemplo:
Código PHP:
"Create a new IP"=>"Crear nueva IP",
Ahora fuera de la carpeta creamos un archivo php llamado "lang.php", que es donde incluiremos la clase necesaria para traducir todas las páginas:
lang.php
Código PHP:
<?php
if(!isset($declared)){
class lngx{
var $words;
var $ret;
function lngx(){
if($lan=$_SESSION['language']) include("lang/$lan.php");else include("lang/default.php");
$this->words=$words;
}
function tran($word){
$ret=$word;
if(isset($this->words[$word])) $ret=$this->words[$word];
elseif(isset($this->words[strtoupper(substr($word,0,1)).substr($word,1)])) $ret=mb_strtolower($this->words[strtoupper(substr($word,0,1)).substr($word,1)],"UTF8");
elseif(isset($this->words[substr($word,0,1).strtolower(substr($word,1))])) $ret=strtoupper($this->words[substr($word,0,1).strtolower(substr($word,1))]);
return $ret;
}
}
$lang=new lngx;
$declared=1;
}
?>
Si observan, verán que el idioma lo defino en una sesión llamada "language", esto es útil para mantener siempre el idioma del usuario a medida que navega.
Para imprimir una palabra traducida debería usarse este formato:
Código PHP:
include("lang.php"); //incluir el archivo con la clase
//esto lee el arreglo del archivo solo una vez y se podrá usar varias veces
echo $lang->tran("Hello");
echo "<p>".$lang->tran("Login")."</p>";
si la palabra no se encuentra se devuelve el valor tal cual fue ingresado:
Código PHP:
echo $lang->tran("Whisky"); //Imprime "Whisky"
La clase acepta mayusculas y minusculas, siempre y cuando sea la palabra completa en minusculas o mayusculas, por ejemplo:
Código PHP:
echo $lang->tran("Create a new IP"); //Imprime "Crear nueva IP"
echo $lang->tran("CREATE A NEW IP"); //Imprime "CREAR NUEVA IP"
echo $lang->tran("create a new ip"); //Imprime "crear nueva ip"
Ahora si se quiere traducir un parrafo muy largo, pueden usar una referencia por ejemplo:
en spanish.php agregar
Código PHP:
"ReportsAndAlertsText"=>"Cada vez que el sistema identifique algún tipo de anormalidad, generará diversos reportes y alertas preventivas a todo el personal responsable. De esa forma se tendrá un control total de las flotas."
claro que tambien tendría que agregarse en english.php
Código PHP:
"ReportsAndAlertsText"=>"Each time the system to identify any abnormality, generate various reports and early warning to all staff responsible. That way you will have a total control of the fleets."
luego solo imprimir $lang->tran("ReportsAndAlertsText") para obtener el texto completo
Para imprimir una lista de los idiomas disponibles y poder cambiarlos, puede usarse algo como esto:
Código PHP:
<?php
if($slang=$_GET['slang']) $_SESSION['language']=$slang;
echo $lang->tran("Change language").": ";
$dir=opendir("lang/");
$first=1;
while (($file = readdir($dir)) !== false) {
if(substr(strtolower($file),-4)==".php"){
$slang=substr($file,0,-4);
if($first) $first=0; else echo "| ";
if($_SESSION['language']==$slang) echo ucfirst($lang->tran($slang));
else{ ?>
<a href="index.php?lang=<?php echo $slang; }?>" ><?php echo ucfirst($lang->tran($slang)); }?></a>
<?php }
} ?>
Si alguien cree poder mejorar este sistema es bienvenido a aportar :)