@alterebro

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:

0 comentarios

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]