Buenas de nuevo, hoy hos escribo para daros a conocer de una función que he encontrado en una de las paginas web que la empresa me hace arreglar, de las chapuzas del anterior programador, que es multidioma. Idiomas que vamos a usar: catalán, castellano, inglés, francés. De momento la pagina en cuestion, es.opticarueda.com, solo soporta por redireccion el idioma catalán y castellano (ca., es.).
Al grano.
El codigo que hos muestro a continuación, se compone de 5 funciones que insertan un texto en la BD si no existe, y si existe retornan la traducción de este, predefinida por la variabe $lang.
$lang = ‘es’;
CREATE TABLE _gettext (
gettext_md5 varchar(32) NOT NULL default '',
gettext_original varchar(255) NOT NULL default '',
gettext_ca varchar(255) NOT NULL default '',
gettext_es varchar(255) NOT NULL default '',
gettext_en varchar(255) NOT NULL default '',
gettext_fr varchar(255) NOT NULL default '',
PRIMARY KEY (gettext_md5)
)
function load_language($lang) {
$GLOBALS['language'] = array();
$sql = "SELECT gettext_md5, gettext_original, gettext_{$lang} FROM _gettext";
$result = mysql_query($sql);print_r(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
if (empty($row["gettext_$lang"])) $value = $row['gettext_original'];
else $value = $row["gettext_$lang"];
$GLOBALS['language'][$row['gettext_md5']] = $value;
}
}
function _gettext($in) {
$md5 = md5($in);
if (!isset($GLOBALS['language'][$md5])) {
$sql = "INSERT INTO `_gettext` (`gettext_md5`,`gettext_original`)
VALUES ('$md5','".mysql_real_escape_string($in)."');";
$result = mysql_query($sql);
return $in;
} elseif (empty($GLOBALS['language'][$md5])) {
return $in;
} else {
return $GLOBALS['language'][$md5];
}
}
function __($in) {
$md5 = md5($in);
if (!isset($GLOBALS['language'][$md5])) {
$sql = "INSERT INTO `_gettext` (`gettext_md5`,`gettext_original`)
VALUES ('$md5','".mysql_real_escape_string($in)."');";
$result = mysql_query($sql);
return $in;
} elseif (empty($GLOBALS['language'][$md5])) {
return $in;
} else {
return $GLOBALS['language'][$md5];
}
}
Estas son las funciones necesarias para usar el multidioma. Ahora lo que le sigue, es que cada texto que querais traducir, envez de escribirlo tal cual, debeis pasarlo por parametro a la funcion _gettext(“texto a traducir”);
Ej.
NO: <h2>titulo en castellano</h2>
SI: <h2><?=_gettext(“titulo en castellano”)?></h2>
Esto automaticamente mirara si “titulo en castellano” se encuentra en la tabla gettext de la bd. Si no la encuentra, automaticamente la inserta con un identificador MD5. Si ya esta, entonces recuperara el valor que se encuentre en el campo.. gettext_$lang. Y ya teneis la traduccion echa.
El mismo sistema puede hacerse para cambiar el idioma de los ficheros php. index.php –> inicio.php –> inici.php –> home.php
Esto se consigue con el mismo sistema. envez de _gettext() una funcion _getlink()
No voy a comentar como esta echa de mal o de bien el codigo que hos he posteado, porque no es mio. Lo que si sé es que funciona correctamente.
Filed under: PHP, zona seria | 3 Comments
Tags: funcion php, gettext, multidioma, php, web multilingue
Buscar
-
Tú estás actualmente navegando en Fallo Renal los archivos del blog
No hos olvideis de hacer un include/require del archivo .php que contiene las funciones.. que nos conocemos.
Esta comprobado que este script no es bueno para nuestro servidor SQL… lo dejo el codigo como mera anecdota.
UNA VERDADERA PORONGA