Página web multi-idioma con PHP

18-11-2010 Programación 7849 hits (68.73 %) 3 comentarios

Quizas no hemos dado cuenta que muchos sitios web de mucho tráfico necesitan llegar a mas personas en el mundo, y una forma de hacerlo es mediante presentar sus contenido en el idioma natal del usuario final. ¿Verdad que es más cómodo ver contenidos en nuestro idioma? Por supuesto. Así que si como desarrolladores nos proponen hacer algo así ¿Por donde empezar? Pues en la internet hay muchos tutoriales que nos indican que debemos hacer al respecto, puede googlear para corrobar esto, sin embargo siempre en este blog hemos querido poner nuestro granito de arena en cuando ayudar a nuestros lectores, muchos de ellos programadores, con nuestros códigos ó referencias a otros blogs muy buenos. En este caso compartimos una clase en PHP que permite cargar el paquete de idioma seleccionado según el usuario. Esta probado y testeado. Que se puede mejorar, por supuesto. Pero ya tienen una base por donde empezar. 

class mylanguage
{

function get_language()
{
return $this->language;
}
// load language setting
function load_language($lang)
{
$default_language="en";
$this->language=$lang;
switch ($this->get_language())
{
case "fa":
require_once 'lang-'.$this->get_language().'.inc.php';
break;
case "en":
require_once 'lang-'.$this->get_language().'.inc.php';
break;
case "tr":
require_once 'lang-'.$this->get_language().'.inc.php';
break;
default:
// default language is
require_once 'lang-'.$default_language.'.inc.php';
break;
}

}
// end language function loading

}

Los archivos en formato: lang-{abridioma} .inc.php contendrá la definición de cada palabra en el idioma en cuestión.

<?php 
// define words
define("PROGVIGADS_Class_version","Class Version is :");
define("PROGVIGADS_Version","1.0.0");
define("PROGVIGADS_Welcome","Welcome To my site");
define("PROGVIGADS_location","America");
define("PROGVIGADS_my_location","My location is : ");
?>

Ya en el archivo que se mostrará al usuario final incluimos la clase como también trabajar con variables de sesión para que el navegador recuerde nuestro preferencia de idioma y darle la opción de seleccionar el idioma de su preferencia.

session_start();
// register session to change language
session_register("mylang");
// if session isn't set
if(!isset($_SESSION['mylang']))
{
$_SESSION['mylang']="en";
}
//include language class
require_once 'inc/lang.class.php';
$mylang=new mylanguage();
$mylang->load_language($_SESSION['mylang']);
// echo simple title
echo PROGVIGADS_Welcome."<br/>";
echo PROGVIGADS_my_location.PROGVIGADS_location."<br/>";
echo PROGVIGADS_Class_version.PROGVIGADS_Version;

if(isset($_GET['lang']))
{
switch($_GET['lang'])
{
case "ir":
$_SESSION['mylang']="fa";
break;
case "en":
$_SESSION['mylang']="en";
break;
case "tr":
$_SESSION['mylang']="tr";
break;
}
}

?>
<br />

<a href="index.php?lang=en"><img src="images/us.gif" /></a> |
<a href="index.php?lang=ir"><img src="images/ir.gif" /> </a>|
<a href="index.php?lang=tr"> <img src="images/tr.gif" /></a><br />

Simple pero muy funcional, ya tenemos una idea de como poder trabajar con varios idiomas en nuestro sitio web. 

Descargar paquete completo desde PHPClasses.

Agradecimiento a Payan Khaninajad por la clase.

autor image Jesus Liñan
Programador de software, especializado en web sacando provecho de todos los recursos de la internet para el desarrollo y diseño web y compartiendolo con todos. Seguir @jesusvld

Advertisement

3 comentarios a "Página web multi-idioma con PHP"

  1. MMM, es funcional, pero no es óptimo.

    Respecto a tu código, yo lo habría hecho con un método estático y sin necesidad de instanciar el objeto. Directamente devuelves el paquete que le pases como parametro y listo.

    De todas formas,una muy buena alternativa es usar archivos .mo editados y compilados con POEDIT. No solo aplicaciones Web.
  2. exelente, como siempre muy util cada post tuyo, saludos.
  3. Hola, muy buen post. Ayer empece la internacionalización de un sistema. Realmente esto me ayuda un monton.
    Saludos.

Comentar