Script PHP para añadir a un website funcionalidad multi-idioma
sábado, noviembre 24, 2012 @6:35
Conjunto de funciones para crear una página web con soporte para varios idiomas en PHP. La idea es que podamos escribir cadenas de texto en nuestra aplicación y en caso de que exista un lenguaje definido y una cadena traducida nos recoja esa cadena, y en caso contrario disponer de la cadena que le pasemos.
Por ejemplo, teniendo nuestra función de escritura a la que llamaremos echo_()
,
escribiendo:
echo_('Esto es un test.')
En caso de no haber definido un lenguaje en la aplicación, imprimirá la cadena pasada como parámetro
'Esto es un test'
. En caso de tener nuestro lenguaje definido, ira a buscar al archivo
incluido la traducción de la cadena pasada como parámetro y nos imprimirá la cadena traducida 'This is a test'
Nuestro archivo de traducciones al que llamaremos por ejemplo lang-strings.php
escrito en
formato JSON lucirá de la siguiente forma:
<?php
/* lang-strings.php */
$language_strings = array(
// Español - ES
'es' => '{
"Esto es un test" : "Esto es un test"
}',
// English - EN
'en' => '{
"Esto es un test" : "This is a test",
"Hola" : "Hello",
"Adios" : "Bye",
"Gato" : "Cat"
}');
?>
En nuestro lenguaje por defecto no será necesario rellenar las traducciones ya que la cadena que se pasa como parametro se imprimirá por defecto en caso de no encontrarse en el fichero de traducciones.
Veamos ahora las funciones asociadas que incluiremos en un archivo llamado por ejemplo lang-functions.php
<?php
/* lang-functions.php */
function app_languages() {
// El primer item del array será el idioma por defecto
$languages = array(
'es' => 'Español',
'en' => 'English',
// más lenguajes...
);
return $languages;
}
function set_language() {
/* Comprobamos si existe una variable en la URL definiendo el lenguaje,
en caso de no existir o que el valor sea incorrecto recojemos el primer elemento
del array de lenguajes. */
$supported_languages = (array_keys(app_languages()));
if (isset($_GET['lang'])) {
$_SESSION['language'] = (in_array($_GET['lang'],$supported_languages))
? $_GET['lang']
: $supported_languages[0];
} else {
if (!isset($_SESSION['language'])) { $_SESSION['language'] = $supported_languages[0]; }
}
}
function echo_($str,$return=false,$lang=false) {
/* La función de escritura. los parametros opcionales:
$return fuerza el retorno del valor en vez de imprimirlo en caso de ser true
$lang fuerza a mostrar la cadena en el lenguaje especificado */
if ($lang == false) {$lang = $_SESSION['language']; }
$lang_literals = language($lang);
$output_string = (isset($lang_literals[$str])) ? $lang_literals[$str] : $str;
if ($return == false) { echo $output_string; } else { return $output_string; }
}
function language($lang) {
// Incluye el fichero de traducciones con el lenguaje necesario
include('lang-strings.php');
return json_decode($language_strings[$lang],true);
}
Una vez ya en nuestra aplicación PHP, incluiremos los archivos con las funciones que
acabamos de ver, debemos de iniciar sesion con session_start()
para
poder almacenar allí nuestra variable de lenguaje activo y llamaremos a la función
set_language()
para que encuentre nuestro lenguaje definido o lenguaje por defecto.
Para activar un idioma pasaremos una variable por URL a nuestra pagina index.php?lang=en
<?php
/* index.php */
session_start();
require_once 'lang-strings.php';
set_language();
echo_('Gato'); // Imprimirá 'Cat' ya que hemos definido por URL el lenguaje.
Etiquetas: php
0 comentarios
Publicar un comentario