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