8vas JRSL - Parte 2

parte2.tar.gz

Tomaremos el ejercicio de la parte 1 y le agregaremos las siguientes lineas al archivo de configuración cfg.motte.php:

define('MTE_LANG', 'es');
define('APP_LANG', 'es');
define('APP_LANG_DIR', ROOT_DIR.'/langs');
define('TEMPLATES_DIR', ROOT_DIR.'/template');
define('CUSTOM_TEMPLATE', 'default');

Esto determinará qué idiomas deberá usar nuestro sistema. Motte está pensado para manejar de manera independiente el idioma del framework y el de la aplicación. Si no se especifica lo contrario, el idioma por omisión de Motte será inglés. Para cambiar eso es que definiremos la constante MTE_LANG.

Dado que los literales de la aplicación no pueden ser previstos por Motte, el programador deberá crear sus propios archivos de idiomas(Ver la sección de iternacionalización para más detalles). Para esto, se necesitarán 2 constantes, qué idioma deseamos activar y dónde están almacenados los archivos de idioma: APP_LANG y APP_LANG_DIR.

cfg.motte.php

<?php
/**
 * Basic System Configuration
 *
 * @filesource
 * @author Motte Core Team
 * @url  http://motte.codigolibre.net
 * @package TestPkg
 * @subpackage publicFrontEnd
 * @version 0.1a
 * @license http://opensource.org/licenses/gpl-license.php GNU Public license (GPLv2+)
 */
define('ROOT_DIR','.');
 
define('MTE_LANG', 'es');
 
define('APP_LANG', 'es');
define('APP_LANG_DIR', ROOT_DIR.'/langs');
 
define('MOTTE', ROOT_DIR.'/motte');
 
define('TEMPLATES_DIR', ROOT_DIR.'/template');
define('CUSTOM_TEMPLATE', 'default');
 
include_once(MOTTE.'/motte.inc.php');
?>

Para que la internacionalización funcione, debemos especificar a Motte qué literales deben ser traducidos. Para esta tarea, Motte utiliza 2 funciones: __() y _e(), cada una para un cometido diferente. La primera es utilizada dentro del código del framework y utiliza el archivo de idioma de Motte(<motte_dir>/langs/<idioma>/LC_MESSAGES/<idioma>.mo) mientras que la segunda utilizará el archivo de idioma especificado en las constantes APP_LANG y APP_LANG_DIR.

Esto nos permite utilizar algunos literales de motte como, por ejemplo, cerrar y nuevo usando los literales __('close') o __('new') ya que forman parte del archivo de idioma de Motte. Sin embargo, si necesitamos un literal especial como puede ser Cliente inexistente debemos usar un archivo de idioma propio(.po) y crear el literar para ser traducido con la función _e('Client doesn\'t exist').

En el ejemplo se muestran ambos casos, ya que el string Hello Motte! es un string que existe en el archivo de idioma de Motte, pero Motte workshop no.

index.php

<?php
/**
 * Basic Application (2)
 *
 * @filesource
 * @author Motte Core Team
 * @url  http://motte.codigolibre.net
 * @package TestPkg
 * @subpackage publicFrontEnd
 * @version 0.1a
 * @license http://opensource.org/licenses/gpl-license.php GNU Public license (GPLv2+)
 */
 
include('cfg.motte.php');
 
$app = new mteController();
$app->addConfig();
$pag = $app->generateHtmlPage();
$pag->setContent(__('Hello Motte!')."<br/>"._e('Motte workshop'));
$pag->showHtml();
?>

Internacionalizando nuestra aplicación

Crearemos el archivo de idioma es.po y lo compilaremos para crear el .mo final utilizado por la aplicación: <APP_LANG_DIR>/<APP_LANG>/LC_MESSAGES/<APP_LANG>.po

Las lineas necesarias para esto en el cfg.motte.php son:

define('MTE_LANG', 'es');
define('APP_LANG', 'es');
define('APP_LANG_DIR', ROOT_DIR.'/langs');

./langs/es/LC_MESSAGES/es.po

msgid ""
msgstr ""
"Project-Id-Version: Motte Example 2\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2008-08-27 17:06-0300\n"
"Last-Translator: MotteCoreTeam / LinuxTeros\n"
"Language-Team: LinuxTeros <linuxteros@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Spanish\n"
"X-Poedit-SourceCharset: utf-8\n"
 
msgid "Motte workshop"
msgstr "Taller de motte"

Si deseamos más idiomas simplemente creamos los directorios correspondientes y los archivos .po con la traducción adecuada y modificamos el archivo cfg.motte.php para que refererncie al idioma deseado.

Para crear el archivo final .mo deben utilizar kbabel, poEdit u otra aplicación que genere estos archivos.

Cambiando la cara

Para esto debemos crear un directorio template y agregar las lineas correspondientes al archivos cfg.motte.php:

define('TEMPLATES_DIR', ROOT_DIR.'/template');
define('CUSTOM_TEMPLATE', 'default');

La idea es que el directorio que almacena el template tenga el mismo nombre que el template, y basta que coloquemos un .css el directorio css dentro del directorio con el mismo nombre para que Motte lo asuma como parte del mismo. De la misma manera se comportan los JS para funciones especiales de nuestra aplicación.

Resumeindo, nuestro template deberá tener la siguiente estructura:

  • template/
    • <template_name>/
      • css/
        • <template_name>.css
      • js/
        • <template_name>.js
      • imgs/
        • Todas las imágenes necesarias…
      • page.html
      • footer.html
      • body.html

template/default/page.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{$LANG}" lang="{$LANG}">
<head>
{$HEADER}
</head>
<body>
	{$BODY}
	{$FOOTER}
</body>
</html>

template/default/footer.html

<hr/>
<p align='center'>Taller de Motte - 8JRSL</p>

template/default/body.html

<div id="wwwPagina">
   <div id="wwwIntro">
      <table>
         <tr>
            <td>&nbsp;<img src="template/default/img/enc.jpg"></td>
         </tr>
      </table>
   </div>
   <div id="wwwContenido">
      <div id="wwwDinamico">
         <span>{$CONTENT}</span>
      </div>
      <div id="wwwCorner">
         <h1><span>corner</span></h1>
      </div>
   </div>
   <div id="wwwPie">&nbsp;</div>
</div>

template/default/css/default.css

/*
* Redefinicion de Tags generales
*/
* {
	margin: 0px;
	padding: 0px;
}
 
body {
	font-family: verdana, sans-serif;
	font-size: 8pt;
	color: #000;
	background-color: #eaeaea;
}
 
a {
	text-decoration: none;
	color: #4a73b1;
}
 
td,th {
	font-family: verdana, sans-serif;
	font-size: 8pt;
	color: #000;
}
 
input,textarea,select {
	font-size: 8pt;
	font-family: verdana, sans-serif;
	border: 1px solid #aaa;
	background-color: #f6f6f6;
	padding-left: 2px;
}
 
select {
	padding-left: 0px;
}
 
input:hover,textarea:hover,select:hover {
	border: 1px solid #666;
}
 
input:focus,textarea:focus {
	border: 1px inset #666;
	background-color: #fff;
}
 
img {
	border: none;
}
 
hr {
	border: none;
	background-color: #ddd;
	height: 1px;
}
 
/*
 * Definicion el cabezal
 */
#wwwPagina {
	width: 770px;
	margin: 0px auto;
	margin-top: 12px;
}
 
/* cabezera */
#wwwIntro {
	padding-top: 4px;
}
 
#wwwCabezal {
	margin-left: 15px;
	margin-right: 15px;
	border-bottom: 1px solid #820202;
}
 
#wwwCabezal h1 {
	margin-left: 149px;
	margin-right: 15px;
	width: 592px;
	height: 69px;
}
 
#wwwCabezal h1 span {
	display: none;
}
 
#wwwDinamico {
	min-height: 240px;
	padding-left: 15px;
	padding-top: 15px;
}
 
#wwwContenido {
	padding-left: 15px;
	padding-top: 5px;
}
 
#wwwCorner {
	margin-left: -15px;
	margin-top: -15px;
	width: 770px;
	height: 15px;
}
 
#wwwCorner h1 {
	display: none;
}
 
/*
* Definicion del pie
*/
#wwwPie,wwwPie.a,wwwPie.a:link,wwwPie.a:visited {
	background-color: #eaeaea;
	border: 0px;
	text-align: center;
	padding-right: 20px;
	padding-top: 15px;
}
documentacion/ejemplos/8jrsl/parte-2.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