Website multilenguaje con PHP

Hoy día, debido a la globalización y demás artilugios que ha sido mejorada por los avances de la red. Es importante,  mas aún, necesario, que nuestros sitios o los de nuestros clientes puedan ser accedidos en diferentes idiomas para mejorar la captura de visitantes o clientes (si aplica) para facilitar la lectura de contenidos.

Son pocas las paginas web que posen la característica multilenguaje en cuanto a contenido, ya que esto implica redactar el contenido en diferentes idiomas, claro, sin mencionar los grandes portales (Goole, yahoo, Msn, etc). Sin embargo, sitios con estructura media como sitios informativos, aplicaciones, etc. que por lo general son orientadas a un idioma pueden ser rápidamente convertidas a multi-lenguage con php.

Para esto podemos hacerlo de dos formas: primero, podemos realizarlo mediante la inclusion de archivos fijos (planos) que contengan el contenido en los diferentes idiomas. o bien; segundo: utlizando base de datos.

Para esta guía utilizaremos la primera opcion “archivos fijos”.

Primero:

Para iniciar crearemos una carpeta o directorio en la que colocaremos nuestros archivos fijos por idioma. Por ejemplo, vamos a crear una archivo llamado “es.lang.php”. En este definiremos una serie de constantes la cuales seran una representacion de los textos que queremos traducir a otros idiomas.

//Contenido de “es.lang.php”:

<?php
//* Idioma: Espanol

define(‘TITLE_1′,’ TITULO 1′);
define(‘TITLE_2′,’ TITULO 2′);
define(‘TITLE_3′,’ TITULO 3′);
define(‘TEXTO_1′,’ TEXTO 1′);
define(‘TEXTO_2′,’ TEXTO 2′);
define(‘TEXTO_3′,’ TEXTO 3′);

?>

Lo que tenemos ente los pags de <php … ?>, es la definicion de constantes que incluyen el contenido que queremos traducir. Para esto utilizamos la funcion PHP : define(‘NOMBRE’,’VALOR’);, es decir, NOMBRE representa el nombre de la constante y VALOR, por si mismo es valor o informacion contenida en la constante.

Segundo:

El proceso de inclusion de los idiomas en nuestro sitio puede hacerse por varios metodos de indicacion, es decir, podemos utilizar cookies, sessiones o simplemente variables de direccionamiento mediante la barra de direccion. Para nuestra guia utilizaremos sessiones de php; esta por que podemos interactuar con los otros dos metodos de forma lineal y sin entorpecer quizas nuestra estructura (si aplica) de nuestro sitio web.

Para inlcuir el archivo de idioma, colocaremos las lineas de código necesarias bien sea en cada un de nuestros archivos php, en caso de ser una sitio no modular, o bien en nuestro controller si se utiliza MVC o mecanismo de inludes para el contenido:

<?php
//creamos una session si no tenemos una creada
session_start();  //omitimos con // al inicio si ya tenemos la session creada o si llamamos la funcion session_start anteriormente en nuestro sitio.
//preguntamos si se nos esta pasando el idioma
if(isset($_GET[‘lang’])){
//si pasamos la variable por medio de la barra de direcciones o un link
$lang = $_GET[‘lang’];
//creamos la variable de session “lang” con el valor recibido mediante la barra de direcciones o el link
$_SESSION[‘lang’] = $lang;
//si ya existe la variable lang en nuestra sesion asignamos su valor a la ariable local $lang
}elseif(isset($_SESSION[‘lang’])){
$lang = $_SESSION[‘lang’];
//de lo contrario asignamos una variable local por defecto para llamar a nuestro idioma principal o por defecto
}else{
$lang = ‘es’;
}

//creamos un case para indicarle a nuestra pagina cual idioma incluir para el contenido
switch ($lang) {
case ‘en’:
$lang_file = ‘en.lang.php’; //ingles
break;
case ‘es’:
$lang_file = ‘es.lang.php’; //espanol
break;
case ‘fr’:
$lang_file = ‘fr.inc.php’; //frances
break;
default:
$lang_file = ‘es.lang.php’; //en caso de no pasar o no existir la indicacion del idioma cargar el por defecto (espanol)
break;
}
//finalmente incluimos nuestro archivo de idioma, suponiendo que la ruta donde los tenemos es /includes/languages/
include_once $site_path.’/includes/languages/’.$lang_file;

?>

El anterior codgo php lo colocamos al inicio de nuestros archivos o bien al principio de nuestro controller, o algun archivo de inclusion que podamos cargar en las primeras lineas de nuestras paginas, claro, posterior a session_start() si ya tenemos el llamado en nuestro sitio. de lo contrario la variable de session lang no podra ser creada y al momento de cambiar de pagina (contenidos) o al hacer click perderemos el idioma seleccionado y tomara el idioma asignado por defecto.

Una vez hecho esto procedemos a crear los demas archivos de idiomas “en.lang.php” y “fr.lang.php” con la misma infromacion o codigos que “es.lang.php”,salvo que ahora el valor de cada constante sera igual a la traducion de cada uno. Ejemplo:

<?php
//* Idioma: English

define(‘TITLE_1′,’ TITLE ONE’);
define(‘TITLE_2′,’ TITLE TWO’);
define(‘TITLE_3′,’ TITLE THREE’);
define(‘TEXTO_1′,’ TEXT ONE’);
define(‘TEXTO_2′,’ TEXT TWO’);
define(‘TEXTO_3′,’ TEXT THREE’);

?>

De esta forma podremos tener un sitio multilenguaje que “recuerda” idioma elegido durante toda nuestra visita al sitio. Esto gracias la la session de PHP.

Espero les sea de utilidad. Y como siempre, CODE IS POETRY!

  • Luis

    Hola al ejecutar el código me saca un error:

    ” Notice: Undefined variable: site_path in C:\Program Files (x86)\VertrigoServ\www\Multilenguaje\index.php on line 32″

    Me podrías ayudar por favor.

  • Hola Luis,

    Lo primero es que tienes error_reporting habilitado lo que es bueno cuando se esta desarrollando para notar estos errores. Y el error con esa variable $site_path es que es una variable que no esta declarada o bien no tiene ningun valor y por tanto php te dice que estas llamando una variable no declarada. En este ejemplo $site_path es una referencia a la ruta de tu script con relacion a la raiz de documentos de tu servidor o tu host virtual. Algo simbolico de referencia. Sustituye esta variable con ./ o bien solo eliminarla.