Cargando



Como crear consultas multi idiomas a MySQL con pHp

Muchas veces en nuestros proyectos realizamos sitios web con PHP y MySQL donde se puede dar el caso de que tengamos que utilizar una base de datos con diferentes idiomas, para un sitio web multi idioma.


jul 11 2014 12:45
Avanzado
Un aspecto que se debe tener muy cuenta es definir correctamente la estructura de la base de datos. Aunque pueden existir diferentes maneras de guardar los registros, tendremos que ver como conviene estructurar la información, esto es lo que se llama proceso de normalización de bases de datos, que es un estudio de las relaciones entre las tablas. Lo primero que tenemos que tener claro, es que aunque tengamos los registros en la base de datos, la misma no va a sufrir una carga de consultas, ya que usaremos la propia caché de MySQL para tener cacheados los registros, digamos que no tiene sentido obtener el nombre de una ciudad en cada consulta si siempre se va a llamar igual, por es configuraremos nuestro tamaño de la caché en función del volumen que pueda generar nuestra base de datos. Si deseas cambiar el tamaño de la caché debes utilizar query_cache_size ya que es la variable de MySQL que controla el tamaño total de caché.

La relación de registros la crearemos con InnoDB y el uso de claves foráneas para relacionar tablas, así tendremos por ejemplo una tabla que se llamará Paises y un campo el id del idioma y otra tabla con los idiomas con traducciones será , esta última tabla será la que tenga los registros que estarán traducidos los nombre de los países en diferentes idiomas.

multi-idioma.jpg


Desde PHP la manera que tenemos de controlar el idioma es haciendo uso de sesiones, en este caso guardamos el ID del registro de la tabla de la base de datos para identificar el idioma del usuario, podemos hacerlo por geolocalización o bien utilizar un idioma por defecto para la web y luego que el usuario lo cambie.
Ponemos una sesión con el id del idioma:
$_SESSION['idiomaid'] = 1  o  $_SESSION['idiomaid'] = 'es';

Gracias a esta variable de sesión, cuando hagamos consultas a la base de datos utilizaremos una clausula WHERE como esta para consultar los registros según el idioma.
Select * from Paises  WHERE idiomaid='".$_SESSION['idiomaid']."'
Select * from Productos WHERE idiomaid='".$_SESSION['idiomaid']."'

Basándonos en este método deberemos preparar nuestro diseño para que se adapte a los idiomas, creando todo el diseño para aceptar contenido dinámico. Por ejemplo en mysql para el titulo de la pagina tendremos un campo para cada idioma:
titulo=este es mi producto   idioma=es
titulo=this is my product    idioma=en


Así como la consulta mysql trae el idioma definido podemos generar el contenido.

Por ejemplo el titulo de la pagina quedaría así:
<title><? echo $titulo ?></title>

Un enlace también dinámico con el atributo alternate:
<a href=”midominio.com/pagina.php” rela=”alternate”><? Echo $fila['titulo'] ?></a>

Tambien podemos hacerlo para diversos elementos de la web cómo botones:
<input type="submit" value="<? Echo $tituloboton ?>">

Esto nos permite abstraernos del idioma del usuario para mostrar contenido adaptado según el pais e incluso secciones diferentes. Ademas de Mysql puede utilizarse el mismo metodo con archivos de texto o xml según las necesidades de cada proyectos.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X