Просмотр исходного кода

Russian Documentation:
- Sync
- New translations

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

irina 16 лет назад
Родитель
Сommit
812224fbc6

+ 157 - 11
documentation/manual/ru/manual.xml.in

@@ -1,4 +1,5 @@
-<?xml version='1.0' encoding='UTF-8' ?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
     "@DOCBOOK_DTD@"
 [
@@ -38,6 +39,19 @@
         </xi:include>
     </chapter>
 
+    <chapter id="zend.acl">
+        <title>Zend_Acl</title>
+        <xi:include href="module_specs/Zend_Acl.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Acl.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Acl-Refining.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Acl-Refining.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Acl-Advanced.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Acl-Advanced.xml" /></xi:fallback>
+        </xi:include>
+    </chapter>
+
     <chapter id="zend.amf">
         <title>Zend_Amf</title>
         <xi:include href="module_specs/Zend_Amf.xml">
@@ -48,16 +62,25 @@
         </xi:include>
     </chapter>
 
-    <chapter id="zend.acl">
-        <title>Zend_Acl</title>
-        <xi:include href="module_specs/Zend_Acl.xml">
-            <xi:fallback><xi:include href="../en/module_specs/Zend_Acl.xml" /></xi:fallback>
+    <chapter id="zend.application">
+        <title>Zend_Application</title>
+        <xi:include href="module_specs/Zend_Application-Introduction.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Application-Introduction.xml" /></xi:fallback>
         </xi:include>
-        <xi:include href="module_specs/Zend_Acl-Refining.xml">
-            <xi:fallback><xi:include href="../en/module_specs/Zend_Acl-Refining.xml" /></xi:fallback>
+        <xi:include href="module_specs/Zend_Application-QuickStart.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Application-QuickStart.xml" /></xi:fallback>
         </xi:include>
-        <xi:include href="module_specs/Zend_Acl-Advanced.xml">
-            <xi:fallback><xi:include href="../en/module_specs/Zend_Acl-Advanced.xml" /></xi:fallback>
+        <xi:include href="module_specs/Zend_Application-TheoryOfOperation.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Application-TheoryOfOperation.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Application-Examples.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Application-Examples.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Application-CoreFunctionality.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Application-CoreFunctionality.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Application-AvailableResources.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Application-AvailableResources.xml" /></xi:fallback>
         </xi:include>
     </chapter>
 
@@ -111,6 +134,19 @@
             <xi:fallback><xi:include href="../en/module_specs/Zend_Captcha-Adapters.xml" /></xi:fallback>
         </xi:include>
     </chapter>
+    
+    <chapter id="zend.codegenerator">
+        <title>Zend_CodeGenerator</title>
+        <xi:include href="module_specs/Zend_CodeGenerator-Introduction.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_CodeGenerator-Introduction.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_CodeGenerator-Examples.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_CodeGenerator-Examples.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_CodeGenerator-Reference.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_CodeGenerator-Reference.xml" /></xi:fallback>
+        </xi:include>
+    </chapter>
 
     <chapter id="zend.config">
         <title>Zend_Config</title>
@@ -514,6 +550,12 @@
         <xi:include href="module_specs/Zend_Loader.xml">
             <xi:fallback><xi:include href="../en/module_specs/Zend_Loader.xml" /></xi:fallback>
         </xi:include>
+        <xi:include href="module_specs/Zend_Loader-Autoloader.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Loader-Autoloader.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Loader-Autoloader-Resource.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Loader-Autoloader-Resource.xml" /></xi:fallback>
+        </xi:include>
         <xi:include href="module_specs/Zend_Loader-PluginLoader.xml">
             <xi:fallback><xi:include href="../en/module_specs/Zend_Loader-PluginLoader.xml" /></xi:fallback>
         </xi:include>
@@ -647,6 +689,19 @@
             <xi:fallback><xi:include href="../en/module_specs/Zend_Mime_Part.xml" /></xi:fallback>
         </xi:include>
     </chapter>
+    
+    <chapter id="zend.navigation">
+        <title>Zend_Navigation</title>
+        <xi:include href="module_specs/Zend_Navigation-Introduction.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Navigation-Introduction.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Navigation-Pages.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Navigation-Pages.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Navigation-Containers.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Navigation-Containers.xml" /></xi:fallback>
+        </xi:include>
+    </chapter>
 
     <chapter id="zend.openid">
         <title>Zend_OpenId</title>
@@ -709,6 +764,19 @@
         </xi:include>
     </chapter>
 
+    <chapter id="zend.reflection">
+        <title>Zend_Reflection</title>
+        <xi:include href="module_specs/Zend_Reflection-Introduction.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Reflection-Introduction.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Reflection-Examples.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Reflection-Examples.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Reflection-Reference.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Reflection-Reference.xml" /></xi:fallback>
+        </xi:include>
+    </chapter>
+
     <chapter id="zend.registry">
         <title>Zend_Registry</title>
         <xi:include href="module_specs/Zend_Registry.xml">
@@ -784,6 +852,33 @@
         <xi:include href="module_specs/Zend_Service_Amazon.xml">
             <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon.xml" /></xi:fallback>
         </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2-Instance.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2-Instance.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2-Image.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2-Image.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2-Ebs.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2-Ebs.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2-Elasticip.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2-Elasticip.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2-Keypair.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2-Keypair.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2-RegionsAndAvalibilityZones.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2-RegionsAndAvalibilityZones.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_Ec2-Securitygroups.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_Ec2-Securitygroups.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Service_Amazon_S3.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Amazon_S3.xml" /></xi:fallback>
+        </xi:include>
         <xi:include href="module_specs/Zend_Service_Audioscrobbler.xml">
             <xi:fallback><xi:include href="../en/module_specs/Zend_Service_Audioscrobbler.xml" /></xi:fallback>
         </xi:include>
@@ -860,6 +955,16 @@
         </xi:include>
     </chapter>
 
+    <chapter id="zend.tag">
+        <title>Zend_Tag</title>
+        <xi:include href="module_specs/Zend_Tag-Introduction.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tag-Introduction.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Tag_Cloud.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tag_Cloud.xml" /></xi:fallback>
+        </xi:include>
+    </chapter>
+
     <chapter id="zend.test">
         <title>Zend_Test</title>
         <xi:include href="module_specs/Zend_Test.xml">
@@ -889,6 +994,41 @@
             <xi:fallback><xi:include href="../en/module_specs/Zend_TimeSync-Working.xml" /></xi:fallback>
         </xi:include>
     </chapter>
+    
+    <chapter id="zend.tool.framework">
+        <title>Zend_Tool_Framework</title>
+        <xi:include href="module_specs/Zend_Tool_Framework-Introduction.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Framework-Introduction.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Tool_Framework-CliTool.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Framework-CliTool.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Tool_Framework-Architecture.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Framework-Architecture.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Tool_Framework-WritingProviders.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Framework-WritingProviders.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Tool_Framework-SystemProviders.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Framework-SystemProviders.xml" /></xi:fallback>
+        </xi:include>
+    </chapter>
+
+    <chapter id="zend.tool.project">
+        <title>Zend_Tool_Project</title>
+        <xi:include href="module_specs/Zend_Tool_Project.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Project.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Tool_Project-CreateProject.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Project-CreateProject.xml" /></xi:fallback>
+        </xi:include>
+        <xi:include href="module_specs/Zend_Tool_Project-Providers.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Tool_Project-Providers.xml" /></xi:fallback>
+        </xi:include>
+        <!--
+        <xi:include href="module_specs/Zend_Tool_Project-Internals.xml" />
+        -->
+    </chapter>
 
     <chapter id="zend.translate">
         <title>Zend_Translate</title>
@@ -918,8 +1058,8 @@
         <xi:include href="module_specs/Zend_Validate.xml">
             <xi:fallback><xi:include href="../en/module_specs/Zend_Validate.xml" /></xi:fallback>
         </xi:include>
-        <xi:include href="module_specs/Zend_Validate-Set.xml">
-            <xi:fallback><xi:include href="../en/module_specs/Zend_Validate-Set.xml" /></xi:fallback>
+        <xi:include href="module_specs/Zend_Validate-Set.xml" parse="xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Validate-Set.xml" parse="xml" /></xi:fallback>
         </xi:include>
         <xi:include href="module_specs/Zend_Validate-ValidatorChains.xml">
             <xi:fallback><xi:include href="../en/module_specs/Zend_Validate-ValidatorChains.xml" /></xi:fallback>
@@ -927,6 +1067,9 @@
         <xi:include href="module_specs/Zend_Validate-WritingValidators.xml">
             <xi:fallback><xi:include href="../en/module_specs/Zend_Validate-WritingValidators.xml" /></xi:fallback>
         </xi:include>
+        <xi:include href="module_specs/Zend_Validate-Messages.xml">
+            <xi:fallback><xi:include href="../en/module_specs/Zend_Validate-Messages.xml" /></xi:fallback>
+        </xi:include>
     </chapter>
 
     <chapter id="zend.version">
@@ -953,6 +1096,9 @@
         <xi:include href="module_specs/Zend_View-Abstract.xml" parse="xml" >
             <xi:fallback><xi:include href="../en/module_specs/Zend_View-Abstract.xml" /></xi:fallback>
         </xi:include>
+        <xi:include href="module_specs/Zend_View-Migration.xml" parse="xml" >
+            <xi:fallback><xi:include href="../en/module_specs/Zend_View-Migration.xml" /></xi:fallback>
+        </xi:include>
     </chapter>
 
     <chapter id="zend.wildfire">

+ 11 - 1
documentation/manual/ru/module_specs/Zend_Cache-Backends.xml

@@ -219,7 +219,17 @@
                           <entry><code>false</code></entry>
                           <entry>
                              <code>true</code>, если вы хотите использовать
-                             компрессию на лету
+                             компрессию "на лету"
+                          </entry>
+                      </row>
+                      <row>
+                          <entry><code>compatibility</code></entry>
+                          <entry><code>boolean</code></entry>
+                          <entry><code>false</code></entry>
+                          <entry>
+                             true, если нужно включить режим
+                             совместимости со старыми серверами и расширениями
+                             memcache
                           </entry>
                       </row>
                   </tbody>

+ 81 - 49
documentation/manual/ru/module_specs/Zend_View-Controllers.xml

@@ -1,48 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <sect1 id="zend.view.controllers">
     <title>Скрипты контроллеров</title>
 
     <para>
         В контроллере вы создаете и конфигурируете экземпляр
-        <code>Zend_View</code>. Затем вы объявляете переменные для этого
+        <classname>Zend_View</classname>. Затем вы устанавливаете переменные для этого
         экземпляра и приказываете ему сгенерировать выходные данные, используя
-        указанный скрипт.
+        указанный скрипт вида.
     </para>
 
     <sect2 id="zend.view.controllers.assign">
 
-        <title>Объявление переменных</title>
+        <title>Установка переменных</title>
 
         <para>
-            Ваш скрипт контроллера должен объявить
+            Ваш скрипт контроллера должен установить
             необходимые переменные до того, как будет передано
-            управление скрипту вида. Обычно вы можете делать объявления по одному через объявление свойств экземпляра вида.
+            управление скрипту вида. Обычно вы можете устанавливать переменные
+            по одной через объявление свойств экземпляра вида.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
 $view->a = "Hay";
 $view->b = "Bee";
-$view->c = "Sea";]]>
-        </programlisting>
+$view->c = "Sea";
+]]></programlisting>
 
         <para>
-            Однако это может оказаться утомительным, если вы уже имеете
+            Однако это может показаться утомительным, если вы уже имеете
             набор значений для присвоения в массиве или объекте.
         </para>
 
         <para>
-            Методы <code>assign()</code> дают возможность присваивать значения
+            Метод <code>assign()</code> дает возможность устанавливать значения
             из массива или объекта "партиями". Следующий пример делает
-            то же самое, что и предыдущий с последовательным объявлением
-            свойств.
+            то же самое, что и предыдущий с последовательной установкой
+            переменных.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
 
 // определение массива из пар ключ-значение, где
 // ключ является именем переменной,
-// а значение - значением объявляемой переменной
+// а значение - значением устанавливаемой переменной
 $array = array(
     'a' => "Hay",
     'b' => "Bee",
@@ -51,26 +54,26 @@ $array = array(
 $view->assign($array);
 
 // делаем то же самое с открытыми свойствами объекта;
-// обратите внимание, что при объявлении мы приводим объект к массиву
+// обратите внимание, что при установке мы приводим объект к массиву
 $obj = new StdClass;
 $obj->a = "Hay";
 $obj->b = "Bee";
 $obj->c = "Sea";
-$view->assign((array) $obj);]]>
-        </programlisting>
+$view->assign((array) $obj);
+]]></programlisting>
 
         <para>
-            Вы можете также использовать методы для
-            последовательного объявления c передачей имени переменной
+            Вы также можете использовать этот метод для
+            последовательной установки c передачей имени переменной
             и ее значения.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
 $view->assign('a', "Hay");
 $view->assign('b', "Bee");
-$view->assign('c', "Sea");]]>
-        </programlisting>
+$view->assign('c', "Sea");
+]]></programlisting>
 
     </sect2>
 
@@ -80,64 +83,66 @@ $view->assign('c', "Sea");]]>
 
         <para>
             После того, как вы определили все необходимые переменные, контроллер
-            должен дать <code>Zend_View</code> команду выполнить указанный
+            должен дать <classname>Zend_View</classname> команду выполнить указанный
             скрипт вида. Делайте это посредством вызова метода
             <code>render()</code>. Обратите внимание, что этот метод будет
             возвращать результат рендеринга, но не выводить его,
             поэтому вам нужно самостоятельно вывести его посредством
-            <code>echo</code> или <code>print</code>, когда нужно.
+            <code>echo</code> или <code>print</code>, в том месте,
+            где это нужно.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
 $view->a = "Hay";
 $view->b = "Bee";
 $view->c = "Sea";
-echo $view->render('someView.php');]]>
-        </programlisting>
+echo $view->render('someView.php');
+]]></programlisting>
 
     </sect2>
 
     <sect2 id="zend.view.controllers.script-paths">
 
-        <title>Пути к скриптам видов</title>
+        <title>Пути к скриптам вида</title>
 
         <para>
-            По умолчанию <code>Zend_View</code> ищет скрипты
+            По умолчанию <classname>Zend_View</classname> ищет скрипты
             вида относительно вызывающего скрипта.
-            Например, если скрипт контроллера находится в
-            <code>/path/to/app/controllers</code> и он вызывает
-            <code>$view->render('someView.php')</code>, то
-            <code>Zend_View</code> будет искать
-            <code>/path/to/app/controllers/someView.php</code>.
+            Например, если скрипт контроллера находится в директории
+            "/path/to/app/controllers" и он вызывает скрипт вида
+            следующим образом: <code>$view->render('someView.php')</code>, то
+            <classname>Zend_View</classname> будет искать скрипт вида по пути
+            "/path/to/app/controllers/someView.php".
         </para>
 
         <para>
-            Очевидно, ваши скрипты вида могут находиться в другом месте.
-            Чтобы указать <code>Zend_View</code>, где искать скрипты вида,
+            Очевидно, что ваши скрипты вида могут находиться в любом другом
+            месте. Чтобы указать <classname>Zend_View</classname>, где искать скрипты вида,
             используйте метод <code>setScriptPath()</code>.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
-$view->setScriptPath('/path/to/app/views');]]>
-        </programlisting>
+$view->setScriptPath('/path/to/app/views');
+]]></programlisting>
 
         <para>
             Теперь, когда вы вызываете <code>$view->render('someView.php')</code>,
-            он будет искать <code>/path/to/app/views/someView.php</code>.
+            он будет искать файл "/path/to/app/views/someView.php".
         </para>
 
         <para>
-            Фактически вы можете "складывать" в стек пути,
+            Вы можете "складывать" в стек пути,
             используя метод <code>addScriptPath()</code>. Если вы добавили
-            пути в стек, то <code>Zend_View</code> будет искать запрошенный
-            скрипт вида в этих путях, начиная с пути, добавленного последним.
+            пути в стек, то <classname>Zend_View</classname> будет искать запрошенный
+            скрипт вида по этим путям, начиная с пути, добавленного последним.
             Это дает возможность замещать скрипты видов, принятые по умолчанию,
-            другими, это позволяет создавать специальные "темы" и "скины" для всех или только определенных видов.
+            другими, это позволяет создавать специальные "темы" и "скины"
+            для всех или только определенных видов.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
 $view->addScriptPath('/path/to/app/views');
 $view->addScriptPath('/path/to/custom/');
@@ -145,11 +150,38 @@ $view->addScriptPath('/path/to/custom/');
 // теперь, когда вы вызываете $view->render('booklist.php'), Zend_View
 // будет искать "/path/to/custom/booklist.php",
 // затем "/path/to/app/views/booklist.php",
-// и под конец "booklist.php" в текущем каталоге.]]>
-        </programlisting>
-
+// и, наконец, "booklist.php" в текущем каталоге.
+]]></programlisting>
+
+        <note>
+            <title>Никогда не используйте пользовательский ввод при установке
+            путей к скриптам вида</title>
+
+            <para>
+                <classname>Zend_View</classname> использует пути к скриптам для поиска
+                и рендеринга скриптов вида. Эти директории должны быть заранее
+                известны и находиться под вашим контролем.
+                <emphasis>Никогда</emphasis> не устанавливайте пути к скриптам
+                вида на основе пользовательского ввода.
+                Например, для атаки может использоваться следующий ввод:
+            </para>
+
+            <programlisting role="php"><![CDATA[
+// $_GET['foo'] == '../../../etc'
+$view->addScriptPath($_GET['foo']);
+$view->render('passwd');
+]]></programlisting>
+
+            <para>
+                Хотя этот пример надуманный, он ясно демонстрирует
+                потенциальную уязвимость. Если вы <emphasis>не можете</emphasis>
+                обойтись без использования пользовательского ввода при установке
+                пути к скриптам вида, то должным образом фильтруйте ввод и
+                удостоверяйтесь, что полученный путь находится под контролем
+                вашего приложения.
+            </para>
+        </note>
     </sect2>
-
 </sect1>
 <!--
 vim:se ts=4 sw=4 et:

+ 54 - 0
documentation/manual/ru/module_specs/Zend_View-Helpers-Action.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect3 id="zend.view.helpers.initial.action">
+    <title>Помощник Action</title>
+
+    <para>
+        Помощник видов <code>Action</code> позволяет скриптам вида
+        вызывать действия из контроллеров, при этом будет
+        возвращаться результат из объекта ответа. Он может использоваться
+        в том случае, когда какое-то действие генерирует
+        повторно используемое содержимое или содержимое для "виджетов".
+    </para>
+
+    <para>
+        Действия, которые производят внутренний переход
+        (<code>_forward()</code>) или перенаправление на другую страницу,
+        считаются недопустимыми и будут возвращать пустую строку.
+    </para>
+
+    <para>
+        API помощника <code>Action</code> аналогичен тому, который
+        использует большинство MVC-компонент при вызове действий:
+        <code>action($action,
+            $controller, $module = null, array $params = array())</code>.
+        Параметры <code>$action</code> и <code>$controller</code>
+        являются обязательными; если не был указан модуль, то используется
+        модуль по умолчанию.
+    </para>
+
+    <example id="zend.view.helpers.initial.action.usage">
+        <title>Использование помощника Action</title>
+
+        <para>
+            Допустим, вы имеете контроллер
+            <code>CommentController</code> с методом действия
+            <code>listAction()</code>, который желаете вызывать
+            с тем, чтобы получать список комментариев для текущего запроса:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<div id="sidebar right">
+    <div class="item">
+        <?php echo $this->action('list',
+                                 'comment',
+                                 null,
+                                 array('count' => 10)); ?>
+    </div>
+</div>
+]]></programlisting>
+    </example>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 96 - 0
documentation/manual/ru/module_specs/Zend_View-Helpers-Doctype.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect3 id="zend.view.helpers.initial.doctype">
+    <title>Помощник Doctype</title>
+
+    <para>
+        Валидные HTML- и XHTML-документы должны включать в себя декларацию
+        <code>DOCTYPE</code>. Написание этих деклараций сложно для
+        запоминания, кроме того, от выбранного типа документа зависит то, как
+        должны выводиться элементы в вашем документе (например, экранирование
+        через CDATA в элементах <code>&lt;script&gt;</code> и
+        <code>&lt;style&gt;</code>).
+    </para>
+
+    <para>
+        Помощник <code>Doctype</code> позволяет указать один из следующих
+        типов:
+    </para>
+
+    <itemizedlist>
+        <listitem><para><code>XHTML11</code></para></listitem>
+        <listitem><para><code>XHTML1_STRICT</code></para></listitem>
+        <listitem><para><code>XHTML1_TRANSITIONAL</code></para></listitem>
+        <listitem><para><code>XHTML1_FRAMESET</code></para></listitem>
+        <listitem><para><code>XHTML_BASIC1</code></para></listitem>
+        <listitem><para><code>HTML4_STRICT</code></para></listitem>
+        <listitem><para><code>HTML4_LOOSE</code></para></listitem>
+        <listitem><para><code>HTML4_FRAMESET</code></para></listitem>
+        <listitem><para><code>HTML5</code></para></listitem>
+    </itemizedlist>
+
+    <para>
+        Вы можете также определить любой другой тип, если он является
+        синтаксически корректным.
+    </para>
+
+    <para>
+        Помощник <code>Doctype</code> является частной реализацией 
+        <link linkend="zend.view.helpers.initial.placeholder">помощника
+            Placeholder</link>.
+    </para>
+
+    <example id="zend.view.helpers.initial.doctype.basicusage">
+        <title>Использование помощника Doctype</title>
+
+        <para>
+            Вы можете указать декларацию DOCTYPE в любой момент времени. Но
+            помощники, использующие эту декларацию при формированиии вывода,
+            увидят ее только после того, как она была определена.
+            Поэтому лучше всего указывать ее в вашем файле загрузки:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$doctypeHelper = new Zend_View_Helper_Doctype();
+$doctypeHelper->doctype('XHTML1_STRICT');
+]]></programlisting>
+
+        <para>
+            И затем выводить ее в самом начале вашего скрипта вида:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php echo $this->doctype() ?>
+]]></programlisting>
+
+    </example>
+
+    <example id="zend.view.helpers.initial.doctype.retrieving">
+        <title>Извлечение DOCTYPE</title>
+
+        <para>
+            Если нужно узнать тип документа, то вы можете сделать
+            это путем вызова метода <code>getDoctype()</code> объекта,
+            возвращаемого при вызове помощника.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$doctype = $view->doctype()->getDoctype();
+]]></programlisting>
+
+        <para>
+            Часто требуется только узнать, соответствует ли декларация языку
+            XHTML или нет. В этом случае метода <code>isXhtml()</code> будет
+            достаточно:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+if ($view->doctype()->isXhtml()) {
+    // сделать что-то
+}
+]]></programlisting>
+    </example>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 104 - 0
documentation/manual/ru/module_specs/Zend_View-Helpers-HeadLink.xml

@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect3 id="zend.view.helpers.initial.headlink">
+    <title>Помощник HeadLink</title>
+
+    <para>
+        HTML-элемент <code>&lt;link&gt;</code> все чаще используется для
+        создания связей с различными ресурсами - таблицами стилей,
+        лентами новостей, пиктограммами (favicon), обратными ссылками (trackback)
+        и многим другим.
+        Помощник <code>HeadLink</code> предоставляет простой интерфейс
+        для создания и агрегирования этих элементов с целью последующего
+        извлечения и вывода в вашем скрипте макета (layout script).
+    </para>
+
+    <para>
+        Помощник <code>HeadLink</code> имеет специальные методы для добавления
+        таблиц стилей в его стек:
+    </para>
+
+    <itemizedlist>
+        <listitem><para><code>appendStylesheet($href, $media,
+                    $conditionalStylesheet, $extras)</code></para></listitem>
+        <listitem><para><code>offsetSetStylesheet($index, $href, $media,
+                    $conditionalStylesheet, $extras)</code></para></listitem>
+        <listitem><para><code>prependStylesheet($href, $media,
+                    $conditionalStylesheet, $extras)</code></para></listitem>
+        <listitem><para><code>setStylesheet($href, $media,
+                    $conditionalStylesheet, $extras)</code></para></listitem>
+    </itemizedlist>
+
+    <para>
+        По умолчанию аргумент <code>$media</code> имеет значение 'screen',
+        но через него могут передаваться и другие допустимые значения атрибута
+        media. <code>$conditionalStylesheet</code> может быть либо
+        строкой, либо иметь булево значение false, он используется
+        для определения того, требуется ли использовать специальные
+        комментарии для предотвращения загрузки данной таблицы стилей на
+        определенных платформах.
+        <code>$extras</code> является массивом дополнительных атрибутов,
+        которые вы хотите добавить в элемент.
+    </para>
+
+    <para>
+        Помощник <code>HeadLink</code> также имеет специальные методы
+        для добавления альтернативных связей в его стек:
+    </para>
+
+    <itemizedlist>
+        <listitem><para><code>appendAlternate($href, $type,
+                    $title, $extras)</code></para></listitem>
+        <listitem><para><code>offsetSetAlternate($index, $href, $type,
+                    $title, $extras)</code></para></listitem>
+        <listitem><para><code>prependAlternate($href, $type,
+                    $title, $extras)</code></para></listitem>
+        <listitem><para><code>setAlternate($href, $type,
+                    $title, $extras)</code></para></listitem>
+    </itemizedlist>
+
+    <para>
+        Метод <code>headLink()</code> позволяет указывать все
+        атрибуты, необходимые для элемента <code>&lt;link&gt;</code>,
+        он также позволяет указывать место размещения -
+        новый элемент либо замещает все остальные элементы, либо добавляется в
+        начало/конец стека.
+    </para>
+
+    <para>
+        Помощник <code>HeadLink</code> является частной реализацией
+        <link linkend="zend.view.helpers.initial.placeholder">помощника
+            Placeholder</link>.
+    </para>
+
+    <example id="zend.view.helpers.initial.headlink.basicusage">
+        <title>Использование помощника HeadLink</title>
+
+        <para>
+            Вы можете указывать <code>headLink</code> в любой момент времени.
+            Глобальные ссылки обычно указываются в скрипте макета,
+            а специальные (для отдельных страниц) - в скриптах вида.
+            В вашем скрипте макета, в разделе &lt;head&gt;, вы "выводите"
+            помощника, при этом будут выведены ссылки, которые вы добавили
+            ранее.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php // установка ссылок в скрипте вида:
+$this->headLink()->appendStylesheet('/styles/basic.css')
+                 ->headLink(array('rel' => 'favicon',
+                                  'href' => '/img/favicon.ico'),
+                                  'PREPEND')
+                 ->prependStylesheet('/styles/moz.css',
+                                     'screen',
+                                     true,
+                                     array('id' => 'my_stylesheet'));
+?>
+<?php // вывод ссылок: ?>
+<?php echo $this->headLink() ?>
+]]></programlisting>
+    </example>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 145 - 0
documentation/manual/ru/module_specs/Zend_View-Helpers-HeadMeta.xml

@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect3 id="zend.view.helpers.initial.headmeta">
+    <title>Помощник HeadMeta</title>
+
+    <para>
+        Элемент <code>&lt;meta&gt;</code> используется для добавления
+        мета-информации о вашем HTML-документе, обычно это ключевые слова,
+        кодировка документа, директивы управления кэшированием и т.д.
+        Метатег может быть одного из следующих типов: 'http-equiv' или 'name',
+        должен содержать атрибут 'content', также он может иметь атрибуты
+        'lang' и 'scheme'.
+    </para>
+
+    <para>
+        Помощник <code>HeadMeta</code> поддерживает следующие методы для
+        установки и добавления метатегов:
+    </para>
+
+    <itemizedlist>
+        <listitem><para><code>appendName($keyValue, $content,
+                    $conditionalName)</code></para></listitem>
+        <listitem><para><code>offsetSetName($index, $keyValue, $content,
+                    $conditionalName)</code></para></listitem>
+        <listitem><para><code>prependName($keyValue, $content,
+                    $conditionalName)</code></para></listitem>
+        <listitem><para><code>setName($keyValue, $content,
+                    $modifiers)</code></para></listitem>
+        <listitem><para><code>appendHttpEquiv($keyValue, $content,
+                    $conditionalHttpEquiv)</code></para></listitem>
+        <listitem><para><code>offsetSetHttpEquiv($index, $keyValue, $content,
+                    $conditionalHttpEquiv)</code></para></listitem>
+        <listitem><para><code>prependHttpEquiv($keyValue, $content,
+                    $conditionalHttpEquiv)</code></para></listitem>
+        <listitem><para><code>setHttpEquiv($keyValue, $content,
+                    $modifiers)</code></para></listitem>
+    </itemizedlist>
+
+    <para>
+        Параметр <code>$keyValue</code> используется для установки значения
+        атрибута 'name' или 'http-equiv'; <code>$content</code> является
+        значением атрибута 'content', а <code>$modifiers</code> - необязательный
+        параметр, который может быть ассоциативным массивом с ключами 'lang'
+        и/или 'scheme'.
+    </para>
+
+    <para>
+        Вы можете также устанавливать метатеги, используя метод
+        <code>headMeta()</code>, который имеет следующую сигнатуру:
+        <code>headMeta($content,
+            $keyValue, $keyType = 'name', $modifiers = array(), $placement =
+            'APPEND')</code>. Через <code>$keyValue</code> передается содержимое
+        ключа, указанного в <code>$keyType</code> (ключом может быть 'name' или
+        'http-equiv'). <code>$placement</code> может иметь одно из следующих
+        значений: 'SET' (замена всех ранее сохраненных значений), 'APPEND'
+        (добавление в конец стека) или 'PREPEND' (добавление в начало стека).
+    </para>
+
+    <para>
+        <code>HeadMeta</code> перегружает методы <code>append()</code>,
+        <code>offsetSet()</code>, <code>prepend()</code> и <code>set()</code>
+        с целью принудительного использования специальных методов, перечисленных
+        выше. Внутри себя помощник сохраняет каждый элемент в виде маркера
+        <code>stdClass</code>, который затем преобразовывается в строку через
+        метод <code>itemToString()</code>. Это позволяет производить проверку
+        элементов в стеке и при необходимости модифицировать их, просто
+        извлекая объект и изменяя его.
+    </para>
+
+    <para>
+        Помощник <code>HeadMeta</code> является частной реализацией 
+        <link linkend="zend.view.helpers.initial.placeholder">помощника
+            Placeholder</link>.
+    </para>
+
+    <example id="zend.view.helpers.initial.headmeta.basicusage">
+        <title>Использование помощника HeadMeta</title>
+
+        <para>
+            Вы можете указывать новые метатеги в любой момент времени. Обычно
+            это правила кэширования для клиентской стороны и ключевые слова для
+            поисковой оптимизации.
+        </para>
+
+        <para>
+            Например, если вы хотите указать ключевые слова для поисковой
+            оптимизации, то вам нужно создать метатег с именем 'keywords'
+            и ключевыми словами для вашей страницы:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// установка мета-ключевых слов
+$this->headMeta()->appendName('keywords', 'framework php productivity');
+]]></programlisting>
+
+        <para>
+            Если требуется установить правила кэширования для
+            клиентской стороны, то вы можете установить теги http-equiv
+            с требуемыми правилами кэширования:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// отключает кэширование на клиентской стороне
+$this->headMeta()->appendHttpEquiv('expires',
+                                   'Wed, 26 Feb 1997 08:21:57 GMT')
+                 ->appendHttpEquiv('pragma', 'no-cache')
+                 ->appendHttpEquiv('Cache-Control', 'no-cache');
+]]></programlisting>
+
+        <para>
+            Другие распространенные случаи использования - установка типа
+            содержимого, кодировки и языка документа:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// установка типа содержимого и кодировки
+$this->headMeta()->appendHttpEquiv('Content-Type',
+                                   'text/html; charset=UTF-8')
+                 ->appendHttpEquiv('Content-Language', 'en-US');
+]]></programlisting>
+
+        <para>
+            И последний пример - мета-обновление как простой способ отображения
+            промежуточного сообщения до перенаправления:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// установка мета-обновления через 3 секунды с новым URL:
+$this->headMeta()->appendHttpEquiv('Refresh',
+                                   '3;URL=http://www.some.org/some.html');
+]]></programlisting>
+
+        <para>
+            Когда все будет готово для помещения тегов в макет, просто
+            "выводите" помощника:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php echo $this->headMeta() ?>
+]]></programlisting>
+    </example>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 238 - 0
documentation/manual/ru/module_specs/Zend_View-Helpers-HeadScript.xml

@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
+<sect3 id="zend.view.helpers.initial.headscript">
+    <title>Помощник HeadScript Helper</title>
+
+    <para>
+        HTML-элемент <code>&lt;script&gt;</code> используется для добавления
+        скриптового кода, исполняемого на клиентской стороне, как
+        непосредственно в документ, так и через ссылки на удаленные ресурсы,
+        содержащие этот код. Помощник <code>HeadScript</code> позволяет
+        использовать оба способа включения.
+    </para>
+
+    <para>
+        Помощник <code>HeadScript</code> поддерживает следующие методы для
+        установки и добавления скриптов:
+    </para>
+
+    <itemizedlist>
+        <listitem><para><code>appendFile($src, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+        <listitem><para><code>offsetSetFile($index, $src, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+        <listitem><para><code>prependFile($src, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+        <listitem><para><code>setFile($src, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+        <listitem><para><code>appendScript($script, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+        <listitem><para><code>offsetSetScript($index, $script, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+        <listitem><para><code>prependScript($script, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+        <listitem><para><code>setScript($script, $type = 'text/javascript',
+                    $attrs = array())</code></para></listitem>
+    </itemizedlist>
+
+    <para>
+        В методах <code>*File()</code> через параметр <code>$src</code>
+        указывается местоположение скрипта, который требуется загрузить; обычно
+        оно указывется в виде URL или пути к нему.
+        В методах <code>*Script()</code> через параметр <code>$script</code>
+        передается скриптовый код, который требуется включить в
+        элемент <code>&lt;script&gt;</code>.
+    </para>
+
+    <note>
+        <title>Установка условных комментариев</title>
+
+        <para>
+            <code>HeadScript</code> поддерживает включение тега в условные
+            комментарии с тем, чтобы скрыть его от определенных
+            браузеров. Для того, чтобы добавить условные теги,
+            передавайте условие через параметр
+            <code>$attrs</code> в вызове метода, как показано в примере:
+        </para>
+
+        <example id="zend.view.helpers.initial.headscript.conditional">
+            <title>Скрипты с условными комментариями</title>
+            <programlisting role="php"><![CDATA[
+// добавление скриптов
+$this->headScript()->appendFile(
+    '/js/prototype.js',
+    'text/javascript',
+    array('conditional' => 'lt IE 7')
+);
+]]></programlisting>
+        </example>
+    </note>
+
+    <para>
+        <code>HeadScript</code> также позволяет "захватывать" вывод скриптов;
+        это может быть полезным при создании скриптов
+        программным способом. Пример использования этой возможности будут
+        показан ниже.
+    </para>
+
+    <para>
+        Для быстрого добавления скриптовых элементов Вы можете использовать
+        метод <code>headScript()</code>, сигнатура этого метода -
+        <code>headScript($mode = 'FILE', $spec, $placement = 'APPEND')</code>.
+        Параметр <code>$mode</code> может иметь значение 'FILE' или 'SCRIPT',
+        в зависимости от того, ссылаетесь ли вы на уже существующий скрипт или
+        передаете код для влючения в элемент
+        <code>&lt;script&gt;</code>. <code>$spec</code> содержит либо путь к
+        файлу, к которому нужно добавить ссылку, либо сам скриптовый код.
+        <code>$placement</code> должен иметь одно из следующих значений:
+        'APPEND', 'PREPEND' или 'SET'.
+    </para>
+
+    <para>
+        <code>HeadScript</code> перегружает методы <code>append()</code>,
+        <code>offsetSet()</code>, <code>prepend()</code> и <code>set()</code>
+        с целью принудительного использования специальных методов, перечисленных
+        выше. Внутри себя помощник сохраняет каждый элемент в виде маркера
+        <code>stdClass</code>, который затем преобразовывается в строку через
+        метод <code>itemToString()</code>. Это позволяет производить проверку
+        элементов в стеке и при необходимости модифицировать их, просто
+        извлекая объект и изменяя его.
+    </para>
+
+    <para>
+        Помощник <code>HeadScript</code> является частной реализацией 
+        <link linkend="zend.view.helpers.initial.placeholder">помощника
+            Placeholder</link>.
+    </para>
+
+    <note>
+        <title>Используйте InlineScript для скриптов в теле документа</title>
+
+        <para>
+            Для добавления скриптов внутри HTML-элемента <code>body</code>
+            должен использоваться
+            родственный помощник <link
+                linkend="zend.view.helpers.initial.inlinescript">InlineScript</link>.
+            Помещение скриптов в конец документа является хорошей практикой
+            для повышения скорости отдачи страницы, особенно если используются
+            сторонние скрипты-аналитики.
+        </para>
+    </note>
+
+    <note>
+        <title>Установка произвольных атрибутов по умолчанию отключена</title>
+
+        <para>
+            По умолчанию <code>HeadScript</code> будет генерировать только
+            атрибуты, соответствующие спецификации W3C.
+            В список этих атрибутов входят 'type', 'charset', 'defer',
+            'language' и 'src'. Однако некоторые JavaScript фреймворки,
+            а в особенности <ulink url="http://www.dojotoolkit.org/">Dojo</ulink>,
+            используют специальные атрибуты в целях изменения поведения. Вы
+            можете разрешить использование таких атрибутов, воспользовавшись
+            методом <code>setAllowArbitraryAttributes()</code>:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+$this->headScript()->setAllowArbitraryAttributes(true);
+]]></programlisting>
+    </note>
+
+    <example id="zend.view.helpers.initial.headscript.basicusage">
+        <title>Использование помощника HeadScript</title>
+
+        <para>
+            Вы можете указывать скрипты для добавления в документ в любой момент
+            времени. Как было указано ранее, это могут быть как ссылки на
+            файлы со скриптами, так и сами скрипты.
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// добавление скриптов
+$this->headScript()->appendFile('/js/prototype.js')
+                   ->appendScript($onloadScript);
+]]></programlisting>
+
+        <para>
+            Порядок следования часто важен в скриптах, интерпретируемых на
+            стороне клиента - например, нужно быть уверенным в том, что
+            библиотеки загружаются в порядке, обусловленном
+            зависимостями между ними. В этом случае используйте специальные
+            методы методы для добавления в начало, конец, и по определенному
+            смещению:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+// Размещение скриптов в определенном порядке
+
+// Добавление по определенному смещению
+$this->headScript()->offsetSetFile(100, '/js/myfuncs.js');
+
+// Используем эффекты из библиотеки script.aculo.us
+// (будет добавлена с использованием следующего смещения, 101)
+$this->headScript()->appendFile('/js/scriptaculous.js');
+
+// Но скрипт prototype всегда должен загружаться первым:
+$this->headScript()->prependFile('/js/prototype.js');
+]]></programlisting>
+
+        <para>
+            Когда все будет готово для размещения скриптов в макете, просто
+            "выводите" помощника:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php echo $this->headScript() ?>
+]]></programlisting>
+    </example>
+
+    <example id="zend.view.helpers.initial.headscript.capture">
+        <title>Составление скриптов с использованием помощника HeadScript</title>
+
+        <para>
+            Иногда нужно генерировать скрипты программым способом.
+            Хотя вы можете использовать конкатенацию строк, синтаксис heredoc
+            и т.п., часто бывает легче создать скрипт с включением PHP-тегов.
+            <code>HeadScript</code> позволяет делать это, захватывая
+            вывод в стек:
+        </para>
+
+        <programlisting role="php"><![CDATA[
+<?php $this->headScript()->captureStart() ?>
+var action = '<?php echo $this->baseUrl ?>';
+$('foo_form').action = action;
+<?php $this->headScript()->captureEnd() ?>
+]]></programlisting>
+
+        <para>
+            Используются следующие допущения:
+        </para>
+
+        <itemizedlist>
+            <listitem><para>
+                    Скрипт будет добавлен в конец стека. Если требуется
+                    переопределить содержимое стека или добавить скрипт в
+                    конец стека, то передавайте соответственно
+                    'SET' или 'PREPEND' в качестве первого аргумента
+                    <code>captureStart()</code>.
+            </para></listitem>
+
+            <listitem><para>
+                    По умолчанию предполагается, что MIME-тип скрипта -
+                    'text/javascript'. Если требуется указать другой тип
+                    скрипта, то передавайте его в качестве второго аргумента
+                    <code>captureStart()</code>.
+            </para></listitem>
+
+            <listitem><para>
+                    Если вы хотите указать какие-либо дополнительные аргументы
+                    для тега <code>&lt;script&gt;</code>, то передавайте их
+                    в массиве в качестве третьего аргумента
+                    <code>captureStart()</code>.
+            </para></listitem>
+        </itemizedlist>
+    </example>
+</sect3>
+<!--
+vim:se ts=4 sw=4 et:
+-->

+ 198 - 84
documentation/manual/ru/module_specs/Zend_View-Helpers.xml

@@ -1,3 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <sect1 id="zend.view.helpers" xmlns:xi="http://www.w3.org/2001/XInclude">
 
     <title>Помощники видов</title>
@@ -6,7 +8,7 @@
         Часто бывает так, что в скриптах вида необходимо повторно выполнять
         определенный набор функций; например, формирование даты,
         генерация элементов формы, отображение ссылок. Вы можете использовать
-        помощников (вспомогательные классы) для выполнения этих действий.
+        помощников для выполнения этих действий.
     </para>
 
     <para>
@@ -16,7 +18,7 @@
         установке путей к помощникам видов), последней частью имени класа
         является имя помощника. Все слова этой части должны писаться слитно,
         первые буквы слов - в верхнем регистре (TitleCapped); таким образом мы
-        получаем имя класа <code>Zend_View_Helper_FooBar</code>. Класс должен
+        получаем имя класа <classname>Zend_View_Helper_FooBar</classname>. Класс должен
         содержать как минимум один метод, названный по имени помощника в формате
         camelCase: <code>fooBar()</code>.
     </para>
@@ -24,15 +26,15 @@
     <note>
         <title>Следите за регистром</title>
         <para>
-            Имена помощников всегда должны быть в формате camelCase, т.е. они
-            никогда не начинаются с символа в верхнем регистре. Имя для класса
-            начинается с символа в верхнем регистре, но реально выполняемый
-            метод должен быть в формате camelCase.
+            Имена помощников всегда должны быть в стиле camelCased, т.е. они
+            никогда не начинаются с символа в верхнем регистре. Имя класса
+            имеет стиль MixedCase (т.е. начинается с символа в верхнем регистре),
+            но реально выполняемый метод должен быть в стиле camelCase.
         </para>
     </note>
 
     <note>
-        <title>Путь к помощникам по умолчанию</title>
+        <title>Используемый по умолчанию путь к помощникам</title>
 
         <para>
             Используемый по умолчанию путь к помощникам всегда указывает на
@@ -47,10 +49,10 @@
     <para>
         Для того, чтобы использовать помощника в своем скрипте вида, вызывайте
         его, используя <code>$this->имяПомощника()</code>.
-        <code>Zend_View</code> внутри себя загрузит класс
+        В этом случае <classname>Zend_View</classname> загрузит класс
         <code>Zend_View_Helper_ИмяПомощника</code>, создаст его экземпляр и
         вызовет его метод <code>имяПомощника()</code>. Экземпляр объекта
-        сохраняется в экземпляре <code>Zend_View</code> и будет повторно
+        сохраняется в экземпляре <classname>Zend_View</classname> и будет повторно
         использоваться им во всех будущих вызовах
         <code>$this->имяПомощника()</code>.
     </para>
@@ -60,7 +62,7 @@
         <title>Начальный набор помощников</title>
 
         <para>
-            <code>Zend_View</code> поставляется с начальным набором помощников,
+            <classname>Zend_View</classname> поставляется с начальным набором помощников,
             большинство из которых связано с генерацией элементов форм и
             автоматически экранирует весь вывод. Кроме этого, есть помощники для
             создания HTML-списков, URL-ов на основе маршрутов, и объявления
@@ -70,10 +72,11 @@
         <itemizedlist>
 
             <listitem><para>
-                <code>declareVars():</code> В основном для использования вместе
-                с <code>strictVars()</code>. Этот помощник может использоваться
-                для объявления переменных шаблонов, которые могут быть или не
-                быть в объекте вида, и для установки значений по умолчанию.
+                <code>declareVars():</code> В основном предназначен для
+                использования вместе с <code>strictVars()</code>. Этот
+                помощник может использоваться для объявления переменных
+                шаблонов, которые не обязательно присутствуют в объекте
+                вида, и для установки значений по умолчанию.
                 Массивы, переданные методу в качестве аргуметов, будут
                 использованы для установки значений по умолчанию; иначе, если
                 переменная не существует, то ее значением будет пустая строка.
@@ -95,24 +98,104 @@
                 <code>form</code>. Если параметр <code>$content</code> передан и
                 не имеет значение false, то это содержимое добавляется между
                 открывающим и закрывающим тегами формы. Если же
-                <code>$content</code> имеет булево значение false (по
+                <code>$content</code> имеет булево значение false (значение по
                 умолчанию), то будет сгенерирован только открывающий тег формы.
             </para></listitem>
 
             <listitem><para>
                 <code>formButton($name, $value, $attribs)</code>: Создает элемент
-                <code>&lt;input type="button" /&gt;</code>.
+                <code>&lt;button /&gt;</code>.
             </para></listitem>
+            
+            <listitem>
+                <para>
+                    <code>formCheckbox($name, $value, $attribs, $options)</code>:
+                    Создает элемент <code>&lt;input type="checkbox" /&gt;</code>
+                    (флажок опций).
+                </para>
 
-            <listitem><para>
-                <code>formCheckbox($name, $value, $attribs, $options)</code>:
-                Создает элемент <code>&lt;input type="checkbox" /&gt;</code>
-                (флажок опций). Параметр <code>$options</code> является
-                массивом, в котором первым значением является "выбранное"
-                (checked) значение, вторым — "невыбранное" значение (по
-                умолчанию это '1' и '0'). Если <code>$value</code> соответствует
-                "выбранному" значению, то этот флажок опций будет выбран.
-            </para></listitem>
+                <para>
+                    По умолчанию, если не был передан параметры <code>$value</code>
+                    и <code>$options</code>, то значение '1' соотвествует
+                    выбранному состоянию, '0' - не выбранному. Если был передан
+                    параметр <code>$value</code>, но
+                    не передан <code>$options</code>, то значение
+                    <code>$value</code> соотвествует выбранному состоянию.
+                </para>
+
+                <para>
+                    <code>$options</code> должен быть массивом. Если это
+                    индексный массив, то первое значение соответствует
+                    выбранному состоянию, второе - не выбранному состоянию,
+                    все остальные значения игнорируются. Вы можете также
+                    передавать массив с ключами 'checked' и 'unChecked'.
+                </para>
+
+                <para>
+                    Если параметр $options был передан, и <code>$value</code>
+                    соответствует значению в выбранном состоянии, то элемент
+                    будет помечен как выбранный. Вы можете также помечать
+                    элемент как выбранный или не выбранный путем передачи
+                    значения булевого типа для атрибута 'checked'.
+                </para>
+
+                <para>
+                    Наверное, лучше всего проиллюстрировать это примерами:
+                </para>
+
+                <programlisting role="php"><![CDATA[
+// '1' и '0' в качестве значений для выбранного/ не выбранного состояний
+// флажок не выбран
+echo $this->formCheckbox('foo');
+
+// '1' и '0' в качестве значений для выбранного/ не выбранного состояний
+// флажок выбран
+echo $this->formCheckbox('foo', null, array('checked' => true));
+
+// 'bar' и '0' в качестве значений для выбранного/ не выбранного состояний
+// флажок не выбран
+echo $this->formCheckbox('foo', 'bar');
+
+// 'bar' и '0' в качестве значений для выбранного/ не выбранного состояний
+// флажок выбран
+echo $this->formCheckbox('foo', 'bar', array('checked' => true));
+
+// 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
+// флажок не выбран
+echo $this->formCheckbox('foo', null, null, array('bar', 'baz');
+
+// 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
+// флажок не выбран
+echo $this->formCheckbox('foo', null, null, array(
+    'checked' => 'bar',
+    'unChecked' => 'baz'
+));
+
+// 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
+// флажок выбран
+echo $this->formCheckbox('foo', 'bar', null, array('bar', 'baz');
+echo $this->formCheckbox('foo',
+                         null,
+                         array('checked' => true),
+                         array('bar', 'baz');
+
+// 'bar' и 'baz' в качестве значений для выбранного/ не выбранного состояний
+// флажок не выбран
+echo $this->formCheckbox('foo', 'baz', null, array('bar', 'baz');
+echo $this->formCheckbox('foo',
+                         null,
+                         array('checked' => false),
+                         array('bar', 'baz');
+]]></programlisting>
+
+                <para>
+                    Во всех случаях разметка предваряется скрытым элементом
+                    <code>&lt;input type="hidden" /&gt;</code>
+                    со значением для не выбранного состояния. Таким образом,
+                    и в том случае, если флажок опций не был выбран, вы будете
+                    получать корректное значение, возвращаемое вашей форме.
+                </para>
+            </listitem>
 
             <listitem>
                 <para>
@@ -151,7 +234,7 @@
             </listitem>
 
             <listitem><para>
-                <code>formFile($name, $value, $attribs)</code>: Создает
+                <code>formFile($name, $attribs)</code>: Создает
                 элемент <code>&lt;input type="file" /&gt;</code>.
             </para></listitem>
 
@@ -197,7 +280,7 @@
 
             <listitem><para>
                 <code>formReset($name, $value, $attribs)</code>: Создает
-                элемент <code>&lt;input type="password" /&gt;</code>.
+                элемент <code>&lt;input type="reset" /&gt;</code>.
             </para></listitem>
 
             <listitem><para>
@@ -227,7 +310,7 @@
 
             <listitem><para>
                 <code>url($urlOptions, $name, $reset):</code> Создает строку
-                URL, основываясь на машруте с именем $name.
+                URL, основываясь на машруте с именем <code>$name</code>.
                 <code>$urlOptions</code> должен быть ассоциативным массивом пар
                 ключ-значение для использования в данном маршруте.
             </para></listitem>
@@ -250,12 +333,12 @@
 
         <para>
             Использовать их в скрипте вида очень просто, вот пример.
-            Обратите внимание, что это все, что вам нужно для их вызова —
+            Обратите внимание, все, что вам нужно - это вызывать их,
             помощники будут загружаться и инстанцироваться автоматически, по
             мере необходимости.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 // в скрипте вида $this ссылается на экземпляр Zend_View
 //
 // предположим, вы уже имеете последовательность опций $countries
@@ -264,23 +347,24 @@
 ?>
 <form action="action.php" method="post">
     <p><label>Your Email:
-        <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
+<?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
     </label></p>
     <p><label>Your Country:
-        <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
+<?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
     </label></p>
     <p><label>Would you like to opt in?
-        <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
+<?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no')) ?>
     </label></p>
-</form>]]>
-        </programlisting>
+</form>
+]]></programlisting>
 
         <para>
             Результирующие выходные данные этого скрипта вида будут выглядеть
-            наподобие этих:
+            примерно следующим образом:
         </para>
 
-        <programlisting role="php"><![CDATA[<form action="action.php" method="post">
+        <programlisting role="php"><![CDATA[
+<form action="action.php" method="post">
     <p><label>Your Email:
         <input type="text" name="email" value="you@example.com" size="32" />
     </label></p>
@@ -295,12 +379,15 @@
         <input type="hidden" name="opt_in" value="no" />
         <input type="checkbox" name="opt_in" value="yes" checked="checked" />
     </label></p>
-</form>]]>
-        </programlisting>
+</form>
+]]></programlisting>
 
         <xi:include href="Zend_View-Helpers-Action.xml">
             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Action.xml" /></xi:fallback>
         </xi:include>
+        <xi:include href="Zend_View-Helpers-Cycle.xml">
+            <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Cycle.xml" /></xi:fallback>
+        </xi:include>
         <xi:include href="Zend_View-Helpers-Partial.xml">
             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Partial.xml" /></xi:fallback>
         </xi:include>
@@ -325,12 +412,18 @@
         <xi:include href="Zend_View-Helpers-HeadTitle.xml">
             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HeadTitle.xml" /></xi:fallback>
         </xi:include>
+        <xi:include href="Zend_View-Helpers-HtmlObject.xml">
+            <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-HtmlObject.xml" /></xi:fallback>
+        </xi:include>
         <xi:include href="Zend_View-Helpers-InlineScript.xml">
             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-InlineScript.xml" /></xi:fallback>
         </xi:include>
         <xi:include href="Zend_View-Helpers-Json.xml">
             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Json.xml" /></xi:fallback>
         </xi:include>
+        <xi:include href="Zend_View-Helpers-Navigation.xml">
+            <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Navigation.xml" /></xi:fallback>
+        </xi:include>
         <xi:include href="Zend_View-Helpers-Translate.xml">
             <xi:fallback><xi:include href="../../en/module_specs/Zend_View-Helpers-Translate.xml" /></xi:fallback>
         </xi:include>
@@ -342,34 +435,34 @@
 
         <para>
             Как и для скриптов вида, ваш контроллер может задать
-            стек путей, в которых <code>Zend_View</code> должен искать
-            классы помощников. По умолчанию <code>Zend_View</code>
+            стек путей, в которых <classname>Zend_View</classname> должен искать
+            классы помощников. По умолчанию <classname>Zend_View</classname>
             ищет классы помощников в <code>Zend/View/Helper/*</code>. Используя
             методы <code>setHelperPath()</code> и <code>addHelperPath()</code>,
-            вы можете укзать <code>Zend_View</code>, чтобы он искал классы
+            вы можете укзать <classname>Zend_View</classname>, чтобы он искал классы
             помощников в других местах. Кроме этого, вы можете указать префикс
             класса, используемый для помощников, находящихся в данном пути;
             префикс обеспечивает пространство имен. Если префикс не указан, то
             по умолчанию используется 'Zend_View_Helper_'.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
 
 // Устанавливает путь /path/to/more/helpers с префиксом 'My_View_Helper'
-$view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');]]>
-        </programlisting>
+$view->setHelperPath('/path/to/more/helpers', 'My_View_Helper');
+]]></programlisting>
 
         <para>
-            Фактически вы можете "складывать" в стек пути, используя метод
+            Вы можете "складывать" в стек пути, используя метод
             <code>addHelperPath()</code>. Если вы добавили
-            пути в стек, то <code>Zend_View</code> будет искать запрошенный
+            пути в стек, то <classname>Zend_View</classname> будет искать запрошенный
             класс помощника в этих путях, начиная с пути, добавленного
-            последним. Это дает возможность добавлять к начальному набору своих
-            помощников (или даже замещать имеющиеся).
+            последним. Это дает возможность добавлять своих
+            помощников к начальному набору (или даже замещать имеющиеся).
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 $view = new Zend_View();
 // Добавить /path/to/some/helpers с префиксом для классов 'My_View_Helper'
 $view->addHelperPath('/path/to/some/helpers', 'My_View_Helper);
@@ -377,10 +470,11 @@ $view->addHelperPath('/path/to/some/helpers', 'My_View_Helper);
 $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
 
 // теперь, когда вы вызываете $this->helperName(), Zend_View будет искать
-// "/other/path/to/helpers/HelperName.php" с классом "My_View_Helper_HelperName",
-// затем "/path/to/some/helpers/HelperName" с классом "Your_View_Helper_HelperName",
-// и под конец "Zend/View/Helper/HelperName.php" с классом "Zend_View_Helper_HelperName".]]>
-        </programlisting>
+// "/path/to/some/helpers/HelperName" с классом
+// "Your_View_Helper_HelperName", затем "/other/path/to/helpers/HelperName.php"
+// с классом "My_View_Helper_HelperName", и под конец
+// "Zend/View/Helper/HelperName.php" с классом "Zend_View_Helper_HelperName".
+]]></programlisting>
 
     </sect2>
 
@@ -389,28 +483,41 @@ $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
         <title>Написание собственных помощников</title>
 
         <para>
-            Написать собственного помощника довольно просто — просто следуйте
+            Написать собственного помощника довольно легко, просто следуйте
             этим правилам:
         </para>
 
         <itemizedlist>
 
             <listitem><para>
+                Хотя это и не является совершенно необходимым, мы рекомендуем
+                при создании своего помощника реализовывать интерфейс
+                <classname>Zend_View_Helper_Interface</classname>
+                или наследовать от класса <classname>Zend_View_Helper_Abstract</classname>.
+                Добавленные в версии 1.6.0, они определяют только метод
+                <code>setView()</code>, но в будущих релизах
+                мы планируем реализовать паттерн "стратегия", который
+                значительно упростит следование правилам по именованию,
+                изложенным ниже. Следование этой рекомендации сейчас
+                поможет в будущем избежать изменений в вашем коде.
+            </para></listitem>
+
+            <listitem><para>
                 Имя класса должно, как минимум, заканчиваться именем
-                помощника в формате CamelCaps. Т.е. если вы пишете помощника с
-                именем "specialPurpose", то минимальное имя класса должно быть
-                "SpecialPurpose". Вы можете
+                помощника в стиле MixedCaps (СмешанныйРегистр). Т.е. если вы
+                пишете помощника с именем "specialPurpose", то наиболее короткое
+                имя класса должно быть "SpecialPurpose". Вы можете
                 (и должны) давать классам имена с префиксом, рекомендуется
                 использовать 'View_Helper' как часть этого префикса:
-                "My_View_Helper_SpecialPurpose" (Вам нужно будет передать этот
+                "My_View_Helper_SpecialPurpose". Вам нужно будет передать этот
                 префикс с или без завершающего знака подчеркивания методу
-                <code>addHelperPath()</code> или <code>setHelperPath()</code>).
+                <code>addHelperPath()</code> или <code>setHelperPath()</code>.
             </para></listitem>
 
             <listitem><para>
                 Класс должен иметь открытый метод, имя которого
                 соответствует имени помощника. Это метод, который будет
-                вызываться, когда ваш шаблон выполняет вызов
+                вызываться, когда в вашем шаблоне производится вызов
                 <code>$this->specialPurpose()</code>. В нашем примере с
                 помощником "specialPurpose" объявление требуемого метода должно
                 быть <code>public function specialPurpose()</code>.
@@ -431,16 +538,17 @@ $view->addHelperPath('/other/path/to/helpers', 'Your_View_Helper');
 
         <para>
             Размещайте класс помощника где-либо в одном из находящихся в
-            стеке путей к помощникам, и <code>Zend_View</code> будет
+            стеке путей к помощникам, и <classname>Zend_View</classname> будет
             автоматически загружать, инстанцировать, сохранять и выполнять его.
         </para>
 
         <para>
-            Вот пример кода нашего помощника "SpecialPurpose":
+            Вот пример кода нашего помощника <code>SpecialPurpose</code>:
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
-class My_View_Helper_SpecialPurpose {
+        <programlisting role="php"><![CDATA[
+class My_View_Helper_SpecialPurpose extends Zend_View_Helper_Abstract
+{
     protected $_count = 0;
     public function specialPurpose()
     {
@@ -449,41 +557,41 @@ class My_View_Helper_SpecialPurpose {
         return htmlspecialchars($output);
     }
 }
-}]]>
-        </programlisting>
+]]></programlisting>
 
         <para>
             Далее в скрипте вида вы можете вызывать помощника
             <code>SpecialPurpose</code> сколько угодно раз. Он будет
-            инстанцирован один раз, и сохраняется в течение существования
-            экземпляра <code>Zend_View</code>.
+            инстанцирован один раз, и существует, пока существует
+            экземпляр <classname>Zend_View</classname>.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 // помните, что в скрипте вида $this ссылается на экземпляр Zend_View
 echo $this->specialPurpose();
 echo $this->specialPurpose();
-echo $this->specialPurpose();]]>
-        </programlisting>
+echo $this->specialPurpose();
+]]></programlisting>
 
         <para>
-            Результат должен выглядеть наподобие следующего:
+            Результат должен быть примерно следующим:
         </para>
-        <programlisting role="php"><![CDATA[I have seen 'The Jerk' 1 time(s).
+        <programlisting role="php"><![CDATA[
+I have seen 'The Jerk' 1 time(s).
 I have seen 'The Jerk' 2 time(s).
-I have seen 'The Jerk' 3 time(s).]]>
-        </programlisting>
+I have seen 'The Jerk' 3 time(s).
+]]></programlisting>
 
         <para>
-            Иногда бывает, что нужен доступ к объекту <code>Zend_View</code> -
+            Иногда бывает, что нужен доступ к объекту <classname>Zend_View</classname> -
             например, нужно получить зарегистрированное значение кодировки
             или произвести рендеринг другого скрипта вида как часть
             действий, выполняемых вашим помощником. Для того, чтобы можно было
             получить доступ к объекту вида, ваш класс помощника должен иметь
-            метод <code>setView($view)</code>, пример которого показан ниже:
+            метод <code>setView($view)</code>, его пример показан ниже:
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 class My_View_Helper_ScriptPath
 {
     public $view;
@@ -497,15 +605,21 @@ class My_View_Helper_ScriptPath
     {
         return $this->view->getScriptPath($script);
     }
-}]]>
-        </programlisting>
+}
+]]></programlisting>
 
         <para>
             Если ваш класс помощника имеет метод <code>setView()</code>, то он
             будет вызываться при первом инстанцировании класса помощника и его
-            передаче текущему объекту вида. На ваше усмотрение остается то, как
-            в вашем классе помощника должен сохраняться объект вида и
-            производиться доступ к нему.
+            передаче текущему объекту вида. Реализация
+            сохранения объекта вида и доступа к нему в вашем классе помощника
+            остаются на ваше усмотрение.
+        </para>
+        
+        <para>
+            Если вы наследуете своего помощника от
+            <classname>Zend_View_Helper_Abstract</classname>, то вам не нужно определять
+            этот метод, поскольку он уже определен в родительском классе.
         </para>
 
     </sect2>

+ 127 - 31
documentation/manual/ru/module_specs/Zend_View-Introduction.xml

@@ -1,9 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <sect1 id="zend.view.introduction">
 
     <title>Введение</title>
 
     <para>
-        <code>Zend_View</code> является классом для работы с частью вид (view)
+        <classname>Zend_View</classname> является классом для работы с частью вид (view)
         паттерна модель-вид-контроллер (model-view-controller). То есть он
         предназначен для того, чтобы помочь отделить скрипты видов от
         скриптов моделей и контроллеров. Он предоставляет систему помощников,
@@ -11,19 +13,19 @@
     </para>
 
     <para>
-        <code>Zend_View</code> является независимым от выбранной системы
-        шаблонов: вы можете использовать PHP в качестве языка шаблонов или
+        <classname>Zend_View</classname> не зависит от выбранной вами системы
+        шаблонов - вы можете использовать PHP в качестве языка шаблонов или
         создавать экземпляры других систем шаблонов и работать с ними
         в ваших скриптах вида.
     </para>
 
     <para>
-        Использование <code>Zend_View</code> в основном состоит из двух шагов:
+        По существу применение <classname>Zend_View</classname> состоит из двух шагов:
 
-        1.  Ваш скрипт контроллера создает экземпляр <code>Zend_View</code> и
+        1.  Ваш скрипт контроллера создает экземпляр <classname>Zend_View</classname> и
         объявляет переменные этого экземпляра.
 
-        2. Контроллер приказывает <code>Zend_View</code> воспроизвести
+        2. Контроллер приказывает <classname>Zend_View</classname> воспроизвести
         данный вид, посредством этого производится контроль за скриптом
         вида, который генерирует выходные данные вида.
     </para>
@@ -38,7 +40,7 @@
             Скрипт контроллера может выглядеть наподобие этого:
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 // использование модели для получения данных о заголовках и авторах книг
 $data = array(
     array(
@@ -61,8 +63,8 @@ $view = new Zend_View();
 $view->books = $data;
 
 // и выполняем скрипт вида "booklist.php"
-echo $view->render('booklist.php');]]>
-        </programlisting>
+echo $view->render('booklist.php');
+]]></programlisting>
 
     </sect2>
 
@@ -73,17 +75,18 @@ echo $view->render('booklist.php');]]>
         <para>
             Теперь нам нужен сопутствующий скрипт вида "booklist.php".
             Это такой же скрипт PHP, как и остальные, за одним исключением:
-            он выполняется в области видимости экземпляра <code>Zend_View</code>,
+            он выполняется в области видимости экземпляра <classname>Zend_View</classname>,
             это означает, что <code>$this</code> ссылается на
-            экземпляр <code>Zend_View</code>. Переменные, присваиваемые в
+            экземпляр <classname>Zend_View</classname>. Переменные, присваиваемые в
             контроллере для скрипта вида, являются открытыми свойствами
-            экземпляра <code>Zend_View</code>. Таким образом, базовый скрипт
+            экземпляра <classname>Zend_View</classname>. Таким образом, базовый скрипт
             вида может выглядеть следующим образом:
         </para>
 
-        <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
+        <programlisting role="php"><![CDATA[
+<?php if ($this->books): ?>
 
-    <!-- Таблица нескольких книг. -->
+    <!-- Таблица из нескольких книг. -->
     <table>
         <tr>
             <th>Author</th>
@@ -103,8 +106,8 @@ echo $view->render('booklist.php');]]>
 
     <p>Нет книг для отображения.</p>
 
-<?php endif;]]>
-        </programlisting>
+<?php endif; ?>
+]]></programlisting>
 
         <para>
             Обратите внимание, что мы используем метод <code>escape()</code>
@@ -117,7 +120,7 @@ echo $view->render('booklist.php');]]>
         <title>Опции</title>
 
         <para>
-            <code>Zend_View</code> имеет несколько опций, которые могут
+            <classname>Zend_View</classname> имеет несколько опций, которые могут
             использоваться для управления поведением ваших скриптов вида:
         </para>
 
@@ -134,12 +137,12 @@ echo $view->render('booklist.php');]]>
 base/path/
     helpers/
     filters/
-    scripts/]]>
-                </programlisting>
+    scripts/
+]]></programlisting>
 
                 <para>
                     Эта опция может быть установлена через методы
-                    <code>setBasePath()</code>, <code>addBasePath()</code>, или
+                    <code>setBasePath()</code>, <code>addBasePath()</code> или
                     опцию <code>basePath</code> для конструктора.
                 </para>
             </listitem>
@@ -156,20 +159,20 @@ base/path/
             <listitem><para>
                 <code>escape</code> - обратный вызов, который следует
                 использовать для метода <code>escape()</code>. Может быть
-                установлена через метод <code>setEscape()</code> или опцию
+                установлен через метод <code>setEscape()</code> или опцию
                 <code>escape</code> для конструктора.
             </para></listitem>
 
             <listitem><para>
                 <code>filter</code> - фильтр, который следует использовать после
-                рендеринга скрипта вида. Может быть установлена через методы
+                рендеринга скрипта вида. Может быть установлен через методы
                 <code>setFilter()</code>, <code>addFilter()</code>, или опцию
                 <code>filter</code> для конструктора.
             </para></listitem>
 
             <listitem><para>
                 <code>strictVars</code> - если опция установлена, то
-                <code>Zend_View</code> генерирует уведомления (notices) и
+                <classname>Zend_View</classname> генерирует уведомления (notices) и
                 предупреждения (warnings), когда производится обращение к
                 неинициализированной переменной. Опция может быть
                 установлена посредством вызова <code>strictVars(true)</code> или
@@ -178,15 +181,105 @@ base/path/
         </itemizedlist>
     </sect2>
 
+    <sect2 id="zend.view.introduction.shortTags">
+        <title>Короткие теги в скриптах вида</title>
+
+        <para>
+            В нашей документации и примерах мы применяем короткие теги PHP:
+            <code>&lt;?</code> and <code>&lt;?=</code>. Кроме того, мы обычно
+            используем <ulink
+                url="http://us.php.net/manual/en/control-structures.alternative-syntax.php">альтернативный
+                синтаксис для управляющих структур</ulink>. Их удобно
+            использовать при написании скриптов вида, они делают конструкции
+            более лаконичными и позволяют размещать операторы без лишних
+            переходов на другую строку.
+        </para>
+
+        <para>
+            Несмотря на это, многие разработчики
+            предпочитают использовать длинную форму записи для обеспечения
+            валидности или переносимости кода. Например, в рекомендуемой
+            конфигурации PHP
+            (файл php.ini.recommended) опция <code>short_open_tag</code>
+            отключена. Также, если вы используете XML в своих скриптах
+            вида, то с короткими открывающими тегами PHP они не будут проходить
+            валидацию.
+        </para>
+
+        <para>
+            Кроме того, если вы используете короткие теги, и опция
+            <code>short_open_tag</code> отключена, то скрипты вида будут либо
+            приводить к ошибкам выполнения, либо просто выводить пользователю
+            код, включенный в эти теги.
+        </para>
+
+        <para>
+            В последнем случае, если вы хотите использовать короткие теги,
+            но они отключены, у вас есть два возможных решения:
+        </para>
+
+        <itemizedlist>
+            <listitem>
+                <para>
+                    Включить короткие теги в своем файле <code>.htaccess</code>:
+                </para>
+
+                <programlisting role="apache"><![CDATA[
+php_value "short_open_tag" "on"
+]]></programlisting>
+
+                <para>
+                    Это будет действовать только в том случае, если у вас есть
+                    права на создание и использование файлов <code>.htaccess</code>.
+                    Эта директива также может быть добавлена в
+                    конфигурационный файл <code>httpd.conf</code>.
+                </para>
+            </listitem>
+
+            <listitem>
+                <para>
+                    Включить обертку потока (stream wrapper), которая будет
+                    на лету преобразовывать короткие теги в полные:
+                </para>
+
+        <programlisting role="php"><![CDATA[
+$view->setUseStreamWrapper(true);
+]]></programlisting>
+
+                <para>
+                    В этом вызове <classname>Zend_View_Stream</classname> регистрируется в
+                    качестве обертки потока к скриптам вида, благодаря этому
+                    код будет работать так же, как если бы короткие теги были
+                    были включены.
+                </para>
+            </listitem>
+        </itemizedlist>
+
+        <note>
+            <title>Обертка потока для скриптов вида снижает производительность</title>
+
+            <para>
+                Использование обертки потока <emphasis>снижает</emphasis>
+                производительность вашего приложения.
+                Мы рекомендуем включать короткие
+                теги, переписывать свои скрипты вида с тем, чтобы
+                использовалась полная форма записи тегов, либо использовать
+                продуманную стратегию частичного или полного кэширования
+                содержимого страниц.
+            </para>
+        </note>
+    </sect2>
+
     <sect2 id="zend.view.introduction.accessors">
         <title>Вспомогательные аксессоры</title>
 
         <para>
-            Скорее всего, вам никогда не понадобится вызывать методы
-            <code>assign()</code>, <code>render()</code> или перечисленные ниже
-            для установки/добавления фильтров, помощников, и путей к скриптам
-            вида. Тем не менее, если вы хотите самостоятельно расширить класс
-            <code>Zend_View</code> или нуждаетесь в доступе к его внутренностям,
+            Скорее всего, вам никогда не понадобится вызывать
+            <code>assign()</code>, <code>render()</code> и другие
+            перечисленные ниже методы
+            для установки/добавления фильтров, помощников, путей к скриптам
+            вида. Тем не менее, если требуется расширить класс
+            <classname>Zend_View</classname> или нужен доступ к его внутреннему коду,
             то можно использовать следующие аксессоры:
         </para>
 
@@ -215,7 +308,8 @@ base/path/
 
             <listitem>
                 <para>
-                    <code>getScriptPaths()</code> возвращает все зарегистрированные пути к скриптам вида.
+                    <code>getScriptPaths()</code> возвращает все
+                    зарегистрированные пути к скриптам вида.
                 </para>
             </listitem>
 
@@ -229,7 +323,8 @@ base/path/
 
             <listitem>
                 <para>
-                    <code>getHelperPaths()</code> возвращает все зарегистрированные пути к классам помощников.
+                    <code>getHelperPaths()</code> возвращает все
+                    зарегистрированные пути к классам помощников.
                 </para>
             </listitem>
 
@@ -243,7 +338,8 @@ base/path/
 
             <listitem>
                 <para>
-                    <code>getFilterPaths()</code> возвращает все зарегистрированные пути к классам фильтров.
+                    <code>getFilterPaths()</code> возвращает все
+                    зарегистрированные пути к классам фильтров.
                 </para>
             </listitem>
         </itemizedlist>

+ 131 - 54
documentation/manual/ru/module_specs/Zend_View-Scripts.xml

@@ -1,32 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <sect1 id="zend.view.scripts">
 
     <title>Скрипты видов</title>
 
     <para>
         После того, как ваш контроллер определил переменные и вызвал
-        метод <code>render()</code>, <code>Zend_View</code> включает
+        метод <code>render()</code>, <classname>Zend_View</classname> включает
         требуемый скрипт вида и выполняет его в области
-        видимости <code>Zend_View</code>. Поэтому в вашем скрипте представления
-        ссылки на $this в действительности будут ссылаться на сам экземляр
-        <code>Zend_View</code>.
+        видимости экземпляра <classname>Zend_View</classname>. Поэтому в вашем скрипте
+        вида ссылки на $this в действительности будут ссылаться на
+        сам экземляр <classname>Zend_View</classname>.
     </para>
 
     <para>
-        Переменные, объявленные для вида в контроллере, ссылаются на
-        свойства экземпляра. Например, если контроллер объявил
-        переменную 'something', то вы можете ссылаться на нее как
-        на <code>$this->something</code> в скрипте вида (это дает
-        вам возможность отслеживать, какие переменные были объявлены
-        для скрипта, и какие были объявлены самим скриптом).
+        Переменные, устанавливаемые в контроллере для скрипта вида, являются
+        свойствами экземпляра <classname>Zend_View</classname>. Например, если контроллер
+        установил переменную 'something', то в скрипте вида вы можете ссылаться
+        на нее следующим образом: <code>$this->something</code>. Это дает
+        возможность отслеживать, какие переменные были установлены
+        извне для скрипта, и какие были установлены в самом скрипте.
     </para>
 
     <para>
-        Ниже приведен пример скрипта представления из введения:
+        Ниже приведен пример скрипта вида из введения:
     </para>
 
-    <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
+    <programlisting role="php"><![CDATA[
+<?php if ($this->books): ?>
 
-    <!-- Таблица нескольких книг. -->
+    <!-- Таблица из нескольких книг. -->
     <table>
         <tr>
             <th>Author</th>
@@ -46,8 +49,8 @@
 
     <p>Нет книг для отображения.</p>
 
-<?php endif; ?>]]>
-    </programlisting>
+<?php endif;?>
+]]></programlisting>
 
     <sect2 id="zend.view.scripts.escaping">
 
@@ -59,34 +62,33 @@
             экранирован; помимо прочего, это помогает
             предотвратить XSS-атаки.
             За исключением тех случаев, когда используются функции,
-            методы или помощники, которые делают экранирование
-            сами, вы должны всегда экранировать переменные, когда выводите их.
+            методы или помощники, которые сами производят экранирование,
+            вы должны всегда экранировать переменные, когда выводите их.
         </para>
 
         <para>
-            <code>Zend_View</code> снабжен методом <code>escape()</code>,
+            <classname>Zend_View</classname> снабжен методом <code>escape()</code>,
             который выполняет экранирование.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
-// плохая практика для скриптов вида
+        <programlisting role="php"><![CDATA[
+// плохая практика
 echo $this->variable;
 
-// хорошая практика для скриптов вида
+// хорошая практика
 echo $this->escape($this->variable);
-?>]]>
-        </programlisting>
+]]></programlisting>
 
         <para>
             По умолчанию метод <code>escape()</code> использует функцию PHP
             <code>htmlspecialchars()</code> для экранирования. Но, в зависимости
             от вашего окружения, может потребоваться выполнять экранирование
             по-иному. Используйте метод <code>setEscape()</code> на уровне
-            контроллера, чтобы указать <code>Zend_View</code>, какую
+            контроллера, чтобы указать <classname>Zend_View</classname>, какую
             экранирующую функцию обратного вызова использовать.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 // создание экземпляра Zend_View
 $view = new Zend_View();
 
@@ -103,12 +105,11 @@ $view->setEscape(array($obj, 'methodName'));
 
 // и затем воспроизводим вид
 echo $view->render(...);
-?>]]>
-        </programlisting>
+]]></programlisting>
 
         <para>
             Функции или методы обратного вызова должны принимать значение,
-            которое требуется экранировать как первый параметр,
+            которое требуется экранировать, как первый параметр,
             все остальные параметры должны быть необязательными.
         </para>
 
@@ -120,11 +121,11 @@ echo $view->render(...);
 
         <para>
             Хотя PHP сам по себе представляет собой мощный шаблонизатор,
-            многие разработчики считают его избыточным или слишком сложным для
-            верстальщиков и поэтому предпочитают использовать другие
-            шаблонизаторы. Zend_View предоставляет 2 пути для этого: первый –
-            через скрипты вида, второй - посредством реализации интерфейса
-            Zend_View_Interface.
+            многие разработчики считают его избыточным или сложным для
+            верстальщиков и предпочитают использовать другие
+            шаблонизаторы. <classname>Zend_View</classname> предоставляет два пути для
+            этого: первый - через скрипты вида, второй - посредством реализации
+            интерфейса <classname>Zend_View_Interface</classname>.
         </para>
 
         <sect3 id="zend.view.scripts.templates.scripts">
@@ -136,7 +137,7 @@ echo $view->render(...);
                 шаблоны в стиле PHPLIB).
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
+            <programlisting role="php"><![CDATA[
 include_once 'template.inc';
 $tpl = new Template();
 
@@ -157,7 +158,7 @@ if ($this->books) {
     $tpl->setFile("nobooks", "nobooks.tpl")
     $tpl->pparse("output", "nobooks");
 }
-?>]]></programlisting>
+]]></programlisting>
 
             <para>
                 Это может соответствовать следующему файлу шаблона:
@@ -189,8 +190,9 @@ if ($this->books) {
             <title>Шаблонизаторы с использованием Zend_View_Interface</title>
 
             <para>
-                Некоторым может быть удобнее использовать совместимый с
-                Zend_View шаблонизатор. <code>Zend_View_Interface</code>
+                Некоторые считают более удобным использовать совместимый с
+                <classname>Zend_View</classname> шаблонизатор.
+                <classname>Zend_View_Interface</classname>
                 предоставляет минимально необходимый для
                 совместимости интерфейс:
             </para>
@@ -207,6 +209,21 @@ public function getEngine();
 public function setScriptPath($path);
 
 /**
+ * Устанавливает базовый путь ко всем необходимым скрипту вида ресурсам
+ */
+public function setBasePath($path, $prefix = 'Zend_View');
+
+/**
+ * Устанавливает дополнительный базовый путь к необходимым скрипту вида ресурсам
+ */
+public function addBasePath($path, $prefix = 'Zend_View');
+
+/**
+ * Возвращает текущие пути к скриптам
+ */
+public function getScriptPaths();
+
+/**
  * Переопределение методов для присвоения значений переменным шаблонов как
  * свойствам объекта
  */
@@ -233,15 +250,12 @@ public function render($name);
 ]]></programlisting>
 
             <para>
-                Используя этот интерфейс, легко сделать "обертку" для
-                шаблонизаторов сторонних разработчиков. В примере показан
+                Используя этот интерфейс, относительно легко сделать "обертку"
+                для шаблонизаторов сторонних разработчиков. В примере показан
                 вариант "обертки" для Smarty:
             </para>
 
             <programlisting role="php"><![CDATA[
-require_once 'Zend/View/Interface.php';
-require_once 'Smarty.class.php';
-
 class Zend_View_Smarty implements Zend_View_Interface
 {
     /**
@@ -297,10 +311,44 @@ class Zend_View_Smarty implements Zend_View_Interface
     }
 
     /**
+     * Извлечение текущего пути к шаблонам
+     *
+     * @return string
+     */
+    public function getScriptPaths()
+    {
+        return array($this->_smarty->template_dir);
+    }
+
+    /**
+     * Метод-"псевдоним" для setScriptPath
+     *
+     * @param string $path
+     * @param string $prefix Не используется
+     * @return void
+     */
+    public function setBasePath($path, $prefix = 'Zend_View')
+    {
+        return $this->setScriptPath($path);
+    }
+
+    /**
+     * Метод-"псевдоним" для setScriptPath
+     *
+     * @param string $path
+     * @param string $prefix Не используется
+     * @return void
+     */
+    public function addBasePath($path, $prefix = 'Zend_View')
+    {
+        return $this->setScriptPath($path);
+    }
+
+    /**
      * Присвоение значения переменной шаблона
      *
-     * @param string $key The variable name.
-     * @param mixed $val The variable value.
+     * @param string $key Имя переменной
+     * @param mixed $val Значение переменной
      * @return void
      */
     public function __set($key, $val)
@@ -311,8 +359,8 @@ class Zend_View_Smarty implements Zend_View_Interface
     /**
      * Получение значения переменной
      *
-     * @param string $key The variable name.
-     * @return mixed The variable value.
+     * @param string $key Имя переменной
+     * @return mixed Значение переменной
      */
     public function __get($key)
     {
@@ -388,17 +436,46 @@ class Zend_View_Smarty implements Zend_View_Interface
 
             <para>
                 В этом примере вы можете инстанцировать класс
-                <code>Zend_View_Smarty</code> вместо <code>Zend_View</code> и
-                использовать его подобно тому, как используется
-                <code>Zend_View</code>.
+                <classname>Zend_View_Smarty</classname> вместо <classname>Zend_View</classname> и
+                использовать его так же, как используется
+                <classname>Zend_View</classname>.
             </para>
 
             <programlisting role="php"><![CDATA[
-$view = new Zend_View_Smarty();
-$view->setScriptPath('/path/to/templates');
-$view->book = 'Zend PHP 5 Certification Study Guide';
-$view->author = 'Davey Shafik and Ben Ramsey'
-$rendered = $view->render('bookinfo.tpl');
+//Пример 1. В initView() инициализатора
+$view = new Zend_View_Smarty('/path/to/templates');
+$viewRenderer =
+    new Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
+$viewRenderer->setView($view)
+             ->setViewBasePathSpec($view->_smarty->template_dir)
+             ->setViewScriptPathSpec(':controller/:action.:suffix')
+             ->setViewScriptPathNoControllerSpec(':action.:suffix')
+             ->setViewSuffix('tpl');
+
+//Пример 2. Использование в контроллере действии остается тем же
+class FooController extends Zend_Controller_Action
+{
+    public function barAction()
+    {
+        $this->view->book   = 'Zend PHP 5 Certification Study Guide';
+        $this->view->author = 'Davey Shafik and Ben Ramsey'
+    }
+}
+
+//Пример 3. Инициализация вида в контроллере действий
+class FooController extends Zend_Controller_Action
+{
+    public function init()
+    {
+        $this->view   = new Zend_View_Smarty('/path/to/templates');
+        $viewRenderer = $this->_helper->getHelper('viewRenderer');
+        $viewRenderer->setView($this->view)
+                     ->setViewBasePathSpec($view->_smarty->template_dir)
+                     ->setViewScriptPathSpec(':controller/:action.:suffix')
+                     ->setViewScriptPathNoControllerSpec(':action.:suffix')
+                     ->setViewSuffix('tpl');
+    }
+}
 ]]></programlisting>
 
         </sect3>

+ 4 - 13
documentation/manual/ru/module_specs/Zend_XmlRpc.xml

@@ -1,29 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <sect1 id="zend.xmlrpc.introduction">
     <title>Введение</title>
 
     <para>
-        Согласно информации, размещенной на его
-        <ulink url="http://www.xmlrpc.com/">начальной странице</ulink> XML-RPC
+        Согласно информации, размещенной на стартовой странице
+        <ulink url="http://www.xmlrpc.com/">официального сайта</ulink>, XML-RPC
         является "... удаленным вызовом процедур с использованием HTTP для
         передачи данных и XML для кодирования. XML-RPC разработан в расчете
         на максимально простое использование, и в то же время позволяет
         передавать, обрабатывать и возвращать сложные структуры данных."
-<!--
-        From its <ulink url="http://www.xmlrpc.com/">home page</ulink>,
-        XML-RPC is described as a "...remote procedure calling using HTTP as the
-        transport and XML as the encoding. XML-RPC is designed to be as simple
-        as possible, while allowing complex data structures to be transmitted,
-        processed and returned."
--->
     </para>
 
     <para>
         Zend Framework поддерживает как использование удаленных XML-RPC
         сервисов, так и создание новых XML-RPC серверов.
-<!--
-        Zend Framework provides support for both consuming remote XML-RPC
-        services and building new XML-RPC servers.
--->
     </para>
 </sect1>
 <!--

+ 156 - 360
documentation/manual/ru/module_specs/Zend_XmlRpc_Client.xml

@@ -1,3 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <sect1 id="zend.xmlrpc.client">
     <title>Zend_XmlRpc_Client</title>
 
@@ -6,36 +8,23 @@
 
         <para>
             Zend Framework поддерживает клиентское использование удаленных
-            XML-RPC сервисов через пакет <code>Zend_XmlRpc_Client</code>.
+            XML-RPC сервисов через пакет <classname>Zend_XmlRpc_Client</classname>.
             Его основные возможности включают в себя автоматическое
             преобразование типов между PHP и XML-RPC, прокси-объект сервера и
             доступ к средствам интроспекции на сервере.
-<!--
-            Zend Framework provides support for consuming remote XML-RPC
-            services as a client in the <code>Zend_XmlRpc_Client</code>
-            package. Its major features include automatic type conversion
-            between PHP and XML-RPC, a server proxy object, and access to
-            server introspection capabilities.
--->
         </para>
 
     </sect2>
 
 
     <sect2 id="zend.xmlrpc.client.method-calls">
-        <title>Вызов методов<!--Method Calls--></title>
+        <title>Вызов методов</title>
 
         <para>
-            Конструктор <code>Zend_XmlRpc_Client</code> принимает URL удаленного
+            Конструктор <classname>Zend_XmlRpc_Client</classname> принимает URL удаленного
             XML-RPC сервера в качестве первого параметра. Новый экземпляр класса
             может использоваться для вызова любых удаленных методов этого
             сервера.
-<!--
-            The constructor of <code>Zend_XmlRpc_Client</code> receives the
-            URL of the remote XML-RPC server endpoint as its first parameter.
-            The new instance returned may be used to call any number of
-            remote methods at that endpoint.
--->
         </para>
 
         <para>
@@ -43,29 +32,18 @@
             и используйте его метод <code>call()</code>. В примере ниже
             используется демонстрационный XML-RPC сервер на веб-сайте Zend
             Framework. Вы можете использовать его для тестирования или изучения
-            компонент <code>Zend_XmlRpc</code>.
-<!--
-            To call a remote method with the XML-RPC client, instantiate it
-            and use the <code>call()</code> instance method. The code sample
-            below uses a demonstration XML-RPC server on the Zend Framework
-            website. You can use it for testing or exploring the
-            <code>Zend_XmlRpc</code> components.
--->
+            компонент <classname>Zend_XmlRpc</classname>.
         </para>
 
-        <example>
-            <title>Вызов метода XML-RPC<!--XML-RPC Method Call--></title>
-            <programlisting role="php"><![CDATA[<?php
-
-require_once 'Zend/XmlRpc/Client.php';
-
+        <example id="zend.xmlrpc.client.method-calls.example-1">
+            <title>Вызов метода XML-RPC</title>
+            <programlisting role="php"><![CDATA[
 $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
 
 echo $client->call('test.sayHello');
 
 // hello
-
-?>]]></programlisting>
+]]></programlisting>
         </example>
 
         <para>
@@ -73,12 +51,6 @@ echo $client->call('test.sayHello');
             автоматически приведено к эквивалентному типу в PHP. В примере выше
             возвращается строка (тип <code>string</code> в PHP), и она уже
             готова к применению.
-<!--
-            The XML-RPC value returned from the remote method call will be
-            automatically unmarshaled and cast to the equivalent PHP native
-            type. In the example above, a PHP <code>string</code> is returned
-            and is immediately ready to be used.
--->
         </para>
 
         <para>
@@ -87,21 +59,11 @@ echo $client->call('test.sayHello');
             каких-либо параметров, то они могут быть переданы методу
             <code>call()</code> через второй необязательный параметр в виде
             массива значений для последующей передачи удаленному методу:
-<!--
-            The first parameter of the <code>call()</code> method receives the
-            name of the remote method to call. If the remote method requires
-            any parameters, these can be sent by supplying a second, optional
-            parameter to <code>call()</code> with an <code>array</code> of
-            values to pass to the remote method:
--->
         </para>
 
-        <example>
-            <title>Вызов метода XML-RPC с параметрами<!--XML-RPC Method Call with Parameters--></title>
-            <programlisting role="php"><![CDATA[<?php
-
-require_once 'Zend/XmlRpc/Client.php';
-
+        <example id="zend.xmlrpc.client.method-calls.example-2">
+            <title>Вызов метода XML-RPC с параметрами</title>
+            <programlisting role="php"><![CDATA[
 $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
 
 $arg1 = 1.1;
@@ -109,62 +71,42 @@ $arg2 = 'foo';
 
 $result = $client->call('test.sayHello', array($arg1, $arg2));
 
-?>]]></programlisting>
+// возвращаемый результат имеет "родной" для PHP тип
+]]></programlisting>
         </example>
 
         <para>
             Если удаленный метод не требует параметров, то этот необязательный
             параметр можно опустить или передать пустой массив. Массив
             параметров для удаленного метода может содержать значения "родного"
-            для PHP типа, объекты <code>Zend_XmlRpc_Value</code>, либо
+            для PHP типа, объекты <classname>Zend_XmlRpc_Value</classname>, либо
             и то и другое вместе.
-<!--
-            If the remote method doesn't require parameters, this optional
-            parameter may either be left out or an empty <code>array()</code>
-            passed to it. The array of parameters for the remote method can
-            contain native PHP types, <code>Zend_XmlRpc_Value</code>
-            objects, or a mix of each.
--->
         </para>
 
         <para>
             Метод <code>call()</code> будет автоматически преобразовывать ответ
             XML-RPC и возвращать его в эквивалентном "родном" для PHP типе.
-            Кроме этого, можно получить объект <code>Zend_XmlRpc_Response</code>
+            Кроме этого, можно получить объект <classname>Zend_XmlRpc_Response</classname>
             для возвращенного значения, вызвав метод
             <code>getLastResponse()</code> после вызова <code>call()</code>.
-<!--
-            The <code>call()</code> method will automatically convert the
-            XML-RPC response and return its equivalent PHP native type. A
-            <code>Zend_XmlRpc_Response</code> object for the return value will
-            also be available by calling the <code>getLastResponse()</code>
-            method after the call.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.value.parameters">
-        <title>Типы и их преобразование<!--Types and Conversions--></title>
+        <title>Типы и их преобразование</title>
         <para>
-            Некоторых удаленных методов требуют передачи параметров при вызове.
-            Они предоставляются методу <code>call()</code> объекта
-            <code>Zend_XmlRpc_Client</code> в виде массива во втором параметре.
-            Каждый параметр может быть передан в "родном" для PHP типе, который
-            будет автоматически преобразован, или как объект, представляющий
+            Некоторые удаленные методы требуют передачи параметров при вызове.
+            Они передаются методу <code>call()</code> объекта
+            <classname>Zend_XmlRpc_Client</classname> в виде массива во втором параметре.
+            Любой параметр может быть передан в "родном" для PHP типе, который
+            будет автоматически преобразован в соответствующий тип XML-RPC,
+            или как объект, представляющий
             определенный тип в XML-RPC (один из объектов
-            <code>Zend_XmlRpc_Value</code>).
-<!--
-            Some remote method calls require parameters.  These are given to
-            the <code>call()</code> method of <code>Zend_XmlRpc_Client</code>
-            as an array in the second parameter.  Each parameter may be
-            given as either a native PHP type which will be automatically
-            converted, or as an object representing a specific XML-RPC type
-            (one of the <code>Zend_XmlRpc_Value</code> objects).
--->
+            <classname>Zend_XmlRpc_Value</classname>).
         </para>
 
         <sect3 id="zend.xmlrpc.value.parameters.php-native">
-            <title>Параметры в "родном" для PHP типе<!--PHP Native Types as Parameters--></title>
+            <title>Параметры в "родном" для PHP типе</title>
             <para>
                 Параметры могут передаваться методу <code>call()</code> как
                 переменные "родного" для PHP типа, это могут быть типы
@@ -172,25 +114,16 @@ $result = $client->call('test.sayHello', array($arg1, $arg2));
                 <code>boolean</code>, <code>array</code> или
                 <code>object</code>. В этом случае каждый из этих типов будет
                 автоматически определен и преобразован в один из типов XML-RPC
-                согласно этой таблице:
-<!--
-                Parameters may be passed to <code>call()</code> as native PHP
-                variables, meaning as a <code>string</code>,
-                <code>integer</code>, <code>float</code>,
-                <code>boolean</code>, <code>array</code>, or an
-                <code>object</code>. In this case, each PHP native type will
-                be auto-detected and converted into one of the XML-RPC types
-                according to this table:
--->
+                согласно следующей таблице:
             </para>
 
             <table>
-                <title>Преобразование типов PHP и XML-RPC<!--PHP and XML-RPC Type Conversions--></title>
+                <title>Преобразование типов PHP и XML-RPC</title>
                 <tgroup cols="2">
                     <thead>
                         <row>
-                            <entry>Тип в PHP<!--PHP Native Type--></entry>
-                            <entry>Тип в XML-RPC<!--XML-RPC Type--></entry>
+                            <entry>Тип в PHP</entry>
+                            <entry>Тип в XML-RPC</entry>
                         </row>
                     </thead>
                     <tbody>
@@ -225,19 +158,53 @@ $result = $client->call('test.sayHello', array($arg1, $arg2));
                     </tbody>
                 </tgroup>
             </table>
+
+            <note>
+                <title>Какому типу будет соответствовать пустой массив?</title>
+
+                <para>
+                    Передача пустого массива методу XML-RPC несет в себе
+                    потенциальную проблему, т.к. он может быть представлен
+                    и массивом, и структурой. <classname>Zend_XmlRpc_Client</classname>
+                    в этом случае делает запрос к методу сервера
+                    <code>system.methodSignature</code> для определения
+                    требуемого типа аргумента и производит соответствующее
+                    преобразование.
+                </para>
+
+                <para>
+                    Но такое решение само по себе тоже может быть источником
+                    проблем. Во-первых, сервера, которые не поддерживают метод
+                    <code>system.methodSignature</code>, будут журналировать это
+                    как ошибочные вызовы, в этом случае
+                    <classname>Zend_XmlRpc_Client</classname> будет производить
+                    преобразование значения к типу array в XML-RPC.
+                    Кроме того, это приводит к дополнительным вызовам к
+                    удаленному серверу в случае передачи аргументов в виде
+                    массивов.
+                </para>
+
+                <para>
+                    Для того, чтобы полностью отключить эти вызовы, вы можете
+                    вызвать метод <code>setSkipSystemLookup()</code> до
+                    собственно запроса к методу XML-RPC:
+                </para>
+
+                <programlisting role="php"><![CDATA[
+$client->setSkipSystemLookup(true);
+$result = $client->call('foo.bar', array(array()));
+]]></programlisting>
+            </note>
+
         </sect3>
 
         <sect3 id="zend.xmlrpc.value.parameters.xmlrpc-value">
-            <title>Параметры в виде объектов <code>Zend_XmlRpc_Value</code><!--<code>Zend_XmlRpc_Value</code> Objects as Parameters--></title>
+            <title>Параметры в виде объектов Zend_XmlRpc_Value</title>
             <para>
                 Параметры могут также создаваться как экземпляры
-                <code>Zend_XmlRpc_Value</code> для точного указания типа
+                <classname>Zend_XmlRpc_Value</classname> для точного указания типа
                 XML-RPC. Основные причины для этого:
-<!--
-                Parameters may also be created as <code>Zend_XmlRpc_Value</code>
-                instances to specify an exact XML-RPC type.  The primary reasons
-                for doing this are:
--->
+
                 <itemizedlist>
                     <listitem>
                         <para>
@@ -246,12 +213,6 @@ $result = $client->call('test.sayHello', array($arg1, $arg2));
                             (т.е. процедура требует целочисленное значение, а
                             вы можете получать его из БД в виде
                             строки)
-<!--
-                            When you want to make sure the correct parameter
-                            type is passed to the procedure (i.e. the
-                            procedure requires an integer and you may get it
-                            from a database as a string)
--->
                         </para>
                     </listitem>
                     <listitem>
@@ -259,99 +220,80 @@ $result = $client->call('test.sayHello', array($arg1, $arg2));
                             Удаленная процедура требует тип <code>base64</code>
                             или <code>dateTime.iso8601</code> (которых нет среди
                             "родных" для PHP типов).
-<!--
-                            When the procedure requires <code>base64</code> or
-                            <code>dateTime.iso8601</code> type (which doesn't exists as a
-                            PHP native type)
--->
                         </para>
                     </listitem>
                     <listitem>
                         <para>
                             Автоматическое преобразование может работать
                             неправильно (например, вы хотите передать пустую
-                            структуру XML-RPC как параметр. Пустая структура
-                            представляется в PHP пустым массивом, но когда вы
-                            передаете пустой массив как параметр, он
-                            будет преобразован в массив XML-RPC, так как не
+                            структуру XML-RPC в качестве параметра. Пустая структура
+                            представляется в PHP пустым массивом, но если вы
+                            передаете пустой массив в качестве параметра, то он
+                            преобразовывается в массив XML-RPC, т.к. не
                             является ассоциативным массивом)
-<!--
-                            When auto-conversion may fail (i.e. you want to
-                            pass an empty XML-RPC struct as a parameter. Empty
-                            structs are represented as empty arrays in PHP
-                            but, if you give an empty array as a parameter it
-                            will be auto-converted to an XML-RPC array since
-                            it's not an associative array)
--->
                         </para>
                     </listitem>
                 </itemizedlist>
             </para>
 
             <para>
-                Есть два пути создания объектов <code>Zend_XmlRpc_Value</code> ―
+                Есть два способа создания объектов <classname>Zend_XmlRpc_Value</classname> ―
                 непосредственное инстанцирование одного из подклассов
-                <code>Zend_XmlRpc_Value</code> и использование статического
+                <classname>Zend_XmlRpc_Value</classname> и использование статического
                 фабричного метода
-                <code>Zend_XmlRpc_Value::getXmlRpcValue()</code>.
-<!--
-                There are two ways to create a <code>Zend_XmlRpc_Value</code>
-                object: instantiate one of the <code>Zend_XmlRpc_Value</code>
-                subclasses directly, or use the static factory method
-                <code>Zend_XmlRpc_Value::getXmlRpcValue()</code>.
--->
+                <classname>Zend_XmlRpc_Value::getXmlRpcValue()</classname>.
             </para>
 
-            <table>
-                <title>Объекты <code>Zend_XmlRpc_Value</code> для типов XML-RPC<!-- <code>Zend_XmlRpc_Value</code> Objects for XML-RPC Types--></title>
+            <table id="zend.xmlrpc.value.parameters.xmlrpc-value.table-1">
+                <title>Объекты Zend_XmlRpc_Value для типов XML-RPC</title>
                 <tgroup cols="3">
                     <thead>
                         <row>
                             <entry>Тип XML-RPC</entry>
-                            <entry>Константа <code>Zend_XmlRpc_Value</code></entry>
-                            <entry>Объект <code>Zend_XmlRpc_Value</code></entry>
+                            <entry>Константа <classname>Zend_XmlRpc_Value</classname></entry>
+                            <entry>Объект <classname>Zend_XmlRpc_Value</classname></entry>
                         </row>
                     </thead>
                     <tbody>
                         <row>
                             <entry>int</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_INTEGER</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_Integer</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_Integer</classname></entry>
                         </row>
                         <row>
                             <entry>double</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_DOUBLE</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_Double</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_Double</classname></entry>
                         </row>
                         <row>
                             <entry>boolean</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_BOOLEAN</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_Boolean</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_Boolean</classname></entry>
                         </row>
                         <row>
                             <entry>string</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_STRING</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_String</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_String</classname></entry>
                         </row>
                         <row>
                             <entry>base64</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_BASE64</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_Base64</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_Base64</classname></entry>
                         </row>
                         <row>
                             <entry>dateTime.iso8601</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_DATETIME</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_DateTime</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_DateTime</classname></entry>
                         </row>
                         <row>
                             <entry>array</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_ARRAY</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_Array</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_Array</classname></entry>
                         </row>
                         <row>
                             <entry>struct</entry>
                             <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_STRUCT</code></entry>
-                            <entry><code>Zend_XmlRpc_Value_Struct</code></entry>
+                            <entry><classname>Zend_XmlRpc_Value_Struct</classname></entry>
                         </row>
                     </tbody>
                 </tgroup>
@@ -359,25 +301,16 @@ $result = $client->call('test.sayHello', array($arg1, $arg2));
 
             <para>
                 <note>
-                    <title>Автоматическое преобразование<!--Automatic Conversion--></title>
+                    <title>Автоматическое преобразование</title>
                     <para>
                         Когда создается новый объект
-                        <code>Zend_XmlRpc_Value</code>, его значение
+                        <classname>Zend_XmlRpc_Value</classname>, его значение
                         устанавливается в "родном" для PHP типе. Тип в PHP будет
                         преобразован к определенному типу средствами PHP.
                         Например, если в качестве значения для объекта
-                        <code>Zend_XmlRpc_Value_Integer</code> была передана
-                        строка, то она будет преобразована с помощью
-                        <code>(int)$value</code>.
-<!--
-                        When building a new <code>Zend_XmlRpc_Value</code>
-                        object, its value is set by a PHP type. The PHP type
-                        will be will be converted to the specified type using
-                        PHP casting. For example, if a string is given as a
-                        value to the <code>Zend_XmlRpc_Value_Integer</code>
-                        object, it will be converted using
+                        <classname>Zend_XmlRpc_Value_Integer</classname> была передана
+                        строка, то она будет преобразована через
                         <code>(int)$value</code>.
--->
                     </para>
                 </note>
             </para>
@@ -385,43 +318,28 @@ $result = $client->call('test.sayHello', array($arg1, $arg2));
     </sect2>
 
     <sect2 id="zend.xmlrpc.client.requests-and-responses">
-        <title>Прокси-объект сервера<!--Server Proxy Object--></title>
+        <title>Прокси-объект сервера</title>
         <para>
             Другим способом вызова удаленных методов через клиента XML-RPC
             является использование "заместителя" сервера. Это PHP-объект,
             который предоставляет интерфейс к удаленному пространству имен
-            XML-RPC, делая работу с ним настолько близкой к работе с обычным
-            объектом в PHP, насколько это возможно.
-<!--
-            Another way to call remote methods with the XML-RPC client is to
-            use the server proxy.  This is a PHP object that proxies a remote
-            XML-RPC namespace, making it work as close to a native PHP object
-            as possible.
--->
+            XML-RPC, делая работу с ним максимально близкой к работе с обычным
+            объектом в PHP.
         </para>
 
         <para>
             Для того, чтобы инстанцировать "заместителя" сервера, вызовите
             метод <code>getProxy()</code> объекта
-            <code>Zend_XmlRpc_Client</code>. Любые вызовы методов прокси-объекта
+            <classname>Zend_XmlRpc_Client</classname>. Он вернет объект класса
+            <classname>Zend_XmlRpc_Client_ServerProxy</classname>.
+            Любые вызовы методов прокси-объекта
             сервера будет перенаправлены к удаленному серверу, параметры могут
             передаваться так же, как и для любых других методов в PHP.
-<!--
-            To instantiate a server proxy, call the <code>getProxy()</code>
-            instance method of <code>Zend_XmlRpc_Client</code>. This will
-            return an instance of <code>Zend_XmlRpc_Client_ServerProxy</code>.
-            Any method call on the server proxy object will be forwarded to
-            the remote, and parameters may be passed like any other PHP
-            method.
--->
         </para>
 
-        <example>
-            <title>Прокси-объект к пространству имен по умолчанию<!--Proxy the Default Namespace--></title>
-            <programlisting role="php"><![CDATA[<?php
-
-require_once 'Zend/XmlRpc/Client.php';
-
+        <example id="zend.xmlrpc.client.requests-and-responses.example-1">
+            <title>Прокси-объект к пространству имен по умолчанию</title>
+            <programlisting role="php"><![CDATA[
 $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
 
 // Создание прокси-объекта к пространству имен по умолчанию
@@ -429,9 +347,7 @@ $server = $client->getProxy();
 
 $hello = $server->test->sayHello(1, 2);
 // test.Hello(1, 2) возвращает "hello"
-
-?>]]>
-            </programlisting>
+]]></programlisting>
         </example>
 
         <para>
@@ -439,31 +355,20 @@ $hello = $server->test->sayHello(1, 2);
             указывающий, к какому пространству имен следует создать
             прокси-объект. Если этот аргумент не был указан, то то будет
             использоваться пространство имен по умолчанию. В следующем примере
-            используется пространство имен <code>test</code>.
-<!--
-            The <code>getProxy()</code> method receives an optional argument
-            specifying which namespace of the remote server to proxy. If it
-            does not receive a namespace, the default namespace will be
-            proxied.  In the next example, the <code>test</code> namespace
-            will be proxied:
--->
+            используется пространство имен <code>test</code>:
         </para>
 
-        <example>
-            <title>Прокси-объект к любому пространству имен<!--Proxy Any Namespace--></title>
-            <programlisting role="php"><![CDATA[<?php
-
-require_once 'Zend/XmlRpc/Client.php';
-
+        <example id="zend.xmlrpc.client.requests-and-responses.example-2">
+            <title>Прокси-объект к произвольному пространству имен</title>
+            <programlisting role="php"><![CDATA[
 $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
 
-// ... Proxy the "test" namespace
+// Создание прокси-объекта к пространству имен "test"
 $test  = $client->getProxy('test');
 
 $hello = $test->sayHello(1, 2);
 // test.Hello(1,2) возвращает "hello"
-
-?>]]></programlisting>
+]]></programlisting>
         </example>
 
         <para>
@@ -472,52 +377,31 @@ $hello = $test->sayHello(1, 2);
             прокси-объект сервера. Например, если сервер в примере выше имеет
             метод <code>test.foo.bar()</code>, то он может вызываться следующим
             образом: <code>$test->foo->bar()</code>.
-<!--
-            If the remote server supports nested namespaces of any depth,
-            these can also be used through the server proxy. For example, if
-            the server in the example above had a method
-            <code>test.foo.bar()</code>, it could be called as
-            <code>$test->foo->bar()</code>.
--->
         </para>
     </sect2>
 
 
     <sect2 id="zend.xmlrpc.client.error-handling">
-        <title>Обработка ошибок<!--Error Handling--></title>
+        <title>Обработка ошибок</title>
         <para>
-            При вызове методов XML-RPC могут происходить два типа ошибок: HTTP и
-            XML-RPC. <code>Zend_XmlRpc_Client</code> распознает оба типа,
+            При вызове методов XML-RPC могут могут быть ошибки двух типов: HTTP и
+            XML-RPC. <classname>Zend_XmlRpc_Client</classname> распознает оба типа,
             позволяя обнаруживать и отлавливать их независимо друг от друга.
-<!--
-            Two kinds of errors can occur during an XML-RPC method call: HTTP
-            errors and XML-RPC faults. The <code>Zend_XmlRpc_Client</code>
-            recognizes each and provides the ability to detect and trap them
-            independently.
--->
         </para>
 
         <sect3 id="zend.xmlrpc.client.error-handling.http">
-            <title>Ошибки HTTP<!--HTTP Errors--></title>
+            <title>Ошибки HTTP</title>
 
             <para>
-                Если произошла ошибка HTTP, например, удаленный HTTP-сервер
-                вернул код <code>404 Not Found</code>, то будет сгенерировано
-                исключение <code>Zend_XmlRpc_Client_HttpException</code>.
-<!--
-                If any HTTP error occurs, such as the remote HTTP server
-                returns a <code>404 Not Found</code>, a
-                <code>Zend_XmlRpc_Client_HttpException</code> will be thrown.
--->
+                Если произошла ошибка HTTP - например, удаленный HTTP-сервер
+                вернул код <code>404 Not Found</code>, - то будет сгенерировано
+                исключение <classname>Zend_XmlRpc_Client_HttpException</classname>.
             </para>
 
-            <example>
-                <title>Обработка ошибок HTTP<!--Handling HTTP Errors--></title>
-
-                <programlisting role="php"><![CDATA[<?php
-
-require_once 'Zend/XmlRpc/Client.php';
+            <example id="zend.xmlrpc.client.error-handling.http.example-1">
+                <title>Обработка ошибок HTTP</title>
 
+                <programlisting role="php"><![CDATA[
 $client = new Zend_XmlRpc_Client('http://foo/404');
 
 try {
@@ -530,64 +414,40 @@ try {
     // $e->getMessage() возвращает "Not Found"
 
 }
-
-?>]]></programlisting>
+]]></programlisting>
             </example>
 
             <para>
                 Независимо от того, какой клиент XML-RPC используется, всякий
                 раз, когда происходит ошибка HTTP, генерируется исключение
-                <code>Zend_XmlRpc_Client_HttpException</code>.
-<!--
-                Regardless of how the XML-RPC client is used, the
-                <code>Zend_XmlRpc_Client_HttpException</code> will be thrown
-                whenever an HTTP error occurs.
--->
+                <classname>Zend_XmlRpc_Client_HttpException</classname>.
             </para>
         </sect3>
 
         <sect3 id="zend.xmlrpc.client.error-handling.faults">
-            <title>Ошибки XML-RPC<!--XML-RPC Faults--></title>
+            <title>Ошибки XML-RPC</title>
 
             <para>
                 Ошибка XML-RPC аналогична исключению в PHP. Это специальный тип,
                 возвращаемый при вызове метода XML-RPC и включающий в себя код и
-                сообщение ошибки. Ошибки XML-RPC обрабатываются по-разному
+                сообщение ошибки. Ошибки XML-RPC обрабатываются по-разному,
                 в зависимости от контекста использования
-                <code>Zend_XmlRpc_Client</code>.
-<!--
-                An XML-RPC fault is analogous to a PHP exception. It is a
-                special type returned from an XML-RPC method call that has
-                both an error code and an error message. XML-RPC faults are
-                handled differently depending on the context of how the
-                <code>Zend_XmlRpc_Client</code> is used.
--->
+                <classname>Zend_XmlRpc_Client</classname>.
             </para>
 
             <para>
                Если используется метод <code>call()</code> или прокси-объект
                сервера, то ошибка XML-RPC приведет к тому, что будет
                сгенерировано исключение
-               <code>Zend_XmlRpc_Client_FaultException</code>. Код и сообщение
+               <classname>Zend_XmlRpc_Client_FaultException</classname>. Код и сообщение
                исключения будут в точности соответствовать значениям в
                возвращенном ответе с сообщением об ошибке.
-<!--
-                When the <code>call()</code> method or the server
-                proxy object is used, an XML-RPC fault will result in a
-                <code>Zend_XmlRpc_Client_FaultException</code> being thrown.
-                The code and message of the exception will map directly to
-                their respective values in the original XML-RPC fault
-                response.
--->
             </para>
 
-            <example>
-                <title>Обработка ошибок XML-RPC<!--Handling XML-RPC Faults--></title>
-
-                <programlisting role="php"><![CDATA[<?php
-
-require_once 'Zend/XmlRpc/Client.php';
+            <example id="zend.xmlrpc.client.error-handling.faults.example-1">
+                <title>Обработка ошибок XML-RPC</title>
 
+                <programlisting role="php"><![CDATA[
 $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
 
 try {
@@ -600,103 +460,66 @@ try {
     // $e->getMessage() возвращает "Unknown method"
 
 }
-
-?>]]></programlisting>
+]]></programlisting>
             </example>
 
             <para>
                 Если для выполнения запроса используется метод
                 <code>call()</code>, то в случае ошибки будет сгенерировано
-                исключение <code>Zend_XmlRpc_FaultException</code>. Объект
-                <code>Zend_XmlRpc_Response</code>, содержащий возвращенную
+                исключение <classname>Zend_XmlRpc_FaultException</classname>. Объект
+                <classname>Zend_XmlRpc_Response</classname>, содержащий возвращенную
                 ошибку, можно также получить через метод
                 <code>getLastResponse()</code>.
-<!--
-                When the <code>call()</code> method is used to make the
-                request, the <code>Zend_XmlRpc_FaultException</code> will be
-                thrown on fault. A <code>Zend_XmlRpc_Response</code> object
-                containing the fault will also be available by calling
-                <code>getLastResponse()</code>.
--->
             </para>
 
             <para>
                 Если для выполнения запроса используется метод
                 <code>doRequest()</code>, то исключение не генерируется. Вместо
-                этого будет возвращен объект <code>Zend_XmlRpc_Response</code>,
+                этого будет возвращен объект <classname>Zend_XmlRpc_Response</classname>,
                 содержащий возвращенную XML-RPC ошибку. Проверить, содержит ли
                 объект ошибку, можно через метод <code>isFault()</code> объекта
-                <code>Zend_XmlRpc_Response</code>.
-<!--
-                When the <code>doRequest()</code> method is used to make the
-                request, it will not throw the exception. Instead, it will
-                return a <code>Zend_XmlRpc_Response</code> object returned
-                will containing the fault. This can be checked with
-                <code>isFault()</code> instance method of
-                <code>Zend_XmlRpc_Response</code>.
--->
+                <classname>Zend_XmlRpc_Response</classname>.
             </para>
         </sect3>
 
     </sect2>
 
     <sect2 id="zend.xmlrpc.client.introspection">
-        <title>Интроспекция сервера<!--Server Introspection--></title>
+        <title>Интроспекция сервера</title>
         <para>
-            Некоторые XML-RPC сервера де-факто поддерживают интроспекцию методов
+            Некоторые XML-RPC сервера поддерживают интроспекцию методов
             под пространством имен <code>system.</code>.
-            <code>Zend_XmlRpc_Client</code> предоставляет специальную поддержку
+            <classname>Zend_XmlRpc_Client</classname> предоставляет специальную поддержку
             для серверов с этой возможностью.
-<!--
-            Some XML-RPC servers support the de facto introspection methods under the XML-RPC
-            <code>system.</code> namespace.  <code>Zend_XmlRpc_Client</code> provides special
-            support for servers with these capabilities.
--->
         </para>
 
         <para>
-            Экземпляр <code>Zend_XmlRpc_Client_ServerIntrospection</code> может
+            Экземпляр <classname>Zend_XmlRpc_Client_ServerIntrospection</classname> может
             быть получен через вызов метода <code>getIntrospector()</code>
-            класса <code>Zend_XmlRpcClient</code>. Далее он может использоваться
+            класса <classname>Zend_XmlRpcClient</classname>. Далее он может использоваться
             для выполнения операций интроспекции на сервере.
-<!--
-            A <code>Zend_XmlRpc_Client_ServerIntrospection</code> instance may be retrieved by calling
-            the <code>getIntrospector()</code> method of <code>Zend_XmlRpcClient</code>.  It can
-            then be used to perform introspection operations on the server.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.client.request-to-response">
-        <title>От запроса к ответу<!--From Request to Response--></title>
+        <title>От запроса к ответу</title>
         <para>
-            Метод <code>call()</code> экземпляра <code>Zend_XmlRpc_Client</code>
+            Метод <code>call()</code> экземпляра <classname>Zend_XmlRpc_Client</classname>
             в процессе выполнения строит объект запроса
-            (<code>Zend_XmlRpc_Request</code>) и передает его другому методу
+            (<classname>Zend_XmlRpc_Request</classname>) и передает его другому методу
             <code>doRequest()</code>, который возвращает объект ответа
-            (<code>Zend_XmlRpc_Response</code>).
-<!--
-            Under the hood, the <code>call()</code> instance method of <code>Zend_XmlRpc_Client</code>
-            builds a request object (<code>Zend_XmlRpc_Request</code>) and sends it to another method,
-            <code>doRequest()</code>, that returns a response object (<code>Zend_XmlRpc_Response</code>).
--->
+            (<classname>Zend_XmlRpc_Response</classname>).
         </para>
 
         <para>
             Метод <code>doRequest()</code> также доступен для непосредственного
             использования:
-<!--
-            The <code>doRequest()</code> method is also available for use directly:
--->
         </para>
 
-        <example>
-            <title>Выполнение запроса<!--Processing Request to Response--></title>
-
-            <programlisting role="php"><![CDATA[<?php
-
-require_once 'Zend/XmlRpc/Client.php';
+        <example id="zend.xmlrpc.client.request-to-response.example-1">
+            <title>Выполнение запроса</title>
 
+            <programlisting role="php"><![CDATA[
 $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
 
 $request = new Zend_XmlRpc_Request();
@@ -707,41 +530,26 @@ $client->doRequest($request);
 
 // $server->getLastRequest() возвращает экземпляр Zend_XmlRpc_Request
 // $server->getLastResponse() возвращает экземпляр Zend_XmlRpc_Response
-
-?>]]></programlisting>
+]]></programlisting>
         </example>
 
         <para>
-            Всегда после того, как через клиента был вызван метод XML-RPC (через
+            После того, как через клиента был вызван метод XML-RPC (через
             методы <code>call()</code>, <code>doRequest()</code> или через
-            прокси-объект сервера), можно получить объекты последнего запроса и
+            прокси-объект сервера), всегда можно получить объекты последнего запроса и
             ответа на него через методы <code>getLastRequest()</code> и
             <code>getLastResponse()</code> соответственно.
-<!--
-            Whenever an XML-RPC method call is made by the client through any
-            means, either the <code>call()</code> method,
-            <code>doRequest()</code> method, or server proxy, the last request
-            object and its resultant response object will always be available
-            through the methods <code>getLastRequest()</code> and
-            <code>getLastResponse()</code> respectively.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.client.http-client">
-        <title>HTTP-клиент и тестирование<!--HTTP Client and Testing--></title>
+        <title>HTTP-клиент и тестирование</title>
 
         <para>
             Ни в одном из предыдущих примеров не указывался HTTP-клиент. В
-            этом случае создается новый экземпляр <code>Zend_Http_Client</code>
+            этом случае создается новый экземпляр <classname>Zend_Http_Client</classname>
             с настройками по умолчанию и автоматически используется
-            клиентом <code>Zend_XmlRpc_Client</code>.
-<!--
-            In all of the prior examples, an HTTP client was never specified.
-            When this is the case, a new instance of
-            <code>Zend_Http_Client</code> will be created with its default
-            options and used by <code>Zend_XmlRpc_Client</code> automatically.
--->
+            клиентом <classname>Zend_XmlRpc_Client</classname>.
         </para>
 
         <para>
@@ -750,27 +558,15 @@ $client->doRequest($request);
             использование HTTP-клиента по умолчанию. Тем не менее, метод
             <code>setHttpClient()</code> позволяет установить HTTP-клиент,
             отличный от принятого по умолчанию.
-<!--
-            The HTTP client can be retrieved at any time with the
-            <code>getHttpClient()</code> method. For most cases, the default
-            HTTP client will be sufficient. However, the
-            <code>setHttpClient()</code> method allows for a different HTTP
-            client instance to be injected.
--->
         </para>
 
         <para>
             <code>setHttpClient()</code> может быть полезен при
             unit-тестировании. При совместном использовании с
-            <code>Zend_Http_Client_Adapter_Test</code> можно имитировать
-            удаленные сервисы для тестирования. За примером того, как можно это
-            реализовать, см. unit-тесты для <code>Zend_XmlRpc_Client</code>.
-<!--
-            The <code>setHttpClient()</code> is particularly useful for unit testing.  When combined
-            with the <code>Zend_Http_Client_Adapter_Test</code>, remote services can be mocked
-            out for testing.  See the unit tests for <code>Zend_XmlRpc_Client</code> for examples
-            of how to do this.
--->
+            <classname>Zend_Http_Client_Adapter_Test</classname> можно имитировать
+            удаленные сервисы для тестирования. В качестве примера реализации
+            рассмотрите unit-тесты для <classname>Zend_XmlRpc_Client</classname>,
+            входящие в поставку Zend Framework.
         </para>
     </sect2>
 

+ 145 - 345
documentation/manual/ru/module_specs/Zend_XmlRpc_Server.xml

@@ -1,3 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Reviewed: no -->
 <sect1 id="zend.xmlrpc.server">
     <title>Zend_XmlRpc_Server</title>
 
@@ -5,153 +7,96 @@
         <title>Введение</title>
 
         <para>
-            Zend_XmlRpc_Server задуман как полнофункциональный XML-RPC сервер,
-            следующий <ulink url="http://www.xmlrpc.com/spec">спецификациям
-            на www.xmlrpc.com</ulink>. Кроме того, он реализует метод
-            <code>system.multicall()</code>, позволяющий добавлять несколько
+            <classname>Zend_XmlRpc_Server</classname> задуман как полнофункциональный XML-RPC сервер,
+            следующий <ulink url="http://www.xmlrpc.com/spec">спецификациям,
+            приведенным на www.xmlrpc.com</ulink>. Кроме того, он реализует метод
+            <code>system.multicall()</code>, позволяющий объединять несколько
             запросов в один.
-<!--
-            Zend_XmlRpc_Server is intended as a fully-featured XML-RPC server,
-            following <ulink url="http://www.xmlrpc.com/spec">the specifications
-            outlined at www.xmlrpc.com</ulink>. Additionally, it implements the
-            system.multicall() method, allowing boxcarring of requests.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.usage">
-        <title>Основы использования<!--Basic Usage--></title>
+        <title>Основы использования</title>
 
         <para>
-            Наиболее простой пример использования:
-<!--
-            An example of the most basic use case:
--->
+            Простой пример использования:
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
-require_once 'My/Service/Class.php';
-
+        <programlisting role="php"><![CDATA[
 $server = new Zend_XmlRpc_Server();
 $server->setClass('My_Service_Class');
-echo $server->handle();]]></programlisting>
+echo $server->handle();
+]]></programlisting>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.structure">
-        <title>Структура сервера<!--Server Structure--></title>
+        <title>Структура сервера</title>
 
         <para>
-            Zend_XmlRpc_Server состоит из множества компонент от собственно
+            <classname>Zend_XmlRpc_Server</classname> состоит из множества компонент от собственно
             сервера до объектов запросов, ответов и сообщений об ошибке.
-<!--
-            Zend_XmlRpc_Server is composed of a variety of components, ranging
-            from the server itself to request, response, and fault objects.
--->
         </para>
 
         <para>
-            Для загрузки Zend_XmlRpc_Server разработчик должен прикрепить классы
+            Для загрузки <classname>Zend_XmlRpc_Server</classname> разработчик должен прикрепить классы
             или функции к серверу через методы <code>setClass()</code> и
             <code>addFunction()</code>.
-<!--
-            To bootstrap Zend_XmlRpc_Server, the developer must attach one or
-            more classes or functions to the server, via the
-            <code>setClass()</code> and <code>addFunction()</code> methods.
--->
         </para>
 
         <para>
-            После этого можно передать объект <code>Zend_XmlRpc_Request</code>
+            После этого можно передать объект <classname>Zend_XmlRpc_Request</classname>
             методу <code>Zend_XmlRpc_Server::handle()</code>; если он не был
             передан, то будет проинциализирован объект
-            <code>Zend_XmlRpc_Request_Http</code>, при этом данные запроса
+            <classname>Zend_XmlRpc_Request_Http</classname>, при этом данные запроса
             берутся из <code>php://input</code>.
-<!--
-            Once done, you may either pass a <code>Zend_XmlRpc_Request</code>
-            object to <code>Zend_XmlRpc_Server::handle()</code>, or it will
-            instantiate a <code>Zend_XmlRpc_Request_Http</code> object if none
-            is provided - thus grabbing the request from
-            <code>php://input</code>.
--->
         </para>
 
         <para>
             Затем <code>Zend_XmlRpc_Server::handle()</code> пытается определить
             подходящий обработчик, основываясь на запрошенном методе. После
-            этого он возвращает основанный на
-            <code>Zend_XmlRpc_Response</code> объект ответа или объект сообщения
-            об ошибке <code>Zend_XmlRpc_Server_Fault</code>. Эти объекты имеют
+            этого он возвращает объект ответа, основанный на
+            <classname>Zend_XmlRpc_Response</classname>, или объект сообщения
+            об ошибке <classname>Zend_XmlRpc_Server_Fault</classname>. Эти объекты имеют
             метод <code>__toString()</code>, который возвращает валидный XML-RPC
             ответ в формате XML, что позволяет выводить эти объекты
-            непосредственно через <code>echo()</code>.
-<!--
-            <code>Zend_XmlRpc_Server::handle()</code> then attempts to
-            dispatch to the appropriate handler based on the method
-            requested. It then returns either a
-            <code>Zend_XmlRpc_Response</code>-based object or a
-            <code>Zend_XmlRpc_Server_Fault</code>object. These objects both have
-            <code>__toString()</code> methods that create valid XML-RPC XML
-            responses, allowing them to be directly echoed.
--->
+            через <code>echo</code>.
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.conventions">
-        <title>Соглашения<!--Conventions--></title>
+        <title>Соглашения</title>
         <para>
-            Zend_XmlRpc_Server позволяет разработчикам прикреплять функции и
-            методы класса, которые называются "диспетчерируемыми XML-RPC
-            методами". Через Zend_Server_Reflection он проводит интроспекцию по
+            <classname>Zend_XmlRpc_Server</classname> позволяет прикреплять функции и
+            методы класса - т.н. доступные для диспетчеризации XML-RPC
+            методы. С помощью <classname>Zend_Server_Reflection</classname> он проводит интроспекцию по
             всем прикрепленным методам, используя docblock'и функций и методов
             для установки текста справки и сигнатур методов.
-<!--
-            Zend_XmlRpc_Server allows the developer to attach functions and
-            class method calls as dispatchable XML-RPC methods. Via
-            Zend_Server_Reflection, it does introspection on all attached
-            methods, using the function and method docblocks to determine the
-            method help text and method signatures.
--->
         </para>
 
         <para>
-            Не обязательно, чтобы типы в XML-RPC один-в-один соответствовали
+            Не обязательно, чтобы типы в XML-RPC в точности соответствовали
             типам в PHP. Тем не менее, для наилучшего результата код пытается
             угадать наиболее подходящий тип, основываясь на значениях
             дескрипторов @param и @return. Некоторые типы в XML-RPC не имеют
-            эквивалентов в PHP и должны указываться в phpdoc. В их список
+            эквивалентов в PHP и должны указываться в PHPDoc. В их список
             входят:
-<!--
-            XML-RPC types do not necessarily map one-to-one to PHP types.
-            However, the code will do its best to guess the appropriate type
-            based on the values listed in @param and @return lines. Some XML-RPC
-            types have no immediate PHP equivalent, however, and should be
-            hinted using the XML-RPC type in the phpdoc. These include:
--->
         </para>
 
         <itemizedlist>
             <listitem>
                 <para>
-                    dateTime.iso8601, дата в формате YYYYMMDDTHH:mm:ss
-<!--
-                    dateTime.iso8601, a string formatted as
-                    YYYYMMDDTHH:mm:ss
--->
+                    dateTime.iso8601 - дата в формате YYYYMMDDTHH:mm:ss
                 </para>
             </listitem>
-            <listitem><para>base64, данные, закодированные по алгоритму base64</para></listitem>
-            <listitem><para>struct, любой ассоциативный массив</para></listitem>
+            <listitem><para>base64 - данные, закодированные по алгоритму base64</para></listitem>
+            <listitem><para>struct - любой ассоциативный массив</para></listitem>
         </itemizedlist>
 
         <para>
             Пример того, как указывается XML-RPC тип
-<!--
-            An example of how to hint follows:
--->
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 /**
 * Это пример функции
 *
@@ -162,19 +107,13 @@ echo $server->handle();]]></programlisting>
 */
 function myFunc($val1, $val2, $val3)
 {
-}]]></programlisting>
+]]></programlisting>
 
         <para>
             PhpDocumentor не проводит валидацию типов, определенных для
             параметров или возвращаемых значений, поэтому это не должно
-            повлиять на вашу документацию по API. Указание типов необходимо,
+            влиять на вашу документацию по API. Указание типов необходимо,
             если сервер проводит валидацию передаваемых методу параметров.
-<!--
-            PhpDocumentor does no validation of the types specified for params
-            or return values, so this will have no impact on your API
-            documentation. Providing the hinting is necessary, however, when the
-            server is validating the parameters provided to the method call.
--->
         </para>
 
         <para>
@@ -183,19 +122,12 @@ function myFunc($val1, $val2, $val3)
             значений; спецификация XML-RPC даже рекомендует, чтобы
             system.methodSignature возвращал массив всех
             возможных сигнатур метода (т.е. все возможные комбинации параметров
-            и возвращаемых значений). Вы можете делать это точно так же, как
-            обычно делаете для PhpDocumentor, используя оператор '|'.
-<!--
-            It is perfectly valid to specify multiple types for both params and
-            return values; the XML-RPC specification even suggests that
-            system.methodSignature should return an array of all possible method
-            signatures (i.e., all possible combinations of param and return
-            values). You may do so just as you normally would with
-            PhpDocumentor, using the '|' operator:
--->
+            и возвращаемых значений). Вы можете делать это в точности так же,
+            как это обычно делается для PhpDocumentor - с использованием
+            оператора '|':
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 /**
 * Это пример функции
 *
@@ -206,37 +138,26 @@ function myFunc($val1, $val2, $val3)
 */
 function myFunc($val1, $val2, $val3)
 {
-}]]></programlisting>
+}
+]]></programlisting>
 
         <para>
-            Тем не менее, следует учесть, что множество сигнатур может сбить с
-            толку разработчиков, использующих данный веб-сервис; иначе говоря,
+            Тем не менее, следует учесть, что обилие сигнатур может сбивать с
+            толку разработчиков, использующих данный веб-сервис. Другими словами,
             следует стремится к тому, чтобы XML-RPC метод имел только одну
             сигнатуру.
-<!--
-            One note, however: allowing multiple signatures can lead to
-            confusion for developers using the services; generally speaking, an
-            XML-RPC method should only have a single signature.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.namespaces">
-        <title>Использование пространства имен<!--Utilizing Namespaces--></title>
+        <title>Использование пространств имен</title>
 
         <para>
-            В XML-RPC есть такое понятие, как пространства имен; по существу,
-            это позволяет группировать методы посредством разделенных точкой
-            пространств имен. Это позволяет предотвратить конфликты имен
+            В XML-RPC есть такое понятие, как пространства имен. Они позволяют
+            группировать методы посредством разделенных точкой
+            имен пространств. Это позволяет предотвратить конфликты имен
             методов, предоставляемых разными классами. Например, обычно XML-RPC
             сервер предоставляет несколько методов в пространстве имен 'system':
-<!--
-            XML-RPC has a concept of namespacing; basically, it allows grouping
-            XML-RPC methods by dot-delimited namespaces. This helps prevent
-            naming collisions between methods served by different classes. As an
-            example, the XML-RPC server is expected to server several methods in
-            the 'system' namespace:
--->
         </para>
 
         <itemizedlist>
@@ -247,11 +168,7 @@ function myFunc($val1, $val2, $val3)
 
         <para>
             В нашем случае они соответствуют методам с теми же именами в
-            Zend_XmlRpc_Server.
-<!--
-            Internally, these map to the methods of the same name in
-            Zend_XmlRpc_Server.
--->
+            <classname>Zend_XmlRpc_Server</classname>.
         </para>
 
         <para>
@@ -259,181 +176,115 @@ function myFunc($val1, $val2, $val3)
             методов, то просто укажите пространство имен в качестве параметра
             при вызове соответствующего метода для прикрепления функции или
             класса:
-<!--
-            If you want to add namespaces to the methods you serve, simply
-            provide a namespace to the appropriate method when attaching a
-            function or class:
--->
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
+        <programlisting role="php"><![CDATA[
 // Все открытые методы в My_Service_Class можно будет вызывать как
 // myservice.имя_метода
 $server->setClass('My_Service_Class', 'myservice');
 
 // Функцию 'somefunc' можно будет вызывать как funcs.somefunc
-$server->addFunction('somefunc', 'funcs');]]></programlisting>
+$server->addFunction('somefunc', 'funcs');
+]]></programlisting>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.request">
-        <title>Специальные объекты запросов<!--Custom Request Objects--></title>
+        <title>Использование своих объектов запросов</title>
 
         <para>
             В большинстве случаев вы можете использовать включенный по умолчанию
-            в Zend_XmlRpc_Server тип запроса – Zend_XmlRpc_Request_Http. Тем не
-            менее, может потребоваться использование XML-RPC через CLI, GUI или
-            другие окружения, журналирование приходящих запросов. Для этого вы
-            можете создавать специальные объекты запроса, которые наследуют от
-            Zend_XmlRpc_Request. Важно помнить при этом, что
-            методы getMethod() и getParams() должны быть реализованы таким
+            в <classname>Zend_XmlRpc_Server</classname> тип запроса –
+            <classname>Zend_XmlRpc_Request_Http</classname>. Тем не
+            менее, может потребоваться использование XML-RPC в окружениях
+            CLI, GUI и т.п., журналирование приходящих запросов. Для этого вы
+            можете создавать свои классы запросов, которые наследуют от
+            <classname>Zend_XmlRpc_Request</classname>. Важно помнить при этом, что
+            методы <code>getMethod()</code> и <code>getParams()</code>
+            должны быть реализованы таким
             образом, чтобы XML-RPC сервер мог получить из них ту информацию,
             которая необходима для обработки запроса.
-<!--
-            Most of the time, you'll simply use the default request type
-            included with Zend_XmlRpc_Server, Zend_XmlRpc_Request_Http. However,
-            there may be times when you need XML-RPC to be available via the CLI,
-            a GUI, or other environment, or want to log incoming requests. To do
-            so, you may create a custom request object that extends
-            Zend_XmlRpc_Request. The most important thing to remember is to
-            ensure that the getMethod() and getParams() methods are implemented
-            so that the XML-RPC server can retrieve that information in order to
-            dispatch the request.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.response">
-        <title>Специальные объекты ответов<!--Custom Responses--></title>
+        <title>Использование своих объектов ответов</title>
 
         <para>
-            Как и в случае объектов запросов, Zend_XmlRpc_Server может
-            возвращать специальные объекты ответов; по умолчанию возвращается
-            объект Zend_XmlRpc_Response_Http, который отправляет соответствующий
-            XML-RPC заголовок <code>Content-Type</code>. Одними из возможных
-            целей использования специальных объектов являются журналирование
-            ответов или отправка ответов обратно на STDOUT.
-<!--
-            Similar to request objects, Zend_XmlRpc_Server can return custom
-            response objects; by default, a Zend_XmlRpc_Response_Http object is
-            returned, which sends an appropriate Content-Type HTTP header for
-            use with XML-RPC. Possible uses of a custom object would be to log
-            responses, or to send responses back to STDOUT.
--->
+            Как и в случае объектов запросов, <classname>Zend_XmlRpc_Server</classname> может
+            возвращать объекты других типов; по умолчанию возвращается
+            объект <classname>Zend_XmlRpc_Response_Http</classname>, который отправляет соответствующий
+            XML-RPC заголовок <code>Content-Type</code>. Целью создания своих
+            типов ответов могут быть возможность журналирования
+            ответов или отправки ответов обратно в STDOUT.
         </para>
 
         <para>
-            Для того чтобы использовать специальный класс ответа, используйте
+            Для того чтобы использовать свой класс ответа, вызывайте
             метод <code>Zend_XmlRpc_Server::setResponseClass()</code> до вызова
             метода <code>handle()</code>.
-<!--
-            To use a custom response class, use
-            Zend_XmlRpc_Server::setResponseClass() prior to calling handle().
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.fault">
-        <title>Обработка исключений через сообщения об ошибке<!--Handling Exceptions via Faults--></title>
+        <title>Обработка исключений через сообщения об ошибке</title>
 
         <para>
-            Zend_XmlRpc_Server отлавливает исключения, сгенерированные
+            <classname>Zend_XmlRpc_Server</classname> отлавливает исключения, сгенерированные
             вызываемым методом и генерирует ответ с сообщением об ошибке сразу,
             как только исключение поймано. Однако по умолчанию сообщение и код
             исключения не используются в ответе с сообщением об ошибке. Это
             сделано намеренно для того, чтобы защитить ваш код, т.к. многие
-            исключения могут предоставлять информацию о коде приложения или
-            среде выполнения, предназначенные разработчику.
-<!--
-            Zend_XmlRpc_Server catches Exceptions generated by a dispatched
-            method, and generates an XML-RPC fault response when such an
-            exception is caught. By default, however, the exception messages and
-            codes are not used in a fault response. This is an intentional
-            decision to protect your code; many exceptions expose more
-            information about the code or environment than a developer would
-            necessarily intend (a prime example includes database abstraction or
-            access layer exceptions).
--->
+            исключения могут выдавать информацию о коде приложения или
+            среде выполнения, обычно предназначенные разработчику.
         </para>
 
         <para>
             Тем не менее, можно включать классы исключений в список разрешенных
-            для отображения в ответах с сообщением об ошибке. Для этого
-            используйте Zend_XmlRpc_Server_Fault::attachFaultException() для
-            включения данного класса исключения в список разрешенных.
-<!--
-            Exception classes can be whitelisted to be used as fault responses,
-            however. To do so, simply utilize
-            Zend_XmlRpc_Server_Fault::attachFaultException() to pass an
-            exception class to whitelist:
--->
+            к отображению в ответах с сообщением об ошибке. Для этого
+            используйте <code>Zend_XmlRpc_Server_Fault::attachFaultException()</code>
+            для включения данного класса исключения в список разрешенных.
         </para>
 
-        <programlisting role="php"><![CDATA[<?php
-Zend_XmlRpc_Server_Fault::attachFaultException('My_Project_Exception');]]></programlisting>
+        <programlisting role="php"><![CDATA[
+Zend_XmlRpc_Server_Fault::attachFaultException('My_Project_Exception');
+]]></programlisting>
 
         <para>
             Если вы используете класс исключения, от которого наследуют другие
             исключения в проекте, то можете cразу включить все "семейство"
-            исключений в список разрешенных. Zend_XmlRpc_Server_Exceptions
+            исключений в список разрешенных. Исключения
+            <classname>Zend_XmlRpc_Server_Exception</classname>
             всегда находится в списке разрешенных исключений для того, чтобы
-            сообщать об определенных внутренних ошибках (вызов несуществующего
+            сообщать об отдельных внутренних ошибках (вызов несуществующего
             метода и т.д.).
-<!--
-            If you utilize an exception class that your other project exceptions
-            inherit, you can then whitelist a whole family of exceptions at a
-            time. Zend_XmlRpc_Server_Exceptions are always whitelisted, to
-            allow reporting specific internal errors (undefined methods, etc.).
--->
         </para>
 
         <para>
             На любое исключение, не включенное в список разрешенных, будет
             генерироваться ответ с кодом ошибки '404' и сообщением 'Unknown
             error'.
-<!--
-            Any exception not specifically whitelisted will generate a fault
-            response with a code of '404' and a message of 'Unknown error'.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.caching">
-        <title>Кэширование определений сервера между запросами<!--Caching Server Definitions Between Requests--></title>
+        <title>Кэширование определений сервера между запросами</title>
         <para>
             Прикрепление большого количества классов к экземпляру XML-RPC
             сервера может отнимать много ресурсов – каждый класс должен
             проверяться с использованием Reflection API (через
-            Zend_Server_Reflection), который создает список всех возможных
+            <classname>Zend_Server_Reflection</classname>), который создает список всех возможных
             сигнатур методов для передачи классу сервера.
-<!--
-            Attaching many classes to an XML-RPC server instance can utilize a
-            lot of resources; each class must introspect using the Reflection
-            API (via Zend_Server_Reflection), which in turn generates a list of
-            all possible method signatures to provide to the server class.
--->
         </para>
         <para>
-            Чтобы сократить потерю производительности, можно использовать
-            Zend_XmlRpc_Server_Cache для кэширования определений сервера между
-            запросами. Если комбинировать его с __autoload(), то это может дать
+            Чтобы снизить ущерб производительности, можно использовать
+            <classname>Zend_XmlRpc_Server_Cache</classname> для кэширования определений сервера между
+            запросами. Если комбинировать его с <code>__autoload()</code>, то это может дать
             значительный прирост производительности.
-<!--
-            To reduce this performance hit somewhat, Zend_XmlRpc_Server_Cache
-            can be used to cache the server definition between requests. When
-            combined with __autoload(), this can greatly increase performance.
--->
         </para>
         <para>
             Пример использования:
-<!--
-            An sample usage follows:
--->
         </para>
-        <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/Loader.php';
-require_once 'Zend/XmlRpc/Server.php';
-require_once 'Zend/XmlRpc/Server/Cache.php';
-
+        <programlisting role="php"><![CDATA[
 function __autoload($class)
 {
     Zend_Loader::loadClass($class);
@@ -447,58 +298,41 @@ if (!Zend_XmlRpc_Server_Cache::get($cacheFile, $server)) {
     require_once 'My/Services/Paste.php';
     require_once 'My/Services/Tape.php';
 
-    $server->setClass('My_Services_Glue', 'glue');
-    $server->setClass('My_Services_Paste', 'paste');
-    $server->setClass('My_Services_Tape', 'tape');
+    $server->setClass('My_Services_Glue', 'glue');   // пространство имен glue
+    $server->setClass('My_Services_Paste', 'paste'); // пространство имен paste
+    $server->setClass('My_Services_Tape', 'tape');   // пространство имен tape
 
     Zend_XmlRpc_Server_Cache::save($cacheFile, $server);
 }
 
-echo $server->handle();]]></programlisting>
+echo $server->handle();
+]]></programlisting>
         <para>
             В этом примере производится попытка получить определение сервера из
             файла xmlrpc.cache, находящегося в той же директории, что и скрипт.
             Если попытка не удалась, то загружаются нужные классы и
             прикрепляются к экземпляру сервера, затем создается новый файл кэша
             с определением сервера.
-<!--
-            The above example attempts to retrieve a server definition from
-            xmlrpc.cache in the same directory as the script. If unsuccessful,
-            it loads the service classes it needs, attaches them to the server
-            instance, and then attempts to create a new cache file with the
-            server definition.
--->
         </para>
     </sect2>
 
     <sect2 id="zend.xmlrpc.server.use">
-        <title>Примеры использования<!--Usage Examples--></title>
+        <title>Примеры использования</title>
         <para>
-            Ниже приведено несколько примеров использования, показывающий полный
-            набор возможных вариантов, доступных разработчикам. Примеры
-            использования построены на основе предоставленных ранее примеров.
-<!--
-            Below are several usage examples, showing the full spectrum of
-            options available to developers. Usage examples will each build
-            on the previous example provided.
--->
+            Здесь приведены несколько примеров использования, демонстрирующих полный
+            набор возможностей, доступных разработчикам. Примеры
+            построены на основе предоставленных ранее примеров.
         </para>
         <sect3 id="zend.xmlrpc.server.use.case1">
-            <title>Основы использования<!--Basic Usage--></title>
+            <title>Основы использования</title>
 
             <para>
                 В примере ниже прикрепляется функция в качестве
-                диспетчерируемого XML-RPC метода и обрабатываются входящие
-                вызовы.
-<!--
-                The example below attaches a function as a dispatchable XML-RPC
-                method and handles incoming calls.
--->
+                доступного для диспетчеризации XML-RPC метода и обрабатываются
+                входящие вызовы.
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
-
+            <programlisting role="php"><![CDATA[
 /**
  * Возвращает сумму MD5 переданного значения
  *
@@ -512,101 +346,84 @@ function md5Value($value)
 
 $server = new Zend_XmlRpc_Server();
 $server->addFunction('md5Value');
-echo $server->handle();]]></programlisting>
+echo $server->handle();
+]]></programlisting>
         </sect3>
 
         <sect3 id="zend.xmlrpc.server.use.case2">
-            <title>Прикрепление класса<!--Attaching a class--></title>
+            <title>Прикрепление класса</title>
 
             <para>
                 Пример ниже иллюстрирует прикрепление открытых методов класса
-                как диспетчерируемых XML-RPC методов.
-<!--
-                The example below illustrates attaching a class' public methods
-                as dispatchable XML-RPC methods.
--->
+                в качестве доступных для диспетчеризации XML-RPC методов.
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
+            <programlisting role="php"><![CDATA[
 require_once 'Services/Comb.php';
 
 $server = new Zend_XmlRpc_Server();
 $server->setClass('Services_Comb');
-echo $server->handle();]]></programlisting>
+echo $server->handle();
+]]></programlisting>
         </sect3>
 
         <sect3 id="zend.xmlrpc.server.use.case3">
-            <title>Прикрепление нескольких классов с использованием пространств имен<!--Attaching several classes using namespaces--></title>
+            <title>Прикрепление нескольких классов с использованием пространств имен</title>
 
             <para>
                 Пример ниже демонстрирует прикрепление нескольких классов,
                 каждый со своим пространством имен.
-<!--
-                The example below illustrates attaching several classes, each
-                with their own namespace.
--->
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
+            <programlisting role="php"><![CDATA[
 require_once 'Services/Comb.php';
 require_once 'Services/Brush.php';
 require_once 'Services/Pick.php';
 
 $server = new Zend_XmlRpc_Server();
-$server->setClass('Services_Comb', 'comb');
-$server->setClass('Services_Brush', 'brush');
-$server->setClass('Services_Pick', 'pick');
-echo $server->handle();]]></programlisting>
+$server->setClass('Services_Comb', 'comb');   // методы, вызываемые как comb.*
+$server->setClass('Services_Brush', 'brush'); // методы, вызываемые как brush.*
+$server->setClass('Services_Pick', 'pick');   // методы, вызываемые как pick.*
+echo $server->handle();
+]]></programlisting>
         </sect3>
 
         <sect3 id="zend.xmlrpc.server.use.case4">
-            <title>Указание исключений как используемых для ответов с сообщением об ошибке<!--Specifying exceptions to use as valid fault responses--></title>
+            <title>Указание исключений в качестве используемых для ответов с сообщением об ошибке</title>
 
             <para>
-                Пример ниже позволяет любым наследующим от Services_Exception
+                Пример ниже позволяет любым наследующим от
+                <code>Services_Exception</code>
                 классам предоставлять свои коды и сообщения для подстановки в
                 ответ с сообщением об ошибке.
-<!--
-                The example below allows any Services_Exception-derived class to
-                report its code and message in the fault response.
--->
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
-require_once 'Zend/XmlRpc/Server/Fault.php';
+            <programlisting role="php"><![CDATA[
 require_once 'Services/Exception.php';
 require_once 'Services/Comb.php';
 require_once 'Services/Brush.php';
 require_once 'Services/Pick.php';
 
-// Включение Services_Exceptions в список разрешенных исключений
+// Allow Services_Exceptions to report as fault responses
 Zend_XmlRpc_Server_Fault::attachFaultException('Services_Exception');
 
 $server = new Zend_XmlRpc_Server();
-$server->setClass('Services_Comb', 'comb');
-$server->setClass('Services_Brush', 'brush');
-$server->setClass('Services_Pick', 'pick');
-echo $server->handle();]]></programlisting>
+$server->setClass('Services_Comb', 'comb');   // методы, вызываемые как comb.*
+$server->setClass('Services_Brush', 'brush'); // методы, вызываемые как brush.*
+$server->setClass('Services_Pick', 'pick');   // методы, вызываемые как pick.*
+echo $server->handle();
+]]></programlisting>
         </sect3>
 
         <sect3 id="zend.xmlrpc.server.use.case5">
-            <title>Использование специальных объектов запроса<!--Utilizing a custom request object--></title>
+            <title>Использование своих объектов запроса</title>
 
             <para>
                 В примере ниже инстанцируется специальный объект запроса и
                 передается серверу для обработки.
-<!--
-                The example below instantiates a custom request object and
-                passes it to the server to handle.
--->
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
-require_once 'Zend/XmlRpc/Server/Fault.php';
+            <programlisting role="php"><![CDATA[
 require_once 'Services/Request.php';
 require_once 'Services/Exception.php';
 require_once 'Services/Comb.php';
@@ -617,31 +434,26 @@ require_once 'Services/Pick.php';
 Zend_XmlRpc_Server_Fault::attachFaultException('Services_Exception');
 
 $server = new Zend_XmlRpc_Server();
-$server->setClass('Services_Comb', 'comb');
-$server->setClass('Services_Brush', 'brush');
-$server->setClass('Services_Pick', 'pick');
+$server->setClass('Services_Comb', 'comb');   // методы, вызываемые как comb.*
+$server->setClass('Services_Brush', 'brush'); // методы, вызываемые как brush.*
+$server->setClass('Services_Pick', 'pick');   // методы, вызываемые как pick.*
 
 // Создание объекта запроса
 $request = new Services_Request();
 
-echo $server->handle($request);]]></programlisting>
+echo $server->handle($request);
+]]></programlisting>
         </sect3>
 
         <sect3 id="zend.xmlrpc.server.use.case6">
-            <title>Использование специальных объектов ответа<!--Utilizing a custom response object--></title>
+            <title>Использование своих объектов ответа</title>
 
             <para>
                 Пример ниже демонстрирует указание специального класса ответа
                 для возвращаемого ответа.
-<!--
-                The example below illustrates specifying a custom response class
-                for the returned response.
--->
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
-require_once 'Zend/XmlRpc/Server/Fault.php';
+            <programlisting role="php"><![CDATA[
 require_once 'Services/Request.php';
 require_once 'Services/Response.php';
 require_once 'Services/Exception.php';
@@ -653,42 +465,29 @@ require_once 'Services/Pick.php';
 Zend_XmlRpc_Server_Fault::attachFaultException('Services_Exception');
 
 $server = new Zend_XmlRpc_Server();
-$server->setClass('Services_Comb', 'comb');
-$server->setClass('Services_Brush', 'brush');
-$server->setClass('Services_Pick', 'pick');
+$server->setClass('Services_Comb', 'comb');   // методы, вызываемые как comb.*
+$server->setClass('Services_Brush', 'brush'); // методы, вызываемые как brush.*
+$server->setClass('Services_Pick', 'pick');   // методы, вызываемые как pick.*
 
 // Создание объекта запроса
 $request = new Services_Request();
 
-// Должен использоваться специальный класс ответа
+// Установка другого класса ответа
 $server->setResponseClass('Services_Response');
 
-echo $server->handle($request);]]></programlisting>
+echo $server->handle($request);
+]]></programlisting>
         </sect3>
 
         <sect3 id="zend.xmlrpc.server.use.case7">
-            <title>Кэширование определений сервера между запросами<!--Cache server definitions between requests--></title>
+            <title>Кэширование определений сервера между запросами</title>
 
             <para>
                 Пример ниже демонстрирует кэширование определений сервера между
                 запросами.
-<!--
-                The example below illustrates caching server definitions
-                between requests.
--->
             </para>
 
-            <programlisting role="php"><![CDATA[<?php
-require_once 'Zend/XmlRpc/Server.php';
-require_once 'Zend/XmlRpc/Server/Fault.php';
-require_once 'Zend/XmlRpc/Server/Cache.php';
-require_once 'Services/Request.php';
-require_once 'Services/Response.php';
-require_once 'Services/Exception.php';
-require_once 'Services/Comb.php';
-require_once 'Services/Brush.php';
-require_once 'Services/Pick.php';
-
+            <programlisting role="php"><![CDATA[
 // Указание файла кэша
 $cacheFile = dirname(__FILE__) . '/xmlrpc.cache';
 
@@ -699,21 +498,22 @@ $server = new Zend_XmlRpc_Server();
 
 // Попытка получить определение сервера из кэша
 if (!Zend_XmlRpc_Server_Cache::get($cacheFile, $server)) {
-    $server->setClass('Services_Comb', 'comb');
-    $server->setClass('Services_Brush', 'brush');
-    $server->setClass('Services_Pick', 'pick');
+    $server->setClass('Services_Comb', 'comb');   // методы, вызываемые как comb.*
+    $server->setClass('Services_Brush', 'brush'); // методы, вызываемые как brush.*
+    $server->setClass('Services_Pick', 'pick');   // методы, вызываемые как pick.*
 
     // Сохранение в кэш
-    Zend_XmlRpc_Server_Cache::save($cacheFile, $server));
+    Zend_XmlRpc_Server_Cache::save($cacheFile, $server);
 }
 
 // Создание объекта запроса
 $request = new Services_Request();
 
-// Должен использоваться специальный класс ответа
+// Установка другого класса ответа
 $server->setResponseClass('Services_Response');
 
-echo $server->handle($request);]]></programlisting>
+echo $server->handle($request);
+]]></programlisting>
         </sect3>
     </sect2>
 </sect1>