1#!/usr/bin/perl
2#
3# by Sergei Butakov <sergei@bslos.com> (2011-05-1x - 2011-05-2x for V3.2.1)
4#
5#
6#   This program is free software: you can redistribute it and/or modify
7#   it under the terms of the GNU General Public License as published by
8#   the Free Software Foundation, either version 3 of the License, or
9#   (at your option) any later version.
10#
11#   This program is distributed in the hope that it will be useful,
12#   but WITHOUT ANY WARRANTY; without even the implied warranty of
13#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14#   GNU General Public License for more details.
15#
16#   You should have received a copy of the GNU General Public License
17#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18#
19
20use utf8;
21# --------------------------------
22
23$Lang{Start_Archive} = "Начать Архивирование";
24$Lang{Stop_Dequeue_Archive} = "Остановить/Убрать из Очереди";
25$Lang{Start_Full_Backup} = "Начать Полн. Копирование";
26$Lang{Start_Incr_Backup} = "Начать Инкр. Копирование";
27$Lang{Stop_Dequeue_Backup} = "Остановить/Убрать из Очереди";
28$Lang{Restore} = "Восстановить";
29
30$Lang{Type_full} = "полн.";
31$Lang{Type_incr} = "инкр.";
32
33# -----
34
35$Lang{Only_privileged_users_can_view_admin_options} = "Only privileged users can view admin options.";
36$Lang{H_Admin_Options} = "BackupPC Server: Admin Options";
37$Lang{Admin_Options} = "Администрирование";
38$Lang{Admin_Options_Page} = <<EOF;
39\${h1(qq{$Lang{Admin_Options}})}
40<br>
41\${h2("Управление Сервером")}
42<form name="ReloadForm" action="\$MyURL" method="get">
43<input type="hidden" name="action" value="">
44<table class="tableStnd">
45  <tr><td>Перезагрузить настройки сервера:<td><input type="button" value="Перезагрузить"
46     onClick="document.ReloadForm.action.value='Reload';
47              document.ReloadForm.submit();">
48</table>
49</form>
50<!--
51\${h2("Server Configuration")}
52<ul>
53  <li><i>Other options can go here... e.g.,</i>
54  <li>Edit server configuration
55</ul>
56-->
57EOF
58
59$Lang{Unable_to_connect_to_BackupPC_server} = "Не могу подключиться к серверу BackupPC";
60$Lang{Unable_to_connect_to_BackupPC_server_error_message} = <<EOF;
61This CGI script (\$MyURL) is unable to connect to the BackupPC
62server on \$Conf{ServerHost} port \$Conf{ServerPort}.<br>
63The error was: \$err.<br>
64Perhaps the BackupPC server is not running or there is a configuration error.
65Please report this to your Sys Admin.
66EOF
67
68$Lang{Admin_Start_Server} = <<EOF;
69\${h1(qq{$Lang{Unable_to_connect_to_BackupPC_server}})}
70<form action="\$MyURL" method="get">
71The BackupPC server at <tt>\$Conf{ServerHost}</tt> port <tt>\$Conf{ServerPort}</tt>
72is not currently running (maybe you just stopped it, or haven't yet started it).<br>
73Do you want to start it?
74<input type="hidden" name="action" value="startServer">
75<input type="submit" value="Start Server" name="ignore">
76</form>
77EOF
78
79# -----
80
81$Lang{H_BackupPC_Server_Status} = "Состояние Сервера BackupPC";
82
83$Lang{BackupPC_Server_Status_General_Info}= <<EOF;
84\${h2(\"Общая Информация\")}
85
86<ul>
87<li> PID сервера \$Info{pid}, версия \$Info{Version},
88     запущен \$serverStartTime на узле \$Conf{ServerHost}.
89<li> Данный отчёт был сформирован \$now.
90<li> Настройки последний раз загружались \$configLoadTime.
91<li> В следующий раз ПК будут поставлены в очередь запросов \$nextWakeupTime.
92<li> Прочая информация:
93    <ul>
94        <li>\$numBgQueue запросов в очереди на резервирование (с момента последнего запуска планировщика);
95        <li>\$numUserQueue запросов в пользовательской очереди на резервирование;
96        <li>\$numCmdQueue запросов в очереди на выполнение команд;
97        \$poolInfo
98        <li>Файловая система пула занята на \$Info{DUlastValue}%
99            (\$DUlastTime), сегодняшний максимум \$Info{DUDailyMax}% (\$DUmaxTime),
100            вчерашний максимум \$Info{DUDailyMaxPrev}%.
101        <li>Inode Файловая система пула занята на \$Info{DUInodelastValue}%
102            (\$DUlastTime), сегодняшний максимум \$Info{DUInodeDailyMax}% (\$DUInodemaxTime),
103            вчерашний максимум \$Info{DUInodeDailyMaxPrev}%.
104    </ul>
105</ul>
106EOF
107
108$Lang{BackupPC_Server_Status} = <<EOF;
109\${h1(qq{$Lang{H_BackupPC_Server_Status}})}
110
111<p>
112\${h2("Работы, выполняемые в данный момент времени")}
113<p>
114<table class="tableStnd sortable" border cellspacing="1" cellpadding="3">
115<tr class="tableheader"><td>Узел</td>
116    <td>Тип</td>
117    <td>Пользователь</td>
118    <td>Время начала</td>
119    <td>Команда</td>
120    <td align="center">PID</td>
121    <td align="center">Xfer PID</td>
122    <td align="center"> Status </td>
123    <td align="center"> Count </td>
124    </tr>
125\$jobStr
126</table>
127
128<p>
129\$generalInfo
130
131\${h2("Сбои, нуждающиеся внимания")}
132<p>
133<table class="tableStnd sortable" border cellspacing="1" cellpadding="3">
134<tr class="tableheader"><td align="center">Узел</td>
135    <td align="center">Тип</td>
136    <td align="center">Пользователь</td>
137    <td align="center">Последняя попытка</td>
138    <td align="center">Детали</td>
139    <td align="center">Время ошибки</td>
140    <td>Последняя ошибка (не считая отсутствие \'пинга\')</td></tr>
141\$statusStr
142</table>
143EOF
144
145# --------------------------------
146$Lang{BackupPC__Server_Summary} = "Сводка по Узлам";
147$Lang{BackupPC__Archive} = "Архивирование";
148$Lang{BackupPC_Summary} = <<EOF;
149
150\${h1(qq{$Lang{BackupPC__Server_Summary}})}
151<p>
152<ul>
153<li>Данный отчёт был сформирован \$now.
154<li>Файловая система пула занята на \$Info{DUlastValue}%
155    (\$DUlastTime), сегодняшний максимум \$Info{DUDailyMax}% (\$DUmaxTime),
156        вчерашний максимум \$Info{DUDailyMaxPrev}%.
157<li>Inode Файловая система пула занята на \$Info{DUInodelastValue}%
158    (\$DUlastTime), сегодняшний максимум \$Info{DUInodeDailyMax}% (\$DUInodemaxTime),
159    вчерашний максимум \$Info{DUInodeDailyMaxPrev}%.
160</ul>
161</p>
162
163\${h2("Узлы, имеющие резервные копии")}
164<p>
165Всего \$hostCntGood узлов, которые содержат:
166<ul>
167<li> \$fullTot полных резервных копий общим размером \${fullSizeTot}GiB
168     (до объединения и сжатия);
169<li> \$incrTot инкрементальных резервных копий общим размером \${incrSizeTot}GiB
170     (до объединения и сжатия).
171</ul>
172</p>
173<table class="sortable" id="host_summary_backups" border cellpadding="3" cellspacing="1">
174<tr class="tableheader"><td>Узел</td>
175    <td align="center">Поль-ль</td>
176    <td align="center">Комментарий</td>
177    <td align="center">Кол-во ПОЛН. копий</td>
178    <td align="center">ПОЛН. возраст (дни)</td>
179    <td align="center">ПОЛН. размер (ГБ)</td>
180    <td align="center">Скорость (МБ/с)</td>
181    <td align="center">Кол-во ИНКР. копий</td>
182    <td align="center">ИНКР. возраст (дни)</td>
183    <td align="center">Посл. копир-ие (дни)</td>
184    <td align="center">Состояние</td>
185    <td align="center">Трансп. ошибок</td>
186    <td align="center">Последнее действие</td></tr>
187\$strGood
188</table>
189\${h2("Узлы, не имеющие резервные копии")}
190<p>
191Всего \$hostCntNone узлов, не имеющих резервных копий.
192<p>
193<table class="sortable" id="host_summary_nobackups" border cellpadding="3" cellspacing="1">
194<tr class="tableheader"><td>Узел</td>
195    <td align="center">Поль-ль</td>
196    <td align="center">Комментарий</td>
197    <td align="center">Кол-во ПОЛН. копий</td>
198    <td align="center">ПОЛН. возраст (дни)</td>
199    <td align="center">ПОЛН. размер (ГБ)</td>
200    <td align="center">Скорость (МБ/с)</td>
201    <td align="center">Кол-во ИНКР. копий</td>
202    <td align="center">ИНКР. возраст (дни)</td>
203    <td align="center">Последн. копир-ие (дни)</td>
204    <td align="center">Состояние</td>
205    <td align="center">Трансп. ошибок</td>
206    <td align="center">Последнее действие</td></tr>
207\$strNone
208</table>
209EOF
210
211$Lang{BackupPC_Archive} = <<EOF;
212\${h1(qq{$Lang{BackupPC__Archive}})}
213<script language="javascript" type="text/javascript">
214<!--
215
216    function checkAll(location)
217    {
218      for (var i=0;i<document.form1.elements.length;i++)
219      {
220        var e = document.form1.elements[i];
221        if ((e.checked || !e.checked) && e.name != \'all\') {
222            if (eval("document.form1."+location+".checked")) {
223                e.checked = true;
224            } else {
225                e.checked = false;
226            }
227        }
228      }
229    }
230
231    function toggleThis(checkbox)
232    {
233       var cb = eval("document.form1."+checkbox);
234       cb.checked = !cb.checked;
235    }
236
237//-->
238</script>
239
240Всего \$hostCntGood узлов, чьи резервные копии занимают в общем \${fullSizeTot} ГБ.
241<p>
242<form name="form1" method="post" action="\$MyURL">
243<input type="hidden" name="fcbMax" value="\$checkBoxCnt">
244<input type="hidden" name="type" value="1">
245<input type="hidden" name="host" value="\${EscHTML(\$archHost)}">
246<input type="hidden" name="action" value="Archive">
247<table class="tableStnd" border cellpadding="3" cellspacing="1">
248<tr class="tableheader"><td align=center> Узел</td>
249    <td align="center"> Пользователь </td>
250    <td align="center"> Размер Копии </td>
251\$strGood
252\$checkAllHosts
253</table>
254</form>
255<p>
256
257EOF
258
259$Lang{BackupPC_Archive2} = <<EOF;
260\${h1(qq{$Lang{BackupPC__Archive}})}
261Архивирование следующих узлов
262<ul>
263\$HostListStr
264</ul>
265<form action="\$MyURL" method="post">
266\$hiddenStr
267<input type="hidden" name="action" value="Archive">
268<input type="hidden" name="host" value="\${EscHTML(\$archHost)}">
269<input type="hidden" name="type" value="2">
270<input type="hidden" value="0" name="archive_type">
271<table class="tableStnd" border cellspacing="1" cellpadding="3">
272\$paramStr
273<tr>
274    <td colspan=2><input type="submit" value="Начать Архивирование" name="ignore"></td>
275</tr>
276</form>
277</table>
278EOF
279
280$Lang{BackupPC_Archive2_location} = <<EOF;
281<tr>
282    <td>Расположение/Устройство Архива</td>
283    <td><input type="text" value="\$ArchiveDest" name="archive_device"></td>
284</tr>
285EOF
286
287$Lang{BackupPC_Archive2_compression} = <<EOF;
288<tr>
289    <td>Сжатие</td>
290    <td>
291    <input type="radio" value="0" name="compression" \$ArchiveCompNone>Нет<br>
292    <input type="radio" value="1" name="compression" \$ArchiveCompGzip>gzip<br>
293    <input type="radio" value="2" name="compression" \$ArchiveCompBzip2>bzip2
294    </td>
295</tr>
296EOF
297
298$Lang{BackupPC_Archive2_parity} = <<EOF;
299<tr>
300    <td>Percentage of Parity Data (0 = disable, 5 = typical)</td>
301    <td><input type="numeric" value="\$ArchivePar" name="par"></td>
302</tr>
303EOF
304
305$Lang{BackupPC_Archive2_split} = <<EOF;
306<tr>
307    <td>Разделить на части по</td>
308    <td><input type="numeric" value="\$ArchiveSplit" name="splitsize">МБ</td>
309</tr>
310EOF
311
312# -----------------------------------
313$Lang{Pool_Stat} = <<EOF;
314        <li>Пул занимает \${poolSize}GiB, включая \$info->{"\${name}FileCnt"} файлов
315            и \$info->{"\${name}DirCnt"} каталогов (по данным на \$poolTime);
316        <li>При хешировании пула произошло \$info->{"\${name}FileCntRep"} коллизии,
317            максимальное количество файлов в одной коллизии - \$info->{"\${name}FileRepMax"};
318        <li>Во время ночной очистки было удалено \$info->{"\${name}FileCntRm"} файлов
319            общим размером \${poolRmSize}GiB (в районе \$poolTime);
320EOF
321
322# --------------------------------
323$Lang{BackupPC__Backup_Requested_on__host} = "BackupPC: Backup Requested on \$host";
324$Lang{BackupPC__Delete_Requested_for_a_backup_of__host} = "BackupPC: Delete Requested for a backup of \$host";
325# --------------------------------
326$Lang{REPLY_FROM_SERVER} = <<EOF;
327\${h1(\$str)}
328<p>
329Ответ с сервера: \$reply
330<p>
331Вернуться на Главную страницу узла <a href="\$MyURL?host=\$host">\$host</a>.
332EOF
333# --------------------------------
334$Lang{BackupPC__Start_Backup_Confirm_on__host} = "BackupPC: Start Backup Confirm on \$host";
335# --------------------------------
336$Lang{Are_you_sure_start} = <<EOF;
337\${h1("Вы уверены?")}
338<p>
339Резервное \$type копирование узла \$host.
340
341<form name="Confirm" action="\$MyURL" method="get">
342<input type="hidden" name="host" value="\$host">
343<input type="hidden" name="hostIP" value="\$ipAddr">
344<input type="hidden" name="doit" value="1">
345<input type="hidden" name="action" value="">
346Вы уверены, что хотите сделать это?
347<input type="button" value="\$buttonText"
348  onClick="document.Confirm.action.value='\$In{action}';
349           document.Confirm.submit();">
350<input type="submit" value="Нет" name="ignore">
351</form>
352EOF
353# --------------------------------
354$Lang{BackupPC__Stop_Backup_Confirm_on__host} = "BackupPC: Stop Backup Confirm on \$host";
355# --------------------------------
356$Lang{Are_you_sure_stop} = <<EOF;
357
358\${h1("Вы уверены?")}
359
360<p>
361Остановка/удаление из очереди узла \$host.
362
363<form name="Confirm" action="\$MyURL" method="get">
364<input type="hidden" name="host"   value="\$host">
365<input type="hidden" name="doit"   value="1">
366<input type="hidden" name="action" value="">
367Также, не начинать другое резервное копирование в течение
368<input type="text" name="backoff" size="10" value="\$backoff"> часов.
369<p>
370Вы уверены, что хотите сделать это?
371<input type="button" value="\$buttonText"
372  onClick="document.Confirm.action.value='\$In{action}';
373           document.Confirm.submit();">
374<input type="submit" value="Нет" name="ignore">
375</form>
376
377EOF
378# --------------------------------
379$Lang{Only_privileged_users_can_view_queues_} = "Only privileged users can view queues.";
380# --------------------------------
381$Lang{Only_privileged_users_can_archive} = "Only privileged users can Archive.";
382# --------------------------------
383$Lang{BackupPC__Queue_Summary} = "BackupPC: Queue Summary";
384# --------------------------------
385$Lang{Backup_Queue_Summary} = <<EOF;
386\${h1("Сводка по Очередям")}
387\${h2("Очередь Пользовательских Задач")}
388<p>
389Следующие запросы находятся в очереди:
390</p>
391<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
392<tr class="tableheader"><td> Узел </td>
393    <td> Action </td>
394    <td> Время Запроса </td>
395    <td> Пользователь </td></tr>
396\$strUser
397</table>
398
399\${h2("Очередь Фоновых Задач")}
400<p>
401Следующие фоновые запросы находятся в очереди:
402</p>
403<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
404<tr class="tableheader"><td> Узел </td>
405    <td> Action </td>
406    <td> Время Запроса </td>
407    <td> Пользователь </td></tr>
408\$strBg
409</table>
410\${h2("Очередь Команд")}
411<p>
412Следующие команды находятся в очереди:
413</p>
414<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
415<tr class="tableheader"><td> Узел </td>
416    <td> Action </td>
417    <td> Время Запроса </td>
418    <td> Пользователь </td>
419    <td> Команда </td></tr>
420\$strCmd
421</table>
422EOF
423
424# --------------------------------
425$Lang{Backup_PC__Log_File__file} = "BackupPC: File \$file";
426$Lang{Log_File__file__comment} = <<EOF;
427\${h1("Файл \$file \$comment")}
428<p>
429EOF
430# --------------------------------
431$Lang{Contents_of_log_file} = <<EOF;
432Содержимое файла <tt>\$file</tt>, с последними изменениями от \$mtimeStr \$comment
433EOF
434
435# --------------------------------
436$Lang{skipped__skipped_lines} = "[ пропущено \$skipped строк ]\n";
437# --------------------------------
438$Lang{_pre___Can_t_open_log_file__file} = "<pre>\nНе могу открыть журнальный файл \$file\n";
439
440# --------------------------------
441$Lang{BackupPC__Log_File_History} = "BackupPC: Log File History";
442$Lang{Log_File_History__hdr} = <<EOF;
443\${h1("Архив Журналов \$hdr")}
444<p>
445<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
446<tr class="tableheader"><td align="center"> Файл </td>
447    <td align="center"> Размер </td>
448    <td align="center"> Время изменения </td></tr>
449\$str
450</table>
451EOF
452
453# -------------------------------
454$Lang{Recent_Email_Summary} = <<EOF;
455\${h1("Сводка по Последним Письмам (в обратном порядке времени)")}
456<p>
457<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
458<tr class="tableheader"><td align="center"> Получатель </td>
459    <td align="center"> Узел </td>
460    <td align="center"> Время </td>
461    <td align="center"> Тема </td></tr>
462\$str
463</table>
464EOF
465
466
467# ------------------------------
468$Lang{Browse_backup__num_for__host} = "BackupPC: Browse backup \$num for \$host";
469
470# ------------------------------
471$Lang{Restore_Options_for__host} = "BackupPC: Restore Options for \$host";
472$Lang{Restore_Options_for__host2} = <<EOF;
473\${h1("Параметры Восстановления для Узла \$host")}
474<p>
475Вы выбрали следующие файлы/каталоги из
476ресурса \$share, номер копии № \$num:
477<ul>
478\$fileListStr
479</ul>
480</p><p>
481Выберите один из трёх способов восстановления.
482</p>
483\${h2("Способ 1: Прямое Восстановление")}
484<p>
485EOF
486
487$Lang{Restore_Options_for__host_Option1} = <<EOF;
488Вы можете восстановить данные напрямую в
489<b>\$directHost</b>.
490</p><p>
491<b>Внимание:</b> все существующие файлы, совпадающие с выбранными,
492будут переписаны!
493</p>
494<form action="\$MyURL" method="post" name="direct">
495<input type="hidden" name="host" value="\${EscHTML(\$host)}">
496<input type="hidden" name="num" value="\$num">
497<input type="hidden" name="type" value="3">
498\$hiddenStr
499<input type="hidden" value="\$In{action}" name="action">
500<table class="tableStnd" border="0">
501<tr>
502    <td>Восстановить на узел</td>
503    <td><!--<input type="text" size="40" value="\${EscHTML(\$host)}"
504	 name="hostDest">-->
505	 <select name="hostDest" onChange="document.direct.shareDest.value=''">
506	 \$hostDestSel
507	 </select>
508	 <script language="Javascript">
509	 function myOpen(URL) {
510		window.open(URL,'','width=500,height=400');
511	 }
512	 </script>
513	 <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a>--></td>
514</tr><tr>
515    <td>Восстановить на ресурс</td>
516    <td><input type="text" size="40" value="\${EscHTML(\$share)}"
517	 name="shareDest"></td>
518</tr><tr>
519    <td>Восстановить в каталог<br>(относительно ресурса)</td>
520    <td valign="top"><input type="text" size="40" maxlength="256"
521	value="\${EscHTML(\$pathHdr)}" name="pathHdr"></td>
522</tr><tr>
523    <td><input type="submit" value="Начать Восстановление" name="ignore"></td>
524</table>
525</form>
526EOF
527
528$Lang{Restore_Options_for__host_Option1_disabled} = <<EOF;
529Direct restore has been disabled for host \${EscHTML(\$hostDest)}.
530Please select one of the other restore options.
531EOF
532
533# ------------------------------
534$Lang{Option_2__Download_Zip_archive} = <<EOF;
535<p>
536\${h2("Способ 2: Загрузка Zip-архива")}
537<p>
538Вы можете загрузить Zip-архив, содержащий все выбранные файлы и каталоги.
539После чего, используя локальное приложение, такое как WinZip, можно просмотреть
540или разархивировать любые файлы.
541</p><p>
542<b>Внимание:</b> в зависимости от выбранных Вами файлов/каталогов,
543этот архив может быть очень очень большим. На создание и передачу
544такого архива может уйти много времени, и Вам понадобится достаточно
545много места на локальном диске для его хранения.
546</p>
547<form action="\$MyURL" method="post">
548<input type="hidden" name="host" value="\${EscHTML(\$host)}">
549<input type="hidden" name="num" value="\$num">
550<input type="hidden" name="type" value="2">
551\$hiddenStr
552<input type="hidden" value="\$In{action}" name="action">
553<input type="checkbox" value="1" name="relative" checked> Создать архив относительно
554\${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)}
555(в противном случае файлы в архиве будут иметь полные пути).
556<br>
557<table class="tableStnd" border="0">
558<tr>
559    <td>Степень сжатия (0=нет, 1=самая быстрая, ..., 9=самая большая)</td>
560    <td><input type="text" size="6" value="5" name="compressLevel"></td>
561</tr><tr>
562    <td>Code page (e.g. cp866)</td>
563    <td><input type="text" size="6" value="utf8" name="codePage"></td>
564</tr>
565</table>
566<br>
567<input type="submit" value="Загрузить Zip-архив" name="ignore">
568</form>
569EOF
570
571# ------------------------------
572
573$Lang{Option_2__Download_Zip_archive2} = <<EOF;
574<p>
575\${h2("Option 2: Download Zip archive")}
576<p>
577Archive::Zip is not installed so you will not be able to download a
578zip archive.
579Please ask your system adminstrator to install Archive::Zip from
580<a href="http://www.cpan.org">www.cpan.org</a>.
581</p>
582EOF
583
584
585# ------------------------------
586$Lang{Option_3__Download_Zip_archive} = <<EOF;
587\${h2("Способ 3: Загрузка Tar-архива")}
588<p>
589Вы можете загрузить Tar-архив, содержащий все выбранные файлы и каталоги.
590После чего, используя локальное приложение, такое как tar или WinZip,
591можно просмотреть или разархивировать любые файлы.
592</p><p>
593<b>Внимание:</b> в зависимости от выбранных Вами файлов/каталогов,
594этот архив может быть очень очень большим. На создание и передачу
595такого архива может уйти много времени, и Вам понадобится достаточно
596много места на локальном диске для его хранения.
597</p>
598<form action="\$MyURL" method="post">
599<input type="hidden" name="host" value="\${EscHTML(\$host)}">
600<input type="hidden" name="num" value="\$num">
601<input type="hidden" name="type" value="1">
602\$hiddenStr
603<input type="hidden" value="\$In{action}" name="action">
604<input type="checkbox" value="1" name="relative" checked> Создать архив относительно
605\${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)}
606(в противном случае файлы в архиве будут иметь полные пути).
607<br>
608<input type="submit" value="Загрузить Tar-архив" name="ignore">
609</form>
610EOF
611
612
613# ------------------------------
614$Lang{Restore_Confirm_on__host} = "BackupPC: Restore Confirm on \$host";
615
616$Lang{Are_you_sure} = <<EOF;
617\${h1("Вы уверены? Точно-точно? А если подумать? Может всё-таки не надо?")}
618<p>
619Следующие файлы будут восстановлены напрямую на узел \$In{hostDest} в ресурс
620\$In{shareDest}, из резервной копии № \$num:
621<p>
622<table class="tableStnd" border>
623<tr class="tableheader"><td>Оригинальный файл/каталог</td><td>Будет восстановлен как</td></tr>
624\$fileListStr
625</table>
626
627<form name="RestoreForm" action="\$MyURL" method="post">
628<input type="hidden" name="host" value="\${EscHTML(\$host)}">
629<input type="hidden" name="hostDest" value="\${EscHTML(\$In{hostDest})}">
630<input type="hidden" name="shareDest" value="\${EscHTML(\$In{shareDest})}">
631<input type="hidden" name="pathHdr" value="\${EscHTML(\$In{pathHdr})}">
632<input type="hidden" name="num" value="\$num">
633<input type="hidden" name="type" value="4">
634<input type="hidden" name="action" value="">
635\$hiddenStr
636Вы уверены?
637<input type="button" value="\$Lang->{Restore}"
638 onClick="document.RestoreForm.action.value='Restore';
639          document.RestoreForm.submit();">
640<input type="submit" value="Нет" name="ignore">
641</form>
642EOF
643
644
645# --------------------------
646$Lang{Restore_Requested_on__hostDest} = "BackupPC: Restore Requested on \$hostDest";
647$Lang{Reply_from_server_was___reply} = <<EOF;
648\${h1(\$str)}
649<p>
650Ответ с сервера: \$reply
651<p>
652Вернуться на Главную страницу узла <a href="\$MyURL?host=\$hostDest">\$hostDest</a>.
653EOF
654
655$Lang{BackupPC_Archive_Reply_from_server} = <<EOF;
656\${h1(\$str)}
657<p>
658Ответ с сервера: \$reply
659EOF
660
661
662# --------------------------------
663$Lang{BackupPC__Delete_Backup_Confirm__num_of__host} = "BackupPC: Delete Backup Confirm #\$num of \$host";
664# --------------------------------
665$Lang{A_filled} = "a filled";
666$Lang{An_unfilled} = "an unfilled";
667$Lang{Are_you_sure_delete} = <<EOF;
668\${h1("Are you sure?")}
669<p>
670You are about to delete \$filled \$type backup #\$num of \$host.
671
672<form name="Confirm" action="\$MyURL" method="get">
673
674<input type="hidden" name="host" value="\${EscHTML(\$host)}">
675<input type="hidden" name="num" value="\$num">
676
677<input type="hidden" name="doit" value="1">
678<input type="hidden" name="action" value="">
679
680Do you really want to do this?
681
682<input type="button" value="\${EscHTML(\$Lang->{CfgEdit_Button_Delete})}"
683 onClick="document.Confirm.action.value='deleteBackup';
684          document.Confirm.submit();">
685
686<input type="submit" value="No" name="ignore">
687</form>
688EOF
689
690# -------------------------
691$Lang{Host__host_Backup_Summary} = "BackupPC: Host \$host Backup Summary";
692
693$Lang{Host__host_Backup_Summary2} = <<EOF;
694\${h1("Сводка по Узлу \$host")}
695<p>
696\$warnStr
697<ul>
698\$statusStr
699</ul>
700</p>
701\${h2("Пользовательские Действия")}
702<p>
703<form name="StartStopForm" action="\$MyURL" method="get">
704<input type="hidden" name="host"   value="\$host">
705<input type="hidden" name="action" value="">
706\$startIncrStr
707<input type="button" value="\$Lang->{Start_Full_Backup}"
708 onClick="document.StartStopForm.action.value='Start_Full_Backup';
709          document.StartStopForm.submit();">
710<input type="button" value="\$Lang->{Stop_Dequeue_Backup}"
711 onClick="document.StartStopForm.action.value='Stop_Dequeue_Backup';
712          document.StartStopForm.submit();">
713</form>
714</p>
715\${h2("Сводка Резервного Копирования")}
716<p>
717Щёлкните по номеру для просмотра и восстановления скопированных файлов.
718</p>
719<table class="tableStnd sortable" border cellspacing="1" cellpadding="3">
720<tr class="tableheader"><td align="center"> № </td>
721    <td align="center"> Тип </td>
722    <td align="center"> Полный </td>
723    <td align="center"> Уровень </td>
724    <td align="center"> Дата Начала </td>
725    <td align="center"> Длительность(мин) </td>
726    <td align="center"> Возраст(дни) </td>
727    \$deleteHdrStr
728    <td align="center"> Локальный Путь Копии </td>
729</tr>
730\$str
731</table>
732<p>
733
734\$restoreStr
735</p>
736\${h2("Сводка Ошибок при Копировании")}
737<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
738<tr class="tableheader"><td align="center"> № </td>
739    <td align="center"> Тип </td>
740    <td align="center"> Журнал </td>
741    <td align="center"> Трансп. ошибок </td>
742    <td align="center"> Плохих файлов </td>
743    <td align="center"> Ресурс. проблем </td>
744    <td align="center"> tar ошибок </td>
745</tr>
746\$errStr
747</table>
748
749\${h2("Сводка по Файлам")}
750<p>
751Существующие файлы - файлы, уже находящиеся в пуле.
752Новые это те, которые добавлены к пулу.
753Пустые файлы не учитываются.
754Empty files and SMB errors aren\'t counted in the reuse and new counts.
755</p>
756<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
757<tr class="tableheader"><td colspan="2" bgcolor="#ffffff"></td>
758    <td align="center" colspan="3"> Всего </td>
759    <td align="center" colspan="2"> Существующие Файлы </td>
760    <td align="center" colspan="2"> Новые Файлы </td>
761</tr>
762<tr class="tableheader sortheader">
763    <td align="center"> № </td>
764    <td align="center"> Тип </td>
765    <td align="center"> Файлов </td>
766    <td align="center"> Размер(МБ) </td>
767    <td align="center"> МБ/с </td>
768    <td align="center"> Файлов </td>
769    <td align="center"> Размер(МБ) </td>
770    <td align="center"> Файлов </td>
771    <td align="center"> Размер(МБ) </td>
772</tr>
773\$sizeStr
774</table>
775
776\${h2("Сводка по Сжатию")}
777<p>
778Степень сжатия существующих и новых файлов.
779</p>
780<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
781<tr class="tableheader"><td colspan="3" bgcolor="#ffffff"></td>
782    <td align="center" colspan="3"> Существующие Файлы </td>
783    <td align="center" colspan="3"> Новые Файлы </td>
784</tr>
785<tr class="tableheader sortheader"><td align="center"> № </td>
786    <td align="center"> Тип </td>
787    <td align="center"> Уровень Сжатия </td>
788    <td align="center"> Размер(МБ) </td>
789    <td align="center"> Сжатый(МБ) </td>
790    <td align="center"> Степень сж. </td>
791    <td align="center"> Размер(МБ) </td>
792    <td align="center"> Сжатый(МБ) </td>
793    <td align="center"> Степень сж. </td>
794</tr>
795\$compStr
796</table>
797EOF
798
799$Lang{Host__host_Archive_Summary} = "BackupPC: Host \$host Archive Summary";
800$Lang{Host__host_Archive_Summary2} = <<EOF;
801\${h1("Сводка по Архиву \$host")}
802<p>
803\$warnStr
804<ul>
805\$statusStr
806</ul>
807
808\${h2("Пользовательские Действия")}
809<p>
810<form name="StartStopForm" action="\$MyURL" method="get">
811<input type="hidden" name="archivehost" value="\$host">
812<input type="hidden" name="host" value="\$host">
813<input type="hidden" name="action" value="">
814<input type="button" value="\$Lang->{Start_Archive}"
815 onClick="document.StartStopForm.action.value='Start_Archive';
816          document.StartStopForm.submit();">
817<input type="button" value="\$Lang->{Stop_Dequeue_Archive}"
818 onClick="document.StartStopForm.action.value='Stop_Dequeue_Archive';
819          document.StartStopForm.submit();">
820</form>
821
822\$ArchiveStr
823
824EOF
825
826# -------------------------
827$Lang{Error} = "BackupPC: Error";
828$Lang{Error____head} = <<EOF;
829\${h1("Error: \$head")}
830<p>\$mesg</p>
831EOF
832
833# -------------------------
834$Lang{NavSectionTitle_} = "Сервер";
835
836# -------------------------
837$Lang{Backup_browse_for__host} = <<EOF;
838\${h1("Просмотр Резервной Копии Узла \$host")}
839
840<script language="javascript" type="text/javascript">
841<!--
842
843    function checkAll(location)
844    {
845      for (var i=0;i<document.form1.elements.length;i++)
846      {
847        var e = document.form1.elements[i];
848        if ((e.checked || !e.checked) && e.name != \'all\') {
849            if (eval("document.form1."+location+".checked")) {
850            	e.checked = true;
851            } else {
852            	e.checked = false;
853            }
854        }
855      }
856    }
857
858    function toggleThis(checkbox)
859    {
860       var cb = eval("document.form1."+checkbox);
861       cb.checked = !cb.checked;
862    }
863
864//-->
865</script>
866
867<form name="form0" method="post" action="\$MyURL">
868<input type="hidden" name="num" value="\$num">
869<input type="hidden" name="host" value="\$host">
870<input type="hidden" name="share" value="\${EscHTML(\$share)}">
871<input type="hidden" name="action" value="browse">
872<ul>
873<li> Копия № \$num, создание которой было начато примерно \$backupTime
874        (\$backupAge дней назад),
875\$filledBackup
876<li> Введите каталог: <input type="text" name="dir" size="50" maxlength="4096" value="\${EscHTML(\$dir)}"> <input type="submit" value="\$Lang->{Go}" name="Submit">
877<li> Щёлкните на каталог, чтобы увидеть его содержимое.
878<li> Щёлкните на файл, чтобы восстановить его.
879<li> <a href="\$MyURL?action=dirHistory&host=\${EscURI(\$host)}&share=\$shareURI&dir=\$pathURI">История копий</a> текущего каталога.
880</ul>
881</form>
882
883\${h2("Содержание каталога \$dirDisplay")}
884<form name="form1" method="post" action="\$MyURL">
885<input type="hidden" name="num" value="\$num">
886<input type="hidden" name="host" value="\$host">
887<input type="hidden" name="share" value="\${EscHTML(\$share)}">
888<input type="hidden" name="fcbMax" value="\$checkBoxCnt">
889<input type="hidden" name="action" value="Restore">
890<br>
891<table width="100%">
892<tr><td valign="top" width="30%">
893    <table align="left" border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff">
894    \$dirStr
895    </table>
896</td><td width="3%">
897</td><td valign="top">
898    <br>
899        <table border width="100%" align="left" cellpadding="3" cellspacing="1">
900        \$fileHeader
901        \$topCheckAll
902        \$fileStr
903        \$checkAll
904        </table>
905    </td></tr></table>
906<br>
907<!--
908This is now in the checkAll row
909<input type="submit" name="Submit" value="Restore selected files">
910-->
911</form>
912EOF
913
914# ------------------------------
915$Lang{DirHistory_backup_for__host} = "BackupPC: Directory backup history for \$host";
916
917#
918# These two strings are used to build the links for directories and
919# file versions.  Files are appended with a version number.
920#
921$Lang{DirHistory_dirLink}  = "dir";
922$Lang{DirHistory_fileLink} = "v";
923
924$Lang{DirHistory_for__host} = <<EOF;
925\${h1("История каталога резервной копии для узла \$host")}
926<p>
927Здесь показаны все уникальные версии файлов, находящиеся во всех
928резервных копиях:
929<ul>
930<li> Щёлкните по номеру копии для возврата к просмотру копии;
931<li> Щёлкните по ссылке на каталог (\$Lang->{DirHistory_dirLink}) для захода
932     в этот каталог;
933<li> Щёлкните по версии файла (\$Lang->{DirHistory_fileLink}0,
934     \$Lang->{DirHistory_fileLink}1, ...) для загрузки этого файла;
935<li> Файлы из разных резервных копий, содержащие одно и то же,
936     имеют один и тот же номер версии (PleaseTranslateThis: except between v3 and v4 backups);
937<li> Файлы и каталоги, отсутствующие в конкретной копии, показаны
938     пустым прямоугольником;
939<li> Файлы одной версии могут отличаться разными атрибутами файловой системы.
940     Выберите  номер копии, чтобы посмотреть эти атрибуты.
941</ul>
942
943\${h2("История \$dirDisplay")}
944
945<br>
946<table border cellspacing="2" cellpadding="3">
947<tr class="fviewheader"><td>Номер копии</td>\$backupNumStr</tr>
948<tr class="fviewheader"><td>Время копирования</td>\$backupTimeStr</tr>
949\$fileStr
950</table>
951EOF
952
953# ------------------------------
954$Lang{Restore___num_details_for__host} = "BackupPC: Restore #\$num details for \$host";
955
956$Lang{Restore___num_details_for__host2} = <<EOF;
957\${h1("Детали восстановления № \$num для узла \$host")}
958<p>
959<table class="tableStnd" border cellspacing="1" cellpadding="3" width="90%">
960<tr><td class="tableheader"> Номер </td><td class="border"> \$Restores[\$i]{num} </td></tr>
961<tr><td class="tableheader"> Запросил </td><td class="border"> \$RestoreReq{user} </td></tr>
962<tr><td class="tableheader"> Время запроса </td><td class="border"> \$reqTime </td></tr>
963<tr><td class="tableheader"> Результат </td><td class="border"> \$Restores[\$i]{result} </td></tr>
964<tr><td class="tableheader"> Текст ошибки </td><td class="border"> \$Restores[\$i]{errorMsg} </td></tr>
965<tr><td class="tableheader"> Исходящий узел </td><td class="border"> \$RestoreReq{hostSrc} </td></tr>
966<tr><td class="tableheader"> Номер исходящей копии </td><td class="border"> \$RestoreReq{num} </td></tr>
967<tr><td class="tableheader"> Исходящий ресурс </td><td class="border"> \$RestoreReq{shareSrc} </td></tr>
968<tr><td class="tableheader"> Узел назначения </td><td class="border"> \$RestoreReq{hostDest} </td></tr>
969<tr><td class="tableheader"> Ресурс назначения </td><td class="border"> \$RestoreReq{shareDest} </td></tr>
970<tr><td class="tableheader"> Время начала </td><td class="border"> \$startTime </td></tr>
971<tr><td class="tableheader"> Продолжительность </td><td class="border"> \$duration мин </td></tr>
972<tr><td class="tableheader"> Количество файлов </td><td class="border"> \$Restores[\$i]{nFiles} </td></tr>
973<tr><td class="tableheader"> Общий размер </td><td class="border"> \${MB} МБ </td></tr>
974<tr><td class="tableheader"> Скорость передачи </td><td class="border"> \$MBperSec МБ/с </td></tr>
975<tr><td class="tableheader"> Ошибок при создании Tar </td><td class="border"> \$Restores[\$i]{tarCreateErrs} </td></tr>
976<tr><td class="tableheader"> Ошибок при передаче </td><td class="border"> \$Restores[\$i]{xferErrs} </td></tr>
977<tr><td class="tableheader"> Журнал </td><td class="border">
978<a href="\$MyURL?action=view&type=RestoreLOG&num=\$Restores[\$i]{num}&host=\$host">Весь</a>,
979<a href="\$MyURL?action=view&type=RestoreErr&num=\$Restores[\$i]{num}&host=\$host">Только ошибки</a>
980</tr></tr>
981</table>
982</p>
983\${h1("Список Файлов/Каталогов")}
984<p>
985<table class="tableStnd" border cellspacing="1" cellpadding="3" width="100%">
986<tr class="tableheader"><td>Оригинальный файл/каталог</td><td>Восстановлен как</td></tr>
987\$fileListStr
988</table>
989EOF
990
991# ------------------------------
992$Lang{Archive___num_details_for__host} = "BackupPC: Archive #\$num details for \$host";
993
994$Lang{Archive___num_details_for__host2} = <<EOF;
995\${h1("Детали по Архиву № \$num узла \$host")}
996<p>
997<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
998<tr><td class="tableheader"> Номер </td><td class="border"> \$Archives[\$i]{num} </td></tr>
999<tr><td class="tableheader"> Запросил </td><td class="border"> \$ArchiveReq{user} </td></tr>
1000<tr><td class="tableheader"> Время запроса </td><td class="border"> \$reqTime </td></tr>
1001<tr><td class="tableheader"> Результат </td><td class="border"> \$Archives[\$i]{result} </td></tr>
1002<tr><td class="tableheader"> Сообщение об ошибке </td><td class="border"> \$Archives[\$i]{errorMsg} </td></tr>
1003<tr><td class="tableheader"> Время запуска </td><td class="border"> \$startTime </td></tr>
1004<tr><td class="tableheader"> Продолжительность </td><td class="border"> \$duration min </td></tr>
1005<tr><td class="tableheader"> Журнал передачи данных </td><td class="border">
1006<a href="\$MyURL?action=view&type=ArchiveLOG&num=\$Archives[\$i]{num}&host=\$host">Просмотреть</a>,
1007<a href="\$MyURL?action=view&type=ArchiveErr&num=\$Archives[\$i]{num}&host=\$host">Только ошибки</a>
1008</tr></tr>
1009</table>
1010<p>
1011\${h1("Список узлов")}
1012<p>
1013<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
1014<tr class="tableheader"><td>Узел</td><td>Номер резервной копии</td></tr>
1015\$HostListStr
1016</table>
1017EOF
1018
1019# -----------------------------------
1020$Lang{Email_Summary} = "BackupPC: Email Summary";
1021
1022# -----------------------------------
1023#  !! ERROR messages !!
1024# -----------------------------------
1025$Lang{BackupPC__Lib__new_failed__check_apache_error_log} = "BackupPC::Lib->new failed: check apache error_log\n";
1026$Lang{Wrong_user__my_userid_is___} =
1027              "Wrong user: my userid is \$>, instead of \$uid"
1028            . "(\$Conf{BackupPCUser})\n";
1029# $Lang{Only_privileged_users_can_view_PC_summaries} = "Only privileged users can view PC summaries.";
1030$Lang{Only_privileged_users_can_stop_or_start_backups} =
1031                  "Only privileged users can stop or start backups on"
1032		. " \${EscHTML(\$host)}.";
1033$Lang{Invalid_number__num} = "Invalid number \${EscHTML(\$In{num})}";
1034$Lang{Unable_to_open__file__configuration_problem} = "Unable to open \$file: configuration problem?";
1035$Lang{Only_privileged_users_can_view_log_or_config_files} = "Only privileged users can view log or config files.";
1036$Lang{Only_privileged_users_can_view_log_files} = "Only privileged users can view log files.";
1037$Lang{Only_privileged_users_can_view_email_summaries} = "Only privileged users can view email summaries.";
1038$Lang{Only_privileged_users_can_browse_backup_files} = "Only privileged users can browse backup files"
1039                . " for host \${EscHTML(\$In{host})}.";
1040$Lang{Only_privileged_users_can_delete_backups} = "Only privileged users can delete backups"
1041                . " of host \${EscHTML(\$host)}.";
1042$Lang{Empty_host_name} = "Empty host name.";
1043$Lang{Directory___EscHTML} = "Directory \${EscHTML(\"\$TopDir/pc/\$host/\$num\")}"
1044		    . " is empty";
1045$Lang{Can_t_browse_bad_directory_name2} = "Не могу просмотреть каталог с неправильным названием"
1046	            . " \${EscHTML(\$relDir)}";
1047$Lang{Only_privileged_users_can_restore_backup_files} = "Only privileged users can restore backup files"
1048                . " for host \${EscHTML(\$In{host})}.";
1049$Lang{Bad_host_name} = "Bad host name \${EscHTML(\$host)}";
1050$Lang{You_haven_t_selected_any_files__please_go_Back_to} = "Вы не выбрали ни один файл.";
1051$Lang{You_haven_t_selected_any_hosts} = "You haven\'t selected any hosts; please go Back to"
1052                . " select some hosts.";
1053$Lang{Nice_try__but_you_can_t_put} = "Nice try, but you can\'t put \'..\' in any of the file names";
1054$Lang{Host__doesn_t_exist} = "Host \${EscHTML(\$In{hostDest})} doesn\'t exist";
1055$Lang{You_don_t_have_permission_to_restore_onto_host} = "You don\'t have permission to restore onto host"
1056		    . " \${EscHTML(\$In{hostDest})}";
1057$Lang{Can_t_open_create__openPath} = "Can\'t open/create "
1058		. "\${EscHTML(\"\$openPath\")}";
1059$Lang{Only_privileged_users_can_restore_backup_files2} = "Only privileged users can restore backup files"
1060                . " for host \${EscHTML(\$host)}.";
1061$Lang{Empty_host_name} = "Empty host name";
1062$Lang{Unknown_host_or_user} = "Неизвестный узел или пользователь \${EscHTML(\$host)}";
1063$Lang{Only_privileged_users_can_view_information_about} = "Only privileged users can view information about"
1064                . " host \${EscHTML(\$host)}." ;
1065$Lang{Only_privileged_users_can_view_archive_information} = "Only privileged users can view archive information.";
1066$Lang{Only_privileged_users_can_view_restore_information} = "Only privileged users can view restore information.";
1067$Lang{Restore_number__num_for_host__does_not_exist} = "Restore number \$num for host \${EscHTML(\$host)} does"
1068	        . " not exist.";
1069$Lang{Archive_number__num_for_host__does_not_exist} = "Archive number \$num for host \${EscHTML(\$host)} does"
1070                . " not exist.";
1071$Lang{Can_t_find_IP_address_for} = "Can\'t find IP address for \${EscHTML(\$host)}";
1072$Lang{host_is_a_DHCP_host} = <<EOF;
1073\$host is a DHCP host, and I don\'t know its IP address.  I checked the
1074netbios name of \$ENV{REMOTE_ADDR}\$tryIP, and found that that machine
1075is not \$host.
1076<p>
1077Until I see \$host at a particular DHCP address, you can only
1078start this request from the client machine itself.
1079EOF
1080
1081# ------------------------------------
1082# !! Server Mesg !!
1083# ------------------------------------
1084
1085$Lang{Backup_requested_on_DHCP__host} = "Резервное копирование DHCP узла \$host (\$In{hostIP}) запросил"
1086		                      . " \$User с \$ENV{REMOTE_ADDR}";
1087$Lang{Backup_requested_on__host_by__User} = "Резервное копирование узла \$host запросил \$User";
1088$Lang{Backup_stopped_dequeued_on__host_by__User} = "Резервное копирование для узла \$host остановил/убрал из очереди \$User";
1089$Lang{Restore_requested_to_host__hostDest__backup___num} = "Восстановление на узел \$hostDest, копию № \$num,"
1090	     . " запросил \$User с \$ENV{REMOTE_ADDR}";
1091$Lang{Delete_requested_for_backup_of__host_by__User} = "Delete requested for backup #\$num of \$host"
1092             . " by \$User from \$ENV{REMOTE_ADDR}";
1093$Lang{Archive_requested} = "Архивирование запросил \$User с \$ENV{REMOTE_ADDR}";
1094
1095# -------------------------------------------------
1096# ------- Stuff that was forgotten ----------------
1097# -------------------------------------------------
1098
1099$Lang{Status} = "Состояние";
1100$Lang{PC_Summary} = "Сводка по Узлам";
1101$Lang{LOG_file} = "Журнал";
1102$Lang{LOG_files} = "Старые журналы";
1103$Lang{Old_LOGs} = "Старые журналы";
1104$Lang{Email_summary} = "Сводка по Письмам";
1105$Lang{Config_file} = "Config file";
1106# $Lang{Hosts_file} = "Hosts file";
1107$Lang{Current_queues} = "Сводка по Очередям";
1108$Lang{Documentation} = "Руководство";
1109
1110#$Lang{Host_or_User_name} = "<small>Host or User name:</small>";
1111$Lang{Go} = "Найти";
1112$Lang{Hosts} = "Узлы";
1113$Lang{Select_a_host} = "Выбрать узел ...";
1114
1115$Lang{There_have_been_no_archives} = "<h2> Архивы отсутствуют </h2>\n";
1116$Lang{This_PC_has_never_been_backed_up} = "<h2> Данный ПК ни разу не резервировался!! </h2>\n";
1117$Lang{This_PC_is_used_by} = "<li>Данный ПК использует \${UserLink(\$user)}";
1118
1119$Lang{Extracting_only_Errors} = "(Выбраны только ошибки)";
1120$Lang{XferLOG} = "Весь";
1121$Lang{Errors}  = "Только Ошибки";
1122
1123# ------------
1124$Lang{Last_email_sent_to__was_at___subject} = <<EOF;
1125<li>Последнее письмо было отправлено \$mailTime, с темой "\$subj".
1126EOF
1127# ------------
1128$Lang{The_command_cmd_is_currently_running_for_started} = <<EOF;
1129<li>Команда \$cmd выполняется для узла \$host, запущена \$startTime.
1130EOF
1131
1132# -----------
1133$Lang{Host_host_is_queued_on_the_background_queue_will_be_backed_up_soon} = <<EOF;
1134<li>Узел \$host поставлен в фоновую очередь (скоро будет запущено резервное копирование).
1135EOF
1136
1137# ----------
1138$Lang{Host_host_is_queued_on_the_user_queue__will_be_backed_up_soon} = <<EOF;
1139<li>Узел \$host поставлен в пользовательскую очередь (скоро будет запущено резервное копирование).
1140EOF
1141
1142# ---------
1143$Lang{A_command_for_host_is_on_the_command_queue_will_run_soon} = <<EOF;
1144<li>Команда для узла \$host поставлена в очередь команд (скоро будет запущена).
1145EOF
1146
1147# --------
1148$Lang{Last_status_is_state_StatusHost_state_reason_as_of_startTime} = <<EOF;
1149<li>Состояние \"\$Lang->{\$StatusHost{state}}\"\$reason на \$startTime.
1150EOF
1151
1152# --------
1153$Lang{Last_error_is____EscHTML_StatusHost_error} = <<EOF;
1154<li>Последняя ошибка: \"\${EscHTML(\$StatusHost{error})}\".
1155EOF
1156
1157# ------
1158$Lang{Pings_to_host_have_failed_StatusHost_deadCnt__consecutive_times} = <<EOF;
1159<li>"Пропинговать" узел \$host не удалось \$StatusHost{deadCnt} раз(а) подряд.
1160EOF
1161
1162# -----
1163$Lang{Prior_to_that__pings} = "Prior to that, pings";
1164
1165# -----
1166$Lang{priorStr_to_host_have_succeeded_StatusHostaliveCnt_consecutive_times} = <<EOF;
1167<li>\$priorStr to \$host были успешны \$StatusHost{aliveCnt}
1168        раз(а) подряд.
1169EOF
1170
1171$Lang{Because__host_has_been_on_the_network_at_least__Conf_BlackoutGoodCnt_consecutive_times___} = <<EOF;
1172<li>Because \$host has been on the network at least \$Conf{BlackoutGoodCnt}
1173consecutive times, it will not be backed up from \$blackoutStr.
1174EOF
1175
1176$Lang{__time0_to__time1_on__days} = "\$t0 to \$t1 on \$days";
1177
1178$Lang{Backups_are_deferred_for_hours_hours_change_this_number} = <<EOF;
1179<li>Backups are deferred for \$hours hours
1180(<a href=\"\$MyURL?action=Stop_Dequeue_Backup&host=\$host\">change this number</a>).
1181EOF
1182
1183$Lang{tryIP} = " and \$StatusHost{dhcpHostIP}";
1184
1185# $Lang{Host_Inhost} = "Host \$In{host}";
1186
1187$Lang{checkAll} = <<EOF;
1188<tr><td class="fviewborder">
1189<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');">&nbsp;Выбрать всё
1190</td><td colspan="5" align="center" class="fviewborder">
1191<input type="submit" name="Submit" value="Восстановить выбранные файлы и каталоги">
1192</td></tr>
1193EOF
1194
1195$Lang{checkAllHosts} = <<EOF;
1196<tr><td class="fviewborder">
1197<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');">&nbsp;Выбрать всё
1198</td><td colspan="2" align="center" class="fviewborder">
1199<input type="submit" name="Submit" value="Заархивировать выбранные узлы">
1200</td></tr>
1201EOF
1202
1203$Lang{fileHeader} = <<EOF;
1204    <tr class="fviewheader"><td align=center> Название</td>
1205       <td align="center"> Тип</td>
1206       <td align="center"> Права</td>
1207       <td align="center"> №</td>
1208       <td align="center"> Размер</td>
1209       <td align="center"> Дата изменения</td>
1210    </tr>
1211EOF
1212
1213$Lang{Home} = "Главная";
1214$Lang{Browse} = "Просмотр резервной копии";
1215$Lang{Last_bad_XferLOG} = "Последний журнал с ошибками";
1216$Lang{Last_bad_XferLOG_errors_only} = "Последний журнал с ошибками (только&nbsp;ошибки)";
1217
1218$Lang{This_display_is_merged_with_backup} = <<EOF;
1219<li> Данное отображение объединено с копией № \$numF.
1220EOF
1221
1222$Lang{Visit_this_directory_in_backup} = <<EOF;
1223<li> Выберите номер копии для просмотра: <select onChange="window.location=this.value">\$otherDirs </select>
1224EOF
1225
1226$Lang{Restore_Summary} = <<EOF;
1227\${h2("Сводка Восстановлений")}
1228<p>
1229Щёлкните по номеру для более детального просмотра.
1230<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%">
1231<tr class="tableheader"><td align="center"> № </td>
1232    <td align="center"> Результат </td>
1233    <td align="right"> Дата начала </td>
1234    <td align="right"> Длительность(мин) </td>
1235    <td align="right"> Кол-во файлов </td>
1236    <td align="right"> Размер(МБ) </td>
1237    <td align="right"> tar ошибок </td>
1238    <td align="right"> Трансп. ошибок </td>
1239</tr>
1240\$restoreStr
1241</table>
1242<p>
1243EOF
1244
1245$Lang{Archive_Summary} = <<EOF;
1246\${h2("Архивная Сводка")}
1247<p>
1248Щёлкните по номеру архива для более детального просмотра.
1249<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%">
1250<tr class="tableheader"><td align="center"> № </td>
1251    <td align="center"> Результат </td>
1252    <td align="right"> Время Запуска </td>
1253    <td align="right"> Продолжительность(мин)</td>
1254</tr>
1255\$ArchiveStr
1256</table>
1257<p>
1258EOF
1259
1260$Lang{BackupPC__Documentation} = "BackupPC: Documentation";
1261
1262$Lang{No} = "нет";
1263$Lang{Yes} = "да";
1264
1265$Lang{The_directory_is_empty} = <<EOF;
1266<tr><td bgcolor="#ffffff">The directory \$dirDisplay is empty
1267</td></tr>
1268EOF
1269
1270#$Lang{on} = "on";
1271$Lang{off} = "откл.";
1272
1273$Lang{backupType_full}    = "полн.";
1274$Lang{backupType_incr}    = "инкр.";
1275$Lang{backupType_active}  = "active";
1276$Lang{backupType_partial} = "частичный";
1277
1278$Lang{failed} = "неудачно";
1279$Lang{success} = "успешно";
1280$Lang{and} = "и";
1281
1282# ------
1283# Hosts states and reasons
1284$Lang{Status_idle} = "бездействует";
1285$Lang{Status_backup_starting} = "началось копирование";
1286$Lang{Status_backup_in_progress} = "в процессе копирования";
1287$Lang{Status_restore_starting} = "началось восстановление";
1288$Lang{Status_restore_in_progress} = "в процессе восстановления";
1289$Lang{Status_admin_pending} = "link pending";
1290$Lang{Status_admin_running} = "link running";
1291
1292$Lang{Reason_backup_done}    = "копирование закончено";
1293$Lang{Reason_restore_done}   = "восстановление закончено";
1294$Lang{Reason_archive_done}   = "архивирование закончено";
1295$Lang{Reason_nothing_to_do}  = "без работы";
1296$Lang{Reason_backup_failed}  = "копирование не удалось";
1297$Lang{Reason_restore_failed} = "восстановление не удалось";
1298$Lang{Reason_archive_failed} = "архивирование не удалось";
1299$Lang{Reason_no_ping}        = "не \'пингуется\'";
1300$Lang{Reason_backup_canceled_by_user}  = "копирование прервано пользователем";
1301$Lang{Reason_restore_canceled_by_user} = "восстановление прервано пользователем";
1302$Lang{Reason_archive_canceled_by_user} = "восстановление прервано пользователем";
1303$Lang{Disabled_OnlyManualBackups}  = "автозапрет";
1304$Lang{Disabled_AllBackupsDisabled} = "запрещено";
1305
1306
1307# ---------
1308# Email messages
1309
1310# No backup ever
1311$Lang{EMailNoBackupEverSubj} = "BackupPC: no backups of \$host have succeeded";
1312$Lang{EMailNoBackupEverMesg} = <<'EOF';
1313To: $user$domain
1314cc:
1315Subject: $subj
1316$headers
1317Dear $userName,
1318
1319Your PC ($host) has never been successfully backed up by our
1320PC backup software.  PC backups should occur automatically
1321when your PC is connected to the network.  You should contact
1322computer support if:
1323
1324  - Your PC has been regularly connected to the network, meaning
1325    there is some configuration or setup problem preventing
1326    backups from occurring.
1327
1328  - You don't want your PC backed up and you want these email
1329    messages to stop.
1330
1331Otherwise, please make sure your PC is connected to the network
1332next time you are in the office.
1333
1334Regards,
1335BackupPC Genie
1336https://backuppc.github.io/backuppc
1337EOF
1338
1339# No recent backup
1340$Lang{EMailNoBackupRecentSubj} = "BackupPC: no recent backups on \$host";
1341$Lang{EMailNoBackupRecentMesg} = <<'EOF';
1342To: $user$domain
1343cc:
1344Subject: $subj
1345$headers
1346Dear $userName,
1347
1348Your PC ($host) has not been successfully backed up for $days days.
1349Your PC has been correctly backed up $numBackups times from $firstTime to $days days
1350ago.  PC backups should occur automatically when your PC is connected
1351to the network.
1352
1353If your PC has been connected for more than a few hours to the
1354network during the last $days days you should contact IS to find
1355out why backups are not working.
1356
1357Otherwise, if you are out of the office, there's not much you can
1358do, other than manually copying especially critical files to other
1359media.  You should be aware that any files you have created or
1360changed in the last $days days (including all new email and
1361attachments) cannot be restored if your PC disk crashes.
1362
1363Regards,
1364BackupPC Genie
1365https://backuppc.github.io/backuppc
1366EOF
1367
1368# Old Outlook files
1369$Lang{EMailOutlookBackupSubj} = "BackupPC: Outlook files on \$host need to be backed up";
1370$Lang{EMailOutlookBackupMesg} = <<'EOF';
1371To: $user$domain
1372cc:
1373Subject: $subj
1374$headers
1375Dear $userName,
1376
1377The Outlook files on your PC have $howLong.
1378These files contain all your email, attachments, contact and calendar
1379information.  Your PC has been correctly backed up $numBackups times from
1380$firstTime to $lastTime days ago.  However, Outlook locks all its files when
1381it is running, preventing these files from being backed up.
1382
1383It is recommended you backup the Outlook files when you are connected
1384to the network by exiting Outlook and all other applications, and,
1385using just your browser, go to this link:
1386
1387    $CgiURL?host=$host
1388
1389Select "Start Incr Backup" twice to start a new incremental backup.
1390You can select "Return to $host page" and then hit "reload" to check
1391the status of the backup.  It should take just a few minutes to
1392complete.
1393
1394Regards,
1395BackupPC Genie
1396https://backuppc.github.io/backuppc
1397EOF
1398
1399$Lang{howLong_not_been_backed_up} = "not been backed up successfully";
1400$Lang{howLong_not_been_backed_up_for_days_days} = "not been backed up for \$days days";
1401
1402#######################################################################
1403# RSS strings
1404#######################################################################
1405$Lang{RSS_Doc_Title}       = "BackupPC Server";
1406$Lang{RSS_Doc_Description} = "RSS feed for BackupPC";
1407$Lang{RSS_Host_Summary}    = <<EOF;
1408Full Count: \$fullCnt;
1409Full Age/days: \$fullAge;
1410Full Size/GiB: \$fullSize;
1411Speed MB/sec: \$fullRate;
1412Incr Count: \$incrCnt;
1413Incr Age/Days: \$incrAge;
1414State: \$host_state;
1415Disabled: \$host_disabled;
1416Last Attempt: \$host_last_attempt;
1417EOF
1418
1419#######################################################################
1420# Configuration editor strings
1421#######################################################################
1422
1423$Lang{Only_privileged_users_can_edit_config_files} = "Only privileged users can edit configuration settings.";
1424$Lang{CfgEdit_Edit_Config} = "Редактирование Настроек";
1425$Lang{CfgEdit_Edit_Hosts}  = "Редактирование Узлов";
1426
1427$Lang{CfgEdit_Title_Server} = "Сервер";
1428$Lang{CfgEdit_Title_General_Parameters} = "Общие Параметры";
1429$Lang{CfgEdit_Title_Wakeup_Schedule} = "Время Запуска Планировщика";
1430$Lang{CfgEdit_Title_Concurrent_Jobs} = "Совмещение Заданий";
1431$Lang{CfgEdit_Title_Pool_Filesystem_Limits} = "Лимиты Файловой Системы Пула";
1432$Lang{CfgEdit_Title_Other_Parameters} = "Прочие Параметры";
1433$Lang{CfgEdit_Title_Remote_Apache_Settings} = "Установки Удалённого Сервера Apache";
1434$Lang{CfgEdit_Title_Program_Paths} = "Программные Пути";
1435$Lang{CfgEdit_Title_Install_Paths} = "Установочные Пути";
1436$Lang{CfgEdit_Title_Email} = "Почта";
1437$Lang{CfgEdit_Title_Email_settings} = "Настройки Электронной Почты";
1438$Lang{CfgEdit_Title_Email_User_Messages} = "Настройки Письма Для Пользователя";
1439$Lang{CfgEdit_Title_CGI} = "CGI";
1440$Lang{CfgEdit_Title_Admin_Privileges} = "Административные Привилегии";
1441$Lang{CfgEdit_Title_Page_Rendering} = "Отображение Веб-Страницы";
1442$Lang{CfgEdit_Title_Paths} = "Пути";
1443$Lang{CfgEdit_Title_User_URLs} = "Пользовательские URL\'ы";
1444$Lang{CfgEdit_Title_User_Config_Editing} = "Редактируемые Пользователем Настройки";
1445$Lang{CfgEdit_Title_Xfer} = "Транспорт";
1446$Lang{CfgEdit_Title_Xfer_Settings} = "Настройка Транспорта";
1447$Lang{CfgEdit_Title_Ftp_Settings} = "Установки FTP";
1448$Lang{CfgEdit_Title_Smb_Settings} = "Установки Smb";
1449$Lang{CfgEdit_Title_Tar_Settings} = "Установки Tar";
1450$Lang{CfgEdit_Title_Rsync_Settings} = "Установки Rsync";
1451$Lang{CfgEdit_Title_Rsyncd_Settings} = "Установки Rsyncd";
1452$Lang{CfgEdit_Title_Archive_Settings} = "Установки Archive";
1453$Lang{CfgEdit_Title_Include_Exclude} = "Включить/Исключить";
1454$Lang{CfgEdit_Title_Smb_Paths_Commands} = "Пути/Команды Smb";
1455$Lang{CfgEdit_Title_Tar_Paths_Commands} = "Пути/Команды Tar";
1456$Lang{CfgEdit_Title_Rsync_Paths_Commands_Args} = "Пути/Команды/Аргументы Rsync";
1457$Lang{CfgEdit_Title_Rsyncd_Port_Args} = "Порты/Аргументы Rsyncd";
1458$Lang{CfgEdit_Title_Archive_Paths_Commands} = "Пути/Команды Archive";
1459$Lang{CfgEdit_Title_Schedule} = "Планировщик";
1460$Lang{CfgEdit_Title_Full_Backups} = "Полное Резервирование";
1461$Lang{CfgEdit_Title_Incremental_Backups} = "Инкрементальное Резервирование";
1462$Lang{CfgEdit_Title_Blackouts} = "Перерыв";
1463$Lang{CfgEdit_Title_Other} = "Прочее";
1464$Lang{CfgEdit_Title_Backup_Settings} = "Другое";
1465$Lang{CfgEdit_Title_Client_Lookup} = "Поиск Клиента";
1466$Lang{CfgEdit_Title_User_Commands} = "Пользовательские Команды";
1467$Lang{CfgEdit_Title_Hosts} = "Узлы";
1468
1469$Lang{CfgEdit_Hosts_Comment} = <<EOF;
1470Чтобы добавить новый узел, нажмите на кнопку "Добавить" и введите имя узла.
1471Чтобы задать новому узлу настройки от другого уже существующего узла,
1472введите название узла как НОВЫЙ_УЗЕЛ=СУЩЕСТВУЮЩИЙ_УЗЕЛ.
1473Таким же образом можно переназначить настройки и уже существующему узлу.
1474Для удаления узла нажмите на кнопку "Удалить".
1475Чтобы изменения вступили в силу, нажмите на кнопку "Сохранить".
1476Резервные копии удалённых узлов сохраняются. Поэтому если Вы удалили узел
1477случайно, то просто добавьте его опять.
1478Чтобы удалить и сами резервные копии узла, Вам надо вручную удалить
1479каталог \$topDir/pc/УЗЕЛ.
1480EOF
1481
1482$Lang{CfgEdit_Header_Main} = <<EOF;
1483\${h1("Редактирование Основных Настроек")}
1484EOF
1485
1486$Lang{CfgEdit_Header_Host} = <<EOF;
1487\${h1("Редактирование Настроек Узла \$host")}
1488<p>
1489Примечание: Поставьте галочку рядом с "Заменить", если хотите изменить значение параметра индивидуально для этого узла.
1490<p>
1491EOF
1492
1493$Lang{CfgEdit_Button_Save}     = "Сохранить";
1494$Lang{CfgEdit_Button_Insert}   = "Вставить";
1495$Lang{CfgEdit_Button_Delete}   = "Удалить";
1496$Lang{CfgEdit_Button_Add}      = "Добавить";
1497$Lang{CfgEdit_Button_Override} = "Заменить";
1498$Lang{CfgEdit_Button_New_Key}  = "New Key";
1499$Lang{CfgEdit_Button_New_Share} = "New ShareName or '*'";
1500
1501$Lang{CfgEdit_Error_No_Save}
1502            = "Ошибка: не сохранено из-за наличия ошибок";
1503$Lang{CfgEdit_Error__must_be_an_integer}
1504            = "Ошибка: \$var должно быть целым числом";
1505$Lang{CfgEdit_Error__must_be_real_valued_number}
1506            = "Ошибка: \$var должно быть действительным числом";
1507$Lang{CfgEdit_Error__entry__must_be_an_integer}
1508            = "Ошибка: \$var элемент \$k должен быть целым числом";
1509$Lang{CfgEdit_Error__entry__must_be_real_valued_number}
1510            = "Ошибка: \$var элемент \$k должен быть действительным числом";
1511$Lang{CfgEdit_Error__must_be_executable_program}
1512            = "Ошибка: \$var должно быть действительным путём исполняемой программы";
1513$Lang{CfgEdit_Error__must_be_valid_option}
1514            = "Ошибка: \$var должно быть допустимой опцией";
1515$Lang{CfgEdit_Error_Copy_host_does_not_exist}
1516            = "Копируемый узел \$copyHost отсутствует, создаётся узел \$fullHost. Удалите этот узел, если это не то, что Вам требуется.";
1517
1518$Lang{CfgEdit_Log_Copy_host_config}
1519            = "\$User copied config from host \$fromHost to \$host\n";
1520$Lang{CfgEdit_Log_Delete_param}
1521            = "\$User deleted \$p from \$conf\n";
1522$Lang{CfgEdit_Log_Add_param_value}
1523            = "\$User added \$p to \$conf, set to \$value\n";
1524$Lang{CfgEdit_Log_Change_param_value}
1525            = "\$User changed \$p in \$conf to \$valueNew from \$valueOld\n";
1526$Lang{CfgEdit_Log_Host_Delete}
1527            = "\$User deleted host \$host\n";
1528$Lang{CfgEdit_Log_Host_Change}
1529            = "\$User host \$host changed \$key from \$valueOld to \$valueNew\n";
1530$Lang{CfgEdit_Log_Host_Add}
1531            = "\$User added host \$host: \$value\n";
1532
1533#end of ru.pm
1534