Por favor, haz un clic sobre los anuncios cuando pases por mi blog, ya? =)

Zend Framework 9: Traducir mensajes de error

7 comentarios
Esta es la novena parte de mi tutorial de Zend Framework. La parte anterior la puedes ver acá.

Si has seguido el tutorial, te habrás dado cuenta de que la validación de datos en los formularios funciona bien, pero que los mensajes de error aparecen siempre en inglés. ¿y qué pasa si quiero verlos en español? ¿O si soy zulú, y quiero los mensajes en mi lengua? Pues ZF viene con archivos de traducción. Sólo hay que agregarlos a nuestro sistema.
Para buscar el archivo de traducción que necesitamos, vamos a donde descomprimimos ZF cuando recién lo bajamos.

Veremos un listado de carpetas:
  • bin
  • demos
  • externals
  • extras
  • resources
  • ....etc


La que nos interesa es resources. Abrámosla, y entremos a la subcarpeta languajes.

Ahí tenemos, separado por carpetas, todos los idiomas a los que han sido traducidos los mensajes de ZF. Entremos a la carpeta ES, y veremos el archivo Zend_Validate.php


para incluirlo en nuestro proyecto, crearemos una carpeta especial para las traducciones.
En el  archivo raíz de nuestro proyecto, creemos esta ruta de carpetas:
/resources/languages/es
y dentro de ella copiemos el archivo Zend_Validate.php

la estructura nos quedará así:





Ahora, en nuestro archivo /public/index.php debemos decirle a nuestro sistema que usaremos la traducción de el archivo que acabamos de copiar, agregando estas líneas:

$translator = new Zend_Translate(
                'array',
                '../resources/languages',
                'es',
                array('scan' => Zend_Translate::LOCALE_DIRECTORY)
);
Zend_Validate_Abstract::setDefaultTranslator($translator);


Nuestro archivo public/index.php deberia verse así:

<?php

// Define path to application directory
defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') :
                        'development'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
            realpath(APPLICATION_PATH . '/../library'),
            get_include_path(),
        )));

/** Zend_Application */
require_once 'Zend/Application.php';

//agrego esto
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance ();

$translator = new Zend_Translate(
                'array',
                '../resources/languages',
                'es',
                array('scan' => Zend_Translate::LOCALE_DIRECTORY)
);
Zend_Validate_Abstract::setDefaultTranslator($translator);

// Create application, bootstrap, and run
$application = new Zend_Application(
                APPLICATION_ENV,
                APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
        ->run();


Ahora, entremos al sistema, vamonos a Agregar Album, y sin llenar ningún dato en el formulario, presionemos Enviar.

Veremos algo como esto:


Como vemos, los mensajes de error aparecen es español.

Personalizando los mensajes de error de ZF

Pero tal vez nos pueda parecer que los mensajes de ZF son algo confusos para el usuario. Para cambiarlos, simplemente tenemos que editar el archivo /resources/languages/es/Zend_Validate.php

Si lo abrimos, nos daremos cuenta de que no es nada más que un arreglo de la forma
array {

"mensaje en ingles" => "mensaje en español"
}

entonces, si queremos cambiar el texto de uno de los mensajes en español, solo basta buscarlo y reemplazarlo por el que deseemos.

Nota: no debes cambiar el mensaje en inglés, pues esta es la clave por la cual ZF busca el mensaje en español para mostrar.

También podríamos crear nuestro propio archivo de traducción para cualquier idioma, solo traduciendo los mensajes.

Este ha sido el tutorial más corto de la serie.
En el siguiente hablaremos de cómo usar ZF con Ajax.

7 comentarios :

Anónimo dijo...

Angelorum, excelente aporte!!!. He estado siguiendo tu tutorial y me ha ayudado mucho para poder estructurar mis proyectos, haciendo uso de ZendFramework.

Angelorum dijo...

Gracias ^^

mañana espero subir el proximo
:)

agustinisc dijo...

gracias por la nota,
resolvio mi problema de traduccion.

Wilfo dijo...

puedes compartir el proyecto...mi correo es : logica_razon@hotmail.com

Wilfo dijo...

Porfis , necesito un ejemplo ya que necesito emperzar un proyecto..con ajax...junto con este framework..

Angelorum dijo...

Hola, Wilfo. Al final del tutorial hay un enlace a mediafire con el proyecto completo

Jdust dijo...

Perfecto Ángel eres un excelente maestro contigo he aprendido ZendFramwork Básico he intermedio en 3 días muchas gracias sigue así queremos mas de tus tutos de Zend ñ_ñ