[doc] gettext printf_conversion mprintf msprintf mfprintf pages updated & fixed
[scilab.git] / scilab / modules / localization / help / ru_RU / gettext.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) 2007 - INRIA - Allan CORNET
5  * Copyright (C) 2007 - INRIA - Sylvestre LEDRU
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  * Copyright (C) 2018 - 2021 - Samuel GOUGEON
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  -->
17 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
18         xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
19         xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
20         xml:lang="ru" xml:id="gettext">
21     <refnamediv>
22         <refname>gettext</refname>
23         <refpurpose>индексирует или/и переводит некоторые индексированные сообщения на английском языке</refpurpose>
24     </refnamediv>
25     <refnamediv xml:id="_">
26         <refname>_</refname>
27         <refpurpose>
28             Псевдоним gettext().
29         </refpurpose>
30     </refnamediv>
31     <refsynopsisdiv>
32         <title>Синтаксис</title>
33         <synopsis>
34             gettext("The literal reference message")
35             gettext(["item #1" ; "item#2"])
36             translated = gettext("The literal reference message")
37             translated = gettext(["item #1" ; "item#2"])
38             translated = gettext(msgid)
39             .. gettext(domain, ..)
40         </synopsis>
41     </refsynopsisdiv>
42     <refsection>
43         <title>Аргументы</title>
44         <variablelist>
45             <varlistentry>
46                 <term>"The literal reference message"</term>
47                 <listitem>
48                     <para>
49                         Единый с учетом регистра символьный текст сообщения на английском языке, которое
50                         требуется индексировать или/и перевести. Может быть также
51                         указан столбец символьных текстов явно разделённых точкой с запятой.
52                         Messages can include some
53                         <link linkend="printf_conversion">C-like placeholders</link> starting with "%".
54                     </para>
55                     <warning>
56                         Могут использоваться только стандартные символы ASCII.
57                         Любые иные расширенные символы ASCII или UTF-8 приведут к ошибке
58                         в работе <literal>gettext()</literal>.
59                     </warning>
60                     <para/>
61                 </listitem>
62             </varlistentry>
63             <varlistentry>
64                 <term>msgid</term>
65                 <listitem>
66                     <para>
67                         один или массив идентификаторов сообщений с учетом регистра (на английском)
68                         для перевода, в переменной.
69                     </para>
70                     <warning>
71                         Могут использоваться только стандартные символы ASCII.
72                     </warning>
73                     <para/>
74                 </listitem>
75             </varlistentry>
76             <varlistentry>
77                 <term>translated</term>
78                 <listitem>
79                     <para>
80                         Сообщения на входе переводятся на текущий язык сессии Scilab. Если
81                         для входного сообщения не доступна версия перевода, то возвращается входная версия
82                         на английском. Входные и выходные массивы имеют одинаковые размеры.
83                     </para>
84                     <note>
85                         Эти сообщения определены в файлах ./locales/*.po. Они могут включать в себя
86                         расширенные символы ASCII или UTF-8.
87                     </note>
88                     <para/>
89                 </listitem>
90             </varlistentry>
91             <varlistentry>
92                 <term>domain</term>
93                 <listitem>
94                     <para>
95                         слово или текст: имя домена. При локализации внешнего модуля
96                         <varname>domain</varname> обычно может быть установлен на
97                         техническое имя модуля.
98                     </para>
99                     <para>
100                         <varname>domain</varname> может быть как литералом, так и
101                         переменной. Он нечувствителен к регистру.
102                     </para>
103                     <para>
104                         <varname>domain</varname> требуется в <literal>tbx_generate_pofile()</literal>
105                         для того, чтобы сделать индексированную литеральную строку
106                         <literal>msgid</literal> (этап сбора. См. ниже.).
107                     </para>
108                     <para>
109                         Когда <literal>gettext(domain, msgid)</literal> используется для получения
110                         переведённой версии, то <varname>domain</varname>
111                         используется для получения пути к директории, где хранятся
112                         переводы,  как это заранее записано с помощью
113                         <literal>addlocalizationdomain(domain, path)</literal>.
114                     </para>
115                 </listitem>
116             </varlistentry>
117         </variablelist>
118     </refsection>
119     <refsection>
120         <title>Описание</title>
121         <refsect3>
122         <title>Сбор сообщений и общая обработка</title>
123         <para>
124             <emphasis role="italic">gettext</emphasis> является свободным и открытым
125             внешним приложением, поставляемым вместе с Scilab для поддержки
126             мультилингвизма для сообщений. Эта поддержка состоит из 4 главных этапов:
127             <orderedlist>
128                 <listitem>
129                     <para>
130                         <emphasis role="bold">Сбор</emphasis> сообщений внутри кода и
131                         <emphasis role="bold">индексирование</emphasis> их для перевода.
132                         Для внешнего модуля это явным образом выполняется с помощью
133                         внешней бинарной программы <literal>xgettext</literal>, которая
134                         является частью внешнего приложения <literal>gettext</literal>,
135                         и которая вызывается Scilab-функцией <link linkend="tbx_generate_pofile">tbx_generate_pofile</link>.
136                         В Scilab также можно использовать <literal>tbx_build_localization(..)</literal>
137                         или <literal>tbx_make . localization</literal>, которые обе вызывают
138                         <literal>tbx_generate_pofile(..)</literal>.
139                     </para>
140                     <para>
141                         Каждое собранное сообщение рассматривается в качестве идентификатора
142                         (msgid) для всех его последующих переводов. В Scilab опорным языком
143                         для идентификаторов является <emphasis role="italic">английский</emphasis>.
144                         Следовательно идентификаторы сообщений для индексации должны
145                         быть записаны на английском.
146                     </para>
147                     <para>
148                         В качестве входного аргумента <literal>gettext</literal> собираются
149                         только <emphasis role="bold">одиночные литеральные сообщения и сообщения
150                         одним куском</emphasis>. Следовательно следующие синтаксисы и случае не
151                         будут индексировать рассматриваемые сообщения и в дальнейшем не будут
152                         доступны версии перевода:
153                     </para>
154                     <para>
155                         <table>
156                             <tr>
157                                 <th>#</th><th>Синтаксис</th><th>Статус</th>
158                                 <th align="left">Результаты сбора</th>
159                             </tr>
160                             <tr valign="top">
161                                 <th>1</th>
162                                 <td style="white-space:nowrap">
163                                     <literal>gettext("To be translated")</literal>
164                                 </td>
165                                 <td>OK</td>
166                                 <td>стандартный синтаксис</td>
167                             </tr>
168                             <tr valign="top">
169                                 <th>2</th>
170                                 <td style="white-space:pre"><screen><![CDATA[
171 msg = "To be translated";
172 gettext(msg)]]></screen>
173                                 </td>
174                                 <td>NOK</td>
175                                 <td>
176                                     Текст внутри переменной. Он не символьный. Он не будет
177                                     индексирован. Тем не менее, этот синтаксис будет работать
178                                     для  <emphasis>получения</emphasis> версии перевода,
179                                     <emphasis>в случае, если сообщение было собрано где-нибудь
180                                     правильным образом</emphasis>.
181                                 </td>
182                             </tr>
183                             <tr valign="top">
184                                 <th>3</th>
185                                 <td style="white-space:nowrap">
186                                     <literal>gettext("To be" + " translated")</literal>
187                                 </td>
188                                 <td>NOK</td>
189                                 <td>
190                                     "To be" и " translated" индексируются как 2 отдельных <literal>msgid</literal>.
191                                     Тогда, следовательно, конкатенированного <literal>msgid</literal>
192                                     "To be translated" не существует, получение его перевода не удастся.
193                                 </td>
194                             </tr>
195                             <tr valign="top">
196                                 <th>4</th>
197                                 <td style="white-space:pre"><screen><![CDATA[
198 gettext("To be" + ..
199         " translated")]]></screen>
200                                 </td>
201                                 <td>NOK</td>
202                                 <td>Также как и #3</td>
203                             </tr>
204                             <tr valign="top">
205                                 <th>5</th>
206                                 <td style="white-space:nowrap">
207                                     <literal>gettext(["item#1", "item#2"])</literal>
208                                 </td>
209                                 <td>NOK</td>
210                                 <td>Только "item#1" собирается. "item#2" игнорируется.</td>
211                             </tr>
212                             <tr valign="top">
213                                 <th>6</th>
214                                 <td style="white-space:nowrap">
215                                     <literal>gettext(["item#1"  "item#2"])</literal>
216                                 </td>
217                                 <td>NOK</td>
218                                 <td>
219                                     "item#1item#2" индексируется. Тогда, поскольку "item#1" и
220                                     "item#2" неизвестные отдельные <literal>msgid</literal>, то
221                                     получение их соответствующего перевода не удастся.
222                                 </td>
223                             </tr>
224                             <tr valign="top">
225                                 <th>7</th>
226                                 <td style="white-space:pre"><screen><![CDATA[
227 gettext(["item#1"
228          "item#2"])]]></screen>
229                                 </td>
230                                 <td>NOK</td>
231                                 <td>Также как и #6</td>
232                             </tr>
233                             <tr valign="top">
234                                 <th>8</th>
235                                 <td style="white-space:nowrap">
236                                     <literal>gettext(["item#1" ; "item#2"])</literal>
237                                 </td>
238                                 <td>OK</td>
239                                 <td>"item#1" и "item#2" индексируются в качестве отдельных <literal>msgid</literal>.</td>
240                             </tr>
241                             <tr valign="top">
242                                 <th>9</th>
243                                 <td style="white-space:pre"><screen><![CDATA[
244 gettext(["item#1" ;
245          "item#2"])]]></screen>
246                                 </td>
247                                 <td>OK</td>
248                                 <td>
249                                     Также как и #8. Обратите внимание на точку с запятой. Без неё это будет случай ошибки #7.
250                                 </td>
251                             </tr>
252                         </table>
253                     </para>
254                     <important>
255                         Для внешнего модуля
256                         <link linkend="tbx_generate_pofile">tbx_generate_pofile()</link>
257                         собирает только то, что встречает <literal>gettext</literal> с указанием
258                         домена <varname>domain</varname>. Он игнорирует любой вызов
259                         <literal>gettext</literal> только с одним входным аргументом.
260                         <para>
261                             Сбору не нужно предварительно указывать домен
262                             <varname>domain</varname> в <literal>addlocalizationdomain()</literal>
263                         </para>
264                     </important>
265                     <para/>
266                 </listitem>
267                 <listitem>
268                     <para>
269                         Все индексированные тексты затем переводятся автором кода или
270                         помощниками. В любом случае кем-то из людей.
271                         Хорошие инструменты перевода также доступны онлайн.
272                     </para>
273                     <para/>
274                 </listitem>
275                 <listitem>
276                     <para>
277                         Все переведённые версии собираются таким образом, что
278                         <literal>gettext(..)</literal> становится эффективным для получения
279                         версии на текущем языке сессии. Это сделано запуском
280                         <literal>tbx_generate_pofile()</literal> в другой раз.
281                     </para>
282                     <para/>
283                 </listitem>
284                 <listitem>
285                     <para>
286                         Наконец, некоторые вызовы, такие как <literal>gettext(message)</literal>
287                         или <literal>gettext("The message content")</literal>, используются
288                         для получения и выдачи переведённой версии.
289                     </para>
290                     <para>
291                         Когда сообщение не является естественным для Scilab (например, оно
292                         специфично для внешнего модуля), домен <varname>domain</varname> где
293                         сообщения и его переводы могут быть найдены, должен быть определён,
294                         как в <literal>gettext(domain, message)</literal>
295                         или <literal>gettext(domain, "The message content")</literal>.
296                         В это случае <literal>addlocalizationdomain(domain, path)</literal>
297                         должен быть запущен первым для того, чтобы указать Scilab директорию,
298                         в которой хранятся переведённые сообщения указанного домена
299                         <varname>domain</varname>.
300                     </para>
301                 </listitem>
302             </orderedlist>
303         </para>
304         <para>
305             Чаще всего сообщения указываются для сбора и используются для получения их
306             переведённых версий через одинаковый вызов <literal>gettext("The literal message")</literal>.
307             Однако, это не обязательно. Следовательно, кусок кода, такой как
308             <literal>if %F, gettext("The literal message"), end</literal> никогда не
309             будет исполнен вызов <literal>gettext</literal>, но тем не менее имеет
310             смысл: оно здесь только для того, чтобы сделать сообщение видимым для
311             сканера/сборщика <literal>xgettext</literal>. Тогда где-то ещё в коде
312             можно использовать
313             <literal>msg = "The literal message"; gettext(msg)</literal> для возврата
314             переведённой версии.
315         </para>
316         <para>
317             Также многократное использование одного и того же литерального вызова
318             <literal>gettext("The literal message")</literal> не будет редким, например,
319             для получения перевода в нескольких файлах. В этом случае сборщик
320             <literal>xgettext</literal> будет собирать сообщение только один раз,
321             и одинаковый перевод будет получен во всех вызовах.
322         </para>
323         <warning>
324             Ограничения: Нет способа перевести сообщение
325             <itemizedlist>
326                 <listitem>
327                     <para>
328                         на языке, отличном от языка текущей сессии. Если это действительно
329                         требуется, то язык сессии следует временно переключить на желаемый
330                         язык, затем вызвать <literal>gettext()</literal>, и, наконец,
331                         восстановить язык сессии.
332                     </para>
333                 </listitem>
334                 <listitem>
335                     <para>
336                         из переведённой версии, а не из идентификатора сообщения на английском.
337                     </para>
338                 </listitem>
339             </itemizedlist>
340         </warning>
341         </refsect3>
342         <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
343         <refsect3>
344             <title>msgid сообщения</title>
345             <para>
346                 Для корректной обработки сообщения на английском должны соответствовать
347                 нескольким правилам:
348                 <itemizedlist>
349                     <listitem>
350                         <para>
351                             Идентификаторы сообщений не чувствительны к регистру.
352                         </para>
353                     </listitem>
354                     <listitem>
355                         <para>
356                             Литеральные собираемые сообщения могут быть разделены
357                             одиночными или двойными кавычками.
358                         </para>
359                         <warning>
360                             Когда <literal>gettext()</literal> или <literal>_()</literal>
361                             используется в XML или XSL файлах, таких, как файлы настроек
362                             внешнего модуля, литеральная строка домена и литеральный
363                             идентификатор сообщения более не должны быть разделены.
364                             <para/>
365                             Например, <literal>_(my_domain, My message)</literal>
366                             будет использоваться вместо <literal>_("my_domain", "My message")</literal>.
367                             <para>
368                                 К тому же, пробелы до и после идентификатора сообщений тогда
369                                 никогда не будут приниматься во внимание и никогда не будет
370                                 принадлежать сообщению. Например, фактический идентификатор
371                                 сообщения, соответствующий
372                                 <literal>_(my_domain, My message:  )</literal> это
373                                 <literal>"My message:"</literal>, а не
374                                 <literal>" My message:  "</literal>.
375                             </para>
376                         </warning>
377                     </listitem>
378                     <listitem>
379                         <para>
380                         Двойные кавычки следует избегать внутри тела сообщения. Пожалуйста,
381                         используйте одинарные кавычки.
382                         </para>
383                     </listitem>
384                     <listitem>
385                         <para>
386                         Внутренние эскейп-последовательности, такие как "\t", "\n" и т.д.,
387                         не интерпретируются ни сканером <literal>xgettext</literal> ни функцией
388                         <literal>gettext</literal>. Они собираются и сохраняются как есть в сообщениях.
389                         </para>
390                     </listitem>
391                     <listitem>
392                         <para>
393                             Некоторые шаблонные сообщения могут часто включать в себя некоторые C-подобные
394                             директивы "%" с целью замены некоторыми входными данными через <literal>msprintf()</literal>
395                             во время запуска. Например,
396                             <literal>msprintf("Hi %s, could you come at %s today?", "John", "12:30")</literal>
397                             вернёт <literal>"Hi John, could you come at 12:30 today?"</literal>.
398                         </para>
399                     </listitem>
400                 </itemizedlist>
401             </para>
402         </refsect3>
403         <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
404         <refsect3>
405             <title>msgstr translated messages</title>
406             <para>
407                 This section will be more useful for translaters than for actual users.
408             </para>
409             <para>
410                 When an english msgid message includes some C-like placeholders,
411                 this always means that in the code the <varname>translated</varname> message
412                 is processed with msprintf() to replace placeholders with actual values.
413                 Hence, <emphasis>the order and type of placeholders indicate the order and
414                 types of actual input values when calling msprintf</emphasis>.
415                 </para>
416                 <para>
417                 This is of first importance for translaters, when writing the corresponding
418                 <varname>translated</varname> message:
419                 <itemizedlist>
420                     <listitem>
421                         If placeholders are not numbered: they must be in the same order and
422                         types in the <varname>translated</varname> <literal>msgstr</literal>
423                         message than in the <varname>msgid</varname> message. Example (english to french):
424                         <screen>
425 msgid  "%s is %d year old.\n"
426 msgstr "%s a %d ans.\n"
427 // first %s (a string), second %d (a decimal number), in both strings.
428
429 Then, from a Scilab session set to french, we will get
430 gettext("%s is %d year old.\n") // => "%s a %d ans.\n"
431 // and                                     first v      v second
432 t = msprintf(gettext("%s is %d year old.\n"), "Peter", 18)
433 // => "Peter a 18 ans."
434 </screen>
435                     </listitem>
436                     <listitem>
437                         <para>
438                             Otherwise, <emphasis>All</emphasis> placeholders must be numbered in the
439                             <varname>translated</varname> message. Each numbered placeholder can
440                                                         be used only once in the format (Scilab limitation).
441                             Example (english to japanese):
442                             <screen>
443 msgid "%s: Wrong number of input argument: %d to %d expected.\n"
444 msgstr "%1$s: 入力引数で不正な数: %3$d への %2$d を想定します。\n"
445
446 Then,
447 msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"), "myFun", 2, 5)
448
449 will return in a Scilab session set to english
450 "myFun: Wrong number of input argument: 2 to 5 expected."
451
452 while, in a Scilab session set to japanese
453 "myFun: 入力引数で不正な数: 5 への 2 を想定します。"
454 </screen>
455                         </para>
456                     </listitem>
457                 </itemizedlist>
458             </para>
459         </refsect3>
460     </refsection>
461     <refsection>
462         <title>Примеры</title>
463         <programlisting role="example"><![CDATA[
464 setlanguage("fr");
465
466 // Идентификаторы сообщений чувствительны к регистру:
467 // "monday" не является индексируемым msgid, в отличие от "Monday":
468 gettext(["monday" ; "Monday"])
469
470 //_() является псевдонимом gettext():
471 _("Sunday")
472
473 // В Scilab идентификаторы сообщений английские:
474 setlanguage("ru");
475 _("Dimanche")       // Французская версия не может использоваться в качестве msgid
476 _("Sunday")
477  ]]></programlisting>
478     <screen><![CDATA[
479 --> gettext(["monday" ; "Monday"])
480  ans  =
481 !monday  !
482 !Lundi   !
483
484 --> _("Sunday")
485  ans  =
486  Dimanche
487
488 --> setlanguage("ru");
489 --> _("Dimanche")
490  ans  =
491  Dimanche
492
493 --> _("Sunday")
494  ans  =
495  Воскресенье
496 ]]></screen>
497     <para>
498         Использование домена: Здесь "tbx" это предопределённый домен, используемый для
499         проверки возможности перевода:
500     </para>
501         <programlisting role="example"><![CDATA[
502 setlanguage("fr");
503 msg = "%s: something not in Scilab.\n";  // неизвестный в главном домене для Scilab:
504 gettext(msg)          // поэтому он выдаётся как есть.
505
506 //  Если мы используем домен без предварительного его декларирования, то
507 //  Scilab не знает ещё где найти перевод:
508 gettext("tbx", msg)   // входное сообщение возвращается как есть.
509
510 // Теперь задекларируем домен:
511 addlocalizationdomain("tbx", "SCI/modules/localization/tests/unit_tests/locale");
512 gettext("tbx", msg)   // теперь работает
513
514 // Ответом является шутка: здесь она остаётся на английском (хотя ожидалась на французском).
515 // Дело в том, что она была установлена как французский перевод входного msgid.
516
517 // Тот же msgid может использоваться в качестве идентификатора, естественного для Scilab с его переводами,
518 // и в одном или в нескольких доменах с другими переводами:
519 msg = "%s: No more memory.\n";
520 [_(msg) ; _("tbx", msg)]
521  ]]></programlisting>
522     <screen><![CDATA[
523 --> msg = "%s: something not in Scilab.\n"; // неизвестный в главном домене для Scilab:
524 --> gettext(msg)
525  ans  =
526  %s: something not in Scilab.\n
527
528 --> //  Scilab не знает ещё где найти перевод:
529 --> gettext("tbx", msg)
530  ans  =
531  %s: something not in Scilab.\n
532
533 --> // Теперь задекларируем домен:
534 --> addlocalizationdomain("tbx", "SCI/modules/localization/tests/unit_tests/locale");
535 --> gettext("tbx", msg)   // теперь работает
536  ans  =
537  %s : it is true, that is not in Scilab.\n
538
539 --> msg = "%s: No more memory.\n";
540 --> [_(msg) ; _("tbx", msg)]
541  ans  =
542 !%s : Plus de mémoire disponible.\n    !
543 !%s : Overwrite Scilab translation.\n  !
544 ]]></screen>
545     <para/>
546     <para>
547         Messages with numbered C-like placeholders:
548     </para>
549         <programlisting role="example"><![CDATA[
550 in = getlanguage();
551 msg = "%s: Unknown value %s for %s option"; // has already some translations
552 setlanguage("en");
553 t = gettext(msg)
554 msprintf(t, "setdiff", "''f''", "''direction''")
555
556 setlanguage("ja");
557 t = gettext(msg)
558 msprintf(t, "setdiff", "''f''", "''direction''")
559
560 setlanguage(in);
561  ]]></programlisting>
562     <screen><![CDATA[
563 --> setlanguage("en");
564 --> t = gettext(msg)
565  t  =
566   "%s: Unknown value %s for %s option"
567
568 --> msprintf(t, "setdiff", "''f''", "''direction''")
569  ans  =
570   "setdiff: Unknown value 'f' for 'direction' option"
571
572
573 --> setlanguage("ja");
574 --> t = gettext(msg)
575  t  =
576   "%1$s: %3$s オプション の未知の値 %2$s"
577
578 --> msprintf(t, "setdiff", "''f''", "''direction''")
579  ans  =
580   "setdiff: 'direction' オプション の未知の値 'f'"
581 ]]></screen>
582     </refsection>
583     <refsection role="see also">
584         <title>Смотрите также</title>
585         <simplelist type="inline">
586             <member>
587                 <link linkend="msprintf">msprintf</link>
588             </member>
589             <member>
590                 <link linkend="setlanguage">setlanguage</link>
591             </member>
592             <member>
593                 <link linkend="addlocalizationdomain">addlocalizationdomain</link>
594             </member>
595             <member>
596                 <link linkend="tbx_generate_pofile">tbx_generate_pofile</link>
597             </member>
598             <member>
599                 <link linkend="tbx_make">tbx_make . localization</link>
600             </member>
601             <member>
602                 <link linkend="tbx_build_localization">tbx_build_localization</link>
603             </member>
604             <member>
605                 <ulink url="https://www.gnu.org/software/gettext/">GNU gettext website</ulink>
606             </member>
607         </simplelist>
608     </refsection>
609     <refsection>
610         <title>История</title>
611         <revhistory>
612             <revision>
613                 <revnumber>5.5.0</revnumber>
614                 <revdescription>Добавлено управление доменом.</revdescription>
615             </revision>
616             <revision>
617                 <revnumber>6.1.0</revnumber>
618                 <revdescription>
619                     C-like placeholders in messages can now be numbered.
620                 </revdescription>
621             </revision>
622         </revhistory>
623     </refsection>
624 </refentry>