Export page to Open Document format

I18n

Descargar ejemplo

Cómo trabaja?

Motte ofrece su propio sistema de internacionalización, independiente de los locale del sistema sobre el que corre. Quizás, algunos de Uds. se preguntarán el por qué de ésta decisión, pero lo cierto es que de ésta forma es posible tener múltiples aplicaciones cada una con su propio paquete de idioma sin necesidad de tocar los locale del sistema.

Entonces, Motte cuenta con dos funciones para internacionalizar __(“texto a internacionalizar”) y _e(“texto a internacionalizar”).

A continuación explicaremos las diferencias entre ellas y sobre qué contexto trabaja cada una.

__()

Es utilizada por Motte para traducir los literales que son generados por el propio framework, y se basa en el idioma seleccionado para Motte a través de las constante MTE_LANG. En caso de no especificar un idioma, los literales generados por Motte estarán en inglés. Para su traducción Motte utilizará los archivos de idioma que están en DIR_MOTTE/langs

Si deseas que Motte genere en tú mensajes en tú idioma puedes modificar uno de los archivos .po y enviarnoslo por mail.

_e()

Esta es la función que se debe usar desde su aplicación para traducir los literales que desea sean internacionalizados.

La diferencia con __() es que ésta función trabaja sobre los idiomas definidos para la aplicación mediante las constantes APP_LANG, APP_LANG_FILE y APP_LANG_DIR. En caso de no especificarse ningún idioma a través de APP_LANG Motte intentará buscar un paquete de idioma con el mismo nombre de elegido para él a través de la constante MTE_LANG. Si no llegara a encontrar el directorio de idioma, o no encontrara los archivos de idioma(.mo) se mostrarán los literales tal cual fueron ingresados.

Recuerde que es importante que Ud. genere su propio archivo de idioma para su aplicación y no exitienda el de Motte, ya que eso podría causarle problemas en caso que necesitar descargar el framework nuevamente.

Los archivos de idioma

Ud. podrá especificar dónde estarán los archivos de idioma(.mo) para su aplicación y el idioma que va a utilizar mediante las constantes APP_LANG, APP_LANG_FILE y APP_LANG_DIR:

define('APP_LANG','br');
define('APP_LANG_FILE','lang');
define('APP_LANG_DIR','./langs');

Esto usaría el archivo de idioma lang.mo del directorio ./langs/br/LC_MESSAGES/lang.mo

Eso le dirá a Motte, que los literales de su aplicación que sean pasados a través de la función _e() los traduzca utilizando el archivo de idioma(.mo) que se encuentran el el directorio especificado. En caso de no especificarse un archivo de idioma(APP_LANG_FILE) se buscará un archivo cuyo nombre coincida con el nombre en APP_LANG.

Por ejemplo:

define('APP_LANG','br');
define('APP_LANG_DIR','./langs');

./langs/br/LC_MESSAGES/br.mo

Estructura de un .mo

msgid "original message"
msgstr "locale traduction"
Para que el sistema de internacionalización funcione, es importante que todos los literales de su aplicación sean pasados a través de la función _e() y estén en un idioma homogéneo.

Veamos un ejemplo sencillo

Elija un directorio bajo su directorio público del servidor web y cree la siguiente estructura. Para el ejemplo asumiremos que nuestro directorio web está en /var/www/:

cd /var/www
mkdir -p ejemplo_intl/langs/es/LC_MESSAGES
mkdir -p ejemplo_intl/langs/br/LC_MESSAGES
mkdir -p ejemplo_intl/templates/default

La opción -p en el mkdir es para crear automáticamente los directorios intermedios necesarios para crear el directorio destino. Si su sistema operativo no posee esa funcionalidad, deberá crear esos directorios manualmente.

Debe tener en consideración que para realizar estas tareas su usuario necesita permisos de escritura sobre el directorio en cuestión!

Una vez creada la estructura, vamos a crear la aplicación. Para eso crearemos tres archivos en la raíz de nuestra aplicación. En este caso /var/www/ejemplo_intl:

  • cfg.motte.php
    • Contendrá todas las configuraciones relacionadas al framework y otros parámetros del sistema
  • cfg.app.php
    • donde pondremos las configuraciones propias de nuestra aplicación. Esto archivos pueden ser unidos en uno solo si lo considera oportuno. En caso de hacerlo, deberá eliminar de éste archivo la última linea(include('cfg.motte.php');).
  • index.php
    • será la aplicación propiamente dicha.

Creando la aplicación

cfg.motte.php

<?php
/**
 * System configuration
 * 
 * @filesource
 * @author LinuxTeros - Motte Core Team
 * @package intl
 * @version 0.01a
 * @license http://opensource.org/licenses/gpl-license.php GNU Public license (GPLv2+)
 */
 
define('MTE_TIME_ZONE','America/Montevideo');
define('MTE_LANG', 'es');
 
define('MTE_SYSTEM_CHARSET','UTF-8');
 
define('MTE_SYSTEM_NAME','Ejemplo');
define('MTE_SYSTEM_AUTHOR','Motte Core Team');
define('MTE_SYSTEM_VERSION','0.001');
define('MTE_SYSTEM_TITLE',MTE_MODULE_TITLE.' - v.'.MTE_SYSTEM_VERSION);
 
define('CUSTOM_TEMPLATE', 'default');
define('TEMPLATES_DIR', ROOT_DIR.'/templates');
 
/**
 * Where is Motte?
 */
define('MOTTE', ROOT_DIR.'/../motte');
 
?>

cfg.app.php

<?php
/**
 * App configuration
 * 
 * @filesource
 * @author LinuxTeros - Motte Core Team
 * @package intl
 * @version 0.01a
 * @license http://opensource.org/licenses/gpl-license.php GNU Public license (GPLv2+)
 */
 
define('ROOT_DIR','.');
define('MODULE_DIR',ROOT_DIR);
define('MODULE_NAME','app');
define('MTE_MODULE_TITLE','I18n Example');
 
/**
 * APP Langs & Folder to be used with _e(<string>)
 */
define('APP_LANG','br');
define('APP_LANG_DIR',ROOT_DIR.'/langs');
 
include('cfg.motte.php');
?>

index.php

<?php
/**
 * index
 *
 * @filesource
 * @author LinuxTeros - Motte Core Team
 * @package intl
 * @version 0.01a
 * @license http://opensource.org/licenses/gpl-license.php GNU Public license (GPLv2+)
 */
 
// includes
include('cfg.app.php');	// Load Configuration file
include_once(MOTTE.'/motte.inc.php'); // Full Motte Controller
 
// Creating App.
$app = new mteController();
$app->addConfig();
 
$htmlContent = '';
$blockHome = $app->generateHtmlBlock('home.html');
$blockHome->setVar('TITULO',MTE_SYSTEM_TITLE);
$blockHome->setVar('SCRIPT_POST','index.php');
$blockHome->setVar('MSG',_e('This is a test ...'));
$blockHome->setVar('USER','Usuario');
$blockHome->setVar('SESSION',MTE_SESSION_NAME);
// Generates HTML for blockHome
$htmlContent = $blockHome->getHtml();
 
// Generates HTML for channels.
$pag = $app->generateHtmlPage($htmlContent);
$pag->showHtml();
?>

Archivos de idioma necesarios

Los siguientes dos archivos deberán ser colocados en del directorio langs debajo de la raíz de su aplicación.

br.po

Este archivo deberá almacenarse en el directorio /var/www/example_intl/langs/br/LC_MESSAGES/

# translation of default.po to portuguese
# GBoksar // Perro <gustavo@boksar.info>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: default\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2008-04-22 00:06-0300\n"
"Last-Translator: Motte Core Team <gustavo@boksar.info>\n"
"Language-Team: portuguese <pt@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
 
msgid "This is a test ..."
msgstr "Este &eacute; um teste ..."

Una vez creado el archivo de lenguaje, deberá “compilarlo” usando una herramienta para ese fin1). Ese paso generará el archivo br.mo que será utilizado para la internacionalización.

es.po

Este archivo deberá almacenarse en el directorio /var/www/example_intl/langs/es/LC_MESSAGES/

# translation of default.po to español
# GBoksar // Perro <gustavo@boksar.info>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: default\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2008-04-22 00:05-0300\n"
"Last-Translator: Motte Core Team <gustavo@boksar.info>\n"
"Language-Team: spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
 
msgid "This is a test ..."
msgstr "Esto es una prueba ..."

Una vez creado el archivo de lenguaje, deberá “compilarlo” usando una herramienta para ese fin2). Ese paso generará el archivo br.mo que será utilizado para la internacionalización.

Template

home.html

Este archivo debe ser creado bajo el directorio /var/www/example_intl/templates/default/

<div>
	<p class="user_info">Welcome <strong>{$USER}</strong>. You have succesfully logged in.</p>
	<h1>{$TITULO}</h1>
	<p>{$MSG}</p>
</div>

Probemos

Ya podemos probar la aplicación… para ello, abra un navegador web e ingrese a la siguiente URL:

http://localhost/example_intl

Si está trabajando en otro servidor, simplemente reemplace localhost por el nombre de dominio o IP correspondiendte.

Comentarios y sugerencias

1) , 2) Ver la lista de herramientas para internacionalización

Discusión

If you can't read the letters on the image, download this .wav file to get them read to you.
documentacion/ejemplos/internacionalizacion.txt · Última modificación: 2009/11/24 11:22 (editor externo)
Recent changes RSS feed Creative Commons License Donate Driven by DokuWiki

Valid XHTML 1.0 Strict