Przeglądaj źródła

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 lat temu
rodzic
commit
c99e62f39c
30 zmienionych plików z 5706 dodań i 5706 usunięć
  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
                         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
                         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
                         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:
                         un mensaje general de fallo en la autenticación. Para más información, vea las siguientes notas:
                     </para>
                     </para>
                 </listitem>
                 </listitem>
@@ -252,7 +252,7 @@ $result = $auth->authenticate($authAdapter);
             <title>Implementando Almacenamiento Personalizado</title>
             <title>Implementando Almacenamiento Personalizado</title>
 
 
             <para>
             <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
                 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
                 implementar <code>Zend_Auth_Storage_Interface</code> y suplir una instancia de la clase a
                 <code>Zend_Auth::setStorage()</code>.
                 <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>
         <title>Notación de array</title>
 
 
         <para>
         <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>
         </para>
 
 
         <programlisting role="html"><![CDATA[
         <programlisting role="html"><![CDATA[
@@ -73,11 +73,11 @@
 </programlisting>
 </programlisting>
 
 
         <para>
         <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
             identical fields, which means one would overwrite the other. We can
             solve this solution using array notation:
             solve this solution using array notation:
         </para>
         </para>
@@ -146,14 +146,14 @@
 </programlisting>
 </programlisting>
 
 
         <para>
         <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>
 
 
         <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
             <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
             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
             en el anterior formulario HTML listado completo con identificadores. El nombre del array
@@ -168,18 +168,18 @@
         </para>
         </para>
 
 
         <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>
         </para>
 
 
         <itemizedlist>
         <itemizedlist>
             <listitem>
             <listitem>
                 <para>
                 <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
                     <code>setElementsBelongTo()</code> haya sido llamado. si el
                     formulario no tiene un específico nombre, o si
                     formulario no tiene un específico nombre, o si
                     <code>setElementsBelongTo()</code> no ha sido definido, esta bandera
                     <code>setElementsBelongTo()</code> no ha sido definido, esta bandera
@@ -188,13 +188,13 @@
                 </para>
                 </para>
 
 
                 <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>
                 </para>
             </listitem>
             </listitem>
 
 
             <listitem><para>
             <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
                     Usando este método, se puede especificar el nombre de un array al
                     cual todos los elementos del formulario pertenecen. Se puede determinar el
                     cual todos los elementos del formulario pertenecen. Se puede determinar el
                     nombre usando el accesor <code>getElementsBelongTo()</code>.
                     nombre usando el accesor <code>getElementsBelongTo()</code>.
@@ -202,8 +202,8 @@
         </itemizedlist>
         </itemizedlist>
 
 
         <para>
         <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>.
             el método <code>Zend_Form_Element::setBelongsTo()</code>.
             Para descubrir el valor que tiene -- sea o no sea definido explicitamente o
             Para descubrir el valor que tiene -- sea o no sea definido explicitamente o
             implicitamente a través del formulario -- se puede usar el
             implicitamente a través del formulario -- se puede usar el
@@ -215,31 +215,31 @@
         <title>Formularioss Multi-Página</title>
         <title>Formularioss Multi-Página</title>
 
 
         <para>
         <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
             <code>Zend_Form</code>; sin embargo, mas soporte para implementarlos
             esta disponible y puede ser utilizado con una pequeña ayuda.
             esta disponible y puede ser utilizado con una pequeña ayuda.
         </para>
         </para>
 
 
         <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>
         </para>
 
 
         <example id="zend.form.advanced.multiPage.registration">
         <example id="zend.form.advanced.multiPage.registration">
             <title>Ejemplo de formulario registración</title>
             <title>Ejemplo de formulario registración</title>
             <para>
             <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>
 
 
             <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>
             </para>
 
 
             <programlisting role="php"><![CDATA[
             <programlisting role="php"><![CDATA[
@@ -345,13 +345,13 @@ class My_Form_Registration extends Zend_Form
             </programlisting>
             </programlisting>
 
 
             <para>
             <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>
             </para>
 
 
             <programlisting role="php"><![CDATA[
             <programlisting role="php"><![CDATA[
@@ -434,20 +434,20 @@ class My_Form_Registration extends Zend_Form
             </programlisting>
             </programlisting>
 
 
             <para>
             <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
                 <code>Zend_Session_Namespace</code> para persistir la información, el cual
                 nos ayudará a responder la pregunta de cual formulario someter.
                 nos ayudará a responder la pregunta de cual formulario someter.
             </para>
             </para>
 
 
             <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>
             </para>
 
 
             <programlisting role="php"><![CDATA[
             <programlisting role="php"><![CDATA[
@@ -467,13 +467,13 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
             </programlisting>
 
 
             <para>
             <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>
             </para>
 
 
             <programlisting role="php"><![CDATA[
             <programlisting role="php"><![CDATA[
@@ -571,7 +571,7 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
             </programlisting>
 
 
             <para>
             <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
                     $this-&gt;getCurrentSubForm();</code>" recuperar el actual
                 sub formulario para la validación, o "<code>$next =
                 sub formulario para la validación, o "<code>$next =
                     $this-&gt;getNextSubForm();</code>" obtener el siguiente para
                     $this-&gt;getNextSubForm();</code>" obtener el siguiente para
@@ -579,22 +579,22 @@ class RegistrationController extends Zend_Controller_Action
             </para>
             </para>
 
 
             <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
                 <code>getNextSubForm()</code> recupera el formulario a desplegar. Podemos
                 entonces usar el método del formulario <code>prepareSubForm()</code> para asegurar
                 entonces usar el método del formulario <code>prepareSubForm()</code> para asegurar
                 que el formulario esta listo para desplegar.
                 que el formulario esta listo para desplegar.
             </para>
             </para>
 
 
             <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>
             </para>
 
 
             <programlisting role="php"><![CDATA[
             <programlisting role="php"><![CDATA[
@@ -640,9 +640,9 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
             </programlisting>
 
 
             <para>
             <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>
             </para>
 
 
             <programlisting role="php"><![CDATA[
             <programlisting role="php"><![CDATA[
@@ -688,18 +688,18 @@ class RegistrationController extends Zend_Controller_Action
             </programlisting>
             </programlisting>
 
 
             <para>
             <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>
 
 
             <para>
             <para>
-            	La vista de scripts son muy simples:
+                La vista de scripts son muy simples:
             </para>
             </para>
 
 
             <programlisting role="php"><![CDATA[
             <programlisting role="php"><![CDATA[
@@ -737,10 +737,10 @@ endforeach ?>
             </programlisting>
             </programlisting>
 
 
             <para>
             <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>
             </para>
         </example>
         </example>
     </sect2>
     </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>
 </sect1>

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

@@ -450,16 +450,16 @@ try {
             <para>
             <para>
                 Cuando el método <code>call()</code> es usado para realizar la
                 Cuando el método <code>call()</code> es usado para realizar la
                 petición, <code>Zend_XmlRpc_Client_FaultException</code> será
                 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>.
                 <code>getLastResponse()</code>.
             </para>
             </para>
 
 
             <para>
             <para>
                 Cuando el método <code>doRequest()</code> sea usado para realizar una
                 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>isFault()</code> método instancia de
                 <code>Zend_XmlRpc_Response</code>.
                 <code>Zend_XmlRpc_Response</code>.
             </para>
             </para>