2
0
Prechádzať zdrojové kódy

DOCUMENTATION Spanish:
- convert CRLF => LF
- convert tabs => 4 spaces

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15444 44c647ce-9c0f-0410-b52a-842ac1e357ba

mikaelkael 16 rokov pred
rodič
commit
c99e62f39c
30 zmenil súbory, kde vykonal 5706 pridanie a 5706 odobranie
  1. 79 79
      documentation/manual/es/module_specs/Zend_Application-AvailableResources-Db.xml
  2. 118 118
      documentation/manual/es/module_specs/Zend_Application-AvailableResources-Frontcontroller.xml
  3. 102 102
      documentation/manual/es/module_specs/Zend_Application-AvailableResources-Modules.xml
  4. 73 73
      documentation/manual/es/module_specs/Zend_Application-AvailableResources-Session.xml
  5. 36 36
      documentation/manual/es/module_specs/Zend_Application-AvailableResources-View.xml
  6. 17 17
      documentation/manual/es/module_specs/Zend_Application-AvailableResources.xml
  7. 269 269
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Application.xml
  8. 24 24
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_Bootstrap.xml
  9. 289 289
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_BootstrapAbstract.xml
  10. 126 126
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_Bootstrapper.xml
  11. 138 138
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_ResourceBootstrapper.xml
  12. 100 100
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Resource_Resource.xml
  13. 95 95
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Resource_ResourceAbstract.xml
  14. 19 19
      documentation/manual/es/module_specs/Zend_Application-CoreFunctionality.xml
  15. 244 244
      documentation/manual/es/module_specs/Zend_Application-Examples.xml
  16. 14 14
      documentation/manual/es/module_specs/Zend_Application-Introduction.xml
  17. 414 414
      documentation/manual/es/module_specs/Zend_Application-QuickStart.xml
  18. 652 652
      documentation/manual/es/module_specs/Zend_Application-TheoryOfOperation.xml
  19. 2 2
      documentation/manual/es/module_specs/Zend_Auth.xml
  20. 392 392
      documentation/manual/es/module_specs/Zend_CodeGenerator-Examples.xml
  21. 142 142
      documentation/manual/es/module_specs/Zend_CodeGenerator-Introduction.xml
  22. 703 703
      documentation/manual/es/module_specs/Zend_Db_Table_Row.xml
  23. 16 16
      documentation/manual/es/module_specs/Zend_Dom.xml
  24. 88 88
      documentation/manual/es/module_specs/Zend_Form-Advanced.xml
  25. 1502 1502
      documentation/manual/es/module_specs/Zend_Form-Elements.xml
  26. 15 15
      documentation/manual/es/module_specs/Zend_Test.xml
  27. 8 8
      documentation/manual/es/module_specs/Zend_Tool_Framework-CliTool.xml
  28. 8 8
      documentation/manual/es/module_specs/Zend_Tool_Framework-WritingProviders.xml
  29. 16 16
      documentation/manual/es/module_specs/Zend_Tool_Project-Internals.xml
  30. 5 5
      documentation/manual/es/module_specs/Zend_XmlRpc_Client.xml

+ 79 - 79
documentation/manual/es/module_specs/Zend_Application-AvailableResources-Db.xml

@@ -1,79 +1,79 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.available-resources.db">
-    <title>Zend_Application_Resource_Db</title>
-
-    <para>
-        <classname>Zend_Application_Resource_Db</classname> inicializará un
-        adaptador <classname>Zend_Db</classname> basado en las opciones que se
-        le pasen. Por defecto, también establece el adaptador por defecto para
-        usarlo con <classname>Zend_Db_Table</classname>.
-    </para>
-
-    <para>
-        Se reconocen las siguientes configuraciones claves:
-    </para>
-
-    <itemizedlist>
-        <listitem><para>
-            <code>adapter</code>: tipo de adaptador <classname>Zend_Db</classname>.
-        </para></listitem>
-
-        <listitem><para>
-            <code>params</code>: array asociativo de parámetros de
-            configuración para utilizar al recuperar la instancia del adaptador.
-        </para></listitem>
-
-        <listitem><para>
-            <code>isDefaultTableAdapter</code>: Indica si establecer o no este
-            adaptador como el adaptador de tablas por defecto.
-        </para></listitem>
-    </itemizedlist>
-
-    <example id="zend.application.available-resources.db.configExample">
-        <title>Adaptador de Recursos de Configuracion de Smaple DB</title>
-        <para>
-            A continuación, un ejemplo de configuración INI que puede ser
-            utilizada para iniciar el recurso DB.
-        </para>
-
-        <programlisting role="ini"><![CDATA[
-[production]
-resources.db.adapter = "pdo_mysql"
-resources.db.params.host = "localhost"
-resources.db.params.username = "webuser"
-resources.db.params.password = "XXXXXXX"
-resources.db.params.dbname = "test"
-resources.db.isDefaultTableAdapter = true
-]]></programlisting>
-    </example>
-
-    <note>
-        <title>Recuperando la Instancia del Adaptador</title>
-
-        <para>
-            Si decide no hacer la instanciación del adaptador con este
-            recurso por defecto del adaptador de tabla, ¿cómo puede recuperar
-            la instancia del adaptador?
-        </para>
-
-        <para>
-            Como con cualquier recurso de plugin, se puede recuperar el
-            recurso de plugin de DB desde su archivo de arranque:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$resource = $bootstrap->getPluginResource('db');
-]]></programlisting>
-
-        <para>
-            Una vez que tiene el recurso objeto, puede recuperar el
-            adaptador de DB usando el método <code>getDbAdapter()</code>:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$db = $resource->getDbAdapter();
-]]></programlisting>
-    </note>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.available-resources.db">
+    <title>Zend_Application_Resource_Db</title>
+
+    <para>
+        <classname>Zend_Application_Resource_Db</classname> inicializará un
+        adaptador <classname>Zend_Db</classname> basado en las opciones que se
+        le pasen. Por defecto, también establece el adaptador por defecto para
+        usarlo con <classname>Zend_Db_Table</classname>.
+    </para>
+
+    <para>
+        Se reconocen las siguientes configuraciones claves:
+    </para>
+
+    <itemizedlist>
+        <listitem><para>
+            <code>adapter</code>: tipo de adaptador <classname>Zend_Db</classname>.
+        </para></listitem>
+
+        <listitem><para>
+            <code>params</code>: array asociativo de parámetros de
+            configuración para utilizar al recuperar la instancia del adaptador.
+        </para></listitem>
+
+        <listitem><para>
+            <code>isDefaultTableAdapter</code>: Indica si establecer o no este
+            adaptador como el adaptador de tablas por defecto.
+        </para></listitem>
+    </itemizedlist>
+
+    <example id="zend.application.available-resources.db.configExample">
+        <title>Adaptador de Recursos de Configuracion de Smaple DB</title>
+        <para>
+            A continuación, un ejemplo de configuración INI que puede ser
+            utilizada para iniciar el recurso DB.
+        </para>
+
+        <programlisting role="ini"><![CDATA[
+[production]
+resources.db.adapter = "pdo_mysql"
+resources.db.params.host = "localhost"
+resources.db.params.username = "webuser"
+resources.db.params.password = "XXXXXXX"
+resources.db.params.dbname = "test"
+resources.db.isDefaultTableAdapter = true
+]]></programlisting>
+    </example>
+
+    <note>
+        <title>Recuperando la Instancia del Adaptador</title>
+
+        <para>
+            Si decide no hacer la instanciación del adaptador con este
+            recurso por defecto del adaptador de tabla, ¿cómo puede recuperar
+            la instancia del adaptador?
+        </para>
+
+        <para>
+            Como con cualquier recurso de plugin, se puede recuperar el
+            recurso de plugin de DB desde su archivo de arranque:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$resource = $bootstrap->getPluginResource('db');
+]]></programlisting>
+
+        <para>
+            Una vez que tiene el recurso objeto, puede recuperar el
+            adaptador de DB usando el método <code>getDbAdapter()</code>:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$db = $resource->getDbAdapter();
+]]></programlisting>
+    </note>
+</sect2>

+ 118 - 118
documentation/manual/es/module_specs/Zend_Application-AvailableResources-Frontcontroller.xml

@@ -1,118 +1,118 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.available-resources.frontcontroller">
-    <title>Zend_Application_Resource_Frontcontroller</title>
-
-    <para>
-        Probablemente el recurso más común que se carga con
-        <classname>Zend_Application</classname> será el recurso Front Controller
-        , que proporciona la habilidad para configurar
-        <classname>Zend_Controller_Front</classname>. Este recurso ofrece
-        la posibilidad de establecer parámetros arbitrarios del Front Controller,
-        especificar plugins para inicializar, y mucho más.
-    </para>
-
-    <para>
-        Una vez inicializado, el recurso asigna la propiedad del
-        <code>frontController</code> del bootstrap a la instancia
-        <classname>Zend_Controller_Front</classname>.
-    </para>
-
-    <para>
-        Las claves de configuración disponibles incluyen las siguientes,
-        sin importar si son mayúsculas ó minúsculas:
-    </para>
-
-    <itemizedlist>
-        <listitem><para>
-            <code>controllerDirectory</code>: ya sea un valor de string
-            especificando un único directorio controlador, o un array de
-            pares de directorio módulo/controlador.
-        </para></listitem>
-
-        <listitem><para>
-            <code>moduleControllerDirectoryName</code>: un valor de string
-            indicando el subdirectorio bajo el cual un módulo contiene controladores.
-        </para></listitem>
-
-        <listitem><para>
-            <code>moduleDirectory</code>: directorio bajo el cual pueden
-            encontrarse los módulos.
-        </para></listitem>
-
-        <listitem><para>
-            <code>defaultControllerName</code>: Nombre base del controlador por
-            defecto (normalmente, "índex").
-        </para></listitem>
-
-        <listitem><para>
-            <code>defaultAction</code>: nombre base de la acción por defecto
-            (normalmente, "índex").
-        </para></listitem>
-
-        <listitem><para>
-            <code>defaultModule</code>: nombre base del módulo por defecto
-            (normalmente, "default").
-        </para></listitem>
-
-        <listitem><para>
-            <code>baseUrl</code>: base explícita a la URL de la aplicación
-            (normalmente auto-detect).
-        </para></listitem>
-
-        <listitem><para>
-            <code>plugins</code>: array con los nombres de los plugins de las
-            clases de los Front Controllers.
-            El recurso instanciará a cada clase (sin argumentos al constructor)
-            y luego registra la instancia con el Front Controller.
-        </para></listitem>
-
-        <listitem><para>
-            <code>params</code>: array de pares clave/valor para registrarse con
-            el front controller.
-        </para></listitem>
-    </itemizedlist>
-
-    <para>
-        Si se ingresa una clave no reconocida, ésta será registrada como un
-        parámetro de Front Controller pasándolo a <code>setParam()</code>.
-    </para>
-
-   
-    <example id="zend.application.available-resources.frontcontroller.configExample">
-        <title>Ejemplo Front Controller resource configuration</title>
-
-        <para>
-           A continuación, INI es un snippet para mostrar cómo configurar
-            el recurso Front Controller.
-        </para>
-
-        <programlisting role="ini"><![CDATA[
-[production]
-resources.frontController.controllerDirectory = APPLICATION_PATH . "/controllers"
-resources.frontController.moduleControllerDirectoryName = "actions"
-resources.frontController.moduleController = APPLICATION_PATH .  "/modules"
-resources.frontController.defaultControllerName = "site"
-resources.frontController.defaultAction = "home"
-resources.frontController.defaultModule = "static"
-resources.frontController.baseUrl = "/subdir"
-resources.frontController.plugins.foo = "My_Plugin_Foo"
-resources.frontController.plugins.bar = "My_Plugin_Bar"
-resources.frontController.env = APPLICATION_ENV
-]]></programlisting>
-    </example>
-    <example id="zend.application.available-resources.frontcontroller.frontControllerPropertyExample">
-        <title>Recuperar el Front Controller de su arranque (bootstrap)</title>
-        <para>
-            Una vez que el recurso de su Front Controller ha sido inicializado,
-            se puede recuperar la instancia de Front Controller a través de la
-            propiedad <code>frontController</code> de su bootstrap.
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$bootstrap->bootstrap('frontController');
-$front = $bootstrap->frontController;
-]]></programlisting>
-    </example>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.available-resources.frontcontroller">
+    <title>Zend_Application_Resource_Frontcontroller</title>
+
+    <para>
+        Probablemente el recurso más común que se carga con
+        <classname>Zend_Application</classname> será el recurso Front Controller
+        , que proporciona la habilidad para configurar
+        <classname>Zend_Controller_Front</classname>. Este recurso ofrece
+        la posibilidad de establecer parámetros arbitrarios del Front Controller,
+        especificar plugins para inicializar, y mucho más.
+    </para>
+
+    <para>
+        Una vez inicializado, el recurso asigna la propiedad del
+        <code>frontController</code> del bootstrap a la instancia
+        <classname>Zend_Controller_Front</classname>.
+    </para>
+
+    <para>
+        Las claves de configuración disponibles incluyen las siguientes,
+        sin importar si son mayúsculas ó minúsculas:
+    </para>
+
+    <itemizedlist>
+        <listitem><para>
+            <code>controllerDirectory</code>: ya sea un valor de string
+            especificando un único directorio controlador, o un array de
+            pares de directorio módulo/controlador.
+        </para></listitem>
+
+        <listitem><para>
+            <code>moduleControllerDirectoryName</code>: un valor de string
+            indicando el subdirectorio bajo el cual un módulo contiene controladores.
+        </para></listitem>
+
+        <listitem><para>
+            <code>moduleDirectory</code>: directorio bajo el cual pueden
+            encontrarse los módulos.
+        </para></listitem>
+
+        <listitem><para>
+            <code>defaultControllerName</code>: Nombre base del controlador por
+            defecto (normalmente, "índex").
+        </para></listitem>
+
+        <listitem><para>
+            <code>defaultAction</code>: nombre base de la acción por defecto
+            (normalmente, "índex").
+        </para></listitem>
+
+        <listitem><para>
+            <code>defaultModule</code>: nombre base del módulo por defecto
+            (normalmente, "default").
+        </para></listitem>
+
+        <listitem><para>
+            <code>baseUrl</code>: base explícita a la URL de la aplicación
+            (normalmente auto-detect).
+        </para></listitem>
+
+        <listitem><para>
+            <code>plugins</code>: array con los nombres de los plugins de las
+            clases de los Front Controllers.
+            El recurso instanciará a cada clase (sin argumentos al constructor)
+            y luego registra la instancia con el Front Controller.
+        </para></listitem>
+
+        <listitem><para>
+            <code>params</code>: array de pares clave/valor para registrarse con
+            el front controller.
+        </para></listitem>
+    </itemizedlist>
+
+    <para>
+        Si se ingresa una clave no reconocida, ésta será registrada como un
+        parámetro de Front Controller pasándolo a <code>setParam()</code>.
+    </para>
+
+   
+    <example id="zend.application.available-resources.frontcontroller.configExample">
+        <title>Ejemplo Front Controller resource configuration</title>
+
+        <para>
+           A continuación, INI es un snippet para mostrar cómo configurar
+            el recurso Front Controller.
+        </para>
+
+        <programlisting role="ini"><![CDATA[
+[production]
+resources.frontController.controllerDirectory = APPLICATION_PATH . "/controllers"
+resources.frontController.moduleControllerDirectoryName = "actions"
+resources.frontController.moduleController = APPLICATION_PATH .  "/modules"
+resources.frontController.defaultControllerName = "site"
+resources.frontController.defaultAction = "home"
+resources.frontController.defaultModule = "static"
+resources.frontController.baseUrl = "/subdir"
+resources.frontController.plugins.foo = "My_Plugin_Foo"
+resources.frontController.plugins.bar = "My_Plugin_Bar"
+resources.frontController.env = APPLICATION_ENV
+]]></programlisting>
+    </example>
+    <example id="zend.application.available-resources.frontcontroller.frontControllerPropertyExample">
+        <title>Recuperar el Front Controller de su arranque (bootstrap)</title>
+        <para>
+            Una vez que el recurso de su Front Controller ha sido inicializado,
+            se puede recuperar la instancia de Front Controller a través de la
+            propiedad <code>frontController</code> de su bootstrap.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$bootstrap->bootstrap('frontController');
+$front = $bootstrap->frontController;
+]]></programlisting>
+    </example>
+</sect2>

+ 102 - 102
documentation/manual/es/module_specs/Zend_Application-AvailableResources-Modules.xml

@@ -1,102 +1,102 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.available-resources.modules">
-    <title>Zend_Application_Resource_Modules</title>
-
-    <para>
-        <classname>Zend_Application_Resource_Modules</classname> se utiliza
-        para inicializar sus módulos de aplicación. Si su módulo tiene un
-        archivo <code>Bootstrap.php</code> en su raíz, y contiene una clase
-        llamada <code>Module_Bootstrap</code> (donde "Module" es el nombre del
-        módulo), entonces usará esa clase para arrancar el módulo.
-    </para>
-
-    <para>
-        Por defecto, se creará una instancia de
-        <classname>Zend_Application_Module_Autoloader</classname> para el
-        módulo, utilizando el nombre del módulo y del directorio para
-        inicializarlo.
-    </para>
-
-    <note>
-        <title>Dependencia de recursos del Front Controller</title>
-
-        <para>
-            El recurso Modules tiene una dependencia de
-            <link linkend="zend.application.available-resources.frontcontroller">
-            Front Controller resource</link>. Usted puede, por supuesto,
-            proporcionar su propia sustitución de ese recurso mediante un
-            recurso personalizado de la clase Front Controller o un método
-            inicializador de la clase -- tan largo como se quiera siempre que
-            el plugin del recurso de la clase termine en "Frontcontroller"
-            o el método inicializador se llame "_initFrontController"
-            (case insensible).
-        </para>
-    </note>
-
-    <example id="zend.application.available-resources.modules.configExample">
-        <title>Configurando Módulos</title>
-        <para>
-            Usted puede especificar una configuración específica de un mósulo
-            utilizando el nombre del módulo como un prefijo/sub-sección en su
-            archivo de configuración.
-        </para>
-
-        <para>
-            Por ejemplo, supongamos que su aplicación tiene un mósulo "noticias".
-            Los siguientes son ejemplos de INI y XML que muestran la
-            configuración de recursos en ese módulo.
-        </para>
-
-        <programlisting role="ini"><![CDATA[
-[production]
-news.resources.db.adapter = "pdo_mysql"
-news.resources.db.params.host = "localhost"
-news.resources.db.params.username = "webuser"
-news.resources.db.params.password = "XXXXXXX"
-news.resources.db.params.dbname = "news"
-news.resources.layout.layout = "news.phtml"
-]]></programlisting>
-
-        <programlisting role="xml"><![CDATA[
-<?xml version="1.0"?>
-<config>
-    <production>
-        <news>
-            <resources>
-                <db>
-                    <adapter>pdo_mysql</adapter>
-                    <params>
-                        <host>localhost</host>
-                        <username>webuser</username>
-                        <password>XXXXXXX</password>
-                        <dbname>news</dbname>
-                    </params>
-                    <isDefaultAdapter>true</isDefaultAdapter>
-                </db>
-            </resources>
-        </news>
-    </production>
-</config>
-]]></programlisting>
-    </example>
-
-    <example id="zend.application.available-resources.modules.retrieveBootstrapExample">
-        <title>Recuperando el bootstrap de un módulo específico</title>
-
-        <para>
-            En ocasiones, puede que necesite para recuperar el objeto bootstrap 
-            de un módulo específico -- tal vez para ejecutar discretos
-            métodos bootstrap ,o a recoger el cargador automático con el fin de
-            configurarlo. Esto puede hacerse utilizando el método
-            <code>getExecutedBootstraps()</code> de los recursos de Módulo. 
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$resource = $bootstrap->getPluginResource('modules');
-$moduleBootstraps = $resource->getExecutedBootstraps();
-$newsBootstrap = $moduleBootstraps['news'];
-]]></programlisting>
-    </example>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.available-resources.modules">
+    <title>Zend_Application_Resource_Modules</title>
+
+    <para>
+        <classname>Zend_Application_Resource_Modules</classname> se utiliza
+        para inicializar sus módulos de aplicación. Si su módulo tiene un
+        archivo <code>Bootstrap.php</code> en su raíz, y contiene una clase
+        llamada <code>Module_Bootstrap</code> (donde "Module" es el nombre del
+        módulo), entonces usará esa clase para arrancar el módulo.
+    </para>
+
+    <para>
+        Por defecto, se creará una instancia de
+        <classname>Zend_Application_Module_Autoloader</classname> para el
+        módulo, utilizando el nombre del módulo y del directorio para
+        inicializarlo.
+    </para>
+
+    <note>
+        <title>Dependencia de recursos del Front Controller</title>
+
+        <para>
+            El recurso Modules tiene una dependencia de
+            <link linkend="zend.application.available-resources.frontcontroller">
+            Front Controller resource</link>. Usted puede, por supuesto,
+            proporcionar su propia sustitución de ese recurso mediante un
+            recurso personalizado de la clase Front Controller o un método
+            inicializador de la clase -- tan largo como se quiera siempre que
+            el plugin del recurso de la clase termine en "Frontcontroller"
+            o el método inicializador se llame "_initFrontController"
+            (case insensible).
+        </para>
+    </note>
+
+    <example id="zend.application.available-resources.modules.configExample">
+        <title>Configurando Módulos</title>
+        <para>
+            Usted puede especificar una configuración específica de un mósulo
+            utilizando el nombre del módulo como un prefijo/sub-sección en su
+            archivo de configuración.
+        </para>
+
+        <para>
+            Por ejemplo, supongamos que su aplicación tiene un mósulo "noticias".
+            Los siguientes son ejemplos de INI y XML que muestran la
+            configuración de recursos en ese módulo.
+        </para>
+
+        <programlisting role="ini"><![CDATA[
+[production]
+news.resources.db.adapter = "pdo_mysql"
+news.resources.db.params.host = "localhost"
+news.resources.db.params.username = "webuser"
+news.resources.db.params.password = "XXXXXXX"
+news.resources.db.params.dbname = "news"
+news.resources.layout.layout = "news.phtml"
+]]></programlisting>
+
+        <programlisting role="xml"><![CDATA[
+<?xml version="1.0"?>
+<config>
+    <production>
+        <news>
+            <resources>
+                <db>
+                    <adapter>pdo_mysql</adapter>
+                    <params>
+                        <host>localhost</host>
+                        <username>webuser</username>
+                        <password>XXXXXXX</password>
+                        <dbname>news</dbname>
+                    </params>
+                    <isDefaultAdapter>true</isDefaultAdapter>
+                </db>
+            </resources>
+        </news>
+    </production>
+</config>
+]]></programlisting>
+    </example>
+
+    <example id="zend.application.available-resources.modules.retrieveBootstrapExample">
+        <title>Recuperando el bootstrap de un módulo específico</title>
+
+        <para>
+            En ocasiones, puede que necesite para recuperar el objeto bootstrap 
+            de un módulo específico -- tal vez para ejecutar discretos
+            métodos bootstrap ,o a recoger el cargador automático con el fin de
+            configurarlo. Esto puede hacerse utilizando el método
+            <code>getExecutedBootstraps()</code> de los recursos de Módulo. 
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$resource = $bootstrap->getPluginResource('modules');
+$moduleBootstraps = $resource->getExecutedBootstraps();
+$newsBootstrap = $moduleBootstraps['news'];
+]]></programlisting>
+    </example>
+</sect2>

+ 73 - 73
documentation/manual/es/module_specs/Zend_Application-AvailableResources-Session.xml

@@ -1,73 +1,73 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.available-resources.session">
-    <title>Zend_Application_Resource_Session</title>
-
-    <para>
-        <classname>Zend_Application_Resource_Session</classname> le permite
-        configurar <classname>Zend_Session</classname> y opcionalmente
-        inicializar una sesión SaveHandler.
-    </para>
-
-    <para>
-        Para establecer un manejador de sesiones, simplemente pasar al recurso
-        la clave opcional <code>saveHandler</code> (case insensible). El valor
-        de esta opción puede ser uno de los siguientes:
-    </para>
-
-    <itemizedlist>
-        <listitem><para>
-            <code>string</code>: un string indicando una clase implementando
-            <classname>Zend_Session_SaveHandler_Interface</classname> que
-            debería ser instanciada.
-        </para></listitem>
-
-        <listitem><para>
-            <code>array</code>: un array con las claves "class" y,
-            opcionalmente, "options", indicando la clase que implementa
-            <classname>Zend_Session_SaveHandler_Interface</classname> que
-            debería ser instanciada y una variedad de opciones para proporcionar
-            a su constructor.
-        </para></listitem>
-
-        <listitem><para>
-            <classname>Zend_Session_SaveHandler_Interface</classname>: un objeto
-            implementando esta interfaz.
-        </para></listitem>
-    </itemizedlist>
-
-    <para>
-        Pasando cualquier otra opción de claves será pasado a
-        <classname>Zend_Session::setOptions()</classname> para configurar
-        <classname>Zend_Session</classname>.
-    </para>
-
-    <example id="zend.application.available-resources.session.configExample">
-        <title>Configuración de recursos de la Sesión Ejemplo</title>
-
-        <para>
-            A continuación el snippet INI nos muestra cómo configurar el recurso
-            para sesiones. Se establecen varias opciones
-            <classname>Zend_Session</classname>, como también configura una
-            instancia <classname>Zend_Session_SaveHandler_Db</classname>.
-        </para>
-
-        <programlisting role="ini"><![CDATA[
-resources.session.save_path = APPLICATION_PATH "/../data/session"
-resources.session.use_only_cookies = true
-resources.session.remember_me_seconds = 864000
-resources.session.saveHandler.class = "Zend_Session_SaveHandler_Db"
-resources.session.saveHandler.options.name = "session"
-resources.session.saveHandler.options.primary.session_id = "session_id"
-resources.session.saveHandler.options.primary.save_path = "save_path"
-resources.session.saveHandler.options.primary.name = "name"
-resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
-resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
-resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
-resources.session.saveHandler.options.modifiedColumn = "modified"
-resources.session.saveHandler.options.dataColumn = "session_data"
-resources.session.saveHandler.options.lifetimeColumn = "lifetime"
-]]></programlisting>
-    </example>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.available-resources.session">
+    <title>Zend_Application_Resource_Session</title>
+
+    <para>
+        <classname>Zend_Application_Resource_Session</classname> le permite
+        configurar <classname>Zend_Session</classname> y opcionalmente
+        inicializar una sesión SaveHandler.
+    </para>
+
+    <para>
+        Para establecer un manejador de sesiones, simplemente pasar al recurso
+        la clave opcional <code>saveHandler</code> (case insensible). El valor
+        de esta opción puede ser uno de los siguientes:
+    </para>
+
+    <itemizedlist>
+        <listitem><para>
+            <code>string</code>: un string indicando una clase implementando
+            <classname>Zend_Session_SaveHandler_Interface</classname> que
+            debería ser instanciada.
+        </para></listitem>
+
+        <listitem><para>
+            <code>array</code>: un array con las claves "class" y,
+            opcionalmente, "options", indicando la clase que implementa
+            <classname>Zend_Session_SaveHandler_Interface</classname> que
+            debería ser instanciada y una variedad de opciones para proporcionar
+            a su constructor.
+        </para></listitem>
+
+        <listitem><para>
+            <classname>Zend_Session_SaveHandler_Interface</classname>: un objeto
+            implementando esta interfaz.
+        </para></listitem>
+    </itemizedlist>
+
+    <para>
+        Pasando cualquier otra opción de claves será pasado a
+        <classname>Zend_Session::setOptions()</classname> para configurar
+        <classname>Zend_Session</classname>.
+    </para>
+
+    <example id="zend.application.available-resources.session.configExample">
+        <title>Configuración de recursos de la Sesión Ejemplo</title>
+
+        <para>
+            A continuación el snippet INI nos muestra cómo configurar el recurso
+            para sesiones. Se establecen varias opciones
+            <classname>Zend_Session</classname>, como también configura una
+            instancia <classname>Zend_Session_SaveHandler_Db</classname>.
+        </para>
+
+        <programlisting role="ini"><![CDATA[
+resources.session.save_path = APPLICATION_PATH "/../data/session"
+resources.session.use_only_cookies = true
+resources.session.remember_me_seconds = 864000
+resources.session.saveHandler.class = "Zend_Session_SaveHandler_Db"
+resources.session.saveHandler.options.name = "session"
+resources.session.saveHandler.options.primary.session_id = "session_id"
+resources.session.saveHandler.options.primary.save_path = "save_path"
+resources.session.saveHandler.options.primary.name = "name"
+resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
+resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
+resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
+resources.session.saveHandler.options.modifiedColumn = "modified"
+resources.session.saveHandler.options.dataColumn = "session_data"
+resources.session.saveHandler.options.lifetimeColumn = "lifetime"
+]]></programlisting>
+    </example>
+</sect2>

+ 36 - 36
documentation/manual/es/module_specs/Zend_Application-AvailableResources-View.xml

@@ -1,36 +1,36 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.available-resources.view">
-    <title>Zend_Application_Resource_View</title>
-
-    <para>
-        <classname>Zend_Application_Resource_View</classname> puede ser
-        utilizada para configurar una instancia <classname>Zend_View</classname>. 
-        Las opciones de configuración son por <link
-            linkend="zend.view.introduction.options">las opciones de Zend_View</link>.
-    </para>
-
-    <para>
-        Una vez hecha la configuración de la instancia de vista, crea una
-        instancia de
-        <classname>Zend_Controller_Action_Helper_ViewRenderer</classname> y
-        registra el ViewRenderer con
-        <classname>Zend_Controller_Action_HelperBroker</classname> -- desde la
-        cual usted puede recuperarla posteriormente.
-    </para>
-
-    <example id="zend.application.available-resources.view.configExample">
-        <title>Ejemplo de configuración del recurso Vista</title>
-
-        <para>
-            A continuación un snippet INI mostrando cómo configurar el recurso
-            vista (view).
-        </para>
-
-        <programlisting role="ini"><![CDATA[
-resources.view.encoding = "UTF-8"
-resources.view.basePath = APPLICATION_PATH "/views/scripts"
-]]></programlisting>
-    </example>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.available-resources.view">
+    <title>Zend_Application_Resource_View</title>
+
+    <para>
+        <classname>Zend_Application_Resource_View</classname> puede ser
+        utilizada para configurar una instancia <classname>Zend_View</classname>. 
+        Las opciones de configuración son por <link
+            linkend="zend.view.introduction.options">las opciones de Zend_View</link>.
+    </para>
+
+    <para>
+        Una vez hecha la configuración de la instancia de vista, crea una
+        instancia de
+        <classname>Zend_Controller_Action_Helper_ViewRenderer</classname> y
+        registra el ViewRenderer con
+        <classname>Zend_Controller_Action_HelperBroker</classname> -- desde la
+        cual usted puede recuperarla posteriormente.
+    </para>
+
+    <example id="zend.application.available-resources.view.configExample">
+        <title>Ejemplo de configuración del recurso Vista</title>
+
+        <para>
+            A continuación un snippet INI mostrando cómo configurar el recurso
+            vista (view).
+        </para>
+
+        <programlisting role="ini"><![CDATA[
+resources.view.encoding = "UTF-8"
+resources.view.basePath = APPLICATION_PATH "/views/scripts"
+]]></programlisting>
+    </example>
+</sect2>

+ 17 - 17
documentation/manual/es/module_specs/Zend_Application-AvailableResources.xml

@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.application.available-resources" xmlns:xi="http://www.w3.org/2001/XInclude">
-    <title>Plugins de Recursos Disponibles</title>
-
-    <para>
-        Aquí encontrará documentación del tipo API sobre todos los recursos de plugins 
-        disponibles por defecto en <classname>Zend_Application</classname>.
-    </para>
-
-    <xi:include href="Zend_Application-AvailableResources-Db.xml" />
-    <xi:include href="Zend_Application-AvailableResources-Frontcontroller.xml" />
-    <xi:include href="Zend_Application-AvailableResources-Modules.xml" />
-    <xi:include href="Zend_Application-AvailableResources-Session.xml" />
-    <xi:include href="Zend_Application-AvailableResources-View.xml" />
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.application.available-resources" xmlns:xi="http://www.w3.org/2001/XInclude">
+    <title>Plugins de Recursos Disponibles</title>
+
+    <para>
+        Aquí encontrará documentación del tipo API sobre todos los recursos de plugins 
+        disponibles por defecto en <classname>Zend_Application</classname>.
+    </para>
+
+    <xi:include href="Zend_Application-AvailableResources-Db.xml" />
+    <xi:include href="Zend_Application-AvailableResources-Frontcontroller.xml" />
+    <xi:include href="Zend_Application-AvailableResources-Modules.xml" />
+    <xi:include href="Zend_Application-AvailableResources-Session.xml" />
+    <xi:include href="Zend_Application-AvailableResources-View.xml" />
+</sect1>

+ 269 - 269
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Application.xml

@@ -1,269 +1,269 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.core-functionality.application">
-    <title>Zend_Application</title>
-
-    <para>
-        <classname>Zend_Application</classname>  proporciona la funcionalidad
-        básica del componente, y el punto de entrada a su aplicación
-        Zend Framework. Su propósito es doble: para configurar el medio ambiente
-        PHP (incluyendo autocarga), y ejecutar su aplicación bootstrap.
-    </para>
-
-    <para>
-        Típicamente, pasará toda la configuración al constructor
-        <classname>Zend_Application</classname>, pero también puede configurar
-        totalmente el objeto utilizando sus propios métodos. En esta referencia 
-        se ilustran ambos casos de uso.
-    </para>
-
-    <table id="zend.application.core-functionality.application.api.table">
-        <title>Métodos de Zend_Application</title>
-        <tgroup cols="4">
-            <thead>
-                <row>
-                    <entry>Método</entry>
-                    <entry>Valor de Retorno</entry>
-                    <entry>Parámetros</entry>
-                    <entry>Descripción</entry>
-                </row>
-            </thead>
-            <tbody>
-                <row>
-                    <entry><code>__construct($environment, $options = null)</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry><itemizedlist>
-                            <listitem><para>
-                                <code>$environment</code>: <emphasis>requerido</emphasis>,.
-                                String que representa el actual entorno de aplicación.
-                                Strings típicos podrían incluir "desarrollo",
-                                "pruebas", "qa", o "producción", pero será definido
-                                por sus requisitos organizacionales.
-                            </para></listitem>
-
-                            <listitem>
-                            <para>
-                                <code>$options</code>: <emphasis>opcional</emphasis>.
-                                El argumento puede ser uno de los siguientes valores:
-                            </para>
-                            <itemizedlist>
-                                <listitem><para>
-                                    <emphasis>String</emphasis>: path
-                                    al archivo <classname>Zend_Config</classname>
-                                    para cargarlo como donfiguración de su
-                                    aplicación.
-                                    <code>$environment</code> se utilizará para
-                                    determinar qué sección de la configuración
-                                    se traerá.
-                                </para></listitem>
-
-                                <listitem><para>
-                                    <emphasis>Array</emphasis>: array asociativo
-                                    de datos de configuración para su aplicación.
-                                </para></listitem>
-
-                                <listitem><para>
-                                    <emphasis>Zend_Config</emphasis>:
-                                    instancia del objeto de configuración.
-                                </para></listitem>
-                            </itemizedlist>
-                        </listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Constructor. Los argumentos son como se describe,
-                        y será utilizado para establecer el estado incial del
-                        objeto. Una instancia de
-                        <classname>Zend_Loader_Autoloader</classname>
-                        es registrada durante la instanciación.
-                        Las opciones pasadas al onstructor se pasan a
-                        <code>setOptions()</code>.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getEnvironment()</code></entry>
-                    <entry><code>string</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar el string del medio ambiente que se pasó al
-                        constructor.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getAutoloader()</code></entry>
-                    <entry><classname>Zend_Loader_Autoloader</classname></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar la instancia de
-                        <classname>Zend_Loader_Autoloader</classname>
-                        registrados durante la instanciación.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setOptions(array $options)</code></entry>
-                    <entry><classname>Zend_Application</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>requerido</emphasis>.
-                            Un array de opciones de aplicación.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Todas las opciones se almacenan internamente, y llamando
-                        al método varias veces las opciones se fusionarán.
-                        Las opciones concordantes con los diversos métodos
-                        setter se pasarán a esos métodos.
-                        Como ejemplo, la opción "phpSettings" será pasada a
-                        <code>setPhpSettings()</code>.
-                        (Los nombres de opciones son indiferentes a mayúsculas/
-                        minúsculas.)
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getOptions()</code></entry>
-                    <entry><code>array</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar todas las opciones usadas para inicializar el
-                        objeto; podría ser utilizada para guardar en cache a
-                        través de <classname>Zend_Config</classname> las
-                        opciones para serializar un formato entre reqerimientos.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>hasOption($key)</code></entry>
-                    <entry><code>boolean</code></entry>
-                    <entry>
-                    <itemizedlist>
-                        <listitem><para>
-                            <code>$key</code>: String opcional de la clave de lookup
-                        </para></listitem>
-                    </itemizedlist>
-                    </entry>
-                    <entry><para>
-                        Determinar si una opción con la clave ha sido registrada
-                        o no. Las claves son indiferentes a mayúsculas/
-                        minúsculas.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getOption($key)</code></entry>
-                    <entry><code>mixed</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$key</code>: String opcional de la clave de lookup
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Recuperar el valor de la opción de una clave dada.
-                        Retorna null si la clave no existe.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setPhpSettings(array $settings, $prefix = '')</code></entry>
-                    <entry><classname>Zend_Application</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$settings</code>: <emphasis>requerido</emphasis>.
-                            Array asociativo en los settings de PHP INI.
-                        </para></listitem>
-
-                        <listitem><para>
-                            <code>$prefix</code>: <emphasis>opcional</emphasis>.
-                            Prefijo de tipo string para anteponer a la opción
-                            claves. Usado internamente para permitir el mapping 
-                            anidado de matrices separados por puntos en las
-                            claves de php.ini.
-                            En el uso normal, este argumento nunca debe ser
-                            pasado por un usuario.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Establece un conjunto de ajustaes en php.ini para run-time. 
-                        Las configuraciones separadas por punto pueden ser
-                        anidadas jerárquicamente
-                        (lo que puede ocurrir con los archivos INI
-                        <classname>Zend_Config</classname>) mediante un array de
-                        de arrays, y aún resolver correctamente.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setAutoloaderNamespaces(array $namespaces)</code></entry>
-                    <entry><classname>Zend_Application</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$namespaces</code>: <emphasis>requerido</emphasis>.
-                            Array de strings representando los namespaces a
-                            registrar con la instancia
-                            <classname>Zend_Loader_Autoloader</classname>.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Registra los namespaces con la instancia
-                        <classname>Zend_Loader_Autoloader</classname>.
-                      </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setBootstrap($path, $class = null)</code></entry>
-                    <entry><classname>Zend_Application</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$path</code>: <emphasis>requerido</emphasis>.
-                            Puede ser tanto una instancia de
-                            <classname>Zend_Application_Bootstrap_Bootstrapper
-                            </classname>, un string del path a la clase bootstrap,
-                            un arrray asociativo de classname =&gt;nombre_de_archivo,
-                            o un array asociativo con las claves 'class' y 'path'.
-                        </para></listitem>
-
-                        <listitem><para>
-                            <code>$class</code>: <emphasis>opcional</emphasis>.
-                            Si <code>$path</code> es un string, entonces
-                            <code>$class</code> puede ser especificado,
-                            y debe ser el string nombre de clase de la
-                            clase contenida en el archivo representado por path.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                </row>
-
-                <row>
-                    <entry><code>getBootstrap()</code></entry>
-                    <entry><code>null | Zend_Application_Bootstrap_Bootstrapper</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar la instancia del bootstrap registrado.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>bootstrap()</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Llamar al método <code>bootstrap()</code>
-                        para cargar la aplicación.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>run()</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Llamar al método <code>run()</code> del bootstrap
-                        para despachar la aplicación.
-                    </para></entry>
-                </row>
-            </tbody>
-        </tgroup>
-    </table>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.core-functionality.application">
+    <title>Zend_Application</title>
+
+    <para>
+        <classname>Zend_Application</classname>  proporciona la funcionalidad
+        básica del componente, y el punto de entrada a su aplicación
+        Zend Framework. Su propósito es doble: para configurar el medio ambiente
+        PHP (incluyendo autocarga), y ejecutar su aplicación bootstrap.
+    </para>
+
+    <para>
+        Típicamente, pasará toda la configuración al constructor
+        <classname>Zend_Application</classname>, pero también puede configurar
+        totalmente el objeto utilizando sus propios métodos. En esta referencia 
+        se ilustran ambos casos de uso.
+    </para>
+
+    <table id="zend.application.core-functionality.application.api.table">
+        <title>Métodos de Zend_Application</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Método</entry>
+                    <entry>Valor de Retorno</entry>
+                    <entry>Parámetros</entry>
+                    <entry>Descripción</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>__construct($environment, $options = null)</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry><itemizedlist>
+                            <listitem><para>
+                                <code>$environment</code>: <emphasis>requerido</emphasis>,.
+                                String que representa el actual entorno de aplicación.
+                                Strings típicos podrían incluir "desarrollo",
+                                "pruebas", "qa", o "producción", pero será definido
+                                por sus requisitos organizacionales.
+                            </para></listitem>
+
+                            <listitem>
+                            <para>
+                                <code>$options</code>: <emphasis>opcional</emphasis>.
+                                El argumento puede ser uno de los siguientes valores:
+                            </para>
+                            <itemizedlist>
+                                <listitem><para>
+                                    <emphasis>String</emphasis>: path
+                                    al archivo <classname>Zend_Config</classname>
+                                    para cargarlo como donfiguración de su
+                                    aplicación.
+                                    <code>$environment</code> se utilizará para
+                                    determinar qué sección de la configuración
+                                    se traerá.
+                                </para></listitem>
+
+                                <listitem><para>
+                                    <emphasis>Array</emphasis>: array asociativo
+                                    de datos de configuración para su aplicación.
+                                </para></listitem>
+
+                                <listitem><para>
+                                    <emphasis>Zend_Config</emphasis>:
+                                    instancia del objeto de configuración.
+                                </para></listitem>
+                            </itemizedlist>
+                        </listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Constructor. Los argumentos son como se describe,
+                        y será utilizado para establecer el estado incial del
+                        objeto. Una instancia de
+                        <classname>Zend_Loader_Autoloader</classname>
+                        es registrada durante la instanciación.
+                        Las opciones pasadas al onstructor se pasan a
+                        <code>setOptions()</code>.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getEnvironment()</code></entry>
+                    <entry><code>string</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar el string del medio ambiente que se pasó al
+                        constructor.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getAutoloader()</code></entry>
+                    <entry><classname>Zend_Loader_Autoloader</classname></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar la instancia de
+                        <classname>Zend_Loader_Autoloader</classname>
+                        registrados durante la instanciación.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setOptions(array $options)</code></entry>
+                    <entry><classname>Zend_Application</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>requerido</emphasis>.
+                            Un array de opciones de aplicación.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Todas las opciones se almacenan internamente, y llamando
+                        al método varias veces las opciones se fusionarán.
+                        Las opciones concordantes con los diversos métodos
+                        setter se pasarán a esos métodos.
+                        Como ejemplo, la opción "phpSettings" será pasada a
+                        <code>setPhpSettings()</code>.
+                        (Los nombres de opciones son indiferentes a mayúsculas/
+                        minúsculas.)
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getOptions()</code></entry>
+                    <entry><code>array</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar todas las opciones usadas para inicializar el
+                        objeto; podría ser utilizada para guardar en cache a
+                        través de <classname>Zend_Config</classname> las
+                        opciones para serializar un formato entre reqerimientos.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>hasOption($key)</code></entry>
+                    <entry><code>boolean</code></entry>
+                    <entry>
+                    <itemizedlist>
+                        <listitem><para>
+                            <code>$key</code>: String opcional de la clave de lookup
+                        </para></listitem>
+                    </itemizedlist>
+                    </entry>
+                    <entry><para>
+                        Determinar si una opción con la clave ha sido registrada
+                        o no. Las claves son indiferentes a mayúsculas/
+                        minúsculas.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getOption($key)</code></entry>
+                    <entry><code>mixed</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$key</code>: String opcional de la clave de lookup
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Recuperar el valor de la opción de una clave dada.
+                        Retorna null si la clave no existe.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setPhpSettings(array $settings, $prefix = '')</code></entry>
+                    <entry><classname>Zend_Application</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$settings</code>: <emphasis>requerido</emphasis>.
+                            Array asociativo en los settings de PHP INI.
+                        </para></listitem>
+
+                        <listitem><para>
+                            <code>$prefix</code>: <emphasis>opcional</emphasis>.
+                            Prefijo de tipo string para anteponer a la opción
+                            claves. Usado internamente para permitir el mapping 
+                            anidado de matrices separados por puntos en las
+                            claves de php.ini.
+                            En el uso normal, este argumento nunca debe ser
+                            pasado por un usuario.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Establece un conjunto de ajustaes en php.ini para run-time. 
+                        Las configuraciones separadas por punto pueden ser
+                        anidadas jerárquicamente
+                        (lo que puede ocurrir con los archivos INI
+                        <classname>Zend_Config</classname>) mediante un array de
+                        de arrays, y aún resolver correctamente.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setAutoloaderNamespaces(array $namespaces)</code></entry>
+                    <entry><classname>Zend_Application</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$namespaces</code>: <emphasis>requerido</emphasis>.
+                            Array de strings representando los namespaces a
+                            registrar con la instancia
+                            <classname>Zend_Loader_Autoloader</classname>.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Registra los namespaces con la instancia
+                        <classname>Zend_Loader_Autoloader</classname>.
+                      </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setBootstrap($path, $class = null)</code></entry>
+                    <entry><classname>Zend_Application</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$path</code>: <emphasis>requerido</emphasis>.
+                            Puede ser tanto una instancia de
+                            <classname>Zend_Application_Bootstrap_Bootstrapper
+                            </classname>, un string del path a la clase bootstrap,
+                            un arrray asociativo de classname =&gt;nombre_de_archivo,
+                            o un array asociativo con las claves 'class' y 'path'.
+                        </para></listitem>
+
+                        <listitem><para>
+                            <code>$class</code>: <emphasis>opcional</emphasis>.
+                            Si <code>$path</code> es un string, entonces
+                            <code>$class</code> puede ser especificado,
+                            y debe ser el string nombre de clase de la
+                            clase contenida en el archivo representado por path.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                </row>
+
+                <row>
+                    <entry><code>getBootstrap()</code></entry>
+                    <entry><code>null | Zend_Application_Bootstrap_Bootstrapper</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar la instancia del bootstrap registrado.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>bootstrap()</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Llamar al método <code>bootstrap()</code>
+                        para cargar la aplicación.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>run()</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Llamar al método <code>run()</code> del bootstrap
+                        para despachar la aplicación.
+                    </para></entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+</sect2>

+ 24 - 24
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_Bootstrap.xml

@@ -1,24 +1,24 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.core-functionality.bootstrap-bootstrap">
-    <title>Zend_Application_Bootstrap_Bootstrap</title>
-
-    <para>
-        <classname>Zend_Application_Bootstrap_Bootstrap</classname> es una
-        implementación concreta de
-        <link linkend="zend.application.core-functionality.bootstrap-bootstrapabstract">Zend_Application_Bootstrap_BootstrapAbstract</link>.
-
-        Su principal característica es que registra el <link
-        linkend="zend.application.available-resources.frontcontroller">recurso
-        Front Controller</link>, y que el método <code>run()</code> primero
-        comprueba esté definido un módulo por defecto y luego despacha el
-        front controller.
-    </para>
-
-    <para>
-        En muchos casos, usted quisiera extender esta clase por sus necesidades
-        de bootstrapping, o simplemente utilizar esta clase y proporcionar una
-        lista de los plugins de recursos a utilizar.
-    </para>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.core-functionality.bootstrap-bootstrap">
+    <title>Zend_Application_Bootstrap_Bootstrap</title>
+
+    <para>
+        <classname>Zend_Application_Bootstrap_Bootstrap</classname> es una
+        implementación concreta de
+        <link linkend="zend.application.core-functionality.bootstrap-bootstrapabstract">Zend_Application_Bootstrap_BootstrapAbstract</link>.
+
+        Su principal característica es que registra el <link
+        linkend="zend.application.available-resources.frontcontroller">recurso
+        Front Controller</link>, y que el método <code>run()</code> primero
+        comprueba esté definido un módulo por defecto y luego despacha el
+        front controller.
+    </para>
+
+    <para>
+        En muchos casos, usted quisiera extender esta clase por sus necesidades
+        de bootstrapping, o simplemente utilizar esta clase y proporcionar una
+        lista de los plugins de recursos a utilizar.
+    </para>
+</sect2>

+ 289 - 289
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_BootstrapAbstract.xml

@@ -1,289 +1,289 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.core-functionality.bootstrap-bootstrapabstract">
-    <title>Zend_Application_Bootstrap_BootstrapAbstract</title>
-
-    <para>
-        <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname> es
-        una clase abstracta que proporciona la base funcional de un arranque
-        (bootstrap) común. Implementa a ambos
-        <link linkend="zend.application.core-functionality.bootstrap-bootstrapper">
-            Zend_Application_Bootstrap_Bootstrapper</link> y a <link
-            linkend="zend.application.core-functionality.bootstrap-resourcebootstrapper">
-            Zend_Application_Bootstrap_ResourceBootstrapper</link>.
-    </para>
-
-    <table id="zend.application.core-functionality.bootstrap-bootstrapabstract.api.table">
-        <title>Métodos de Zend_Application_Bootstrap_BootstrapAbstract</title>
-        <tgroup cols="4">
-            <thead>
-                <row>
-                    <entry>Método</entry>
-                    <entry>Valor de Retorno</entry>
-                    <entry>Parámetros</entry>
-                    <entry>Descripción</entry>
-                </row>
-            </thead>
-            <tbody>
-                <row>
-                    <entry><code>__construct($application)</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$application</code>: <emphasis>requerido</emphasis>.
-                            Acepta tanto a <classname>Zend_Application</classname> o al
-                            objeto <classname>Zend_Application_Bootstrap_Bootstrapper</classname>
-                            como único argumento.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Constructor. Acepta un solo argumento, que debe ser un
-                        objeto <classname>Zend_Application</classname>, u otro
-                        objeto bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setOptions(array $options)</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>requerido</emphasis>.
-                            Array de opciones a establecer.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry>
-                    <para>
-                        Cualquier opción que tiene un setter concordante invocará
-                        ese setter; de lo contrario, la opción será simplemente
-                        almacenada para su recuperación posterior.
-                        Como ejemplo, si su clase extendida definió
-                        un método  <code>setFoo()</code>, la opción 'foo'
-                        pasaría el valor a ese método.
-                    </para>
-                    <para>
-                        También pueden usarse dos opciones especiales clave.
-                        <code>pluginPaths</code> puede ser utilizada para
-                        especificar prefijos de paths para los recursos plugin;
-                        debería ser un array de la clase pares prefijo/path.
-                        <code>resources</code> puede ser utilizada para
-                        especificar los recursos plugin a utilizar,
-                        y debería estar constituído por pares de opciones plugin
-                        recurso/instanciación.
-                    </para>
-                    </entry>
-                </row>
-
-                <row>
-                    <entry><code>getOption()</code></entry>
-                    <entry><code>array</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Devuelve todas las opciones registradas via
-                        <code>setOptions()</code>.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>hasOption($key)</code></entry>
-                    <entry><code>boolean</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$key</code>: <emphasis>requerido</emphasis>.
-                            Clave de opción a probar.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>Determinar si una opción clave está presente.</para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getOption($key)</code></entry>
-                    <entry><code>mixed</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$key</code>: <emphasis>requerido</emphasis>.
-                            Clave de opción para recuperar.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Recuperar el valor asociado con una opción clave;
-                        retorna null si ninguna opción está registrada con
-                        esa clave.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setApplication(Zend_Application |
-                            Zend_Application_Bootstrap_Bootstrapper $application)</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_BootstrapAbstract</classname></entry>
-                    <entry><itemizedlist>
-                            <listitem><para>
-                                <code>$application</code>: <emphasis>requerido</emphasis>.
-                            </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Registrar al objeto padre de aplicación/bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getApplication()</code></entry>
-                    <entry><classname>Zend_Application |
-                            Zend_Application_Bootstrap_Bootstrapper</classname></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar el objeto aplicación/bootstrap pasado via
-                        constructor.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getEnvironment()</code></entry>
-                    <entry><code>string</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar el string del medio ambiente registrado
-                        con el objeto padre aplicación/bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getClassResources()</code></entry>
-                    <entry><code>array</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar una lista de los recursos inicializadores de
-                        nombres disponibles con los fueron definidos en la clase.
-                        Esto puede ser de implementación específica.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getContainer()</code></entry>
-                    <entry><code>object</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recupera el contenedor que almacena recursos.
-                        Si no hay un contenedor actualmente registrado,
-                        registra una instancia
-                        <link linkend="zend.registry">Zend_Registry</link>
-                        antes de retornarlo.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setContainer($container)</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_BootstrapAbstract</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$container</code>, <emphasis>requerido</emphasis>.
-                            Un objeto en el cual almacenar recursos.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Proporciona un contenedor en el que se almacenan recursos.
-                        Cuando un método de recurso o plugin devuelve un valor,
-                        será almacenado en este contenedor para su recuperación
-                        posterior.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>hasResource($name)</code></entry>
-                    <entry><code>boolean</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$name</code>, <emphasis>requerido</emphasis>.
-                            Nombre del recurso a comprobar.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Cuando un método de recurso o plugin devuelve un valor,
-                        será almacenado en el contenedor de recursos (ver
-                        <code>getContainer()</code> y
-                        <code>setContainer()</code>. Este método indicará si
-                        se ha establecido o no un valor para ese recurso.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getResource($name)</code></entry>
-                    <entry><code>mixed</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$name</code>, <emphasis>requerido</emphasis>.
-                            Nombre del recurso a recuperar.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Cuando un método de recurso o plugin devuelve un valor,
-                        será almacenado en el contenedor de recursos (ver
-                        <code>getContainer()</code> y
-                        <code>setContainer()</code>. Este método recuperará
-                        recursos del contenedor.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>bootstrap($resource = null)</code></entry>
-                    <entry><code>mixed</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$resource</code>: <emphasis>opcional</emphasis>.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry>
-                    <para>
-                        Si <code>$resource</code> está vacío, ejecutar todos
-                        los recursos del bootstrap.
-                        Si es un string, ejecutar ese único recurso;
-                        si es un array, ejecutar cada recurso del array.
-                    </para>
-
-                    <para>
-                        Este método puede ser utilizado para ejecutar
-                        bootstraps individuales, ya hayan sido definidos en la
-                        propia clase o mediante clases de recursos de plugin.
-                        Un recurso definido en la clase será ejecutado en
-                        preferencia por sobre un recurso de plugin en el caso
-                        de conflicto de nombres.
-                    </para>
-                    </entry>
-                </row>
-
-                <row>
-                    <entry><code>run()</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Define qué lógica de aplicación ejecutar luego del
-                        bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>__call($method, $args)</code></entry>
-                    <entry><code>mixed</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$method</code>: <emphasis>requerido</emphasis>.
-                            El nombre del método a llamar.
-                        </para></listitem>
-
-                        <listitem><para>
-                            <code>$args</code>: <emphasis>requerido</emphasis>.
-                            Array de argumentos para usar en el método de llamada.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Ofrece comodidad para bootstrapping de recursos
-                        individuales permitiéndole llamar
-                        'bootstrap&lt;ResourceName&gt;()' en vez de usar el
-                        método <code>bootstrap()</code>.
-                    </para></entry>
-                </row>
-            </tbody>
-        </tgroup>
-    </table>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.core-functionality.bootstrap-bootstrapabstract">
+    <title>Zend_Application_Bootstrap_BootstrapAbstract</title>
+
+    <para>
+        <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname> es
+        una clase abstracta que proporciona la base funcional de un arranque
+        (bootstrap) común. Implementa a ambos
+        <link linkend="zend.application.core-functionality.bootstrap-bootstrapper">
+            Zend_Application_Bootstrap_Bootstrapper</link> y a <link
+            linkend="zend.application.core-functionality.bootstrap-resourcebootstrapper">
+            Zend_Application_Bootstrap_ResourceBootstrapper</link>.
+    </para>
+
+    <table id="zend.application.core-functionality.bootstrap-bootstrapabstract.api.table">
+        <title>Métodos de Zend_Application_Bootstrap_BootstrapAbstract</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Método</entry>
+                    <entry>Valor de Retorno</entry>
+                    <entry>Parámetros</entry>
+                    <entry>Descripción</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>__construct($application)</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$application</code>: <emphasis>requerido</emphasis>.
+                            Acepta tanto a <classname>Zend_Application</classname> o al
+                            objeto <classname>Zend_Application_Bootstrap_Bootstrapper</classname>
+                            como único argumento.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Constructor. Acepta un solo argumento, que debe ser un
+                        objeto <classname>Zend_Application</classname>, u otro
+                        objeto bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setOptions(array $options)</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>requerido</emphasis>.
+                            Array de opciones a establecer.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry>
+                    <para>
+                        Cualquier opción que tiene un setter concordante invocará
+                        ese setter; de lo contrario, la opción será simplemente
+                        almacenada para su recuperación posterior.
+                        Como ejemplo, si su clase extendida definió
+                        un método  <code>setFoo()</code>, la opción 'foo'
+                        pasaría el valor a ese método.
+                    </para>
+                    <para>
+                        También pueden usarse dos opciones especiales clave.
+                        <code>pluginPaths</code> puede ser utilizada para
+                        especificar prefijos de paths para los recursos plugin;
+                        debería ser un array de la clase pares prefijo/path.
+                        <code>resources</code> puede ser utilizada para
+                        especificar los recursos plugin a utilizar,
+                        y debería estar constituído por pares de opciones plugin
+                        recurso/instanciación.
+                    </para>
+                    </entry>
+                </row>
+
+                <row>
+                    <entry><code>getOption()</code></entry>
+                    <entry><code>array</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Devuelve todas las opciones registradas via
+                        <code>setOptions()</code>.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>hasOption($key)</code></entry>
+                    <entry><code>boolean</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$key</code>: <emphasis>requerido</emphasis>.
+                            Clave de opción a probar.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>Determinar si una opción clave está presente.</para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getOption($key)</code></entry>
+                    <entry><code>mixed</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$key</code>: <emphasis>requerido</emphasis>.
+                            Clave de opción para recuperar.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Recuperar el valor asociado con una opción clave;
+                        retorna null si ninguna opción está registrada con
+                        esa clave.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setApplication(Zend_Application |
+                            Zend_Application_Bootstrap_Bootstrapper $application)</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_BootstrapAbstract</classname></entry>
+                    <entry><itemizedlist>
+                            <listitem><para>
+                                <code>$application</code>: <emphasis>requerido</emphasis>.
+                            </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Registrar al objeto padre de aplicación/bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getApplication()</code></entry>
+                    <entry><classname>Zend_Application |
+                            Zend_Application_Bootstrap_Bootstrapper</classname></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar el objeto aplicación/bootstrap pasado via
+                        constructor.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getEnvironment()</code></entry>
+                    <entry><code>string</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar el string del medio ambiente registrado
+                        con el objeto padre aplicación/bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getClassResources()</code></entry>
+                    <entry><code>array</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar una lista de los recursos inicializadores de
+                        nombres disponibles con los fueron definidos en la clase.
+                        Esto puede ser de implementación específica.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getContainer()</code></entry>
+                    <entry><code>object</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recupera el contenedor que almacena recursos.
+                        Si no hay un contenedor actualmente registrado,
+                        registra una instancia
+                        <link linkend="zend.registry">Zend_Registry</link>
+                        antes de retornarlo.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setContainer($container)</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_BootstrapAbstract</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$container</code>, <emphasis>requerido</emphasis>.
+                            Un objeto en el cual almacenar recursos.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Proporciona un contenedor en el que se almacenan recursos.
+                        Cuando un método de recurso o plugin devuelve un valor,
+                        será almacenado en este contenedor para su recuperación
+                        posterior.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>hasResource($name)</code></entry>
+                    <entry><code>boolean</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$name</code>, <emphasis>requerido</emphasis>.
+                            Nombre del recurso a comprobar.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Cuando un método de recurso o plugin devuelve un valor,
+                        será almacenado en el contenedor de recursos (ver
+                        <code>getContainer()</code> y
+                        <code>setContainer()</code>. Este método indicará si
+                        se ha establecido o no un valor para ese recurso.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getResource($name)</code></entry>
+                    <entry><code>mixed</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$name</code>, <emphasis>requerido</emphasis>.
+                            Nombre del recurso a recuperar.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Cuando un método de recurso o plugin devuelve un valor,
+                        será almacenado en el contenedor de recursos (ver
+                        <code>getContainer()</code> y
+                        <code>setContainer()</code>. Este método recuperará
+                        recursos del contenedor.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>bootstrap($resource = null)</code></entry>
+                    <entry><code>mixed</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$resource</code>: <emphasis>opcional</emphasis>.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry>
+                    <para>
+                        Si <code>$resource</code> está vacío, ejecutar todos
+                        los recursos del bootstrap.
+                        Si es un string, ejecutar ese único recurso;
+                        si es un array, ejecutar cada recurso del array.
+                    </para>
+
+                    <para>
+                        Este método puede ser utilizado para ejecutar
+                        bootstraps individuales, ya hayan sido definidos en la
+                        propia clase o mediante clases de recursos de plugin.
+                        Un recurso definido en la clase será ejecutado en
+                        preferencia por sobre un recurso de plugin en el caso
+                        de conflicto de nombres.
+                    </para>
+                    </entry>
+                </row>
+
+                <row>
+                    <entry><code>run()</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Define qué lógica de aplicación ejecutar luego del
+                        bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>__call($method, $args)</code></entry>
+                    <entry><code>mixed</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$method</code>: <emphasis>requerido</emphasis>.
+                            El nombre del método a llamar.
+                        </para></listitem>
+
+                        <listitem><para>
+                            <code>$args</code>: <emphasis>requerido</emphasis>.
+                            Array de argumentos para usar en el método de llamada.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Ofrece comodidad para bootstrapping de recursos
+                        individuales permitiéndole llamar
+                        'bootstrap&lt;ResourceName&gt;()' en vez de usar el
+                        método <code>bootstrap()</code>.
+                    </para></entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+</sect2>

+ 126 - 126
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_Bootstrapper.xml

@@ -1,126 +1,126 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.core-functionality.bootstrap-bootstrapper">
-    <title>Zend_Application_Bootstrap_Bootstrapper</title>
-
-    <para>
-        <classname>Zend_Application_Bootstrap_Bootstrapper</classname> es la
-        interfaz base que deben implementar todas clases bootstrap.
-        Las funcionalidades de base están encaminadan a la configuración,
-        identificación de los recursos, bootstraping (ya sea de los recursos
-        individuales o de toda la aplicación), y de despachar la aplicación.
-    </para>
-
-    <para>
-        Los siguientes métodos conforman la definición de la interfaz.
-    </para>
-
-    <table id="zend.application.core-functionality.bootstrap-bootstrapper.methods-table">
-        <title>Zend_Application_Bootstrap_Bootstrapper Interface</title>
-        <tgroup cols="4">
-            <thead>
-                <row>
-                    <entry>Método</entry>
-                    <entry>Valor Retornado</entry>
-                    <entry>Parámetros</entry>
-                    <entry>Descripción</entry>
-                </row>
-            </thead>
-            <tbody>
-                <row>
-                    <entry><code>__construct($application)</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$application</code>: <emphasis>requerido</emphasis>.
-                            Debe aceptar un objeto <classname>Zend_Application</classname> o
-                            <classname>Zend_Application_Bootstrap_Bootstrapper</classname>
-                            como único argumento.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Constructor. Acepta un solo argumento, que debe ser un
-                        objeto
-                        <classname>Zend_Application</classname>, u otro objero
-                        bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setOptions(array $options)</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>requerido</emphasis>.
-                            Array de opciones a establecer.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Típicamente, cualquier opción que tiene un setter
-                        concordante invocará ese setter; de lo contrario,
-                        la opción será simplemente almacenada para su
-                        recuperación posterior.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getApplication()</code></entry>
-                    <entry><classname>Zend_Application | Zend_Application_Bootstrap_Bootstrapper</classname></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar el objeto aplicación/bootstrap pasado via
-                        constructor.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getEnvironment()</code></entry>
-                    <entry><code>string</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar el string del medio ambiente registrado
-                        con el objeto padre aplicación/bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getClassResources()</code></entry>
-                    <entry><code>array</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar una lista de los recursos inicializadores de
-                        nombres disponibles con los que fueron definidos en la clase.
-                        Esto puede ser de implementación específica.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>bootstrap($resource = null)</code></entry>
-                    <entry><code>mixed</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$resource</code>: <emphasis>optional</emphasis>.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Si <code>$resource</code> está vacío, ejecutar todos
-                        los recursos del bootstrap.
-                        Si es un string, ejecutar ese único recurso;
-                        si es un array, ejecutar cada recurso del array.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>run()</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Define qué lógica de aplicación ejecutar luego del
-                        bootstrap.
-                    </para></entry>
-                </row>
-            </tbody>
-        </tgroup>
-    </table>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.core-functionality.bootstrap-bootstrapper">
+    <title>Zend_Application_Bootstrap_Bootstrapper</title>
+
+    <para>
+        <classname>Zend_Application_Bootstrap_Bootstrapper</classname> es la
+        interfaz base que deben implementar todas clases bootstrap.
+        Las funcionalidades de base están encaminadan a la configuración,
+        identificación de los recursos, bootstraping (ya sea de los recursos
+        individuales o de toda la aplicación), y de despachar la aplicación.
+    </para>
+
+    <para>
+        Los siguientes métodos conforman la definición de la interfaz.
+    </para>
+
+    <table id="zend.application.core-functionality.bootstrap-bootstrapper.methods-table">
+        <title>Zend_Application_Bootstrap_Bootstrapper Interface</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Método</entry>
+                    <entry>Valor Retornado</entry>
+                    <entry>Parámetros</entry>
+                    <entry>Descripción</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>__construct($application)</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$application</code>: <emphasis>requerido</emphasis>.
+                            Debe aceptar un objeto <classname>Zend_Application</classname> o
+                            <classname>Zend_Application_Bootstrap_Bootstrapper</classname>
+                            como único argumento.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Constructor. Acepta un solo argumento, que debe ser un
+                        objeto
+                        <classname>Zend_Application</classname>, u otro objero
+                        bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setOptions(array $options)</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>requerido</emphasis>.
+                            Array de opciones a establecer.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Típicamente, cualquier opción que tiene un setter
+                        concordante invocará ese setter; de lo contrario,
+                        la opción será simplemente almacenada para su
+                        recuperación posterior.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getApplication()</code></entry>
+                    <entry><classname>Zend_Application | Zend_Application_Bootstrap_Bootstrapper</classname></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar el objeto aplicación/bootstrap pasado via
+                        constructor.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getEnvironment()</code></entry>
+                    <entry><code>string</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar el string del medio ambiente registrado
+                        con el objeto padre aplicación/bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getClassResources()</code></entry>
+                    <entry><code>array</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar una lista de los recursos inicializadores de
+                        nombres disponibles con los que fueron definidos en la clase.
+                        Esto puede ser de implementación específica.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>bootstrap($resource = null)</code></entry>
+                    <entry><code>mixed</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$resource</code>: <emphasis>optional</emphasis>.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Si <code>$resource</code> está vacío, ejecutar todos
+                        los recursos del bootstrap.
+                        Si es un string, ejecutar ese único recurso;
+                        si es un array, ejecutar cada recurso del array.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>run()</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Define qué lógica de aplicación ejecutar luego del
+                        bootstrap.
+                    </para></entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+</sect2>

+ 138 - 138
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Bootstrap_ResourceBootstrapper.xml

@@ -1,138 +1,138 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.core-functionality.bootstrap-resourcebootstrapper">
-    <title>Zend_Application_Bootstrap_ResourceBootstrapper</title>
-
-    <para>
-        <classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname> es una
-        interfaz para usar cuando una clase de arranque cargará recursos
-        externos -- por ejemplo, uno o más recursos no se definirán
-        directamente en la clase, sino más bien via plugins.
-        Debe ser utilizado en conjunción con
-        <link linkend="zend.application.core-functionality.bootstrap-bootstrapper">Zend_Application_Bootstrap_Bootstrapper</link>;
-        <link linkend="zend.application.core-functionality.bootstrap-bootstrapabstract">Zend_Application_Bootstrap_BootstrapAbstract</link>
-        que implementan esta funcionalidad.
-    </para>
-
-    <para>
-        Los siguientes métodos conforman la definición de la interfaz.
-    </para>
-
-    <table id="zend.application.core-functionality.bootstrap-resourcebootstrapper.methods-table">
-        <title>Zend_Application_Bootstrap_ResourceBootstrapper Interface</title>
-        <tgroup cols="4">
-            <thead>
-                <row>
-                    <entry>Método</entry>
-                    <entry>Valor de Retorno</entry>
-                    <entry>Parámetros</entry>
-                    <entry>Descripción</entry>
-                </row>
-            </thead>
-            <tbody>
-                <row>
-                    <entry><code>registerPluginResource($resource, $options =
-                            null)</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$resource</code>: <emphasis>requerido</emphasis>.
-                            Un nombre de recurso o un objeto
-                            <classname>Zend_Application_Resource_Resource</classname>.
-                        </para></listitem>
-
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>opcional</emphasis>.
-                            Un array o un objeto <classname>Zend_Config</classname>
-                            para pasar al recurso en instanciación.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Registre un recurso con la clase, proporcionando
-                        configuración opcional para pasar al recurso.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>unregisterPluginResource($resource)</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$resource</code>: <emphasis>requerido</emphasis>.
-                            Nombre de un recurso para des-registrar desde la clase.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Eliminar un recurso de plugin de la clase.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>hasPluginResource($resource)</code></entry>
-                    <entry><code>boolean</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$resource</code>: <emphasis>requerido</emphasis>.
-                            Nombre del recurso.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Determinar si un recurso específico se ha registrado
-                        en la clase.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getPluginResource($resource)</code></entry>
-                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$resource</code>: <emphasis>requerido</emphasis>.
-                            Nombre de un recurso a recuperar (string).
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Recuperar una instacia de un recurso de plugin por su nombre.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getPluginResourceNames()</code></entry>
-                    <entry><code>array</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar una lista de todos los nombres de recursos de
-                        plugin registrados.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setPluginLoader(Zend_Loader_PluginLoader_Interface
-                            $loader)</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$loader</code>: <emphasis>requerido</emphasis>.
-                            Instancia del cargador de plugin para utilizar
-                            cuando se resuelven nombres de plugin a las clases.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Registre una instancia del cargador de plugin para
-                        utilizar cuando se resuelven nombres de clases de plugin.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getPluginLoader()</code></entry>
-                    <entry><classname>Zend_Loader_PluginLoader_Interface</classname></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar el cargador de plugin registrado.
-                    </para></entry>
-                </row>
-            </tbody>
-        </tgroup>
-    </table>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.core-functionality.bootstrap-resourcebootstrapper">
+    <title>Zend_Application_Bootstrap_ResourceBootstrapper</title>
+
+    <para>
+        <classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname> es una
+        interfaz para usar cuando una clase de arranque cargará recursos
+        externos -- por ejemplo, uno o más recursos no se definirán
+        directamente en la clase, sino más bien via plugins.
+        Debe ser utilizado en conjunción con
+        <link linkend="zend.application.core-functionality.bootstrap-bootstrapper">Zend_Application_Bootstrap_Bootstrapper</link>;
+        <link linkend="zend.application.core-functionality.bootstrap-bootstrapabstract">Zend_Application_Bootstrap_BootstrapAbstract</link>
+        que implementan esta funcionalidad.
+    </para>
+
+    <para>
+        Los siguientes métodos conforman la definición de la interfaz.
+    </para>
+
+    <table id="zend.application.core-functionality.bootstrap-resourcebootstrapper.methods-table">
+        <title>Zend_Application_Bootstrap_ResourceBootstrapper Interface</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Método</entry>
+                    <entry>Valor de Retorno</entry>
+                    <entry>Parámetros</entry>
+                    <entry>Descripción</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>registerPluginResource($resource, $options =
+                            null)</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$resource</code>: <emphasis>requerido</emphasis>.
+                            Un nombre de recurso o un objeto
+                            <classname>Zend_Application_Resource_Resource</classname>.
+                        </para></listitem>
+
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>opcional</emphasis>.
+                            Un array o un objeto <classname>Zend_Config</classname>
+                            para pasar al recurso en instanciación.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Registre un recurso con la clase, proporcionando
+                        configuración opcional para pasar al recurso.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>unregisterPluginResource($resource)</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$resource</code>: <emphasis>requerido</emphasis>.
+                            Nombre de un recurso para des-registrar desde la clase.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Eliminar un recurso de plugin de la clase.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>hasPluginResource($resource)</code></entry>
+                    <entry><code>boolean</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$resource</code>: <emphasis>requerido</emphasis>.
+                            Nombre del recurso.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Determinar si un recurso específico se ha registrado
+                        en la clase.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getPluginResource($resource)</code></entry>
+                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$resource</code>: <emphasis>requerido</emphasis>.
+                            Nombre de un recurso a recuperar (string).
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Recuperar una instacia de un recurso de plugin por su nombre.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getPluginResourceNames()</code></entry>
+                    <entry><code>array</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar una lista de todos los nombres de recursos de
+                        plugin registrados.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setPluginLoader(Zend_Loader_PluginLoader_Interface
+                            $loader)</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$loader</code>: <emphasis>requerido</emphasis>.
+                            Instancia del cargador de plugin para utilizar
+                            cuando se resuelven nombres de plugin a las clases.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Registre una instancia del cargador de plugin para
+                        utilizar cuando se resuelven nombres de clases de plugin.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getPluginLoader()</code></entry>
+                    <entry><classname>Zend_Loader_PluginLoader_Interface</classname></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar el cargador de plugin registrado.
+                    </para></entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+</sect2>

+ 100 - 100
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Resource_Resource.xml

@@ -1,100 +1,100 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.core-functionality.resource-resource">
-    <title>Zend_Application_Resource_Resource</title>
-
-    <para>
-        <classname>Zend_Application_Resource_Resource</classname> es una
-        interfaz para recursos de plugin utilizados con clases bootstrap implementando
-        <classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname>.
-        Se espera que los recursos de plugins permitan la configuración,
-        estar enterados del bootstrap, y aplicar un patrón de estrategia para la
-        inicialización de recursos.
-    </para>
-
-    <table id="zend.application.core-functionality.resource-resource.api">
-        <title>Zend_Application_Resource_Resource Interface</title>
-        <tgroup cols="4">
-            <thead>
-                <row>
-                    <entry>Método</entry>
-                    <entry>Valor de Retorno</entry>
-                    <entry>Parámetros</entry>
-                    <entry>Descripción</entry>
-                </row>
-            </thead>
-            <tbody>
-                <row>
-                    <entry><code>__construct($options = null)</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>opcional</emphasis>.
-                            Opciones con las cuales establecer el estado de los recursos.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        El constructor debería permitir pasar opciones con las
-                        cuales inicializar el estado.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap)</code></entry>
-                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>
-                    <entry><itemizedlist>
-                            <listitem><para>
-                                <code>$bootstrap</code>: <emphasis>requerido</emphasis>.
-                                Padre del bootstrap inicializando este recurso.
-                            </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Debería permitir registrar el objeto padre del bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getBootstrap()</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar la instancia del bootstrap registrado.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setOptions(array $options)</code></entry>
-                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>requerido</emphasis>.
-                            Opciones con las cuales establecer el estado.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Establecer el estado del recurso.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getOptions()</code></entry>
-                    <entry><code>array</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar opciones registradas.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>init()</code></entry>
-                    <entry><code>mixed</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Patrón de estrategia: ejecute inicialización de los recursos.
-                    </para></entry>
-                </row>
-            </tbody>
-        </tgroup>
-    </table>
-</sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.core-functionality.resource-resource">
+    <title>Zend_Application_Resource_Resource</title>
+
+    <para>
+        <classname>Zend_Application_Resource_Resource</classname> es una
+        interfaz para recursos de plugin utilizados con clases bootstrap implementando
+        <classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname>.
+        Se espera que los recursos de plugins permitan la configuración,
+        estar enterados del bootstrap, y aplicar un patrón de estrategia para la
+        inicialización de recursos.
+    </para>
+
+    <table id="zend.application.core-functionality.resource-resource.api">
+        <title>Zend_Application_Resource_Resource Interface</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Método</entry>
+                    <entry>Valor de Retorno</entry>
+                    <entry>Parámetros</entry>
+                    <entry>Descripción</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>__construct($options = null)</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>opcional</emphasis>.
+                            Opciones con las cuales establecer el estado de los recursos.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        El constructor debería permitir pasar opciones con las
+                        cuales inicializar el estado.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap)</code></entry>
+                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>
+                    <entry><itemizedlist>
+                            <listitem><para>
+                                <code>$bootstrap</code>: <emphasis>requerido</emphasis>.
+                                Padre del bootstrap inicializando este recurso.
+                            </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Debería permitir registrar el objeto padre del bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getBootstrap()</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar la instancia del bootstrap registrado.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setOptions(array $options)</code></entry>
+                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>requerido</emphasis>.
+                            Opciones con las cuales establecer el estado.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Establecer el estado del recurso.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getOptions()</code></entry>
+                    <entry><code>array</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar opciones registradas.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>init()</code></entry>
+                    <entry><code>mixed</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Patrón de estrategia: ejecute inicialización de los recursos.
+                    </para></entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+</sect2>

+ 95 - 95
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality-Resource_ResourceAbstract.xml

@@ -1,95 +1,95 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect2 id="zend.application.core-functionality.resource-resourceabstract">
-    <title>Zend_Application_Resource_ResourceAbstract</title>
-
-    <para>
-        <classname>Zend_Application_Resource_ResourceAbstract</classname> es una clase abstracta
-        implementando <link linkend="zend.application.core-functionality.resource-resource">Zend_Application_Resource_Resource</link>,
-        y es un buen punto de partida para crear sus propios recursos de plugin
-        personalizados.
-    </para>
-
-    <para>
-        Nota: esta clase abstracta no implementa el método <code>init()</code>;
-        esto se deja para la definición de extensiones concretas de la clase.
-    </para>
-
-    <table id="zend.application.core-functionality.resource-resourceabstract.api">
-        <title>Zend_Application_Resource_ResourceAbstract Methods</title>
-        <tgroup cols="4">
-            <thead>
-                <row>
-                    <entry>Método</entry>
-                    <entry>Valor de Retorno</entry>
-                    <entry>Parámetros</entry>
-                    <entry>Descripción</entry>
-                </row>
-            </thead>
-            <tbody>
-                <row>
-                    <entry><code>__construct($options = null)</code></entry>
-                    <entry><code>void</code></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>opcional</emphasis>.
-                            Opciones con las cuales establecer el estado del recurso.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        El constructor debería permitir pasar opciones con las
-                        cuales inicializar el estado.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap)</code></entry>
-                    <entry><classname>Zend_Application_Resource_ResourceAbstract</classname></entry>
-                    <entry><itemizedlist>
-                            <listitem><para>
-                                <code>$bootstrap</code>: <emphasis>requerido</emphasis>.
-                                Padre del bootstrap inicializando este recurso.
-                            </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Debería permitir registrar el objeto padre del bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getBootstrap()</code></entry>
-                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar la instancia registrada del bootstrap.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>setOptions(array $options)</code></entry>
-                    <entry><classname>Zend_Application_Resource_ResourceAbstract</classname></entry>
-                    <entry><itemizedlist>
-                        <listitem><para>
-                            <code>$options</code>: <emphasis>requerido</emphasis>.
-                            Opciones con las cuales establecer el estado.
-                        </para></listitem>
-                    </itemizedlist></entry>
-                    <entry><para>
-                        Establecer el estado del recurso.
-                    </para></entry>
-                </row>
-
-                <row>
-                    <entry><code>getOptions()</code></entry>
-                    <entry><code>array</code></entry>
-                    <entry>N/A</entry>
-                    <entry><para>
-                        Recuperar opciones registradas.
-                    </para></entry>
-                </row>
-            </tbody>
-        </tgroup>
-    </table>
-</sect2>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect2 id="zend.application.core-functionality.resource-resourceabstract">
+    <title>Zend_Application_Resource_ResourceAbstract</title>
+
+    <para>
+        <classname>Zend_Application_Resource_ResourceAbstract</classname> es una clase abstracta
+        implementando <link linkend="zend.application.core-functionality.resource-resource">Zend_Application_Resource_Resource</link>,
+        y es un buen punto de partida para crear sus propios recursos de plugin
+        personalizados.
+    </para>
+
+    <para>
+        Nota: esta clase abstracta no implementa el método <code>init()</code>;
+        esto se deja para la definición de extensiones concretas de la clase.
+    </para>
+
+    <table id="zend.application.core-functionality.resource-resourceabstract.api">
+        <title>Zend_Application_Resource_ResourceAbstract Methods</title>
+        <tgroup cols="4">
+            <thead>
+                <row>
+                    <entry>Método</entry>
+                    <entry>Valor de Retorno</entry>
+                    <entry>Parámetros</entry>
+                    <entry>Descripción</entry>
+                </row>
+            </thead>
+            <tbody>
+                <row>
+                    <entry><code>__construct($options = null)</code></entry>
+                    <entry><code>void</code></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>opcional</emphasis>.
+                            Opciones con las cuales establecer el estado del recurso.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        El constructor debería permitir pasar opciones con las
+                        cuales inicializar el estado.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setBootstrap(Zend_Application_Bootstrap_Bootstrapper $bootstrap)</code></entry>
+                    <entry><classname>Zend_Application_Resource_ResourceAbstract</classname></entry>
+                    <entry><itemizedlist>
+                            <listitem><para>
+                                <code>$bootstrap</code>: <emphasis>requerido</emphasis>.
+                                Padre del bootstrap inicializando este recurso.
+                            </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Debería permitir registrar el objeto padre del bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getBootstrap()</code></entry>
+                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar la instancia registrada del bootstrap.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>setOptions(array $options)</code></entry>
+                    <entry><classname>Zend_Application_Resource_ResourceAbstract</classname></entry>
+                    <entry><itemizedlist>
+                        <listitem><para>
+                            <code>$options</code>: <emphasis>requerido</emphasis>.
+                            Opciones con las cuales establecer el estado.
+                        </para></listitem>
+                    </itemizedlist></entry>
+                    <entry><para>
+                        Establecer el estado del recurso.
+                    </para></entry>
+                </row>
+
+                <row>
+                    <entry><code>getOptions()</code></entry>
+                    <entry><code>array</code></entry>
+                    <entry>N/A</entry>
+                    <entry><para>
+                        Recuperar opciones registradas.
+                    </para></entry>
+                </row>
+            </tbody>
+        </tgroup>
+    </table>
+</sect2>
+

+ 19 - 19
documentation/manual/es/module_specs/Zend_Application-CoreFunctionality.xml

@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.application.core-functionality" xmlns:xi="http://www.w3.org/2001/XInclude">
-    <title>Funcionalidad Básica</title>
-
-    <para>
-        Aquí encontrará documentación del tipo API acerca de todos los
-        componentes básicos de <classname>Zend_Application</classname>.
-    </para>
-
-    <xi:include href="Zend_Application-CoreFunctionality-Application.xml" />
-    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_Bootstrapper.xml" />
-    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_ResourceBootstrapper.xml" />
-    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_BootstrapAbstract.xml" />
-    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_Bootstrap.xml" />
-    <xi:include href="Zend_Application-CoreFunctionality-Resource_Resource.xml" />
-    <xi:include href="Zend_Application-CoreFunctionality-Resource_ResourceAbstract.xml" />
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.application.core-functionality" xmlns:xi="http://www.w3.org/2001/XInclude">
+    <title>Funcionalidad Básica</title>
+
+    <para>
+        Aquí encontrará documentación del tipo API acerca de todos los
+        componentes básicos de <classname>Zend_Application</classname>.
+    </para>
+
+    <xi:include href="Zend_Application-CoreFunctionality-Application.xml" />
+    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_Bootstrapper.xml" />
+    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_ResourceBootstrapper.xml" />
+    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_BootstrapAbstract.xml" />
+    <xi:include href="Zend_Application-CoreFunctionality-Bootstrap_Bootstrap.xml" />
+    <xi:include href="Zend_Application-CoreFunctionality-Resource_Resource.xml" />
+    <xi:include href="Zend_Application-CoreFunctionality-Resource_ResourceAbstract.xml" />
+</sect1>

+ 244 - 244
documentation/manual/es/module_specs/Zend_Application-Examples.xml

@@ -1,244 +1,244 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.application.examples">
-    <title>Ejemplos</title>
-
-    <para>
-        La propia clase Bootstrap suelen ser bastante mínima; a menudo,
-        será simplemente un talón vacío ampliando la clase base bootstrap:
-    </para>
-
-    <programlisting role="php"><![CDATA[
-class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-{
-}
-]]>
-    </programlisting>
-
-    <para>
-        Con el archivo de configuración coresspondiente:
-    </para>
-
-    <programlisting role="ini"><![CDATA[
-; APPLICATION_PATH/configs/application.ini
-[production]
-bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
-bootstrap.class = "Bootstrap"
-resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
-
-[development : testing]
-[development : production]
-]]></programlisting>
-
-    <para>
-        Sin embargo, si debiera ser necesaria un inicialización personalizada,
-        usted tiene dos opciones. En primer lugar, usted puede escribir métodos
-        prefijados con <code>_init</code> para especificar códigos distintos de
-        arranque. Estos métodos pueden ser llamados por bootstrap(), y también
-        pueden ser llamados como si fueran métodos públicos:
-        <code>bootstrap&lt;resource&gt;()</code>. Deben aceptar opcionalmente un
-        array de opciones.
-    </para>
-
-    <para>
-        Si su método recurso devuelve un valor, será almacenado en un contenedor
-        en el bootstrap. Esto puede ser útil cuando diferentes recursos necesitan
-        interactuar (como un recurso inyectándose a sí mismo en otro).
-        Luego, el método <code>getResource()</code> puede ser utilizado para
-        recuperar esos valores.
-    </para>
-
-    <para>
-        El siguiente ejemplo muestra un recurso de método para inicializar el
-        objeto solicitado. Hace uso del segimiento de la dependencia
-        (que depende del recurso Front Controller), obteniendo un recurso
-        desde el bootstrap y devolver el valor para almacenar en el bootstrap.
-    </para>
-
-    <programlisting role="php"><![CDATA[
-class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-{
-    protected function _initRequest(array $options = array())
-    {
-        // Garantizar que la instancia de front controller esté presente, y buscarla
-
-        $this->bootstrap('FrontController');
-        $front = $this->getResource('FrontController');
-
-        // Inicializar el objeto requerido
-        $request = new Zend_Controller_Request_Http();
-        $request->setBaseUrl('/foo');
-
-        // Agregarlo al front controller
-        $front->setRequest($request);
-
-        // Bootstrap guardará este valor en la clave 'request' de su contenedor
-        return $request;
-    }
-}
-]]>
-    </programlisting>
-
-    <para>
-        Nótese en este ejemplo la llamada a <code>bootstrap()</code>;
-        esto asegura que el front controller ha sido inicializado antes de
-        llamar a este método. Esa llamada puede desencadenar tanto un recurso u
-        otro método de la clase.
-    </para>
-
-    <para>
-        La otra opción es usar plugins de recursos, estos son objetos que
-        realizan inicializaciones específicas, y pueden ser especificados:
-    </para>
-
-    <itemizedlist>
-        <listitem>
-            <para>
-                Cuando se instancia un onbeto de Zend_Application
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Durante la inicialización del objeto bootstrap (arranque)
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Habilitándolos explícitamente a través del método de llamada
-                al objeto bootstrap
-            </para>
-        </listitem>
-    </itemizedlist>
-
-    <para>
-        Los recursos de plugins implementan
-        <classname>Zend_Application_Bootstrap_Resource</classname>, que define
-        simplemente que permitirán la inyección del llamador y opciones,
-        y que tienen un método <code>init()</code> method.
-        Como ejemplo, un recurso de una Vista (View) personalizada de bootstrap
-        podría ser como lo siguiente:
-    </para>
-
-    <programlisting role="php"><![CDATA[
-class My_Bootstrap_Resource_View
-    extends Zend_Application_Resource_ResourceAbstract
-{
-    public function init()
-    {
-        $view = new Zend_View($this->getOptions());
-        Zend_Dojo::enableView($view);
-
-        $view->doctype('XHTML1_STRICT');
-        $view->headTitle()->setSeparator(' - ')->append('My Site');
-        $view->headMeta()->appendHttpEquiv('Content-Type',
-                                           'text/html; charset=utf-8');
-
-        $view->dojo()->setDjConfigOption('parseOnLoad', true)
-                     ->setLocalPath('/js/dojo/dojo.js')
-                     ->registerModulePath('../spindle', 'spindle')
-                     ->addStylesheetModule('spindle.themes.spindle')
-                     ->requireModule('spindle.main')
-                     ->disable();
-
-        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
-            'ViewRenderer'
-        );
-        $viewRenderer->setView($view);
-
-        return $view;
-    }
-}
-]]>
-    </programlisting>
-
-    <para>
-        Para decirle al bootstrap que utilice éste, usted tendría que proveer
-        ya sea el nombre de la clase de los recursos, o una combinación del
-        path de un prefijo de carga del plugin y el nombre corto del recurso
-        (por ejemplo, "view"):
-    </para>
-
-    <programlisting role="php"><![CDATA[
-$application = new Zend_Application(
-    APPLICATION_ENV,
-    array(
-        'resources' => array(
-            'My_Bootstrap_Resource_View' => array(), // full class name; OR
-            'view' => array(),                       // short name
-
-            'FrontController' => array(
-                'controllerDirectory' => APPLICATION_PATH . '/controllers',
-            ),
-        ),
-
-        // For short names, define resource paths:
-        'resourcePaths = array(
-            'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
-        )
-    )
-);
-]]>
-    </programlisting>
-
-    <para>
-        Los recursos puede llamar a otros recursos e inicializadores accediendo
-        al bootstrap padre:
-    </para>
-
-    <programlisting role="php"><![CDATA[
-class My_Bootstrap_Resource_Layout
-    extends Zend_Application_Resource_ResourceAbstract
-{
-    public function init()
-    {
-        // ensure view is initialized...
-        $this->getBootstrap()->bootstrap('view');
-
-        // Get view object:
-        $view = $this->getBootstrap()->getResource('view');
-
-        // ...
-    }
-}
-]]>
-    </programlisting>
-
-    <para>
-        En el uso normal, usted podría instanciar la aplicación, arrancarla,
-        y ejecutarla:
-    </para>
-
-    <programlisting role="php"><![CDATA[
-$application = new Zend_Application(...);
-$application->bootstrap()
-            ->run();
-]]>
-    </programlisting>
-
-    <para>
-        Para un script personalizado, podría necesitar simplemente
-        inicializar recursos específicos:
-    </para>
-
-    <programlisting role="php"><![CDATA[
-$application = new Zend_Application(...);
-$application->getBootstrap()->bootstrap('db');
-
-$service = new Zend_XmlRpc_Server();
-$service->setClass('Foo');  // uses database...
-echo $service->handle();
-]]>
-    </programlisting>
-
-    <para>
-        En lugar de utilizar el método <code>bootstrap()</code> para llamar
-        a los métodos internos o recursos, también puede usar sobrecarga:
-    </para>
-
-    <programlisting role="php"><![CDATA[
-$application = new Zend_Application(...);
-$application->getBootstrap()->bootstrapDb();
-]]>
-    </programlisting>
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.application.examples">
+    <title>Ejemplos</title>
+
+    <para>
+        La propia clase Bootstrap suelen ser bastante mínima; a menudo,
+        será simplemente un talón vacío ampliando la clase base bootstrap:
+    </para>
+
+    <programlisting role="php"><![CDATA[
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+}
+]]>
+    </programlisting>
+
+    <para>
+        Con el archivo de configuración coresspondiente:
+    </para>
+
+    <programlisting role="ini"><![CDATA[
+; APPLICATION_PATH/configs/application.ini
+[production]
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+
+[development : testing]
+[development : production]
+]]></programlisting>
+
+    <para>
+        Sin embargo, si debiera ser necesaria un inicialización personalizada,
+        usted tiene dos opciones. En primer lugar, usted puede escribir métodos
+        prefijados con <code>_init</code> para especificar códigos distintos de
+        arranque. Estos métodos pueden ser llamados por bootstrap(), y también
+        pueden ser llamados como si fueran métodos públicos:
+        <code>bootstrap&lt;resource&gt;()</code>. Deben aceptar opcionalmente un
+        array de opciones.
+    </para>
+
+    <para>
+        Si su método recurso devuelve un valor, será almacenado en un contenedor
+        en el bootstrap. Esto puede ser útil cuando diferentes recursos necesitan
+        interactuar (como un recurso inyectándose a sí mismo en otro).
+        Luego, el método <code>getResource()</code> puede ser utilizado para
+        recuperar esos valores.
+    </para>
+
+    <para>
+        El siguiente ejemplo muestra un recurso de método para inicializar el
+        objeto solicitado. Hace uso del segimiento de la dependencia
+        (que depende del recurso Front Controller), obteniendo un recurso
+        desde el bootstrap y devolver el valor para almacenar en el bootstrap.
+    </para>
+
+    <programlisting role="php"><![CDATA[
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+    protected function _initRequest(array $options = array())
+    {
+        // Garantizar que la instancia de front controller esté presente, y buscarla
+
+        $this->bootstrap('FrontController');
+        $front = $this->getResource('FrontController');
+
+        // Inicializar el objeto requerido
+        $request = new Zend_Controller_Request_Http();
+        $request->setBaseUrl('/foo');
+
+        // Agregarlo al front controller
+        $front->setRequest($request);
+
+        // Bootstrap guardará este valor en la clave 'request' de su contenedor
+        return $request;
+    }
+}
+]]>
+    </programlisting>
+
+    <para>
+        Nótese en este ejemplo la llamada a <code>bootstrap()</code>;
+        esto asegura que el front controller ha sido inicializado antes de
+        llamar a este método. Esa llamada puede desencadenar tanto un recurso u
+        otro método de la clase.
+    </para>
+
+    <para>
+        La otra opción es usar plugins de recursos, estos son objetos que
+        realizan inicializaciones específicas, y pueden ser especificados:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                Cuando se instancia un onbeto de Zend_Application
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Durante la inicialización del objeto bootstrap (arranque)
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Habilitándolos explícitamente a través del método de llamada
+                al objeto bootstrap
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        Los recursos de plugins implementan
+        <classname>Zend_Application_Bootstrap_Resource</classname>, que define
+        simplemente que permitirán la inyección del llamador y opciones,
+        y que tienen un método <code>init()</code> method.
+        Como ejemplo, un recurso de una Vista (View) personalizada de bootstrap
+        podría ser como lo siguiente:
+    </para>
+
+    <programlisting role="php"><![CDATA[
+class My_Bootstrap_Resource_View
+    extends Zend_Application_Resource_ResourceAbstract
+{
+    public function init()
+    {
+        $view = new Zend_View($this->getOptions());
+        Zend_Dojo::enableView($view);
+
+        $view->doctype('XHTML1_STRICT');
+        $view->headTitle()->setSeparator(' - ')->append('My Site');
+        $view->headMeta()->appendHttpEquiv('Content-Type',
+                                           'text/html; charset=utf-8');
+
+        $view->dojo()->setDjConfigOption('parseOnLoad', true)
+                     ->setLocalPath('/js/dojo/dojo.js')
+                     ->registerModulePath('../spindle', 'spindle')
+                     ->addStylesheetModule('spindle.themes.spindle')
+                     ->requireModule('spindle.main')
+                     ->disable();
+
+        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
+            'ViewRenderer'
+        );
+        $viewRenderer->setView($view);
+
+        return $view;
+    }
+}
+]]>
+    </programlisting>
+
+    <para>
+        Para decirle al bootstrap que utilice éste, usted tendría que proveer
+        ya sea el nombre de la clase de los recursos, o una combinación del
+        path de un prefijo de carga del plugin y el nombre corto del recurso
+        (por ejemplo, "view"):
+    </para>
+
+    <programlisting role="php"><![CDATA[
+$application = new Zend_Application(
+    APPLICATION_ENV,
+    array(
+        'resources' => array(
+            'My_Bootstrap_Resource_View' => array(), // full class name; OR
+            'view' => array(),                       // short name
+
+            'FrontController' => array(
+                'controllerDirectory' => APPLICATION_PATH . '/controllers',
+            ),
+        ),
+
+        // For short names, define resource paths:
+        'resourcePaths = array(
+            'My_Bootstrap_Resource' => 'My/Bootstrap/Resource',
+        )
+    )
+);
+]]>
+    </programlisting>
+
+    <para>
+        Los recursos puede llamar a otros recursos e inicializadores accediendo
+        al bootstrap padre:
+    </para>
+
+    <programlisting role="php"><![CDATA[
+class My_Bootstrap_Resource_Layout
+    extends Zend_Application_Resource_ResourceAbstract
+{
+    public function init()
+    {
+        // ensure view is initialized...
+        $this->getBootstrap()->bootstrap('view');
+
+        // Get view object:
+        $view = $this->getBootstrap()->getResource('view');
+
+        // ...
+    }
+}
+]]>
+    </programlisting>
+
+    <para>
+        En el uso normal, usted podría instanciar la aplicación, arrancarla,
+        y ejecutarla:
+    </para>
+
+    <programlisting role="php"><![CDATA[
+$application = new Zend_Application(...);
+$application->bootstrap()
+            ->run();
+]]>
+    </programlisting>
+
+    <para>
+        Para un script personalizado, podría necesitar simplemente
+        inicializar recursos específicos:
+    </para>
+
+    <programlisting role="php"><![CDATA[
+$application = new Zend_Application(...);
+$application->getBootstrap()->bootstrap('db');
+
+$service = new Zend_XmlRpc_Server();
+$service->setClass('Foo');  // uses database...
+echo $service->handle();
+]]>
+    </programlisting>
+
+    <para>
+        En lugar de utilizar el método <code>bootstrap()</code> para llamar
+        a los métodos internos o recursos, también puede usar sobrecarga:
+    </para>
+
+    <programlisting role="php"><![CDATA[
+$application = new Zend_Application(...);
+$application->getBootstrap()->bootstrapDb();
+]]>
+    </programlisting>
+</sect1>

+ 14 - 14
documentation/manual/es/module_specs/Zend_Application-Introduction.xml

@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.application.introduction">
-    <title>Introducción</title>
-
-    <para>
-        <classname>Zend_Application</classname> ofrece un motor de bootstrap
-        para aplicaciones que proporcionan recursos reutilizables,
-        -- clases de bootstrap comunes y basadas en módulos -- y comprobación de
-        dependencias. También se ocupa de establecer el entorno de PHP
-        e introduce la autocarga (autoloading) por defecto.
-    </para>
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.application.introduction">
+    <title>Introducción</title>
+
+    <para>
+        <classname>Zend_Application</classname> ofrece un motor de bootstrap
+        para aplicaciones que proporcionan recursos reutilizables,
+        -- clases de bootstrap comunes y basadas en módulos -- y comprobación de
+        dependencias. También se ocupa de establecer el entorno de PHP
+        e introduce la autocarga (autoloading) por defecto.
+    </para>
+</sect1>

+ 414 - 414
documentation/manual/es/module_specs/Zend_Application-QuickStart.xml

@@ -1,414 +1,414 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.application.quick-start">
-    <title>Inicio Rápido con Zend_Application</title>
-
-    <para>
-        Hay dos caminos para iniciarse con
-        <classname>Zend_Application</classname>, y dependen de cómo inicia su
-        proyecto. En cada caso, usted siempre comienza con la creación de la
-        clase <code>Bootstrap</code>, y un archivo de configuración asociado.
-    </para>
-
-    <para>
-        Si usted planea utilizar <classname>Zend_Tool</classname> para crear su
-        proyecto, continúe leyendo abajo. Si usted va añadiendo
-        <classname>Zend_Application</classname> a un proyecto existente,
-        usted querrá <link linkend="zend.application.quick-start.manual">saltearse hacia adelante</link>.
-    </para>
-
-    <sect2 id="zend.application.quick-start.zend-tool">
-        <title>Usando Zend_Tool</title>
-
-        <para>
-            La forma más rápida para comenzar a utilizar
-            <classname>Zend_Application</classname> es usar
-            <classname>Zend_Tool</classname> para generar su proyecto.
-            Esto también creará su clase y archivo <code>Bootstrap</code>.
-        </para>
-
-        <para>
-            Para crear un proyecto, ejecute el comando <code>zf</code> (en sistemas *nix):
-        </para>
-
-        <programlisting role="sh"><![CDATA[
-% zf create project newproject
-]]></programlisting>
-
-        <para>
-            O el comando <code>zf.bat</code> en Windows:
-        </para>
-
-        <programlisting role="dos"><![CDATA[
-C:> zf.bat create project newproject
-]]></programlisting>
-
-        <para>
-            Ambos crearán una estructura del proyecto que luce como lo siguiente:
-        </para>
-
-        <programlisting role="text"><![CDATA[
-newproject
-|-- application
-|   |-- Bootstrap.php
-|   |-- configs
-|   |   `-- application.ini
-|   |-- controllers
-|   |   |-- ErrorController.php
-|   |   `-- IndexController.php
-|   |-- models
-|   `-- views
-|       |-- helpers
-|       `-- scripts
-|           |-- error
-|           |   `-- error.phtml
-|           `-- index
-|               `-- index.phtml
-|-- library
-|-- public
-|   `-- index.php
-`-- tests
-    |-- application
-    |   `-- bootstrap.php
-    |-- library
-    |   `-- bootstrap.php
-    `-- phpunit.xml
-]]></programlisting>
-
-        <para>
-            En el diagrama de arriba, su arranque(bootstrap) está en
-            <code>newproject/application/Bootstrap.php</code>, y al principio
-            se vería así:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-class Bootstrap extends Zend_Application_Bootstrap_BootstrapAbstract
-{
-}
-]]></programlisting>
-
-        <para>
-            Usted también notará que se ha creado un archivo de configuración,
-            <code>newproject/application/configs/application.ini</code>.
-            Tiene los siguientes contenidos:
-        </para>
-
-        <programlisting role="dosini"><![CDATA[
-[production]
-phpSettings.display_startup_errors = 0
-phpSettings.display_errors = 0
-includePaths.library = APPLICATION_PATH "/../library"
-bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
-bootstrap.class = "Bootstrap"
-resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
-
-[staging : production]
-
-[testing : production]
-phpSettings.display_startup_errors = 1
-phpSettings.display_errors = 1
-
-[development : production]
-phpSettings.display_startup_errors = 1
-phpSettings.display_errors = 1
-]]></programlisting>
-
-        <para>
-            Todos los settings en este archivo de configuración son para
-            su uso con <classname>Zend_Application</classname>
-            y su bootstrap.
-        </para>
-
-        <para>
-            Otro archivo de interés es <code>newproject/public/index.php</code>,
-            el cual invoca a
-            <classname>Zend_Application</classname> y lo despacha.
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php
-// Define el path al directorio de la aplicación
-defined('APPLICATION_PATH')
-    || define('APPLICATION_PATH',
-              realpath(dirname(__FILE__) . '/../application'));
-
-// Define el medio ambiente de la aplicación
-defined('APPLICATION_ENV')
-    || define('APPLICATION_ENV',
-              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
-                                         : 'production'));
-
-/** Zend_Application */
-require_once 'Zend/Application.php';
-
-// Crea la application, el bootstrap, y lo ejecuta
-$application = new Zend_Application(
-    APPLICATION_ENV,
-    APPLICATION_PATH . '/configs/application.ini'
-);
-$application->bootstrap()
-            ->run();
-]]></programlisting>
-
-        <para>
-            Para continuar el inicio rápido, por favor
-            <link linkend="zend.application.quick-start.resources">
-            salte a la sección de Recursos</link>.
-        </para>
-    </sect2>
-
-    <sect2 id="zend.application.quick-start.manual">
-        <title>Añadir Zend_Application a su aplicación</title>
-
-        <para>
-            Los fundamentos de <classname>Zend_Application</classname> son bastante simples:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                Crear un archivo <code>application/Bootstrap.php</code>, con la
-                clase <code>Bootstrap</code>.
-            </para></listitem>
-
-            <listitem><para>
-                Crear un archivo de configuración
-                <code>application/configs/application.ini</code>
-                con la configuración básica necesaria para
-                <classname>Zend_Application</classname>.
-            </para></listitem>
-
-            <listitem><para>
-                Modificar su <code>public/index.php</code> para usar
-                <classname>Zend_Application</classname>.
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            Primero, genere su clase <code>Bootstrap</code>. Crear un archivo,
-            <code>application/Bootstrap.php</code>, con los siguientes contenidos:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php
-class Bootstrap extends Zend_Application_Bootstrap_BootstrapAbstract
-{
-}
-]]></programlisting>
-
-        <para>
-            Ahora, debe crear su configuración. Para este tutorial, vamos a
-            usar un estilo de configuración INI; puede, por supuesto,
-            usar un archivo de configuración XML o PHP. Crear el archivo
-            <code>application/configs/application.ini</code>, proporcionando
-            los siguientes contenidos:
-        </para>
-
-        <programlisting role="dosini"><![CDATA[
-[production]
-phpSettings.display_startup_errors = 0
-phpSettings.display_errors = 0
-includePaths.library = APPLICATION_PATH "/../library"
-bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
-bootstrap.class = "Bootstrap"
-resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
-
-[staging : production]
-
-[testing : production]
-phpSettings.display_startup_errors = 1
-phpSettings.display_errors = 1
-
-[development : production]
-phpSettings.display_startup_errors = 1
-phpSettings.display_errors = 1
-]]></programlisting>
-
-        <para>
-            Ahora, modifiquemos su script de gateway,
-            <code>public/index.php</code>. Si el archivo no existe, cree uno;
-            de lo contrario, sustituirlo por el siguiente contenido:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php
-// Define el path al directorio de la aplicación
-defined('APPLICATION_PATH')
-    || define('APPLICATION_PATH',
-              realpath(dirname(__FILE__) . '/../application'));
-
-// Define el medio ambiente de la aplicación
-defined('APPLICATION_ENV')
-    || define('APPLICATION_ENV',
-              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
-                                         : 'production'));
-
-/** Zend_Application */
-require_once 'Zend/Application.php';
-
-// Crea la aplicación, el bootstrap, y lo ejecuta
-$application = new Zend_Application(
-    APPLICATION_ENV,
-    APPLICATION_PATH . '/configs/application.ini'
-);
-$application->bootstrap()
-            ->run();
-]]></programlisting>
-
-        <para>
-            Usted puede observar que el valor constante del entorno de aplicación
-            busca una variable de entorno "APPLICATION_ENV".
-            Recomendamos este ajuste en el medio ambiente de su servidor web.
-            En Apache, puede configurar esto también en su definición de vhost,
-            o en su archivo <code>.htaccess</code>. Recomendamos el siguiente
-            contenido para su archivo <code>public/.htacces</code>:
-        </para>
-
-        <programlisting role="conf"><![CDATA[
-SetEnv APPLICATION_ENV development
-
-RewriteEngine On
-RewriteCond %{REQUEST_FILENAME} -s [OR]
-RewriteCond %{REQUEST_FILENAME} -l [OR]
-RewriteCond %{REQUEST_FILENAME} -d
-RewriteRule ^.*$ - [NC,L]
-RewriteRule ^.*$ index.php [NC,L]
-
-]]></programlisting>
-
-        <para>
-            En este punto, está listo para comenzar a usar las ventajas de
-            <classname>Zend_Application</classname>.
-        </para>
-    </sect2>
-
-    <sect2 id="zend.application.quick-start.resources">
-        <title>Agregando y Creando Recursos</title>
-
-        <para>
-            Si ha seguido las instrucciones anteriores, entonces su clase de
-            arranque estará utilizando un controlador frontal,
-            y cuando se ejecute, despachará el controlador frontal.
-            Sin embargo, con toda probabilidad, necesitará un poco más de
-            configuración que ésta.
-        </para>
-
-        <para>
-            En esta sección, veremos como añadir dos recursos a su aplicación.
-            En primer lugar, estableceremos los diseños,
-            y luego personalizaremos su objeto de vista.
-        </para>
-
-        <para>
-            Uno de los recursos standard provistos con
-            <classname>Zend_Application</classname> es el recurso "layout".
-            Este recurso espera que usted defina valores de configuración, los
-            que entonces utilizará para configurar su instancia
-            <classname>Zend_Layout</classname>.
-        </para>
-
-        <para>
-            Para usarlo, todo lo que tenemos que hacer es actualizar el
-            archivo de configuración.
-        </para>
-
-        <programlisting role="dosini"><![CDATA[
-[production]
-phpSettings.display_startup_errors = 0
-phpSettings.display_errors = 0
-includePaths.library = APPLICATION_PATH "/../library"
-bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
-bootstrap.class = "Bootstrap"
-resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
-; ADD THE FOLLOWING LINES
-resources.layout.layout = "layout.phtml"
-resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
-
-[staging : production]
-
-[testing : production]
-phpSettings.display_startup_errors = 1
-phpSettings.display_errors = 1
-
-[development : production]
-phpSettings.display_startup_errors = 1
-phpSettings.display_errors = 1
-]]></programlisting>
-
-        <para>
-            Si hasta ahora usted no lo ha hecho, genere el directorio
-            <code>application/layouts/scripts/</code>, y el archivo
-            <code>layout.phtml</code> dentro de ese directorio. Un buen diseño
-            inicial es como sigue
-            (y vincularlo con el recurso vista que cubriremos a continuación):
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php echo $this->doctype() ?>
-<html>
-<head>
-    <?php echo $this->headTitle() ?>
-    <?php echo $this->headLink() ?>
-    <?php echo $this->headStyle() ?>
-    <?php echo $this->headScript() ?>
-</head>
-<body>
-    <?php echo $this->layout()->content ?>
-</body>
-</html>
-]]></programlisting>
-
-        <para>
-            En este punto, usted tendrá un diseño ya trabajando.
-        </para>
-
-        <para>
-            Ahora, vamos añadir una vista de recurso personalizada.
-            Cuando se inicializa la vista, queremos establecer el DocType HTML
-            y un valor predeterminado del título para utilizarlo en la cabecera
-            de HTML. Esto puede llevarse a cabo editando su clase
-            <code>Bootstrap</code> para agregar un método.
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php
-class Bootstrap extends Zend_Application_Bootstrap_BootstrapAbstract
-{
-    protected function _initView()
-    {
-        // Inicializar la vista
-        $view = new Zend_View();
-        $view->doctype('XHTML1_STRICT');
-        $view->headTitle('My First Zend Framework Application');
-
-        // Agregarla al ViewRenderer
-        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
-            'ViewRenderer'
-        );
-        $viewRenderer->setView($view);
-
-        // Retornarla, de modo que pueda ser almacenada en el arranque (bootstrap)
-
-        return $view;
-    }
-}
-]]></programlisting>
-
-        <para>
-            Este método se ejecuta automáticamente cuando arranca la aplicación,
-            y se asegurará que su vista sea inicializada según sus necesidades
-            de aplicación.
-        </para>
-    </sect2>
-
-    <sect2 id="zend.application.quick-start.next-steps">
-        <title>Próximos pasos con Zend_Application</title>
-
-        <para>
-            Con lo anterior usted comenzó con <classname>Zend_Application</classname>
-            y pudo crear su aplicación bootstrap. Desde aquí, usted debe comenzar a
-            crear sus métodos de recursos, o para la máxima re-usabilidad,
-            clases de recursos de plugin. Y seguir leyendo para aprender más!
-        </para>
-    </sect2>
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.application.quick-start">
+    <title>Inicio Rápido con Zend_Application</title>
+
+    <para>
+        Hay dos caminos para iniciarse con
+        <classname>Zend_Application</classname>, y dependen de cómo inicia su
+        proyecto. En cada caso, usted siempre comienza con la creación de la
+        clase <code>Bootstrap</code>, y un archivo de configuración asociado.
+    </para>
+
+    <para>
+        Si usted planea utilizar <classname>Zend_Tool</classname> para crear su
+        proyecto, continúe leyendo abajo. Si usted va añadiendo
+        <classname>Zend_Application</classname> a un proyecto existente,
+        usted querrá <link linkend="zend.application.quick-start.manual">saltearse hacia adelante</link>.
+    </para>
+
+    <sect2 id="zend.application.quick-start.zend-tool">
+        <title>Usando Zend_Tool</title>
+
+        <para>
+            La forma más rápida para comenzar a utilizar
+            <classname>Zend_Application</classname> es usar
+            <classname>Zend_Tool</classname> para generar su proyecto.
+            Esto también creará su clase y archivo <code>Bootstrap</code>.
+        </para>
+
+        <para>
+            Para crear un proyecto, ejecute el comando <code>zf</code> (en sistemas *nix):
+        </para>
+
+        <programlisting role="sh"><![CDATA[
+% zf create project newproject
+]]></programlisting>
+
+        <para>
+            O el comando <code>zf.bat</code> en Windows:
+        </para>
+
+        <programlisting role="dos"><![CDATA[
+C:> zf.bat create project newproject
+]]></programlisting>
+
+        <para>
+            Ambos crearán una estructura del proyecto que luce como lo siguiente:
+        </para>
+
+        <programlisting role="text"><![CDATA[
+newproject
+|-- application
+|   |-- Bootstrap.php
+|   |-- configs
+|   |   `-- application.ini
+|   |-- controllers
+|   |   |-- ErrorController.php
+|   |   `-- IndexController.php
+|   |-- models
+|   `-- views
+|       |-- helpers
+|       `-- scripts
+|           |-- error
+|           |   `-- error.phtml
+|           `-- index
+|               `-- index.phtml
+|-- library
+|-- public
+|   `-- index.php
+`-- tests
+    |-- application
+    |   `-- bootstrap.php
+    |-- library
+    |   `-- bootstrap.php
+    `-- phpunit.xml
+]]></programlisting>
+
+        <para>
+            En el diagrama de arriba, su arranque(bootstrap) está en
+            <code>newproject/application/Bootstrap.php</code>, y al principio
+            se vería así:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+class Bootstrap extends Zend_Application_Bootstrap_BootstrapAbstract
+{
+}
+]]></programlisting>
+
+        <para>
+            Usted también notará que se ha creado un archivo de configuración,
+            <code>newproject/application/configs/application.ini</code>.
+            Tiene los siguientes contenidos:
+        </para>
+
+        <programlisting role="dosini"><![CDATA[
+[production]
+phpSettings.display_startup_errors = 0
+phpSettings.display_errors = 0
+includePaths.library = APPLICATION_PATH "/../library"
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+
+[staging : production]
+
+[testing : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+
+[development : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+]]></programlisting>
+
+        <para>
+            Todos los settings en este archivo de configuración son para
+            su uso con <classname>Zend_Application</classname>
+            y su bootstrap.
+        </para>
+
+        <para>
+            Otro archivo de interés es <code>newproject/public/index.php</code>,
+            el cual invoca a
+            <classname>Zend_Application</classname> y lo despacha.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php
+// Define el path al directorio de la aplicación
+defined('APPLICATION_PATH')
+    || define('APPLICATION_PATH',
+              realpath(dirname(__FILE__) . '/../application'));
+
+// Define el medio ambiente de la aplicación
+defined('APPLICATION_ENV')
+    || define('APPLICATION_ENV',
+              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
+                                         : 'production'));
+
+/** Zend_Application */
+require_once 'Zend/Application.php';
+
+// Crea la application, el bootstrap, y lo ejecuta
+$application = new Zend_Application(
+    APPLICATION_ENV,
+    APPLICATION_PATH . '/configs/application.ini'
+);
+$application->bootstrap()
+            ->run();
+]]></programlisting>
+
+        <para>
+            Para continuar el inicio rápido, por favor
+            <link linkend="zend.application.quick-start.resources">
+            salte a la sección de Recursos</link>.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.application.quick-start.manual">
+        <title>Añadir Zend_Application a su aplicación</title>
+
+        <para>
+            Los fundamentos de <classname>Zend_Application</classname> son bastante simples:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                Crear un archivo <code>application/Bootstrap.php</code>, con la
+                clase <code>Bootstrap</code>.
+            </para></listitem>
+
+            <listitem><para>
+                Crear un archivo de configuración
+                <code>application/configs/application.ini</code>
+                con la configuración básica necesaria para
+                <classname>Zend_Application</classname>.
+            </para></listitem>
+
+            <listitem><para>
+                Modificar su <code>public/index.php</code> para usar
+                <classname>Zend_Application</classname>.
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            Primero, genere su clase <code>Bootstrap</code>. Crear un archivo,
+            <code>application/Bootstrap.php</code>, con los siguientes contenidos:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php
+class Bootstrap extends Zend_Application_Bootstrap_BootstrapAbstract
+{
+}
+]]></programlisting>
+
+        <para>
+            Ahora, debe crear su configuración. Para este tutorial, vamos a
+            usar un estilo de configuración INI; puede, por supuesto,
+            usar un archivo de configuración XML o PHP. Crear el archivo
+            <code>application/configs/application.ini</code>, proporcionando
+            los siguientes contenidos:
+        </para>
+
+        <programlisting role="dosini"><![CDATA[
+[production]
+phpSettings.display_startup_errors = 0
+phpSettings.display_errors = 0
+includePaths.library = APPLICATION_PATH "/../library"
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+
+[staging : production]
+
+[testing : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+
+[development : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+]]></programlisting>
+
+        <para>
+            Ahora, modifiquemos su script de gateway,
+            <code>public/index.php</code>. Si el archivo no existe, cree uno;
+            de lo contrario, sustituirlo por el siguiente contenido:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php
+// Define el path al directorio de la aplicación
+defined('APPLICATION_PATH')
+    || define('APPLICATION_PATH',
+              realpath(dirname(__FILE__) . '/../application'));
+
+// Define el medio ambiente de la aplicación
+defined('APPLICATION_ENV')
+    || define('APPLICATION_ENV',
+              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
+                                         : 'production'));
+
+/** Zend_Application */
+require_once 'Zend/Application.php';
+
+// Crea la aplicación, el bootstrap, y lo ejecuta
+$application = new Zend_Application(
+    APPLICATION_ENV,
+    APPLICATION_PATH . '/configs/application.ini'
+);
+$application->bootstrap()
+            ->run();
+]]></programlisting>
+
+        <para>
+            Usted puede observar que el valor constante del entorno de aplicación
+            busca una variable de entorno "APPLICATION_ENV".
+            Recomendamos este ajuste en el medio ambiente de su servidor web.
+            En Apache, puede configurar esto también en su definición de vhost,
+            o en su archivo <code>.htaccess</code>. Recomendamos el siguiente
+            contenido para su archivo <code>public/.htacces</code>:
+        </para>
+
+        <programlisting role="conf"><![CDATA[
+SetEnv APPLICATION_ENV development
+
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} -s [OR]
+RewriteCond %{REQUEST_FILENAME} -l [OR]
+RewriteCond %{REQUEST_FILENAME} -d
+RewriteRule ^.*$ - [NC,L]
+RewriteRule ^.*$ index.php [NC,L]
+
+]]></programlisting>
+
+        <para>
+            En este punto, está listo para comenzar a usar las ventajas de
+            <classname>Zend_Application</classname>.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.application.quick-start.resources">
+        <title>Agregando y Creando Recursos</title>
+
+        <para>
+            Si ha seguido las instrucciones anteriores, entonces su clase de
+            arranque estará utilizando un controlador frontal,
+            y cuando se ejecute, despachará el controlador frontal.
+            Sin embargo, con toda probabilidad, necesitará un poco más de
+            configuración que ésta.
+        </para>
+
+        <para>
+            En esta sección, veremos como añadir dos recursos a su aplicación.
+            En primer lugar, estableceremos los diseños,
+            y luego personalizaremos su objeto de vista.
+        </para>
+
+        <para>
+            Uno de los recursos standard provistos con
+            <classname>Zend_Application</classname> es el recurso "layout".
+            Este recurso espera que usted defina valores de configuración, los
+            que entonces utilizará para configurar su instancia
+            <classname>Zend_Layout</classname>.
+        </para>
+
+        <para>
+            Para usarlo, todo lo que tenemos que hacer es actualizar el
+            archivo de configuración.
+        </para>
+
+        <programlisting role="dosini"><![CDATA[
+[production]
+phpSettings.display_startup_errors = 0
+phpSettings.display_errors = 0
+includePaths.library = APPLICATION_PATH "/../library"
+bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
+bootstrap.class = "Bootstrap"
+resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
+; ADD THE FOLLOWING LINES
+resources.layout.layout = "layout.phtml"
+resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
+
+[staging : production]
+
+[testing : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+
+[development : production]
+phpSettings.display_startup_errors = 1
+phpSettings.display_errors = 1
+]]></programlisting>
+
+        <para>
+            Si hasta ahora usted no lo ha hecho, genere el directorio
+            <code>application/layouts/scripts/</code>, y el archivo
+            <code>layout.phtml</code> dentro de ese directorio. Un buen diseño
+            inicial es como sigue
+            (y vincularlo con el recurso vista que cubriremos a continuación):
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php echo $this->doctype() ?>
+<html>
+<head>
+    <?php echo $this->headTitle() ?>
+    <?php echo $this->headLink() ?>
+    <?php echo $this->headStyle() ?>
+    <?php echo $this->headScript() ?>
+</head>
+<body>
+    <?php echo $this->layout()->content ?>
+</body>
+</html>
+]]></programlisting>
+
+        <para>
+            En este punto, usted tendrá un diseño ya trabajando.
+        </para>
+
+        <para>
+            Ahora, vamos añadir una vista de recurso personalizada.
+            Cuando se inicializa la vista, queremos establecer el DocType HTML
+            y un valor predeterminado del título para utilizarlo en la cabecera
+            de HTML. Esto puede llevarse a cabo editando su clase
+            <code>Bootstrap</code> para agregar un método.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php
+class Bootstrap extends Zend_Application_Bootstrap_BootstrapAbstract
+{
+    protected function _initView()
+    {
+        // Inicializar la vista
+        $view = new Zend_View();
+        $view->doctype('XHTML1_STRICT');
+        $view->headTitle('My First Zend Framework Application');
+
+        // Agregarla al ViewRenderer
+        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
+            'ViewRenderer'
+        );
+        $viewRenderer->setView($view);
+
+        // Retornarla, de modo que pueda ser almacenada en el arranque (bootstrap)
+
+        return $view;
+    }
+}
+]]></programlisting>
+
+        <para>
+            Este método se ejecuta automáticamente cuando arranca la aplicación,
+            y se asegurará que su vista sea inicializada según sus necesidades
+            de aplicación.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.application.quick-start.next-steps">
+        <title>Próximos pasos con Zend_Application</title>
+
+        <para>
+            Con lo anterior usted comenzó con <classname>Zend_Application</classname>
+            y pudo crear su aplicación bootstrap. Desde aquí, usted debe comenzar a
+            crear sus métodos de recursos, o para la máxima re-usabilidad,
+            clases de recursos de plugin. Y seguir leyendo para aprender más!
+        </para>
+    </sect2>
+</sect1>

+ 652 - 652
documentation/manual/es/module_specs/Zend_Application-TheoryOfOperation.xml

@@ -1,652 +1,652 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.application.theory-of-operation">
-    <title>Teoría de Operación</title>
-
-    <para>
-        Obtener una aplicación MVC configurada y lista para funcionar ha
-        requerido una cantidad de código creciente al disponer de una mayor
-        cantidad de características: estableciendo la base de datos,
-        configurar su vista y los ayudantes de vistas, configurar su diseños,
-        colocando plugins, registrando ayudantes de acción, y mucho más.
-    </para>
-
-    <para>
-        Además, a menudo deseará reutilizar el mismo código para arrancar sus
-        pruebas, un cronjob, o un servicio script.
-        Si bien es posible incluir simplemente su script bootstrap,
-        a menudo hay initializaciones que son específicas del medio ambiente,
-        puede que usted no necesite el MVC para un cronjob, o simplemente
-        la capa de DB para un servicio script.
-    </para>
-
-    <para>
-        <classname>Zend_Application</classname> pretende hacer esto más fácil
-        y promover la reutilización mediante el encapsulamiento del
-        bootstraping en paradigmas de OOP.
-    </para>
-
-    <para>
-        Zend_Application está dividida en tres áreas:
-    </para>
-
-    <itemizedlist>
-        <listitem>
-            <para>
-                <classname>Zend_Application</classname>: carga el medio
-                ambiente de PHP, incluyendo include_paths y autocarga,
-                e instancia la clase requerida de bootstrap.
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                <classname>Zend_Application_Bootstrap</classname>: suministra
-                interfaces para las clases bootstrap.
-                <classname>Zend_Application_Bootstrap_Bootstrap</classname>
-                ofrece funcionalidad común para la mayoría de las necesidades
-                de bootstrap, incluyendo algoritmos de comprobación de
-                dependencias y la capacidad de cargar recursos de bootstrap
-                por demanda.
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                <classname>Zend_Application_Resource</classname> provee una
-                interfaz para recursos standard de bootstrap que pueden ser
-                cargados por demanda mediante una instancia bootstrap,
-                así como implementaciones de varios recursos por defecto.
-            </para>
-        </listitem>
-    </itemizedlist>
-
-    <para>
-        Los desarrolladores crean una clase de arranque(bootstrap) para sus
-        aplicaciones, extendiendo
-        <classname>Zend_Application_Bootstrap_Bootstrap</classname> o
-        implementando (mínimamente)
-        <classname>Zend_Application_Bootstrap_Bootstrapper</classname>. El punto de entrada
-        (e.g., public/index.php) cargará <classname>Zend_Application</classname>,
-        y la instanciará pasando:
-    </para>
-
-    <itemizedlist>
-        <listitem>
-            <para>
-                El medio ambiente actual
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Opciones para bootstrapping
-            </para>
-        </listitem>
-    </itemizedlist>
-
-    <para>
-        Las opciones de bootstrap incluyen el path hacia el archivo que
-        contiene la clase bootstrap y opcionalmente:
-    </para>
-
-    <itemizedlist>
-        <listitem>
-            <para>
-                Cualquier include_paths extras a establecer
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Cualquier otro namespace de autocarga adicional a registrar
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Cualquier setting de php.ini a inicializar
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                El nombre de clase para la clase bootstrap (si no es "Bootstrap")
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Pares de recursos prefijo/path a usar
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Cualquier recurso a usar (por nombre de clase o nombre corto)
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Path adicional al archivo de configuración a cargar
-            </para>
-        </listitem>
-        <listitem>
-            <para>
-                Opciones adicionales de configuración
-            </para>
-        </listitem>
-    </itemizedlist>
-
-    <para>
-        Las opciones puden ser una array, un objeto
-        <classname>Zend_Config</classname>, o el path a un archivo de
-        configuración.
-    </para>
-
-    <sect2 id="zend.application.theory-of-operation.bootstrap">
-        <title>Bootstrapping</title>
-
-        <para>
-            La segunda área de responsabilidad de
-            <classname>Zend_Application</classname> es ejecutar la aplicación
-            bootstrap. Los bootstraps necesitan mínimamente implementar
-            <classname>Zend_Application_Bootstrap_Bootstrapper</classname>,
-            la que define la siguiente API:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-interface Zend_Application_Bootstrap_Bootstrapper
-{
-    public function __construct($application);
-    public function setOptions(array $options);
-    public function getApplication();
-    public function getEnvironment();
-    public function getClassResources();
-    public function getClassResourceNames();
-    public function bootstrap($resource = null);
-    public function run();
-}
-]]></programlisting>
-
-        <para>
-            Esta API permite aceptar al bootstrap el medio ambiente y a la
-            configuración desde el objeto aplicación, informa la
-            responsabilidad de los recursos para los recursos bootstraping,
-            luego hace el bootstrap y ejecuta la aplicación.
-        </para>
-
-        <para>
-            Puede implementar esta interfaz usted mismo, extendiendo
-            <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>,
-            o usar
-            <classname>Zend_Application_Bootstrap_Bootstrap</classname>.
-        </para>
-
-        <para>
-            Además de esta funcionalidad, hay muchas otras áreas de
-            incumbencia con las cuales debe familiarizarse.
-        </para>
-
-        <sect3 id="zend.application.theory-of-operation.bootstrap.resource-methods">
-            <title>Métodos Recursos</title>
-
-            <para>
-                La implementación de
-                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>
-                proporciona una simple convención para definir métodos de
-                recursos de clase. Cualquier método protegido cuyo nombre
-                comience con un prefijo <code>_init</code> será considerado
-                un método de recurso.
-            </para>
-
-            <para>
-                Para arrancar un único método de recurso, utilizar el método
-                <code>bootstrap()</code>, y pasarle el nombre del recurso.
-                El nombre será el nombre de método menos el prefijo
-                <code>_init</code>.
-            </para>
-
-            <para>
-                Para arrancar varios métodos de recursos, pasar un array de
-                nombres. Para bootstrap de todos los métodos de recursos,
-                no pasar nada.
-            </para>
-
-            <para>
-                Tome las siguientes clases bootstrap:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-{
-    protected function _initFoo()
-    {
-        // ...
-    }
-
-    protected function _initBar()
-    {
-        // ...
-    }
-
-    protected function _initBaz()
-    {
-        // ...
-    }
-}
-]]></programlisting>
-
-            <para>
-                Para arrancar solo el método <code>_initFoo()</code>, haga lo
-                siguiente:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$bootstrap->bootstrap('foo');
-]]></programlisting>
-
-            <para>
-                Para arrancar los métodos <code>_initFoo()</code> y
-                <code>_initBar()</code> , haga lo siguiente:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$bootstrap->bootstrap(array('foo', 'bar));
-]]></programlisting>
-
-            <para>
-                Para arrancar todos los métodos de recursos, llame a
-                <code>code>bootstrap()</code> sin argumentos:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$bootstrap->bootstrap();
-]]></programlisting>
-        </sect3>
-
-        <sect3 id="zend.application.theory-of-operation.bootstrap.resource-plugins">
-            <title>Bootstraps que usan plugins de recursos</title>
-
-            <para>
-                Para hacer más re-utilizables sus bootstraps, hemos
-                proporcionado la capacidad de impulsar sus recursos dentro de
-                las clases de recursos de plugin. Esto le permite combinar
-                recursos simplemente via configuración. Cubriremos el tema
-                <link
-                linkend="zend.application.theory-of-operation.resources">cómo
-                crear recursos</link> más adelante; en esta sección le
-                mostraremos sólo cómo utilizarlos.
-            </para>
-
-            <para>
-                Si su bootstrap debe ser capaz de utilizar recursos de plugins,
-                necesitará implementar una interfaz adicional,
-                <classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname>.
-                Esta interfaz define una API para localizar, registrar,
-                y cargar recursos de plugins:
-            </para>
-
-        <programlisting role="php"><![CDATA[
-interface Zend_Application_Bootstrap_ResourceBootstrapper
-{
-    public function registerPluginResource($resource, $options = null);
-    public function unregisterPluginResource($resource);
-    public function hasPluginResource($resource);
-    public function getPluginResource($resource);
-    public function getPluginResources();
-    public function getPluginResourceNames();
-    public function setPluginLoader(Zend_Loader_PluginLoader_Interface $loader);
-    public function getPluginLoader();
-}
-]]></programlisting>
-
-            <para>
-                Básicamente los recursos de plugins ofrecen la posibilidad de
-                crear recursos incializadores que puede ser re-utilizados entre
-                aplicaciones. Esto le permite mantener su actual bootstrap
-                relativamente limpio, e introducir nuevos recursos
-                sin necesidad de tocar su propio arranque (bootstrap).
-            </para>
-
-            <para>
-                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname> (y
-                <classname>Zend_Application_Bootstrap_Bootstrap</classname> por extensión)
-                implementan esta interfaz, que le permite utilizar recursos de
-                plugins.
-            </para>
-
-            <para>
-                Para utilizar recursos de plugins, debe especificarlos en las
-                opciones que pasó al objeto aplicación y/o bootstrap.
-                Estas opciones pueden provenir de un archivo de configuración,
-                o ser pasadas manualmente.
-                Las opciones deberán ser pares de clave/opción, representando
-                con la clave el nombre del recurso. El nombre de recurso será
-                el segmento siguiente al prefijo de clase.
-                Por ejemplo, los recursos que vienen con Zend Framework
-                tienen el prefijo de clase "Zend_Application_Resource_";
-                cualquier cosa que le siga después debe ser el nombre del recurso.
-                Como por ejemplo,
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$application = new Zend_Application(APPLICATION_ENV, array(
-    'resources' => array(
-        'FrontController' => array(
-            'controllerDirectory' => APPLICATION_PATH . '/controllers',
-        ),
-    ),
-));
-]]></programlisting>
-
-            <para>
-                Esto indica que el recurso "Front Controller", debería ser
-                utilizado, con las opciones especificadas.
-            </para>
-
-            <para>
-                Si usted comienza a escribir su propio recurso de plugin,
-                o utilizar recursos de plugin de terceras partes,
-                necesitará decirle a su bootstrap donde encontrarlos.
-                Internamente, el bootstrap utiliza
-                <classname>Zend_Loader_PluginLoader</classname>, de manera tal
-                que sólo necesitará indicar el prefijo de la clase común como
-                pares de path.
-            </para>
-
-            <para>
-                Supongamos por ejemplo, que usted tiene recursos de plugins
-                personalizados en <code>APPLICATION_PATH/resources/</code> y que
-                ellos comparten el prefijo de clase común <code>My_Resource</code>.
-                Entonces, debería pasar esa información al objeto aplicación
-                de la siguiente manera:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$application = new Zend_Application(APPLICATION_ENV, array(
-    'pluginPaths' => array(
-        'My_Resource' => APPLICATION_PATH . '/resources/',
-    ),
-    'resources' => array(
-        'FrontController' => array(
-            'controllerDirectory' => APPLICATION_PATH . '/controllers',
-        ),
-    ),
-));
-]]></programlisting>
-
-            <para>
-                Ahora usted está habilitado para utilizar los recursos de
-                ese directorio.
-            </para>
-
-            <para>
-                Tal como los métodos de recursos, utilice el método bootstrap()
-                para ejecutar recursos de plugins. También tal como con los
-                métodos de recursos, puede especificar bien un único recurso de
-                plugin, múltiples plugins (vía un array), o todos los plugins.
-                Además, los puede combinar para ejecutar métodos de recursos.
-            </para>
-
-            <programlisting role="php"><![CDATA[
-// Ejecute uno:
-$bootstrap->bootstrap('FrontController');
-
-// Ejecute varios:
-$bootstrap->bootstrap(array('FrontController', 'Foo'));
-
-// Ejecute todos los métodos de recursos y plugins:
-$bootstrap->bootstrap();
-]]></programlisting>
-        </sect3>
-
-        <sect3 id="zend.application.theory-of-operation.bootstrap.registry">
-            <title>Registro de Recursos</title>
-
-            <para>
-                Muchos, si no todos, sus métodos de recursos o plugins
-                inicializarán objetos y, en muchos casos, estos objetos serán
-                necesarios en otros lugares de su aplicación.
-                ¿Cómo se puede acceder a ellos?
-            </para>
-
-            <para>
-                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>
-                ofrece un registro local para estos objetos. Para almacenar sus
-                objetos en ellos, simplemente debe devolverlos desde sus recursos.
-            </para>
-
-            <para>
-                Para máxima flexibilidad, este registro es mencionado
-                internamente como un "contenedor"; el único requisito es que
-                sea un objeto. Los recursos son luego registrados como
-                propiedades nombrados después del nombre del recurso.
-                Por defecto, una instancia de
-                <classname>Zend_Registry</classname> es utilizada, pero
-                también puede especificar cualquier otro objeto que desee.
-                Los métodos <code>setContainer()</code> y <code>getContainer()</code>
-                pueden ser utilizados para manipular el contenedor en si mismo.
-                <code>getResource($resource)</code> puede ser utilizado para
-                recuperar un recurso determinado del contenedor, y
-                <code>hasResource($resource)</code> para verificar si el
-                recurso ha sido efectivamente registrado.
-            </para>
-
-            <para>
-                Como ejemplo, considere una visión básica del recurso:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-{
-    protected function _initView()
-    {
-        $view = new Zend_View();
-        // más inicialización...
-
-        return $view;
-    }
-}
-]]></programlisting>
-
-            <para>
-                A continuación, puede comprobarlos y/o traerlos así:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-// Usando el par has/getResource():
-if ($bootstrap->hasResource('view')) {
-    $view = $bootstrap->getResource('view');
-}
-
-// Via el contenedor:
-$container = $bootstrap->getContainer();
-if (isset($container->view)) {
-    $view = $container->view;
-}
-]]></programlisting>
-
-            <para>
-                Tenga en cuenta que el registro/contenedor no es global.
-                Esto significa que usted necesita acceso al bootstrap a fin de
-                recuperar recursos. <classname>Zend_Application_Bootstrap_Bootstrap</classname>
-                proporciona cierta comodidad para ello: durante las ejecución de
-                <code>run()</code> se registra a sí mismo como el "Front
-                Controller" en el parámetro del "bootstrap", que permite
-                buscarlo desde el router, despachador, plugins, y los
-                contoladores de acción.
-            </para>
-
-            <para>
-                Como ejemplo, si quiere tener acceso a los recursos de la
-                vista desde dentro de su controlador de acción, podría
-                hacer lo siguiente:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-class FooController extends Zend_Controller_Action
-{
-    public function init()
-    {
-        $bootstrap = $this->getInvokeArg('bootstrap');
-        $view = $bootstrap->getResource('view');
-        // ...
-    }
-}
-]]></programlisting>
-        </sect3>
-
-        <sect3 id="zend.application.theory-of-operation.bootstrap.dependency-tracking">
-            <title>Localización de las Dependencias</title>
-
-            <para>
-                Además de ejecutar los métodos de recursos métodos y plugins,
-                es necesario garantizar que estos son ejecutados una vez y solo 
-                una vez; esto es lo que se pretende con el bootstrap de una
-                aplicación, y ejecutarlo múltiples veces puede conducir a
-                una sobrecarga de recursos.
-            </para>
-
-            <para>
-                Al mismo tiempo, algunos recursos puede depender de otros
-                que están en ejecución. Para resolver estas dos cuestiones,
-                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>
-                proporciona un mecanismo simple pero eficaz para la localización
-                de dependencias.
-            </para>
-
-            <para>
-                Como se señaló anteriormente, todos los recursos --
-                ya sean métodos o plugins -- son arrancados llamando a
-                <code>bootstrap($resource)</code>, dende <code>$resource</code>
-                es el nombre de un recurso, un array de recursos,
-                o si se dejó vacío, indica que deberían ejecutarse todos los recursos.
-            </para>
-
-            <para>
-                Si un recurso depende de otro recurso, debe llamar a
-                <code>bootstrap()</code> dentro de su código para garantizar
-                que ese recurso ha sido ejecutado.
-                Las llamadas subsiguientes a él, serán ignoradas.
-            </para>
-
-            <para>
-                En un método de recursos, esa llamada sería parecida a lo siguiente:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-{
-    protected function _initRequest()
-    {
-        // Asegurar que el front controller es inicializado
-        $this->bootstrap('FrontController');
-
-        // Recuperar el front controller desde el registro de bootstrap
-        $front = $this->getResource('FrontController');
-
-        $request = new Zend_Controller_Request_Http();
-        $request->setBaseUrl('/foo');
-        $front->setRequest($request);
-
-        // Garantizar que la solicitud es almacenada en el registro de bootstrap
-
-        return $request;
-    }
-}
-]]></programlisting>
-        </sect3>
-    </sect2>
-
-    <sect2 id="zend.application.theory-of-operation.resources">
-        <title>Plugins de Recursos</title>
-
-        <para>
-            <link linkend="zend.application.theory-of-operation.bootstrap.resource-plugins">Como se señaló anteriormente</link>,
-            una buena forma de crear recursos de bootstrap re-utilizables y a
-            traspasar mucha de su codificación a clases discretas es utilizar
-            plugins de recursos. Si bien Zend Framework se entrega con una
-            serie de plugins de recursos, la intención es que los
-            desarrolladores deberían escribir los suyos para encapsular
-            sus propias necesidades de inicialización.
-        </para>
-
-        <para>
-            Los recursos solo necesitan implemetarse
-            <classname>Zend_Application_Resource_Resource</classname>, o
-            más simple aún, extenderse
-            <classname>Zend_Application_Resource_ResourceAbstract</classname>.
-            La interfaz básica es simplemente esto:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-interface Zend_Application_Resource_Resource
-{
-    public function __construct($options = null);
-    public function setBootstrap(
-        Zend_Application_Bootstrap_Bootstrapper $bootstrap
-    );
-    public function getBootstrap();
-    public function setOptions(array $options);
-    public function getOptions();
-    public function init();
-}
-]]></programlisting>
-
-        <para>
-            La interfaz define simplemente que un recurso debe aceptar opciones
-            para el constructor, tiene mecanismos de establecer y recuperar
-            opciones, mecanismos de establecer y recuperar el objeto bootstrap,
-            y un método de inicialización.
-        </para>
-
-        <para>
-            Como ejemplo, supongamos que tiene una vista común de inicialización
-            que utiliza en sus aplicaciones. Usted tiene un doctype común, CSS
-            y JavaScript, y quiere se capaz de pasar desde un documento base el
-            título via configuración. Un recurso tal podría ser como este:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-class My_Resource_View extends Zend_Application_Resource_ResourceAbstract
-{
-    protected $_view;
-
-    public function init()
-    {
-        // Regresa la vista de manera que bootstrap la almacenará en el registro
-        return $this->getView();
-    }
-
-    public function getView()
-    {
-        if (null === $this->_view) {
-            $options = $this->getOptions();
-            $title   = '';
-            if (array_key_exists('title', $options)) {
-                $title = $options['title'];
-                unset($options['title]);
-            }
-
-            $view = new Zend_View($options);
-            $view->doctype('XHTML1_STRICT');
-            $view->headTitle($title);
-            $view->headLink()->appendStylesheet('/css/site.css');
-            $view->headScript()->appendfile('/js/analytics.js');
-
-            $viewRenderer =
-                Zend_Controller_Action_HelperBroker::getStaticHelper(
-                    'ViewRenderer',
-                );
-            $viewRenderer->setView($view);
-
-            $this->_view = $view;
-        }
-        return $this->_view;
-    }
-}
-]]></programlisting>
-
-        <para>
-            Minetrtas usted haya registrado el path del prefijo para este
-            recurso de plugin, puede usarlo en su aplicación. Mejor aún,
-            ya que usa el cargador de plugin, usted está pasando por encima del
-            recurso de plugin de la "View" que viene con Zend Framework, 
-            se está asegurando así que usa el suyo en lugar del original.
-        </para>
-    </sect2>
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.application.theory-of-operation">
+    <title>Teoría de Operación</title>
+
+    <para>
+        Obtener una aplicación MVC configurada y lista para funcionar ha
+        requerido una cantidad de código creciente al disponer de una mayor
+        cantidad de características: estableciendo la base de datos,
+        configurar su vista y los ayudantes de vistas, configurar su diseños,
+        colocando plugins, registrando ayudantes de acción, y mucho más.
+    </para>
+
+    <para>
+        Además, a menudo deseará reutilizar el mismo código para arrancar sus
+        pruebas, un cronjob, o un servicio script.
+        Si bien es posible incluir simplemente su script bootstrap,
+        a menudo hay initializaciones que son específicas del medio ambiente,
+        puede que usted no necesite el MVC para un cronjob, o simplemente
+        la capa de DB para un servicio script.
+    </para>
+
+    <para>
+        <classname>Zend_Application</classname> pretende hacer esto más fácil
+        y promover la reutilización mediante el encapsulamiento del
+        bootstraping en paradigmas de OOP.
+    </para>
+
+    <para>
+        Zend_Application está dividida en tres áreas:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                <classname>Zend_Application</classname>: carga el medio
+                ambiente de PHP, incluyendo include_paths y autocarga,
+                e instancia la clase requerida de bootstrap.
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                <classname>Zend_Application_Bootstrap</classname>: suministra
+                interfaces para las clases bootstrap.
+                <classname>Zend_Application_Bootstrap_Bootstrap</classname>
+                ofrece funcionalidad común para la mayoría de las necesidades
+                de bootstrap, incluyendo algoritmos de comprobación de
+                dependencias y la capacidad de cargar recursos de bootstrap
+                por demanda.
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                <classname>Zend_Application_Resource</classname> provee una
+                interfaz para recursos standard de bootstrap que pueden ser
+                cargados por demanda mediante una instancia bootstrap,
+                así como implementaciones de varios recursos por defecto.
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        Los desarrolladores crean una clase de arranque(bootstrap) para sus
+        aplicaciones, extendiendo
+        <classname>Zend_Application_Bootstrap_Bootstrap</classname> o
+        implementando (mínimamente)
+        <classname>Zend_Application_Bootstrap_Bootstrapper</classname>. El punto de entrada
+        (e.g., public/index.php) cargará <classname>Zend_Application</classname>,
+        y la instanciará pasando:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                El medio ambiente actual
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Opciones para bootstrapping
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        Las opciones de bootstrap incluyen el path hacia el archivo que
+        contiene la clase bootstrap y opcionalmente:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                Cualquier include_paths extras a establecer
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Cualquier otro namespace de autocarga adicional a registrar
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Cualquier setting de php.ini a inicializar
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                El nombre de clase para la clase bootstrap (si no es "Bootstrap")
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Pares de recursos prefijo/path a usar
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Cualquier recurso a usar (por nombre de clase o nombre corto)
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Path adicional al archivo de configuración a cargar
+            </para>
+        </listitem>
+        <listitem>
+            <para>
+                Opciones adicionales de configuración
+            </para>
+        </listitem>
+    </itemizedlist>
+
+    <para>
+        Las opciones puden ser una array, un objeto
+        <classname>Zend_Config</classname>, o el path a un archivo de
+        configuración.
+    </para>
+
+    <sect2 id="zend.application.theory-of-operation.bootstrap">
+        <title>Bootstrapping</title>
+
+        <para>
+            La segunda área de responsabilidad de
+            <classname>Zend_Application</classname> es ejecutar la aplicación
+            bootstrap. Los bootstraps necesitan mínimamente implementar
+            <classname>Zend_Application_Bootstrap_Bootstrapper</classname>,
+            la que define la siguiente API:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+interface Zend_Application_Bootstrap_Bootstrapper
+{
+    public function __construct($application);
+    public function setOptions(array $options);
+    public function getApplication();
+    public function getEnvironment();
+    public function getClassResources();
+    public function getClassResourceNames();
+    public function bootstrap($resource = null);
+    public function run();
+}
+]]></programlisting>
+
+        <para>
+            Esta API permite aceptar al bootstrap el medio ambiente y a la
+            configuración desde el objeto aplicación, informa la
+            responsabilidad de los recursos para los recursos bootstraping,
+            luego hace el bootstrap y ejecuta la aplicación.
+        </para>
+
+        <para>
+            Puede implementar esta interfaz usted mismo, extendiendo
+            <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>,
+            o usar
+            <classname>Zend_Application_Bootstrap_Bootstrap</classname>.
+        </para>
+
+        <para>
+            Además de esta funcionalidad, hay muchas otras áreas de
+            incumbencia con las cuales debe familiarizarse.
+        </para>
+
+        <sect3 id="zend.application.theory-of-operation.bootstrap.resource-methods">
+            <title>Métodos Recursos</title>
+
+            <para>
+                La implementación de
+                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>
+                proporciona una simple convención para definir métodos de
+                recursos de clase. Cualquier método protegido cuyo nombre
+                comience con un prefijo <code>_init</code> será considerado
+                un método de recurso.
+            </para>
+
+            <para>
+                Para arrancar un único método de recurso, utilizar el método
+                <code>bootstrap()</code>, y pasarle el nombre del recurso.
+                El nombre será el nombre de método menos el prefijo
+                <code>_init</code>.
+            </para>
+
+            <para>
+                Para arrancar varios métodos de recursos, pasar un array de
+                nombres. Para bootstrap de todos los métodos de recursos,
+                no pasar nada.
+            </para>
+
+            <para>
+                Tome las siguientes clases bootstrap:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+    protected function _initFoo()
+    {
+        // ...
+    }
+
+    protected function _initBar()
+    {
+        // ...
+    }
+
+    protected function _initBaz()
+    {
+        // ...
+    }
+}
+]]></programlisting>
+
+            <para>
+                Para arrancar solo el método <code>_initFoo()</code>, haga lo
+                siguiente:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$bootstrap->bootstrap('foo');
+]]></programlisting>
+
+            <para>
+                Para arrancar los métodos <code>_initFoo()</code> y
+                <code>_initBar()</code> , haga lo siguiente:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$bootstrap->bootstrap(array('foo', 'bar));
+]]></programlisting>
+
+            <para>
+                Para arrancar todos los métodos de recursos, llame a
+                <code>code>bootstrap()</code> sin argumentos:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$bootstrap->bootstrap();
+]]></programlisting>
+        </sect3>
+
+        <sect3 id="zend.application.theory-of-operation.bootstrap.resource-plugins">
+            <title>Bootstraps que usan plugins de recursos</title>
+
+            <para>
+                Para hacer más re-utilizables sus bootstraps, hemos
+                proporcionado la capacidad de impulsar sus recursos dentro de
+                las clases de recursos de plugin. Esto le permite combinar
+                recursos simplemente via configuración. Cubriremos el tema
+                <link
+                linkend="zend.application.theory-of-operation.resources">cómo
+                crear recursos</link> más adelante; en esta sección le
+                mostraremos sólo cómo utilizarlos.
+            </para>
+
+            <para>
+                Si su bootstrap debe ser capaz de utilizar recursos de plugins,
+                necesitará implementar una interfaz adicional,
+                <classname>Zend_Application_Bootstrap_ResourceBootstrapper</classname>.
+                Esta interfaz define una API para localizar, registrar,
+                y cargar recursos de plugins:
+            </para>
+
+        <programlisting role="php"><![CDATA[
+interface Zend_Application_Bootstrap_ResourceBootstrapper
+{
+    public function registerPluginResource($resource, $options = null);
+    public function unregisterPluginResource($resource);
+    public function hasPluginResource($resource);
+    public function getPluginResource($resource);
+    public function getPluginResources();
+    public function getPluginResourceNames();
+    public function setPluginLoader(Zend_Loader_PluginLoader_Interface $loader);
+    public function getPluginLoader();
+}
+]]></programlisting>
+
+            <para>
+                Básicamente los recursos de plugins ofrecen la posibilidad de
+                crear recursos incializadores que puede ser re-utilizados entre
+                aplicaciones. Esto le permite mantener su actual bootstrap
+                relativamente limpio, e introducir nuevos recursos
+                sin necesidad de tocar su propio arranque (bootstrap).
+            </para>
+
+            <para>
+                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname> (y
+                <classname>Zend_Application_Bootstrap_Bootstrap</classname> por extensión)
+                implementan esta interfaz, que le permite utilizar recursos de
+                plugins.
+            </para>
+
+            <para>
+                Para utilizar recursos de plugins, debe especificarlos en las
+                opciones que pasó al objeto aplicación y/o bootstrap.
+                Estas opciones pueden provenir de un archivo de configuración,
+                o ser pasadas manualmente.
+                Las opciones deberán ser pares de clave/opción, representando
+                con la clave el nombre del recurso. El nombre de recurso será
+                el segmento siguiente al prefijo de clase.
+                Por ejemplo, los recursos que vienen con Zend Framework
+                tienen el prefijo de clase "Zend_Application_Resource_";
+                cualquier cosa que le siga después debe ser el nombre del recurso.
+                Como por ejemplo,
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$application = new Zend_Application(APPLICATION_ENV, array(
+    'resources' => array(
+        'FrontController' => array(
+            'controllerDirectory' => APPLICATION_PATH . '/controllers',
+        ),
+    ),
+));
+]]></programlisting>
+
+            <para>
+                Esto indica que el recurso "Front Controller", debería ser
+                utilizado, con las opciones especificadas.
+            </para>
+
+            <para>
+                Si usted comienza a escribir su propio recurso de plugin,
+                o utilizar recursos de plugin de terceras partes,
+                necesitará decirle a su bootstrap donde encontrarlos.
+                Internamente, el bootstrap utiliza
+                <classname>Zend_Loader_PluginLoader</classname>, de manera tal
+                que sólo necesitará indicar el prefijo de la clase común como
+                pares de path.
+            </para>
+
+            <para>
+                Supongamos por ejemplo, que usted tiene recursos de plugins
+                personalizados en <code>APPLICATION_PATH/resources/</code> y que
+                ellos comparten el prefijo de clase común <code>My_Resource</code>.
+                Entonces, debería pasar esa información al objeto aplicación
+                de la siguiente manera:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$application = new Zend_Application(APPLICATION_ENV, array(
+    'pluginPaths' => array(
+        'My_Resource' => APPLICATION_PATH . '/resources/',
+    ),
+    'resources' => array(
+        'FrontController' => array(
+            'controllerDirectory' => APPLICATION_PATH . '/controllers',
+        ),
+    ),
+));
+]]></programlisting>
+
+            <para>
+                Ahora usted está habilitado para utilizar los recursos de
+                ese directorio.
+            </para>
+
+            <para>
+                Tal como los métodos de recursos, utilice el método bootstrap()
+                para ejecutar recursos de plugins. También tal como con los
+                métodos de recursos, puede especificar bien un único recurso de
+                plugin, múltiples plugins (vía un array), o todos los plugins.
+                Además, los puede combinar para ejecutar métodos de recursos.
+            </para>
+
+            <programlisting role="php"><![CDATA[
+// Ejecute uno:
+$bootstrap->bootstrap('FrontController');
+
+// Ejecute varios:
+$bootstrap->bootstrap(array('FrontController', 'Foo'));
+
+// Ejecute todos los métodos de recursos y plugins:
+$bootstrap->bootstrap();
+]]></programlisting>
+        </sect3>
+
+        <sect3 id="zend.application.theory-of-operation.bootstrap.registry">
+            <title>Registro de Recursos</title>
+
+            <para>
+                Muchos, si no todos, sus métodos de recursos o plugins
+                inicializarán objetos y, en muchos casos, estos objetos serán
+                necesarios en otros lugares de su aplicación.
+                ¿Cómo se puede acceder a ellos?
+            </para>
+
+            <para>
+                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>
+                ofrece un registro local para estos objetos. Para almacenar sus
+                objetos en ellos, simplemente debe devolverlos desde sus recursos.
+            </para>
+
+            <para>
+                Para máxima flexibilidad, este registro es mencionado
+                internamente como un "contenedor"; el único requisito es que
+                sea un objeto. Los recursos son luego registrados como
+                propiedades nombrados después del nombre del recurso.
+                Por defecto, una instancia de
+                <classname>Zend_Registry</classname> es utilizada, pero
+                también puede especificar cualquier otro objeto que desee.
+                Los métodos <code>setContainer()</code> y <code>getContainer()</code>
+                pueden ser utilizados para manipular el contenedor en si mismo.
+                <code>getResource($resource)</code> puede ser utilizado para
+                recuperar un recurso determinado del contenedor, y
+                <code>hasResource($resource)</code> para verificar si el
+                recurso ha sido efectivamente registrado.
+            </para>
+
+            <para>
+                Como ejemplo, considere una visión básica del recurso:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+    protected function _initView()
+    {
+        $view = new Zend_View();
+        // más inicialización...
+
+        return $view;
+    }
+}
+]]></programlisting>
+
+            <para>
+                A continuación, puede comprobarlos y/o traerlos así:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+// Usando el par has/getResource():
+if ($bootstrap->hasResource('view')) {
+    $view = $bootstrap->getResource('view');
+}
+
+// Via el contenedor:
+$container = $bootstrap->getContainer();
+if (isset($container->view)) {
+    $view = $container->view;
+}
+]]></programlisting>
+
+            <para>
+                Tenga en cuenta que el registro/contenedor no es global.
+                Esto significa que usted necesita acceso al bootstrap a fin de
+                recuperar recursos. <classname>Zend_Application_Bootstrap_Bootstrap</classname>
+                proporciona cierta comodidad para ello: durante las ejecución de
+                <code>run()</code> se registra a sí mismo como el "Front
+                Controller" en el parámetro del "bootstrap", que permite
+                buscarlo desde el router, despachador, plugins, y los
+                contoladores de acción.
+            </para>
+
+            <para>
+                Como ejemplo, si quiere tener acceso a los recursos de la
+                vista desde dentro de su controlador de acción, podría
+                hacer lo siguiente:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+class FooController extends Zend_Controller_Action
+{
+    public function init()
+    {
+        $bootstrap = $this->getInvokeArg('bootstrap');
+        $view = $bootstrap->getResource('view');
+        // ...
+    }
+}
+]]></programlisting>
+        </sect3>
+
+        <sect3 id="zend.application.theory-of-operation.bootstrap.dependency-tracking">
+            <title>Localización de las Dependencias</title>
+
+            <para>
+                Además de ejecutar los métodos de recursos métodos y plugins,
+                es necesario garantizar que estos son ejecutados una vez y solo 
+                una vez; esto es lo que se pretende con el bootstrap de una
+                aplicación, y ejecutarlo múltiples veces puede conducir a
+                una sobrecarga de recursos.
+            </para>
+
+            <para>
+                Al mismo tiempo, algunos recursos puede depender de otros
+                que están en ejecución. Para resolver estas dos cuestiones,
+                <classname>Zend_Application_Bootstrap_BootstrapAbstract</classname>
+                proporciona un mecanismo simple pero eficaz para la localización
+                de dependencias.
+            </para>
+
+            <para>
+                Como se señaló anteriormente, todos los recursos --
+                ya sean métodos o plugins -- son arrancados llamando a
+                <code>bootstrap($resource)</code>, dende <code>$resource</code>
+                es el nombre de un recurso, un array de recursos,
+                o si se dejó vacío, indica que deberían ejecutarse todos los recursos.
+            </para>
+
+            <para>
+                Si un recurso depende de otro recurso, debe llamar a
+                <code>bootstrap()</code> dentro de su código para garantizar
+                que ese recurso ha sido ejecutado.
+                Las llamadas subsiguientes a él, serán ignoradas.
+            </para>
+
+            <para>
+                En un método de recursos, esa llamada sería parecida a lo siguiente:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
+{
+    protected function _initRequest()
+    {
+        // Asegurar que el front controller es inicializado
+        $this->bootstrap('FrontController');
+
+        // Recuperar el front controller desde el registro de bootstrap
+        $front = $this->getResource('FrontController');
+
+        $request = new Zend_Controller_Request_Http();
+        $request->setBaseUrl('/foo');
+        $front->setRequest($request);
+
+        // Garantizar que la solicitud es almacenada en el registro de bootstrap
+
+        return $request;
+    }
+}
+]]></programlisting>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.application.theory-of-operation.resources">
+        <title>Plugins de Recursos</title>
+
+        <para>
+            <link linkend="zend.application.theory-of-operation.bootstrap.resource-plugins">Como se señaló anteriormente</link>,
+            una buena forma de crear recursos de bootstrap re-utilizables y a
+            traspasar mucha de su codificación a clases discretas es utilizar
+            plugins de recursos. Si bien Zend Framework se entrega con una
+            serie de plugins de recursos, la intención es que los
+            desarrolladores deberían escribir los suyos para encapsular
+            sus propias necesidades de inicialización.
+        </para>
+
+        <para>
+            Los recursos solo necesitan implemetarse
+            <classname>Zend_Application_Resource_Resource</classname>, o
+            más simple aún, extenderse
+            <classname>Zend_Application_Resource_ResourceAbstract</classname>.
+            La interfaz básica es simplemente esto:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+interface Zend_Application_Resource_Resource
+{
+    public function __construct($options = null);
+    public function setBootstrap(
+        Zend_Application_Bootstrap_Bootstrapper $bootstrap
+    );
+    public function getBootstrap();
+    public function setOptions(array $options);
+    public function getOptions();
+    public function init();
+}
+]]></programlisting>
+
+        <para>
+            La interfaz define simplemente que un recurso debe aceptar opciones
+            para el constructor, tiene mecanismos de establecer y recuperar
+            opciones, mecanismos de establecer y recuperar el objeto bootstrap,
+            y un método de inicialización.
+        </para>
+
+        <para>
+            Como ejemplo, supongamos que tiene una vista común de inicialización
+            que utiliza en sus aplicaciones. Usted tiene un doctype común, CSS
+            y JavaScript, y quiere se capaz de pasar desde un documento base el
+            título via configuración. Un recurso tal podría ser como este:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+class My_Resource_View extends Zend_Application_Resource_ResourceAbstract
+{
+    protected $_view;
+
+    public function init()
+    {
+        // Regresa la vista de manera que bootstrap la almacenará en el registro
+        return $this->getView();
+    }
+
+    public function getView()
+    {
+        if (null === $this->_view) {
+            $options = $this->getOptions();
+            $title   = '';
+            if (array_key_exists('title', $options)) {
+                $title = $options['title'];
+                unset($options['title]);
+            }
+
+            $view = new Zend_View($options);
+            $view->doctype('XHTML1_STRICT');
+            $view->headTitle($title);
+            $view->headLink()->appendStylesheet('/css/site.css');
+            $view->headScript()->appendfile('/js/analytics.js');
+
+            $viewRenderer =
+                Zend_Controller_Action_HelperBroker::getStaticHelper(
+                    'ViewRenderer',
+                );
+            $viewRenderer->setView($view);
+
+            $this->_view = $view;
+        }
+        return $this->_view;
+    }
+}
+]]></programlisting>
+
+        <para>
+            Minetrtas usted haya registrado el path del prefijo para este
+            recurso de plugin, puede usarlo en su aplicación. Mejor aún,
+            ya que usa el cargador de plugin, usted está pasando por encima del
+            recurso de plugin de la "View" que viene con Zend Framework, 
+            se está asegurando así que usa el suyo en lugar del original.
+        </para>
+    </sect2>
+</sect1>

+ 2 - 2
documentation/manual/es/module_specs/Zend_Auth.xml

@@ -107,7 +107,7 @@ class MyAuthAdapter implements Zend_Auth_Adapter_Interface
                         de autenticación. Esto permite a los desarrolladores, por ejemplo, mantener estadísticas
                         detalladas de los resultados de autenticación. Otro uso de esta característica es: proporcionar
                         al usuario mensajes específicos detallados por razones de usabilidad, aunque los desarrolladores
-                        son	exhortados a considerar el riesgo de proporcionar tales detalles a los usuarios, en vez de
+                        son    exhortados a considerar el riesgo de proporcionar tales detalles a los usuarios, en vez de
                         un mensaje general de fallo en la autenticación. Para más información, vea las siguientes notas:
                     </para>
                 </listitem>
@@ -252,7 +252,7 @@ $result = $auth->authenticate($authAdapter);
             <title>Implementando Almacenamiento Personalizado</title>
 
             <para>
-                En ocaciones los desarrolladores podrían necesitar usar un diferente comportamiento de persistencia	de identidad
+                En ocaciones los desarrolladores podrían necesitar usar un diferente comportamiento de persistencia    de identidad
                 que el provisto por <code>Zend_Auth_Storage_Session</code>. Para esos casos los desarrolladores podrían simplemente
                 implementar <code>Zend_Auth_Storage_Interface</code> y suplir una instancia de la clase a
                 <code>Zend_Auth::setStorage()</code>.

+ 392 - 392
documentation/manual/es/module_specs/Zend_CodeGenerator-Examples.xml

@@ -1,392 +1,392 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.codegenerator.examples">
-    <title>Ejemplos de Zend_CodeGenerator</title>
-
-    <example id="zend.codegenerator.examples.class">
-        <title>Generando clases PHP</title>
-
-        <para>
-            El siguiente ejemplo genera una clase vacía con una clase de nivel 
-            DocBlock.
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$foo      = new Zend_CodeGenerator_Php_Class();
-$docblock = new Zend_CodeGenerator_Php_Docblock(array(
-    'shortDescription' => 'Sample generated class',
-    'longDescription'  => 'This is a class generated with Zend_CodeGenerator.',
-    'tags'             => array(
-        array(
-            'name'        => 'version',
-            'description' => '$Rev:$',
-        ),
-        array(
-            'name'        => 'license',
-            'description' => 'New BSD',
-        ),
-    ),
-));
-$foo->setName('Foo')
-    ->setDocblock($docblock);
-echo $foo->generate();
-]]></programlisting>
-
-        <para>
-            El código anterior resultará en lo siguiente:
-        </para>
-
-            <programlisting role="php"><![CDATA[
-/**
- * Sample generated class
- *
- * This is a class generated with Zend_CodeGenerator.
- *
- * @version $Rev:$
- * @license New BSD
- *
- */
-class Foo
-{
-
-
-}
-]]></programlisting>
-    </example>
-
-    <example id="zend.codegenerator.examples.class-properties">
-        <title>Generando clases PHP con propiedades de clase</title>
-
-        <para>
-            Basándonos en el ejemplo anterior, ahora agreguemos propiedades a 
-            nuestra clase generada.
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$foo      = new Zend_CodeGenerator_Php_Class();
-$docblock = new Zend_CodeGenerator_Php_Docblock(array(
-    'shortDescription' => 'Sample generated class',
-    'longDescription'  => 'This is a class generated with Zend_CodeGenerator.',
-    'tags'             => array(
-        array(
-            'name'        => 'version',
-            'description' => '$Rev:$',
-        ),
-        array(
-            'name'        => 'license',
-            'description' => 'New BSD',
-        ),
-    ),
-));
-$foo->setName('Foo')
-    ->setDocblock($docblock)
-    ->setProperties(array(
-        array(
-            'name'         => '_bar',
-            'visibility'   => 'protected',
-            'defaultValue' => 'baz',
-        ),
-        array(
-            'name'         => 'baz',
-            'visibility'   => 'public',
-            'defaultValue' => 'bat',
-        ),
-        array(
-            'name'         => 'bat',
-            'const'        => true,
-            'defaultValue' => 'foobarbazbat',
-        ),
-    ));
-echo $foo->generate();
-]]></programlisting>
-
-        <para>
-            Lo anterior resulta en la siguiente definición de clase:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-/**
- * Sample generated class
- *
- * This is a class generated with Zend_CodeGenerator.
- *
- * @version $Rev:$
- * @license New BSD
- *
- */
-class Foo
-{
-
-    protected $_bar = 'baz';
-
-    public $baz = 'bat';
-
-    const bat = 'foobarbazbat';
-
-
-}
-]]></programlisting>
-    </example>
-
-    <example id="zend.codegenerator.examples.class-methods">
-        <title>Generando clases PHP con métodos de clase</title>
-
-        <para>
-            <classname>Zend_CodeGenerator_Php_Class</classname> le permite 
-            adjuntar métodos con contenido opcional a sus clases. 
-            Los métodos pueden adjuntarse tanto como arrys o como instancias 
-            concretas de <classname>Zend_CodeGenerator_Php_Method</classname>.
-        </para>
-
-            <programlisting role="php"><![CDATA[
-$foo      = new Zend_CodeGenerator_Php_Class();
-$docblock = new Zend_CodeGenerator_Php_Docblock(array(
-    'shortDescription' => 'Sample generated class',
-    'longDescription'  => 'This is a class generated with Zend_CodeGenerator.',
-    'tags'             => array(
-        array(
-            'name'        => 'version',
-            'description' => '$Rev:$',
-        ),
-        array(
-            'name'        => 'license',
-            'description' => 'New BSD',
-        ),
-    ),
-));
-$foo->setName('Foo')
-    ->setDocblock($docblock)
-    ->setProperties(array(
-        array(
-            'name'         => '_bar',
-            'visibility'   => 'protected',
-            'defaultValue' => 'baz',
-        ),
-        array(
-            'name'         => 'baz',
-            'visibility'   => 'public',
-            'defaultValue' => 'bat',
-        ),
-        array(
-            'name'         => 'bat',
-            'const'        => true,
-            'defaultValue' => 'foobarbazbat',
-        ),
-    ))
-    ->setMethods(array(
-        // Método pasado como array
-        array(
-            'name'       => 'setBar',
-            'parameters' => array(
-                array('name' => 'bar'),
-            ),
-            'body'       => '$this->_bar = $bar;' . "\n" . 'return $this;',
-            'docblock'   => new Zend_CodeGenerator_Php_Docblock(array(
-                'shortDescription' => 'Set the bar property',
-                'tags'             => array(
-                    new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
-                        'paramName' => 'bar',
-                        'datatype'  => 'string'
-                    )),
-                    new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
-                        'datatype'  => 'string',
-                    )),
-                ),
-            )),
-        ),
-        // Método pasado como instancia concreta
-        new Zend_CodeGenerator_Php_Method(array(
-            'name' => 'getBar',
-            'body'       => 'return $this->_bar;',
-            'docblock'   => new Zend_CodeGenerator_Php_Docblock(array(
-                'shortDescription' => 'Retrieve the bar property',
-                'tags'             => array(
-                    new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
-                        'datatype'  => 'string|null',
-                    )),
-                ),
-            )),
-        )),
-    ));
-
-echo $foo->generate();
-]]></programlisting>
-
-        <para>
-            Lo anterior genera la siguiente salida:
-        </para>
-
-            <programlisting role="php"><![CDATA[
-/**
- * Sample generated class
- *
- * This is a class generated with Zend_CodeGenerator.
- *
- * @version $Rev:$
- * @license New BSD
- */
-class Foo
-{
-
-    protected $_bar = 'baz';
-
-    public $baz = 'bat';
-
-    const bat = 'foobarbazbat';
-
-    /**
-     * Set the bar property
-     *
-     * @param string bar
-     * @return string
-     */
-    public function setBar($bar)
-    {
-        $this->_bar = $bar;
-        return $this;
-    }
-
-
-    /**
-     * Retrieve the bar property
-     *
-     * @return string|null
-     */
-    public function getBar()
-    {
-        return $this->_bar;
-    }
-
-
-
-}
-]]></programlisting>
-    </example>
-
-    <example id="zend.codegenerator.examples.file">
-        <title>Generando archivos PHP</title>
-
-        <para>
-            <classname>Zend_CodeGenerator_Php_File</classname> puede ser 
-            utilizada para generar el contenido de un archivo PHP. 
-            Usted puede incluir clases, así como el contenido arbitrario del 
-            cuerpo. Cuando acople clases, debe adjuntar instancias concretas de
-            <classname>Zend_CodeGenerator_Php_Class</classname> o un array 
-            definiendo la clase.
-        </para>
-
-        <para>
-            En el ejemplo siguiente, asumiremos que ha definido 
-            <code>$foo</code> como una de las definiciones de clase del
-            ejemplo anterior.
-        </para>
-
-            <programlisting role="php"><![CDATA[
-$file = new Zend_CodeGenerator_Php_File(array(
-    'classes'  => array($foo);
-    'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
-        'shortDescription' => 'Foo class file',
-        'tags'             => array(
-            array(
-                'name'        => 'license',
-                'description' => 'New BSD',
-            ),
-        ),
-    )),
-    'body'     => 'define(\'APPLICATION_ENV\', \'testing\');',
-));
-]]></programlisting>
-
-        <para>
-            Llamando a <code>generate()</code> generará el código -- pero no lo 
-            grabará en un archivo. Usted mismo deberá capturar y grabar los 
-            contenidos en un archivo. Por ejemplo:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$code = $file->generate();
-file_put_contents('Foo.php', $code);
-]]></programlisting>
-
-        <para>
-            Lo anterior generará el siguiente archivo:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php
-/**
- * Foo class file
- *
- * @license New BSD
- */
-
-
-/**
- * Sample generated class
- *
- * This is a class generated with Zend_CodeGenerator.
- *
- * @version $Rev:$
- * @license New BSD
- */
-class Foo
-{
-
-    protected $_bar = 'baz';
-
-    public $baz = 'bat';
-
-    const bat = 'foobarbazbat';
-
-    /**
-     * Set the bar property
-     *
-     * @param string bar
-     * @return string
-     */
-    public function setBar($bar)
-    {
-        $this->_bar = $bar;
-        return $this;
-    }
-
-
-    /**
-     * Retrieve the bar property
-     *
-     * @return string|null
-     */
-    public function getBar()
-    {
-        return $this->_bar;
-    }
-
-
-
-}
-
-
-define('APPLICATION_ENV', 'testing');
-]]></programlisting>
-    </example>
-
-    <example id="zend.codegenerator.examples.reflection-file">
-        <title>Sembrando la generación de código para un archivo PHP 
-        via reflection</title>
-        <para></para>
-        <!-- @todo -->
-    </example>
-
-    <example id="zend.codegenerator.examples.reflection-class">
-        <title>Sembrando la generación de clases PHP via reflection</title>
-        <para></para>
-        <!-- @todo -->
-    </example>
-
-    <example id="zend.codegenerator.examples.reflection-method">
-        <title>Sembrando la generación de métodos PHP via reflection</title>
-        <para></para>
-        <!-- @todo -->
-    </example>
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.codegenerator.examples">
+    <title>Ejemplos de Zend_CodeGenerator</title>
+
+    <example id="zend.codegenerator.examples.class">
+        <title>Generando clases PHP</title>
+
+        <para>
+            El siguiente ejemplo genera una clase vacía con una clase de nivel 
+            DocBlock.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$foo      = new Zend_CodeGenerator_Php_Class();
+$docblock = new Zend_CodeGenerator_Php_Docblock(array(
+    'shortDescription' => 'Sample generated class',
+    'longDescription'  => 'This is a class generated with Zend_CodeGenerator.',
+    'tags'             => array(
+        array(
+            'name'        => 'version',
+            'description' => '$Rev:$',
+        ),
+        array(
+            'name'        => 'license',
+            'description' => 'New BSD',
+        ),
+    ),
+));
+$foo->setName('Foo')
+    ->setDocblock($docblock);
+echo $foo->generate();
+]]></programlisting>
+
+        <para>
+            El código anterior resultará en lo siguiente:
+        </para>
+
+            <programlisting role="php"><![CDATA[
+/**
+ * Sample generated class
+ *
+ * This is a class generated with Zend_CodeGenerator.
+ *
+ * @version $Rev:$
+ * @license New BSD
+ *
+ */
+class Foo
+{
+
+
+}
+]]></programlisting>
+    </example>
+
+    <example id="zend.codegenerator.examples.class-properties">
+        <title>Generando clases PHP con propiedades de clase</title>
+
+        <para>
+            Basándonos en el ejemplo anterior, ahora agreguemos propiedades a 
+            nuestra clase generada.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$foo      = new Zend_CodeGenerator_Php_Class();
+$docblock = new Zend_CodeGenerator_Php_Docblock(array(
+    'shortDescription' => 'Sample generated class',
+    'longDescription'  => 'This is a class generated with Zend_CodeGenerator.',
+    'tags'             => array(
+        array(
+            'name'        => 'version',
+            'description' => '$Rev:$',
+        ),
+        array(
+            'name'        => 'license',
+            'description' => 'New BSD',
+        ),
+    ),
+));
+$foo->setName('Foo')
+    ->setDocblock($docblock)
+    ->setProperties(array(
+        array(
+            'name'         => '_bar',
+            'visibility'   => 'protected',
+            'defaultValue' => 'baz',
+        ),
+        array(
+            'name'         => 'baz',
+            'visibility'   => 'public',
+            'defaultValue' => 'bat',
+        ),
+        array(
+            'name'         => 'bat',
+            'const'        => true,
+            'defaultValue' => 'foobarbazbat',
+        ),
+    ));
+echo $foo->generate();
+]]></programlisting>
+
+        <para>
+            Lo anterior resulta en la siguiente definición de clase:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+/**
+ * Sample generated class
+ *
+ * This is a class generated with Zend_CodeGenerator.
+ *
+ * @version $Rev:$
+ * @license New BSD
+ *
+ */
+class Foo
+{
+
+    protected $_bar = 'baz';
+
+    public $baz = 'bat';
+
+    const bat = 'foobarbazbat';
+
+
+}
+]]></programlisting>
+    </example>
+
+    <example id="zend.codegenerator.examples.class-methods">
+        <title>Generando clases PHP con métodos de clase</title>
+
+        <para>
+            <classname>Zend_CodeGenerator_Php_Class</classname> le permite 
+            adjuntar métodos con contenido opcional a sus clases. 
+            Los métodos pueden adjuntarse tanto como arrys o como instancias 
+            concretas de <classname>Zend_CodeGenerator_Php_Method</classname>.
+        </para>
+
+            <programlisting role="php"><![CDATA[
+$foo      = new Zend_CodeGenerator_Php_Class();
+$docblock = new Zend_CodeGenerator_Php_Docblock(array(
+    'shortDescription' => 'Sample generated class',
+    'longDescription'  => 'This is a class generated with Zend_CodeGenerator.',
+    'tags'             => array(
+        array(
+            'name'        => 'version',
+            'description' => '$Rev:$',
+        ),
+        array(
+            'name'        => 'license',
+            'description' => 'New BSD',
+        ),
+    ),
+));
+$foo->setName('Foo')
+    ->setDocblock($docblock)
+    ->setProperties(array(
+        array(
+            'name'         => '_bar',
+            'visibility'   => 'protected',
+            'defaultValue' => 'baz',
+        ),
+        array(
+            'name'         => 'baz',
+            'visibility'   => 'public',
+            'defaultValue' => 'bat',
+        ),
+        array(
+            'name'         => 'bat',
+            'const'        => true,
+            'defaultValue' => 'foobarbazbat',
+        ),
+    ))
+    ->setMethods(array(
+        // Método pasado como array
+        array(
+            'name'       => 'setBar',
+            'parameters' => array(
+                array('name' => 'bar'),
+            ),
+            'body'       => '$this->_bar = $bar;' . "\n" . 'return $this;',
+            'docblock'   => new Zend_CodeGenerator_Php_Docblock(array(
+                'shortDescription' => 'Set the bar property',
+                'tags'             => array(
+                    new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
+                        'paramName' => 'bar',
+                        'datatype'  => 'string'
+                    )),
+                    new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
+                        'datatype'  => 'string',
+                    )),
+                ),
+            )),
+        ),
+        // Método pasado como instancia concreta
+        new Zend_CodeGenerator_Php_Method(array(
+            'name' => 'getBar',
+            'body'       => 'return $this->_bar;',
+            'docblock'   => new Zend_CodeGenerator_Php_Docblock(array(
+                'shortDescription' => 'Retrieve the bar property',
+                'tags'             => array(
+                    new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
+                        'datatype'  => 'string|null',
+                    )),
+                ),
+            )),
+        )),
+    ));
+
+echo $foo->generate();
+]]></programlisting>
+
+        <para>
+            Lo anterior genera la siguiente salida:
+        </para>
+
+            <programlisting role="php"><![CDATA[
+/**
+ * Sample generated class
+ *
+ * This is a class generated with Zend_CodeGenerator.
+ *
+ * @version $Rev:$
+ * @license New BSD
+ */
+class Foo
+{
+
+    protected $_bar = 'baz';
+
+    public $baz = 'bat';
+
+    const bat = 'foobarbazbat';
+
+    /**
+     * Set the bar property
+     *
+     * @param string bar
+     * @return string
+     */
+    public function setBar($bar)
+    {
+        $this->_bar = $bar;
+        return $this;
+    }
+
+
+    /**
+     * Retrieve the bar property
+     *
+     * @return string|null
+     */
+    public function getBar()
+    {
+        return $this->_bar;
+    }
+
+
+
+}
+]]></programlisting>
+    </example>
+
+    <example id="zend.codegenerator.examples.file">
+        <title>Generando archivos PHP</title>
+
+        <para>
+            <classname>Zend_CodeGenerator_Php_File</classname> puede ser 
+            utilizada para generar el contenido de un archivo PHP. 
+            Usted puede incluir clases, así como el contenido arbitrario del 
+            cuerpo. Cuando acople clases, debe adjuntar instancias concretas de
+            <classname>Zend_CodeGenerator_Php_Class</classname> o un array 
+            definiendo la clase.
+        </para>
+
+        <para>
+            En el ejemplo siguiente, asumiremos que ha definido 
+            <code>$foo</code> como una de las definiciones de clase del
+            ejemplo anterior.
+        </para>
+
+            <programlisting role="php"><![CDATA[
+$file = new Zend_CodeGenerator_Php_File(array(
+    'classes'  => array($foo);
+    'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
+        'shortDescription' => 'Foo class file',
+        'tags'             => array(
+            array(
+                'name'        => 'license',
+                'description' => 'New BSD',
+            ),
+        ),
+    )),
+    'body'     => 'define(\'APPLICATION_ENV\', \'testing\');',
+));
+]]></programlisting>
+
+        <para>
+            Llamando a <code>generate()</code> generará el código -- pero no lo 
+            grabará en un archivo. Usted mismo deberá capturar y grabar los 
+            contenidos en un archivo. Por ejemplo:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$code = $file->generate();
+file_put_contents('Foo.php', $code);
+]]></programlisting>
+
+        <para>
+            Lo anterior generará el siguiente archivo:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php
+/**
+ * Foo class file
+ *
+ * @license New BSD
+ */
+
+
+/**
+ * Sample generated class
+ *
+ * This is a class generated with Zend_CodeGenerator.
+ *
+ * @version $Rev:$
+ * @license New BSD
+ */
+class Foo
+{
+
+    protected $_bar = 'baz';
+
+    public $baz = 'bat';
+
+    const bat = 'foobarbazbat';
+
+    /**
+     * Set the bar property
+     *
+     * @param string bar
+     * @return string
+     */
+    public function setBar($bar)
+    {
+        $this->_bar = $bar;
+        return $this;
+    }
+
+
+    /**
+     * Retrieve the bar property
+     *
+     * @return string|null
+     */
+    public function getBar()
+    {
+        return $this->_bar;
+    }
+
+
+
+}
+
+
+define('APPLICATION_ENV', 'testing');
+]]></programlisting>
+    </example>
+
+    <example id="zend.codegenerator.examples.reflection-file">
+        <title>Sembrando la generación de código para un archivo PHP 
+        via reflection</title>
+        <para></para>
+        <!-- @todo -->
+    </example>
+
+    <example id="zend.codegenerator.examples.reflection-class">
+        <title>Sembrando la generación de clases PHP via reflection</title>
+        <para></para>
+        <!-- @todo -->
+    </example>
+
+    <example id="zend.codegenerator.examples.reflection-method">
+        <title>Sembrando la generación de métodos PHP via reflection</title>
+        <para></para>
+        <!-- @todo -->
+    </example>
+</sect1>

+ 142 - 142
documentation/manual/es/module_specs/Zend_CodeGenerator-Introduction.xml

@@ -1,142 +1,142 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.codegenerator.introduction">
-    <title>Introducción</title>
-
-    <para>
-        <classname>Zend_CodeGenerator</classname> ofrece facilidades para 
-        generar código arbitrario usando una interfaz orientada a objetos, tanto 
-        para crear código nuevo como para actualizar código existente. 
-        Mientras que la implementación actual se limita a generar código PHP, 
-        usted fácilmente puede extender la clase base a fin de proveer 
-        generación de código para otras tareas como: JavaScript, archivos de 
-        configuración, apache vhost, etc.
-    </para>
-
-    <sect2 id="zend.codegenerator.introduction.theory">
-        <title>Teoría de Operación</title>
-
-        <para>
-            En el caso de uso más típico, simplemente instanciará una clase de
-            generación de código y podrá pasarle tanto la configuración adecuada 
-            o configurarla después de la instanciación. Para generar el código, 
-            simplemente haga "echo" del objeto o llame a su método 
-            <code>generate()</code>.
-        </para>
-
-        <programlisting role="php"><![CDATA[
-// Pasando la configuración al constructor:
-$file = new Zend_CodeGenerator_Php_File(array(
-    'classes' => array(
-        new Zend_CodeGenerator_Php_Class(array(
-            'name'    => 'World',
-            'methods' => array(
-                new Zend_CodeGenerator_Php_Method(array(
-                    'name' => 'hello',
-                    'body' => 'echo \'Hello world!\';',
-                )),
-            ),
-        )),
-    )
-));
-
-// Configurando después de la instanciación
-$method = new Zend_CodeGenerator_Php_Method();
-$method->setName('hello')
-       ->setBody('echo \'Hello world!\';');
-
-$class = new Zend_CodeGenerator_Php_Class();
-$class->setName('World')
-      ->setMethod($method);
-
-$file = new Zend_CodeGenerator_Php_File();
-$file->setClass($class);
-
-// Mostrar el archivo generado
-echo $file;
-
-// o grabarlo a un archivo:
-file_put_contents('World.php', $file->generate());
-]]></programlisting>
-
-        <para>
-            Ambos ejemplos anteriores mostrarán el mismo resultado:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php
-
-class World
-{
-
-    public function hello()
-    {
-        echo 'Hello world!';
-    }
-
-
-
-}
-]]></programlisting>
-
-        <para>
-            Otro caso de uso común es actualizar el código actual -- por ejemplo, 
-            para añadir un método a una clase. En ese caso, primero debe 
-            inspeccionar el código actual utilizando reflexión, y entonces 
-            añadir su nuevo método.
-            <classname>Zend_CodeGenerator</classname> lo hace trivialmente simple, 
-            aprovechando <link linkend="zend.reflection">Zend_Reflection</link>.
-        </para>
-
-        <para>
-            Como ejemplo, digamos que hemos grabado lo anterior al archivo 
-            "World.php", y que ya está incluído. Podríamos entonces hacer lo 
-            siguiente:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$class = Zend_CodeGenerator_Php_Class::fromReflection(
-    new Zend_Reflection_Class('World')
-);
-
-$method = new Zend_CodeGenerator_Php_Method();
-$method->setName('mrMcFeeley')
-       ->setBody('echo \'Hello, Mr. McFeeley!\';');
-$class->setMethod($method);
-
-$file = new Zend_CodeGenerator_Php_File();
-$file->setClass($class);
-
-// Mostrar el archivo generado
-echo $file;
-
-// O mejor aún, volver a grabarlo al archivo original:
-file_put_contents('World.php', $file->generate());
-]]></programlisting>
-
-        <para>
-            El archivo de la clase resultante se vería así:       
-        </para>
-
-        <programlisting role="php"><![CDATA[
-<?php
-
-class World
-{
-
-    public function hello()
-    {
-        echo 'Hello world!';
-    }
-
-
-    public function mrMcFeeley()
-    {
-        echo 'Hellow Mr. McFeeley!';
-    }
-
-}
-]]></programlisting>
-    </sect2>
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.codegenerator.introduction">
+    <title>Introducción</title>
+
+    <para>
+        <classname>Zend_CodeGenerator</classname> ofrece facilidades para 
+        generar código arbitrario usando una interfaz orientada a objetos, tanto 
+        para crear código nuevo como para actualizar código existente. 
+        Mientras que la implementación actual se limita a generar código PHP, 
+        usted fácilmente puede extender la clase base a fin de proveer 
+        generación de código para otras tareas como: JavaScript, archivos de 
+        configuración, apache vhost, etc.
+    </para>
+
+    <sect2 id="zend.codegenerator.introduction.theory">
+        <title>Teoría de Operación</title>
+
+        <para>
+            En el caso de uso más típico, simplemente instanciará una clase de
+            generación de código y podrá pasarle tanto la configuración adecuada 
+            o configurarla después de la instanciación. Para generar el código, 
+            simplemente haga "echo" del objeto o llame a su método 
+            <code>generate()</code>.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// Pasando la configuración al constructor:
+$file = new Zend_CodeGenerator_Php_File(array(
+    'classes' => array(
+        new Zend_CodeGenerator_Php_Class(array(
+            'name'    => 'World',
+            'methods' => array(
+                new Zend_CodeGenerator_Php_Method(array(
+                    'name' => 'hello',
+                    'body' => 'echo \'Hello world!\';',
+                )),
+            ),
+        )),
+    )
+));
+
+// Configurando después de la instanciación
+$method = new Zend_CodeGenerator_Php_Method();
+$method->setName('hello')
+       ->setBody('echo \'Hello world!\';');
+
+$class = new Zend_CodeGenerator_Php_Class();
+$class->setName('World')
+      ->setMethod($method);
+
+$file = new Zend_CodeGenerator_Php_File();
+$file->setClass($class);
+
+// Mostrar el archivo generado
+echo $file;
+
+// o grabarlo a un archivo:
+file_put_contents('World.php', $file->generate());
+]]></programlisting>
+
+        <para>
+            Ambos ejemplos anteriores mostrarán el mismo resultado:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php
+
+class World
+{
+
+    public function hello()
+    {
+        echo 'Hello world!';
+    }
+
+
+
+}
+]]></programlisting>
+
+        <para>
+            Otro caso de uso común es actualizar el código actual -- por ejemplo, 
+            para añadir un método a una clase. En ese caso, primero debe 
+            inspeccionar el código actual utilizando reflexión, y entonces 
+            añadir su nuevo método.
+            <classname>Zend_CodeGenerator</classname> lo hace trivialmente simple, 
+            aprovechando <link linkend="zend.reflection">Zend_Reflection</link>.
+        </para>
+
+        <para>
+            Como ejemplo, digamos que hemos grabado lo anterior al archivo 
+            "World.php", y que ya está incluído. Podríamos entonces hacer lo 
+            siguiente:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$class = Zend_CodeGenerator_Php_Class::fromReflection(
+    new Zend_Reflection_Class('World')
+);
+
+$method = new Zend_CodeGenerator_Php_Method();
+$method->setName('mrMcFeeley')
+       ->setBody('echo \'Hello, Mr. McFeeley!\';');
+$class->setMethod($method);
+
+$file = new Zend_CodeGenerator_Php_File();
+$file->setClass($class);
+
+// Mostrar el archivo generado
+echo $file;
+
+// O mejor aún, volver a grabarlo al archivo original:
+file_put_contents('World.php', $file->generate());
+]]></programlisting>
+
+        <para>
+            El archivo de la clase resultante se vería así:       
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php
+
+class World
+{
+
+    public function hello()
+    {
+        echo 'Hello world!';
+    }
+
+
+    public function mrMcFeeley()
+    {
+        echo 'Hellow Mr. McFeeley!';
+    }
+
+}
+]]></programlisting>
+    </sect2>
+</sect1>

+ 703 - 703
documentation/manual/es/module_specs/Zend_Db_Table_Row.xml

@@ -1,704 +1,704 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.db.table.row">
-
-    <title>Zend_Db_Table_Row</title>
-
-    <sect2 id="zend.db.table.row.introduction">
-
-        <title>Introduction</title>
-
-        <para>
-            <classname>Zend_Db_Table_Row</classname> is a class that contains an individual row of a <classname>Zend_Db_Table</classname> object.
-            When you run a query against a Table class, the result is returned in a set of
-            <classname>Zend_Db_Table_Row</classname> objects. You can also use this object to create new rows and add them
-            to the database table.
-        </para>
-
-        <para>
-            <classname>Zend_Db_Table_Row</classname> is an implementation of the <ulink
-            url="http://www.martinfowler.com/eaaCatalog/rowDataGateway.html">Row Data Gateway</ulink>
-            pattern.
-        </para>
-
-    </sect2>
-
-    <sect2 id="zend.db.table.row.read">
-
-        <title>Fetching a Row</title>
-
-        <para>
-            <classname>Zend_Db_Table_Abstract</classname> provides methods <code>find()</code> and
-            <code>fetchAll()</code>, which each return an object of type <classname>Zend_Db_Table_Rowset</classname>, and
-            the method <code>fetchRow()</code>, which returns an object of type <classname>Zend_Db_Table_Row</classname>.
-        </para>
-
-        <example id="zend.db.table.row.read.example">
-
-            <title>Example of fetching a row</title>
-
-            <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
-]]></programlisting>
-
-        </example>
-
-        <para>
-            A <classname>Zend_Db_Table_Rowset</classname> object contains a collection of <classname>Zend_Db_Table_Row</classname> objects. See
-            <xref linkend="zend.db.table.rowset" />.
-        </para>
-
-        <example id="zend.db.table.row.read.example-rowset">
-
-            <title>Example of reading a row in a rowset</title>
-
-            <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$rowset = $bugs->fetchAll($bugs->select()->where('bug_status = ?', 1));
-$row = $rowset->current();
-]]></programlisting>
-
-        </example>
-
-        <sect3 id="zend.db.table.row.read.get">
-
-            <title>Reading column values from a row</title>
-
-            <para>
-                <classname>Zend_Db_Table_Row_Abstract</classname> provides accessor methods so you can reference columns
-                in the row as object properties.
-            </para>
-
-            <example id="zend.db.table.row.read.get.example">
-
-                <title>Example of reading a column in a row</title>
-
-                <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
-
-// Echo the value of the bug_description column
-echo $row->bug_description;
-]]></programlisting>
-
-            </example>
-
-            <note>
-
-                <para>
-                    Earlier versions of <classname>Zend_Db_Table_Row</classname> mapped these column accessors to the
-                    database column names using a string transformation called
-                    <emphasis>inflection</emphasis>.
-                </para>
-
-                <para>
-                    Currently, <classname>Zend_Db_Table_Row</classname> does not implement inflection. Accessed property
-                    names need to match the spelling of the column names as they appear in your
-                    database.
-                </para>
-
-            </note>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.read.to-array">
-
-            <title>Retrieving Row Data as an Array</title>
-
-            <para>
-                You can access the row's data as an array using the <code>toArray()</code> method
-                of the Row object. This returns an associative array of the column names to the
-                column values.
-            </para>
-
-            <example id="zend.db.table.row.read.to-array.example">
-
-                <title>Example of using the toArray() method</title>
-
-                <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
-
-// Get the column/value associative array from the Row object
-$rowArray = $row->toArray();
-
-// Now use it as a normal array
-foreach ($rowArray as $column => $value) {
-    echo "Column: $column\n";
-    echo "Value:  $value\n";
-}
-]]></programlisting>
-
-            </example>
-
-            <para>
-                The array returned from <code>toArray()</code> is not updateable. You can modify
-                values in the array as you can with any array, but you cannot save changes to this
-                array to the database directly.
-            </para>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.read.relationships">
-
-            <title>Fetching data from related tables</title>
-
-            <para>
-                The <classname>Zend_Db_Table_Row_Abstract</classname> class provides methods for fetching rows and rowsets
-                from related tables. See <xref linkend="zend.db.table.relationships" /> for more
-                information on table relationships.
-            </para>
-
-        </sect3>
-
-    </sect2>
-
-    <sect2 id="zend.db.table.row.write">
-
-        <title>Writing rows to the database</title>
-
-        <sect3 id="zend.db.table.row.write.set">
-
-            <title>Changing column values in a row</title>
-
-            <para>
-                You can set individual column values using column accessors, similar to how the
-                columns are read as object properties in the example above.
-            </para>
-
-            <para>
-                Using a column accessor to set a value changes the column value of the row object
-                in your application, but it does not commit the change to the database yet. You can
-                do that with the <code>save()</code> method.
-            </para>
-
-            <example id="zend.db.table.row.write.set.example">
-
-                <title>Example of changing a column in a row</title>
-
-                <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
-
-// Change the value of one or more columns
-$row->bug_status = 'FIXED';
-
-// UPDATE the row in the database with new values
-$row->save();
-]]></programlisting>
-
-            </example>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.write.insert">
-
-            <title>Inserting a new row</title>
-
-            <para>
-                You can create a new row for a given table with the <code>createRow()</code> method
-                of the table class. You can access fields of this row with the object-oriented
-                interface, but the row is not stored in the database until you call the
-                <code>save()</code> method.
-            </para>
-
-            <example id="zend.db.table.row.write.insert.example">
-
-                <title>Example of creating a new row for a table</title>
-
-                <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$newRow = $bugs->createRow();
-
-// Set column values as appropriate for your application
-$newRow->bug_description = '...description...';
-$newRow->bug_status = 'NEW';
-
-// INSERT the new row to the database
-$newRow->save();
-]]></programlisting>
-
-            </example>
-
-            <para>
-                The optional argument to the createRow() method is an associative array, with which
-                you can populate fields of the new row.
-            </para>
-
-            <example id="zend.db.table.row.write.insert.example2">
-
-                <title>Example of populating a new row for a table</title>
-
-                <programlisting role="php"><![CDATA[
-$data = array(
-    'bug_description' => '...description...',
-    'bug_status'      => 'NEW'
-);
-
-$bugs = new Bugs();
-$newRow = $bugs->createRow($data);
-
-// INSERT the new row to the database
-$newRow->save();
-]]></programlisting>
-
-            </example>
-
-            <note>
-
-                <para>
-                    The <code>createRow()</code> method was called <code>fetchNew()</code> in
-                    earlier releases of <classname>Zend_Db_Table</classname>. You are encouraged to use the new method
-                    name, even though the old name continues to work for the sake of backward
-                    compatibility.
-                </para>
-
-            </note>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.write.set-from-array">
-
-            <title>Changing values in multiple columns</title>
-
-            <para>
-                <classname>Zend_Db_Table_Row_Abstract</classname> provides the <code>setFromArray()</code> method to
-                enable you to set several columns in a single row at once, specified in an
-                associative array that maps the column names to values. You may find this method
-                convenient for setting values both for new rows and for rows you need to update.
-            </para>
-
-            <example id="zend.db.table.row.write.set-from-array.example">
-
-                <title>Example of using setFromArray() to set values in a new Row</title>
-
-                <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$newRow = $bugs->createRow();
-
-// Data are arranged in an associative array
-$data = array(
-    'bug_description' => '...description...',
-    'bug_status'      => 'NEW'
-);
-
-// Set all the column values at once
-$newRow->setFromArray($data);
-
-// INSERT the new row to the database
-$newRow->save();
-]]></programlisting>
-
-            </example>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.write.delete">
-
-            <title>Deleting a row</title>
-
-            <para>
-                You can call the <code>delete()</code> method on a Row object. This deletes rows in
-                the database matching the primary key in the Row object.
-            </para>
-
-            <example id="zend.db.table.row.write.delete.example">
-
-                <title>Example of deleting a row</title>
-
-                <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$row = $bugs->fetchRow('bug_id = 1');
-
-// DELETE this row
-$row->delete();
-]]></programlisting>
-
-            </example>
-
-            <para>
-                You do not have to call <code>save()</code> to apply the delete; it is executed
-                against the database immediately.
-            </para>
-
-        </sect3>
-
-    </sect2>
-
-    <sect2 id="zend.db.table.row.serialize">
-
-        <title>Serializing and unserializing rows</title>
-
-        <para>
-            It is often convenient to save the contents of a database row to be used later.
-            <emphasis>Serialization</emphasis> is the name for the operation that converts an
-            object into a form that is easy to save in offline storage (for example, a file).
-            Objects of type <classname>Zend_Db_Table_Row_Abstract</classname> are serializable.
-        </para>
-
-        <sect3 id="zend.db.table.row.serialize.serializing">
-
-            <title>Serializing a Row</title>
-
-            <para>
-                Simply use PHP's <code>serialize()</code> function to create a string containing a
-                byte-stream representation of the Row object argument.
-            </para>
-
-            <example id="zend.db.table.row.serialize.serializing.example">
-
-                <title>Example of serializing a row</title>
-
-                <programlisting role="php"><![CDATA[
-$bugs = new Bugs();
-$row = $bugs->fetchRow('bug_id = 1');
-
-// Convert object to serialized form
-$serializedRow = serialize($row);
-
-// Now you can write $serializedRow to a file, etc.
-]]></programlisting>
-
-            </example>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.serialize.unserializing">
-
-            <title>Unserializing Row Data</title>
-
-            <para>
-                Use PHP's <code>unserialize()</code> function to restore a string containing a
-                byte-stream representation of an object. The function returns the original object.
-            </para>
-
-            <para>
-                Note that the Row object returned is in a <emphasis>disconnected</emphasis> state.
-                You can read the Row object and its properties, but you cannot change values in the
-                Row or execute other methods that require a database connection (for example,
-                queries against related tables).
-            </para>
-
-            <example id="zend.db.table.row.serialize.unserializing.example">
-
-                <title>Example of unserializing a serialized row</title>
-
-                <programlisting role="php"><![CDATA[
-$rowClone = unserialize($serializedRow);
-
-// Now you can use object properties, but read-only
-echo $rowClone->bug_description;
-]]></programlisting>
-
-            </example>
-
-            <note>
-
-                <title>Why do Rows unserialize in a disconnected state?</title>
-
-                <para>
-                    A serialized object is a string that is readable to anyone who possesses it. It
-                    could be a security risk to store parameters such as database account and
-                    password in plain, unencrypted text in the serialized string. You would not
-                    want to store such data to a text file that is not protected, or send it in an
-                    email or other medium that is easily read by potential attackers. The reader of
-                    the serialized object should not be able to use it to gain access to your
-                    database without knowing valid credentials.
-                </para>
-
-            </note>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.serialize.set-table">
-
-            <title>Reactivating a Row as Live Data</title>
-
-            <para>
-                You can reactivate a disconnected Row, using the <code>setTable()</code> method.
-                The argument to this method is a valid object of type <classname>Zend_Db_Table_Abstract</classname>, which
-                you create. Creating a Table object requires a live connection to the database, so
-                by reassociating the Table with the Row, the Row gains access to the database.
-                Subsequently, you can change values in the Row object and save the changes to the
-                database.
-            </para>
-
-            <example id="zend.db.table.row.serialize.set-table.example">
-
-                <title>Example of reactivating a row</title>
-
-                <programlisting role="php"><![CDATA[
-$rowClone = unserialize($serializedRow);
-
-$bugs = new Bugs();
-
-// Reconnect the row to a table, and
-// thus to a live database connection
-$rowClone->setTable($bugs);
-
-// Now you can make changes to the row and save them
-$rowClone->bug_status = 'FIXED';
-$rowClone->save();
-]]></programlisting>
-
-            </example>
-
-        </sect3>
-
-    </sect2>
-
-    <sect2 id="zend.db.table.row.extending">
-
-        <title>Extending the Row class</title>
-
-        <para>
-            <classname>Zend_Db_Table_Row</classname> is the default concrete class that extends
-            <classname>Zend_Db_Table_Row_Abstract</classname>. You can define your own concrete class for instances of Row
-            by extending <classname>Zend_Db_Table_Row_Abstract</classname>. To use your new Row class to store results of
-            Table queries, specify the custom Row class by name either in the
-            <code>$_rowClass</code> protected member of a Table class, or in the array argument of
-            the constructor of a Table object.
-        </para>
-
-        <example id="zend.db.table.row.extending.example">
-
-            <title>Specifying a custom Row class</title>
-
-            <programlisting role="php"><![CDATA[
-class MyRow extends Zend_Db_Table_Row_Abstract
-{
-    // ...customizations
-}
-
-// Specify a custom Row to be used by default
-// in all instances of a Table class.
-class Products extends Zend_Db_Table_Abstract
-{
-    protected $_name = 'products';
-    protected $_rowClass = 'MyRow';
-}
-
-// Or specify a custom Row to be used in one
-// instance of a Table class.
-$bugs = new Bugs(array('rowClass' => 'MyRow'));
-]]></programlisting>
-
-        </example>
-
-        <sect3 id="zend.db.table.row.extending.overriding">
-
-            <title>Row initialization</title>
-
-            <para>
-                If application-specific logic needs to be initialized when a row is constructed,
-                you can select to move your tasks to the <code>init()</code> method, which is
-                called after all row metadata has been processed. This is recommended over the
-                <code>__construct</code> method if you do not need to alter the metadata in any
-                programmatic way.
-
-                <example id="zend.db.table.row.init.usage.example">
-
-                    <title>Example usage of init() method</title>
-
-                    <programlisting role="php"><![CDATA[
-class MyApplicationRow extends Zend_Db_Table_Row_Abstract
-{
-    protected $_role;
-
-    public function init()
-    {
-        $this->_role = new MyRoleClass();
-    }
-}
-]]></programlisting>
-
-                </example>
-
-            </para>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.extending.insert-update">
-
-            <title>Defining Custom Logic for Insert, Update, and Delete in <classname>Zend_Db_Table_Row</classname></title>
-
-            <para>
-                The Row class calls protected methods <code>_insert()</code>,
-                <code>_update()</code>, and <code>_delete()</code> before performing the
-                corresponding operations <code>INSERT</code>, <code>UPDATE</code>, and
-                <code>DELETE</code>. You can add logic to these methods in your custom Row
-                subclass.
-            </para>
-
-            <para>
-                If you need to do custom logic in a specific table, and the custom logic must occur
-                for every operation on that table, it may make more sense to implement your custom
-                code in the <code>insert()</code>, <code>update()</code> and <code>delete()</code>
-                methods of your Table class. However, sometimes it may be necessary to do custom
-                logic in the Row class.
-            </para>
-
-            <para>
-                Below are some example cases where it might make sense to implement custom logic in
-                a Row class instead of in the Table class:
-            </para>
-
-            <example id="zend.db.table.row.extending.overriding-example1">
-
-                <title>Example of custom logic in a Row class</title>
-
-                <para>
-                    The custom logic may not apply in all cases of operations on the respective
-                    Table. You can provide custom logic on demand by implementing it in a Row class
-                    and creating an instance of the Table class with that custom Row class
-                    specified. Otherwise, the Table uses the default Row class.
-                </para>
-
-                <para>
-                    You need data operations on this table to record the operation to a
-                    <classname>Zend_Log</classname> object, but only if the application configuration has enabled this
-                    behavior.
-                </para>
-
-                <programlisting role="php"><![CDATA[
-class MyLoggingRow extends Zend_Db_Table_Row_Abstract
-{
-    protected function _insert()
-    {
-        $log = Zend_Registry::get('database_log');
-        $log->info(Zend_Debug::dump($this->_data,
-                                    "INSERT: $this->_tableClass",
-                                    false)
-                  );
-    }
-}
-
-// $loggingEnabled is an example property that depends
-// on your application configuration
-if ($loggingEnabled) {
-    $bugs = new Bugs(array('rowClass' => 'MyLoggingRow'));
-} else {
-    $bugs = new Bugs();
-}
-]]></programlisting>
-
-            </example>
-
-            <example id="zend.db.table.row.extending.overriding-example2">
-
-                <title>Example of a Row class that logs insert data for multiple tables</title>
-
-                <para>
-                    The custom logic may be common to multiple tables. Instead of implementing the
-                    same custom logic in every one of your Table classes, you can implement the
-                    code for such actions in the definition of a Row class, and use this Row in
-                    each of your Table classes.
-                </para>
-
-                <para>
-                    In this example, the logging code is identical in all table classes.
-                </para>
-
-                <programlisting role="php"><![CDATA[
-class MyLoggingRow extends Zend_Db_Table_Row_Abstract
-{
-    protected function _insert()
-    {
-        $log = Zend_Registry::get('database_log');
-        $log->info(Zend_Debug::dump($this->_data,
-                                    "INSERT: $this->_tableClass",
-                                    false)
-                  );
-    }
-}
-
-class Bugs extends Zend_Db_Table_Abstract
-{
-    protected $_name = 'bugs';
-    protected $_rowClass = 'MyLoggingRow';
-}
-
-class Products extends Zend_Db_Table_Abstract
-{
-    protected $_name = 'products';
-    protected $_rowClass = 'MyLoggingRow';
-}
-]]></programlisting>
-
-            </example>
-
-        </sect3>
-
-        <sect3 id="zend.db.table.row.extending.inflection">
-
-            <title>Define Inflection in <classname>Zend_Db_Table_Row</classname></title>
-
-            <para>
-                Some people prefer that the table class name match a table name in the RDBMS by
-                using a string transformation called <emphasis>inflection</emphasis>.
-            </para>
-
-            <para>
-                <classname>Zend_Db</classname> classes do not implement inflection by default. See
-                <xref linkend="zend.db.table.extending.inflection" /> for an explanation of this
-                policy.
-            </para>
-
-            <para>
-                If you prefer to use inflection, then you must implement the transformation yourself,
-                by overriding the <code>_transformColumn()</code> method in a custom Row class, and
-                using that custom Row class when you perform queries against your Table class.
-            </para>
-
-            <example id="zend.db.table.row.extending.inflection.example">
-
-                <title>Example of defining an inflection transformation</title>
-
-                <para>
-                    This allows you to use an inflected version of the column name in the
-                    accessors. The Row class uses the <code>_transformColumn()</code> method to
-                    change the name you use to the native column name in the database table.
-                </para>
-
-                <programlisting role="php"><![CDATA[
-class MyInflectedRow extends Zend_Db_Table_Row_Abstract
-{
-    protected function _transformColumn($columnName)
-    {
-        $nativeColumnName = myCustomInflector($columnName);
-        return $nativeColumnName;
-    }
-}
-
-class Bugs extends Zend_Db_Table_Abstract
-{
-    protected $_name = 'bugs';
-    protected $_rowClass = 'MyInflectedRow';
-}
-
-$bugs = new Bugs();
-$row = $bugs->fetchNew();
-
-// Use camelcase column names, and rely on the
-// transformation function to change it into the
-// native representation.
-$row->bugDescription = 'New description';
-]]></programlisting>
-
-            </example>
-
-            <para>
-                You are responsible for writing the functions to perform inflection transformation.
-                Zend Framework does not provide such a function.
-            </para>
-
-        </sect3>
-
-    </sect2>
-
-</sect1>
-<!--
-vim:se ts=4 sw=4 et:
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.db.table.row">
+
+    <title>Zend_Db_Table_Row</title>
+
+    <sect2 id="zend.db.table.row.introduction">
+
+        <title>Introduction</title>
+
+        <para>
+            <classname>Zend_Db_Table_Row</classname> is a class that contains an individual row of a <classname>Zend_Db_Table</classname> object.
+            When you run a query against a Table class, the result is returned in a set of
+            <classname>Zend_Db_Table_Row</classname> objects. You can also use this object to create new rows and add them
+            to the database table.
+        </para>
+
+        <para>
+            <classname>Zend_Db_Table_Row</classname> is an implementation of the <ulink
+            url="http://www.martinfowler.com/eaaCatalog/rowDataGateway.html">Row Data Gateway</ulink>
+            pattern.
+        </para>
+
+    </sect2>
+
+    <sect2 id="zend.db.table.row.read">
+
+        <title>Fetching a Row</title>
+
+        <para>
+            <classname>Zend_Db_Table_Abstract</classname> provides methods <code>find()</code> and
+            <code>fetchAll()</code>, which each return an object of type <classname>Zend_Db_Table_Rowset</classname>, and
+            the method <code>fetchRow()</code>, which returns an object of type <classname>Zend_Db_Table_Row</classname>.
+        </para>
+
+        <example id="zend.db.table.row.read.example">
+
+            <title>Example of fetching a row</title>
+
+            <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
+]]></programlisting>
+
+        </example>
+
+        <para>
+            A <classname>Zend_Db_Table_Rowset</classname> object contains a collection of <classname>Zend_Db_Table_Row</classname> objects. See
+            <xref linkend="zend.db.table.rowset" />.
+        </para>
+
+        <example id="zend.db.table.row.read.example-rowset">
+
+            <title>Example of reading a row in a rowset</title>
+
+            <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$rowset = $bugs->fetchAll($bugs->select()->where('bug_status = ?', 1));
+$row = $rowset->current();
+]]></programlisting>
+
+        </example>
+
+        <sect3 id="zend.db.table.row.read.get">
+
+            <title>Reading column values from a row</title>
+
+            <para>
+                <classname>Zend_Db_Table_Row_Abstract</classname> provides accessor methods so you can reference columns
+                in the row as object properties.
+            </para>
+
+            <example id="zend.db.table.row.read.get.example">
+
+                <title>Example of reading a column in a row</title>
+
+                <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
+
+// Echo the value of the bug_description column
+echo $row->bug_description;
+]]></programlisting>
+
+            </example>
+
+            <note>
+
+                <para>
+                    Earlier versions of <classname>Zend_Db_Table_Row</classname> mapped these column accessors to the
+                    database column names using a string transformation called
+                    <emphasis>inflection</emphasis>.
+                </para>
+
+                <para>
+                    Currently, <classname>Zend_Db_Table_Row</classname> does not implement inflection. Accessed property
+                    names need to match the spelling of the column names as they appear in your
+                    database.
+                </para>
+
+            </note>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.read.to-array">
+
+            <title>Retrieving Row Data as an Array</title>
+
+            <para>
+                You can access the row's data as an array using the <code>toArray()</code> method
+                of the Row object. This returns an associative array of the column names to the
+                column values.
+            </para>
+
+            <example id="zend.db.table.row.read.to-array.example">
+
+                <title>Example of using the toArray() method</title>
+
+                <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
+
+// Get the column/value associative array from the Row object
+$rowArray = $row->toArray();
+
+// Now use it as a normal array
+foreach ($rowArray as $column => $value) {
+    echo "Column: $column\n";
+    echo "Value:  $value\n";
+}
+]]></programlisting>
+
+            </example>
+
+            <para>
+                The array returned from <code>toArray()</code> is not updateable. You can modify
+                values in the array as you can with any array, but you cannot save changes to this
+                array to the database directly.
+            </para>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.read.relationships">
+
+            <title>Fetching data from related tables</title>
+
+            <para>
+                The <classname>Zend_Db_Table_Row_Abstract</classname> class provides methods for fetching rows and rowsets
+                from related tables. See <xref linkend="zend.db.table.relationships" /> for more
+                information on table relationships.
+            </para>
+
+        </sect3>
+
+    </sect2>
+
+    <sect2 id="zend.db.table.row.write">
+
+        <title>Writing rows to the database</title>
+
+        <sect3 id="zend.db.table.row.write.set">
+
+            <title>Changing column values in a row</title>
+
+            <para>
+                You can set individual column values using column accessors, similar to how the
+                columns are read as object properties in the example above.
+            </para>
+
+            <para>
+                Using a column accessor to set a value changes the column value of the row object
+                in your application, but it does not commit the change to the database yet. You can
+                do that with the <code>save()</code> method.
+            </para>
+
+            <example id="zend.db.table.row.write.set.example">
+
+                <title>Example of changing a column in a row</title>
+
+                <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
+
+// Change the value of one or more columns
+$row->bug_status = 'FIXED';
+
+// UPDATE the row in the database with new values
+$row->save();
+]]></programlisting>
+
+            </example>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.write.insert">
+
+            <title>Inserting a new row</title>
+
+            <para>
+                You can create a new row for a given table with the <code>createRow()</code> method
+                of the table class. You can access fields of this row with the object-oriented
+                interface, but the row is not stored in the database until you call the
+                <code>save()</code> method.
+            </para>
+
+            <example id="zend.db.table.row.write.insert.example">
+
+                <title>Example of creating a new row for a table</title>
+
+                <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$newRow = $bugs->createRow();
+
+// Set column values as appropriate for your application
+$newRow->bug_description = '...description...';
+$newRow->bug_status = 'NEW';
+
+// INSERT the new row to the database
+$newRow->save();
+]]></programlisting>
+
+            </example>
+
+            <para>
+                The optional argument to the createRow() method is an associative array, with which
+                you can populate fields of the new row.
+            </para>
+
+            <example id="zend.db.table.row.write.insert.example2">
+
+                <title>Example of populating a new row for a table</title>
+
+                <programlisting role="php"><![CDATA[
+$data = array(
+    'bug_description' => '...description...',
+    'bug_status'      => 'NEW'
+);
+
+$bugs = new Bugs();
+$newRow = $bugs->createRow($data);
+
+// INSERT the new row to the database
+$newRow->save();
+]]></programlisting>
+
+            </example>
+
+            <note>
+
+                <para>
+                    The <code>createRow()</code> method was called <code>fetchNew()</code> in
+                    earlier releases of <classname>Zend_Db_Table</classname>. You are encouraged to use the new method
+                    name, even though the old name continues to work for the sake of backward
+                    compatibility.
+                </para>
+
+            </note>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.write.set-from-array">
+
+            <title>Changing values in multiple columns</title>
+
+            <para>
+                <classname>Zend_Db_Table_Row_Abstract</classname> provides the <code>setFromArray()</code> method to
+                enable you to set several columns in a single row at once, specified in an
+                associative array that maps the column names to values. You may find this method
+                convenient for setting values both for new rows and for rows you need to update.
+            </para>
+
+            <example id="zend.db.table.row.write.set-from-array.example">
+
+                <title>Example of using setFromArray() to set values in a new Row</title>
+
+                <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$newRow = $bugs->createRow();
+
+// Data are arranged in an associative array
+$data = array(
+    'bug_description' => '...description...',
+    'bug_status'      => 'NEW'
+);
+
+// Set all the column values at once
+$newRow->setFromArray($data);
+
+// INSERT the new row to the database
+$newRow->save();
+]]></programlisting>
+
+            </example>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.write.delete">
+
+            <title>Deleting a row</title>
+
+            <para>
+                You can call the <code>delete()</code> method on a Row object. This deletes rows in
+                the database matching the primary key in the Row object.
+            </para>
+
+            <example id="zend.db.table.row.write.delete.example">
+
+                <title>Example of deleting a row</title>
+
+                <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$row = $bugs->fetchRow('bug_id = 1');
+
+// DELETE this row
+$row->delete();
+]]></programlisting>
+
+            </example>
+
+            <para>
+                You do not have to call <code>save()</code> to apply the delete; it is executed
+                against the database immediately.
+            </para>
+
+        </sect3>
+
+    </sect2>
+
+    <sect2 id="zend.db.table.row.serialize">
+
+        <title>Serializing and unserializing rows</title>
+
+        <para>
+            It is often convenient to save the contents of a database row to be used later.
+            <emphasis>Serialization</emphasis> is the name for the operation that converts an
+            object into a form that is easy to save in offline storage (for example, a file).
+            Objects of type <classname>Zend_Db_Table_Row_Abstract</classname> are serializable.
+        </para>
+
+        <sect3 id="zend.db.table.row.serialize.serializing">
+
+            <title>Serializing a Row</title>
+
+            <para>
+                Simply use PHP's <code>serialize()</code> function to create a string containing a
+                byte-stream representation of the Row object argument.
+            </para>
+
+            <example id="zend.db.table.row.serialize.serializing.example">
+
+                <title>Example of serializing a row</title>
+
+                <programlisting role="php"><![CDATA[
+$bugs = new Bugs();
+$row = $bugs->fetchRow('bug_id = 1');
+
+// Convert object to serialized form
+$serializedRow = serialize($row);
+
+// Now you can write $serializedRow to a file, etc.
+]]></programlisting>
+
+            </example>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.serialize.unserializing">
+
+            <title>Unserializing Row Data</title>
+
+            <para>
+                Use PHP's <code>unserialize()</code> function to restore a string containing a
+                byte-stream representation of an object. The function returns the original object.
+            </para>
+
+            <para>
+                Note that the Row object returned is in a <emphasis>disconnected</emphasis> state.
+                You can read the Row object and its properties, but you cannot change values in the
+                Row or execute other methods that require a database connection (for example,
+                queries against related tables).
+            </para>
+
+            <example id="zend.db.table.row.serialize.unserializing.example">
+
+                <title>Example of unserializing a serialized row</title>
+
+                <programlisting role="php"><![CDATA[
+$rowClone = unserialize($serializedRow);
+
+// Now you can use object properties, but read-only
+echo $rowClone->bug_description;
+]]></programlisting>
+
+            </example>
+
+            <note>
+
+                <title>Why do Rows unserialize in a disconnected state?</title>
+
+                <para>
+                    A serialized object is a string that is readable to anyone who possesses it. It
+                    could be a security risk to store parameters such as database account and
+                    password in plain, unencrypted text in the serialized string. You would not
+                    want to store such data to a text file that is not protected, or send it in an
+                    email or other medium that is easily read by potential attackers. The reader of
+                    the serialized object should not be able to use it to gain access to your
+                    database without knowing valid credentials.
+                </para>
+
+            </note>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.serialize.set-table">
+
+            <title>Reactivating a Row as Live Data</title>
+
+            <para>
+                You can reactivate a disconnected Row, using the <code>setTable()</code> method.
+                The argument to this method is a valid object of type <classname>Zend_Db_Table_Abstract</classname>, which
+                you create. Creating a Table object requires a live connection to the database, so
+                by reassociating the Table with the Row, the Row gains access to the database.
+                Subsequently, you can change values in the Row object and save the changes to the
+                database.
+            </para>
+
+            <example id="zend.db.table.row.serialize.set-table.example">
+
+                <title>Example of reactivating a row</title>
+
+                <programlisting role="php"><![CDATA[
+$rowClone = unserialize($serializedRow);
+
+$bugs = new Bugs();
+
+// Reconnect the row to a table, and
+// thus to a live database connection
+$rowClone->setTable($bugs);
+
+// Now you can make changes to the row and save them
+$rowClone->bug_status = 'FIXED';
+$rowClone->save();
+]]></programlisting>
+
+            </example>
+
+        </sect3>
+
+    </sect2>
+
+    <sect2 id="zend.db.table.row.extending">
+
+        <title>Extending the Row class</title>
+
+        <para>
+            <classname>Zend_Db_Table_Row</classname> is the default concrete class that extends
+            <classname>Zend_Db_Table_Row_Abstract</classname>. You can define your own concrete class for instances of Row
+            by extending <classname>Zend_Db_Table_Row_Abstract</classname>. To use your new Row class to store results of
+            Table queries, specify the custom Row class by name either in the
+            <code>$_rowClass</code> protected member of a Table class, or in the array argument of
+            the constructor of a Table object.
+        </para>
+
+        <example id="zend.db.table.row.extending.example">
+
+            <title>Specifying a custom Row class</title>
+
+            <programlisting role="php"><![CDATA[
+class MyRow extends Zend_Db_Table_Row_Abstract
+{
+    // ...customizations
+}
+
+// Specify a custom Row to be used by default
+// in all instances of a Table class.
+class Products extends Zend_Db_Table_Abstract
+{
+    protected $_name = 'products';
+    protected $_rowClass = 'MyRow';
+}
+
+// Or specify a custom Row to be used in one
+// instance of a Table class.
+$bugs = new Bugs(array('rowClass' => 'MyRow'));
+]]></programlisting>
+
+        </example>
+
+        <sect3 id="zend.db.table.row.extending.overriding">
+
+            <title>Row initialization</title>
+
+            <para>
+                If application-specific logic needs to be initialized when a row is constructed,
+                you can select to move your tasks to the <code>init()</code> method, which is
+                called after all row metadata has been processed. This is recommended over the
+                <code>__construct</code> method if you do not need to alter the metadata in any
+                programmatic way.
+
+                <example id="zend.db.table.row.init.usage.example">
+
+                    <title>Example usage of init() method</title>
+
+                    <programlisting role="php"><![CDATA[
+class MyApplicationRow extends Zend_Db_Table_Row_Abstract
+{
+    protected $_role;
+
+    public function init()
+    {
+        $this->_role = new MyRoleClass();
+    }
+}
+]]></programlisting>
+
+                </example>
+
+            </para>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.extending.insert-update">
+
+            <title>Defining Custom Logic for Insert, Update, and Delete in <classname>Zend_Db_Table_Row</classname></title>
+
+            <para>
+                The Row class calls protected methods <code>_insert()</code>,
+                <code>_update()</code>, and <code>_delete()</code> before performing the
+                corresponding operations <code>INSERT</code>, <code>UPDATE</code>, and
+                <code>DELETE</code>. You can add logic to these methods in your custom Row
+                subclass.
+            </para>
+
+            <para>
+                If you need to do custom logic in a specific table, and the custom logic must occur
+                for every operation on that table, it may make more sense to implement your custom
+                code in the <code>insert()</code>, <code>update()</code> and <code>delete()</code>
+                methods of your Table class. However, sometimes it may be necessary to do custom
+                logic in the Row class.
+            </para>
+
+            <para>
+                Below are some example cases where it might make sense to implement custom logic in
+                a Row class instead of in the Table class:
+            </para>
+
+            <example id="zend.db.table.row.extending.overriding-example1">
+
+                <title>Example of custom logic in a Row class</title>
+
+                <para>
+                    The custom logic may not apply in all cases of operations on the respective
+                    Table. You can provide custom logic on demand by implementing it in a Row class
+                    and creating an instance of the Table class with that custom Row class
+                    specified. Otherwise, the Table uses the default Row class.
+                </para>
+
+                <para>
+                    You need data operations on this table to record the operation to a
+                    <classname>Zend_Log</classname> object, but only if the application configuration has enabled this
+                    behavior.
+                </para>
+
+                <programlisting role="php"><![CDATA[
+class MyLoggingRow extends Zend_Db_Table_Row_Abstract
+{
+    protected function _insert()
+    {
+        $log = Zend_Registry::get('database_log');
+        $log->info(Zend_Debug::dump($this->_data,
+                                    "INSERT: $this->_tableClass",
+                                    false)
+                  );
+    }
+}
+
+// $loggingEnabled is an example property that depends
+// on your application configuration
+if ($loggingEnabled) {
+    $bugs = new Bugs(array('rowClass' => 'MyLoggingRow'));
+} else {
+    $bugs = new Bugs();
+}
+]]></programlisting>
+
+            </example>
+
+            <example id="zend.db.table.row.extending.overriding-example2">
+
+                <title>Example of a Row class that logs insert data for multiple tables</title>
+
+                <para>
+                    The custom logic may be common to multiple tables. Instead of implementing the
+                    same custom logic in every one of your Table classes, you can implement the
+                    code for such actions in the definition of a Row class, and use this Row in
+                    each of your Table classes.
+                </para>
+
+                <para>
+                    In this example, the logging code is identical in all table classes.
+                </para>
+
+                <programlisting role="php"><![CDATA[
+class MyLoggingRow extends Zend_Db_Table_Row_Abstract
+{
+    protected function _insert()
+    {
+        $log = Zend_Registry::get('database_log');
+        $log->info(Zend_Debug::dump($this->_data,
+                                    "INSERT: $this->_tableClass",
+                                    false)
+                  );
+    }
+}
+
+class Bugs extends Zend_Db_Table_Abstract
+{
+    protected $_name = 'bugs';
+    protected $_rowClass = 'MyLoggingRow';
+}
+
+class Products extends Zend_Db_Table_Abstract
+{
+    protected $_name = 'products';
+    protected $_rowClass = 'MyLoggingRow';
+}
+]]></programlisting>
+
+            </example>
+
+        </sect3>
+
+        <sect3 id="zend.db.table.row.extending.inflection">
+
+            <title>Define Inflection in <classname>Zend_Db_Table_Row</classname></title>
+
+            <para>
+                Some people prefer that the table class name match a table name in the RDBMS by
+                using a string transformation called <emphasis>inflection</emphasis>.
+            </para>
+
+            <para>
+                <classname>Zend_Db</classname> classes do not implement inflection by default. See
+                <xref linkend="zend.db.table.extending.inflection" /> for an explanation of this
+                policy.
+            </para>
+
+            <para>
+                If you prefer to use inflection, then you must implement the transformation yourself,
+                by overriding the <code>_transformColumn()</code> method in a custom Row class, and
+                using that custom Row class when you perform queries against your Table class.
+            </para>
+
+            <example id="zend.db.table.row.extending.inflection.example">
+
+                <title>Example of defining an inflection transformation</title>
+
+                <para>
+                    This allows you to use an inflected version of the column name in the
+                    accessors. The Row class uses the <code>_transformColumn()</code> method to
+                    change the name you use to the native column name in the database table.
+                </para>
+
+                <programlisting role="php"><![CDATA[
+class MyInflectedRow extends Zend_Db_Table_Row_Abstract
+{
+    protected function _transformColumn($columnName)
+    {
+        $nativeColumnName = myCustomInflector($columnName);
+        return $nativeColumnName;
+    }
+}
+
+class Bugs extends Zend_Db_Table_Abstract
+{
+    protected $_name = 'bugs';
+    protected $_rowClass = 'MyInflectedRow';
+}
+
+$bugs = new Bugs();
+$row = $bugs->fetchNew();
+
+// Use camelcase column names, and rely on the
+// transformation function to change it into the
+// native representation.
+$row->bugDescription = 'New description';
+]]></programlisting>
+
+            </example>
+
+            <para>
+                You are responsible for writing the functions to perform inflection transformation.
+                Zend Framework does not provide such a function.
+            </para>
+
+        </sect3>
+
+    </sect2>
+
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
 -->

+ 16 - 16
documentation/manual/es/module_specs/Zend_Dom.xml

@@ -1,16 +1,16 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.dom.introduction">
-    <title>Introducción</title>
-
-    <para>
-        <classname>Zend_Dom</classname> provee herramientas para trabajar con documentos y
-		estructuras DOM. Actualmente, ofrecemos <classname>Zend_Dom_Query</classname>, el cual
-		provee una interfaz unificada para consultar documentos DOM utilizando selectores
-		XPath y CSS.
-    </para>
-</sect1>
-<!--
-vim:se ts=4 sw=4 et:
--->
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.dom.introduction">
+    <title>Introducción</title>
+
+    <para>
+        <classname>Zend_Dom</classname> provee herramientas para trabajar con documentos y
+        estructuras DOM. Actualmente, ofrecemos <classname>Zend_Dom_Query</classname>, el cual
+        provee una interfaz unificada para consultar documentos DOM utilizando selectores
+        XPath y CSS.
+    </para>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 88 - 88
documentation/manual/es/module_specs/Zend_Form-Advanced.xml

@@ -11,12 +11,12 @@
         <title>Notación de array</title>
 
         <para>
-        	Muchos desarroladores web experimentados les gusta agrupar relacionados elementos de formulario
-        	usando notación de array en los nombres del elemento. Por ejemplo, si se tiene
-        	dos direcciones que se desea capturar, un envio y una dirección de facturación,
-        	se puede tener elementos idénticos; agrupandolos en un array se puede
-        	asegurar que son capturados por separado. Notese el siguiente formulario
-        	por ejemplo:
+            Muchos desarroladores web experimentados les gusta agrupar relacionados elementos de formulario
+            usando notación de array en los nombres del elemento. Por ejemplo, si se tiene
+            dos direcciones que se desea capturar, un envio y una dirección de facturación,
+            se puede tener elementos idénticos; agrupandolos en un array se puede
+            asegurar que son capturados por separado. Notese el siguiente formulario
+            por ejemplo:
         </para>
 
         <programlisting role="html"><![CDATA[
@@ -73,11 +73,11 @@
 </programlisting>
 
         <para>
-        	En este ejemplo, la facturación y la dirección de envío contienen algunos
-        	campos idénticos, eso significa uno puede sobre escribir al otro. Nosotros podemos
-        	resolver esta solución usando una notación de array:
+            En este ejemplo, la facturación y la dirección de envío contienen algunos
+            campos idénticos, eso significa uno puede sobre escribir al otro. Nosotros podemos
+            resolver esta solución usando una notación de array:
 
-        	In this example, the billing and shipping address contain some
+            In this example, the billing and shipping address contain some
             identical fields, which means one would overwrite the other. We can
             solve this solution using array notation:
         </para>
@@ -146,14 +146,14 @@
 </programlisting>
 
         <para>
-        	En el ejemplo anterior, obtenemos separadas direcciones. En el formulario
-        	sometido, ahora tenemos tres elementos, 'guardar' elemento para someterlo,
-        	y dos arrays, 'envio' y 'cuenta', cada uno con
-        	llaves para los variados elementos.
+            En el ejemplo anterior, obtenemos separadas direcciones. En el formulario
+            sometido, ahora tenemos tres elementos, 'guardar' elemento para someterlo,
+            y dos arrays, 'envio' y 'cuenta', cada uno con
+            llaves para los variados elementos.
         </para>
 
         <para>
-        	<code>Zend_Form</code> intenta automatizar este proceso con los
+            <code>Zend_Form</code> intenta automatizar este proceso con los
             <link linkend="zend.form.forms.subforms">sub formularios</link>. Por
             defecto, los sub formularios son generados usando la notación de array como se muestra
             en el anterior formulario HTML listado completo con identificadores. El nombre del array
@@ -168,18 +168,18 @@
         </para>
 
         <para>
-        	Adicionalmente, existen facilidades que le permiten activar condicionalmente la notación
-        	de un array, así como también especificar el específico array al
-        	cual un elemento o coleccion pertenece:
+            Adicionalmente, existen facilidades que le permiten activar condicionalmente la notación
+            de un array, así como también especificar el específico array al
+            cual un elemento o coleccion pertenece:
         </para>
 
         <itemizedlist>
             <listitem>
                 <para>
-                	<code>Zend_Form::setIsArray($flag)</code>: Definiendo la
-                	bandera a verdadero, se puede indicar que un entero formulario deberia ser
-                	tratado como un array. Por defecto, el nombre del formulario será
-                	usado como el nombre del array, a no ser que
+                    <code>Zend_Form::setIsArray($flag)</code>: Definiendo la
+                    bandera a verdadero, se puede indicar que un entero formulario deberia ser
+                    tratado como un array. Por defecto, el nombre del formulario será
+                    usado como el nombre del array, a no ser que
                     <code>setElementsBelongTo()</code> haya sido llamado. si el
                     formulario no tiene un específico nombre, o si
                     <code>setElementsBelongTo()</code> no ha sido definido, esta bandera
@@ -188,13 +188,13 @@
                 </para>
 
                 <para>
-                	Se deberá determinar si un formulario esta siendo tratado como un array
-                	usando el acceso <code>isArray()</code>.
+                    Se deberá determinar si un formulario esta siendo tratado como un array
+                    usando el acceso <code>isArray()</code>.
                 </para>
             </listitem>
 
             <listitem><para>
-            		<code>Zend_Form::setElementsBelongTo($array)</code>:
+                    <code>Zend_Form::setElementsBelongTo($array)</code>:
                     Usando este método, se puede especificar el nombre de un array al
                     cual todos los elementos del formulario pertenecen. Se puede determinar el
                     nombre usando el accesor <code>getElementsBelongTo()</code>.
@@ -202,8 +202,8 @@
         </itemizedlist>
 
         <para>
-        	Adicionalmente, sobre el nivel del elemento, se puede especificar
-        	elementos individuales que puedan pertenecer a arrays particulares usando
+            Adicionalmente, sobre el nivel del elemento, se puede especificar
+            elementos individuales que puedan pertenecer a arrays particulares usando
             el método <code>Zend_Form_Element::setBelongsTo()</code>.
             Para descubrir el valor que tiene -- sea o no sea definido explicitamente o
             implicitamente a través del formulario -- se puede usar el
@@ -215,31 +215,31 @@
         <title>Formularioss Multi-Página</title>
 
         <para>
-        	Actualmente, los formularios multi-página no son oficialmente soportados in
+            Actualmente, los formularios multi-página no son oficialmente soportados in
             <code>Zend_Form</code>; sin embargo, mas soporte para implementarlos
             esta disponible y puede ser utilizado con una pequeña ayuda.
         </para>
 
         <para>
-        	La clave para crear fomrularios multi-página es utilizar sub formularios, pero
-        	solo para desplegar un solo sub formulario por página. Esto le permite
-        	someter un solo sub formulario a la vez y validarlo, pero no procesar
-        	el formulario hasta que todos los sub formularios esten completos.
+            La clave para crear fomrularios multi-página es utilizar sub formularios, pero
+            solo para desplegar un solo sub formulario por página. Esto le permite
+            someter un solo sub formulario a la vez y validarlo, pero no procesar
+            el formulario hasta que todos los sub formularios esten completos.
         </para>
 
         <example id="zend.form.advanced.multiPage.registration">
             <title>Ejemplo de formulario registración</title>
             <para>
-            	Vamos a usar un formulario registración como un ejemplo. para nuestros propósitos,
-            	nosotros queremos capturar el nombre del usuario y la contraseña en la
-            	primera página, despues la información del usuario -- nombre, apellido,
-            	y ubicación -- y finalmente prmitirles decidir que lista de correo,
-            	si ellos desean suscribirse.
+                Vamos a usar un formulario registración como un ejemplo. para nuestros propósitos,
+                nosotros queremos capturar el nombre del usuario y la contraseña en la
+                primera página, despues la información del usuario -- nombre, apellido,
+                y ubicación -- y finalmente prmitirles decidir que lista de correo,
+                si ellos desean suscribirse.
             </para>
 
             <para>
-            	Primero, vamos a crear nuestro propio formulario, y definir varios subformularios
-            	dentro del mismo:
+                Primero, vamos a crear nuestro propio formulario, y definir varios subformularios
+                dentro del mismo:
             </para>
 
             <programlisting role="php"><![CDATA[
@@ -345,13 +345,13 @@ class My_Form_Registration extends Zend_Form
             </programlisting>
 
             <para>
-            	Note que hay botones de sometimiento, y que ni hemos hecho
-            	nada con el decorador de sub formularios -- lo que significa que por
-            	defecto serán desplegados como campos. Necesitaremos hacer
-            	algo con ellos mientras desplegamos cada sub formulario indivisualmente,
-            	y adicionar botones demanera que podamos actualmente procesarlos --
-            	el cual requerira las propiedades acción y método. vamos adicionar
-            	algunos scaffolding a nuestras clases para proveer esa información:
+                Note que hay botones de sometimiento, y que ni hemos hecho
+                nada con el decorador de sub formularios -- lo que significa que por
+                defecto serán desplegados como campos. Necesitaremos hacer
+                algo con ellos mientras desplegamos cada sub formulario indivisualmente,
+                y adicionar botones demanera que podamos actualmente procesarlos --
+                el cual requerira las propiedades acción y método. vamos adicionar
+                algunos scaffolding a nuestras clases para proveer esa información:
             </para>
 
             <programlisting role="php"><![CDATA[
@@ -434,20 +434,20 @@ class My_Form_Registration extends Zend_Form
             </programlisting>
 
             <para>
-            	Siguiente, necesitamos adicionar scaffolding en nuestro controlador acción,
+                Siguiente, necesitamos adicionar scaffolding en nuestro controlador acción,
 
-            	y tener muchas consideraciones. Primero, necesitamos asegurar que
-            	persiste la información del formulario entre los requerimientos, de esa manera determinar
-            	cuadno terminar. Segundo, necesitamos alguna lógica para determinar que segmentos
-            	del formulario han sido sometidos, y que sub formulario
-            	desplegar de acuerdo a la información. Usaremos
+                y tener muchas consideraciones. Primero, necesitamos asegurar que
+                persiste la información del formulario entre los requerimientos, de esa manera determinar
+                cuadno terminar. Segundo, necesitamos alguna lógica para determinar que segmentos
+                del formulario han sido sometidos, y que sub formulario
+                desplegar de acuerdo a la información. Usaremos
                 <code>Zend_Session_Namespace</code> para persistir la información, el cual
                 nos ayudará a responder la pregunta de cual formulario someter.
             </para>
 
             <para>
-            	Vamos a crear nuestro controlador, y adicionar un método para recuperar un
-            	formulario instanciado:
+                Vamos a crear nuestro controlador, y adicionar un método para recuperar un
+                formulario instanciado:
             </para>
 
             <programlisting role="php"><![CDATA[
@@ -467,13 +467,13 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
 
             <para>
-            	Ahora, vamos adicionar algunas funcionalidades para determinar cual formulario
-            	desplegar. Basicamente, hasta que el entero formulario sea considerado válido,
-            	necesitamos continuar desplegando segmentos de formulario. Adicionalmente,
-            	queremos asegurar que estan en un orden particular: usuario,
-            	demog, y despues las listas. Podemos determinar que información ha sido
-            	sometida verificando nuestra sesión namespace para claves particulares
-            	representando cada sub formulario.
+                Ahora, vamos adicionar algunas funcionalidades para determinar cual formulario
+                desplegar. Basicamente, hasta que el entero formulario sea considerado válido,
+                necesitamos continuar desplegando segmentos de formulario. Adicionalmente,
+                queremos asegurar que estan en un orden particular: usuario,
+                demog, y despues las listas. Podemos determinar que información ha sido
+                sometida verificando nuestra sesión namespace para claves particulares
+                representando cada sub formulario.
             </para>
 
             <programlisting role="php"><![CDATA[
@@ -571,7 +571,7 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
 
             <para>
-            	El método de arriba nos permite usar notaciones tal como "<code>$subForm =
+                El método de arriba nos permite usar notaciones tal como "<code>$subForm =
                     $this-&gt;getCurrentSubForm();</code>" recuperar el actual
                 sub formulario para la validación, o "<code>$next =
                     $this-&gt;getNextSubForm();</code>" obtener el siguiente para
@@ -579,22 +579,22 @@ class RegistrationController extends Zend_Controller_Action
             </para>
 
             <para>
-            	Ahora, vamos a encontrar la manera para procesar y desplegar varios
-            	sub formularios. pdemos usar <code>getCurrentSubForm()</code> para determianr
-            	si algún sub formulario ha sido sometido (falso retorna ningún valor
-            	ha sido desplegado o sometido), y
+                Ahora, vamos a encontrar la manera para procesar y desplegar varios
+                sub formularios. pdemos usar <code>getCurrentSubForm()</code> para determianr
+                si algún sub formulario ha sido sometido (falso retorna ningún valor
+                ha sido desplegado o sometido), y
                 <code>getNextSubForm()</code> recupera el formulario a desplegar. Podemos
                 entonces usar el método del formulario <code>prepareSubForm()</code> para asegurar
                 que el formulario esta listo para desplegar.
             </para>
 
             <para>
-            	Cuando tenemos un formulario sometido, podemos validar el sub formulario,
-            	y luego verificar si el entero formulario es válido ahora. Para hacer
-            	esas tareas, necesitamos métodos adicionales que aseguren que la
-            	información sometida es adicionada a la sesión, y que cuando validamos
-            	el entero formulario, nosotros validamos contra todos los segmentos de
-            	la sesión:
+                Cuando tenemos un formulario sometido, podemos validar el sub formulario,
+                y luego verificar si el entero formulario es válido ahora. Para hacer
+                esas tareas, necesitamos métodos adicionales que aseguren que la
+                información sometida es adicionada a la sesión, y que cuando validamos
+                el entero formulario, nosotros validamos contra todos los segmentos de
+                la sesión:
             </para>
 
             <programlisting role="php"><![CDATA[
@@ -640,9 +640,9 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
 
             <para>
-            	Ahora que tenemos el trabajo preparado, vamos a construir las
-            	acciones para este controlador. Necesitaremos una página landing
-            	para el formulario, y luego un 'proceso' acción para procesar el formulario.
+                Ahora que tenemos el trabajo preparado, vamos a construir las
+                acciones para este controlador. Necesitaremos una página landing
+                para el formulario, y luego un 'proceso' acción para procesar el formulario.
             </para>
 
             <programlisting role="php"><![CDATA[
@@ -688,18 +688,18 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
 
             <para>
-            	Como se ha notado, el código actual para procesar el formulario es
-            	relativamente simple. Verificamos si tenemos un actual sub formulario
-            	sometido y si no, retornamos a la página landing. Si tenemos
-            	un sub formulario, intentaremos validarlo, redesplagandolo si tiene
-            	fallas. Si el sub formulario es válido, entonces verificaremos si
-            	el formulario es válido, lo que debería indicar hemos terminado; si no,
-            	desplegaremos el siguiente segmento del formulario. Finalmente, desplegaremos una
-            	página de verificación con el contenido de la sesión.
+                Como se ha notado, el código actual para procesar el formulario es
+                relativamente simple. Verificamos si tenemos un actual sub formulario
+                sometido y si no, retornamos a la página landing. Si tenemos
+                un sub formulario, intentaremos validarlo, redesplagandolo si tiene
+                fallas. Si el sub formulario es válido, entonces verificaremos si
+                el formulario es válido, lo que debería indicar hemos terminado; si no,
+                desplegaremos el siguiente segmento del formulario. Finalmente, desplegaremos una
+                página de verificación con el contenido de la sesión.
             </para>
 
             <para>
-            	La vista de scripts son muy simples:
+                La vista de scripts son muy simples:
             </para>
 
             <programlisting role="php"><![CDATA[
@@ -737,10 +737,10 @@ endforeach ?>
             </programlisting>
 
             <para>
-            	Próximas novedades de Zend Framework incluirán componentes
-            	para hacer formularios multi páginas mas simple extrayendo la sesión y
-            	el lógico orden. Mientras tanto, el ejemplo de arriba debería servir
-            	como guia razonable en como alcanzar la tarea para su sitio.
+                Próximas novedades de Zend Framework incluirán componentes
+                para hacer formularios multi páginas mas simple extrayendo la sesión y
+                el lógico orden. Mientras tanto, el ejemplo de arriba debería servir
+                como guia razonable en como alcanzar la tarea para su sitio.
             </para>
         </example>
     </sect2>

+ 1502 - 1502
documentation/manual/es/module_specs/Zend_Form-Elements.xml

@@ -1,1502 +1,1502 @@
-<sect1 id="zend.form.elements">
-    <title>Creando elementos de formulario usando Zend_Form_Element</title>
-
-    <para>
-        Un formulario esta compuesto de elementos, que normalmente corresponden
-        al  elemento HTML input. <code>Zend_Form_Element</code> encapsula
-        elementos de formulario individualmente, con las siguientes áreas de
-        responsabilidad:
-    </para>
-
-    <itemizedlist>
-        <listitem>
-            <para>
-                validación (¿los datos enviados son válidos?)
-            </para>
-
-            <itemizedlist>
-                <listitem><para>captura de códigos y mensajes de error</para></listitem>
-            </itemizedlist>
-        </listitem>
-
-        <listitem><para>
-            filtrado (¿cómo es escapado y normalizado el elemento para su
-            validación y/o salida?
-        </para></listitem>
-
-        <listitem><para>
-            generación (¿cómo es mostrado el elemento?)
-        </para></listitem>
-
-        <listitem><para>
-            metadatos y atributos (¿qué información amplía la definición del
-            elemento?)
-        </para></listitem>
-    </itemizedlist>
-
-    <para>
-        La clase base, <code>Zend_Form_Element</code>, funciona por defecto para
-        varios casos, pero es mejor extender la clase para elementos con fines
-        especiales de uso común. Adicionalmente, Zend Framework contiene un
-        número de elementos XHTML estándar; puede leer de ellos <link linkend="zend.form.standardElements">en el capítulo Elementos
-        Estándares</link>
-    </para>
-
-    <sect2 id="zend.form.elements.loaders">
-        <title>Cargadores de Plugin</title>
-
-        <para>
-            <code>Zend_Form_Element</code> hace uso de <link linkend="zend.loader.pluginloader">Zend_Loader_PluginLoader</link>
-            para permitir a los desarrolladores especificar ubicaciones de
-            validadores, filtros y decoradores alternos. Cada uno tiene su
-            propio cargador de plugin asociado a él y métodos de acceso
-            generales usados para su recuperación y modificación.
-        </para>
-
-        <para>
-            Los siguientes tipos de cargadores son usados con los varios métodos
-            del cargador de plugin: 'validate', 'filter', y 'decorator'. Los
-            nombres son sensibles a mayúsculas y minúsculas.
-        </para>
-
-        <para>
-            Los métodos usados para interactuar con los cargadores de plugin son
-            los siguientes:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                <code>setPluginLoader($loader, $type)</code>:
-                <code>$loader</code> es el propio objeto cargador, mientras
-                <code>$type</code> es uno de los tipos arriba mencionados. Esto
-                establece el cargador de plugin para el tipo dado en el objeto
-                cargador recién especificado.
-            </para></listitem>
-
-            <listitem><para>
-                <code>getPluginLoader($type)</code>: obtiene el cargador de
-                plugin asociado con <code>$type</code>.
-            </para></listitem>
-
-            <listitem><para>
-                <code>addPrefixPath($prefix, $path, $type = null)</code>: agrega
-                una asociación prefijo/ruta para el cargador especificado por
-                <code>$type</code>. Si <code>$type</code> es null, se intentará
-                agregar la ruta a todos los cargadores, añadiendo el prefijo a
-                cada "_Validate", "_Filter" y "_Decorator"; y agregandole
-                "Validate/", "Filter/" y "Decorator/" a la ruta. Si tiene todas
-                sus clases extras para elementos de formulario dentro de
-                una jerarquía común, este método es conveniente para establecer
-                el prefijo para todas ellas.
-            </para></listitem>
-
-            <listitem><para>
-                <code>addPrefixPaths(array $spec)</code>: le permite añadir
-                varias rutas de una sola vez a uno o más cargadores de plugin.
-                Se espera cada elemento de la matriz sea un array con claves
-                'path', 'prefix', y 'type'.
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            Validadores, filtros y decoradores personalizados son una manera
-            simple de compartir funcionalidad entre formularios y encapsular
-            funcionalidad personalizada.
-        </para>
-
-        <example id="zend.form.elements.loaders.customLabel">
-            <title>Etiqueta personalizada</title>
-
-            <para>
-                Un uso común de los plugins es proveer reemplazos para las
-                clases estándares. Por ejemplo, si desea proveer una implementación diferente
-                 del decorador 'Label' -- por ejemplo, para
-                añadir siempre dos puntos -- puede crear su  propio decorador
-                'Label' con su propio prefijo de clase, y entonces añadirlo a su
-                prefijo de ruta.
-            </para>
-
-            <para>
-                Comencemos con un decorador de etiqueta personalizado. Le
-                daremos el prefijo "My_Decorator", y la clase estará en el
-                archivo "My/Decorator/Label.php".
-            </para>
-
-            <programlisting role="php"><![CDATA[
-class My_Decorator_Label extends Zend_Form_Decorator_Abstract
-{
-    protected $_placement = 'PREPEND';
-
-    public function render($content)
-    {
-        if (null === ($element = $this->getElement())) {
-            return $content;
-        }
-        if (!method_exists($element, 'getLabel')) {
-            return $content;
-        }
-
-        $label = $element->getLabel() . ':';
-
-        if (null === ($view = $element->getView())) {
-            return $this->renderLabel($content, $label);
-        }
-
-        $label = $view->formLabel($element->getName(), $label);
-
-        return $this->renderLabel($content, $label);
-    }
-
-    public function renderLabel($content, $label)
-    {
-        $placement = $this->getPlacement();
-        $separator = $this->getSeparator();
-
-        switch ($placement) {
-            case 'APPEND':
-                return $content . $separator . $label;
-            case 'PREPEND':
-            default:
-                return $label . $separator . $content;
-        }
-    }
-}
-]]>
-            </programlisting>
-
-            <para>
-                Ahora diremos al elemento que use esta ruta cuando busque por
-                decoradores:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$element->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
-]]>
-            </programlisting>
-
-            <para>
-                Alternativamente, podemos hacerlo en el formulario para asegurar
-                que todos los decoradores usen esta ruta:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$form->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
-]]>
-            </programlisting>
-
-            <para>
-                Con esta ruta añadida, cuando agregue un decorador, la ruta
-                'My/Decorator' será consultada primero en búsqueda de la
-                existencia del decorador en este lugar. Como resultado,
-                'My_Decorator_Label' ahora será utilizado cuando el decorador
-                'Label' sea requerido.
-            </para>
-        </example>
-    </sect2>
-
-    <sect2 id="zend.form.elements.filters">
-        <title>Filters</title>
-
-        <para>
-            A menudo es útil y/o necesario realizar alguna normalización en la
-            entrada antes de la validación – por ejemplo, puede querer eliminar
-            todo el HTML, pero realizar las validaciones sobre lo restante para
-            asegurarse que el envío es válido. O puede eliminar los espacios en
-            blanco al inicio o fin de la entrada para asegurarse de que un validador
-            StringLenth (longitud de la cadena) no regrese un positivo falso. Estas
-            operaciones pueden realizarse usando <code>Zend_Filter</code>, y
-            <code>Zend_Form_Element</code> que soportan cadenas de filtros,
-            permitiéndole especificar múltiples filtros secuenciales a utilizar.
-            El filtrado sucede tanto en la validación como cuando recupera el
-            valor del elemento vía <code>getValue()</code>:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$filtered = $element->getValue();
-
-]]>
-        </programlisting>
-
-        <para>
-            Los filtros pueden ser agregados a la pila de dos maneras:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                pasándolo en una instancia de filtro específica
-            </para></listitem>
-
-            <listitem><para>
-                proveyendo un nombre de filtro – el correspondiente nombre
-                corto o completo de la clase
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            Veamos algunos ejemplos:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-// Instancia específica del filtro
-$element->addFilter(new Zend_Filter_Alnum());
-
-// El correspondiente nombre completo de la clase:
-$element->addFilter('Zend_Filter_Alnum');
-
-// Nombre corto del filtro:
-$element->addFilter('Alnum');
-$element->addFilter('alnum');
-]]>
-        </programlisting>
-
-        <para>
-            Los nombres cortos son típicamente el nombre del filtro sin el
-            prefijo. En el caso predeterminado, esto se refiere a sin el prefijo
-            'Zend_Filter_'. Además, la primera letra no necesita estar en
-            mayúscula.
-        </para>
-
-        <note>
-            <title>Usando clases de filtros personalizados</title>
-
-            <para>
-                Si tiene su propio conjunto de clases de filtro, puede
-                informarle de ellas a <code>Zend_Form_Element</code> usando
-                <code>addPrefixPath()</code>. Por ejemplo, si tiene filtros
-                con el prefijo 'My_Filter', puede indicárselo a
-                <code>Zend_Form_Element</code> de la siguiente manera:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$element->addPrefixPath('My_Filter', 'My/Filter/', 'filter');
-]]>
-            </programlisting>
-
-            <para>
-                (Recuerde que el tercer argumento indica el cargador de plugin
-                sobre el cual ha de ejecutarse la acción.)
-            </para>
-        </note>
-
-        <para>
-            Si en algún momento necesita un valor no filtrado, use el método
-            <code>getUnfilteredValue()</code>:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$unfiltered = $element->getUnfilteredValue();
-]]>
-        </programlisting>
-
-        <para>
-            Para mayor información sobre filtros, vea la <link linkend="zend.filter.introduction">documentación de
-                Zend_Filter</link>.
-        </para>
-
-        <para>
-            Métodos asociados con filtros incluyen:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                <code>addFilter($nameOfFilter, array $options = null)</code>
-            </para></listitem>
-
-            <listitem><para>
-                <code>addFilters(array $filters)</code>
-            </para></listitem>
-
-            <listitem><para>
-                <code>setFilters(array $filters)</code> (sobreescribe todos los
-                filtros)
-            </para></listitem>
-
-            <listitem><para>
-                <code>getFilter($name)</code> (recupera un objeto filtro por su
-                nombre)
-            </para></listitem>
-
-            <listitem><para>
-                <code>getFilters()</code> (recupera todos los filtros)
-            </para></listitem>
-
-            <listitem><para>
-                <code>removeFilter($name)</code> (elimina un filtro por su
-                nombre)
-            </para></listitem>
-
-            <listitem><para>
-                <code>clearFilters()</code> (elimina todos los filtros)
-            </para></listitem>
-        </itemizedlist>
-    </sect2>
-
-    <sect2 id="zend.form.elements.validators">
-        <title>Validadores</title>
-
-        <para>
-            Si sigue el mantra de seguridad "filtrar la entrada, escapar la
-            salida" querrá validar ("filtrar la entrada") los datos de los
-            formularios. En <code>Zend_Form</code> cada elemento contiene su
-            propia cadena de validadores, consistente en validadores
-            <code>Zend_Validate_*</code>.
-        </para>
-
-        <para>
-            Los validadores pueden ser agregados de dos maneras:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                pasándolo en una instancia de validador específica
-            </para></listitem>
-
-            <listitem><para>
-                proveyendo un nombre de validador – el correspondiente nombre
-                corto o completo de clase
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            Veamos algunos ejemplos:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-// Instancia específica del validador:
-$element->addValidator(new Zend_Validate_Alnum());
-
-// El correspondiente nombre completo de la clase:
-$element->addValidator('Zend_Validate_Alnum');
-
-// Nombre corto del validador:
-$element->addValidator('Alnum');
-$element->addValidator('alnum');
-]]>
-        </programlisting>
-
-        <para>
-            Los nombres cortos son típicamente el nombre del validador sin el
-            prefijo. En el caso predeterminado, esto se refiere a sin el prefijo
-            'Zend_Validate_'. Además, la primera letra no necesita estar en
-            mayúscula.
-        </para>
-
-        <note>
-            <title>Usando clases de validación personalizadas</title>
-
-            <para>
-                Si tiene su propio conjunto de clases de validación, puede
-                informarle de ellas a <code>Zend_Form_Element</code> usando
-                <code>addPrefixPath()</code>. Por ejemplo, si tiene validadores
-                con el prefijo 'My_Validator', puede indicárselo a
-                <code>Zend_Form_Element</code> de la siguiente manera:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$element->addPrefixPath('My_Validator', 'My/Validator/', 'validate');
-]]>
-            </programlisting>
-
-            <para>
-                (Recuerde que el tercer argumento indica el cargador de plugin
-                sobre el cual ha de ejecutarse la acción.)
-            </para>
-        </note>
-
-        <para>
-            Si el fallo de un validador debe evitar validaciones posteriores,
-            pase el boleano <code>true</code> como segundo parámetro:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$element->addValidator('alnum', true);
-]]>
-        </programlisting>
-
-        <para>
-            Si está usando la cadena nombre para añadir el validador, y la clase
-            del validador acepta argumentos para su constructor, puede pasarlos
-            a el tercer parámetro de <code>addValidator()</code> como un
-            array:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$element->addValidator('StringLength', false, array(6, 20));
-]]>
-        </programlisting>
-
-        <para>
-            Los argumentos pasados de esta manera deben estar en el orden en el
-            cual son definidos en el constructor. El ejemplo de arriba
-            instanciará la clase <code>Zend_Validate_StringLenth</code> con los
-            parámetros <code>$min</code> y <code>$max</code>:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$validator = new Zend_Validate_StringLength(6, 20);
-]]>
-        </programlisting>
-
-        <note>
-            <title>Estipulando mensajes de error de validación personalizados</title>
-
-            <para>
-                Algunos desarrolladores querrán estipular mensajes de error
-                personalizados para un validador. El argumento
-                <code>$options</code> de
-                <code>Zend_Form_Element::addValidator()</code> le permite
-                hacerlo proporcionando la clave 'messages' y estableciendolos en
-                un array de pares clave/valor para especificar las plantillas
-                de mensaje. Necesitará conocer los códigos de error de los
-                diferentes tipos de error de un validador en particular.
-            </para>
-
-            <para>
-                Una opción mejor es usar <code>Zend_Translate_Adapter</code>
-                con su formulario. Los códigos de error son automáticamente
-                pasados al adaptador por el decorador Errors por defecto; puede
-                especificar su propias cadenas de mensaje de error mediante la
-                creación de traducciones para los varios códigos de error de
-                sus validadores.
-            </para>
-        </note>
-
-        <para>
-            Puede también establecer varios validadores a la vez, usando
-            <code>addValidators()</code>. Su uso básico es pasar una matriz de
-            arrays, donde cada array contenga de 1 a 3 valores,
-            correspondientes al constructor de <code>addValidator()</code>:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$element->addValidators(array(
-    array('NotEmpty', true),
-    array('alnum'),
-    array('stringLength', false, array(6, 20)),
-));
-]]>
-        </programlisting>
-
-        <para>
-            Si quiere ser más detallado o explícito, puede utilizar las claves
-            'validator', 'breakChainOnFailure', y 'options' en el array:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$element->addValidators(array(
-    array(
-        'validator'           => 'NotEmpty',
-        'breakChainOnFailure' => true),
-    array('validator' => 'alnum'),
-    array(
-        'validator' => 'stringLength',
-        'options'   => array(6, 20)),
-));
-]]>
-        </programlisting>
-
-        <para>
-            Este uso es bueno para ilustrar cómo puede configurar validadores
-            en un archivo de configuración:
-        </para>
-
-        <programlisting role="ini"><![CDATA[
-element.validators.notempty.validator = "NotEmpty"
-element.validators.notempty.breakChainOnFailure = true
-element.validators.alnum.validator = "Alnum"
-element.validators.strlen.validator = "StringLength"
-element.validators.strlen.options.min = 6
-element.validators.strlen.options.max = 20
-]]>
-</programlisting>
-
-        <para>
-            Note que cada elemento tiene una clave, la necesite o no; esta es
-            una limitación del uso de archivos de configuración -- pero también
-            ayuda a hacer más explicito el para qué son usados los argumentos.
-            Sólo recuerde que cualesquiera opciones del validador deben ser
-            especificadas en orden.
-        </para>
-
-        <para>
-            Para validar un elemento, pase el valor a
-            <code>isValid()</code>:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-if ($element->isValid($value)) {
-    // válido
-} else {
-    // no válido
-}
-]]>
-        </programlisting>
-
-        <note>
-            <title>Validación operando en valores filtrados</title>
-
-            <para>
-                <code>Zend_Form_Element::isValid()</code> siempre filtra los
-                valores antes de la validación a través de la cadena de filtros.
-                Vea <link linkend="zend.form.elements.filters">la sección de
-                filtros</link> para más información.
-            </para>
-        </note>
-
-        <note>
-            <title>Contexto de validación</title>
-
-            <para>
-                <code>Zend_Form_Element::isValid()</code> soporta un argumento
-                adicional, <code>$context</code>.
-                <code>Zend_Form::isValid()</code> pasa todo el conjunto de datos
-                procesados a <code>$context</code> cuando valida un formulario,
-                y <code>Zend_Form_Element::isValid()</code>, a su vez, lo pasa a
-                cada validador. Esto significa que puede escribir validadores
-                que son conscientes de los datos pasados a otros elementos del
-                formulario. Como ejemplo, considere un formulario de registro
-                estándar que tiene campos para la contraseña y la confirmación
-                de la contraseña; una validación sería que los dos campos
-                coincidan. Este validador puede tener un aspecto como el
-                siguiente:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-class My_Validate_PasswordConfirmation extends Zend_Validate_Abstract
-{
-    const NOT_MATCH = 'notMatch';
-
-    protected $_messageTemplates = array(
-        self::NOT_MATCH => 'Password confirmation does not match'
-    );
-
-    public function isValid($value, $context = null)
-    {
-        $value = (string) $value;
-        $this->_setValue($value);
-
-        if (is_array($context)) {
-            if (isset($context['password_confirm'])
-                && ($value == $context['password_confirm']))
-            {
-                return true;
-            }
-        } elseif (is_string($context) && ($value == $context)) {
-            return true;
-        }
-
-        $this->_error(self::NOT_MATCH);
-        return false;
-    }
-}
-]]>
-            </programlisting>
-        </note>
-
-        <para>
-            Los validadores son procesados en orden. Cada validador es
-            procesado, a menos que un validador creado con un valor true para
-            <code>breakChainOnFailure</code> falle su validación. Asegúrese de
-            especificar sus validadores en un orden razonable.
-        </para>
-
-        <para>
-            Después de una validación fallida, puede recuperar los códigos y
-            mensajes de error de la cadena del validador:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$errors   = $element->getErrors();
-$messages = $element->getMessages();
-]]>
-        </programlisting>
-
-        <para>
-            (Nota: los mensajes de error retornados son un array asociativo de
-            pares código / mensaje de error.)
-        </para>
-
-        <para>
-            En adición a los validadores, puede especificar que un elemento es
-            necesario, usando <code>setRequired(true)</code>. Por defecto, esta
-            bandera es false, lo que significa que pasará su cadena de 
-            validadores si ningún valor es pasado a <code>isValid()</code>.
-            Puede modificar este comportamiento en un número de maneras:
-        </para>
-
-        <itemizedlist>
-            <listitem>
-                <para>
-                    Por defecto, cuando un elemento es requerido, una bandera,
-                    'allowEmpty', también es true. Esto quiere decir que si un
-                    valor empty es evaluado pasándolo a <code>isValid()</code>,
-                    los validadores serán saltados. Puede intercalar esta
-                    bandera usando el método de acceso
-                    <code>setAllowEmpty($flag)</code>; cuando la bandera es
-                    false, si un valor es pasado, los validadores seguirán
-                    ejecutándose.
-                </para>
-            </listitem>
-
-            <listitem>
-                <para>
-                    Por defecto, si un elemento es requerido, pero no contiene
-                    un validador 'NotEmpty', <code>isValid()</code> añadirá uno
-                    en la cima de la pila, con la bandera
-                    <code>breakChainOnFailure</code> establecido. Esto hace que
-                    la bandera requerida tenga un significado semántico: si
-                    ningún valor es pasado, inmediatamente invalidamos el envío
-                    y se le notifica al usuario, e impedimos que otros
-                    validadores se ejecuten en lo que ya sabemos son datos
-                    inválidos.
-                </para>
-
-                <para>
-                    Si no quiere este comportamiento, puede desactivarlo pasando
-                    un valor false a
-                    <code>setAutoInsertNotEmptyValidator($flag)</code>; esto
-                    prevendrá a <code>isValid()</code> de colocar un validador
-                    'NotEmpty' en la cadena de validaciones.
-                </para>
-            </listitem>
-        </itemizedlist>
-
-        <para>
-            Para mayor información sobre validadores, vea la <link linkend="zend.validate.introduction">documentación de
-                Zend_Validate</link>.
-        </para>
-
-        <note>
-            <title>Usando Zend_Form_Elements como validador de propósito general</title>
-
-            <para>
-                <code>Zend_Form_Element</code> implementa
-                <code>Zend_Validate_Interface</code>, significando un elemento
-                puede también usarse como un validador en otro, cadenas de
-                validación no relacionadas al formulario.
-            </para>
-        </note>
-
-        <para>
-            Métodos asociados con validación incluyen:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                    <code>setRequired($flag)</code> y
-                    <code>isRequired()</code> permiten establecer y recuperar el
-                    estado de la bandera 'required'. Cuando se le asigna un
-                    booleano <code>true</code>, esta bandera requiere que el
-                    elemento esté presente en la información procesada por
-                    <code>Zend_Form</code>.
-            </para></listitem>
-
-            <listitem><para>
-                    <code>setAllowEmpty($flag)</code> y
-                    <code>getAllowEmpty()</code> permiten modificar el
-                    comportamiento de elementos opcionales (p.e., elementos
-                    donde la bandera required es false). Cuando la bandera 
-                    'allow empty' es true, valores vacíos no pasarán la cadena
-                    de validadores.
-            </para></listitem>
-
-            <listitem><para>
-                    <code>setAutoInsertNotEmptyValidator($flag)</code> permite
-                    especificar si realmente un validador 'NotEmpty' será
-                    añadido el inicio de la cadena de validaciones cuando un
-                    elemento es requerido. Por defecto, esta bandera es true.
-            </para></listitem>
-
-            <listitem><para>
-                <code>addValidator($nameOrValidator, $breakChainOnFailure = false, array $options = null)</code>
-            </para></listitem>
-
-            <listitem><para>
-                <code>addValidators(array $validators)</code>
-            </para></listitem>
-
-            <listitem><para>
-                <code>setValidators(array $validators)</code> (sobreescribe todos los validadores)
-            </para></listitem>
-
-            <listitem><para>
-                <code>getValidator($name)</code> (recupera un objeto validador por nombre)
-            </para></listitem>
-
-            <listitem><para>
-                <code>getValidators()</code> (recupera todos los validadores)
-            </para></listitem>
-
-            <listitem><para>
-                <code>removeValidator($name)</code> (elimina un validador por nombre)
-            </para></listitem>
-
-            <listitem><para>
-                <code>clearValidators()</code> (elimina todos los validadores)
-            </para></listitem>
-        </itemizedlist>
-
-        <sect3 id="zend.form.elements.validators.errors">
-            <title>Errores de mensaje personalizados</title>
-
-            <para>
-                Alguna veces, querrá especificar uno o más mensajes de error para
-                usarlos en lugar de los mensajes de error generados por los
-                validadores adjuntos a los elementos. Adicionalmente, algunas
-                veces usted mismo querrá marcar al elemento como inválido. A
-                partir de 1.6.0, esta funcionalidad es posible vía los
-                siguientes métodos.
-            </para>
-
-            <itemizedlist>
-                <listitem><para>
-                    <code>addErrorMessage($message)</code>: añade un mensaje de
-                    error para mostrarlos en forma de errores de validación. Puede
-                    llamarlo más de una vez, y los nuevos mensajes nuevos son
-                    añadidos a la pila.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>addErrorMessages(array $messages)</code>: añade
-                    múltiples mensajes de error para mostrarlos en forma de errores de
-                    validación.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>setErrorMessages(array $messages)</code>: añade
-                    múltiples mensajes de error para mostrarlos en forma de errores de
-                    validación, sobreescribiendo todos los mensajes de error
-                    previamente establecidos.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>getErrorMessages()</code>: recupera la lista de
-                    mensajes de error personalizados que fueron definidos.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>clearErrorMessages()</code>: remueve todos los
-                    mensajes de error personalizados que hayan sido definidos.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>markAsError()</code>: marca al elemento como que falló
-                    la validación.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>hasErrors()</code>: determina si el elemento ha
-                    fallado la validación o ha sido marcado como inválido.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>addError($message)</code>: añade un mensaje a la pila
-                    de mensaje de error personalizados y marca al elemento como
-                    inválido.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>addErrors(array $messages)</code>: añade varios
-                    mensajes a la pila de mensajes de error personalizados y
-                    marca al elemento como inválido.
-                </para></listitem>
-
-                <listitem><para>
-                    <code>setErrors(array $messages)</code>: sobreescribe el
-                    mensaje de error personalizado en la pila con los mensajes
-                    previstos y marca al elemento como inválido.
-                </para></listitem>
-            </itemizedlist>
-
-            <para>
-                Todos los errores establecidos de este modo pueden ser
-                traducidos. Adicionalmente, puede insertar el marcador "%value%"
-                para representar el valor del elemento; este valor actual del
-                elemento será sustituido cuando el mensaje de error sea
-                recuperado.
-            </para>
-        </sect3>
-    </sect2>
-
-    <sect2 id="zend.form.elements.decorators">
-        <title>Decoradores</title>
-
-        <para>
-            Una dolencia particular para muchos desarrolladores web es la creación
-            del XHTML para formularios por ellos mismos. Para cada elemento, el
-            desarrollador necesita crear la marcación para el elemento mismo,
-            comúnmente una etiqueta (label), y, si son amables con sus usuarios,
-            la marcación para mostrar mensajes de errores de validación. Cuanto
-            más elementos en una página, menos trivial se convierte esta tarea.
-        </para>
-
-        <para>
-            <code>Zend_Form_Element</code> intenta resolver este problema mediante
-            el uso de "decoradores". Los decoradores son clases simples que tienen
-            métodos de acceso al elemento y métodos para generar el contenido. Para
-            obtener mayor información sobre cómo trabajan los decoradores, consulte
-            por favor  la sección sobre
-            <link linkend="zend.form.decorators">Zend_Form_Decorator</link>.
-        </para>
-
-        <para>
-            Los decoradores usados por defecto por
-            <code>Zend_Form_Element</code> son:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                <emphasis>ViewHelper</emphasis>: especifica un view helper que
-                usar para general el elemento. El atributo 'helper' del elemento
-                puede usarse para especificar qué auxiliar vista usar. Por
-                defecto, <code>Zend_Form_Element</code> especifica el auxiliar
-                vista 'formText', pero cada subclase especifica diferentes
-                auxiliares.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>Errors</emphasis>: añade mensajes de error al elemento
-                usando <code>Zend_View_Helper_FormErrors</code>. Si no está
-                presente, no se añade nada.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>Description</emphasis>: añade la descripción del
-                elemento. Si no está presente, no se añade nada. Por defecto, la
-                descripción es generada dentro de una etiqueta &lt;p&gt; con un
-                class 'description'.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>HtmlTag</emphasis>: envuelve el elemento y los errores
-                en una etiqueta HTML &lt;dd&gt;.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>Label</emphasis>: añade al comienzo una etiqueta al
-                elemento usando <code>Zend_View_Helper_FormLabel</code>, y
-                envolviéndola en una etiqueta &lt;dt&gt;. Si ninguna etiqueta es
-                provista, solo la etiqueta de la definición es generada.
-            </para></listitem>
-        </itemizedlist>
-
-        <note>
-            <title>Decoradores por defecto no necesitan ser cargados</title>
-
-            <para>
-                Por defecto, los decoradores por defecto son cargados durante la
-                inicialización del objeto. Puede deshabilitar esto pasando la
-                opción 'disableLoadDefaultDecorators' al constructor:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-$element = new Zend_Form_Element('foo',
-                                 array('disableLoadDefaultDecorators' =>
-                                      true)
-                                );
-]]>
-            </programlisting>
-
-            <para>
-                Esta opción puede ser combinada junto con cualquier otra opción que
-                pase, ya sea como un array de opciones o en un objeto
-                <code>Zend_Config</code>.
-            </para>
-        </note>
-
-        <para>
-            Ya que el orden en el cual los decoradores son registrados importa
-            -- el primer decorador registrado es ejecutado primero -- necesitará
-            estar seguro de registrar sus decoradores en el orden apropiado, o
-            asegurarse de que estableció las opciones de colocación en el modo apropiado. Por
-            dar un ejemplo, aquí esta el código que registran los decoradores
-            por defecto:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$this->addDecorators(array(
-    array('ViewHelper'),
-    array('Errors'),
-    array('Description', array('tag' => 'p', 'class' => 'description')),
-    array('HtmlTag', array('tag' => 'dd')),
-    array('Label', array('tag' => 'dt')),
-));
-]]>
-        </programlisting>
-
-        <para>
-            El contenido inicial es creado por el decorador 'ViewHelper', que
-            crea el propio elemento. En seguida, el decorador 'Errors' consulta
-            los mensajes de error del elemento, y, si hay alguno presente, los
-            pasa al auxiliar vista 'FormErrors' para mostrarlos. Si una
-            descripción está presente, el decorador 'Description' añadirá
-            un párrafo con class 'description' conteniendo el texto descriptivo
-            para el contenido agregado. El siguiente decorador, 'HtmlTag',
-            envuelve al elemento, los errores, y la descripción en una etiqueta
-            HTML &lt;dd&gt;. Finalmente, el último decorador, 'label', recupera
-            la etiqueta del elemento y la pasa al auxiliar vista 'FormLabel',
-            envolviéndolo en una etiqueta &lt;dt&gt;; por default el valor es
-            añadido al inicio del contenido. El resultado de la salida
-            básicamente se ve así:
-        </para>
-
-        <programlisting role="html"><![CDATA[
-<dt><label for="foo" class="optional">Foo</label></dt>
-<dd>
-    <input type="text" name="foo" id="foo" value="123" />
-    <ul class="errors">
-        <li>"123" is not an alphanumeric value</li>
-    </ul>
-    <p class="description">
-        This is some descriptive text regarding the element.
-    </p>
-</dd>
-]]>
-</programlisting>
-
-        <para>
-            Para más información sobre decoradores, lea la <link linkend="zend.form.decorators"> sección de Zend_Form_Decorator</link>.
-        </para>
-
-        <note>
-            <title>Usando múltiples decoradores al mismo tiempo</title>
-
-            <para>
-                Internamente, <code>Zend_Form_Element</code> utiliza una clase
-                decorador como mecanismo de búsqueda para la recuperación de
-                decoradores. Como resultado, no puede registrar múltiples
-                decoradores del mismo tipo; decoradores subsecuentes
-                simplemente sobreescribirán aquellos que ya existían.
-            </para>
-
-            <para>
-                Para evitar esto, puede usar <emphasis>alias</emphasis>. En
-                lugar de pasar un decorador o nombre de decorador como primer
-                argumento a <code>addDecorator()</code>, pase una matriz con un
-                solo elemento, con el alias apuntando al nombre o objeto
-                decorador:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-// Alias a 'FooBar':
-$element->addDecorator(array('FooBar' => 'HtmlTag'),
-                       array('tag' => 'div'));
-
-// Y recuperandolo posteriormente:
-$decorator = $element->getDecorator('FooBar');
-]]>
-            </programlisting>
-
-            <para>
-                En los métodos <code>addDecorators()</code> y
-                <code>setDecorators()</code>, necesitará pasar la opción
-                'decorator' en la matriz representando el decorador:
-            </para>
-
-            <programlisting role="php"><![CDATA[
-// Y dos decoradores 'HtmlTag', 'FooBar' como alias:
-$element->addDecorators(
-    array('HtmlTag', array('tag' => 'div')),
-    array(
-        'decorator' => array('FooBar' => 'HtmlTag'),
-        'options' => array('tag' => 'dd')
-    ),
-);
-
-// Y recuperándolos posteriormente:
-$htmlTag = $element->getDecorator('HtmlTag');
-$fooBar  = $element->getDecorator('FooBar');
-]]>
-            </programlisting>
-        </note>
-
-        <para>
-            Métodos asociados con decoradores incluyen:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                <code>addDecorator($nameOrDecorator, array $options = null)</code>
-            </para></listitem>
-
-            <listitem><para>
-                <code>addDecorators(array $decorators)</code>
-            </para></listitem>
-
-            <listitem><para>
-                <code>setDecorators(array $decorators)</code> (sobreescribe
-                todos los decoradores)
-            </para></listitem>
-
-            <listitem><para>
-                <code>getDecorator($name)</code> (recupera un objeto decorador
-                por su nombre)
-            </para></listitem>
-
-            <listitem><para>
-                <code>getDecorators()</code> (recupera todos los decoradores)
-            </para></listitem>
-
-            <listitem><para>
-                <code>removeDecorator($name)</code> (elimina un decorador por su
-                nombre)
-            </para></listitem>
-
-            <listitem><para>
-                <code>clearDecorators()</code> (elimina todos los decoradores)
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            <code>Zend_Form_Element</code> también utiliza la sobrecarga para
-            permitir generar decoradores específicos. <code>__call()</code>
-            interceptará métodos que comiencen con el texto 'render' y utilizará
-            el resto del nombre del método para buscar un decorador; si se
-            encuentra, entonces será generado <emphasis>sólo ese</emphasis>
-            decorador. Cualquier argumento pasado al llamado del método será
-            usado como contenido para pasar  al método <code>render()</code> del
-            decorador. Como ejemplo:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-// Genera solo el decorador ViewHelper:
-echo $element->renderViewHelper();
-
-// Genera solo el decorador HtmlTag, pasándole contenido:
-echo $element->renderHtmlTag("This is the html tag content");
-]]></programlisting>
-
-        <para>
-            Si el decorador no existe, una excepción es lanzada.
-        </para>
-    </sect2>
-
-    <sect2 id="zend.form.elements.metadata">
-        <title>Metadatos y atributos</title>
-
-        <para>
-            <code>Zend_Form_Element</code> manipula una variedad de atributos y
-            medatados del elemento. Atributos básicos incluyen:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                <emphasis>name</emphasis>: el nombre del elemento. Emplea los
-                métodos de acceso <code>setName()</code> y <code>getName()</code>.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>label</emphasis>: la etiqueta del elemento. Emplea los
-                métodos de acceso <code>setLabel()</code> y <code>getLabel()</code>.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>order</emphasis>: el índice en el cual los elementos
-                deben ir mostrándose en el formulario. Emplea los métodos de
-                acceso <code>setOrder()</code> y <code>getOrder()</code>.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>value</emphasis>: El valor del elemento actual. Emplea
-                los métodos de acceso <code>setValue()</code> y
-                <code>getValue()</code>.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>description</emphasis>: una descripción del elemento;
-                a menudo utilizada para proveer un tooltip o ayuda contextual
-                con javascript describiendo el propósito del elemento. Emplea
-                los métodos de acceso <code>setDescription()</code> y
-                <code>getDescription()</code>.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>required</emphasis>: bandera que indica si un elemento
-                es requerido o no cuando se efectúa la validación del
-                formulario. Emplea los métodos de acceso
-                <code>setRequired()</code> y <code>getRequired()</code>. Esta
-                bandera es false por defecto.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>allowEmpty</emphasis>: bandera indicando si un
-                elemento no-requerido (opcional) debe intentar validar o no
-                valores vacíos. Cuando es true, y la bandera required es false,
-                valores vacíos no pasarán la cadena de validación, y se supone
-                verdadero. Emplea los métodos de acceso
-                <code>setAllowEmpty()</code> y <code>getAllowEmpty()</code>.
-                Esta bandera es true por defecto.
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>autoInsertNotEmptyValidator</emphasis>: bandera
-                indicando insertar o no un validador 'NotEmpty' cuando un
-                elemento es requerido. Por defecto, esta bandera es true.
-                Establezca la bandera con
-                <code>setAutoInsertNotEmptyValidator($flag)</code> y determine
-                el valor con <code>autoInsertNotEmptyValidator()</code>.
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            Los elementos del formulario pueden requerir metainformación
-            adicional. Para elementos XHTML del formuladio, por ejemplo, puede
-            querer especificar atributos como el class o id. Para facilitar esto
-            hay un conjunto de métodos de acceso:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                <emphasis>setAttrib($name, $value)</emphasis>: añade un atributo
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>setAttribs(array $attribs)</emphasis>: como
-                addAttribs(), pero sobreescribiendo
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>getAttrib($name)</emphasis>: recupera el valor de solo
-                un atributo
-            </para></listitem>
-
-            <listitem><para>
-                <emphasis>getAttribs()</emphasis>: recupera todos los atributos
-                como pares clave/valor
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            La mayoría de las veces, como sea, puede simplemente acceder a ellos
-            como propiedades de objeto, ya que <code>Zend_Form_Element</code>
-            utiliza la sobrecarga para facilitar el acceso a ellos:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-// Equivalente a $element->setAttrib('class', 'text'):
-$element->class = 'text;
-]]>
-        </programlisting>
-
-        <para>
-            Por defecto, todos los atributos son pasados al auxiliar vista usado
-            por el elemento durante la generación, y generados como atributos de
-            la etiqueta del elemento.
-        </para>
-    </sect2>
-
-    <sect2 id="zend.form.elements.standard">
-        <title>Elementos Estándar</title>
-
-        <para>
-            <code>Zend_Form</code> contiene un buen número de elementos
-            estándar; por favor lea el capítulo <link linkend="zend.form.standardElements">Elementos Estándar</link> para
-            todos los detalles.
-        </para>
-    </sect2>
-
-    <sect2 id="zend.form.elements.methods">
-        <title>Métodos de Zend_Form_Element</title>
-
-        <para>
-            <code>Zend_Form_Element</code> tiene muchos, muchos métodos. Lo que
-            sigue es un sumario de sus funciones, agrupados por tipo:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>Configuración:</para>
-                <itemizedlist>
-                    <listitem><para><code>setOptions(array $options)</code></para></listitem>
-                    <listitem><para><code>setConfig(Zend_Config $config)</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-
-            <listitem><para>I18n:</para>
-                <itemizedlist>
-                    <listitem><para><code>setTranslator(Zend_Translate_Adapter $translator = null)</code></para></listitem>
-                    <listitem><para><code>getTranslator()</code></para></listitem>
-                    <listitem><para><code>setDisableTranslator($flag)</code></para></listitem>
-                    <listitem><para><code>translatorIsDisabled()</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-
-            <listitem><para>Propiedades:</para>
-                <itemizedlist>
-                    <listitem><para><code>setName($name)</code></para></listitem>
-                    <listitem><para><code>getName()</code></para></listitem>
-                    <listitem><para><code>setValue($value)</code></para></listitem>
-                    <listitem><para><code>getValue()</code></para></listitem>
-                    <listitem><para><code>getUnfilteredValue()</code></para></listitem>
-                    <listitem><para><code>setLabel($label)</code></para></listitem>
-                    <listitem><para><code>getLabel()</code></para></listitem>
-                    <listitem><para><code>setDescription($description)</code></para></listitem>
-                    <listitem><para><code>getDescription()</code></para></listitem>
-                    <listitem><para><code>setOrder($order)</code></para></listitem>
-                    <listitem><para><code>getOrder()</code></para></listitem>
-                    <listitem><para><code>setRequired($flag)</code></para></listitem>
-                    <listitem><para><code>getRequired()</code></para></listitem>
-                    <listitem><para><code>setAllowEmpty($flag)</code></para></listitem>
-                    <listitem><para><code>getAllowEmpty()</code></para></listitem>
-                    <listitem><para><code>setAutoInsertNotEmptyValidator($flag)</code></para></listitem>
-                    <listitem><para><code>autoInsertNotEmptyValidator()</code></para></listitem>
-                    <listitem><para><code>setIgnore($flag)</code></para></listitem>
-                    <listitem><para><code>getIgnore()</code></para></listitem>
-                    <listitem><para><code>getType()</code></para></listitem>
-                    <listitem><para><code>setAttrib($name, $value)</code></para></listitem>
-                    <listitem><para><code>setAttribs(array $attribs)</code></para></listitem>
-                    <listitem><para><code>getAttrib($name)</code></para></listitem>
-                    <listitem><para><code>getAttribs()</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-
-            <listitem><para>Cargadores y rutas de plugin:</para>
-                <itemizedlist>
-                    <listitem><para><code>setPluginLoader(Zend_Loader_PluginLoader_Interface $loader, $type)</code></para></listitem>
-                    <listitem><para><code>getPluginLoader($type)</code></para></listitem>
-                    <listitem><para><code>addPrefixPath($prefix, $path, $type = null)</code></para></listitem>
-                    <listitem><para><code>addPrefixPaths(array $spec)</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-
-            <listitem><para>Validación:</para>
-                <itemizedlist>
-                    <listitem><para><code>addValidator($validator, $breakChainOnFailure = false, $options = array())</code></para></listitem>
-                    <listitem><para><code>addValidators(array $validators)</code></para></listitem>
-                    <listitem><para><code>setValidators(array $validators)</code></para></listitem>
-                    <listitem><para><code>getValidator($name)</code></para></listitem>
-                    <listitem><para><code>getValidators()</code></para></listitem>
-                    <listitem><para><code>removeValidator($name)</code></para></listitem>
-                    <listitem><para><code>clearValidators()</code></para></listitem>
-                    <listitem><para><code>isValid($value, $context = null)</code></para></listitem>
-                    <listitem><para><code>getErrors()</code></para></listitem>
-                    <listitem><para><code>getMessages()</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-
-            <listitem><para>Filtros:</para>
-                <itemizedlist>
-                    <listitem><para><code>addFilter($filter, $options = array())</code></para></listitem>
-                    <listitem><para><code>addFilters(array $filters)</code></para></listitem>
-                    <listitem><para><code>setFilters(array $filters)</code></para></listitem>
-                    <listitem><para><code>getFilter($name)</code></para></listitem>
-                    <listitem><para><code>getFilters()</code></para></listitem>
-                    <listitem><para><code>removeFilter($name)</code></para></listitem>
-                    <listitem><para><code>clearFilters()</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-
-            <listitem><para>Generación:</para>
-                <itemizedlist>
-                    <listitem><para><code>setView(Zend_View_Interface $view = null)</code></para></listitem>
-                    <listitem><para><code>getView()</code></para></listitem>
-                    <listitem><para><code>addDecorator($decorator, $options = null)</code></para></listitem>
-                    <listitem><para><code>addDecorators(array $decorators)</code></para></listitem>
-                    <listitem><para><code>setDecorators(array $decorators)</code></para></listitem>
-                    <listitem><para><code>getDecorator($name)</code></para></listitem>
-                    <listitem><para><code>getDecorators()</code></para></listitem>
-                    <listitem><para><code>removeDecorator($name)</code></para></listitem>
-                    <listitem><para><code>clearDecorators()</code></para></listitem>
-                    <listitem><para><code>render(Zend_View_Interface $view = null)</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-        </itemizedlist>
-    </sect2>
-
-    <sect2 id="zend.form.elements.config">
-        <title>Configuración</title>
-
-        <para>
-            El constructor de <code>Zend_Form_Element</code> acepta tanto una
-            matriz de opciones como un objeto <code>Zend_Config</code>
-            conteniendo opciones, y esto puede configurarse usando
-            <code>setOptions()</code> o <code>setConfig()</code>. Hablando de
-            manera general, las claves son nombradas de la siguiente manera:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                Si 'set' + clave se refiere a un método de
-                <code>Zend_Form_Element</code>, entonces el valor provisto será
-                pasado a el método.
-            </para></listitem>
-
-            <listitem><para>
-                De otra manera, el valor será usado para establecer un atributo.
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            Excepciones a la regla incluyen las siguientes:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                <code>prefixPath</code> será pasado a
-                <code>addPrefixPaths()</code>
-            </para></listitem>
-
-            <listitem>
-                <para>
-                    Los siguientes setters no pueden establecerse de esta manera:
-                </para>
-
-                <itemizedlist>
-                    <listitem><para>
-                            <code>setAttrib</code> (aunque
-                            <code>setAttribs</code> <emphasis>funcionará</emphasis>
-                    </para></listitem>
-
-                    <listitem><para><code>setConfig</code></para></listitem>
-
-                    <listitem><para><code>setOptions</code></para></listitem>
-
-                    <listitem><para><code>setPluginLoader</code></para></listitem>
-
-                    <listitem><para><code>setTranslator</code></para></listitem>
-
-                    <listitem><para><code>setView</code></para></listitem>
-                </itemizedlist>
-            </listitem>
-        </itemizedlist>
-
-        <para>
-            Como ejemplo, aquí esta un archivo de configuración pasado para
-            cada tipo de dato configurable:
-        </para>
-
-        <programlisting role="ini"><![CDATA[
-[element]
-name = "foo"
-value = "foobar"
-label = "Foo:"
-order = 10
-required = true
-allowEmpty = false
-autoInsertNotEmptyValidator = true
-description = "Foo elements are for examples"
-ignore = false
-attribs.id = "foo"
-attribs.class = "element"
-; sets 'onclick' attribute
-onclick = "autoComplete(this, '/form/autocomplete/element')"
-prefixPaths.decorator.prefix = "My_Decorator"
-prefixPaths.decorator.path = "My/Decorator/"
-disableTranslator = 0
-validators.required.validator = "NotEmpty"
-validators.required.breakChainOnFailure = true
-validators.alpha.validator = "alpha"
-validators.regex.validator = "regex"
-validators.regex.options.pattern = "/^[A-F].*/$"
-filters.ucase.filter = "StringToUpper"
-decorators.element.decorator = "ViewHelper"
-decorators.element.options.helper = "FormText"
-decorators.label.decorator = "Label"
-]]>
-</programlisting>
-    </sect2>
-
-    <sect2 id="zend.form.elements.custom">
-        <title>Elementos personalizados</title>
-
-        <para>
-            Usted puede crear sus propios elementos personalizados simplemente
-            extendiendo la clase <code>Zend_Form_Element</code>. Las razones
-            comunes para hacer esto incluyen:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                Elementos que comparten validadores y/o filtros comunes
-            </para></listitem>
-
-            <listitem><para>
-                Elementos que tienen decoradores con funcionalidad personalizada
-            </para></listitem>
-        </itemizedlist>
-
-        <para>
-            Hay dos métodos típicamente usados para extender un elemento:
-            <code>init()</code>, el cual puede usarse para añadir una lógica de
-            inicialización personalizada a su elemento, y
-            <code>loadDefaultDecorators()</code>, el cual puede usarse para
-            establecer una lista de decoradores usados por su elemento de manera
-            predeterminada.
-        </para>
-
-        <para>
-            Como un ejemplo, digamos que todos los elementos de tipo texto en un
-            formulario que está creando, necesitan ser filtrados con
-            <code>StringTrim</code>, validados con una expresión regular, y que
-            quiere usar un decorador personalizado que ha creado para
-            mostrarlos, 'My_Decorator_TextItem'; adicionalmente, tiene un número
-            de atributos estándars, incluyendo 'size', 'maxLength', y 'class'
-            que quisiera especificar. Puede definir un elemento tal como sigue:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-class My_Element_Text extends Zend_Form_Element
-{
-    public function init()
-    {
-        $this->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator')
-             ->addFilters('StringTrim')
-             ->addValidator('Regex', false, array('/^[a-z0-9]{6,}$/i'))
-             ->addDecorator('TextItem')
-             ->setAttrib('size', 30)
-             ->setAttrib('maxLength', 45)
-             ->setAttrib('class', 'text');
-    }
-}
-]]>
-        </programlisting>
-
-        <para>
-            Entonces puede informar a su objeto formulario acerca del prefijo de
-            ruta para elementos de ese tipo, y comenzar creando elementos:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-$form->addPrefixPath('My_Element', 'My/Element/', 'element')
-     ->addElement('foo', 'text');
-]]>
-        </programlisting>
-
-        <para>
-            El elemento 'foo' será ahora del tipo <code>My_Element_Text</code>,
-            y mostrará el comportamiento que ha especificado.
-        </para>
-
-        <para>
-            Otro método que puede querer sobreescribir cuando extienda
-            <code>Zend_Form_Element</code> es el método
-            <code>loadDefaultDecorators()</code>. Este método carga
-            condicionalmente un grupo de decoradores predefinidos para su
-            elemento; puede querer sustituir su propio decorador en su clase
-            extendida:
-        </para>
-
-        <programlisting role="php"><![CDATA[
-class My_Element_Text extends Zend_Form_Element
-{
-    public function loadDefaultDecorators()
-    {
-        $this->addDecorator('ViewHelper')
-             ->addDecorator('DisplayError')
-             ->addDecorator('Label')
-             ->addDecorator('HtmlTag',
-                            array('tag' => 'div', 'class' => 'element'));
-    }
-}
-]]>
-        </programlisting>
-
-        <para>
-            Hay muchas maneras de personalizar elementos; asegúrese de leer la
-            documentación de la API de <code>Zend_Form_Element</code> para
-            conocer todos los métodos disponibles.
-        </para>
-    </sect2>
-</sect1>
-<!--
-vim:se ts=4 sw=4 tw=80 ai et:
--->
+<sect1 id="zend.form.elements">
+    <title>Creando elementos de formulario usando Zend_Form_Element</title>
+
+    <para>
+        Un formulario esta compuesto de elementos, que normalmente corresponden
+        al  elemento HTML input. <code>Zend_Form_Element</code> encapsula
+        elementos de formulario individualmente, con las siguientes áreas de
+        responsabilidad:
+    </para>
+
+    <itemizedlist>
+        <listitem>
+            <para>
+                validación (¿los datos enviados son válidos?)
+            </para>
+
+            <itemizedlist>
+                <listitem><para>captura de códigos y mensajes de error</para></listitem>
+            </itemizedlist>
+        </listitem>
+
+        <listitem><para>
+            filtrado (¿cómo es escapado y normalizado el elemento para su
+            validación y/o salida?
+        </para></listitem>
+
+        <listitem><para>
+            generación (¿cómo es mostrado el elemento?)
+        </para></listitem>
+
+        <listitem><para>
+            metadatos y atributos (¿qué información amplía la definición del
+            elemento?)
+        </para></listitem>
+    </itemizedlist>
+
+    <para>
+        La clase base, <code>Zend_Form_Element</code>, funciona por defecto para
+        varios casos, pero es mejor extender la clase para elementos con fines
+        especiales de uso común. Adicionalmente, Zend Framework contiene un
+        número de elementos XHTML estándar; puede leer de ellos <link linkend="zend.form.standardElements">en el capítulo Elementos
+        Estándares</link>
+    </para>
+
+    <sect2 id="zend.form.elements.loaders">
+        <title>Cargadores de Plugin</title>
+
+        <para>
+            <code>Zend_Form_Element</code> hace uso de <link linkend="zend.loader.pluginloader">Zend_Loader_PluginLoader</link>
+            para permitir a los desarrolladores especificar ubicaciones de
+            validadores, filtros y decoradores alternos. Cada uno tiene su
+            propio cargador de plugin asociado a él y métodos de acceso
+            generales usados para su recuperación y modificación.
+        </para>
+
+        <para>
+            Los siguientes tipos de cargadores son usados con los varios métodos
+            del cargador de plugin: 'validate', 'filter', y 'decorator'. Los
+            nombres son sensibles a mayúsculas y minúsculas.
+        </para>
+
+        <para>
+            Los métodos usados para interactuar con los cargadores de plugin son
+            los siguientes:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                <code>setPluginLoader($loader, $type)</code>:
+                <code>$loader</code> es el propio objeto cargador, mientras
+                <code>$type</code> es uno de los tipos arriba mencionados. Esto
+                establece el cargador de plugin para el tipo dado en el objeto
+                cargador recién especificado.
+            </para></listitem>
+
+            <listitem><para>
+                <code>getPluginLoader($type)</code>: obtiene el cargador de
+                plugin asociado con <code>$type</code>.
+            </para></listitem>
+
+            <listitem><para>
+                <code>addPrefixPath($prefix, $path, $type = null)</code>: agrega
+                una asociación prefijo/ruta para el cargador especificado por
+                <code>$type</code>. Si <code>$type</code> es null, se intentará
+                agregar la ruta a todos los cargadores, añadiendo el prefijo a
+                cada "_Validate", "_Filter" y "_Decorator"; y agregandole
+                "Validate/", "Filter/" y "Decorator/" a la ruta. Si tiene todas
+                sus clases extras para elementos de formulario dentro de
+                una jerarquía común, este método es conveniente para establecer
+                el prefijo para todas ellas.
+            </para></listitem>
+
+            <listitem><para>
+                <code>addPrefixPaths(array $spec)</code>: le permite añadir
+                varias rutas de una sola vez a uno o más cargadores de plugin.
+                Se espera cada elemento de la matriz sea un array con claves
+                'path', 'prefix', y 'type'.
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            Validadores, filtros y decoradores personalizados son una manera
+            simple de compartir funcionalidad entre formularios y encapsular
+            funcionalidad personalizada.
+        </para>
+
+        <example id="zend.form.elements.loaders.customLabel">
+            <title>Etiqueta personalizada</title>
+
+            <para>
+                Un uso común de los plugins es proveer reemplazos para las
+                clases estándares. Por ejemplo, si desea proveer una implementación diferente
+                 del decorador 'Label' -- por ejemplo, para
+                añadir siempre dos puntos -- puede crear su  propio decorador
+                'Label' con su propio prefijo de clase, y entonces añadirlo a su
+                prefijo de ruta.
+            </para>
+
+            <para>
+                Comencemos con un decorador de etiqueta personalizado. Le
+                daremos el prefijo "My_Decorator", y la clase estará en el
+                archivo "My/Decorator/Label.php".
+            </para>
+
+            <programlisting role="php"><![CDATA[
+class My_Decorator_Label extends Zend_Form_Decorator_Abstract
+{
+    protected $_placement = 'PREPEND';
+
+    public function render($content)
+    {
+        if (null === ($element = $this->getElement())) {
+            return $content;
+        }
+        if (!method_exists($element, 'getLabel')) {
+            return $content;
+        }
+
+        $label = $element->getLabel() . ':';
+
+        if (null === ($view = $element->getView())) {
+            return $this->renderLabel($content, $label);
+        }
+
+        $label = $view->formLabel($element->getName(), $label);
+
+        return $this->renderLabel($content, $label);
+    }
+
+    public function renderLabel($content, $label)
+    {
+        $placement = $this->getPlacement();
+        $separator = $this->getSeparator();
+
+        switch ($placement) {
+            case 'APPEND':
+                return $content . $separator . $label;
+            case 'PREPEND':
+            default:
+                return $label . $separator . $content;
+        }
+    }
+}
+]]>
+            </programlisting>
+
+            <para>
+                Ahora diremos al elemento que use esta ruta cuando busque por
+                decoradores:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$element->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
+]]>
+            </programlisting>
+
+            <para>
+                Alternativamente, podemos hacerlo en el formulario para asegurar
+                que todos los decoradores usen esta ruta:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$form->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
+]]>
+            </programlisting>
+
+            <para>
+                Con esta ruta añadida, cuando agregue un decorador, la ruta
+                'My/Decorator' será consultada primero en búsqueda de la
+                existencia del decorador en este lugar. Como resultado,
+                'My_Decorator_Label' ahora será utilizado cuando el decorador
+                'Label' sea requerido.
+            </para>
+        </example>
+    </sect2>
+
+    <sect2 id="zend.form.elements.filters">
+        <title>Filters</title>
+
+        <para>
+            A menudo es útil y/o necesario realizar alguna normalización en la
+            entrada antes de la validación – por ejemplo, puede querer eliminar
+            todo el HTML, pero realizar las validaciones sobre lo restante para
+            asegurarse que el envío es válido. O puede eliminar los espacios en
+            blanco al inicio o fin de la entrada para asegurarse de que un validador
+            StringLenth (longitud de la cadena) no regrese un positivo falso. Estas
+            operaciones pueden realizarse usando <code>Zend_Filter</code>, y
+            <code>Zend_Form_Element</code> que soportan cadenas de filtros,
+            permitiéndole especificar múltiples filtros secuenciales a utilizar.
+            El filtrado sucede tanto en la validación como cuando recupera el
+            valor del elemento vía <code>getValue()</code>:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$filtered = $element->getValue();
+
+]]>
+        </programlisting>
+
+        <para>
+            Los filtros pueden ser agregados a la pila de dos maneras:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                pasándolo en una instancia de filtro específica
+            </para></listitem>
+
+            <listitem><para>
+                proveyendo un nombre de filtro – el correspondiente nombre
+                corto o completo de la clase
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            Veamos algunos ejemplos:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// Instancia específica del filtro
+$element->addFilter(new Zend_Filter_Alnum());
+
+// El correspondiente nombre completo de la clase:
+$element->addFilter('Zend_Filter_Alnum');
+
+// Nombre corto del filtro:
+$element->addFilter('Alnum');
+$element->addFilter('alnum');
+]]>
+        </programlisting>
+
+        <para>
+            Los nombres cortos son típicamente el nombre del filtro sin el
+            prefijo. En el caso predeterminado, esto se refiere a sin el prefijo
+            'Zend_Filter_'. Además, la primera letra no necesita estar en
+            mayúscula.
+        </para>
+
+        <note>
+            <title>Usando clases de filtros personalizados</title>
+
+            <para>
+                Si tiene su propio conjunto de clases de filtro, puede
+                informarle de ellas a <code>Zend_Form_Element</code> usando
+                <code>addPrefixPath()</code>. Por ejemplo, si tiene filtros
+                con el prefijo 'My_Filter', puede indicárselo a
+                <code>Zend_Form_Element</code> de la siguiente manera:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$element->addPrefixPath('My_Filter', 'My/Filter/', 'filter');
+]]>
+            </programlisting>
+
+            <para>
+                (Recuerde que el tercer argumento indica el cargador de plugin
+                sobre el cual ha de ejecutarse la acción.)
+            </para>
+        </note>
+
+        <para>
+            Si en algún momento necesita un valor no filtrado, use el método
+            <code>getUnfilteredValue()</code>:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$unfiltered = $element->getUnfilteredValue();
+]]>
+        </programlisting>
+
+        <para>
+            Para mayor información sobre filtros, vea la <link linkend="zend.filter.introduction">documentación de
+                Zend_Filter</link>.
+        </para>
+
+        <para>
+            Métodos asociados con filtros incluyen:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                <code>addFilter($nameOfFilter, array $options = null)</code>
+            </para></listitem>
+
+            <listitem><para>
+                <code>addFilters(array $filters)</code>
+            </para></listitem>
+
+            <listitem><para>
+                <code>setFilters(array $filters)</code> (sobreescribe todos los
+                filtros)
+            </para></listitem>
+
+            <listitem><para>
+                <code>getFilter($name)</code> (recupera un objeto filtro por su
+                nombre)
+            </para></listitem>
+
+            <listitem><para>
+                <code>getFilters()</code> (recupera todos los filtros)
+            </para></listitem>
+
+            <listitem><para>
+                <code>removeFilter($name)</code> (elimina un filtro por su
+                nombre)
+            </para></listitem>
+
+            <listitem><para>
+                <code>clearFilters()</code> (elimina todos los filtros)
+            </para></listitem>
+        </itemizedlist>
+    </sect2>
+
+    <sect2 id="zend.form.elements.validators">
+        <title>Validadores</title>
+
+        <para>
+            Si sigue el mantra de seguridad "filtrar la entrada, escapar la
+            salida" querrá validar ("filtrar la entrada") los datos de los
+            formularios. En <code>Zend_Form</code> cada elemento contiene su
+            propia cadena de validadores, consistente en validadores
+            <code>Zend_Validate_*</code>.
+        </para>
+
+        <para>
+            Los validadores pueden ser agregados de dos maneras:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                pasándolo en una instancia de validador específica
+            </para></listitem>
+
+            <listitem><para>
+                proveyendo un nombre de validador – el correspondiente nombre
+                corto o completo de clase
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            Veamos algunos ejemplos:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// Instancia específica del validador:
+$element->addValidator(new Zend_Validate_Alnum());
+
+// El correspondiente nombre completo de la clase:
+$element->addValidator('Zend_Validate_Alnum');
+
+// Nombre corto del validador:
+$element->addValidator('Alnum');
+$element->addValidator('alnum');
+]]>
+        </programlisting>
+
+        <para>
+            Los nombres cortos son típicamente el nombre del validador sin el
+            prefijo. En el caso predeterminado, esto se refiere a sin el prefijo
+            'Zend_Validate_'. Además, la primera letra no necesita estar en
+            mayúscula.
+        </para>
+
+        <note>
+            <title>Usando clases de validación personalizadas</title>
+
+            <para>
+                Si tiene su propio conjunto de clases de validación, puede
+                informarle de ellas a <code>Zend_Form_Element</code> usando
+                <code>addPrefixPath()</code>. Por ejemplo, si tiene validadores
+                con el prefijo 'My_Validator', puede indicárselo a
+                <code>Zend_Form_Element</code> de la siguiente manera:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$element->addPrefixPath('My_Validator', 'My/Validator/', 'validate');
+]]>
+            </programlisting>
+
+            <para>
+                (Recuerde que el tercer argumento indica el cargador de plugin
+                sobre el cual ha de ejecutarse la acción.)
+            </para>
+        </note>
+
+        <para>
+            Si el fallo de un validador debe evitar validaciones posteriores,
+            pase el boleano <code>true</code> como segundo parámetro:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$element->addValidator('alnum', true);
+]]>
+        </programlisting>
+
+        <para>
+            Si está usando la cadena nombre para añadir el validador, y la clase
+            del validador acepta argumentos para su constructor, puede pasarlos
+            a el tercer parámetro de <code>addValidator()</code> como un
+            array:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$element->addValidator('StringLength', false, array(6, 20));
+]]>
+        </programlisting>
+
+        <para>
+            Los argumentos pasados de esta manera deben estar en el orden en el
+            cual son definidos en el constructor. El ejemplo de arriba
+            instanciará la clase <code>Zend_Validate_StringLenth</code> con los
+            parámetros <code>$min</code> y <code>$max</code>:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$validator = new Zend_Validate_StringLength(6, 20);
+]]>
+        </programlisting>
+
+        <note>
+            <title>Estipulando mensajes de error de validación personalizados</title>
+
+            <para>
+                Algunos desarrolladores querrán estipular mensajes de error
+                personalizados para un validador. El argumento
+                <code>$options</code> de
+                <code>Zend_Form_Element::addValidator()</code> le permite
+                hacerlo proporcionando la clave 'messages' y estableciendolos en
+                un array de pares clave/valor para especificar las plantillas
+                de mensaje. Necesitará conocer los códigos de error de los
+                diferentes tipos de error de un validador en particular.
+            </para>
+
+            <para>
+                Una opción mejor es usar <code>Zend_Translate_Adapter</code>
+                con su formulario. Los códigos de error son automáticamente
+                pasados al adaptador por el decorador Errors por defecto; puede
+                especificar su propias cadenas de mensaje de error mediante la
+                creación de traducciones para los varios códigos de error de
+                sus validadores.
+            </para>
+        </note>
+
+        <para>
+            Puede también establecer varios validadores a la vez, usando
+            <code>addValidators()</code>. Su uso básico es pasar una matriz de
+            arrays, donde cada array contenga de 1 a 3 valores,
+            correspondientes al constructor de <code>addValidator()</code>:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$element->addValidators(array(
+    array('NotEmpty', true),
+    array('alnum'),
+    array('stringLength', false, array(6, 20)),
+));
+]]>
+        </programlisting>
+
+        <para>
+            Si quiere ser más detallado o explícito, puede utilizar las claves
+            'validator', 'breakChainOnFailure', y 'options' en el array:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$element->addValidators(array(
+    array(
+        'validator'           => 'NotEmpty',
+        'breakChainOnFailure' => true),
+    array('validator' => 'alnum'),
+    array(
+        'validator' => 'stringLength',
+        'options'   => array(6, 20)),
+));
+]]>
+        </programlisting>
+
+        <para>
+            Este uso es bueno para ilustrar cómo puede configurar validadores
+            en un archivo de configuración:
+        </para>
+
+        <programlisting role="ini"><![CDATA[
+element.validators.notempty.validator = "NotEmpty"
+element.validators.notempty.breakChainOnFailure = true
+element.validators.alnum.validator = "Alnum"
+element.validators.strlen.validator = "StringLength"
+element.validators.strlen.options.min = 6
+element.validators.strlen.options.max = 20
+]]>
+</programlisting>
+
+        <para>
+            Note que cada elemento tiene una clave, la necesite o no; esta es
+            una limitación del uso de archivos de configuración -- pero también
+            ayuda a hacer más explicito el para qué son usados los argumentos.
+            Sólo recuerde que cualesquiera opciones del validador deben ser
+            especificadas en orden.
+        </para>
+
+        <para>
+            Para validar un elemento, pase el valor a
+            <code>isValid()</code>:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+if ($element->isValid($value)) {
+    // válido
+} else {
+    // no válido
+}
+]]>
+        </programlisting>
+
+        <note>
+            <title>Validación operando en valores filtrados</title>
+
+            <para>
+                <code>Zend_Form_Element::isValid()</code> siempre filtra los
+                valores antes de la validación a través de la cadena de filtros.
+                Vea <link linkend="zend.form.elements.filters">la sección de
+                filtros</link> para más información.
+            </para>
+        </note>
+
+        <note>
+            <title>Contexto de validación</title>
+
+            <para>
+                <code>Zend_Form_Element::isValid()</code> soporta un argumento
+                adicional, <code>$context</code>.
+                <code>Zend_Form::isValid()</code> pasa todo el conjunto de datos
+                procesados a <code>$context</code> cuando valida un formulario,
+                y <code>Zend_Form_Element::isValid()</code>, a su vez, lo pasa a
+                cada validador. Esto significa que puede escribir validadores
+                que son conscientes de los datos pasados a otros elementos del
+                formulario. Como ejemplo, considere un formulario de registro
+                estándar que tiene campos para la contraseña y la confirmación
+                de la contraseña; una validación sería que los dos campos
+                coincidan. Este validador puede tener un aspecto como el
+                siguiente:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+class My_Validate_PasswordConfirmation extends Zend_Validate_Abstract
+{
+    const NOT_MATCH = 'notMatch';
+
+    protected $_messageTemplates = array(
+        self::NOT_MATCH => 'Password confirmation does not match'
+    );
+
+    public function isValid($value, $context = null)
+    {
+        $value = (string) $value;
+        $this->_setValue($value);
+
+        if (is_array($context)) {
+            if (isset($context['password_confirm'])
+                && ($value == $context['password_confirm']))
+            {
+                return true;
+            }
+        } elseif (is_string($context) && ($value == $context)) {
+            return true;
+        }
+
+        $this->_error(self::NOT_MATCH);
+        return false;
+    }
+}
+]]>
+            </programlisting>
+        </note>
+
+        <para>
+            Los validadores son procesados en orden. Cada validador es
+            procesado, a menos que un validador creado con un valor true para
+            <code>breakChainOnFailure</code> falle su validación. Asegúrese de
+            especificar sus validadores en un orden razonable.
+        </para>
+
+        <para>
+            Después de una validación fallida, puede recuperar los códigos y
+            mensajes de error de la cadena del validador:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$errors   = $element->getErrors();
+$messages = $element->getMessages();
+]]>
+        </programlisting>
+
+        <para>
+            (Nota: los mensajes de error retornados son un array asociativo de
+            pares código / mensaje de error.)
+        </para>
+
+        <para>
+            En adición a los validadores, puede especificar que un elemento es
+            necesario, usando <code>setRequired(true)</code>. Por defecto, esta
+            bandera es false, lo que significa que pasará su cadena de 
+            validadores si ningún valor es pasado a <code>isValid()</code>.
+            Puede modificar este comportamiento en un número de maneras:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    Por defecto, cuando un elemento es requerido, una bandera,
+                    'allowEmpty', también es true. Esto quiere decir que si un
+                    valor empty es evaluado pasándolo a <code>isValid()</code>,
+                    los validadores serán saltados. Puede intercalar esta
+                    bandera usando el método de acceso
+                    <code>setAllowEmpty($flag)</code>; cuando la bandera es
+                    false, si un valor es pasado, los validadores seguirán
+                    ejecutándose.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Por defecto, si un elemento es requerido, pero no contiene
+                    un validador 'NotEmpty', <code>isValid()</code> añadirá uno
+                    en la cima de la pila, con la bandera
+                    <code>breakChainOnFailure</code> establecido. Esto hace que
+                    la bandera requerida tenga un significado semántico: si
+                    ningún valor es pasado, inmediatamente invalidamos el envío
+                    y se le notifica al usuario, e impedimos que otros
+                    validadores se ejecuten en lo que ya sabemos son datos
+                    inválidos.
+                </para>
+
+                <para>
+                    Si no quiere este comportamiento, puede desactivarlo pasando
+                    un valor false a
+                    <code>setAutoInsertNotEmptyValidator($flag)</code>; esto
+                    prevendrá a <code>isValid()</code> de colocar un validador
+                    'NotEmpty' en la cadena de validaciones.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Para mayor información sobre validadores, vea la <link linkend="zend.validate.introduction">documentación de
+                Zend_Validate</link>.
+        </para>
+
+        <note>
+            <title>Usando Zend_Form_Elements como validador de propósito general</title>
+
+            <para>
+                <code>Zend_Form_Element</code> implementa
+                <code>Zend_Validate_Interface</code>, significando un elemento
+                puede también usarse como un validador en otro, cadenas de
+                validación no relacionadas al formulario.
+            </para>
+        </note>
+
+        <para>
+            Métodos asociados con validación incluyen:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                    <code>setRequired($flag)</code> y
+                    <code>isRequired()</code> permiten establecer y recuperar el
+                    estado de la bandera 'required'. Cuando se le asigna un
+                    booleano <code>true</code>, esta bandera requiere que el
+                    elemento esté presente en la información procesada por
+                    <code>Zend_Form</code>.
+            </para></listitem>
+
+            <listitem><para>
+                    <code>setAllowEmpty($flag)</code> y
+                    <code>getAllowEmpty()</code> permiten modificar el
+                    comportamiento de elementos opcionales (p.e., elementos
+                    donde la bandera required es false). Cuando la bandera 
+                    'allow empty' es true, valores vacíos no pasarán la cadena
+                    de validadores.
+            </para></listitem>
+
+            <listitem><para>
+                    <code>setAutoInsertNotEmptyValidator($flag)</code> permite
+                    especificar si realmente un validador 'NotEmpty' será
+                    añadido el inicio de la cadena de validaciones cuando un
+                    elemento es requerido. Por defecto, esta bandera es true.
+            </para></listitem>
+
+            <listitem><para>
+                <code>addValidator($nameOrValidator, $breakChainOnFailure = false, array $options = null)</code>
+            </para></listitem>
+
+            <listitem><para>
+                <code>addValidators(array $validators)</code>
+            </para></listitem>
+
+            <listitem><para>
+                <code>setValidators(array $validators)</code> (sobreescribe todos los validadores)
+            </para></listitem>
+
+            <listitem><para>
+                <code>getValidator($name)</code> (recupera un objeto validador por nombre)
+            </para></listitem>
+
+            <listitem><para>
+                <code>getValidators()</code> (recupera todos los validadores)
+            </para></listitem>
+
+            <listitem><para>
+                <code>removeValidator($name)</code> (elimina un validador por nombre)
+            </para></listitem>
+
+            <listitem><para>
+                <code>clearValidators()</code> (elimina todos los validadores)
+            </para></listitem>
+        </itemizedlist>
+
+        <sect3 id="zend.form.elements.validators.errors">
+            <title>Errores de mensaje personalizados</title>
+
+            <para>
+                Alguna veces, querrá especificar uno o más mensajes de error para
+                usarlos en lugar de los mensajes de error generados por los
+                validadores adjuntos a los elementos. Adicionalmente, algunas
+                veces usted mismo querrá marcar al elemento como inválido. A
+                partir de 1.6.0, esta funcionalidad es posible vía los
+                siguientes métodos.
+            </para>
+
+            <itemizedlist>
+                <listitem><para>
+                    <code>addErrorMessage($message)</code>: añade un mensaje de
+                    error para mostrarlos en forma de errores de validación. Puede
+                    llamarlo más de una vez, y los nuevos mensajes nuevos son
+                    añadidos a la pila.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>addErrorMessages(array $messages)</code>: añade
+                    múltiples mensajes de error para mostrarlos en forma de errores de
+                    validación.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>setErrorMessages(array $messages)</code>: añade
+                    múltiples mensajes de error para mostrarlos en forma de errores de
+                    validación, sobreescribiendo todos los mensajes de error
+                    previamente establecidos.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>getErrorMessages()</code>: recupera la lista de
+                    mensajes de error personalizados que fueron definidos.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>clearErrorMessages()</code>: remueve todos los
+                    mensajes de error personalizados que hayan sido definidos.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>markAsError()</code>: marca al elemento como que falló
+                    la validación.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>hasErrors()</code>: determina si el elemento ha
+                    fallado la validación o ha sido marcado como inválido.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>addError($message)</code>: añade un mensaje a la pila
+                    de mensaje de error personalizados y marca al elemento como
+                    inválido.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>addErrors(array $messages)</code>: añade varios
+                    mensajes a la pila de mensajes de error personalizados y
+                    marca al elemento como inválido.
+                </para></listitem>
+
+                <listitem><para>
+                    <code>setErrors(array $messages)</code>: sobreescribe el
+                    mensaje de error personalizado en la pila con los mensajes
+                    previstos y marca al elemento como inválido.
+                </para></listitem>
+            </itemizedlist>
+
+            <para>
+                Todos los errores establecidos de este modo pueden ser
+                traducidos. Adicionalmente, puede insertar el marcador "%value%"
+                para representar el valor del elemento; este valor actual del
+                elemento será sustituido cuando el mensaje de error sea
+                recuperado.
+            </para>
+        </sect3>
+    </sect2>
+
+    <sect2 id="zend.form.elements.decorators">
+        <title>Decoradores</title>
+
+        <para>
+            Una dolencia particular para muchos desarrolladores web es la creación
+            del XHTML para formularios por ellos mismos. Para cada elemento, el
+            desarrollador necesita crear la marcación para el elemento mismo,
+            comúnmente una etiqueta (label), y, si son amables con sus usuarios,
+            la marcación para mostrar mensajes de errores de validación. Cuanto
+            más elementos en una página, menos trivial se convierte esta tarea.
+        </para>
+
+        <para>
+            <code>Zend_Form_Element</code> intenta resolver este problema mediante
+            el uso de "decoradores". Los decoradores son clases simples que tienen
+            métodos de acceso al elemento y métodos para generar el contenido. Para
+            obtener mayor información sobre cómo trabajan los decoradores, consulte
+            por favor  la sección sobre
+            <link linkend="zend.form.decorators">Zend_Form_Decorator</link>.
+        </para>
+
+        <para>
+            Los decoradores usados por defecto por
+            <code>Zend_Form_Element</code> son:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                <emphasis>ViewHelper</emphasis>: especifica un view helper que
+                usar para general el elemento. El atributo 'helper' del elemento
+                puede usarse para especificar qué auxiliar vista usar. Por
+                defecto, <code>Zend_Form_Element</code> especifica el auxiliar
+                vista 'formText', pero cada subclase especifica diferentes
+                auxiliares.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>Errors</emphasis>: añade mensajes de error al elemento
+                usando <code>Zend_View_Helper_FormErrors</code>. Si no está
+                presente, no se añade nada.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>Description</emphasis>: añade la descripción del
+                elemento. Si no está presente, no se añade nada. Por defecto, la
+                descripción es generada dentro de una etiqueta &lt;p&gt; con un
+                class 'description'.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>HtmlTag</emphasis>: envuelve el elemento y los errores
+                en una etiqueta HTML &lt;dd&gt;.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>Label</emphasis>: añade al comienzo una etiqueta al
+                elemento usando <code>Zend_View_Helper_FormLabel</code>, y
+                envolviéndola en una etiqueta &lt;dt&gt;. Si ninguna etiqueta es
+                provista, solo la etiqueta de la definición es generada.
+            </para></listitem>
+        </itemizedlist>
+
+        <note>
+            <title>Decoradores por defecto no necesitan ser cargados</title>
+
+            <para>
+                Por defecto, los decoradores por defecto son cargados durante la
+                inicialización del objeto. Puede deshabilitar esto pasando la
+                opción 'disableLoadDefaultDecorators' al constructor:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+$element = new Zend_Form_Element('foo',
+                                 array('disableLoadDefaultDecorators' =>
+                                      true)
+                                );
+]]>
+            </programlisting>
+
+            <para>
+                Esta opción puede ser combinada junto con cualquier otra opción que
+                pase, ya sea como un array de opciones o en un objeto
+                <code>Zend_Config</code>.
+            </para>
+        </note>
+
+        <para>
+            Ya que el orden en el cual los decoradores son registrados importa
+            -- el primer decorador registrado es ejecutado primero -- necesitará
+            estar seguro de registrar sus decoradores en el orden apropiado, o
+            asegurarse de que estableció las opciones de colocación en el modo apropiado. Por
+            dar un ejemplo, aquí esta el código que registran los decoradores
+            por defecto:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$this->addDecorators(array(
+    array('ViewHelper'),
+    array('Errors'),
+    array('Description', array('tag' => 'p', 'class' => 'description')),
+    array('HtmlTag', array('tag' => 'dd')),
+    array('Label', array('tag' => 'dt')),
+));
+]]>
+        </programlisting>
+
+        <para>
+            El contenido inicial es creado por el decorador 'ViewHelper', que
+            crea el propio elemento. En seguida, el decorador 'Errors' consulta
+            los mensajes de error del elemento, y, si hay alguno presente, los
+            pasa al auxiliar vista 'FormErrors' para mostrarlos. Si una
+            descripción está presente, el decorador 'Description' añadirá
+            un párrafo con class 'description' conteniendo el texto descriptivo
+            para el contenido agregado. El siguiente decorador, 'HtmlTag',
+            envuelve al elemento, los errores, y la descripción en una etiqueta
+            HTML &lt;dd&gt;. Finalmente, el último decorador, 'label', recupera
+            la etiqueta del elemento y la pasa al auxiliar vista 'FormLabel',
+            envolviéndolo en una etiqueta &lt;dt&gt;; por default el valor es
+            añadido al inicio del contenido. El resultado de la salida
+            básicamente se ve así:
+        </para>
+
+        <programlisting role="html"><![CDATA[
+<dt><label for="foo" class="optional">Foo</label></dt>
+<dd>
+    <input type="text" name="foo" id="foo" value="123" />
+    <ul class="errors">
+        <li>"123" is not an alphanumeric value</li>
+    </ul>
+    <p class="description">
+        This is some descriptive text regarding the element.
+    </p>
+</dd>
+]]>
+</programlisting>
+
+        <para>
+            Para más información sobre decoradores, lea la <link linkend="zend.form.decorators"> sección de Zend_Form_Decorator</link>.
+        </para>
+
+        <note>
+            <title>Usando múltiples decoradores al mismo tiempo</title>
+
+            <para>
+                Internamente, <code>Zend_Form_Element</code> utiliza una clase
+                decorador como mecanismo de búsqueda para la recuperación de
+                decoradores. Como resultado, no puede registrar múltiples
+                decoradores del mismo tipo; decoradores subsecuentes
+                simplemente sobreescribirán aquellos que ya existían.
+            </para>
+
+            <para>
+                Para evitar esto, puede usar <emphasis>alias</emphasis>. En
+                lugar de pasar un decorador o nombre de decorador como primer
+                argumento a <code>addDecorator()</code>, pase una matriz con un
+                solo elemento, con el alias apuntando al nombre o objeto
+                decorador:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+// Alias a 'FooBar':
+$element->addDecorator(array('FooBar' => 'HtmlTag'),
+                       array('tag' => 'div'));
+
+// Y recuperandolo posteriormente:
+$decorator = $element->getDecorator('FooBar');
+]]>
+            </programlisting>
+
+            <para>
+                En los métodos <code>addDecorators()</code> y
+                <code>setDecorators()</code>, necesitará pasar la opción
+                'decorator' en la matriz representando el decorador:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+// Y dos decoradores 'HtmlTag', 'FooBar' como alias:
+$element->addDecorators(
+    array('HtmlTag', array('tag' => 'div')),
+    array(
+        'decorator' => array('FooBar' => 'HtmlTag'),
+        'options' => array('tag' => 'dd')
+    ),
+);
+
+// Y recuperándolos posteriormente:
+$htmlTag = $element->getDecorator('HtmlTag');
+$fooBar  = $element->getDecorator('FooBar');
+]]>
+            </programlisting>
+        </note>
+
+        <para>
+            Métodos asociados con decoradores incluyen:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                <code>addDecorator($nameOrDecorator, array $options = null)</code>
+            </para></listitem>
+
+            <listitem><para>
+                <code>addDecorators(array $decorators)</code>
+            </para></listitem>
+
+            <listitem><para>
+                <code>setDecorators(array $decorators)</code> (sobreescribe
+                todos los decoradores)
+            </para></listitem>
+
+            <listitem><para>
+                <code>getDecorator($name)</code> (recupera un objeto decorador
+                por su nombre)
+            </para></listitem>
+
+            <listitem><para>
+                <code>getDecorators()</code> (recupera todos los decoradores)
+            </para></listitem>
+
+            <listitem><para>
+                <code>removeDecorator($name)</code> (elimina un decorador por su
+                nombre)
+            </para></listitem>
+
+            <listitem><para>
+                <code>clearDecorators()</code> (elimina todos los decoradores)
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            <code>Zend_Form_Element</code> también utiliza la sobrecarga para
+            permitir generar decoradores específicos. <code>__call()</code>
+            interceptará métodos que comiencen con el texto 'render' y utilizará
+            el resto del nombre del método para buscar un decorador; si se
+            encuentra, entonces será generado <emphasis>sólo ese</emphasis>
+            decorador. Cualquier argumento pasado al llamado del método será
+            usado como contenido para pasar  al método <code>render()</code> del
+            decorador. Como ejemplo:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// Genera solo el decorador ViewHelper:
+echo $element->renderViewHelper();
+
+// Genera solo el decorador HtmlTag, pasándole contenido:
+echo $element->renderHtmlTag("This is the html tag content");
+]]></programlisting>
+
+        <para>
+            Si el decorador no existe, una excepción es lanzada.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.form.elements.metadata">
+        <title>Metadatos y atributos</title>
+
+        <para>
+            <code>Zend_Form_Element</code> manipula una variedad de atributos y
+            medatados del elemento. Atributos básicos incluyen:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                <emphasis>name</emphasis>: el nombre del elemento. Emplea los
+                métodos de acceso <code>setName()</code> y <code>getName()</code>.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>label</emphasis>: la etiqueta del elemento. Emplea los
+                métodos de acceso <code>setLabel()</code> y <code>getLabel()</code>.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>order</emphasis>: el índice en el cual los elementos
+                deben ir mostrándose en el formulario. Emplea los métodos de
+                acceso <code>setOrder()</code> y <code>getOrder()</code>.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>value</emphasis>: El valor del elemento actual. Emplea
+                los métodos de acceso <code>setValue()</code> y
+                <code>getValue()</code>.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>description</emphasis>: una descripción del elemento;
+                a menudo utilizada para proveer un tooltip o ayuda contextual
+                con javascript describiendo el propósito del elemento. Emplea
+                los métodos de acceso <code>setDescription()</code> y
+                <code>getDescription()</code>.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>required</emphasis>: bandera que indica si un elemento
+                es requerido o no cuando se efectúa la validación del
+                formulario. Emplea los métodos de acceso
+                <code>setRequired()</code> y <code>getRequired()</code>. Esta
+                bandera es false por defecto.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>allowEmpty</emphasis>: bandera indicando si un
+                elemento no-requerido (opcional) debe intentar validar o no
+                valores vacíos. Cuando es true, y la bandera required es false,
+                valores vacíos no pasarán la cadena de validación, y se supone
+                verdadero. Emplea los métodos de acceso
+                <code>setAllowEmpty()</code> y <code>getAllowEmpty()</code>.
+                Esta bandera es true por defecto.
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>autoInsertNotEmptyValidator</emphasis>: bandera
+                indicando insertar o no un validador 'NotEmpty' cuando un
+                elemento es requerido. Por defecto, esta bandera es true.
+                Establezca la bandera con
+                <code>setAutoInsertNotEmptyValidator($flag)</code> y determine
+                el valor con <code>autoInsertNotEmptyValidator()</code>.
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            Los elementos del formulario pueden requerir metainformación
+            adicional. Para elementos XHTML del formuladio, por ejemplo, puede
+            querer especificar atributos como el class o id. Para facilitar esto
+            hay un conjunto de métodos de acceso:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                <emphasis>setAttrib($name, $value)</emphasis>: añade un atributo
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>setAttribs(array $attribs)</emphasis>: como
+                addAttribs(), pero sobreescribiendo
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>getAttrib($name)</emphasis>: recupera el valor de solo
+                un atributo
+            </para></listitem>
+
+            <listitem><para>
+                <emphasis>getAttribs()</emphasis>: recupera todos los atributos
+                como pares clave/valor
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            La mayoría de las veces, como sea, puede simplemente acceder a ellos
+            como propiedades de objeto, ya que <code>Zend_Form_Element</code>
+            utiliza la sobrecarga para facilitar el acceso a ellos:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// Equivalente a $element->setAttrib('class', 'text'):
+$element->class = 'text;
+]]>
+        </programlisting>
+
+        <para>
+            Por defecto, todos los atributos son pasados al auxiliar vista usado
+            por el elemento durante la generación, y generados como atributos de
+            la etiqueta del elemento.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.form.elements.standard">
+        <title>Elementos Estándar</title>
+
+        <para>
+            <code>Zend_Form</code> contiene un buen número de elementos
+            estándar; por favor lea el capítulo <link linkend="zend.form.standardElements">Elementos Estándar</link> para
+            todos los detalles.
+        </para>
+    </sect2>
+
+    <sect2 id="zend.form.elements.methods">
+        <title>Métodos de Zend_Form_Element</title>
+
+        <para>
+            <code>Zend_Form_Element</code> tiene muchos, muchos métodos. Lo que
+            sigue es un sumario de sus funciones, agrupados por tipo:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>Configuración:</para>
+                <itemizedlist>
+                    <listitem><para><code>setOptions(array $options)</code></para></listitem>
+                    <listitem><para><code>setConfig(Zend_Config $config)</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem><para>I18n:</para>
+                <itemizedlist>
+                    <listitem><para><code>setTranslator(Zend_Translate_Adapter $translator = null)</code></para></listitem>
+                    <listitem><para><code>getTranslator()</code></para></listitem>
+                    <listitem><para><code>setDisableTranslator($flag)</code></para></listitem>
+                    <listitem><para><code>translatorIsDisabled()</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem><para>Propiedades:</para>
+                <itemizedlist>
+                    <listitem><para><code>setName($name)</code></para></listitem>
+                    <listitem><para><code>getName()</code></para></listitem>
+                    <listitem><para><code>setValue($value)</code></para></listitem>
+                    <listitem><para><code>getValue()</code></para></listitem>
+                    <listitem><para><code>getUnfilteredValue()</code></para></listitem>
+                    <listitem><para><code>setLabel($label)</code></para></listitem>
+                    <listitem><para><code>getLabel()</code></para></listitem>
+                    <listitem><para><code>setDescription($description)</code></para></listitem>
+                    <listitem><para><code>getDescription()</code></para></listitem>
+                    <listitem><para><code>setOrder($order)</code></para></listitem>
+                    <listitem><para><code>getOrder()</code></para></listitem>
+                    <listitem><para><code>setRequired($flag)</code></para></listitem>
+                    <listitem><para><code>getRequired()</code></para></listitem>
+                    <listitem><para><code>setAllowEmpty($flag)</code></para></listitem>
+                    <listitem><para><code>getAllowEmpty()</code></para></listitem>
+                    <listitem><para><code>setAutoInsertNotEmptyValidator($flag)</code></para></listitem>
+                    <listitem><para><code>autoInsertNotEmptyValidator()</code></para></listitem>
+                    <listitem><para><code>setIgnore($flag)</code></para></listitem>
+                    <listitem><para><code>getIgnore()</code></para></listitem>
+                    <listitem><para><code>getType()</code></para></listitem>
+                    <listitem><para><code>setAttrib($name, $value)</code></para></listitem>
+                    <listitem><para><code>setAttribs(array $attribs)</code></para></listitem>
+                    <listitem><para><code>getAttrib($name)</code></para></listitem>
+                    <listitem><para><code>getAttribs()</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem><para>Cargadores y rutas de plugin:</para>
+                <itemizedlist>
+                    <listitem><para><code>setPluginLoader(Zend_Loader_PluginLoader_Interface $loader, $type)</code></para></listitem>
+                    <listitem><para><code>getPluginLoader($type)</code></para></listitem>
+                    <listitem><para><code>addPrefixPath($prefix, $path, $type = null)</code></para></listitem>
+                    <listitem><para><code>addPrefixPaths(array $spec)</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem><para>Validación:</para>
+                <itemizedlist>
+                    <listitem><para><code>addValidator($validator, $breakChainOnFailure = false, $options = array())</code></para></listitem>
+                    <listitem><para><code>addValidators(array $validators)</code></para></listitem>
+                    <listitem><para><code>setValidators(array $validators)</code></para></listitem>
+                    <listitem><para><code>getValidator($name)</code></para></listitem>
+                    <listitem><para><code>getValidators()</code></para></listitem>
+                    <listitem><para><code>removeValidator($name)</code></para></listitem>
+                    <listitem><para><code>clearValidators()</code></para></listitem>
+                    <listitem><para><code>isValid($value, $context = null)</code></para></listitem>
+                    <listitem><para><code>getErrors()</code></para></listitem>
+                    <listitem><para><code>getMessages()</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem><para>Filtros:</para>
+                <itemizedlist>
+                    <listitem><para><code>addFilter($filter, $options = array())</code></para></listitem>
+                    <listitem><para><code>addFilters(array $filters)</code></para></listitem>
+                    <listitem><para><code>setFilters(array $filters)</code></para></listitem>
+                    <listitem><para><code>getFilter($name)</code></para></listitem>
+                    <listitem><para><code>getFilters()</code></para></listitem>
+                    <listitem><para><code>removeFilter($name)</code></para></listitem>
+                    <listitem><para><code>clearFilters()</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+
+            <listitem><para>Generación:</para>
+                <itemizedlist>
+                    <listitem><para><code>setView(Zend_View_Interface $view = null)</code></para></listitem>
+                    <listitem><para><code>getView()</code></para></listitem>
+                    <listitem><para><code>addDecorator($decorator, $options = null)</code></para></listitem>
+                    <listitem><para><code>addDecorators(array $decorators)</code></para></listitem>
+                    <listitem><para><code>setDecorators(array $decorators)</code></para></listitem>
+                    <listitem><para><code>getDecorator($name)</code></para></listitem>
+                    <listitem><para><code>getDecorators()</code></para></listitem>
+                    <listitem><para><code>removeDecorator($name)</code></para></listitem>
+                    <listitem><para><code>clearDecorators()</code></para></listitem>
+                    <listitem><para><code>render(Zend_View_Interface $view = null)</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+        </itemizedlist>
+    </sect2>
+
+    <sect2 id="zend.form.elements.config">
+        <title>Configuración</title>
+
+        <para>
+            El constructor de <code>Zend_Form_Element</code> acepta tanto una
+            matriz de opciones como un objeto <code>Zend_Config</code>
+            conteniendo opciones, y esto puede configurarse usando
+            <code>setOptions()</code> o <code>setConfig()</code>. Hablando de
+            manera general, las claves son nombradas de la siguiente manera:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                Si 'set' + clave se refiere a un método de
+                <code>Zend_Form_Element</code>, entonces el valor provisto será
+                pasado a el método.
+            </para></listitem>
+
+            <listitem><para>
+                De otra manera, el valor será usado para establecer un atributo.
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            Excepciones a la regla incluyen las siguientes:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                <code>prefixPath</code> será pasado a
+                <code>addPrefixPaths()</code>
+            </para></listitem>
+
+            <listitem>
+                <para>
+                    Los siguientes setters no pueden establecerse de esta manera:
+                </para>
+
+                <itemizedlist>
+                    <listitem><para>
+                            <code>setAttrib</code> (aunque
+                            <code>setAttribs</code> <emphasis>funcionará</emphasis>
+                    </para></listitem>
+
+                    <listitem><para><code>setConfig</code></para></listitem>
+
+                    <listitem><para><code>setOptions</code></para></listitem>
+
+                    <listitem><para><code>setPluginLoader</code></para></listitem>
+
+                    <listitem><para><code>setTranslator</code></para></listitem>
+
+                    <listitem><para><code>setView</code></para></listitem>
+                </itemizedlist>
+            </listitem>
+        </itemizedlist>
+
+        <para>
+            Como ejemplo, aquí esta un archivo de configuración pasado para
+            cada tipo de dato configurable:
+        </para>
+
+        <programlisting role="ini"><![CDATA[
+[element]
+name = "foo"
+value = "foobar"
+label = "Foo:"
+order = 10
+required = true
+allowEmpty = false
+autoInsertNotEmptyValidator = true
+description = "Foo elements are for examples"
+ignore = false
+attribs.id = "foo"
+attribs.class = "element"
+; sets 'onclick' attribute
+onclick = "autoComplete(this, '/form/autocomplete/element')"
+prefixPaths.decorator.prefix = "My_Decorator"
+prefixPaths.decorator.path = "My/Decorator/"
+disableTranslator = 0
+validators.required.validator = "NotEmpty"
+validators.required.breakChainOnFailure = true
+validators.alpha.validator = "alpha"
+validators.regex.validator = "regex"
+validators.regex.options.pattern = "/^[A-F].*/$"
+filters.ucase.filter = "StringToUpper"
+decorators.element.decorator = "ViewHelper"
+decorators.element.options.helper = "FormText"
+decorators.label.decorator = "Label"
+]]>
+</programlisting>
+    </sect2>
+
+    <sect2 id="zend.form.elements.custom">
+        <title>Elementos personalizados</title>
+
+        <para>
+            Usted puede crear sus propios elementos personalizados simplemente
+            extendiendo la clase <code>Zend_Form_Element</code>. Las razones
+            comunes para hacer esto incluyen:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                Elementos que comparten validadores y/o filtros comunes
+            </para></listitem>
+
+            <listitem><para>
+                Elementos que tienen decoradores con funcionalidad personalizada
+            </para></listitem>
+        </itemizedlist>
+
+        <para>
+            Hay dos métodos típicamente usados para extender un elemento:
+            <code>init()</code>, el cual puede usarse para añadir una lógica de
+            inicialización personalizada a su elemento, y
+            <code>loadDefaultDecorators()</code>, el cual puede usarse para
+            establecer una lista de decoradores usados por su elemento de manera
+            predeterminada.
+        </para>
+
+        <para>
+            Como un ejemplo, digamos que todos los elementos de tipo texto en un
+            formulario que está creando, necesitan ser filtrados con
+            <code>StringTrim</code>, validados con una expresión regular, y que
+            quiere usar un decorador personalizado que ha creado para
+            mostrarlos, 'My_Decorator_TextItem'; adicionalmente, tiene un número
+            de atributos estándars, incluyendo 'size', 'maxLength', y 'class'
+            que quisiera especificar. Puede definir un elemento tal como sigue:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+class My_Element_Text extends Zend_Form_Element
+{
+    public function init()
+    {
+        $this->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator')
+             ->addFilters('StringTrim')
+             ->addValidator('Regex', false, array('/^[a-z0-9]{6,}$/i'))
+             ->addDecorator('TextItem')
+             ->setAttrib('size', 30)
+             ->setAttrib('maxLength', 45)
+             ->setAttrib('class', 'text');
+    }
+}
+]]>
+        </programlisting>
+
+        <para>
+            Entonces puede informar a su objeto formulario acerca del prefijo de
+            ruta para elementos de ese tipo, y comenzar creando elementos:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$form->addPrefixPath('My_Element', 'My/Element/', 'element')
+     ->addElement('foo', 'text');
+]]>
+        </programlisting>
+
+        <para>
+            El elemento 'foo' será ahora del tipo <code>My_Element_Text</code>,
+            y mostrará el comportamiento que ha especificado.
+        </para>
+
+        <para>
+            Otro método que puede querer sobreescribir cuando extienda
+            <code>Zend_Form_Element</code> es el método
+            <code>loadDefaultDecorators()</code>. Este método carga
+            condicionalmente un grupo de decoradores predefinidos para su
+            elemento; puede querer sustituir su propio decorador en su clase
+            extendida:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+class My_Element_Text extends Zend_Form_Element
+{
+    public function loadDefaultDecorators()
+    {
+        $this->addDecorator('ViewHelper')
+             ->addDecorator('DisplayError')
+             ->addDecorator('Label')
+             ->addDecorator('HtmlTag',
+                            array('tag' => 'div', 'class' => 'element'));
+    }
+}
+]]>
+        </programlisting>
+
+        <para>
+            Hay muchas maneras de personalizar elementos; asegúrese de leer la
+            documentación de la API de <code>Zend_Form_Element</code> para
+            conocer todos los métodos disponibles.
+        </para>
+    </sect2>
+</sect1>
+<!--
+vim:se ts=4 sw=4 tw=80 ai et:
+-->

+ 15 - 15
documentation/manual/es/module_specs/Zend_Test.xml

@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.test.introduction">
-    <title>Introducción</title>
-
-    <para>
-        <classname>Zend_Test</classname> proporciona herramientas para facilitar las pruebas unitarias (unit testing) 
-		de sus aplicaciones basadas en Zend Framework. Actualmente, ofrecemos facilidades para probar
-		sus aplicaciones MVC basadas en Zend Framework
-    </para>
-</sect1>
-<!--
-vim:se ts=4 sw=4 et:
--->
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.test.introduction">
+    <title>Introducción</title>
+
+    <para>
+        <classname>Zend_Test</classname> proporciona herramientas para facilitar las pruebas unitarias (unit testing) 
+        de sus aplicaciones basadas en Zend Framework. Actualmente, ofrecemos facilidades para probar
+        sus aplicaciones MVC basadas en Zend Framework
+    </para>
+</sect1>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 8 - 8
documentation/manual/es/module_specs/Zend_Tool_Framework-CliTool.xml

@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.tool.framework.clitool">
-    <title>Usando la herramienta CLI</title>
-    <para></para>
-    <!-- @todo -->
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.tool.framework.clitool">
+    <title>Usando la herramienta CLI</title>
+    <para></para>
+    <!-- @todo -->
+</sect1>

+ 8 - 8
documentation/manual/es/module_specs/Zend_Tool_Framework-WritingProviders.xml

@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.tool.framework.writing-providers">
-    <title>Creando Proveedores para usar con Zend_Tool_Framework</title>
-    <para></para>
-    <!-- @todo -->
-</sect1>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.tool.framework.writing-providers">
+    <title>Creando Proveedores para usar con Zend_Tool_Framework</title>
+    <para></para>
+    <!-- @todo -->
+</sect1>

+ 16 - 16
documentation/manual/es/module_specs/Zend_Tool_Project-Internals.xml

@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- EN-Revision: 15103 -->
-<!-- Reviewed: no -->
-<sect1 id="zend.tool.project.internals">
-    <title>Zend_Tool_Project Internos</title>
-    <sect2 id="zend.tool.project.internals.xml-structure">
-        <title>Zend_Tool_Project Estructura Xml Interna</title>
-        <para></para>
-        <!-- @todo -->
-    </sect2>
-
-    <sect2 id="zend.tool.project.internals.extending">
-        <title>Zend_Tool_Project Enxtensión Interna</title>
-        <para></para>
-        <!-- @todo -->
-    </sect2>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- EN-Revision: 15103 -->
+<!-- Reviewed: no -->
+<sect1 id="zend.tool.project.internals">
+    <title>Zend_Tool_Project Internos</title>
+    <sect2 id="zend.tool.project.internals.xml-structure">
+        <title>Zend_Tool_Project Estructura Xml Interna</title>
+        <para></para>
+        <!-- @todo -->
+    </sect2>
+
+    <sect2 id="zend.tool.project.internals.extending">
+        <title>Zend_Tool_Project Enxtensión Interna</title>
+        <para></para>
+        <!-- @todo -->
+    </sect2>
 </sect1>

+ 5 - 5
documentation/manual/es/module_specs/Zend_XmlRpc_Client.xml

@@ -450,16 +450,16 @@ try {
             <para>
                 Cuando el método <code>call()</code> es usado para realizar la
                 petición, <code>Zend_XmlRpc_Client_FaultException</code> será
-				lanzado como error. Un objeto <code>Zend_XmlRpc_Response</code> conteniendo
-				el error estará disponible llamando a
+                lanzado como error. Un objeto <code>Zend_XmlRpc_Response</code> conteniendo
+                el error estará disponible llamando a
                 <code>getLastResponse()</code>.
             </para>
 
             <para>
                 Cuando el método <code>doRequest()</code> sea usado para realizar una
-				petición, no lanzará una excepción. En vez de eso, devolverá un objeto
-				<code>Zend_XmlRpc_Response</code> que contendrá el error.
-				Esto puede comprobarse con
+                petición, no lanzará una excepción. En vez de eso, devolverá un objeto
+                <code>Zend_XmlRpc_Response</code> que contendrá el error.
+                Esto puede comprobarse con
                 <code>isFault()</code> método instancia de
                 <code>Zend_XmlRpc_Response</code>.
             </para>