aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/message_parser.php
blob: d6214c46140b496515e521182f55a2fdcf3f6391 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

if (!class_exists('bbcode'))
{
	// The following lines are for extensions which include message_parser.php
	// while $phpbb_root_path and $phpEx are out of the script scope
	// which may lead to the 'Undefined variable' and 'failed to open stream' errors
	if (!isset($phpbb_root_path))
	{
		global $phpbb_root_path;
	}

	if (!isset($phpEx))
	{
		global $phpEx;
	}

	include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
}

/**
* BBCODE FIRSTPASS
* BBCODE first pass class (functions for parsing messages for db storage)
*/
class bbcode_firstpass extends bbcode
{
	var $message = '';
	var $warn_msg = array();
	var $parsed_items = array();
	var $mode;

	/**
	* Parse BBCode
	*/
	function parse_bbcode()
	{
		if (!$this->bbcodes)
		{
			$this->bbcode_init();
		}

		global $user;

		$this->bbcode_bitfield = '';
		$bitfield = new bitfield();

		foreach ($this->bbcodes as $bbcode_name => $bbcode_data)
		{
			if (isset($bbcode_data['disabled']) && $bbcode_data['disabled'])
			{
				foreach ($bbcode_data['regexp'] as $regexp => $replacement)
				{
					if (preg_match($regexp, $this->message))
					{
						$this->warn_msg[] = sprintf($user->lang['UNAUTHORISED_BBCODE'] , '[' . $bbcode_name . ']');
						continue;
					}
				}
			}
			else
			{
				foreach ($bbcode_data['regexp'] as $regexp => $replacement)
				{
					// The pattern gets compiled and cached by the PCRE extension,
					// it should not demand recompilation
					if (preg_match($regexp, $this->message))
					{
						if (is_callable($replacement))
						{
							$this->message = preg_replace_callback($regexp, $replacement, $this->message);
						}
						else
						{
							$this->message = preg_replace($regexp, $replacement, $this->message);
						}
						$bitfield->set($bbcode_data['bbcode_id']);
					}
				}
			}
		}

		$this->bbcode_bitfield = $bitfield->get_base64();
	}

	/**
	* Prepare some bbcodes for better parsing
	*/
	function prepare_bbcodes()
	{
		// Ok, seems like users instead want the no-parsing of urls, smilies, etc. after and before and within quote tags being tagged as "not a bug".
		// Fine by me ;) Will ease our live... but do not come back and cry at us, we won't hear you.

		/* Add newline at the end and in front of each quote block to prevent parsing errors (urls, smilies, etc.)
		if (strpos($this->message, '[quote') !== false && strpos($this->message, '[/quote]') !== false)
		{
			$this->message = str_replace("\r\n", "\n", $this->message);

			// We strip newlines and spaces after and before quotes in quotes (trimming) and then add exactly one newline
			$this->message = preg_replace('#\[quote(=&quot;.*?&quot;)?\]\s*(.*?)\s*\[/quote\]#siu', '[quote\1]' . "\n" . '\2' ."\n[/quote]", $this->message);
		}
		*/

		// Add other checks which needs to be placed before actually parsing anything (be it bbcodes, smilies, urls...)
	}

	/**
	* Init bbcode data for later parsing
	*/
	function bbcode_init($allow_custom_bbcode = true)
	{
		global $phpbb_dispatcher;

		static $rowset;

		$bbcode_class = $this;

		// This array holds all bbcode data. BBCodes will be processed in this
		// order, so it is important to keep [code] in first position and
		// [quote] in second position.
		// To parse multiline URL we enable dotall option setting only for URL text
		// but not for link itself, thus [url][/url] is not affected.
		//
		// To perform custom validation in extension, use $this->validate_bbcode_by_extension()
		// method which accepts variable number of parameters
		$this->bbcodes = array(
			'code'			=> array('bbcode_id' => BBCODE_ID_CODE,	'regexp' => array('#\[code(?:=([a-z]+))?\](.+\[/code\])#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_code($match[1], $match[2]);
				}
			)),
			'quote'			=> array('bbcode_id' => BBCODE_ID_QUOTE,	'regexp' => array('#\[quote(?:=&quot;(.*?)&quot;)?\](.+)\[/quote\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_quote($match[0]);
				}
			)),
			'attachment'	=> array('bbcode_id' => BBCODE_ID_ATTACH,	'regexp' => array('#\[attachment=([0-9]+)\](.*?)\[/attachment\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_attachment($match[1], $match[2]);
				}
			)),
			'b'				=> array('bbcode_id' => BBCODE_ID_B,	'regexp' => array('#\[b\](.*?)\[/b\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_strong($match[1]);
				}
			)),
			'i'				=> array('bbcode_id' => BBCODE_ID_I,	'regexp' => array('#\[i\](.*?)\[/i\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_italic($match[1]);
				}
			)),
			'url'			=> array('bbcode_id' => BBCODE_ID_URL,	'regexp' => array('#\[url(=(.*))?\](?(1)((?s).*(?-s))|(.*))\[/url\]#uiU' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->validate_url($match[2], ($match[3]) ? $match[3] : $match[4]);
				}
			)),
			'img'			=> array('bbcode_id' => BBCODE_ID_IMG,	'regexp' => array('#\[img\](.*)\[/img\]#uiU' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_img($match[1]);
				}
			)),
			'size'			=> array('bbcode_id' => BBCODE_ID_SIZE,	'regexp' => array('#\[size=([\-\+]?\d+)\](.*?)\[/size\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_size($match[1], $match[2]);
				}
			)),
			'color'			=> array('bbcode_id' => BBCODE_ID_COLOR,	'regexp' => array('!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)\](.*?)\[/color\]!uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_color($match[1], $match[2]);
				}
			)),
			'u'				=> array('bbcode_id' => BBCODE_ID_U,	'regexp' => array('#\[u\](.*?)\[/u\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_underline($match[1]);
				}
			)),
			'list'			=> array('bbcode_id' => BBCODE_ID_LIST,	'regexp' => array('#\[list(?:=(?:[a-z0-9]|disc|circle|square))?].*\[/list]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_parse_list($match[0]);
				}
			)),
			'email'			=> array('bbcode_id' => BBCODE_ID_EMAIL,	'regexp' => array('#\[email=?(.*?)?\](.*?)\[/email\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->validate_email($match[1], $match[2]);
				}
			)),
			'flash'			=> array('bbcode_id' => BBCODE_ID_FLASH,	'regexp' => array('#\[flash=([0-9]+),([0-9]+)\](.*?)\[/flash\]#ui' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_flash($match[1], $match[2], $match[3]);
				}
			))
		);

		// Zero the parsed items array
		$this->parsed_items = array();

		foreach ($this->bbcodes as $tag => $bbcode_data)
		{
			$this->parsed_items[$tag] = 0;
		}

		if (!$allow_custom_bbcode)
		{
			return;
		}

		if (!is_array($rowset))
		{
			global $db;
			$rowset = array();

			$sql = 'SELECT *
				FROM ' . BBCODES_TABLE;
			$result = $db->sql_query($sql);

			while ($row = $db->sql_fetchrow($result))
			{
				$rowset[] = $row;
			}
			$db->sql_freeresult($result);
		}

		foreach ($rowset as $row)
		{
			$this->bbcodes[$row['bbcode_tag']] = array(
				'bbcode_id'	=> (int) $row['bbcode_id'],
				'regexp'	=> array($row['first_pass_match'] => str_replace('$uid', $this->bbcode_uid, $row['first_pass_replace']))
			);
		}

		$bbcodes = $this->bbcodes;

		/**
		* Event to modify the bbcode data for later parsing
		*
		* @event core.modify_bbcode_init
		* @var array	bbcodes		Array of bbcode data for use in parsing
		* @var array	rowset		Array of bbcode data from the database
		* @since 3.1.0-a3
		*/
		$vars = array('bbcodes', 'rowset');
		extract($phpbb_dispatcher->trigger_event('core.modify_bbcode_init', compact($vars)));

		$this->bbcodes = $bbcodes;
	}

	/**
	* Making some pre-checks for bbcodes as well as increasing the number of parsed items
	*/
	function check_bbcode($bbcode, &$in)
	{
		// when using the /e modifier, preg_replace slashes double-quotes but does not
		// seem to slash anything else
		$in = str_replace("\r\n", "\n", str_replace('\"', '"', $in));

		// Trimming here to make sure no empty bbcodes are parsed accidently
		if (trim($in) == '')
		{
			return false;
		}

		$this->parsed_items[$bbcode]++;

		return true;
	}

	/**
	* Transform some characters in valid bbcodes
	*/
	function bbcode_specialchars($text)
	{
		$str_from = array('<', '>', '[', ']', '.', ':');
		$str_to = array('&lt;', '&gt;', '&#91;', '&#93;', '&#46;', '&#58;');

		return str_replace($str_from, $str_to, $text);
	}

	/**
	* Parse size tag
	*/
	function bbcode_size($stx, $in)
	{
		global $user, $config;

		if (!$this->check_bbcode('size', $in))
		{
			return $in;
		}

		if ($config['max_' . $this->mode . '_font_size'] && $config['max_' . $this->mode . '_font_size'] < $stx)
		{
			$this->warn_msg[] = $user->lang('MAX_FONT_SIZE_EXCEEDED', (int) $config['max_' . $this->mode . '_font_size']);

			return '[size=' . $stx . ']' . $in . '[/size]';
		}

		// Do not allow size=0
		if ($stx <= 0)
		{
			return '[size=' . $stx . ']' . $in . '[/size]';
		}

		return '[size=' . $stx . ':' . $this->bbcode_uid . ']' . $in . '[/size:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse color tag
	*/
	function bbcode_color($stx, $in)
	{
		if (!$this->check_bbcode('color', $in))
		{
			return $in;
		}

		return '[color=' . $stx . ':' . $this->bbcode_uid . ']' . $in . '[/color:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse u tag
	*/
	function bbcode_underline($in)
	{
		if (!$this->check_bbcode('u', $in))
		{
			return $in;
		}

		return '[u:' . $this->bbcode_uid . ']' . $in . '[/u:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse b tag
	*/
	function bbcode_strong($in)
	{
		if (!$this->check_bbcode('b', $in))
		{
			return $in;
		}

		return '[b:' . $this->bbcode_uid . ']' . $in . '[/b:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse i tag
	*/
	function bbcode_italic($in)
	{
		if (!$this->check_bbcode('i', $in))
		{
			return $in;
		}

		return '[i:' . $this->bbcode_uid . ']' . $in . '[/i:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse img tag
	*/
	function bbcode_img($in)
	{
		global $user, $config;

		if (!$this->check_bbcode('img', $in))
		{
			return $in;
		}

		$in = trim($in);
		$error = false;

		$in = str_replace(' ', '%20', $in);

		// Checking urls
		if (!preg_match('#^' . get_preg_expression('url') . '$#iu', $in) && !preg_match('#^' . get_preg_expression('www_url') . '$#iu', $in))
		{
			return '[img]' . $in . '[/img]';
		}

		// Try to cope with a common user error... not specifying a protocol but only a subdomain
		if (!preg_match('#^[a-z0-9]+://#i', $in))
		{
			$in = 'http://' . $in;
		}

		if ($config['max_' . $this->mode . '_img_height'] || $config['max_' . $this->mode . '_img_width'])
		{
			$imagesize = new \FastImageSize\FastImageSize();
			$size_info = $imagesize->getImageSize(htmlspecialchars_decode($in));

			if ($size_info === false)
			{
				$error = true;
				$this->warn_msg[] = $user->lang['UNABLE_GET_IMAGE_SIZE'];
			}
			else
			{
				if ($config['max_' . $this->mode . '_img_height'] && $config['max_' . $this->mode . '_img_height'] < $size_info['height'])
				{
					$error = true;
					$this->warn_msg[] = $user->lang('MAX_IMG_HEIGHT_EXCEEDED', (int) $config['max_' . $this->mode . '_img_height']);
				}

				if ($config['max_' . $this->mode . '_img_width'] && $config['max_' . $this->mode . '_img_width'] < $size_info['width'])
				{
					$error = true;
					$this->warn_msg[] = $user->lang('MAX_IMG_WIDTH_EXCEEDED', (int) $config['max_' . $this->mode . '_img_width']);
				}
			}
		}

		if ($error || $this->path_in_domain($in))
		{
			return '[img]' . $in . '[/img]';
		}

		return '[img:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($in) . '[/img:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse flash tag
	*/
	function bbcode_flash($width, $height, $in)
	{
		global $user, $config;

		if (!$this->check_bbcode('flash', $in))
		{
			return $in;
		}

		$in = trim($in);
		$error = false;

		// Do not allow 0-sizes generally being entered
		if ($width <= 0 || $height <= 0)
		{
			return '[flash=' . $width . ',' . $height . ']' . $in . '[/flash]';
		}

		$in = str_replace(' ', '%20', $in);

		// Make sure $in is a URL.
		if (!preg_match('#^' . get_preg_expression('url') . '$#iu', $in) &&
			!preg_match('#^' . get_preg_expression('www_url') . '$#iu', $in))
		{
			return '[flash=' . $width . ',' . $height . ']' . $in . '[/flash]';
		}

		// Apply the same size checks on flash files as on images
		if ($config['max_' . $this->mode . '_img_height'] || $config['max_' . $this->mode . '_img_width'])
		{
			if ($config['max_' . $this->mode . '_img_height'] && $config['max_' . $this->mode . '_img_height'] < $height)
			{
				$error = true;
				$this->warn_msg[] = $user->lang('MAX_FLASH_HEIGHT_EXCEEDED', (int) $config['max_' . $this->mode . '_img_height']);
			}

			if ($config['max_' . $this->mode . '_img_width'] && $config['max_' . $this->mode . '_img_width'] < $width)
			{
				$error = true;
				$this->warn_msg[] = $user->lang('MAX_FLASH_WIDTH_EXCEEDED', (int) $config['max_' . $this->mode . '_img_width']);
			}
		}

		if ($error || $this->path_in_domain($in))
		{
			return '[flash=' . $width . ',' . $height . ']' . $in . '[/flash]';
		}

		return '[flash=' . $width . ',' . $height . ':' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($in) . '[/flash:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse inline attachments [ia]
	*/
	function bbcode_attachment($stx, $in)
	{
		if (!$this->check_bbcode('attachment', $in))
		{
			return $in;
		}

		return '[attachment=' . $stx . ':' . $this->bbcode_uid . ']<!-- ia' . $stx . ' -->' . trim($in) . '<!-- ia' . $stx . ' -->[/attachment:' . $this->bbcode_uid . ']';
	}

	/**
	* Parse code text from code tag
	* @access private
	*/
	function bbcode_parse_code($stx, &$code)
	{
		switch (strtolower($stx))
		{
			case 'php':

				$remove_tags = false;

				$str_from = array('&lt;', '&gt;', '&#91;', '&#93;', '&#46;', '&#58;', '&#058;');
				$str_to = array('<', '>', '[', ']', '.', ':', ':');
				$code = str_replace($str_from, $str_to, $code);

				if (!preg_match('/\<\?.*?\?\>/is', $code))
				{
					$remove_tags = true;
					$code = "<?php $code ?>";
				}

				$conf = array('highlight.bg', 'highlight.comment', 'highlight.default', 'highlight.html', 'highlight.keyword', 'highlight.string');
				foreach ($conf as $ini_var)
				{
					@ini_set($ini_var, str_replace('highlight.', 'syntax', $ini_var));
				}

				// Because highlight_string is specialcharing the text (but we already did this before), we have to reverse this in order to get correct results
				$code = htmlspecialchars_decode($code);
				$code = highlight_string($code, true);

				$str_from = array('<span style="color: ', '<font color="syntax', '</font>', '<code>', '</code>','[', ']', '.', ':');
				$str_to = array('<span class="', '<span class="syntax', '</span>', '', '', '&#91;', '&#93;', '&#46;', '&#58;');

				if ($remove_tags)
				{
					$str_from[] = '<span class="syntaxdefault">&lt;?php </span>';
					$str_to[] = '';
					$str_from[] = '<span class="syntaxdefault">&lt;?php&nbsp;';
					$str_to[] = '<span class="syntaxdefault">';
				}

				$code = str_replace($str_from, $str_to, $code);
				$code = preg_replace('#^(<span class="[a-z_]+">)\n?(.*?)\n?(</span>)$#is', '$1$2$3', $code);

				if ($remove_tags)
				{
					$code = preg_replace('#(<span class="[a-z]+">)?\?&gt;(</span>)#', '$1&nbsp;$2', $code);
				}

				$code = preg_replace('#^<span class="[a-z]+"><span class="([a-z]+)">(.*)</span></span>#s', '<span class="$1">$2</span>', $code);
				$code = preg_replace('#(?:\s++|&nbsp;)*+</span>$#u', '</span>', $code);

				// remove newline at the end
				if (!empty($code) && substr($code, -1) == "\n")
				{
					$code = substr($code, 0, -1);
				}

				return "[code=$stx:" . $this->bbcode_uid . ']' . $code . '[/code:' . $this->bbcode_uid . ']';
			break;

			default:
				return '[code:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($code) . '[/code:' . $this->bbcode_uid . ']';
			break;
		}
	}

	/**
	* Parse code tag
	* Expects the argument to start right after the opening [code] tag and to end with [/code]
	*/
	function bbcode_code($stx, $in)
	{
		if (!$this->check_bbcode('code', $in))
		{
			return $in;
		}

		// We remove the hardcoded elements from the code block here because it is not used in code blocks
		// Having it here saves us one preg_replace per message containing [code] blocks
		// Additionally, magic url parsing should go after parsing bbcodes, but for safety those are stripped out too...
		$htm_match = get_preg_expression('bbcode_htm');
		unset($htm_match[4], $htm_match[5]);
		$htm_replace = array('\1', '\1', '\2', '\1');

		$out = $code_block = '';
		$open = 1;

		while ($in)
		{
			// Determine position and tag length of next code block
			preg_match('#(.*?)(\[code(?:=([a-z]+))?\])(.+)#is', $in, $buffer);
			$pos = (isset($buffer[1])) ? strlen($buffer[1]) : false;
			$tag_length = (isset($buffer[2])) ? strlen($buffer[2]) : false;

			// Determine position of ending code tag
			$pos2 = stripos($in, '[/code]');

			// Which is the next block, ending code or code block
			if ($pos !== false && $pos < $pos2)
			{
				// Open new block
				if (!$open)
				{
					$out .= substr($in, 0, $pos);
					$in = substr($in, $pos);
					$stx = (isset($buffer[3])) ? $buffer[3] : '';
					$code_block = '';
				}
				else
				{
					// Already opened block, just append to the current block
					$code_block .= substr($in, 0, $pos) . ((isset($buffer[2])) ? $buffer[2] : '');
					$in = substr($in, $pos);
				}

				$in = substr($in, $tag_length);
				$open++;
			}
			else
			{
				// Close the block
				if ($open == 1)
				{
					$code_block .= substr($in, 0, $pos2);
					$code_block = preg_replace($htm_match, $htm_replace, $code_block);

					// Parse this code block
					$out .= $this->bbcode_parse_code($stx, $code_block);
					$code_block = '';
					$open--;
				}
				else if ($open)
				{
					// Close one open tag... add to the current code block
					$code_block .= substr($in, 0, $pos2 + 7);
					$open--;
				}
				else
				{
					// end code without opening code... will be always outside code block
					$out .= substr($in, 0, $pos2 + 7);
				}

				$in = substr($in, $pos2 + 7);
			}
		}

		// if now $code_block has contents we need to parse the remaining code while removing the last closing tag to match up.
		if ($code_block)
		{
			$code_block = substr($code_block, 0, -7);
			$code_block = preg_replace($htm_match, $htm_replace, $code_block);

			$out .= $this->bbcode_parse_code($stx, $code_block);
		}

		return $out;
	}

	/**
	* Parse list bbcode
	* Expects the argument to start with a tag
	*/
	function bbcode_parse_list($in)
	{
		if (!$this->check_bbcode('list', $in))
		{
			return $in;
		}

		// $tok holds characters to stop at. Since the string starts with a '[' we'll get everything up to the first ']' which should be the opening [list] tag
		$tok = ']';
		$out = '[';

		// First character is [
		$in = substr($in, 1);
		$list_end_tags = $item_end_tags = array();

		do
		{
			$pos = strlen($in);

			for ($i = 0, $tok_len = strlen($tok); $i < $tok_len; ++$i)
			{
				$tmp_pos = strpos($in, $tok[$i]);

				if ($tmp_pos !== false && $tmp_pos < $pos)
				{
					$pos = $tmp_pos;
				}
			}

			$buffer = substr($in, 0, $pos);
			$tok = $in[$pos];

			$in = substr($in, $pos + 1);

			if ($tok == ']')
			{
				// if $tok is ']' the buffer holds a tag
				if (strtolower($buffer) == '/list' && count($list_end_tags))
				{
					// valid [/list] tag, check nesting so that we don't hit false positives
					if (count($item_end_tags) && count($item_end_tags) >= count($list_end_tags))
					{
						// current li tag has not been closed
						$out = preg_replace('/\n?\[$/', '[', $out) . array_pop($item_end_tags) . '][';
					}

					$out .= array_pop($list_end_tags) . ']';
					$tok = '[';
				}
				else if (preg_match('#^list(=[0-9a-z]+)?$#i', $buffer, $m))
				{
					// sub-list, add a closing tag
					if (empty($m[1]) || preg_match('/^=(?:disc|square|circle)$/i', $m[1]))
					{
						array_push($list_end_tags, '/list:u:' . $this->bbcode_uid);
					}
					else
					{
						array_push($list_end_tags, '/list:o:' . $this->bbcode_uid);
					}
					$out .= 'list' . substr($buffer, 4) . ':' . $this->bbcode_uid . ']';
					$tok = '[';
				}
				else
				{
					if (($buffer == '*' || substr($buffer, -2) == '[*') && count($list_end_tags))
					{
						// the buffer holds a bullet tag and we have a [list] tag open
						if (count($item_end_tags) >= count($list_end_tags))
						{
							if (substr($buffer, -2) == '[*')
							{
								$out .= substr($buffer, 0, -2) . '[';
							}
							// current li tag has not been closed
							if (preg_match('/\n\[$/', $out, $m))
							{
								$out = preg_replace('/\n\[$/', '[', $out);
								$buffer = array_pop($item_end_tags) . "]\n[*:" . $this->bbcode_uid;
							}
							else
							{
								$buffer = array_pop($item_end_tags) . '][*:' . $this->bbcode_uid;
							}
						}
						else
						{
							$buffer = '*:' . $this->bbcode_uid;
						}

						$item_end_tags[] = '/*:m:' . $this->bbcode_uid;
					}
					else if ($buffer == '/*')
					{
						array_pop($item_end_tags);
						$buffer = '/*:' . $this->bbcode_uid;
					}

					$out .= $buffer . $tok;
					$tok = '[]';
				}
			}
			else
			{
				// Not within a tag, just add buffer to the return string
				$out .= $buffer . $tok;
				$tok = ($tok == '[') ? ']' : '[]';
			}
		}
		while ($in);

		// do we have some tags open? close them now
		if (count($item_end_tags))
		{
			$out .= '[' . implode('][', $item_end_tags) . ']';
		}
		if (count($list_end_tags))
		{
			$out .= '[' . implode('][', $list_end_tags) . ']';
		}

		return $out;
	}

	/**
	* Parse quote bbcode
	* Expects the argument to start with a tag
	*/
	function bbcode_quote($in)
	{
		$in = str_replace("\r\n", "\n", str_replace('\"', '"', trim($in)));

		if (!$in)
		{
			return '';
		}

		// To let the parser not catch tokens within quote_username quotes we encode them before we start this...
		$in = preg_replace_callback('#quote=&quot;(.*?)&quot;\]#i', function ($match) {
			return 'quote=&quot;' . str_replace(array('[', ']', '\\\"'), array('&#91;', '&#93;', '\"'), $match[1]) . '&quot;]';
		}, $in);

		$tok = ']';
		$out = '[';

		$in = substr($in, 1);
		$close_tags = $error_ary = array();
		$buffer = '';

		do
		{
			$pos = strlen($in);
			for ($i = 0, $tok_len = strlen($tok); $i < $tok_len; ++$i)
			{
				$tmp_pos = strpos($in, $tok[$i]);
				if ($tmp_pos !== false && $tmp_pos < $pos)
				{
					$pos = $tmp_pos;
				}
			}

			$buffer .= substr($in, 0, $pos);
			$tok = $in[$pos];
			$in = substr($in, $pos + 1);

			if ($tok == ']')
			{
				if (strtolower($buffer) == '/quote' && count($close_tags) && substr($out, -1, 1) == '[')
				{
					// we have found a closing tag
					$out .= array_pop($close_tags) . ']';
					$tok = '[';
					$buffer = '';

					/* Add space at the end of the closing tag if not happened before to allow following urls/smilies to be parsed correctly
					* Do not try to think for the user. :/ Do not parse urls/smilies if there is no space - is the same as with other bbcodes too.
					* Also, we won't have any spaces within $in anyway, only adding up spaces -> #10982
					if (!$in || $in[0] !== ' ')
					{
						$out .= ' ';
					}*/
				}
				else if (preg_match('#^quote(?:=&quot;(.*?)&quot;)?$#is', $buffer, $m) && substr($out, -1, 1) == '[')
				{
					$this->parsed_items['quote']++;
					array_push($close_tags, '/quote:' . $this->bbcode_uid);

					if (isset($m[1]) && $m[1])
					{
						$username = str_replace(array('&#91;', '&#93;'), array('[', ']'), $m[1]);
						$username = preg_replace('#\[(?!b|i|u|color|url|email|/b|/i|/u|/color|/url|/email)#iU', '&#91;$1', $username);

						$end_tags = array();
						$error = false;

						preg_match_all('#\[((?:/)?(?:[a-z]+))#i', $username, $tags);
						foreach ($tags[1] as $tag)
						{
							if ($tag[0] != '/')
							{
								$end_tags[] = '/' . $tag;
							}
							else
							{
								$end_tag = array_pop($end_tags);
								$error = ($end_tag != $tag) ? true : false;
							}
						}

						if ($error)
						{
							$username = $m[1];
						}

						$out .= 'quote=&quot;' . $username . '&quot;:' . $this->bbcode_uid . ']';
					}
					else
					{
						$out .= 'quote:' . $this->bbcode_uid . ']';
					}

					$tok = '[';
					$buffer = '';
				}
				else if (preg_match('#^quote=&quot;(.*?)#is', $buffer, $m))
				{
					// the buffer holds an invalid opening tag
					$buffer .= ']';
				}
				else
				{
					$out .= $buffer . $tok;
					$tok = '[]';
					$buffer = '';
				}
			}
			else
			{
/**
*				Old quote code working fine, but having errors listed in bug #3572
*
*				$out .= $buffer . $tok;
*				$tok = ($tok == '[') ? ']' : '[]';
*				$buffer = '';
*/

				$out .= $buffer . $tok;

				if ($tok == '[')
				{
					// Search the text for the next tok... if an ending quote comes first, then change tok to []
					$pos1 = stripos($in, '[/quote');
					// If the token ] comes first, we change it to ]
					$pos2 = strpos($in, ']');
					// If the token [ comes first, we change it to [
					$pos3 = strpos($in, '[');

					if ($pos1 !== false && ($pos2 === false || $pos1 < $pos2) && ($pos3 === false || $pos1 < $pos3))
					{
						$tok = '[]';
					}
					else if ($pos3 !== false && ($pos2 === false || $pos3 < $pos2))
					{
						$tok = '[';
					}
					else
					{
						$tok = ']';
					}
				}
				else
				{
					$tok = '[]';
				}
				$buffer = '';
			}
		}
		while ($in);

		$out .= $buffer;

		if (count($close_tags))
		{
			$out .= '[' . implode('][', $close_tags) . ']';
		}

		foreach ($error_ary as $error_msg)
		{
			$this->warn_msg[] = $error_msg;
		}

		return $out;
	}

	/**
	* Validate email
	*/
	function validate_email($var1, $var2)
	{
		$var1 = str_replace("\r\n", "\n", str_replace('\"', '"', trim($var1)));
		$var2 = str_replace("\r\n", "\n", str_replace('\"', '"', trim($var2)));

		$txt = $var2;
		$email = ($var1) ? $var1 : $var2;

		$validated = true;

		if (!preg_match('/^' . get_preg_expression('email') . '$/i', $email))
		{
			$validated = false;
		}

		if (!$validated)
		{
			return '[email' . (($var1) ? "=$var1" : '') . ']' . $var2 . '[/email]';
		}

		$this->parsed_items['email']++;

		if ($var1)
		{
			$retval = '[email=' . $this->bbcode_specialchars($email) . ':' . $this->bbcode_uid . ']' . $txt . '[/email:' . $this->bbcode_uid . ']';
		}
		else
		{
			$retval = '[email:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($email) . '[/email:' . $this->bbcode_uid . ']';
		}

		return $retval;
	}

	/**
	* Validate url
	*
	* @param string $var1 optional url parameter for url bbcode: [url(=$var1)]$var2[/url]
	* @param string $var2 url bbcode content: [url(=$var1)]$var2[/url]
	*/
	function validate_url($var1, $var2)
	{
		$var1 = str_replace("\r\n", "\n", str_replace('\"', '"', trim($var1)));
		$var2 = str_replace("\r\n", "\n", str_replace('\"', '"', trim($var2)));

		$url = ($var1) ? $var1 : $var2;

		if ($var1 && !$var2)
		{
			$var2 = $var1;
		}

		if (!$url)
		{
			return '[url' . (($var1) ? '=' . $var1 : '') . ']' . $var2 . '[/url]';
		}

		$valid = false;

		$url = str_replace(' ', '%20', $url);

		// Checking urls
		if (preg_match('#^' . get_preg_expression('url') . '$#iu', $url) ||
			preg_match('#^' . get_preg_expression('www_url') . '$#iu', $url) ||
			preg_match('#^' . preg_quote(generate_board_url(), '#') . get_preg_expression('relative_url') . '$#iu', $url))
		{
			$valid = true;
		}

		if ($valid)
		{
			$this->parsed_items['url']++;

			// if there is no scheme, then add http schema
			if (!preg_match('#^[a-z][a-z\d+\-.]*:/{2}#i', $url))
			{
				$url = 'http://' . $url;
			}

			// Is this a link to somewhere inside this board? If so then remove the session id from the url
			if (strpos($url, generate_board_url()) !== false && strpos($url, 'sid=') !== false)
			{
				$url = preg_replace('/(&amp;|\?)sid=[0-9a-f]{32}&amp;/', '\1', $url);
				$url = preg_replace('/(&amp;|\?)sid=[0-9a-f]{32}$/', '', $url);
				$url = append_sid($url);
			}

			return ($var1) ? '[url=' . $this->bbcode_specialchars($url) . ':' . $this->bbcode_uid . ']' . $var2 . '[/url:' . $this->bbcode_uid . ']' : '[url:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($url) . '[/url:' . $this->bbcode_uid . ']';
		}

		return '[url' . (($var1) ? '=' . $var1 : '') . ']' . $var2 . '[/url]';
	}

	/**
	* Check if url is pointing to this domain/script_path/php-file
	*
	* @param string $url the url to check
	* @return true if the url is pointing to this domain/script_path/php-file, false if not
	*
	* @access private
	*/
	function path_in_domain($url)
	{
		global $config, $phpEx, $user;

		if ($config['force_server_vars'])
		{
			$check_path = !empty($config['script_path']) ? $config['script_path'] : '/';
		}
		else
		{
			$check_path = ($user->page['root_script_path'] != '/') ? substr($user->page['root_script_path'], 0, -1) : '/';
		}

		// Is the user trying to link to a php file in this domain and script path?
		if (strpos($url, ".{$phpEx}") !== false && strpos($url, $check_path) !== false)
		{
			$server_name = $user->host;

			// Forcing server vars is the only way to specify/override the protocol
			if ($config['force_server_vars'] || !$server_name)
			{
				$server_name = $config['server_name'];
			}

			// Check again in correct order...
			$pos_ext = strpos($url, ".{$phpEx}");
			$pos_path = strpos($url, $check_path);
			$pos_domain = strpos($url, $server_name);

			if ($pos_domain !== false && $pos_path >= $pos_domain && $pos_ext >= $pos_path)
			{
				// Ok, actually we allow linking to some files (this may be able to be extended in some way later...)
				if (strpos($url, '/' . $check_path . '/download/file.' . $phpEx) !== 0)
				{
					return false;
				}

				return true;
			}
		}

		return false;
	}
}

/**
* Main message parser for posting, pm, etc. takes raw message
* and parses it for attachments, bbcode and smilies
*/
class parse_message extends bbcode_firstpass
{
	var $attachment_data = array();
	var $filename_data = array();

	// Helps ironing out user error
	var $message_status = '';

	var $allow_img_bbcode = true;
	var $allow_flash_bbcode = true;
	var $allow_quote_bbcode = true;
	var $allow_url_bbcode = true;

	/**
	* The plupload object used for dealing with attachments
	* @var \phpbb\plupload\plupload
	*/
	protected $plupload;

	/**
	* Init - give message here or manually
	*/
	function __construct($message = '')
	{
		// Init BBCode UID
		$this->bbcode_uid = substr(base_convert(unique_id(), 16, 36), 0, BBCODE_UID_LEN);
		$this->message = $message;
	}

	/**
	* Parse Message
	*/
	function parse($allow_bbcode, $allow_magic_url, $allow_smilies, $allow_img_bbcode = true, $allow_flash_bbcode = true, $allow_quote_bbcode = true, $allow_url_bbcode = true, $update_this_message = true, $mode = 'post')
	{
		global $config, $user, $phpbb_dispatcher, $phpbb_container;

		$this->mode = $mode;

		foreach (array('chars', 'smilies', 'urls', 'font_size', 'img_height', 'img_width') as $key)
		{
			if (!isset($config['max_' . $mode . '_' . $key]))
			{
				$config['max_' . $mode . '_' . $key] = 0;
			}
		}

		$this->allow_img_bbcode = $allow_img_bbcode;
		$this->allow_flash_bbcode = $allow_flash_bbcode;
		$this->allow_quote_bbcode = $allow_quote_bbcode;
		$this->allow_url_bbcode = $allow_url_bbcode;

		// If false, then $this->message won't be altered, the text will be returned instead.
		if (!$update_this_message)
		{
			$tmp_message = $this->message;
			$return_message = &$this->message;
		}

		if ($this->message_status == 'display')
		{
			$this->decode_message();
		}

		// Store message length...
		$message_length = ($mode == 'post') ? utf8_strlen($this->message) : utf8_strlen(preg_replace('#\[\/?[a-z\*\+\-]+(=[\S]+)?\]#ius', ' ', $this->message));

		// Maximum message length check. 0 disables this check completely.
		if ((int) $config['max_' . $mode . '_chars'] > 0 && $message_length > (int) $config['max_' . $mode . '_chars'])
		{
			$this->warn_msg[] = $user->lang('CHARS_' . strtoupper($mode) . '_CONTAINS', $message_length) . '<br />' . $user->lang('TOO_MANY_CHARS_LIMIT', (int) $config['max_' . $mode . '_chars']);
			return (!$update_this_message) ? $return_message : $this->warn_msg;
		}

		// Minimum message length check for post only
		if ($mode === 'post')
		{
			if (!$message_length || $message_length < (int) $config['min_post_chars'])
			{
				$this->warn_msg[] = (!$message_length) ? $user->lang['TOO_FEW_CHARS'] : ($user->lang('CHARS_POST_CONTAINS', $message_length) . '<br />' . $user->lang('TOO_FEW_CHARS_LIMIT', (int) $config['min_post_chars']));
				return (!$update_this_message) ? $return_message : $this->warn_msg;
			}
		}

		/**
		* This event can be used for additional message checks/cleanup before parsing
		*
		* @event core.message_parser_check_message
		* @var bool		allow_bbcode			Do we allow BBCodes
		* @var bool		allow_magic_url			Do we allow magic urls
		* @var bool		allow_smilies			Do we allow smilies
		* @var bool		allow_img_bbcode		Do we allow image BBCode
		* @var bool		allow_flash_bbcode		Do we allow flash BBCode
		* @var bool		allow_quote_bbcode		Do we allow quote BBCode
		* @var bool		allow_url_bbcode		Do we allow url BBCode
		* @var bool		update_this_message		Do we alter the parsed message
		* @var string	mode					Posting mode
		* @var string	message					The message text to parse
		* @var string	bbcode_bitfield			The bbcode_bitfield before parsing
		* @var string	bbcode_uid				The bbcode_uid before parsing
		* @var bool		return					Do we return after the event is triggered if $warn_msg is not empty
		* @var array	warn_msg				Array of the warning messages
		* @since 3.1.2-RC1
		* @changed 3.1.3-RC1 Added vars $bbcode_bitfield and $bbcode_uid
		*/
		$message = $this->message;
		$warn_msg = $this->warn_msg;
		$return = false;
		$bbcode_bitfield = $this->bbcode_bitfield;
		$bbcode_uid = $this->bbcode_uid;
		$vars = array(
			'allow_bbcode',
			'allow_magic_url',
			'allow_smilies',
			'allow_img_bbcode',
			'allow_flash_bbcode',
			'allow_quote_bbcode',
			'allow_url_bbcode',
			'update_this_message',
			'mode',
			'message',
			'bbcode_bitfield',
			'bbcode_uid',
			'return',
			'warn_msg',
		);
		extract($phpbb_dispatcher->trigger_event('core.message_parser_check_message', compact($vars)));
		$this->message = $message;
		$this->warn_msg = $warn_msg;
		$this->bbcode_bitfield = $bbcode_bitfield;
		$this->bbcode_uid = $bbcode_uid;
		if ($return && !empty($this->warn_msg))
		{
			return (!$update_this_message) ? $return_message : $this->warn_msg;
		}

		// Get the parser
		$parser = $phpbb_container->get('text_formatter.parser');

		// Set the parser's options
		($allow_bbcode)       ? $parser->enable_bbcodes()       : $parser->disable_bbcodes();
		($allow_magic_url)    ? $parser->enable_magic_url()     : $parser->disable_magic_url();
		($allow_smilies)      ? $parser->enable_smilies()       : $parser->disable_smilies();
		($allow_img_bbcode)   ? $parser->enable_bbcode('img')   : $parser->disable_bbcode('img');
		($allow_flash_bbcode) ? $parser->enable_bbcode('flash') : $parser->disable_bbcode('flash');
		($allow_quote_bbcode) ? $parser->enable_bbcode('quote') : $parser->disable_bbcode('quote');
		($allow_url_bbcode)   ? $parser->enable_bbcode('url')   : $parser->disable_bbcode('url');

		// Set some config values
		$parser->set_vars(array(
			'max_font_size'  => $config['max_' . $this->mode . '_font_size'],
			'max_img_height' => $config['max_' . $this->mode . '_img_height'],
			'max_img_width'  => $config['max_' . $this->mode . '_img_width'],
			'max_smilies'    => $config['max_' . $this->mode . '_smilies'],
			'max_urls'       => $config['max_' . $this->mode . '_urls']
		));

		// Parse this message
		$this->message = $parser->parse(htmlspecialchars_decode($this->message, ENT_QUOTES));

		// Remove quotes that are nested too deep
		if ($config['max_quote_depth'] > 0)
		{
			$this->remove_nested_quotes($config['max_quote_depth']);
		}

		// Check for "empty" message. We do not check here for maximum length, because bbcode, smilies, etc. can add to the length.
		// The maximum length check happened before any parsings.
		if ($mode === 'post' && utf8_clean_string($this->message) === '')
		{
			$this->warn_msg[] = $user->lang['TOO_FEW_CHARS'];
			return (!$update_this_message) ? $return_message : $this->warn_msg;
		}

		// Remove quotes that are nested too deep
		if ($config['max_quote_depth'] > 0)
		{
			$this->message = $phpbb_container->get('text_formatter.utils')->remove_bbcode(
				$this->message,
				'quote',
				$config['max_quote_depth']
			);
		}

		// Check for errors
		$errors = $parser->get_errors();
		if ($errors)
		{
			foreach ($errors as $i => $args)
			{
				// Translate each error with $user->lang()
				$errors[$i] = call_user_func_array(array($user, 'lang'), $args);
			}
			$this->warn_msg = array_merge($this->warn_msg, $errors);

			return (!$update_this_message) ? $return_message : $this->warn_msg;
		}

		if (!$update_this_message)
		{
			unset($this->message);
			$this->message = $tmp_message;
			return $return_message;
		}

		$this->message_status = 'parsed';
		return false;
	}

	/**
	* Formatting text for display
	*/
	function format_display($allow_bbcode, $allow_magic_url, $allow_smilies, $update_this_message = true)
	{
		global $phpbb_container, $phpbb_dispatcher;

		// If false, then the parsed message get returned but internal message not processed.
		if (!$update_this_message)
		{
			$tmp_message = $this->message;
			$return_message = &$this->message;
		}

		$text = $this->message;
		$uid = $this->bbcode_uid;

		/**
		* Event to modify the text before it is parsed
		*
		* @event core.modify_format_display_text_before
		* @var string	text				The message text to parse
		* @var string	uid					The bbcode uid
		* @var bool		allow_bbcode		Do we allow bbcodes
		* @var bool		allow_magic_url		Do we allow magic urls
		* @var bool		allow_smilies		Do we allow smilies
		* @var bool		update_this_message	Do we update the internal message
		*									with the parsed result
		* @since 3.1.6-RC1
		*/
		$vars = array('text', 'uid', 'allow_bbcode', 'allow_magic_url', 'allow_smilies', 'update_this_message');
		extract($phpbb_dispatcher->trigger_event('core.modify_format_display_text_before', compact($vars)));

		$this->message = $text;
		$this->bbcode_uid = $uid;
		unset($text, $uid);

		// NOTE: message_status is unreliable for detecting unparsed text because some callers
		//       change $this->message without resetting $this->message_status to 'plain' so we
		//       inspect the message instead
		//if ($this->message_status == 'plain')
		if (!preg_match('/^<[rt][ >]/', $this->message))
		{
			// Force updating message - of course.
			$this->parse($allow_bbcode, $allow_magic_url, $allow_smilies, $this->allow_img_bbcode, $this->allow_flash_bbcode, $this->allow_quote_bbcode, $this->allow_url_bbcode, true);
		}

		// There's a bug when previewing a topic with no poll, because the empty title of the poll
		// gets parsed but $this->message still ends up empty. This fixes it, until a proper fix is
		// devised
		if ($this->message === '')
		{
			$this->message = $phpbb_container->get('text_formatter.parser')->parse($this->message);
		}

		$this->message = $phpbb_container->get('text_formatter.renderer')->render($this->message);

		$text = $this->message;
		$uid = $this->bbcode_uid;

		/**
		* Event to modify the text after it is parsed
		*
		* @event core.modify_format_display_text_after
		* @var string	text				The message text to parse
		* @var string	uid					The bbcode uid
		* @var bool		allow_bbcode		Do we allow bbcodes
		* @var bool		allow_magic_url		Do we allow magic urls
		* @var bool		allow_smilies		Do we allow smilies
		* @var bool		update_this_message	Do we update the internal message
		*									with the parsed result
		* @since 3.1.0-a3
		*/
		$vars = array('text', 'uid', 'allow_bbcode', 'allow_magic_url', 'allow_smilies', 'update_this_message');
		extract($phpbb_dispatcher->trigger_event('core.modify_format_display_text_after', compact($vars)));

		$this->message = $text;
		$this->bbcode_uid = $uid;

		if (!$update_this_message)
		{
			unset($this->message);
			$this->message = $tmp_message;
			return $return_message;
		}

		$this->message_status = 'display';
		return false;
	}

	/**
	* Decode message to be placed back into form box
	*/
	function decode_message($custom_bbcode_uid = '', $update_this_message = true)
	{
		// If false, then the parsed message get returned but internal message not processed.
		if (!$update_this_message)
		{
			$tmp_message = $this->message;
			$return_message = &$this->message;
		}

		($custom_bbcode_uid) ? decode_message($this->message, $custom_bbcode_uid) : decode_message($this->message, $this->bbcode_uid);

		if (!$update_this_message)
		{
			unset($this->message);
			$this->message = $tmp_message;
			return $return_message;
		}

		$this->message_status = 'plain';
		return false;
	}

	/**
	* Replace magic urls of form http://xxx.xxx., www.xxx. and xxx@xxx.xxx.
	* Cuts down displayed size of link if over 50 chars, turns absolute links
	* into relative versions when the server/script path matches the link
	*/
	function magic_url($server_url)
	{
		// We use the global make_clickable function
		$this->message = make_clickable($this->message, $server_url);
	}

	/**
	* Parse Smilies
	*/
	function smilies($max_smilies = 0)
	{
		global $db, $user;
		static $match;
		static $replace;

		// See if the static arrays have already been filled on an earlier invocation
		if (!is_array($match))
		{
			$match = $replace = array();

			// NOTE: obtain_* function? chaching the table contents?

			// For now setting the ttl to 10 minutes
			switch ($db->get_sql_layer())
			{
				case 'mssql_odbc':
				case 'mssqlnative':
					$sql = 'SELECT *
						FROM ' . SMILIES_TABLE . '
						ORDER BY LEN(code) DESC';
				break;

				// LENGTH supported by MySQL, IBM DB2, Oracle and Access for sure...
				default:
					$sql = 'SELECT *
						FROM ' . SMILIES_TABLE . '
						ORDER BY LENGTH(code) DESC';
				break;
			}
			$result = $db->sql_query($sql, 600);

			while ($row = $db->sql_fetchrow($result))
			{
				if (empty($row['code']))
				{
					continue;
				}

				// (assertion)
				$match[] = preg_quote($row['code'], '#');
				$replace[] = '<!-- s' . $row['code'] . ' --><img src="{SMILIES_PATH}/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" /><!-- s' . $row['code'] . ' -->';
			}
			$db->sql_freeresult($result);
		}

		if (count($match))
		{
			if ($max_smilies)
			{
				// 'u' modifier has been added to correctly parse smilies within unicode strings
				// For details: http://tracker.phpbb.com/browse/PHPBB3-10117
				$num_matches = preg_match_all('#(?<=^|[\n .])(?:' . implode('|', $match) . ')(?![^<>]*>)#u', $this->message, $matches);
				unset($matches);

				if ($num_matches !== false && $num_matches > $max_smilies)
				{
					$this->warn_msg[] = sprintf($user->lang['TOO_MANY_SMILIES'], $max_smilies);
					return;
				}
			}

			// Make sure the delimiter # is added in front and at the end of every element within $match
			// 'u' modifier has been added to correctly parse smilies within unicode strings
			// For details: http://tracker.phpbb.com/browse/PHPBB3-10117

			$this->message = trim(preg_replace(explode(chr(0), '#(?<=^|[\n .])' . implode('(?![^<>]*>)#u' . chr(0) . '#(?<=^|[\n .])', $match) . '(?![^<>]*>)#u'), $replace, $this->message));
		}
	}

	/**
	 * Check attachment form token depending on submit type
	 *
	 * @param \phpbb\language\language $language Language
	 * @param \phpbb\request\request_interface $request Request
	 * @param string $form_name Form name for checking form key
	 *
	 * @return bool True if form token is not needed or valid, false if needed and invalid
	 */
	function check_attachment_form_token(\phpbb\language\language $language, \phpbb\request\request_interface $request, $form_name)
	{
		$add_file = $request->is_set_post('add_file');
		$delete_file = $request->is_set_post('delete_file');

		if (($add_file || $delete_file) && !check_form_key($form_name))
		{
			$this->warn_msg[] = $language->lang('FORM_INVALID');

			if ($request->is_ajax() && $this->plupload)
			{
				$this->plupload->emit_error(-400, 'FORM_INVALID');
			}

			return false;
		}

		return true;
	}

	/**
	* Parse Attachments
	*/
	function parse_attachments($form_name, $mode, $forum_id, $submit, $preview, $refresh, $is_message = false)
	{
		global $config, $auth, $user, $phpbb_root_path, $phpEx, $db, $request;
		global $phpbb_container, $phpbb_dispatcher;

		$error = array();

		$num_attachments = count($this->attachment_data);
		$this->filename_data['filecomment'] = $request->variable('filecomment', '', true);
		$upload = $request->file($form_name);
		$upload_file = (!empty($upload) && $upload['name'] !== 'none' && trim($upload['name']));

		$add_file		= (isset($_POST['add_file'])) ? true : false;
		$delete_file	= (isset($_POST['delete_file'])) ? true : false;

		// First of all adjust comments if changed
		$actual_comment_list = $request->variable('comment_list', array(''), true);

		foreach ($actual_comment_list as $comment_key => $comment)
		{
			if (!isset($this->attachment_data[$comment_key]))
			{
				continue;
			}

			if ($this->attachment_data[$comment_key]['attach_comment'] != $actual_comment_list[$comment_key])
			{
				$this->attachment_data[$comment_key]['attach_comment'] = $actual_comment_list[$comment_key];
			}
		}

		$cfg = array();
		$cfg['max_attachments'] = ($is_message) ? $config['max_attachments_pm'] : $config['max_attachments'];
		$forum_id = ($is_message) ? 0 : $forum_id;

		if ($submit && in_array($mode, array('post', 'reply', 'quote', 'edit')) && $upload_file)
		{
			if ($num_attachments < $cfg['max_attachments'] || $auth->acl_get('a_') || $auth->acl_get('m_', $forum_id))
			{
				/** @var \phpbb\attachment\manager $attachment_manager */
				$attachment_manager = $phpbb_container->get('attachment.manager');
				$filedata = $attachment_manager->upload($form_name, $forum_id, false, '', $is_message);
				$error = $filedata['error'];

				if ($filedata['post_attach'] && !count($error))
				{
					$sql_ary = array(
						'physical_filename'	=> $filedata['physical_filename'],
						'attach_comment'	=> $this->filename_data['filecomment'],
						'real_filename'		=> $filedata['real_filename'],
						'extension'			=> $filedata['extension'],
						'mimetype'			=> $filedata['mimetype'],
						'filesize'			=> $filedata['filesize'],
						'filetime'			=> $filedata['filetime'],
						'thumbnail'			=> $filedata['thumbnail'],
						'is_orphan'			=> 1,
						'in_message'		=> ($is_message) ? 1 : 0,
						'poster_id'			=> $user->data['user_id'],
					);

					/**
					* Modify attachment sql array on submit
					*
					* @event core.modify_attachment_sql_ary_on_submit
					* @var	array	sql_ary		Array containing SQL data
					* @since 3.2.6-RC1
					*/
					$vars = array('sql_ary');
					extract($phpbb_dispatcher->trigger_event('core.modify_attachment_sql_ary_on_submit', compact($vars)));

					$db->sql_query('INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));

					$new_entry = array(
						'attach_id'		=> $db->sql_nextid(),
						'is_orphan'		=> 1,
						'real_filename'	=> $filedata['real_filename'],
						'attach_comment'=> $this->filename_data['filecomment'],
						'filesize'		=> $filedata['filesize'],
					);

					$this->attachment_data = array_merge(array(0 => $new_entry), $this->attachment_data);

					/**
					* Modify attachment data on submit
					*
					* @event core.modify_attachment_data_on_submit
					* @var	array	attachment_data		Array containing attachment data
					* @since 3.2.2-RC1
					*/
					$attachment_data = $this->attachment_data;
					$vars = array('attachment_data');
					extract($phpbb_dispatcher->trigger_event('core.modify_attachment_data_on_submit', compact($vars)));
					$this->attachment_data = $attachment_data;
					unset($attachment_data);

					$this->message = preg_replace_callback('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#', function ($match) {
						return '[attachment='.($match[1] + 1).']' . $match[2] . '[/attachment]';
					}, $this->message);

					$this->filename_data['filecomment'] = '';

					// This Variable is set to false here, because Attachments are entered into the
					// Database in two modes, one if the id_list is 0 and the second one if post_attach is true
					// Since post_attach is automatically switched to true if an Attachment got added to the filesystem,
					// but we are assigning an id of 0 here, we have to reset the post_attach variable to false.
					//
					// This is very relevant, because it could happen that the post got not submitted, but we do not
					// know this circumstance here. We could be at the posting page or we could be redirected to the entered
					// post. :)
					$filedata['post_attach'] = false;
				}
			}
			else
			{
				$error[] = $user->lang('TOO_MANY_ATTACHMENTS', (int) $cfg['max_attachments']);
			}
		}

		if ($preview || $refresh || count($error))
		{
			if (isset($this->plupload) && $this->plupload->is_active())
			{
				$json_response = new \phpbb\json_response();
			}

			// Perform actions on temporary attachments
			if ($delete_file)
			{
				include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);

				$index = array_keys($request->variable('delete_file', array(0 => 0)));
				$index = (!empty($index)) ? $index[0] : false;

				if ($index !== false && !empty($this->attachment_data[$index]))
				{
					/** @var \phpbb\attachment\manager $attachment_manager */
					$attachment_manager = $phpbb_container->get('attachment.manager');

					// delete selected attachment
					if ($this->attachment_data[$index]['is_orphan'])
					{
						$sql = 'SELECT attach_id, physical_filename, thumbnail
							FROM ' . ATTACHMENTS_TABLE . '
							WHERE attach_id = ' . (int) $this->attachment_data[$index]['attach_id'] . '
								AND is_orphan = 1
								AND poster_id = ' . $user->data['user_id'];
						$result = $db->sql_query($sql);
						$row = $db->sql_fetchrow($result);
						$db->sql_freeresult($result);

						if ($row)
						{
							$attachment_manager->unlink($row['physical_filename'], 'file');

							if ($row['thumbnail'])
							{
								$attachment_manager->unlink($row['physical_filename'], 'thumbnail');
							}

							$db->sql_query('DELETE FROM ' . ATTACHMENTS_TABLE . ' WHERE attach_id = ' . (int) $this->attachment_data[$index]['attach_id']);
						}
					}
					else
					{
						$attachment_manager->delete('attach', $this->attachment_data[$index]['attach_id']);
					}

					unset($this->attachment_data[$index]);
					$this->message = preg_replace_callback('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#', function ($match) use($index) {
						return ($match[1] == $index) ? '' : (($match[1] > $index) ? '[attachment=' . ($match[1] - 1) . ']' . $match[2] . '[/attachment]' : $match[0]);
					}, $this->message);

					// Reindex Array
					$this->attachment_data = array_values($this->attachment_data);
					if (isset($this->plupload) && $this->plupload->is_active())
					{
						$json_response->send($this->attachment_data);
					}
				}
			}
			else if (($add_file || $preview) && $upload_file)
			{
				if ($num_attachments < $cfg['max_attachments'] || $auth->acl_gets('m_', 'a_', $forum_id))
				{
					/** @var \phpbb\attachment\manager $attachment_manager */
					$attachment_manager = $phpbb_container->get('attachment.manager');
					$filedata = $attachment_manager->upload($form_name, $forum_id, false, '', $is_message);
					$error = array_merge($error, $filedata['error']);

					if (!count($error))
					{
						$sql_ary = array(
							'physical_filename'	=> $filedata['physical_filename'],
							'attach_comment'	=> $this->filename_data['filecomment'],
							'real_filename'		=> $filedata['real_filename'],
							'extension'			=> $filedata['extension'],
							'mimetype'			=> $filedata['mimetype'],
							'filesize'			=> $filedata['filesize'],
							'filetime'			=> $filedata['filetime'],
							'thumbnail'			=> $filedata['thumbnail'],
							'is_orphan'			=> 1,
							'in_message'		=> ($is_message) ? 1 : 0,
							'poster_id'			=> $user->data['user_id'],
						);

						/**
						* Modify attachment sql array on upload
						*
						* @event core.modify_attachment_sql_ary_on_upload
						* @var	array	sql_ary		Array containing SQL data
						* @since 3.2.6-RC1
						*/
						$vars = array('sql_ary');
						extract($phpbb_dispatcher->trigger_event('core.modify_attachment_sql_ary_on_upload', compact($vars)));

						$db->sql_query('INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));

						$new_entry = array(
							'attach_id'		=> $db->sql_nextid(),
							'is_orphan'		=> 1,
							'real_filename'	=> $filedata['real_filename'],
							'attach_comment'=> $this->filename_data['filecomment'],
							'filesize'		=> $filedata['filesize'],
						);

						$this->attachment_data = array_merge(array(0 => $new_entry), $this->attachment_data);

						/**
						* Modify attachment data on upload
						*
						* @event core.modify_attachment_data_on_upload
						* @var	array	attachment_data		Array containing attachment data
						* @since 3.2.2-RC1
						*/
						$attachment_data = $this->attachment_data;
						$vars = array('attachment_data');
						extract($phpbb_dispatcher->trigger_event('core.modify_attachment_data_on_upload', compact($vars)));
						$this->attachment_data = $attachment_data;
						unset($attachment_data);

						$this->message = preg_replace_callback('#\[attachment=([0-9]+)\](.*?)\[\/attachment\]#', function ($match) {
							return '[attachment=' . ($match[1] + 1) . ']' . $match[2] . '[/attachment]';
						}, $this->message);
						$this->filename_data['filecomment'] = '';

						if (isset($this->plupload) && $this->plupload->is_active())
						{
							$download_url = append_sid("{$phpbb_root_path}download/file.{$phpEx}", 'mode=view&amp;id=' . $new_entry['attach_id']);

							// Send the client the attachment data to maintain state
							$json_response->send(array('data' => $this->attachment_data, 'download_url' => $download_url));
						}
					}
				}
				else
				{
					$error[] = $user->lang('TOO_MANY_ATTACHMENTS', (int) $cfg['max_attachments']);
				}

				if (!empty($error) && isset($this->plupload) && $this->plupload->is_active())
				{
					// If this is a plupload (and thus ajax) request, give the
					// client the first error we have
					$json_response->send(array(
						'jsonrpc' => '2.0',
						'id' => 'id',
						'error' => array(
							'code' => 105,
							'message' => current($error),
						),
					));
				}
			}
		}

		foreach ($error as $error_msg)
		{
			$this->warn_msg[] = $error_msg;
		}
	}

	/**
	* Get Attachment Data
	*/
	function get_submitted_attachment_data($check_user_id = false)
	{
		global $user, $db;
		global $request;

		$this->filename_data['filecomment'] = $request->variable('filecomment', '', true);
		$attachment_data = $request->variable('attachment_data', array(0 => array('' => '')), true, \phpbb\request\request_interface::POST);
		$this->attachment_data = array();

		$check_user_id = ($check_user_id === false) ? $user->data['user_id'] : $check_user_id;

		if (!count($attachment_data))
		{
			return;
		}

		$not_orphan = $orphan = array();

		foreach ($attachment_data as $pos => $var_ary)
		{
			if ($var_ary['is_orphan'])
			{
				$orphan[(int) $var_ary['attach_id']] = $pos;
			}
			else
			{
				$not_orphan[(int) $var_ary['attach_id']] = $pos;
			}
		}

		// Regenerate already posted attachments
		if (count($not_orphan))
		{
			// Get the attachment data, based on the poster id...
			$sql = 'SELECT attach_id, is_orphan, real_filename, attach_comment, filesize
				FROM ' . ATTACHMENTS_TABLE . '
				WHERE ' . $db->sql_in_set('attach_id', array_keys($not_orphan)) . '
					AND poster_id = ' . $check_user_id;
			$result = $db->sql_query($sql);

			while ($row = $db->sql_fetchrow($result))
			{
				$pos = $not_orphan[$row['attach_id']];
				$this->attachment_data[$pos] = $row;
				$this->attachment_data[$pos]['attach_comment'] = $attachment_data[$pos]['attach_comment'];

				unset($not_orphan[$row['attach_id']]);
			}
			$db->sql_freeresult($result);
		}

		if (count($not_orphan))
		{
			trigger_error('NO_ACCESS_ATTACHMENT', E_USER_ERROR);
		}

		// Regenerate newly uploaded attachments
		if (count($orphan))
		{
			$sql = 'SELECT attach_id, is_orphan, real_filename, attach_comment, filesize
				FROM ' . ATTACHMENTS_TABLE . '
				WHERE ' . $db->sql_in_set('attach_id', array_keys($orphan)) . '
					AND poster_id = ' . $user->data['user_id'] . '
					AND is_orphan = 1';
			$result = $db->sql_query($sql);

			while ($row = $db->sql_fetchrow($result))
			{
				$pos = $orphan[$row['attach_id']];
				$this->attachment_data[$pos] = $row;
				$this->attachment_data[$pos]['attach_comment'] = $attachment_data[$pos]['attach_comment'];

				unset($orphan[$row['attach_id']]);
			}
			$db->sql_freeresult($result);
		}

		if (count($orphan))
		{
			trigger_error('NO_ACCESS_ATTACHMENT', E_USER_ERROR);
		}

		ksort($this->attachment_data);
	}

	/**
	* Parse Poll
	*/
	function parse_poll(&$poll)
	{
		global $user, $config;

		$poll_max_options = $poll['poll_max_options'];

		// Parse Poll Option text
		$tmp_message = $this->message;

		$poll['poll_options'] = preg_split('/\s*?\n\s*/', trim($poll['poll_option_text']));
		$poll['poll_options_size'] = count($poll['poll_options']);

		foreach ($poll['poll_options'] as &$poll_option)
		{
			$this->message = $poll_option;
			$poll_option = $this->parse($poll['enable_bbcode'], ($config['allow_post_links']) ? $poll['enable_urls'] : false, $poll['enable_smilies'], $poll['img_status'], false, false, $config['allow_post_links'], false, 'poll');
		}
		unset($poll_option);
		$poll['poll_option_text'] = implode("\n", $poll['poll_options']);

		// Parse Poll Title
		$this->message = $poll['poll_title'];
		if (!$poll['poll_title'] && $poll['poll_options_size'])
		{
			$this->warn_msg[] = $user->lang['NO_POLL_TITLE'];
		}
		else
		{
			if (utf8_strlen(preg_replace('#\[\/?[a-z\*\+\-]+(=[\S]+)?\]#ius', ' ', $this->message)) > 100)
			{
				$this->warn_msg[] = $user->lang['POLL_TITLE_TOO_LONG'];
			}
			$poll['poll_title'] = $this->parse($poll['enable_bbcode'], ($config['allow_post_links']) ? $poll['enable_urls'] : false, $poll['enable_smilies'], $poll['img_status'], false, false, $config['allow_post_links'], false, 'poll');
			if (strlen($poll['poll_title']) > 255)
			{
				$this->warn_msg[] = $user->lang['POLL_TITLE_COMP_TOO_LONG'];
			}
		}

		if (count($poll['poll_options']) == 1)
		{
			$this->warn_msg[] = $user->lang['TOO_FEW_POLL_OPTIONS'];
		}
		else if ($poll['poll_options_size'] > (int) $config['max_poll_options'])
		{
			$this->warn_msg[] = $user->lang['TOO_MANY_POLL_OPTIONS'];
		}
		else if ($poll_max_options > $poll['poll_options_size'])
		{
			$this->warn_msg[] = $user->lang['TOO_MANY_USER_OPTIONS'];
		}

		$poll['poll_max_options'] = ($poll['poll_max_options'] < 1) ? 1 : (($poll['poll_max_options'] > $config['max_poll_options']) ? $config['max_poll_options'] : $poll['poll_max_options']);

		$this->message = $tmp_message;
	}

	/**
	* Remove nested quotes at given depth in current parsed message
	*
	* @param  integer $max_depth Depth limit
	* @return null
	*/
	public function remove_nested_quotes($max_depth)
	{
		global $phpbb_container;

		if (preg_match('#^<[rt][ >]#', $this->message))
		{
			$this->message = $phpbb_container->get('text_formatter.utils')->remove_bbcode(
				$this->message,
				'quote',
				$max_depth
			);

			return;
		}

		// Capture all [quote] and [/quote] tags
		preg_match_all('(\\[/?quote(?:=&quot;(.*?)&quot;)?:' . $this->bbcode_uid . '\\])', $this->message, $matches, PREG_OFFSET_CAPTURE);

		// Iterate over the quote tags to mark the ranges that must be removed
		$depth = 0;
		$ranges = array();
		$start_pos = 0;
		foreach ($matches[0] as $match)
		{
			if ($match[0][1] === '/')
			{
				--$depth;
				if ($depth == $max_depth)
				{
					$end_pos = $match[1] + strlen($match[0]);
					$length = $end_pos - $start_pos;
					$ranges[] = array($start_pos, $length);
				}
			}
			else
			{
				++$depth;
				if ($depth == $max_depth + 1)
				{
					$start_pos = $match[1];
				}
			}
		}

		foreach (array_reverse($ranges) as $range)
		{
			list($start_pos, $length) = $range;
			$this->message = substr_replace($this->message, '', $start_pos, $length);
		}
	}

	/**
	* Setter function for passing the plupload object
	*
	* @param \phpbb\plupload\plupload $plupload The plupload object
	*
	* @return null
	*/
	public function set_plupload(\phpbb\plupload\plupload $plupload)
	{
		$this->plupload = $plupload;
	}

	/**
	* Function to perform custom bbcode validation by extensions
	* can be used in bbcode_init() to assign regexp replacement
	* Example: 'regexp' => array('#\[b\](.*?)\[/b\]#uise' => "\$this->validate_bbcode_by_extension('\$1')")
	*
	* Accepts variable number of parameters
	*
	* @return mixed Validation result
	*/
	public function validate_bbcode_by_extension()
	{
		global $phpbb_dispatcher;

		$return = false;
		$params_array = func_get_args();

		/**
		* Event to validate bbcode with the custom validating methods
		* provided by extensions
		*
		* @event core.validate_bbcode_by_extension
		* @var array	params_array	Array with the function parameters
		* @var mixed	return			Validation result to return
		*
		* @since 3.1.5-RC1
		*/
		$vars = array('params_array', 'return');
		extract($phpbb_dispatcher->trigger_event('core.validate_bbcode_by_extension', compact($vars)));

		return $return;
	}
}
n> "" "You have selected Windows Domain authentication. Please review the " "configuration options below " msgstr "" "Выбрана аутентификация в домене Windows. Проверьте конфигурационные параметры" #: authentication.pm:207 #, c-format msgid "Domain Model " msgstr "Тип домена" #: authentication.pm:209 #, c-format msgid "Active Directory Realm " msgstr "Область Active Directory" #: authentication.pm:225 authentication.pm:241 #, c-format msgid "Authentication" msgstr "Аутентификация" #: authentication.pm:227 #, c-format msgid "Authentication method" msgstr "Тип аутентификации" #. -PO: keep this short or else the buttons will not fit in the window #: authentication.pm:232 #, c-format msgid "No password" msgstr "Без пароля" #: authentication.pm:253 #, c-format msgid "This password is too short (it must be at least %d characters long)" msgstr "Этот пароль слишком прост (его длина должна быть не менее %d символов)" #: authentication.pm:358 #, c-format msgid "Can not use broadcast with no NIS domain" msgstr "Невозможно использовать широковещание без домена NIS" #: authentication.pm:873 #, c-format msgid "Select file" msgstr "Выберите файл" #: authentication.pm:879 #, c-format msgid "Domain Windows for authentication : " msgstr "Домен Windows для аутентификации:" #: authentication.pm:881 #, c-format msgid "Domain Admin User Name" msgstr "Имя пользователя — администратора домена" #: authentication.pm:882 #, c-format msgid "Domain Admin Password" msgstr "Пароль администратора домена" #. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit) #: bootloader.pm:942 #, c-format msgid "" "Welcome to the operating system chooser!\n" "\n" "Choose an operating system from the list above or\n" "wait for default boot.\n" "\n" msgstr "" "Welcome to the operating system chooser!\n" "\n" "Choose an operating system from the list above or\n" "wait for default boot.\n" "\n" #: bootloader.pm:1110 #, c-format msgid "LILO with text menu" msgstr "LILO с текстовым меню" #: bootloader.pm:1111 #, c-format msgid "GRUB with graphical menu" msgstr "GRUB с графическим меню" #: bootloader.pm:1112 #, c-format msgid "GRUB with text menu" msgstr "GRUB с текстовым меню" #: bootloader.pm:1113 #, c-format msgid "Yaboot" msgstr "Yaboot" #: bootloader.pm:1114 #, c-format msgid "SILO" msgstr "SILO" #: bootloader.pm:1195 #, c-format msgid "not enough room in /boot" msgstr "не хватает места в /boot" #: bootloader.pm:1843 #, c-format msgid "You can not install the bootloader on a %s partition\n" msgstr "Начальный загрузчик нельзя установить на раздел %s\n" #: bootloader.pm:1964 #, c-format msgid "" "Your bootloader configuration must be updated because partition has been " "renumbered" msgstr "" "Так как был изменён номера раздела, необходимо обновить конфигурацию " "начального загрузчика" #: bootloader.pm:1977 #, c-format msgid "" "The bootloader can not be installed correctly. You have to boot rescue and " "choose \"%s\"" msgstr "" "Начальный загрузчик не может быть корректно установлен. Вам необходимо " "загрузиться в режиме rescue и выбрать \"%s\"" #: bootloader.pm:1978 #, c-format msgid "Re-install Boot Loader" msgstr "Переустановка начального загрузчика" #: common.pm:142 #, c-format msgid "B" msgstr "Б" #: common.pm:142 #, c-format msgid "KB" msgstr "КБ" #: common.pm:142 #, c-format msgid "MB" msgstr "МБ" #: common.pm:142 #, c-format msgid "GB" msgstr "ГБ" #: common.pm:142 common.pm:151 #, c-format msgid "TB" msgstr "ТБ" #: common.pm:159 #, c-format msgid "%d minutes" msgstr "%d минут" #: common.pm:161 #, c-format msgid "1 minute" msgstr "1 минута" #: common.pm:163 #, c-format msgid "%d seconds" msgstr "%d секунд" #: common.pm:358 #, c-format msgid "command %s missing" msgstr "отсутствует команда %s" #: diskdrake/dav.pm:17 #, c-format msgid "" "WebDAV is a protocol that allows you to mount a web server's directory\n" "locally, and treat it like a local filesystem (provided the web server is\n" "configured as a WebDAV server). If you would like to add WebDAV mount\n" "points, select \"New\"." msgstr "" "WebDAV является протоколом, который позволяет вам локально монтировать " "директорию веб-сервера, интерпретируя ее как локальную файловую систему (при " "условии, что веб-сервер настроен как сервер WebDAV). Если вы захотите " "добавить точки монтирования WebDAV, выберите \"Новая\"." #: diskdrake/dav.pm:25 #, c-format msgid "New" msgstr "Новая" #: diskdrake/dav.pm:61 diskdrake/interactive.pm:382 diskdrake/smbnfs_gtk.pm:75 #, c-format msgid "Unmount" msgstr "Размонтировать" #: diskdrake/dav.pm:62 diskdrake/interactive.pm:379 diskdrake/smbnfs_gtk.pm:76 #, c-format msgid "Mount" msgstr "Монтировать" #: diskdrake/dav.pm:63 #, c-format msgid "Server" msgstr "Сервер" #: diskdrake/dav.pm:64 diskdrake/interactive.pm:373 #: diskdrake/interactive.pm:613 diskdrake/interactive.pm:631 #: diskdrake/interactive.pm:635 diskdrake/removable.pm:23 #: diskdrake/smbnfs_gtk.pm:79 #, c-format msgid "Mount point" msgstr "Точка монтирования" #: diskdrake/dav.pm:65 diskdrake/interactive.pm:375 #: diskdrake/interactive.pm:989 diskdrake/removable.pm:24 #: diskdrake/smbnfs_gtk.pm:80 #, c-format msgid "Options" msgstr "Параметры" #: diskdrake/dav.pm:66 diskdrake/hd_gtk.pm:174 diskdrake/removable.pm:26 #: diskdrake/smbnfs_gtk.pm:82 interactive/http.pm:151 #, c-format msgid "Done" msgstr "Готово" #: diskdrake/dav.pm:75 diskdrake/hd_gtk.pm:120 diskdrake/hd_gtk.pm:272 #: diskdrake/interactive.pm:233 diskdrake/interactive.pm:246 #: diskdrake/interactive.pm:480 diskdrake/interactive.pm:485 #: diskdrake/interactive.pm:603 diskdrake/interactive.pm:861 #: diskdrake/interactive.pm:1035 diskdrake/interactive.pm:1048 #: diskdrake/interactive.pm:1051 diskdrake/interactive.pm:1300 #: diskdrake/smbnfs_gtk.pm:42 do_pkgs.pm:23 do_pkgs.pm:28 do_pkgs.pm:44 #: do_pkgs.pm:60 do_pkgs.pm:65 fsedit.pm:222 interactive/http.pm:117 #: interactive/http.pm:118 modules/interactive.pm:19 scanner.pm:94 #: scanner.pm:105 scanner.pm:112 scanner.pm:119 wizards.pm:95 wizards.pm:99 #: wizards.pm:121 #, c-format msgid "Error" msgstr "Ошибка" #: diskdrake/dav.pm:83 #, c-format msgid "Please enter the WebDAV server URL" msgstr "Пожалуйста, введите URL сервера WebDAV" #: diskdrake/dav.pm:87 #, c-format msgid "The URL must begin with http:// or https://" msgstr "URL должен начинаться с http:// или https://" #: diskdrake/dav.pm:109 #, c-format msgid "Server: " msgstr "Сервер: " #: diskdrake/dav.pm:110 diskdrake/interactive.pm:453 #: diskdrake/interactive.pm:1180 diskdrake/interactive.pm:1260 #, c-format msgid "Mount point: " msgstr "Точка монтирования:" #: diskdrake/dav.pm:111 diskdrake/interactive.pm:1267 #, c-format msgid "Options: %s" msgstr "Параметры: %s" #: diskdrake/hd_gtk.pm:54 diskdrake/interactive.pm:284 #: diskdrake/smbnfs_gtk.pm:22 fs/mount_point.pm:106 #: fs/partitioning_wizard.pm:51 fs/partitioning_wizard.pm:206 #: fs/partitioning_wizard.pm:211 fs/partitioning_wizard.pm:250 #: fs/partitioning_wizard.pm:269 fs/partitioning_wizard.pm:274 #, c-format msgid "Partitioning" msgstr "Разметка диска" #: diskdrake/hd_gtk.pm:68 #, c-format msgid "Click on a partition, choose a filesystem type then choose an action" msgstr "Выберите раздел, смените файловую систему, затем выберите действие" #: diskdrake/hd_gtk.pm:102 diskdrake/interactive.pm:1010 #: diskdrake/interactive.pm:1020 diskdrake/interactive.pm:1073 #, c-format msgid "Read carefully!" msgstr "Прочтите внимательно!" #: diskdrake/hd_gtk.pm:102 #, c-format msgid "Please make a backup of your data first" msgstr "Пожалуйста, сделайте резервную копию данных сначала" #: diskdrake/hd_gtk.pm:103 diskdrake/interactive.pm:226 #, c-format msgid "Exit" msgstr "Выход" #: diskdrake/hd_gtk.pm:103 #, c-format msgid "Continue" msgstr "Продолжить" #: diskdrake/hd_gtk.pm:170 interactive.pm:649 interactive/gtk.pm:781 #: interactive/gtk.pm:797 interactive/gtk.pm:815 ugtk2.pm:933 ugtk2.pm:934 #, c-format msgid "Help" msgstr "Справка" #: diskdrake/hd_gtk.pm:208 #, c-format msgid "" "You have one big Microsoft Windows partition.\n" "I suggest you first resize that partition\n" "(click on it, then click on \"Resize\")" msgstr "" "У вас есть один большой раздел MS Windows.\n" "Я предлагаю вам сначала изменить размер раздела\n" "(выберите его, а затем нажмите \"Изменить размер\")" #: diskdrake/hd_gtk.pm:210 #, c-format msgid "Please click on a partition" msgstr "Пожалуйста, щелкните на раздел" #: diskdrake/hd_gtk.pm:224 diskdrake/smbnfs_gtk.pm:63 #, c-format msgid "Details" msgstr "Подробности" #: diskdrake/hd_gtk.pm:272 #, c-format msgid "No hard drives found" msgstr "Жесткие диски не найдены" #: diskdrake/hd_gtk.pm:299 #, c-format msgid "Unknown" msgstr "Неизвестный" #: diskdrake/hd_gtk.pm:361 #, c-format msgid "Ext3" msgstr "Ext3" #: diskdrake/hd_gtk.pm:361 #, c-format msgid "XFS" msgstr "XFS" #: diskdrake/hd_gtk.pm:361 #, c-format msgid "Swap" msgstr "Своп" #: diskdrake/hd_gtk.pm:361 #, c-format msgid "SunOS" msgstr "SunOS" #: diskdrake/hd_gtk.pm:361 #, c-format msgid "HFS" msgstr "HFS" #: diskdrake/hd_gtk.pm:361 #, c-format msgid "Windows" msgstr "Windows" #: diskdrake/hd_gtk.pm:362 services.pm:158 #, c-format msgid "Other" msgstr "Другие" #: diskdrake/hd_gtk.pm:362 diskdrake/interactive.pm:1195 #, c-format msgid "Empty" msgstr "Пусто" #: diskdrake/hd_gtk.pm:369 #, c-format msgid "Filesystem types:" msgstr "Типы файловых систем:" #: diskdrake/hd_gtk.pm:390 diskdrake/interactive.pm:289 #: diskdrake/interactive.pm:361 diskdrake/interactive.pm:510 #: diskdrake/interactive.pm:694 diskdrake/interactive.pm:752 #: diskdrake/interactive.pm:841 diskdrake/interactive.pm:883 #: diskdrake/interactive.pm:884 diskdrake/interactive.pm:1118 #: diskdrake/interactive.pm:1156 diskdrake/interactive.pm:1299 do_pkgs.pm:19 #: do_pkgs.pm:39 do_pkgs.pm:57 harddrake/sound.pm:422 #, c-format msgid "Warning" msgstr "Внимание" #: diskdrake/hd_gtk.pm:390 #, c-format msgid "This partition is already empty" msgstr "Этот раздела уже пуст" #: diskdrake/hd_gtk.pm:399 #, c-format msgid "Use ``Unmount'' first" msgstr "Используйте сначала ``Размонтировать''" #: diskdrake/hd_gtk.pm:399 #, c-format msgid "Use ``%s'' instead (in expert mode)" msgstr "Вместо этого используйте ``%s'' (в режиме эксперта)" #: diskdrake/hd_gtk.pm:399 diskdrake/interactive.pm:374 #: diskdrake/interactive.pm:548 diskdrake/interactive.pm:1026 #: diskdrake/removable.pm:25 diskdrake/removable.pm:48 #, c-format msgid "Type" msgstr "Тип" #: diskdrake/interactive.pm:197 #, c-format msgid "Choose another partition" msgstr "Выберите другой раздел" #: diskdrake/interactive.pm:197 #, c-format msgid "Choose a partition" msgstr "Выберите раздел" #: diskdrake/interactive.pm:259 #, c-format msgid "Toggle to normal mode" msgstr "Переключиться в нормальный режим" #: diskdrake/interactive.pm:259 #, c-format msgid "Toggle to expert mode" msgstr "Переключиться в режим эксперта" #: diskdrake/interactive.pm:267 diskdrake/interactive.pm:277 #: diskdrake/interactive.pm:1103 #, c-format msgid "Confirmation" msgstr "Подтверждение" #: diskdrake/interactive.pm:267 #, c-format msgid "Continue anyway?" msgstr "Все-таки продолжить?" #: diskdrake/interactive.pm:272 #, c-format msgid "Quit without saving" msgstr "Выйти без сохранения" #: diskdrake/interactive.pm:272 #, c-format msgid "Quit without writing the partition table?" msgstr "Выйти без записи таблицы разделов?" #: diskdrake/interactive.pm:277 #, c-format msgid "Do you want to save /etc/fstab modifications" msgstr "Желаете сохранить изменения /etc/fstab" #: diskdrake/interactive.pm:284 fs/partitioning_wizard.pm:250 #, c-format msgid "You need to reboot for the partition table modifications to take place" msgstr "" "Вам нужно перезагрузиться, чтобы изменения таблицы разделов вступили в силу" #: diskdrake/interactive.pm:289 #, c-format msgid "" "You should format partition %s.\n" "Otherwise no entry for mount point %s will be written in fstab.\n" "Quit anyway?" msgstr "" "Вам следует отформатировать раздел %s.\n" "Иначе в fstab не будет записи о точке монтирования %s .\n" "Выйти в любом случае?" #: diskdrake/interactive.pm:302 #, c-format msgid "Clear all" msgstr "Очистить все" #: diskdrake/interactive.pm:303 #, c-format msgid "Auto allocate" msgstr "Разместить автоматически" #: diskdrake/interactive.pm:304 diskdrake/interactive.pm:352 #: interactive/curses.pm:512 #, c-format msgid "More" msgstr "Больше" #: diskdrake/interactive.pm:309 #, c-format msgid "Hard drive information" msgstr "Информация о жестком диске" #: diskdrake/interactive.pm:341 #, c-format msgid "All primary partitions are used" msgstr "Все первичные разделы уже использованы" #: diskdrake/interactive.pm:342 #, c-format msgid "I can not add any more partitions" msgstr "Добавление новых разделов невозможно" #: diskdrake/interactive.pm:343 #, c-format msgid "" "To have more partitions, please delete one to be able to create an extended " "partition" msgstr "" "Чтобы получить больше разделов, удалите один, чтобы получить возможность " "создать расширенный раздел" #: diskdrake/interactive.pm:354 #, c-format msgid "Reload partition table" msgstr "Перезагрузить таблицу разделов" #: diskdrake/interactive.pm:361 #, c-format msgid "Detailed information" msgstr "Подробная информация" #: diskdrake/interactive.pm:377 diskdrake/interactive.pm:707 #, c-format msgid "Resize" msgstr "Изменить размер" #: diskdrake/interactive.pm:378 #, c-format msgid "Format" msgstr "Форматировать" #: diskdrake/interactive.pm:380 diskdrake/interactive.pm:793 #, c-format msgid "Add to RAID" msgstr "Добавить в RAID" #: diskdrake/interactive.pm:381 diskdrake/interactive.pm:811 #, c-format msgid "Add to LVM" msgstr "Добавить в LVM" #: diskdrake/interactive.pm:383 #, c-format msgid "Delete" msgstr "Удалить" #: diskdrake/interactive.pm:384 #, c-format msgid "Remove from RAID" msgstr "Удалить из RAID" #: diskdrake/interactive.pm:385 #, c-format msgid "Remove from LVM" msgstr "Удалить из LVM" #: diskdrake/interactive.pm:386 #, c-format msgid "Modify RAID" msgstr "Изменить RAID" #: diskdrake/interactive.pm:387 #, c-format msgid "Use for loopback" msgstr "Использовать для loopback" #: diskdrake/interactive.pm:398 #, c-format msgid "Create" msgstr "Создать" #: diskdrake/interactive.pm:442 diskdrake/interactive.pm:444 #, c-format msgid "Create a new partition" msgstr "Создать новый раздел" #: diskdrake/interactive.pm:446 #, c-format msgid "Start sector: " msgstr "Начальный сектор: " #: diskdrake/interactive.pm:449 diskdrake/interactive.pm:876 #, c-format msgid "Size in MB: " msgstr "Размер в MB: " #: diskdrake/interactive.pm:451 diskdrake/interactive.pm:877 #, c-format msgid "Filesystem type: " msgstr "Тип файловой системы: " #: diskdrake/interactive.pm:457 #, c-format msgid "Preference: " msgstr "Предпочтение: " #: diskdrake/interactive.pm:460 #, c-format msgid "Logical volume name " msgstr "Имя логического раздела" #: diskdrake/interactive.pm:480 #, c-format msgid "" "You can not create a new partition\n" "(since you reached the maximal number of primary partitions).\n" "First remove a primary partition and create an extended partition." msgstr "" "Вы не можете создать новый раздел\n" "(вы достигли максимального количества первичных разделов).\n" "Сначала удалите первичный раздел и создайте расширенный раздел." #: diskdrake/interactive.pm:510 #, c-format msgid "Remove the loopback file?" msgstr "Удалить файл loopback?" #: diskdrake/interactive.pm:532 #, c-format msgid "" "After changing type of partition %s, all data on this partition will be lost" msgstr "" "После изменения типа раздела %s, все данные в этом разделе будут потеряны" #: diskdrake/interactive.pm:545 #, c-format msgid "Change partition type" msgstr "Изменить тип раздела" #: diskdrake/interactive.pm:547 diskdrake/removable.pm:47 #, c-format msgid "Which filesystem do you want?" msgstr "Какую файловую систему желаете?" #: diskdrake/interactive.pm:554 #, c-format msgid "Switching from %s to %s" msgstr "Переключение с %s на %s" #: diskdrake/interactive.pm:580 diskdrake/interactive.pm:583 #, c-format msgid "Which volume label?" msgstr "Метка тома?" #: diskdrake/interactive.pm:584 #, c-format msgid "Label:" msgstr "Метка:" #: diskdrake/interactive.pm:598 #, c-format msgid "Where do you want to mount the loopback file %s?" msgstr "Куда вы хотите примонтировать файл loopback %s?" #: diskdrake/interactive.pm:599 #, c-format msgid "Where do you want to mount device %s?" msgstr "Куда вы хотите примонтировать устройство %s?" #: diskdrake/interactive.pm:604 #, c-format msgid "" "Can not unset mount point as this partition is used for loop back.\n" "Remove the loopback first" msgstr "" "Невозможно снять точку монтирования, поскольку этот раздел используется для " "loop back. Удалите сначала loopback" #: diskdrake/interactive.pm:634 #, c-format msgid "Where do you want to mount %s?" msgstr "Куда вы хотите примонтировать %s?" #: diskdrake/interactive.pm:658 diskdrake/interactive.pm:741 #: fs/partitioning_wizard.pm:146 fs/partitioning_wizard.pm:178 #, c-format msgid "Resizing" msgstr "Изменение размера" #: diskdrake/interactive.pm:658 #, c-format msgid "Computing FAT filesystem bounds" msgstr "Вычисляются границы файловой системы FAT" #: diskdrake/interactive.pm:694 #, c-format msgid "This partition is not resizeable" msgstr "Размер этого раздела нельзя изменить" #: diskdrake/interactive.pm:699 #, c-format msgid "All data on this partition should be backed-up" msgstr "Для всех данных в этом разделе должна быть сделана резервная копия" #: diskdrake/interactive.pm:701 #, c-format msgid "After resizing partition %s, all data on this partition will be lost" msgstr "" "После изменения размера раздела %s все данные в этом разделе будут потеряны" #: diskdrake/interactive.pm:708 #, c-format msgid "Choose the new size" msgstr "Выбрать новый размер" #: diskdrake/interactive.pm:709 #, c-format msgid "New size in MB: " msgstr "Новый размер в MB: " #: diskdrake/interactive.pm:710 #, c-format msgid "Minimum size: %s MB" msgstr "Минимальный размер: %s МБ" #: diskdrake/interactive.pm:711 #, c-format msgid "Maximum size: %s MB" msgstr "Максимальный размер: %s МБ" #: diskdrake/interactive.pm:752 fs/partitioning_wizard.pm:186 #, c-format msgid "" "To ensure data integrity after resizing the partition(s), \n" "filesystem checks will be run on your next boot into Microsoft Windows®" msgstr "" "Для обеспечения целостности данных после изменения размера \n" "раздела(ов) при следующей загрузке в Microsoft Windows® будет \n" "запущена проверка файловой системы " #: diskdrake/interactive.pm:793 #, c-format msgid "Choose an existing RAID to add to" msgstr "Выберите существующий RAID для добавления" #: diskdrake/interactive.pm:795 diskdrake/interactive.pm:813 #, c-format msgid "new" msgstr "новый" #: diskdrake/interactive.pm:811 #, c-format msgid "Choose an existing LVM to add to" msgstr "Выберите существующий LVM для добавления" #: diskdrake/interactive.pm:818 #, c-format msgid "LVM name?" msgstr "Имя LVM?" #: diskdrake/interactive.pm:841 #, c-format msgid "" "Physical volume %s is still in use.\n" "Do you want to move used physical extents on this volume to other volumes?" msgstr "" "Физический раздел %s используется.\n" "Желаете ли вы переместить используемые физические области на этом разделе на " "другие разделы?" #: diskdrake/interactive.pm:843 #, c-format msgid "Moving physical extents" msgstr "Перемещение физических расширений" #: diskdrake/interactive.pm:861 #, c-format msgid "This partition can not be used for loopback" msgstr "Этот раздел не может быть использован для loopback" #: diskdrake/interactive.pm:874 #, c-format msgid "Loopback" msgstr "Loopback" #: diskdrake/interactive.pm:875 #, c-format msgid "Loopback file name: " msgstr "Имя файла loopback: " #: diskdrake/interactive.pm:880 #, c-format msgid "Give a file name" msgstr "Укажите имя файла" #: diskdrake/interactive.pm:883 #, c-format msgid "File is already used by another loopback, choose another one" msgstr "Файл уже используется другим loopback, выберите другой" #: diskdrake/interactive.pm:884 #, c-format msgid "File already exists. Use it?" msgstr "Файл уже существует. Использовать его?" #: diskdrake/interactive.pm:916 diskdrake/interactive.pm:919 #, c-format msgid "Mount options" msgstr "Параметры монтирования" #: diskdrake/interactive.pm:926 #, c-format msgid "Various" msgstr "Различные" #: diskdrake/interactive.pm:991 #, c-format msgid "device" msgstr "устройство" #: diskdrake/interactive.pm:992 #, c-format msgid "level" msgstr "уровень" #: diskdrake/interactive.pm:993 #, c-format msgid "chunk size in KiB" msgstr "размер куска в KiB" #: diskdrake/interactive.pm:1011 #, c-format msgid "Be careful: this operation is dangerous." msgstr "Осторожно: эта операция опасна." #: diskdrake/interactive.pm:1026 #, c-format msgid "What type of partitioning?" msgstr "Какой тип разбиения на разделы?" #: diskdrake/interactive.pm:1064 #, c-format msgid "You'll need to reboot before the modification can take place" msgstr "Вам необходимо перегрузиться, чтобы изменения вступили в силу" #: diskdrake/interactive.pm:1073 #, c-format msgid "Partition table of drive %s is going to be written to disk!" msgstr "Таблица разделов устройства %s будет записана на диск!" #: diskdrake/interactive.pm:1098 #, c-format msgid "After formatting partition %s, all data on this partition will be lost" msgstr "" "После форматирования раздела %s, все данные на этом разделе будут потеряны" #: diskdrake/interactive.pm:1103 fs/partitioning.pm:48 #, c-format msgid "Check bad blocks?" msgstr "Проверить плохие блоки?" #: diskdrake/interactive.pm:1117 #, c-format msgid "Move files to the new partition" msgstr "Переместить файлы на новый раздел" #: diskdrake/interactive.pm:1117 #, c-format msgid "Hide files" msgstr "Скрыть файлы" #: diskdrake/interactive.pm:1118 #, c-format msgid "" "Directory %s already contains data\n" "(%s)\n" "\n" "You can either choose to move the files into the partition that will be " "mounted there or leave them where they are (which results in hiding them by " "the contents of the mounted partition)" msgstr "" "Каталог %s уже содержит данные\n" "(%s)\n" "\n" "Вы можете или переместить файлы на раздел, который потом будет примонтирован " "в этот каталог, или оставить оставить их нетронутыми (в результате чего они " "будут скрыты примонтированным каталогом)." #: diskdrake/interactive.pm:1133 #, c-format msgid "Moving files to the new partition" msgstr "Перемещение файлов в новый раздел" #: diskdrake/interactive.pm:1137 #, c-format msgid "Copying %s" msgstr "Копируется %s" #: diskdrake/interactive.pm:1141 #, c-format msgid "Removing %s" msgstr "Удаляется %s" #: diskdrake/interactive.pm:1155 #, c-format msgid "partition %s is now known as %s" msgstr "раздел %s теперь известен как %s" #: diskdrake/interactive.pm:1156 #, c-format msgid "Partitions have been renumbered: " msgstr "У Для разделов были изменены номера: " #: diskdrake/interactive.pm:1181 diskdrake/interactive.pm:1244 #, c-format msgid "Device: " msgstr "Устройство: " #: diskdrake/interactive.pm:1182 #, c-format msgid "Volume label: " msgstr "Метка тома: " #: diskdrake/interactive.pm:1183 #, c-format msgid "UUID: " msgstr "UUID: " #: diskdrake/interactive.pm:1184 #, c-format msgid "DOS drive letter: %s (just a guess)\n" msgstr "буква диска DOS: %s (просто предположение)\n" #: diskdrake/interactive.pm:1188 diskdrake/interactive.pm:1197 #: diskdrake/interactive.pm:1263 #, c-format msgid "Type: " msgstr "Тип: " #: diskdrake/interactive.pm:1192 diskdrake/interactive.pm:1248 #, c-format msgid "Name: " msgstr "Имя: " #: diskdrake/interactive.pm:1199 #, c-format msgid "Start: sector %s\n" msgstr "Начало: сектор %s\n" #: diskdrake/interactive.pm:1200 #, c-format msgid "Size: %s" msgstr "Размер: %s" #: diskdrake/interactive.pm:1202 #, c-format msgid ", %s sectors" msgstr ", %s секторов" #: diskdrake/interactive.pm:1204 #, c-format msgid "Cylinder %d to %d\n" msgstr "Цилиндр %d до %d\n" #: diskdrake/interactive.pm:1205 #, c-format msgid "Number of logical extents: %d\n" msgstr "Количество логических областей: %d\n" #: diskdrake/interactive.pm:1206 #, c-format msgid "Formatted\n" msgstr "Отформатирован\n" #: diskdrake/interactive.pm:1207 #, c-format msgid "Not formatted\n" msgstr "Не отформатирован\n" #: diskdrake/interactive.pm:1208 #, c-format msgid "Mounted\n" msgstr "Примонтирован\n" #: diskdrake/interactive.pm:1209 #, c-format msgid "RAID %s\n" msgstr "RAID %s\n" #: diskdrake/interactive.pm:1214 #, c-format msgid "" "Loopback file(s):\n" " %s\n" msgstr "" "Файл(ы) loopback:\n" " %s\n" #: diskdrake/interactive.pm:1215 #, c-format msgid "" "Partition booted by default\n" " (for MS-DOS boot, not for lilo)\n" msgstr "" "Загрузочный раздел по умолчанию\n" " (для загрузки MS-DOS, не для lilo)\n" #: diskdrake/interactive.pm:1217 #, c-format msgid "Level %s\n" msgstr "Уровень %s\n" #: diskdrake/interactive.pm:1218 #, c-format msgid "Chunk size %d KiB\n" msgstr "Размер chunk %d KiB\n" #: diskdrake/interactive.pm:1219 #, c-format msgid "RAID-disks %s\n" msgstr "RAID-диски %s\n" #: diskdrake/interactive.pm:1221 #, c-format msgid "Loopback file name: %s" msgstr "Имя файла loopback: %s" #: diskdrake/interactive.pm:1224 #, c-format msgid "" "\n" "Chances are, this partition is\n" "a Driver partition. You should\n" "probably leave it alone.\n" msgstr "" "\n" "Есть вероятность, что этот раздел\n" "является разделом драйвера.\n" "Лучше вам его не трогать.\n" #: diskdrake/interactive.pm:1227 #, c-format msgid "" "\n" "This special Bootstrap\n" "partition is for\n" "dual-booting your system.\n" msgstr "" "\n" "Этот специальный раздел\n" "Bootstrap предназначен\n" "для двойной загрузки системы.\n" #: diskdrake/interactive.pm:1236 #, c-format msgid "Free space on %s (%s)" msgstr "Свободное пространство на %s (%s)" #: diskdrake/interactive.pm:1245 #, c-format msgid "Read-only" msgstr "Только для чтения" #: diskdrake/interactive.pm:1246 #, c-format msgid "Size: %s\n" msgstr "Размер: %s\n" #: diskdrake/interactive.pm:1247 #, c-format msgid "Geometry: %s cylinders, %s heads, %s sectors\n" msgstr "Геометрия: %s цилиндров, %s головок, %s секторов\n" #: diskdrake/interactive.pm:1249 #, c-format msgid "Medium type: " msgstr "Тип носителя: " #: diskdrake/interactive.pm:1250 #, c-format msgid "LVM-disks %s\n" msgstr "LVM-диски %s\n" #: diskdrake/interactive.pm:1251 #, c-format msgid "Partition table type: %s\n" msgstr "Тип таблицы разделов: %s\n" #: diskdrake/interactive.pm:1252 #, c-format msgid "on channel %d id %d\n" msgstr "на канале %d id %d\n" #: diskdrake/interactive.pm:1295 #, c-format msgid "Filesystem encryption key" msgstr "Ключ шифрования файловой системы: " #: diskdrake/interactive.pm:1296 #, c-format msgid "Choose your filesystem encryption key" msgstr "Выберите ключ шифрования вашей файловой системы" #: diskdrake/interactive.pm:1299 #, c-format msgid "This encryption key is too simple (must be at least %d characters long)" msgstr "" "Этот ключ шифрования слишком прост (должен быть длиной по крайней мере в %d " "символов)" #: diskdrake/interactive.pm:1300 #, c-format msgid "The encryption keys do not match" msgstr "Ключи шифрования не совпадают" #: diskdrake/interactive.pm:1303 #, c-format msgid "Encryption key" msgstr "Ключ шифрования" #: diskdrake/interactive.pm:1304 #, c-format msgid "Encryption key (again)" msgstr "Ключ шифрования (еще раз)" #: diskdrake/interactive.pm:1306 #, c-format msgid "Encryption algorithm" msgstr "Алгоритм шифрования" #: diskdrake/removable.pm:46 #, c-format msgid "Change type" msgstr "Изменить тип" #: diskdrake/smbnfs_gtk.pm:81 interactive.pm:129 interactive.pm:546 #: interactive/curses.pm:260 interactive/http.pm:104 interactive/http.pm:160 #: interactive/stdio.pm:39 interactive/stdio.pm:148 ugtk2.pm:415 ugtk2.pm:517 #: ugtk2.pm:526 ugtk2.pm:813 #, c-format msgid "Cancel" msgstr "Отмена" #: diskdrake/smbnfs_gtk.pm:164 #, c-format msgid "Can not login using username %s (bad password?)" msgstr "Невозможно войти под пользователем %s (неверный пароль?)" #: diskdrake/smbnfs_gtk.pm:168 diskdrake/smbnfs_gtk.pm:177 #, c-format msgid "Domain Authentication Required" msgstr "Требуется аутентификация домена" #: diskdrake/smbnfs_gtk.pm:169 #, c-format msgid "Which username" msgstr "Какое имя пользователя" #: diskdrake/smbnfs_gtk.pm:169 #, c-format msgid "Another one" msgstr "Еще один" #: diskdrake/smbnfs_gtk.pm:178 #, c-format msgid "" "Please enter your username, password and domain name to access this host." msgstr "" "Пожалуйста, введите свои имя пользователя, пароль и имя домена, чтобы " "получить доступ к хосту" #: diskdrake/smbnfs_gtk.pm:180 #, c-format msgid "Username" msgstr "Имя пользователя" #: diskdrake/smbnfs_gtk.pm:182 #, c-format msgid "Domain" msgstr "Домен" #: diskdrake/smbnfs_gtk.pm:206 #, c-format msgid "Search servers" msgstr "Поиск серверов" #: diskdrake/smbnfs_gtk.pm:211 #, c-format msgid "Search new servers" msgstr "Поиск новых серверов" #: do_pkgs.pm:19 do_pkgs.pm:57 #, c-format msgid "The package %s needs to be installed. Do you want to install it?" msgstr "Необходимо установить пакет %s. Хотите установить его?" #: do_pkgs.pm:23 do_pkgs.pm:44 do_pkgs.pm:60 #, c-format msgid "Could not install the %s package!" msgstr "Невозможно установить пакет %s !" #: do_pkgs.pm:28 do_pkgs.pm:65 #, c-format msgid "Mandatory package %s is missing" msgstr "Обязательный пакет %s отсутствует" #: do_pkgs.pm:39 #, c-format msgid "The following packages need to be installed:\n" msgstr "Следующие пакеты должны быть установлены:\n" #: do_pkgs.pm:221 #, c-format msgid "Installing packages..." msgstr "Устанавливаются пакеты..." #: do_pkgs.pm:267 #, c-format msgid "Removing packages..." msgstr "Удаляются пакеты..." #: fs/any.pm:17 #, c-format msgid "" "An error occurred - no valid devices were found on which to create new " "filesystems. Please check your hardware for the cause of this problem" msgstr "" "Произошла ошибка - не были найдены верные устройства для создания новых " "файловых систем. Пожалуйста, проверьте свое аппаратное обеспечение для " "выяснения вероятной причины." #: fs/any.pm:75 fs/partitioning_wizard.pm:59 #, c-format msgid "You must have a FAT partition mounted in /boot/efi" msgstr "У вас должен быть раздел FAT, примонтированный на /boot/efi" #: fs/format.pm:63 fs/format.pm:70 #, c-format msgid "Formatting partition %s" msgstr "Форматируется раздел %s" #: fs/format.pm:67 #, c-format msgid "Creating and formatting file %s" msgstr "Создается и форматируется файл %s" #: fs/format.pm:122 #, c-format msgid "I do not know how to format %s in type %s" msgstr "Не знаю как форматировать %s с типом %s" #: fs/format.pm:127 fs/format.pm:129 #, c-format msgid "%s formatting of %s failed" msgstr "%s форматирование %s завершилось неудачно" #: fs/loopback.pm:24 #, c-format msgid "Circular mounts %s\n" msgstr "Замыкающие монтирования %s\n" #: fs/mount.pm:79 #, c-format msgid "Mounting partition %s" msgstr "Монтируется раздел %s" #: fs/mount.pm:80 #, c-format msgid "mounting partition %s in directory %s failed" msgstr "монтирование раздела %s в каталог %s завершилось неудачно" #: fs/mount.pm:85 fs/mount.pm:102 #, c-format msgid "Checking %s" msgstr "Проверяется %s" #: fs/mount.pm:119 partition_table.pm:403 #, c-format msgid "error unmounting %s: %s" msgstr "ошибка размонтирования %s: %s" #: fs/mount.pm:134 #, c-format msgid "Enabling swap partition %s" msgstr "Включается раздел swap %s" #: fs/mount_options.pm:115 #, c-format msgid "Use an encrypted file system" msgstr "Использовать шифрованную файловую систему" #: fs/mount_options.pm:117 #, c-format msgid "Flush write cache on file close" msgstr "Очищать кэш записи при закрытии файла" #: fs/mount_options.pm:119 #, c-format msgid "Enable group disk quota accounting and optionally enforce limits" msgstr "" "Разрешить подсчет дисковых квот для групп и опционально установку лимитов" #: fs/mount_options.pm:121 #, c-format msgid "" "Do not update inode access times on this file system\n" "(e.g, for faster access on the news spool to speed up news servers)." msgstr "" "Не обновлять время доступа к inode на этой файловой системе\n" "(нужно для более быстрого доступа к спулу новостей для ускорения работы " "серверов новостей)." #: fs/mount_options.pm:124 #, c-format msgid "" "Update inode access times on this filesystem in a more efficient way\n" "(e.g, for faster access on the news spool to speed up news servers)." msgstr "" "Не обновлять время доступа к inode на этой файловой системе\n" "(нужно для более быстрого доступа к спулу новостей для ускорения работы " "серверов новостей)." #: fs/mount_options.pm:127 #, c-format msgid "" "Can only be mounted explicitly (i.e.,\n" "the -a option will not cause the file system to be mounted)." msgstr "" "Может быть примонтировано только явным образом (то есть,\n" "опция -a не приведет к монтированию файловой системы)." #: fs/mount_options.pm:130 #, c-format msgid "Do not interpret character or block special devices on the file system." msgstr "" "Не интерпретировать символьные или специальные блочные устройства в файловой " "системе." #: fs/mount_options.pm:132 #, c-format msgid "" "Do not allow execution of any binaries on the mounted\n" "file system. This option might be useful for a server that has file systems\n" "containing binaries for architectures other than its own." msgstr "" "Не позволять выполнение любых бинарников на примонтированной\n" "файловой системе. Эта опция может быть полезна для серверов,\n" "которые имеют файловые системы, содержащие бинарники для архитектур,\n" "отличных от их собственной." #: fs/mount_options.pm:136 #, c-format msgid "" "Do not allow set-user-identifier or set-group-identifier\n" "bits to take effect. (This seems safe, but is in fact rather unsafe if you\n" "have suidperl(1) installed.)" msgstr "" "Не разрешать битам set-user-identifier или set-group-identifier\n" "вступать в силу. (Это вроде бы безопасно, но на деле будет более безопасно \n" "если у вас установлен suidperl(1).)" #: fs/mount_options.pm:140 #, c-format msgid "Mount the file system read-only." msgstr "Монтировать файловую систему в режиме только-для-чтения." #: fs/mount_options.pm:142 #, c-format msgid "All I/O to the file system should be done synchronously." msgstr "Все I/O для файловой системы должны быть выполнены синхронно." #: fs/mount_options.pm:144 #, c-format msgid "Allow every user to mount and umount the file system." msgstr "" "Разрешить всем пользователям монтировать и размонтировать файловую систему." #: fs/mount_options.pm:146 #, c-format msgid "Allow an ordinary user to mount the file system." msgstr "Разрешить обычному пользователям монтировать файловую систему." #: fs/mount_options.pm:148 #, c-format msgid "Enable user disk quota accounting, and optionally enforce limits" msgstr "" "Включить учёт дисковых квот для пользователей и, опционально, установку " "лимитов." #: fs/mount_options.pm:150 #, c-format msgid "Support \"user.\" extended attributes" msgstr "Поддержка расширенных атрибутов \"user.\"" #: fs/mount_options.pm:152 #, c-format msgid "Give write access to ordinary users" msgstr "Разрешить запись обычным пользователям." #: fs/mount_options.pm:154 #, c-format msgid "Give read-only access to ordinary users" msgstr "Разрешить доступ только-на-чтение обычным пользователям." #: fs/mount_point.pm:80 #, c-format msgid "Duplicate mount point %s" msgstr "Дублирование точки монтирования %s" #: fs/mount_point.pm:95 #, c-format msgid "No partition available" msgstr "Нет доступных разделов" #: fs/mount_point.pm:98 #, c-format msgid "Scanning partitions to find mount points" msgstr "Сканируются разделы на наличие точек монтирования" #: fs/mount_point.pm:105 #, c-format msgid "Choose the mount points" msgstr "Выберите точки монтирования" #: fs/partitioning.pm:46 #, c-format msgid "Choose the partitions you want to format" msgstr "Выберите разделы, которые вы хотите отформатировать" #: fs/partitioning.pm:75 #, c-format msgid "" "Failed to check filesystem %s. Do you want to repair the errors? (beware, " "you can lose data)" msgstr "" "Проверка файловой системы %s завершилась неудачей. Хотите исправить ошибки " "(осторожно, вы можете потерять данные)?" #: fs/partitioning.pm:78 #, c-format msgid "Not enough swap space to fulfill installation, please add some" msgstr "" "Не хватает swap-пространства для завершения установки, пожалуйста, увеличьте " "его немного" #: fs/partitioning_wizard.pm:51 #, c-format msgid "" "You must have a root partition.\n" "For this, create a partition (or click on an existing one).\n" "Then choose action ``Mount point'' and set it to `/'" msgstr "" "У вас должен быть корневой раздел.\n" "Для этого создайте раздел (или выберите уже существующий).\n" "Затем выберите действие ``Точка монтирования'' и установите ее в `/'" #: fs/partitioning_wizard.pm:56 #, c-format msgid "" "You do not have a swap partition.\n" "\n" "Continue anyway?" msgstr "" "У вас нет раздела swap\n" "\n" "Желаете продолжить?" #: fs/partitioning_wizard.pm:84 #, c-format msgid "Use free space" msgstr "Использовать свободное место" #: fs/partitioning_wizard.pm:86 #, c-format msgid "Not enough free space to allocate new partitions" msgstr "Недостаточно свободного места для размещения новых разделов" #: fs/partitioning_wizard.pm:94 #, c-format msgid "Use existing partitions" msgstr "Использовать существующие разделы" #: fs/partitioning_wizard.pm:96 #, c-format msgid "There is no existing partition to use" msgstr "Нет существующих для использования разделов" #: fs/partitioning_wizard.pm:103 #, c-format msgid "Use the Microsoft Windows® partition for loopback" msgstr "Использовать раздел Microsoft Windows® для loopback" #: fs/partitioning_wizard.pm:106 #, c-format msgid "Which partition do you want to use for Linux4Win?" msgstr "Какой раздел вы хотите использовать для Linux4Win?" #: fs/partitioning_wizard.pm:108 #, c-format msgid "Choose the sizes" msgstr "Выберите размеры" #: fs/partitioning_wizard.pm:109 #, c-format msgid "Root partition size in MB: " msgstr "Размер корневого раздела в MB: " #: fs/partitioning_wizard.pm:110 #, c-format msgid "Swap partition size in MB: " msgstr "Размер раздела swap в MB: " #: fs/partitioning_wizard.pm:119 #, c-format msgid "There is no FAT partition to use as loopback (or not enough space left)" msgstr "" "Отсутствует раздел FAT для использования в качестве loopback (или не хватает " "места)" #: fs/partitioning_wizard.pm:127 #, c-format msgid "Use the free space on a Microsoft Windows® partition" msgstr "Использовать свободное место в разделе Microsoft Windows®" #: fs/partitioning_wizard.pm:129 #, c-format msgid "Which partition do you want to resize?" msgstr "Размер какого из разделов вы хотите изменить?" #: fs/partitioning_wizard.pm:143 #, c-format msgid "" "The FAT resizer is unable to handle your partition, \n" "the following error occurred: %s" msgstr "" "Программа изменения размера FAT не может обработать ваш раздел, \n" "произошла следующая ошибка: %s" #: fs/partitioning_wizard.pm:146 #, c-format msgid "Computing the size of the Microsoft Windows® partition" msgstr "Вычисляется размер раздела Microsoft Windows®" #: fs/partitioning_wizard.pm:153 #, c-format msgid "" "Your Microsoft Windows® partition is too fragmented. Please reboot your " "computer under Microsoft Windows®, run the ``defrag'' utility, then restart " "the Mandriva Linux installation." msgstr "" "Ваш раздел Microsoft Windows® слишком фрагментирован. Пожалуйста, " "перезагрузите свой компьютер под Microsoft Windows®, запустите утилиту " "``defrag'', а затем повторно запустите установку Mandriva Linux." #: fs/partitioning_wizard.pm:156 #, c-format msgid "" "WARNING!\n" "\n" "\n" "Your Microsoft Windows® partition will be now resized.\n" "\n" "\n" "Be careful: this operation is dangerous. If you have not already done so, " "you first need to exit the installation, run \"chkdsk c:\" from a Command " "Prompt under Microsoft Windows® (beware, running graphical program \"scandisk" "\" is not enough, be sure to use \"chkdsk\" in a Command Prompt!), " "optionally run defrag, then restart the installation. You should also backup " "your data.\n" "\n" "\n" "When sure, press %s." msgstr "" "ПРЕДУПРЕЖДЕНИЕ!\n" "\n" "\n" "Сейчас DrakX изменит размер вашего раздела Windows.\n" "\n" "\n" "Будьте осторожны: эта операция опасна. Если вы еще этого не сделали, вам " "стоит выйти из инсталляции, запустить \"chkdsk c:\" в командной строке под " "Windows (имейте в виду, что запуска графической программы \"scandisk\" " "недостаточно, обязательно запустите \"chkdsk\" в командной строке), по " "желанию выполнить дефрагментацию (defrag), затем начать установку снова. Вы " "также должны сделать резервную копию данных.\n" "\n" "\n" "Если уверены, нажмите %s." #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: fs/partitioning_wizard.pm:165 interactive.pm:545 interactive/curses.pm:263 #: ugtk2.pm:519 #, c-format msgid "Next" msgstr "Далее" #: fs/partitioning_wizard.pm:168 #, c-format msgid "Partitionning" msgstr "Разметка диска" #: fs/partitioning_wizard.pm:168 #, c-format msgid "Which size do you want to keep for Microsoft Windows® on partition %s?" msgstr "Какой объём оставить для раздела %s с Microsoft Windows®?" #: fs/partitioning_wizard.pm:169 #, c-format msgid "Size" msgstr "Размер" #: fs/partitioning_wizard.pm:178 #, c-format msgid "Resizing Microsoft Windows® partition" msgstr "Изменяется размер раздела Microsoft Windows®" #: fs/partitioning_wizard.pm:183 #, c-format msgid "FAT resizing failed: %s" msgstr "Изменение размера FAT завершилось неудачно: %s" #: fs/partitioning_wizard.pm:198 #, c-format msgid "There is no FAT partition to resize (or not enough space left)" msgstr "Отсутствует раздел FAT для изменения размера (или не хватает места)" #: fs/partitioning_wizard.pm:203 #, c-format msgid "Remove Microsoft Windows®" msgstr "Удалить Microsoft Windows®" #: fs/partitioning_wizard.pm:203 #, c-format msgid "Erase and use entire disk" msgstr "Очистить и использовать весь диск" #: fs/partitioning_wizard.pm:205 #, c-format msgid "You have more than one hard drive, which one do you install linux on?" msgstr "" "У вас есть более одного жёсткого диска. На какой из них вы хотите установить " "Linux?" #: fs/partitioning_wizard.pm:210 fsedit.pm:570 #, c-format msgid "ALL existing partitions and their data will be lost on drive %s" msgstr "ВСЕ существующие разделы и данные на них будут потеряны на диске %s" #: fs/partitioning_wizard.pm:220 #, c-format msgid "Custom disk partitioning" msgstr "Ручная разметка диска" #: fs/partitioning_wizard.pm:226 #, c-format msgid "Use fdisk" msgstr "Используйте fdisk" #: fs/partitioning_wizard.pm:229 #, c-format msgid "" "You can now partition %s.\n" "When you are done, do not forget to save using `w'" msgstr "" "Теперь вы можете разметить %s.\n" "После завершения не забудьте сохранить при помощи `w'" #: fs/partitioning_wizard.pm:269 #, c-format msgid "I can not find any room for installing" msgstr "Вообще не могу найти места для установки" #: fs/partitioning_wizard.pm:278 #, c-format msgid "The DrakX Partitioning wizard found the following solutions:" msgstr "Мастер Разметки диска DrakX нашел следующие решения:" #: fs/partitioning_wizard.pm:287 #, c-format msgid "Partitioning failed: %s" msgstr "Разметка на разделы завершилась неудачно: %s" #: fs/type.pm:370 #, c-format msgid "You can not use JFS for partitions smaller than 16MB" msgstr "Вы не можете использовать JFS на разделах размером менее 16MB" #: fs/type.pm:371 #, c-format msgid "You can not use ReiserFS for partitions smaller than 32MB" msgstr "Вы не можете использовать ReiserFS на разделах менее 32MB" #: fsedit.pm:23 #, c-format msgid "simple" msgstr "простой" #: fsedit.pm:27 #, c-format msgid "with /usr" msgstr "с /usr" #: fsedit.pm:32 #, c-format msgid "server" msgstr "сервер" #: fsedit.pm:116 #, c-format msgid "BIOS software RAID detected on disks %s. Activate it?" msgstr "На дисках %s обнаружен программный (BIOS) RAID-массив. Включить его?" #: fsedit.pm:223 #, c-format msgid "" "I can not read the partition table of device %s, it's too corrupted for me :" "(\n" "I can try to go on, erasing over bad partitions (ALL DATA will be lost!).\n" "The other solution is to not allow DrakX to modify the partition table.\n" "(the error is %s)\n" "\n" "Do you agree to lose all the partitions?\n" msgstr "" "Невозможно прочитать таблицу разделов на устройстве %s, она слишком " "повреждена :(\n" "Можно попытаться продолжить, очистив плохие разделы (ВСЯ ИНФОРМАЦИЯ будет " "потеряна!).\n" "Другой вариант - не разрешить DrakX'у изменить таблицу разделов.\n" "(ошибка %s)\n" "\n" "Вы согласны потерять все разделы?\n" #: fsedit.pm:397 #, c-format msgid "Mount points must begin with a leading /" msgstr "Точка монтирования должна начинаться с /" #: fsedit.pm:398 #, c-format msgid "Mount points should contain only alphanumerical characters" msgstr "Точки монтирования должны содержать только символы букв и цифр" #: fsedit.pm:399 #, c-format msgid "There is already a partition with mount point %s\n" msgstr "Уже есть раздел с точкой монтирования %s\n" #: fsedit.pm:403 #, c-format msgid "" "You've selected a software RAID partition as root (/).\n" "No bootloader is able to handle this without a /boot partition.\n" "Please be sure to add a /boot partition" msgstr "" "Вы выбрали программный раздел RAID в качестве корневого (/).\n" "Никакой загрузчик не в состоянии управлять им без раздела /boot.\n" "Пожалуйста, убедитесь, что раздел /boot добавлен" #: fsedit.pm:409 #, c-format msgid "" "You can not use the LVM Logical Volume for mount point %s since it spans " "physical volumes" msgstr "" "Вы не можете использовать логический том LVM для точки монтирования %s, " "поскольку он распределён по физическим разделам" #: fsedit.pm:411 #, c-format msgid "" "You've selected the LVM Logical Volume as root (/).\n" "The bootloader is not able to handle this when the volume spans physical " "volumes.\n" "You should create a /boot partition first" msgstr "" "Вы выбрали логический том LVM в качестве корневого (/).\n" "Загрузчик не сможет управлять им, если том распределён по физическим " "разделам.\n" "Вам следует сначала создать раздел /boot" #: fsedit.pm:415 fsedit.pm:417 #, c-format msgid "This directory should remain within the root filesystem" msgstr "Этот каталог должен оставаться в пределах корневой файловой системы" #: fsedit.pm:419 fsedit.pm:421 #, c-format msgid "" "You need a true filesystem (ext2/ext3, reiserfs, xfs, or jfs) for this mount " "point\n" msgstr "" "Для этой точки монтирования требуется реальная файловая система\n" "(ext2/ext3, reiserfs, xfs или jfs)\n" #: fsedit.pm:423 #, c-format msgid "You can not use an encrypted file system for mount point %s" msgstr "" "Вы не можете использовать зашифрованную файловую систему для точки " "монтирования %s" #: fsedit.pm:487 #, c-format msgid "Not enough free space for auto-allocating" msgstr "Недостаточно свободного места для автоматического распределения" #: fsedit.pm:489 #, c-format msgid "Nothing to do" msgstr "Нечего выполнять" #: harddrake/data.pm:64 #, c-format msgid "SATA controllers" msgstr "Контроллеры SATA" #: harddrake/data.pm:73 #, c-format msgid "RAID controllers" msgstr "Контроллеры RAID" #: harddrake/data.pm:83 #, c-format msgid "(E)IDE/ATA controllers" msgstr "Контроллеры (E)IDE/ATA" #: harddrake/data.pm:93 #, c-format msgid "Card readers" msgstr "Устройства для считывания с карт" #: harddrake/data.pm:102 #, c-format msgid "Firewire controllers" msgstr "Контроллеры Firewire" #: harddrake/data.pm:111 #, c-format msgid "PCMCIA controllers" msgstr "Контроллеры PCMCIA" #: harddrake/data.pm:120 #, c-format msgid "SCSI controllers" msgstr "Контроллеры SCSI" #: harddrake/data.pm:129 #, c-format msgid "USB controllers" msgstr "Контроллеры USB" #: harddrake/data.pm:138 #, c-format msgid "USB ports" msgstr "Порты USB" #: harddrake/data.pm:147 #, c-format msgid "SMBus controllers" msgstr "Контроллеры SMBus" #: harddrake/data.pm:156 #, c-format msgid "Bridges and system controllers" msgstr "Мосты и системные контроллеры" #: harddrake/data.pm:168 #, c-format msgid "Floppy" msgstr "Дискета" #: harddrake/data.pm:178 #, c-format msgid "Zip" msgstr "Zip" #: harddrake/data.pm:194 #, c-format msgid "Hard Disk" msgstr "Диск" #: harddrake/data.pm:204 #, c-format msgid "USB Mass Storage Devices" msgstr "Устройства хранения данных на USB" #: harddrake/data.pm:213 #, c-format msgid "CDROM" msgstr "CDROM" #: harddrake/data.pm:223 #, c-format msgid "CD/DVD burners" msgstr "Пишущие CD/DVD" #: harddrake/data.pm:233 #, c-format msgid "DVD-ROM" msgstr "DVD-ROM" #: harddrake/data.pm:243 #, c-format msgid "Tape" msgstr "Магнитная лента" #: harddrake/data.pm:254 #, c-format msgid "AGP controllers" msgstr "Контроллеры AGP" #: harddrake/data.pm:263 #, c-format msgid "Videocard" msgstr "Видеокарта" #: harddrake/data.pm:272 #, c-format msgid "DVB card" msgstr "DVB-карта" #: harddrake/data.pm:280 #, c-format msgid "Tvcard" msgstr "ТВ-карта" #: harddrake/data.pm:290 #, c-format msgid "Other MultiMedia devices" msgstr "Другие устройства мультимедиа" #: harddrake/data.pm:299 #, c-format msgid "Soundcard" msgstr "Звуковая карта" #: harddrake/data.pm:312 #, c-format msgid "Webcam" msgstr "Веб-камера" #: harddrake/data.pm:326 #, c-format msgid "Processors" msgstr "Процессоры" #: harddrake/data.pm:336 #, c-format msgid "ISDN adapters" msgstr "Адаптеры ISDN" #: harddrake/data.pm:347 #, c-format msgid "USB sound devices" msgstr "USB звуковые устройства" #: harddrake/data.pm:356 #, c-format msgid "Radio cards" msgstr "Радио-карты" #: harddrake/data.pm:365 #, c-format msgid "ATM network cards" msgstr "ATM сетевые карты" #: harddrake/data.pm:374 #, c-format msgid "WAN network cards" msgstr "WAN сетевые карты" #: harddrake/data.pm:383 #, c-format msgid "Bluetooth devices" msgstr "Устройства Bluetooth" #: harddrake/data.pm:392 #, c-format msgid "Ethernetcard" msgstr "Карта ethernet" #: harddrake/data.pm:409 #, c-format msgid "Modem" msgstr "Модем" #: harddrake/data.pm:419 #, c-format msgid "ADSL adapters" msgstr "Адаптеры ADSL" #: harddrake/data.pm:431 #, c-format msgid "Memory" msgstr "Память" #: harddrake/data.pm:440 #, c-format msgid "Printer" msgstr "Принтер" #. -PO: these are joysticks controllers: #: harddrake/data.pm:454 #, c-format msgid "Game port controllers" msgstr "Контроллеры игровых портов" #: harddrake/data.pm:463 #, c-format msgid "Joystick" msgstr "Джойстик" #: harddrake/data.pm:473 #, c-format msgid "Keyboard" msgstr "Клавиатура" #: harddrake/data.pm:486 #, c-format msgid "Tablet and touchscreen" msgstr "Планшет и сенсорная панель" #: harddrake/data.pm:495 #, c-format msgid "Mouse" msgstr "Мышь" #: harddrake/data.pm:509 #, c-format msgid "Biometry" msgstr "Биометрия" #: harddrake/data.pm:517 #, c-format msgid "UPS" msgstr "ИБП" #: harddrake/data.pm:526 #, c-format msgid "Scanner" msgstr "Сканер" #: harddrake/data.pm:537 #, c-format msgid "Unknown/Others" msgstr "Неизвестный/Другие" #: harddrake/data.pm:565 #, c-format msgid "cpu # " msgstr "процессор # " #: harddrake/sound.pm:285 #, c-format msgid "Please Wait... Applying the configuration" msgstr "Подождите... Применяются настройки" #: harddrake/sound.pm:346 #, c-format msgid "Enable PulseAudio" msgstr "Включить PulseAudio" #: harddrake/sound.pm:350 #, c-format msgid "Automatic routing from ALSA to PulseAudio" msgstr "Автоматическая маршрутизация из ALSA в PulseAudio" #: harddrake/sound.pm:355 #, c-format msgid "Enable 5.1 sound with Pulse Audio" msgstr "Включить 5.1-звук через Pulse Audio" #: harddrake/sound.pm:360 #, c-format msgid "Enable user switching for audio applications" msgstr "Включить переключение пользователей для звукоывх приложений" #: harddrake/sound.pm:365 #, c-format msgid "Reset sound mixer to default values" msgstr "Восстановить значения микшера по умолчанию " #: harddrake/sound.pm:370 #, c-format msgid "Trouble shooting" msgstr "Поиск и устранение неисправностей" #: harddrake/sound.pm:377 #, c-format msgid "No alternative driver" msgstr "Альтернативный драйвер отсутствует" #: harddrake/sound.pm:378 #, c-format msgid "" "There's no known OSS/ALSA alternative driver for your sound card (%s) which " "currently uses \"%s\"" msgstr "" "Для данной звуковой карты (%s) отсутствует альтернативный драйвер OSS/ALSA, " "которая в данный момент использует \"%s\"" #: harddrake/sound.pm:385 #, c-format msgid "Sound configuration" msgstr "Настройка звука" #: harddrake/sound.pm:387 #, c-format msgid "" "Here you can select an alternative driver (either OSS or ALSA) for your " "sound card (%s)." msgstr "" "Здесь можно выбрать альтернативный драйвер (OSS или ALSA) для звуковой карты " "(%s)" #. -PO: here the first %s is either "OSS" or "ALSA", #. -PO: the second %s is the name of the current driver #. -PO: and the third %s is the name of the default driver #: harddrake/sound.pm:392 #, c-format msgid "" "\n" "\n" "Your card currently use the %s\"%s\" driver (default driver for your card is " "\"%s\")" msgstr "" "\n" "\n" "В настоящий момент ваша карта использует драйвер %s\"%s\" (драйвером по " "умолчанию для вашей карты является \"%s\")" #: harddrake/sound.pm:394 #, c-format msgid "" "OSS (Open Sound System) was the first sound API. It's an OS independent " "sound API (it's available on most UNIX(tm) systems) but it's a very basic " "and limited API.\n" "What's more, OSS drivers all reinvent the wheel.\n" "\n" "ALSA (Advanced Linux Sound Architecture) is a modularized architecture " "which\n" "supports quite a large range of ISA, USB and PCI cards.\n" "\n" "It also provides a much higher API than OSS.\n" "\n" "To use alsa, one can either use:\n" "- the old compatibility OSS api\n" "- the new ALSA api that provides many enhanced features but requires using " "the ALSA library.\n" msgstr "" "OSS (Открытая звуковая система) была первой звуковой API. Она является " "звуковой API, не зависящей от ОС (доступна на большинстве UNIX-системах), но " "она все-таки очень простая и ограниченная API.\n" "Куда уж больше, все драйверы OSS и так заново открывают колесо.\n" "\n" "ALSA (Расширенная звуковая архитектура Linux) представляет собой модульную " "архитектуру, которая поддерживает довольно широкий диапазон ISA, USB и PCI-" "карт.\n" "\n" "Она также предоставляет значительно большую API, чем OSS.\n" "\n" "Для поддержки alsa можно использовать:\n" "- старую api, совместимую с OSS\n" "- новую api ALSA, предоставляющую много расширенных возможностей, но " "требующую библиотеку ALSA.\n" #: harddrake/sound.pm:408 harddrake/sound.pm:491 #, c-format msgid "Driver:" msgstr "Драйвер:" #: harddrake/sound.pm:422 #, c-format msgid "" "The old \"%s\" driver is blacklisted.\n" "\n" "It has been reported to oops the kernel on unloading.\n" "\n" "The new \"%s\" driver will only be used on next bootstrap." msgstr "" "Старый драйвер \"%s\" занесен в черный список.\n" "\n" "О нем был создан отчет, чтобы предупредить ядро при выгрузке.\n" "\n" "Новый драйвер \"%s\" будет использован только при следующей начальной\n" "загрузке." #: harddrake/sound.pm:430 #, c-format msgid "No open source driver" msgstr "Нет драйвера с открытым исходным кодом" #: harddrake/sound.pm:431 #, c-format msgid "" "There's no free driver for your sound card (%s), but there's a proprietary " "driver at \"%s\"." msgstr "" "Для вашей звуковой карты (%s) нет свободного драйвера, но имеется " "собственный драйвер на \"%s\"" #: harddrake/sound.pm:434 #, c-format msgid "No known driver" msgstr "Отсутствует известный драйвер" #: harddrake/sound.pm:435 #, c-format msgid "There's no known driver for your sound card (%s)" msgstr "Для вашей звуковой карты отсутствует известный драйвер (%s)" #: harddrake/sound.pm:450 #, c-format msgid "Sound trouble shooting" msgstr "Решение проблем со звуком" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: harddrake/sound.pm:453 #, c-format msgid "" "The classic bug sound tester is to run the following commands:\n" "\n" "\n" "- \"lspcidrake -v | fgrep -i AUDIO\" will tell you which driver your card " "uses\n" "by default\n" "\n" "- \"grep sound-slot /etc/modprobe.conf\" will tell you what driver it\n" "currently uses\n" "\n" "- \"/sbin/lsmod\" will enable you to check if its module (driver) is\n" "loaded or not\n" "\n" "- \"/sbin/chkconfig --list sound\" and \"/sbin/chkconfig --list alsa\" will\n" "tell you if sound and alsa services're configured to be run on\n" "initlevel 3\n" "\n" "- \"aumix -q\" will tell you if the sound volume is muted or not\n" "\n" "- \"/sbin/fuser -v /dev/dsp\" will tell which program uses the sound card.\n" msgstr "" "Классическое тестирование ошибок звука выполняется запуском следующих " "команд:\n" "\n" "\n" "- \"lspcidrake -v | fgrep -i AUDIO\" сообщит вам, какой драйвер использует " "ваша карта по умолчанию\n" "\n" "- \"grep sound-slot /etc/modprobe.conf\" сообщит вам, какой драйвер\n" "используется в данный момент\n" "\n" "- \"/sbin/lsmod\" позволит вам проверить, загружен ли модуль (драйвер)\n" "\n" "- \"/sbin/chkconfig --list sound\" и \"/sbin/chkconfig --list alsa\"\n" "сообщит вам, были службы sound и alsa настроены для запуска\n" "на initlevel 3 или нет\n" "\n" "- \"aumix -q\" сообщит вам, включена громкость звука или нет\n" "\n" "- \"/sbin/fuser -v /dev/dsp\" сообщит, какая программа использует\n" "звуковую карту.\n" #: harddrake/sound.pm:480 #, c-format msgid "Let me pick any driver" msgstr "Выбрать другой драйвер" #: harddrake/sound.pm:483 #, c-format msgid "Choosing an arbitrary driver" msgstr "Выбор произвольного драйвера" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: harddrake/sound.pm:486 #, c-format msgid "" "If you really think that you know which driver is the right one for your " "card\n" "you can pick one in the above list.\n" "\n" "The current driver for your \"%s\" sound card is \"%s\" " msgstr "" "Если вы действительно думаете, что сами знаете, какой драйвер является " "верным\n" "для вашей карты, вы можете выбрать его из списка сверху.\n" "\n" "Текущим драйвером для вашей звуковой карты \"%s\" является \"%s\" " #: harddrake/v4l.pm:12 #, c-format msgid "Auto-detect" msgstr "Автоопределение" #: harddrake/v4l.pm:97 harddrake/v4l.pm:285 harddrake/v4l.pm:337 #, c-format msgid "Unknown|Generic" msgstr "Неизвестный|Обычный" #: harddrake/v4l.pm:130 #, c-format msgid "Unknown|CPH05X (bt878) [many vendors]" msgstr "Неизвестный|CPH05X (bt878) [большинство производителей]" #: harddrake/v4l.pm:131 #, c-format msgid "Unknown|CPH06X (bt878) [many vendors]" msgstr "Неизвестный|CPH06X (bt878) [большинство производителей]" #: harddrake/v4l.pm:475 #, c-format msgid "" "For most modern TV cards, the bttv module of the GNU/Linux kernel just auto-" "detect the rights parameters.\n" "If your card is misdetected, you can force the right tuner and card types " "here. Just select your tv card parameters if needed." msgstr "" "Для большинства современных ТВ-карт модуль bttv ядра GNU/Linux просто " "автоматически определит правильные параметры.\n" "Если ваша карта не определилась, то здесь вы можете принудительно включить " "использование правильных типов тюнера и карты. Если необходимо, просто " "выберите параметры своей ТВ-карты" #: harddrake/v4l.pm:478 #, c-format msgid "Card model:" msgstr "Модель карты :" #: harddrake/v4l.pm:479 #, c-format msgid "Tuner type:" msgstr "Тип тюнера :" #: interactive.pm:128 interactive.pm:545 interactive/curses.pm:263 #: interactive/http.pm:103 interactive/http.pm:156 interactive/stdio.pm:39 #: interactive/stdio.pm:148 interactive/stdio.pm:149 ugtk2.pm:421 ugtk2.pm:519 #: ugtk2.pm:813 ugtk2.pm:836 #, c-format msgid "Ok" msgstr "ОК" #: interactive.pm:227 modules/interactive.pm:71 ugtk2.pm:812 wizards.pm:156 #, c-format msgid "Yes" msgstr "Да" #: interactive.pm:227 modules/interactive.pm:71 ugtk2.pm:812 wizards.pm:156 #, c-format msgid "No" msgstr "Нет" #: interactive.pm:261 #, c-format msgid "Choose a file" msgstr "Выберите файл" #: interactive.pm:386 interactive/gtk.pm:436 #, c-format msgid "Add" msgstr "Добавить" #: interactive.pm:386 interactive/gtk.pm:436 #, c-format msgid "Modify" msgstr "Изменить" #: interactive.pm:386 interactive/gtk.pm:436 #, c-format msgid "Remove" msgstr "Удалить" #: interactive.pm:545 interactive/curses.pm:263 ugtk2.pm:519 #, c-format msgid "Finish" msgstr "Завершить" #: interactive.pm:546 interactive/curses.pm:260 ugtk2.pm:517 #, c-format msgid "Previous" msgstr "Назад" #: interactive/gtk.pm:564 #, c-format msgid "Beware, Caps Lock is enabled" msgstr "Обратите внимание, CapsLock включен" #: interactive/stdio.pm:29 interactive/stdio.pm:154 #, c-format msgid "Bad choice, try again\n" msgstr "Неудачный выбор, попробуйте еще раз\n" #: interactive/stdio.pm:30 interactive/stdio.pm:155 #, c-format msgid "Your choice? (default %s) " msgstr "Что вы выбираете? (по умолчанию %s) " #: interactive/stdio.pm:54 #, c-format msgid "" "Entries you'll have to fill:\n" "%s" msgstr "" "Пункты, которые вы должны заполнить:\n" "%s" #: interactive/stdio.pm:70 #, c-format msgid "Your choice? (0/1, default `%s') " msgstr "Что вы выбираете? (0/1, по умолчанию `%s') " #: interactive/stdio.pm:97 #, c-format msgid "Button `%s': %s" msgstr "Кнопка: `%s': %s" #: interactive/stdio.pm:98 #, c-format msgid "Do you want to click on this button?" msgstr "Вы хотите нажать на эту кнопку?" #: interactive/stdio.pm:110 #, c-format msgid "Your choice? (default `%s'%s) " msgstr "Что вы выбираете? (по умолчанию `%s'%s) " #: interactive/stdio.pm:110 #, c-format msgid " enter `void' for void entry" msgstr " введите `void', чтобы очистить пункт" #: interactive/stdio.pm:128 #, c-format msgid "=> There are many things to choose from (%s).\n" msgstr "=> Существует множество вещей для выбора (%s).\n" #: interactive/stdio.pm:131 #, c-format msgid "" "Please choose the first number of the 10-range you wish to edit,\n" "or just hit Enter to proceed.\n" "Your choice? " msgstr "" "Пожалуйста, выберите первое число из 10-значного диапазона,\n" "которое вы хотите изменить или просто нажмите Enter для продолжения.\n" "Ваш выбор?" #: interactive/stdio.pm:144 #, c-format msgid "" "=> Notice, a label changed:\n" "%s" msgstr "" "=> Запомните, метка изменилась:\n" "%s" #: interactive/stdio.pm:151 #, c-format msgid "Re-submit" msgstr "Заново отправить" #. -PO: the string "default:LTR" can be translated *ONLY* as "default:LTR" #. -PO: or as "default:RTL", depending if your language is written from #. -PO: left to right, or from right to left; any other string is wrong. #: lang.pm:193 #, c-format msgid "default:LTR" msgstr "default:LTR" #: lang.pm:210 #, c-format msgid "Andorra" msgstr "Андорра" #: lang.pm:211 timezone.pm:226 #, c-format msgid "United Arab Emirates" msgstr "Объединенные арабские Эмираты" #: lang.pm:212 #, c-format msgid "Afghanistan" msgstr "Афганистан" #: lang.pm:213 #, c-format msgid "Antigua and Barbuda" msgstr "Антигуа и Барбуда" #: lang.pm:214 #, c-format msgid "Anguilla" msgstr "Ангвилла" #: lang.pm:215 #, c-format msgid "Albania" msgstr "Албания" #: lang.pm:216 #, c-format msgid "Armenia" msgstr "Армения" #: lang.pm:217 #, c-format msgid "Netherlands Antilles" msgstr "Нидерландские антильские острова" #: lang.pm:218 #, c-format msgid "Angola" msgstr "Ангола" #: lang.pm:219 #, c-format msgid "Antarctica" msgstr "Антарктика" #: lang.pm:220 timezone.pm:271 #, c-format msgid "Argentina" msgstr "Аргентина" #: lang.pm:221 #, c-format msgid "American Samoa" msgstr "Американские Самоа" #: lang.pm:222 mirror.pm:12 timezone.pm:229 #, c-format msgid "Austria" msgstr "Австрия" #: lang.pm:223 mirror.pm:11 timezone.pm:267 #, c-format msgid "Australia" msgstr "Австралия" #: lang.pm:224 #, c-format msgid "Aruba" msgstr "Аруба" #: lang.pm:225 #, c-format msgid "Azerbaijan" msgstr "Азербайджан" #: lang.pm:226 #, c-format msgid "Bosnia and Herzegovina" msgstr "Босния и Герцеговина" #: lang.pm:227 #, c-format msgid "Barbados" msgstr "Барбадос" #: lang.pm:228 timezone.pm:211 #, c-format msgid "Bangladesh" msgstr "Бангладеш" #: lang.pm:229 mirror.pm:13 timezone.pm:231 #, c-format msgid "Belgium" msgstr "Бельгия" #: lang.pm:230 #, c-format msgid "Burkina Faso" msgstr "Буркина-Фасо" #: lang.pm:231 timezone.pm:232 #, c-format msgid "Bulgaria" msgstr "Болгария" #: lang.pm:232 #, c-format msgid "Bahrain" msgstr "Бахрейн" #: lang.pm:233 #, c-format msgid "Burundi" msgstr "Бурунди" #: lang.pm:234 #, c-format msgid "Benin" msgstr "Бенин" #: lang.pm:235 #, c-format msgid "Bermuda" msgstr "Бермуды" #: lang.pm:236 #, c-format msgid "Brunei Darussalam" msgstr "Бруней Даруссалам" #: lang.pm:237 #, c-format msgid "Bolivia" msgstr "Боливия" #: lang.pm:238 mirror.pm:14 timezone.pm:272 #, c-format msgid "Brazil" msgstr "Бразилия" #: lang.pm:239 #, c-format msgid "Bahamas" msgstr "Багамы" #: lang.pm:240 #, c-format msgid "Bhutan" msgstr "Бутан" #: lang.pm:241 #, c-format msgid "Bouvet Island" msgstr "Остров Буве" #: lang.pm:242 #, c-format msgid "Botswana" msgstr "Ботсвана" #: lang.pm:243 timezone.pm:230 #, c-format msgid "Belarus" msgstr "Беларусь" #: lang.pm:244 #, c-format msgid "Belize" msgstr "Белиз" #: lang.pm:245 mirror.pm:15 timezone.pm:261 #, c-format msgid "Canada" msgstr "Канада" #: lang.pm:246 #, c-format msgid "Cocos (Keeling) Islands" msgstr "Кокосовые острова " #: lang.pm:247 #, c-format msgid "Congo (Kinshasa)" msgstr "Конго (Kinshasa)" #: lang.pm:248 #, c-format msgid "Central African Republic" msgstr "Центрально-африканская республика" #: lang.pm:249 #, c-format msgid "Congo (Brazzaville)" msgstr "Конго (Brazzaville)" #: lang.pm:250 mirror.pm:39 timezone.pm:255 #, c-format msgid "Switzerland" msgstr "Швейцария" #: lang.pm:251 #, c-format msgid "Cote d'Ivoire" msgstr "Кот-д'Ивуар" #: lang.pm:252 #, c-format msgid "Cook Islands" msgstr "Острова Кука" #: lang.pm:253 timezone.pm:273 #, c-format msgid "Chile" msgstr "Чили" #: lang.pm:254 #, c-format msgid "Cameroon" msgstr "Камерун" #: lang.pm:255 timezone.pm:212 #, c-format msgid "China" msgstr "Китай" #: lang.pm:256 #, c-format msgid "Colombia" msgstr "Колумбия" #: lang.pm:257 mirror.pm:16 #, c-format msgid "Costa Rica" msgstr "Коста-Рика" #: lang.pm:258 #, c-format msgid "Serbia & Montenegro" msgstr "Serbia & Montenegro" #: lang.pm:259 #, c-format msgid "Cuba" msgstr "Куба" #: lang.pm:260 #, c-format msgid "Cape Verde" msgstr "Кабо-Верде" #: lang.pm:261 #, c-format msgid "Christmas Island" msgstr "Остров Рождества" #: lang.pm:262 #, c-format msgid "Cyprus" msgstr "Кипр" #: lang.pm:263 mirror.pm:17 timezone.pm:233 #, c-format msgid "Czech Republic" msgstr "Чешская Республика" #: lang.pm:264 mirror.pm:22 timezone.pm:238 #, c-format msgid "Germany" msgstr "Германия" #: lang.pm:265 #, c-format msgid "Djibouti" msgstr "Джибути" #: lang.pm:266 mirror.pm:18 timezone.pm:234 #, c-format msgid "Denmark" msgstr "Дания" #: lang.pm:267 #, c-format msgid "Dominica" msgstr "Доминика" #: lang.pm:268 #, c-format msgid "Dominican Republic" msgstr "Доминиканская республика" #: lang.pm:269 #, c-format msgid "Algeria" msgstr "Алжир" #: lang.pm:270 #, c-format msgid "Ecuador" msgstr "Эквадор" #: lang.pm:271 mirror.pm:19 timezone.pm:235 #, c-format msgid "Estonia" msgstr "Эстония" #: lang.pm:272 #, c-format msgid "Egypt" msgstr "Египет" #: lang.pm:273 #, c-format msgid "Western Sahara" msgstr "Западная Сахара" #: lang.pm:274 #, c-format msgid "Eritrea" msgstr "Эритрея" #: lang.pm:275 mirror.pm:37 timezone.pm:253 #, c-format msgid "Spain" msgstr "Испания" #: lang.pm:276 #, c-format msgid "Ethiopia" msgstr "Эфиопия" #: lang.pm:277 mirror.pm:20 timezone.pm:236 #, c-format msgid "Finland" msgstr "Финляндия" #: lang.pm:278 #, c-format msgid "Fiji" msgstr "Фиджи" #: lang.pm:279 #, c-format msgid "Falkland Islands (Malvinas)" msgstr "Фолклендские (Мальвинские) острова" #: lang.pm:280 #, c-format msgid "Micronesia" msgstr "Микронезия" #: lang.pm:281 #, c-format msgid "Faroe Islands" msgstr "Фарерские острова" #: lang.pm:282 mirror.pm:21 timezone.pm:237 #, c-format msgid "France" msgstr "Франция" #: lang.pm:283 #, c-format msgid "Gabon" msgstr "Габон" #: lang.pm:284 timezone.pm:257 #, c-format msgid "United Kingdom" msgstr "Объединенное Королевство" #: lang.pm:285 #, c-format msgid "Grenada" msgstr "Гренада" #: lang.pm:286 #, c-format msgid "Georgia" msgstr "Грузия" #: lang.pm:287 #, c-format msgid "French Guiana" msgstr "Французская Гвиана" #: lang.pm:288 #, c-format msgid "Ghana" msgstr "Гана" #: lang.pm:289 #, c-format msgid "Gibraltar" msgstr "Гибралтар" #: lang.pm:290 #, c-format msgid "Greenland" msgstr "Гренландия" #: lang.pm:291 #, c-format msgid "Gambia" msgstr "Гамбия" #: lang.pm:292 #, c-format msgid "Guinea" msgstr "Гвинея" #: lang.pm:293 #, c-format msgid "Guadeloupe" msgstr "Гваделупа" #: lang.pm:294 #, c-format msgid "Equatorial Guinea" msgstr "Экваториальная Гвинея" #: lang.pm:295 mirror.pm:23 timezone.pm:239 #, c-format msgid "Greece" msgstr "Греция" #: lang.pm:296 #, c-format msgid "South Georgia and the South Sandwich Islands" msgstr "Южная Джорджия и Южные Сандвичевы острова " #: lang.pm:297 timezone.pm:262 #, c-format msgid "Guatemala" msgstr "Гватемала" #: lang.pm:298 #, c-format msgid "Guam" msgstr "Гуам" #: lang.pm:299 #, c-format msgid "Guinea-Bissau" msgstr "Гвинея-Бисау" #: lang.pm:300 #, c-format msgid "Guyana" msgstr "Гайана" #: lang.pm:301 #, c-format msgid "Hong Kong SAR (China)" msgstr "Китай (Гонконг)" #: lang.pm:302 #, c-format msgid "Heard and McDonald Islands" msgstr "Острова Херда и МакДональда" #: lang.pm:303 #, c-format msgid "Honduras" msgstr "Гондурас" #: lang.pm:304 #, c-format msgid "Croatia" msgstr "Хорватия" #: lang.pm:305 #, c-format msgid "Haiti" msgstr "Гаити" #: lang.pm:306 mirror.pm:24 timezone.pm:240 #, c-format msgid "Hungary" msgstr "Венгрия" #: lang.pm:307 timezone.pm:215 #, c-format msgid "Indonesia" msgstr "Индонезия" #: lang.pm:308 mirror.pm:25 timezone.pm:241 #, c-format msgid "Ireland" msgstr "Ирландия" #: lang.pm:309 mirror.pm:26 timezone.pm:217 #, c-format msgid "Israel" msgstr "Израиль" #: lang.pm:310 timezone.pm:214 #, c-format msgid "India" msgstr "Индия" #: lang.pm:311 #, c-format msgid "British Indian Ocean Territory" msgstr "Британская территория Индийского океана" #: lang.pm:312 #, c-format msgid "Iraq" msgstr "Ирак" #: lang.pm:313 timezone.pm:216 #, c-format msgid "Iran" msgstr "Иран" #: lang.pm:314 #, c-format msgid "Iceland" msgstr "Исландия" #: lang.pm:315 mirror.pm:27 timezone.pm:242 #, c-format msgid "Italy" msgstr "Италия" #: lang.pm:316 #, c-format msgid "Jamaica" msgstr "Ямайка" #: lang.pm:317 #, c-format msgid "Jordan" msgstr "Иордания" #: lang.pm:318 mirror.pm:28 timezone.pm:218 #, c-format msgid "Japan" msgstr "Япония" #: lang.pm:319 #, c-format msgid "Kenya" msgstr "Кения" #: lang.pm:320 #, c-format msgid "Kyrgyzstan" msgstr "Кыргызстан" #: lang.pm:321 #, c-format msgid "Cambodia" msgstr "Камбоджа" #: lang.pm:322 #, c-format msgid "Kiribati" msgstr "Кирибати" #: lang.pm:323 #, c-format msgid "Comoros" msgstr "Коморские острова" #: lang.pm:324 #, c-format msgid "Saint Kitts and Nevis" msgstr "Сент-Китс и Невис" #: lang.pm:325 #, c-format msgid "Korea (North)" msgstr "Корея (North)" #: lang.pm:326 timezone.pm:219 #, c-format msgid "Korea" msgstr "Корея" #: lang.pm:327 #, c-format msgid "Kuwait" msgstr "Кувейт" #: lang.pm:328 #, c-format msgid "Cayman Islands" msgstr "Каймановы острова" #: lang.pm:329 #, c-format msgid "Kazakhstan" msgstr "Казахстан" #: lang.pm:330 #, c-format msgid "Laos" msgstr "Лаос" #: lang.pm:331 #, c-format msgid "Lebanon" msgstr "Лебанон" #: lang.pm:332 #, c-format msgid "Saint Lucia" msgstr "Сент-Люсия" #: lang.pm:333 #, c-format msgid "Liechtenstein" msgstr "Лихтенштейн" #: lang.pm:334 #, c-format msgid "Sri Lanka" msgstr "Шри-Ланка" #: lang.pm:335 #, c-format msgid "Liberia" msgstr "Либерия" #: lang.pm:336 #, c-format msgid "Lesotho" msgstr "Лесото" #: lang.pm:337 timezone.pm:243 #, c-format msgid "Lithuania" msgstr "Литва" #: lang.pm:338 timezone.pm:244 #, c-format msgid "Luxembourg" msgstr "Люксембург" #: lang.pm:339 #, c-format msgid "Latvia" msgstr "Латвия" #: lang.pm:340 #, c-format msgid "Libya" msgstr "Ливия" #: lang.pm:341 #, c-format msgid "Morocco" msgstr "Марокко" #: lang.pm:342 #, c-format msgid "Monaco" msgstr "Монако" #: lang.pm:343 #, c-format msgid "Moldova" msgstr "Молдова" #: lang.pm:344 #, c-format msgid "Madagascar" msgstr "Мадагаскар" #: lang.pm:345 #, c-format msgid "Marshall Islands" msgstr "Маршалловы острова" #: lang.pm:346 #, c-format msgid "Macedonia" msgstr "Македония" #: lang.pm:347 #, c-format msgid "Mali" msgstr "Мали" #: lang.pm:348 #, c-format msgid "Myanmar" msgstr "Мьянма" #: lang.pm:349 #, c-format msgid "Mongolia" msgstr "Монголия" #: lang.pm:350 #, c-format msgid "Northern Mariana Islands" msgstr "Острова северной Марианы" #: lang.pm:351 #, c-format msgid "Martinique" msgstr "Мартиника" #: lang.pm:352 #, c-format msgid "Mauritania" msgstr "Мавритания" #: lang.pm:353 #, c-format msgid "Montserrat" msgstr "Монсеррат" #: lang.pm:354 #, c-format msgid "Malta" msgstr "Мальта" #: lang.pm:355 #, c-format msgid "Mauritius" msgstr "Маврикий" #: lang.pm:356 #, c-format msgid "Maldives" msgstr "Мальдивы" #: lang.pm:357 #, c-format msgid "Malawi" msgstr "Малави" #: lang.pm:358 timezone.pm:263 #, c-format msgid "Mexico" msgstr "Мексика" #: lang.pm:359 timezone.pm:220 #, c-format msgid "Malaysia" msgstr "Малайзия" #: lang.pm:360 #, c-format msgid "Mozambique" msgstr "Мозамбик" #: lang.pm:361 #, c-format msgid "Namibia" msgstr "Намибия" #: lang.pm:362 #, c-format msgid "New Caledonia" msgstr "Новая Каледония" #: lang.pm:363 #, c-format msgid "Niger" msgstr "Нигер" #: lang.pm:364 #, c-format msgid "Norfolk Island" msgstr "Остров Норфолк" #: lang.pm:365 #, c-format msgid "Nigeria" msgstr "Нигерия" #: lang.pm:366 #, c-format msgid "Nicaragua" msgstr "Никарагуа" #: lang.pm:367 mirror.pm:29 timezone.pm:245 #, c-format msgid "Netherlands" msgstr "Нидерланды" #: lang.pm:368 mirror.pm:31 timezone.pm:246 #, c-format msgid "Norway" msgstr "Норвегия" #: lang.pm:369 #, c-format msgid "Nepal" msgstr "Непал" #: lang.pm:370 #, c-format msgid "Nauru" msgstr "Науру" #: lang.pm:371 #, c-format msgid "Niue" msgstr "Нью" #: lang.pm:372 mirror.pm:30 timezone.pm:268 #, c-format msgid "New Zealand" msgstr "Новая Зеландия" #: lang.pm:373 #, c-format msgid "Oman" msgstr "Оман" #: lang.pm:374 #, c-format msgid "Panama" msgstr "Панама" #: lang.pm:375 #, c-format msgid "Peru" msgstr "Перу" #: lang.pm:376 #, c-format msgid "French Polynesia" msgstr "Французская Полинезия" #: lang.pm:377 #, c-format msgid "Papua New Guinea" msgstr "Папуа Новая Гвинея" #: lang.pm:378 timezone.pm:221 #, c-format msgid "Philippines" msgstr "Филиппины" #: lang.pm:379 #, c-format msgid "Pakistan" msgstr "Пакистан" #: lang.pm:380 mirror.pm:32 timezone.pm:247 #, c-format msgid "Poland" msgstr "Польша" #: lang.pm:381 #, c-format msgid "Saint Pierre and Miquelon" msgstr "Сен-Пьер и Микелон" #: lang.pm:382 #, c-format msgid "Pitcairn" msgstr "Питкэрн" #: lang.pm:383 #, c-format msgid "Puerto Rico" msgstr "Пуэрто-Рико" #: lang.pm:384 #, c-format msgid "Palestine" msgstr "Палестина" #: lang.pm:385 mirror.pm:33 timezone.pm:248 #, c-format msgid "Portugal" msgstr "Португалия" #: lang.pm:386 #, c-format msgid "Paraguay" msgstr "Парагвай" #: lang.pm:387 #, c-format msgid "Palau" msgstr "Палау" #: lang.pm:388 #, c-format msgid "Qatar" msgstr "Катар" #: lang.pm:389 #, c-format msgid "Reunion" msgstr "Реюньон" #: lang.pm:390 timezone.pm:249 #, c-format msgid "Romania" msgstr "Румыния" #: lang.pm:391 mirror.pm:34 #, c-format msgid "Russia" msgstr "Россия" #: lang.pm:392 #, c-format msgid "Rwanda" msgstr "Руанда" #: lang.pm:393 #, c-format msgid "Saudi Arabia" msgstr "Саудовская Аравия" #: lang.pm:394 #, c-format msgid "Solomon Islands" msgstr "Соломоновы Острова" #: lang.pm:395 #, c-format msgid "Seychelles" msgstr "Сейшельские Острова" #: lang.pm:396 #, c-format msgid "Sudan" msgstr "Судан" #: lang.pm:397 mirror.pm:38 timezone.pm:254 #, c-format msgid "Sweden" msgstr "Швеция" #: lang.pm:398 timezone.pm:222 #, c-format msgid "Singapore" msgstr "Сингапур" #: lang.pm:399 #, c-format msgid "Saint Helena" msgstr "Святая Елена" #: lang.pm:400 timezone.pm:252 #, c-format msgid "Slovenia" msgstr "Словения" #: lang.pm:401 #, c-format msgid "Svalbard and Jan Mayen Islands" msgstr "Свалбард и острова Яна Майена" #: lang.pm:402 mirror.pm:35 timezone.pm:251 #, c-format msgid "Slovakia" msgstr "Словакия" #: lang.pm:403 #, c-format msgid "Sierra Leone" msgstr "Сьерра-Леоне" #: lang.pm:404 #, c-format msgid "San Marino" msgstr "Сан-Марино" #: lang.pm:405 #, c-format msgid "Senegal" msgstr "Сенегал" #: lang.pm:406 #, c-format msgid "Somalia" msgstr "Сомали" #: lang.pm:407 #, c-format msgid "Suriname" msgstr "Суринам" #: lang.pm:408 #, c-format msgid "Sao Tome and Principe" msgstr "Сан-Томе и Принсипи" #: lang.pm:409 #, c-format msgid "El Salvador" msgstr "Сальвадор" #: lang.pm:410 #, c-format msgid "Syria" msgstr "Сирия" #: lang.pm:411 #, c-format msgid "Swaziland" msgstr "Свазиленд" #: lang.pm:412 #, c-format msgid "Turks and Caicos Islands" msgstr "Острова Туркс и Каикос" #: lang.pm:413 #, c-format msgid "Chad" msgstr "Чад" #: lang.pm:414 #, c-format msgid "French Southern Territories" msgstr "Французские южные территории" #: lang.pm:415 #, c-format msgid "Togo" msgstr "Того" #: lang.pm:416 mirror.pm:41 timezone.pm:224 #, c-format msgid "Thailand" msgstr "Тайланд" #: lang.pm:417 #, c-format msgid "Tajikistan" msgstr "Таджикистан" #: lang.pm:418 #, c-format msgid "Tokelau" msgstr "Токелау" #: lang.pm:419 #, c-format msgid "East Timor" msgstr "Восточный Тимор" #: lang.pm:420 #, c-format msgid "Turkmenistan" msgstr "Туркменистан" #: lang.pm:421 #, c-format msgid "Tunisia" msgstr "Тунис" #: lang.pm:422 #, c-format msgid "Tonga" msgstr "Тонга" #: lang.pm:423 timezone.pm:225 #, c-format msgid "Turkey" msgstr "Турция" #: lang.pm:424 #, c-format msgid "Trinidad and Tobago" msgstr "Тринидад и Тобаго" #: lang.pm:425 #, c-format msgid "Tuvalu" msgstr "Тувалу" #: lang.pm:426 mirror.pm:40 timezone.pm:223 #, c-format msgid "Taiwan" msgstr "Тайвань" #: lang.pm:427 timezone.pm:208 #, c-format msgid "Tanzania" msgstr "Танзания" #: lang.pm:428 timezone.pm:256 #, c-format msgid "Ukraine" msgstr "Украина" #: lang.pm:429 #, c-format msgid "Uganda" msgstr "Уганда" #: lang.pm:430 #, c-format msgid "United States Minor Outlying Islands" msgstr "Соединенные штаты Малых Удаленных островов" #: lang.pm:431 mirror.pm:42 timezone.pm:264 #, c-format msgid "United States" msgstr "Соединенные Штаты" #: lang.pm:432 #, c-format msgid "Uruguay" msgstr "Уругвай" #: lang.pm:433 #, c-format msgid "Uzbekistan" msgstr "Узбекистан" #: lang.pm:434 #, c-format msgid "Vatican" msgstr "Ватикан" #: lang.pm:435 #, c-format msgid "Saint Vincent and the Grenadines" msgstr "Сент-Винсент и Гренадины" #: lang.pm:436 #, c-format msgid "Venezuela" msgstr "Венесуэла" #: lang.pm:437 #, c-format msgid "Virgin Islands (British)" msgstr "Виргинские острова (Британия)" #: lang.pm:438 #, c-format msgid "Virgin Islands (U.S.)" msgstr "Виргинские острова (США)" #: lang.pm:439 #, c-format msgid "Vietnam" msgstr "Вьетнам" #: lang.pm:440 #, c-format msgid "Vanuatu" msgstr "Вануату" #: lang.pm:441 #, c-format msgid "Wallis and Futuna" msgstr "Уоллес и Футана" #: lang.pm:442 #, c-format msgid "Samoa" msgstr "Самоа" #: lang.pm:443 #, c-format msgid "Yemen" msgstr "Йемен" #: lang.pm:444 #, c-format msgid "Mayotte" msgstr "Майот" #: lang.pm:445 mirror.pm:36 timezone.pm:207 #, c-format msgid "South Africa" msgstr "Южная Африка" #: lang.pm:446 #, c-format msgid "Zambia" msgstr "Замбия" #: lang.pm:447 #, c-format msgid "Zimbabwe" msgstr "Зимбабве" #: lang.pm:1208 #, c-format msgid "Welcome to %s" msgstr "Добро пожаловать в %s" #: lvm.pm:84 #, c-format msgid "Moving used physical extents to other physical volumes failed" msgstr "" "Перемещение используемых физических областей на другой физический раздел не " "удалось" #: lvm.pm:141 #, c-format msgid "Physical volume %s is still in use" msgstr "Физический раздел %s все еще используется" #: lvm.pm:151 #, c-format msgid "Remove the logical volumes first\n" msgstr "Сначала удалите логические тома\n" #: lvm.pm:184 #, c-format msgid "The bootloader can't handle /boot on multiple physical volumes" msgstr "" "Загрузчик не может работать с разделом /boot на нескольких физических " "разделах" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: messages.pm:10 #, c-format msgid "" "Introduction\n" "\n" "The operating system and the different components available in the Mandriva " "Linux distribution \n" "shall be called the \"Software Products\" hereafter. The Software Products " "include, but are not \n" "restricted to, the set of programs, methods, rules and documentation related " "to the operating \n" "system and the different components of the Mandriva Linux distribution.\n" "\n" "\n" "1. License Agreement\n" "\n" "Please read this document carefully. This document is a license agreement " "between you and \n" "Mandriva S.A. which applies to the Software Products.\n" "By installing, duplicating or using the Software Products in any manner, you " "explicitly \n" "accept and fully agree to conform to the terms and conditions of this " "License. \n" "If you disagree with any portion of the License, you are not allowed to " "install, duplicate or use \n" "the Software Products. \n" "Any attempt to install, duplicate or use the Software Products in a manner " "which does not comply \n" "with the terms and conditions of this License is void and will terminate " "your rights under this \n" "License. Upon termination of the License, you must immediately destroy all " "copies of the \n" "Software Products.\n" "\n" "\n" "2. Limited Warranty\n" "\n" "The Software Products and attached documentation are provided \"as is\", " "with no warranty, to the \n" "extent permitted by law.\n" "Mandriva S.A. will, in no circumstances and to the extent permitted by law, " "be liable for any special,\n" "incidental, direct or indirect damages whatsoever (including without " "limitation damages for loss of \n" "business, interruption of business, financial loss, legal fees and penalties " "resulting from a court \n" "judgment, or any other consequential loss) arising out of the use or " "inability to use the Software \n" "Products, even if Mandriva S.A. has been advised of the possibility or " "occurrence of such \n" "damages.\n" "\n" "LIMITED LIABILITY LINKED TO POSSESSING OR USING PROHIBITED SOFTWARE IN SOME " "COUNTRIES\n" "\n" "To the extent permitted by law, Mandriva S.A. or its distributors will, in " "no circumstances, be \n" "liable for any special, incidental, direct or indirect damages whatsoever " "(including without \n" "limitation damages for loss of business, interruption of business, financial " "loss, legal fees \n" "and penalties resulting from a court judgment, or any other consequential " "loss) arising out \n" "of the possession and use of software components or arising out of " "downloading software components \n" "from one of Mandriva Linux sites which are prohibited or restricted in some " "countries by local laws.\n" "This limited liability applies to, but is not restricted to, the strong " "cryptography components \n" "included in the Software Products.\n" "\n" "\n" "3. The GPL License and Related Licenses\n" "\n" "The Software Products consist of components created by different persons or " "entities. Most \n" "of these components are governed under the terms and conditions of the GNU " "General Public \n" "Licence, hereafter called \"GPL\", or of similar licenses. Most of these " "licenses allow you to use, \n" "duplicate, adapt or redistribute the components which they cover. Please " "read carefully the terms \n" "and conditions of the license agreement for each component before using any " "component. Any question \n" "on a component license should be addressed to the component author and not " "to Mandriva.\n" "The programs developed by Mandriva S.A. are governed by the GPL License. " "Documentation written \n" "by Mandriva S.A. is governed by a specific license. Please refer to the " "documentation for \n" "further details.\n" "\n" "\n" "4. Intellectual Property Rights\n" "\n" "All rights to the components of the Software Products belong to their " "respective authors and are \n" "protected by intellectual property and copyright laws applicable to software " "programs.\n" "Mandriva S.A. reserves its rights to modify or adapt the Software Products, " "as a whole or in \n" "parts, by all means and for all purposes.\n" "\"Mandriva\", \"Mandriva Linux\" and associated logos are trademarks of " "Mandriva S.A. \n" "\n" "\n" "5. Governing Laws \n" "\n" "If any portion of this agreement is held void, illegal or inapplicable by a " "court judgment, this \n" "portion is excluded from this contract. You remain bound by the other " "applicable sections of the \n" "agreement.\n" "The terms and conditions of this License are governed by the Laws of " "France.\n" "All disputes on the terms of this license will preferably be settled out of " "court. As a last \n" "resort, the dispute will be referred to the appropriate Courts of Law of " "Paris - France.\n" "For any question on this document, please contact Mandriva S.A. \n" msgstr "" "Введение\n" "\n" "Операционная система и различные компоненты, доступные в дистрибутиве\n" "Mandriva Linux далее будут называться \"Программными Продуктами\".\n" "Программные Продукты включают, но не ограничиваются, набор программ, \n" "методы, правила и документацию, связанную с операционной системой\n" "и различными компонентами дистрибутива Mandriva Linux.\n" "\n" "\n" "1. Лицензионное соглашение\n" "\n" "Пожалуйста, внимательно прочтите этот документ. Данный документ является\n" "лицензионным соглашением, заключаемым между вами и Mandriva S.A.,\n" "применимо к Программным Продуктам. Устанавливая, тиражируя или\n" "используя Программные Продукты в любых других целях, вы тем самым всецело\n" "принимаете и полностью соглашаетесь с условиями и положениями данной\n" "Лицензии. Если вы не согласны с какой-либо частью данной Лицензии, вам\n" "не разрешается устанавливать, тиражировать или использовать Программные\n" "Продукты.\n" "Любые попытки использовать, тиражировать или использовать Программные\n" "Продукты в целях, противоречащих условиям данной Лицензии, аннулируют и\n" "освобождают вас от всех прав, предоставляемых данной Лицензией.\n" "При окончании срока действия Лицензии вы должны немедленно удалить все " "копии\n" "Программных Продуктов.\n" "\n" "\n" "2. Ограниченные гарантийные обязательства\n" "\n" "Программные Продукты и прилагаемая документация предоставляются \"как есть\"," "безо всякой гарантии в пределах, дозволенных законом.\n" "Mandriva S.A. ни при каких условиях и в пределах, дозволенных\n" "законом, не несет ответственности за любой какой бы то ни было " "определенный,\n" "случайный, прямой или косвенный ущерб (включая неограниченный ущерб от\n" "крушения бизнеса, перерывов в коммерческой деятельности, финансовых " "убытков,\n" "судебных издержек и штрафов, являющихся результатом судебных " "разбирательств,\n" "или любых других косвенных потерь), являющийся результатом использования\n" "Программных Продуктов, даже, если Mandriva S.A. было известно\n" "о возможности или случаях такого ущерба.\n" "\n" "ОГРАНИЧЕННАЯ ОТВЕТСТВЕННОСТЬ, СВЯЗАННАЯ С ВЛАДЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ " "ЗАПРЕЩЕННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ В НЕКОТОРЫХ СТРАНАХ\n" "\n" "В пределах, дозволенных законом, Mandriva S.A. или ее распространители\n" "ни при каких условиях не несут ответственности за любой, какой бы то ни " "было\n" "определенный, случайный, прямой или косвенный ущерб (включая неограниченный\n" "ущерб от крушения бизнеса, перерывов в коммерческой деятельности, " "финансовых\n" "убытков, судебных издержек и штрафов, являющихся результатом судебных\n" "разбирательств, или любых других косвенных потерь), являющихся результатом\n" "владения и использования компонентов программного обеспечения,\n" "или являющихся результатом скачивания компонентов программного обеспечения\n" "с одного из сайтов Mandriva Linux, запрещенных или ограниченных в некоторых\n" "странах местными законами.\n" "Ограниченная ответственность применяется, но не ограничивается,\n" "к компонентам сильной криптографии, включаемых в Программные Продукты.\n" "\n" "\n" "3. Лицензия GPL и связанные лицензии\n" "\n" "Программные Продукты состоят из компонентов, созданных различными людьми\n" "или организациями. Большинство этих компонентов находятся под действием\n" "условий и положений GNU General Public Licence, далее называемой \"GPL\",\n" "или похожих лицензий. Большинство этих лицензий позволяют вам использовать,\n" "тиражировать, адаптировать или распространять далее компоненты, на которые\n" "они распространяются. Пожалуйста, внимательно читайте условия и положения\n" "лицензионного соглашения для каждого из компонент перед использованием\n" "любого компонента. Любые вопросы по лицензии компонента должны быть\n" "адресованы автору компонента, а не Mandriva.\n" "Программы, разработанные Mandriva S.A., находятся под действием лицензии\n" "GPL. Документация, написанная Mandriva S.A., находится под действием\n" "особой лицензии. Пожалуйста, обратитесь к документации за дополнительной\n" "информацией.\n" "\n" "4. Права на интеллектуальную собственность\n" "\n" "Все права на компоненты Программных Продуктов принадлежат их " "соответствующим\n" "авторам и защищены законами об интеллектуальной собственности и авторском\n" "праве, применительно к программному обеспечению.\n" "Mandriva S.A. сохраняет за собой право изменять или адаптировать\n" "Программные Продукты, как целиком, так и по частям, любым способом и для\n" "любых целей.\n" "\"Mandriva\", \"Mandriva Linux\" и соответствующие логотипы являются " "торговыми марками Mandriva S.A.\n" "\n" "\n" "5. Основные законы\n" "\n" "Если какая-либо часть этого соглашения является недействительной,\n" "противозаконной или противоречащей действующему законодательству, эта\n" "часть исключается из этого контракта. Вы остаетесь ограниченными\n" "другими пригодными разделами соглашения.\n" "Условия и положения данной Лицензии находятся под действием французского\n" "законодательства.\n" "Все разногласия по поводу условий и положений этой лицензии, скорее всего, " "будут оспариваться в суде. В последнюю очередь оспаривание вопроса будет " "передано в соответствующий Законодательный Суд Парижа - Франция. По любым " "вопросам, касающимся этого документа, пожалуйста, свяжитесь\n" "с Mandriva S.A.\n" #: messages.pm:90 #, c-format msgid "" "Warning: Free Software may not necessarily be patent free, and some Free\n" "Software included may be covered by patents in your country. For example, " "the\n" "MP3 decoders included may require a licence for further usage (see\n" "http://www.mp3licensing.com for more details). If you are unsure if a " "patent\n" "may be applicable to you, check your local laws." msgstr "" "Предупреждение: Свободное программное обеспечение не обязательно может\n" "быть свободным от патентов, и некоторое входящее в состав Свободное \n" "программное обеспечение может иметь патенты в вашей стране.\n" "Например, входящие в состав MP3 декодеры могут требовать лицензии для\n" "последующего использования (см. подробнее http://www.mp3licensing.com).\n" "Если вы не уверены в применимости патента для вас, сверьтесь со своими \n" "местными законами." #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: messages.pm:98 #, c-format msgid "" "\n" "Warning\n" "\n" "Please read carefully the terms below. If you disagree with any\n" "portion, you are not allowed to install the next CD media. Press 'Refuse' \n" "to continue the installation without using these media.\n" "\n" "\n" "Some components contained in the next CD media are not governed\n" "by the GPL License or similar agreements. Each such component is then\n" "governed by the terms and conditions of its own specific license. \n" "Please read carefully and comply with such specific licenses before \n" "you use or redistribute the said components. \n" "Such licenses will in general prevent the transfer, duplication \n" "(except for backup purposes), redistribution, reverse engineering, \n" "de-assembly, de-compilation or modification of the component. \n" "Any breach of agreement will immediately terminate your rights under \n" "the specific license. Unless the specific license terms grant you such\n" "rights, you usually cannot install the programs on more than one\n" "system, or adapt it to be used on a network. In doubt, please contact \n" "directly the distributor or editor of the component. \n" "Transfer to third parties or copying of such components including the \n" "documentation is usually forbidden.\n" "\n" "\n" "All rights to the components of the next CD media belong to their \n" "respective authors and are protected by intellectual property and \n" "copyright laws applicable to software programs.\n" msgstr "" "\n" "Предупреждение\n" "Пожалуйста, внимательно прочтите условия, приведенные ниже. Если вы\n" "не согласны с какой-либо частью, вам не разрешается устанавливать \n" "следующий накопитель CD. Нажмите 'Отказаться' для продолжения установки\n" "без этого накопителя.\n" "\n" "\n" "Некоторые компоненты, имеющиеся на следующем CD, не ограничиваются\n" "Лицензией GPL или подобными соглашениями. Каждый такой компонент\n" "ограничен условиями его собственного лицензионного соглашения. \n" "Пожалуйста, внимательно прочтите и соблюдайте правила таких особых\n" "лицензионных соглашений перед использованием или дальнейшем\n" "распространением оговоренных компонентов. \n" "Такие лицензионные соглашения в основном будут предупреждать передачу,\n" "копирование (за исключением создания резервных копий), дальнейшее\n" "распространение, обратную разработку, дизассемблирование, декомпиляцию\n" "или изменение компонента.\n" "Любое нарушение соглашения немедленно аннулирует ваши права по\n" "указанному лицензионному соглашению. Пока определенное лицензионное\n" "соглашение не обеспечит вас такими правами, вы, обычно, не можете\n" "устанавливать программы более, чем на одну систему, или применять их\n" "для сетевого использования. Если сомневаетесь, пожалуйста, свяжитесь\n" "непосредственно с распространителем или редактором компонента. \n" "Передача третьим лицам или копирование таких компонентов, включая\n" "документацию, зачастую запрещено.\n" "\n" "Все права на компоненты следующего накопителя CD принадлежат их\n" "непосредственным авторам и защищены законами об интеллектуальной\n" "собственности и авторских правах применительно к программному\n" "обеспечению.\n" #. -PO: keep the double empty lines between sections, this is formatted a la LaTeX #: messages.pm:131 #, c-format msgid "" "Congratulations, installation is complete.\n" "Remove the boot media and press Enter to reboot.\n" "\n" "\n" "For information on fixes which are available for this release of Mandriva " "Linux,\n" "consult the Errata available from:\n" "\n" "\n" "%s\n" "\n" "\n" "Information on configuring your system is available in the post\n" "install chapter of the Official Mandriva Linux User's Guide." msgstr "" "Поздравляем. Установка завершена.\n" "Извлеките загрузочный диск и нажмите Enter для перезагрузки.\n" "\n" "\n" "Информация об исправлениях, доступных для этой версии Mandriva Linux,\n" "доступна в списке Errata по адресу:\n" "\n" "\n" "%s\n" "\n" "\n" "Информация о настройке вашей системы доступна в главе \"Действия после\n" " установки\" Руководства пользователя Mandriva Linux." #: modules/interactive.pm:19 #, c-format msgid "This driver has no configuration parameter!" msgstr "У этого драйвера нет настраиваемых параметров!" #: modules/interactive.pm:22 #, c-format msgid "Module configuration" msgstr "Настройка модуля" #: modules/interactive.pm:22 #, c-format msgid "You can configure each parameter of the module here." msgstr "Здесь вы можете настроить каждый параметр модуля" #: modules/interactive.pm:63 #, c-format msgid "Found %s interfaces" msgstr "Найдены %s интерфейсы" #: modules/interactive.pm:64 #, c-format msgid "Do you have another one?" msgstr "Есть ли у вас другой?" #: modules/interactive.pm:65 #, c-format msgid "Do you have any %s interfaces?" msgstr "Есть ли у вас какие-либо %s интерфейсы?" #: modules/interactive.pm:71 #, c-format msgid "See hardware info" msgstr "Просмотреть информацию об оборудовании" #: modules/interactive.pm:82 #, c-format msgid "Installing driver for USB controller" msgstr "Устанавливается драйвер для USB контроллера" #: modules/interactive.pm:83 #, c-format msgid "Installing driver for firewire controller %s" msgstr "Устанавливается драйвер для firewire контроллера %s" #: modules/interactive.pm:84 #, c-format msgid "Installing driver for hard drive controller %s" msgstr "Устанавливается драйвер для контроллера жесткого диска %s" #: modules/interactive.pm:85 #, c-format msgid "Installing driver for ethernet controller %s" msgstr "Устанавливается драйвер для ethernet контроллера %s" #. -PO: the first %s is the card type (scsi, network, sound,...) #. -PO: the second is the vendor+model name #: modules/interactive.pm:96 #, c-format msgid "Installing driver for %s card %s" msgstr "Устанавливается драйвер для %s карты %s" #: modules/interactive.pm:110 #, c-format msgid "" "You may now provide options to module %s.\n" "Note that any address should be entered with the prefix 0x like '0x123'" msgstr "" "Теперь вы можете передать его параметры в модуль %s.\n" "Помните, что любые адреса должны быть введены с префиксом 0x, напр., '0z123'" #: modules/interactive.pm:116 #, c-format msgid "" "You may now provide options to module %s.\n" "Options are in format ``name=value name2=value2 ...''.\n" "For instance, ``io=0x300 irq=7''" msgstr "" "Теперь вы можете передать параметры в модуль %s.\n" "Параметры должны быть в формате ``имя=значение имя2=значение2 ...''.\n" "Например, ``io=0x300 irq=7''" #: modules/interactive.pm:118 #, c-format msgid "Module options:" msgstr "Параметры модуля:" #. -PO: the %s is the driver type (scsi, network, sound,...) #: modules/interactive.pm:131 #, c-format msgid "Which %s driver should I try?" msgstr "Какой %s драйвер мне попробовать?" #: modules/interactive.pm:140 #, c-format msgid "" "In some cases, the %s driver needs to have extra information to work\n" "properly, although it normally works fine without them. Would you like to " "specify\n" "extra options for it or allow the driver to probe your machine for the\n" "information it needs? Occasionally, probing will hang a computer, but it " "should\n" "not cause any damage." msgstr "" "В некоторых случаях драйверу %s нужна некоторая дополнительная информация,\n" "хотя обычно этого не требуется. Не хотите ли вы определить для него\n" "дополнительные параметры или позволите драйверу прозондировать вашу машину\n" "в поисках необходимой информации? Возможно, исследование подвесит\n" "компьютер, однако это не должно вызвать никаких неисправностей." #: modules/interactive.pm:144 #, c-format msgid "Autoprobe" msgstr "Автоматическое исследование" #: modules/interactive.pm:144 #, c-format msgid "Specify options" msgstr "Укажите параметры" #: modules/interactive.pm:156 #, c-format msgid "" "Loading module %s failed.\n" "Do you want to try again with other parameters?" msgstr "" "Загрузка модуля %s завершилась неудачно.\n" "Хотите попробовать снова с другими параметрами?" #: partition_table.pm:409 #, c-format msgid "mount failed: " msgstr "монтирование не удалось: " #: partition_table.pm:518 #, c-format msgid "Extended partition not supported on this platform" msgstr "Расширенный раздел не поддерживается на этой платформе" #: partition_table.pm:536 #, c-format msgid "" "You have a hole in your partition table but I can not use it.\n" "The only solution is to move your primary partitions to have the hole next " "to the extended partitions." msgstr "" "У вас есть дыра в вашей таблице разделов, но я не могу её использовать.\n" "Единственное решение - переместить первичные разделы так, чтобы дыра " "располагалась сразу за расширенными разделами." #: partition_table/raw.pm:285 #, c-format msgid "" "Something bad is happening on your drive. \n" "A test to check the integrity of data has failed. \n" "It means writing anything on the disk will end up with random, corrupted " "data." msgstr "" "Что-то плохое происходит на вашем диске. \n" "Тест на проверку целостности данных завершился неудачей. \n" "Это означает, что запись чего-нибудь на диск закончится случайным мусором" #: raid.pm:42 #, c-format msgid "Can not add a partition to _formatted_ RAID %s" msgstr "Не могу добавить раздел на _отформатированный_ RAID %s" #: raid.pm:157 #, c-format msgid "Not enough partitions for RAID level %d\n" msgstr "Недостаточно разделов для RAID уровня %d\n" #: scanner.pm:95 #, c-format msgid "Could not create directory /usr/share/sane/firmware!" msgstr "Не могу создать каталог /usr/share/sane/firmware!" #: scanner.pm:106 #, c-format msgid "Could not create link /usr/share/sane/%s!" msgstr "Не могу создать линк /usr/share/sane/%s!" #: scanner.pm:113 #, c-format msgid "Could not copy firmware file %s to /usr/share/sane/firmware!" msgstr "Невозможно скопировать файл firmware %s в /usr/share/sane/firmware!" #: scanner.pm:120 #, c-format msgid "Could not set permissions of firmware file %s!" msgstr "Не могу установить права доступа для firmware файла %s!" #: scanner.pm:200 #, c-format msgid "Scannerdrake" msgstr "Scannerdrake" #: scanner.pm:201 #, c-format msgid "Could not install the packages needed to share your scanner(s)." msgstr "" "Не получается установить пакеты, необходимые для совместного использования " "ваших сканеров." #: scanner.pm:202 #, c-format msgid "Your scanner(s) will not be available for non-root users." msgstr "Ваш сканер не будет доступен для обычных пользователей." #: security/help.pm:11 #, c-format msgid "Accept bogus IPv4 error messages." msgstr "Принимать сообщения об ошибках bogus IPv4." #: security/help.pm:13 #, c-format msgid "Accept broadcasted icmp echo." msgstr "Принимать широковещательные icmp echo." #: security/help.pm:15 #, c-format msgid "Accept icmp echo." msgstr "Принимать icmp echo" #: security/help.pm:17 #, c-format msgid "Allow autologin." msgstr "Разрешает/Запрещает автоматический вход в систему." #. -PO: here "ALL" is a value in a pull-down menu; translate it the same as "ALL" is #: security/help.pm:21 #, c-format msgid "" "If set to \"ALL\", /etc/issue and /etc/issue.net are allowed to exist.\n" "\n" "If set to \"None\", no issues are allowed.\n" "\n" "Else only /etc/issue is allowed." msgstr "" "Если установлено в \"ВСЕ\", разрешено существовать файлам /etc/issue и /etc/" "issue.net.\n" "\n" "Если установлено в \"НИ ОДНОГО\", не разрешено ни одного issue .\n" "\n" "В противном случае разрешен только /etc/issue." #: security/help.pm:27 #, c-format msgid "Allow reboot by the console user." msgstr "Разрешает/Запрещает перезагрузку пользователем из консоли." #: security/help.pm:29 #, c-format msgid "Allow remote root login." msgstr "Разрешает удаленный вход для root в систему." #: security/help.pm:31 #, c-format msgid "Allow direct root login." msgstr "Разрешает/Запрещает непосредственный вход в систему под root'ом." #: security/help.pm:33 #, c-format msgid "" "Allow the list of users on the system on display managers (kdm and gdm)." msgstr "" "Разрешает/Запрещает вывод списка пользователей системы в оконных менеджерах " "(kdm и gdm)." #: security/help.pm:35 #, c-format msgid "" "Allow to export display when\n" "passing from the root account to the other users.\n" "\n" "See pam_xauth(8) for more details.'" msgstr "" "Разрешает/запрещает экспорт дисплея при\n" "переходе из учётной записи root'а на других пользователей.\n" "\n" "Подробнее смотрите в pam_xauth(8).'" #: security/help.pm:40 #, c-format msgid "" "Allow X connections:\n" "\n" "- \"All\" (all connections are allowed),\n" "\n" "- \"Local\" (only connection from local machine),\n" "\n" "- \"None\" (no connection)." msgstr "" "Разрешает/Запрещает X-подключения:\n" "\n" "- ВСЕ (все подключения разрешены),\n" "\n" "- ЛОКАЛЬНЫЕ (подключения только с локальной машины),\n" "\n" "- НИ ОДНОГО (никаких подключений)." #: security/help.pm:48 #, c-format msgid "" "The argument specifies if clients are authorized to connect\n" "to the X server from the network on the tcp port 6000 or not." msgstr "" "Аргумент определяет, будет ли разрешено клиентам из сети\n" "подключаться к X-серверу на tcp-порт 6000 или нет." #. -PO: here "ALL", "Local" and "None" are values in a pull-down menu; translate them the same as they're #: security/help.pm:53 #, c-format msgid "" "Authorize:\n" "\n" "- all services controlled by tcp_wrappers (see hosts.deny(5) man page) if " "set to \"ALL\",\n" "\n" "- only local ones if set to \"Local\"\n" "\n" "- none if set to \"None\".\n" "\n" "To authorize the services you need, use /etc/hosts.allow (see hosts.allow" "(5))." msgstr "" "Разрешает:\n" "\n" "- все службы, контролируемые tcp_wrappers'ами (см. hosts.deny(5) man page), " "если установлено в \"ВСЕ\",\n" "\n" "- только локальные, если установлено в \"ЛОКАЛЬНЫЕ\"\n" "\n" "- ни одной, если установлено в \"НИ ОДНОГО\".\n" "\n" "Для разрешения нужных вам служб используйте /etc/hosts.allow (см hosts.allow " "(5))." #: security/help.pm:63 #, c-format msgid "" "If SERVER_LEVEL (or SECURE_LEVEL if absent)\n" "is greater than 3 in /etc/security/msec/security.conf, creates the\n" "symlink /etc/security/msec/server to point to\n" "/etc/security/msec/server.<SERVER_LEVEL>.\n" "\n" "The /etc/security/msec/server is used by chkconfig --add to decide to\n" "add a service if it is present in the file during the installation of\n" "packages." msgstr "" "Если значение SERVER_LEVEL (или SECURE_LEVEL, если отсутствует) \n" "больше 3 в /etc/security/msec/security.conf, создает символическую \n" "ссылку /etc/security/msec/server, указывающую \n" "на /etc/security/msec/server.<SERVER_LEVEL>.\n" "\n" "Файл /etc/security/msec/server используется командой chkconfig --add \n" "для принятия решения о добавлении службы, если она присутствует в \n" "файле во время установки пакетов." #: security/help.pm:72 #, c-format msgid "" "Enable crontab and at for users.\n" "\n" "Put allowed users in /etc/cron.allow and /etc/at.allow (see man at(1)\n" "and crontab(1))." msgstr "" "Включает/Отключает для пользователей службы crontab и at.\n" "\n" "Разрешенные пользователи помещаются в /etc/cron.allow и /etc/at.allow\n" "(см. man at(1) и crontab(1))." #: security/help.pm:77 #, c-format msgid "Enable syslog reports to console 12" msgstr "Разрешает/Запрещает вывод отчетов syslog в консоль 12." #: security/help.pm:79 #, c-format msgid "" "Enable name resolution spoofing protection. If\n" "\"%s\" is true, also reports to syslog." msgstr "" "Включает/Отключает защиту от спуфинга при распознавании имен. \n" "Если \"%s\" равно true, также регистрирует событие в syslog." #: security/help.pm:80 #, c-format msgid "Security Alerts:" msgstr "Предупреждения о безопасности:" #: security/help.pm:82 #, c-format msgid "Enable IP spoofing protection." msgstr "Включить защиту от IP-спуфинга" #: security/help.pm:84 #, c-format msgid "Enable libsafe if libsafe is found on the system." msgstr "Включить libsafe, если libsafe найдена в системе" #: security/help.pm:86 #, c-format msgid "Enable the logging of IPv4 strange packets." msgstr "Включить регистрацию необычных пакетов IPv4" #: security/help.pm:88 #, c-format msgid "Enable msec hourly security check." msgstr "Разрешить msec'у проверять безопасность каждый час" #: security/help.pm:90 #, c-format msgid "" "Enable su only from members of the wheel group. If set to no, allows su from " "any user." msgstr "" "Разрешает su только для членов группы wheel. Если установлено в \"нет\", " "разрешает su для любого пользователя." #: security/help.pm:92 #, c-format msgid "Use password to authenticate users." msgstr "Использование паролей для аутентификации пользователей." #: security/help.pm:94 #, c-format msgid "Activate ethernet cards promiscuity check." msgstr "Включает/Отключает проверку режима promiscuity для ethernet-карт." #: security/help.pm:96 #, c-format msgid "Activate daily security check." msgstr "Включает/Отключает ежедневную проверку безопасности." #: security/help.pm:98 #, c-format msgid "Enable sulogin(8) in single user level." msgstr "Включает/Отключает sulogin(8) в однопользовательском режиме." #: security/help.pm:100 #, c-format msgid "Add the name as an exception to the handling of password aging by msec." msgstr "" "Добавление имени в качестве исключения в управление возрастом паролей, " "осуществляемого msec'ом." #: security/help.pm:102 #, c-format msgid "Set password aging to \"max\" days and delay to change to \"inactive\"." msgstr "" "Установка возраста пароля в \"max\" дней и задержку для изменения на " "\"inactive\"." #: security/help.pm:104 #, c-format msgid "Set the password history length to prevent password reuse." msgstr "" "Установка длительности истории пароля для предотвращения повторного " "использования пароля." #: security/help.pm:106 #, c-format msgid "" "Set the password minimum length and minimum number of digit and minimum " "number of capitalized letters." msgstr "" "Установка минимальной длины пароля, минимального количества цифр и " "минимального количества символов в верхнем регистре." #: security/help.pm:108 #, c-format msgid "Set the root's file mode creation mask." msgstr "Установка значения umask для root'а." #: security/help.pm:109 #, c-format msgid "if set to yes, check open ports." msgstr "если установлено Да, проверяются открытые порты." #: security/help.pm:110 #, c-format msgid "" "if set to yes, check for:\n" "\n" "- empty passwords,\n" "\n" "- no password in /etc/shadow\n" "\n" "- for users with the 0 id other than root." msgstr "" "если установлено Да, проверяется:\n" "\n" "- наличие пустых паролей,\n" "\n" "- отсутствие пароля в /etc/shadow\n" "\n" "- наличие пользователей с UID 0 кроме root'а." #: security/help.pm:117 #, c-format msgid "if set to yes, check permissions of files in the users' home." msgstr "" "если установлено Да, проверяются права доступа файлов в домашних каталогах " "пользователей." #: security/help.pm:118 #, c-format msgid "if set to yes, check if the network devices are in promiscuous mode." msgstr "" "если установлено Да, проверяется, работают ли сетевые устройства в режиме " "promiscuous." #: security/help.pm:119 #, c-format msgid "if set to yes, run the daily security checks." msgstr "если установлено Да, ежедневно выполняются проверки безопасности." #: security/help.pm:120 #, c-format msgid "if set to yes, check additions/removals of sgid files." msgstr "" "если установлено Да, проверяется добавление/удаление файлов с sgid-битами." #: security/help.pm:121 #, c-format msgid "if set to yes, check empty password in /etc/shadow." msgstr "если установлено Да, проверяется наличие пустых паролей в /etc/shadow." #: security/help.pm:122 #, c-format msgid "if set to yes, verify checksum of the suid/sgid files." msgstr "" "если установлено Да, проверяется контрольная сумма файлов с битами suid/sgid." #: security/help.pm:123 #, c-format msgid "if set to yes, check additions/removals of suid root files." msgstr "" "если установлено Да, проверяется добавление/удаление файлов root'а с suid-" "битом." #: security/help.pm:124 #, c-format msgid "if set to yes, report unowned files." msgstr "если установлено Да, создается отчет о файлах без владельца." #: security/help.pm:125 #, c-format msgid "if set to yes, check files/directories writable by everybody." msgstr "" "если установлено Да, проверяются файлы/каталоги с возможностью записи кем-" "угодно." #: security/help.pm:126 #, c-format msgid "if set to yes, run chkrootkit checks." msgstr "если установлено Да, выполняются проверки chkrootkit." #: security/help.pm:127 #, c-format msgid "" "if set, send the mail report to this email address else send it to root." msgstr "" "если установлено, письмо с отчетом отправляется на этот адрес, иначе " "отправляется root'у." #: security/help.pm:128 #, c-format msgid "if set to yes, report check result by mail." msgstr "если установлено Да, результаты проверки отправляются по почте." #: security/help.pm:129 #, c-format msgid "Do not send mails if there's nothing to warn about" msgstr "" "если установлено Да, сообщения не отправляются, если не о чем предупреждать." #: security/help.pm:130 #, c-format msgid "if set to yes, run some checks against the rpm database." msgstr "если установлено Да, выполняются некоторые проверки базы данных rpm." #: security/help.pm:131 #, c-format msgid "if set to yes, report check result to syslog." msgstr "если установлено Да, результаты проверки регистрируются в syslog." #: security/help.pm:132 #, c-format msgid "if set to yes, reports check result to tty." msgstr "если установлено Да, результаты проверки выводятся в tty." #: security/help.pm:134 #, c-format msgid "Set shell commands history size. A value of -1 means unlimited." msgstr "" "Устанавливает размер истории команд командного процессора. Значение -1 " "означает неограниченную историю." #: security/help.pm:136 #, c-format msgid "Set the shell timeout. A value of zero means no timeout." msgstr "" "Устанавливает таймаут для командного процессора. Нулевое значение означает " "отсутствие таймаута." #: security/help.pm:136 #, c-format msgid "Timeout unit is second" msgstr "Таймаут измеряется в секундах." #: security/help.pm:138 #, c-format msgid "Set the user's file mode creation mask." msgstr "Установка значения umask для пользователя." #: security/l10n.pm:11 #, c-format msgid "Accept bogus IPv4 error messages" msgstr "Принимать сообщения об ошибках bogus IPv4." #: security/l10n.pm:12 #, c-format msgid "Accept broadcasted icmp echo" msgstr "Принимать широковещательные icmp echo." #: security/l10n.pm:13 #, c-format msgid "Accept icmp echo" msgstr "Принимать icmp echo" #: security/l10n.pm:15 #, c-format msgid "/etc/issue* exist" msgstr "Существование /etc/issue*" #: security/l10n.pm:16 #, c-format msgid "Reboot by the console user" msgstr "Перезагрузка консольным пользователем" #: security/l10n.pm:17 #, c-format msgid "Allow remote root login" msgstr "Разрешает удаленный вход для root в систему." #: security/l10n.pm:18 #, c-format msgid "Direct root login" msgstr "Вход сразу под root" #: security/l10n.pm:19 #, c-format msgid "List users on display managers (kdm and gdm)" msgstr "Список пользователей в менеджерах экрана (kdm и gdm)" #: security/l10n.pm:20 #, c-format msgid "Export display when passing from root to the other users" msgstr "Экспортировать дисплей при переходе от root к другим пользователям" #: security/l10n.pm:21 #, c-format msgid "Allow X Window connections" msgstr "Разрешать подключения X Window" #: security/l10n.pm:22 #, c-format msgid "Authorize TCP connections to X Window" msgstr "Разрешить TCP соединения X Window" #: security/l10n.pm:23 #, c-format msgid "Authorize all services controlled by tcp_wrappers" msgstr "Разрешить все службы, контролируемые tcp_wrappers'ами" #: security/l10n.pm:24 #, c-format msgid "Chkconfig obey msec rules" msgstr "Chkconfig подчиняется правилам msec" #: security/l10n.pm:25 #, c-format msgid "Enable \"crontab\" and \"at\" for users" msgstr "Разрешить \"crontab\" и \"at\" для пользователей" #: security/l10n.pm:26 #, c-format msgid "Syslog reports to console 12" msgstr "Syslog выводит сообщения в консоль 12" #: security/l10n.pm:27 #, c-format msgid "Name resolution spoofing protection" msgstr "Защита от спуфинга определения имени" #: security/l10n.pm:28 #, c-format msgid "Enable IP spoofing protection" msgstr "Включить защиту от IP-спуфинга" #: security/l10n.pm:29 #, c-format msgid "Enable libsafe if libsafe is found on the system" msgstr "Включить libsafe, если libsafe найдена в системе" #: security/l10n.pm:30 #, c-format msgid "Enable the logging of IPv4 strange packets" msgstr "Включить регистрацию необычных пакетов IPv4" #: security/l10n.pm:31 #, c-format msgid "Enable msec hourly security check" msgstr "Разрешить msec'у проверять безопасность каждый час" #: security/l10n.pm:32 #, c-format msgid "Enable su only from the wheel group members" msgstr "Разрешить su только для членов группы wheel" #: security/l10n.pm:33 #, c-format msgid "Use password to authenticate users" msgstr "Использовать пароль для аутентификации пользователей" #: security/l10n.pm:34 #, c-format msgid "Ethernet cards promiscuity check" msgstr "Проверять режим promiscuity для ethernet-карт" #: security/l10n.pm:35 #, c-format msgid "Daily security check" msgstr "Ежедневная проверка безопасности" #: security/l10n.pm:36 #, c-format msgid "Sulogin(8) in single user level" msgstr "Sulogin(8) в однопользовательском режиме" #: security/l10n.pm:37 #, c-format msgid "No password aging for" msgstr "Нет возраста пароля для" #: security/l10n.pm:38 #, c-format msgid "Set password expiration and account inactivation delays" msgstr "" "Установить сроки действия паролей и предупреждений о блокировке учётных " "записей" #: security/l10n.pm:39 #, c-format msgid "Password history length" msgstr "Длина истории пароля" #: security/l10n.pm:40 #, c-format msgid "Password minimum length and number of digits and upcase letters" msgstr "Минимальная длина пароля и количество цифр и букв в верхнем регистре" #: security/l10n.pm:41 #, c-format msgid "Root umask" msgstr "umask root'а" #: security/l10n.pm:42 #, c-format msgid "Shell history size" msgstr "Размер истории команд в командном процессоре" #: security/l10n.pm:43 #, c-format msgid "Shell timeout" msgstr "Тайм-аут командного процессора" #: security/l10n.pm:44 #, c-format msgid "User umask" msgstr "umask пользователя" #: security/l10n.pm:45 #, c-format msgid "Check open ports" msgstr "Проверять открытые порты" #: security/l10n.pm:46 #, c-format msgid "Check for unsecured accounts" msgstr "Проверять небезопасные учётные записи" #: security/l10n.pm:47 #, c-format msgid "Check permissions of files in the users' home" msgstr "Проверять права файлов в домашних каталогах пользователей" #: security/l10n.pm:48 #, c-format msgid "Check if the network devices are in promiscuous mode" msgstr "Проверять, работают ли сетевые устройства в режиме promiscuous" #: security/l10n.pm:49 #, c-format msgid "Run the daily security checks" msgstr "Запускать ежедневные проверки безопасности" #: security/l10n.pm:50 #, c-format msgid "Check additions/removals of sgid files" msgstr "Проверять добавления/удаления бита sgid файлов" #: security/l10n.pm:51 #, c-format msgid "Check empty password in /etc/shadow" msgstr "Проверять пустые пароли в /etc/shadow" #: security/l10n.pm:52 #, c-format msgid "Verify checksum of the suid/sgid files" msgstr "Проверять контрольную сумму файлов suid/sgid" #: security/l10n.pm:53 #, c-format msgid "Check additions/removals of suid root files" msgstr "Проверять добавления/удаления для файлов root'овых suid-битов." #: security/l10n.pm:54 #, c-format msgid "Report unowned files" msgstr "Сообщать о файлах без владельца" #: security/l10n.pm:55 #, c-format msgid "Check files/directories writable by everybody" msgstr "Проверять файлы/каталоги на запись для всех" #: security/l10n.pm:56 #, c-format msgid "Run chkrootkit checks" msgstr "Запускать проверки на chkrootkit." #: security/l10n.pm:57 #, c-format msgid "Do not send empty mail reports" msgstr "Не отправлять пустые почтовые сообщения" #: security/l10n.pm:58 #, c-format msgid "If set, send the mail report to this email address else send it to root" msgstr "" "Если установлено, отправляет письмо с отчетом на этот адрес, иначе " "отправляет его root." #: security/l10n.pm:59 #, c-format msgid "Report check result by mail" msgstr "Сообщать о результатах проверки по почте" #: security/l10n.pm:60 #, c-format msgid "Run some checks against the rpm database" msgstr "Запускать некоторые проверки базы данных rpm." #: security/l10n.pm:61 #, c-format msgid "Report check result to syslog" msgstr "Выводить результаты проверки в syslog" #: security/l10n.pm:62 #, c-format msgid "Reports check result to tty" msgstr "Выводить результаты проверки на tty." #: security/level.pm:10 #, c-format msgid "Welcome To Crackers" msgstr "Добро пожаловать в Кракеры" #: security/level.pm:11 #, c-format msgid "Poor" msgstr "Низкий" #: security/level.pm:12 #, c-format msgid "Standard" msgstr "Стандартный" #: security/level.pm:13 #, c-format msgid "High" msgstr "Высокий" #: security/level.pm:14 #, c-format msgid "Higher" msgstr "Повышенный" #: security/level.pm:15 #, c-format msgid "Paranoid" msgstr "Параноидальный" #: security/level.pm:41 #, c-format msgid "" "This level is to be used with care. It makes your system more easy to use,\n" "but very sensitive. It must not be used for a machine connected to others\n" "or to the Internet. There is no password access." msgstr "" "Этот уровень надо использовать с осторожностью. Он делает вашу систему " "проще\n" " в использовании, но и очень чувствительной: он не должен использоваться\n" "на машинах, соединенных с другими или с Интернетом. Существует доступ без " "пароля." #: security/level.pm:44 #, c-format msgid "" "Passwords are now enabled, but use as a networked computer is still not " "recommended." msgstr "" "Пароли теперь включены, но использование в качестве сетевого компьютера по-" "прежнему не рекомендуется." #: security/level.pm:45 #, c-format msgid "" "This is the standard security recommended for a computer that will be used " "to connect to the Internet as a client." msgstr "" "Это стандартный уровень безопасности, рекомендуемый для компьютера,\n" "который будет использоваться для подключения к Интернету в качестве клиента." #: security/level.pm:46 #, c-format msgid "" "There are already some restrictions, and more automatic checks are run every " "night." msgstr "" "Уже присутствует ряд ограничений и каждую ночь запускаются дополнительные " "автоматические проверки." #: security/level.pm:47 #, c-format msgid "" "With this security level, the use of this system as a server becomes " "possible.\n" "The security is now high enough to use the system as a server which can " "accept\n" "connections from many clients. Note: if your machine is only a client on the " "Internet, you should choose a lower level." msgstr "" "На этом уровне безопасности становится возможным использование системы \n" "в качестве сервера.\n" "Зашита теперь достаточно высока для использования системы в качестве \n" "сервера, который принимает подключения от многочисленных клиентов.\n" "Помните: если ваша машина является только клиентом Интернета, вы должны \n" "выбрать более низкий уровень." #: security/level.pm:50 #, c-format msgid "" "This is similar to the previous level, but the system is entirely closed and " "security features are at their maximum." msgstr "" "Этот уровень похож на предыдущий, но система полностью закрыта и параметры " "безопасности установлены в их максимальные значения." #: security/level.pm:55 #, c-format msgid "Security" msgstr "Безопасность" #: security/level.pm:55 #, c-format msgid "DrakSec Basic Options" msgstr "Основные параметры DrakSec" #: security/level.pm:58 #, c-format msgid "Please choose the desired security level" msgstr "Пожалуйста, выберите желаемый уровень безопасности" #. -PO: this string is used to properly format "<security level>: <level description>" #: security/level.pm:62 #, c-format msgid "%s: %s" msgstr "" #: security/level.pm:66 #, c-format msgid "Use libsafe for servers" msgstr "Использовать libsafe для серверов" #: security/level.pm:67 #, c-format msgid "" "A library which defends against buffer overflow and format string attacks." msgstr "Библиотека, защищающая от атак переполнения буфера и формата строки." #: security/level.pm:68 #, c-format msgid "Security Administrator:" msgstr "Администратор по безопасности:" #: security/level.pm:69 #, c-format msgid "Login or email:" msgstr "" #: services.pm:19 #, c-format msgid "Launch the ALSA (Advanced Linux Sound Architecture) sound system" msgstr "" "Запустить звуковую систему ALSA (Расширенная звуковая архитектура Linux)" #: services.pm:20 #, c-format msgid "Anacron is a periodic command scheduler." msgstr "Anacron - планировщик команд, выполняющихся по расписанию." #: services.pm:21 #, c-format msgid "" "apmd is used for monitoring battery status and logging it via syslog.\n" "It can also be used for shutting down the machine when the battery is low." msgstr "" "apmd используется для мониторинга состояния батарей и его регистрации\n" "через syslog. Он также может быть использован для выключения машины при\n" "сильном разряде батарей." #: services.pm:23 #, c-format msgid "" "Runs commands scheduled by the at command at the time specified when\n" "at was run, and runs batch commands when the load average is low enough." msgstr "" "Запускает команды, внесенные в расписание командой at во время, указанное\n" "при запуске at, и запускает пакеты команд, когда средняя загрузка\n" "достаточно низка." #: services.pm:25 #, c-format msgid "" "cron is a standard UNIX program that runs user-specified programs\n" "at periodic scheduled times. vixie cron adds a number of features to the " "basic\n" "UNIX cron, including better security and more powerful configuration options." msgstr "" "cron является стандартной программой UNIX, которая по расписанию запускает\n" "указанные пользователем программы. vixie cron добавляет ряд параметров к \n" "базовому cron из UNIX, включая улучшенную безопасность и более мощные\n" "параметры настройки." #: services.pm:28 #, c-format msgid "" "Common UNIX Printing System (CUPS) is an advanced printer spooling system" msgstr "CUPS - система печати Linux" #: services.pm:29 #, c-format msgid "Launches the graphical display manager" msgstr "Запуск экрана входа в систему" #: services.pm:30 #, c-format msgid "" "FAM is a file monitoring daemon. It is used to get reports when files " "change.\n" "It is used by GNOME and KDE" msgstr "" "FAM это демон слежения за файлами. Он используется для получения отчетов\n" "об изменениях файлов.\n" "Его используют GNOME и KDE" #: services.pm:32 #, c-format msgid "" "GPM adds mouse support to text-based Linux applications such the\n" "Midnight Commander. It also allows mouse-based console cut-and-paste " "operations,\n" "and includes support for pop-up menus on the console." msgstr "" "GPM добавляет поддержку мыши для приложений, работающих в текстовом режиме,\n" "таких, как Midnight Commander. Он также позволяет использовать в консоли\n" "операции вырезать-и-вставить при помощи мыши, и включает в консоли\n" "поддержку всплывающих меню." #: services.pm:35 #, c-format msgid "HAL is a daemon that collects and maintains information about hardware" msgstr "" "HAL - демон, собирающий информацию об аппаратном обеспечении компьютера" #: services.pm:36 #, c-format msgid "" "HardDrake runs a hardware probe, and optionally configures\n" "new/changed hardware." msgstr "" "HardDrake выполняет проверку аппаратного обеспечения и при необходимости\n" "настраивает новое/изменившееся оборудование." #: services.pm:38 #, c-format msgid "" "Apache is a World Wide Web server. It is used to serve HTML files and CGI." msgstr "" "Apache является сервером всемирной паутины. Он используется для обслуживания " "файлов HTML и CGI." #: services.pm:39 #, c-format msgid "" "The internet superserver daemon (commonly called inetd) starts a\n" "variety of other internet services as needed. It is responsible for " "starting\n" "many services, including telnet, ftp, rsh, and rlogin. Disabling inetd " "disables\n" "all of the services it is responsible for." msgstr "" "Демон internet superserver (зачастую называемый inetd) запускает по мере\n" "необходимости множество других служб Интернета. Он отвечает за запуск\n" "многих служб, включая telnet, ftp, rsh и rlogin. Отключение inetd\n" "отключит также все службы, за которые он отвечает." #: services.pm:43 #, c-format msgid "" "Launch packet filtering for Linux kernel 2.2 series, to set\n" "up a firewall to protect your machine from network attacks." msgstr "" "Запуск фильтрации пакетов для ядер Linux серии 2.2, чтобы установить\n" "файервол для защиты своей машины от сетевых атак." #: services.pm:45 #, c-format msgid "" "This package loads the selected keyboard map as set in\n" "/etc/sysconfig/keyboard. This can be selected using the kbdconfig utility.\n" "You should leave this enabled for most machines." msgstr "" "Этот пакет загружает выбранную раскладку клавиатуры, установленную в\n" "/etc/sysconfig/keyboard. Она может быть выбрана при помощи утилиты\n" "kbdconfig. Вы должны оставить это включенным для большинства машин." #: services.pm:48 #, c-format msgid "" "Automatic regeneration of kernel header in /boot for\n" "/usr/include/linux/{autoconf,version}.h" msgstr "" "Автоматическая регенерация заголовков ядра в /boot для\n" "/usr/include/linux/{autoconf,version}.h" #: services.pm:50 #, c-format msgid "Automatic detection and configuration of hardware at boot." msgstr "Автоматическое обнаружение и настройка оборудования при загрузке." #: services.pm:51 #, c-format msgid "" "Linuxconf will sometimes arrange to perform various tasks\n" "at boot-time to maintain the system configuration." msgstr "" "Linuxconf будет иногда организовывать выполнение различных задач\n" "во время загрузки для поддержки в рабочем состоянии конфигурации системы." #: services.pm:53 #, c-format msgid "" "lpd is the print daemon required for lpr to work properly. It is\n" "basically a server that arbitrates print jobs to printer(s)." msgstr "" "lpd является демоном печати, который необходим для нормальной работы lpr. " "Это\n" "в основном сервер, распределяющий по принтерам задания на печать." #: services.pm:55 #, c-format msgid "" "Linux Virtual Server, used to build a high-performance and highly\n" "available server." msgstr "" "Виртуальный Сервер Linux, используется для создания высокопроизводительных\n" "и широкодоступных серверов." #: services.pm:57 #, c-format msgid "" "DBUS is a daemon which broadcasts notifications of system events and other " "messages" msgstr "" "DBUS - демон, рассылающий широковещательные уведомления и другие сообщения\n" "программам" #: services.pm:58 #, c-format msgid "" "named (BIND) is a Domain Name Server (DNS) that is used to resolve host " "names to IP addresses." msgstr "" "named (BIND) является сервером доменных имен (DNS), который используется для " "преобразования имен хостов в IP-адреса." #: services.pm:59 #, c-format msgid "" "Mounts and unmounts all Network File System (NFS), SMB (Lan\n" "Manager/Windows), and NCP (NetWare) mount points." msgstr "" "Монтирует и размонтирует все точки монтирования сетевых\n" "файловых систем(NFS), SMB (LanManager/Windows) и NCP (NetWare)." #: services.pm:61 #, c-format msgid "" "Activates/Deactivates all network interfaces configured to start\n" "at boot time." msgstr "" "Включает/Отключает все сетевые интерфейсы, настроенные на запуск\n" "при загрузке." #: services.pm:63 #, c-format msgid "" "NFS is a popular protocol for file sharing across TCP/IP networks.\n" "This service provides NFS server functionality, which is configured via the\n" "/etc/exports file." msgstr "" "NFS - это распространенный протокол для общего доступа к файлам\n" "через сети TCP/IP. Эта служба обеспечивает функциональные\n" "возможности сервера NFS, настраиваемого при помощи файл /etc/exports." #: services.pm:66 #, c-format msgid "" "NFS is a popular protocol for file sharing across TCP/IP\n" "networks. This service provides NFS file locking functionality." msgstr "" "NFS - это распространенный протокол для общего доступа к файлам\n" "через сети TCP/IP. Эта служба обеспечивает функциональные возможности\n" "для блокирования файлов NFS." #: services.pm:68 #, c-format msgid "Synchronizes system time using the Network Time Protocol (NTP)" msgstr "Синхронизирует системное время через протокол NTP" #: services.pm:69 #, c-format msgid "" "Automatically switch on numlock key locker under console\n" "and Xorg at boot." msgstr "" "Автоматическое включение при загрузке клавиши numlock\n" "в консоли и Xorg." #: services.pm:71 #, c-format msgid "Support the OKI 4w and compatible winprinters." msgstr "Поддержка win-принтеров OKI 4w и совместимых." #: services.pm:72 #, c-format msgid "" "PCMCIA support is usually to support things like ethernet and\n" "modems in laptops. It will not get started unless configured so it is safe " "to have\n" "it installed on machines that do not need it." msgstr "" "Поддержка PCMCIA является обычной поддержкой устройств типа ethernet и\n" "модемов в ноутбуках. Она не запустится до тех пор, пока не будет настроена,\n" "поэтому ее безопасно устанавливать на машинах, для которых она не нужна." #: services.pm:75 #, c-format msgid "" "The portmapper manages RPC connections, which are used by\n" "protocols such as NFS and NIS. The portmap server must be running on " "machines\n" "which act as servers for protocols which make use of the RPC mechanism." msgstr "" "portmapper управляет соединениями RPC, которые используются протоколами,\n" "такими как NFS и NIS. Сервер portmap должен быть запущен на машинах,\n" "которые работают как серверы для протоколов, осуществляющих использование\n" "механизма RPC." #: services.pm:78 #, c-format msgid "" "Postfix is a Mail Transport Agent, which is the program that moves mail from " "one machine to another." msgstr "" "Postfix это Агент доставки почты, программа которая переправляет почту с " "одной машины на другую." #: services.pm:79 #, c-format msgid "" "Saves and restores system entropy pool for higher quality random\n" "number generation." msgstr "" "Сохраняет и восстанавливает пул системной энтропии для повышения качества\n" "генерации случайных чисел." #: services.pm:81 #, c-format msgid "" "Assign raw devices to block devices (such as hard drive\n" "partitions), for the use of applications such as Oracle or DVD players" msgstr "" "Назначает raw-устройства block-устройствам (таким как разделы\n" "жесткого диска) для использования такими приложениями, как Oracle или\n" "DVD проигрыватели" #: services.pm:83 #, c-format msgid "" "The routed daemon allows for automatic IP router table updated via\n" "the RIP protocol. While RIP is widely used on small networks, more complex\n" "routing protocols are needed for complex networks." msgstr "" "Демон routed разрешает автоматическое обновление таблиц IP-маршрутизации\n" "через протокол RIP. В то время как RIP широко используется в небольших " "сетях,\n" "для сложных сетей необходимы более сложные протоколы маршрутизации." #: services.pm:86 #, c-format msgid "" "The rstat protocol allows users on a network to retrieve\n" "performance metrics for any machine on that network." msgstr "" "Протокол rstat позволяет пользователям сети получать\n" "данные о производительности любой машины в этой сети." #: services.pm:88 #, c-format msgid "" "The rusers protocol allows users on a network to identify who is\n" "logged in on other responding machines." msgstr "" "Протокол rusers позволяет пользователям сети определять, кто работает\n" "на другой отвечающей машине." #: services.pm:90 #, c-format msgid "" "The rwho protocol lets remote users get a list of all of the users\n" "logged into a machine running the rwho daemon (similar to finger)." msgstr "" "Протокол rwho позволяет удаленным пользователям получать список всех\n" "пользователей, работающих на машине с запущенным демоном rwho\n" "(похож на finger)." #: services.pm:92 #, c-format msgid "" "SANE (Scanner Access Now Easy) enables to access scanners, video cameras, ..." msgstr "SANE - система работы со сканерами и камерами" #: services.pm:93 #, c-format msgid "" "The SMB/CIFS protocol enables to share access to files & printers and also " "integrates with a Windows Server domain" msgstr "" "Протокол SMB/CIFS даёт возможность открыть общий доступ к файлам и " "принтерам\n" "по сети" #: services.pm:94 #, c-format msgid "Launch the sound system on your machine" msgstr "Запускает звуковую систему на вашей машине" #: services.pm:95 #, c-format msgid "" "Secure Shell is a network protocol that allows data to be exchanged over a " "secure channel between two computers" msgstr "" "SSH - протокол, позволяющий удалённо работать с компьютером по сети, " "используя\n" "шифрованный канал передачи данных" #: services.pm:96 #, c-format msgid "" "Syslog is the facility by which many daemons use to log messages\n" "to various system log files. It is a good idea to always run syslog." msgstr "" "Syslog - это функция, которая используется многими демонами для\n" "регистрации сообщений в различных системных файлах логов. Неплохо было\n" "бы всегда запускать syslog." #: services.pm:98 #, c-format msgid "Load the drivers for your usb devices." msgstr "Загружает драйвера для ваших устройств USB." #: services.pm:99 #, c-format msgid "Starts the X Font Server." msgstr "Запускает сервер шрифтов." #: services.pm:100 #, c-format msgid "Starts other deamons on demand." msgstr "Запускает другие демоны." #: services.pm:123 #, c-format msgid "Printing" msgstr "Печать" #: services.pm:124 #, c-format msgid "Internet" msgstr "Интернет" #: services.pm:127 #, c-format msgid "File sharing" msgstr "Общий доступ к файлам" #: services.pm:129 #, c-format msgid "System" msgstr "Система" #: services.pm:134 #, c-format msgid "Remote Administration" msgstr "Удаленное администрирование" #: services.pm:142 #, c-format msgid "Database Server" msgstr "Сервер базы данных" #: services.pm:153 services.pm:189 #, c-format msgid "Services" msgstr "Службы" #: services.pm:153 #, c-format msgid "Choose which services should be automatically started at boot time" msgstr "" "Выберите, какие службы должны быть автоматически запущены во время загрузки" #: services.pm:171 #, c-format msgid "Services: %d activated for %d registered" msgstr "Службы: включено %d из %d зарегистрированных" #: services.pm:205 #, c-format msgid "running" msgstr "выполняется" #: services.pm:205 #, c-format msgid "stopped" msgstr "остановлен" #: services.pm:210 #, c-format msgid "Services and daemons" msgstr "Службы и демоны" #: services.pm:216 #, c-format msgid "" "No additional information\n" "about this service, sorry." msgstr "" "Извините, дополнительная информация\n" "об этой службе отсутствует." #: services.pm:221 ugtk2.pm:923 #, c-format msgid "Info" msgstr "Информация" #: services.pm:224 #, c-format msgid "Start when requested" msgstr "Запуск по запросу" #: services.pm:224 #, c-format msgid "On boot" msgstr "При загрузке" #: services.pm:242 #, c-format msgid "Start" msgstr "Запустить" #: services.pm:242 #, c-format msgid "Stop" msgstr "Остановить" #: standalone.pm:25 #, c-format msgid "" "This program is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2, or (at your option)\n" "any later version.\n" "\n" "This program is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License\n" "along with this program; if not, write to the Free Software\n" "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, " "USA.\n" msgstr "" "Эта программа является открытым программным обеспечением; вы можете\n" "распространять ее дальше и/или изменять ее при условии соблюдения GNU\n" "General Public License, опубликованной Free Software Foundation, 2-й\n" "версии или любой другой (на ваше усмотрение) более поздней версии.\n" "\n" "Эта программа распространяется в надежде быть полезной, но БЕЗО ВСЯКОЙ\n" "ГАРАНТИИ; даже без подразумеваемой гарантии РАБОТОСПОСОБНОСТИ или\n" "ПРИГОДНОСТИ ДЛЯ ЛИЧНЫХ ЦЕЛЕЙ. Подробности смотрите в GNU General Public\n" "License\n" "\n" "Вы должны были получить копию GNU General Public License вместе с этой\n" "программой; если нет - напишите в Free Software Foundation, Inc.,\n" "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n" #: standalone.pm:44 #, c-format msgid "" "[--config-info] [--daemon] [--debug] [--default] [--show-conf]\n" "Backup and Restore application\n" "\n" "--default : save default directories.\n" "--debug : show all debug messages.\n" "--show-conf : list of files or directories to backup.\n" "--config-info : explain configuration file options (for non-X " "users).\n" "--daemon : use daemon configuration. \n" "--help : show this message.\n" "--version : show version number.\n" msgstr "" "[--config-info] [--daemon] [--debug] [--default] [--show-conf]\n" "Приложение для резервирования и восстановления\n" "\n" "--default : сохранить каталоги по умолчанию.\n" "--debug : показать все отладочные сообщения.\n" "--show-conf : перечислить резервируемые файлы или каталоги.\n" "--config-info : разъяснять параметры файла настройки (не " "для пользователей Х).\n" "--daemon : использовать конфигурацию демона. \n" "--help : показать это сообщение.\n" "--version : показать номер версии.\n" #: standalone.pm:56 #, c-format msgid "" "[--boot] [--splash]\n" "OPTIONS:\n" " --boot - enable to configure boot loader\n" " --splash - enable to configure boot theme\n" "default mode: offer to configure autologin feature" msgstr "" "[--boot] [--splash]\n" "ПАРАМЕТРЫ:\n" " --boot - разрешить настройку начального загрузчика\n" " --splash - разрешить настройку загрузочной темы\n" "режим по умолчанию: предлагать настроить возможность автологина" #: standalone.pm:61 #, c-format msgid "" "[OPTIONS] [PROGRAM_NAME]\n" "\n" "OPTIONS:\n" " --help - print this help message.\n" " --report - program should be one of Mandriva Linux tools\n" " --incident - program should be one of Mandriva Linux tools" msgstr "" "[ОПЦИИ] [ИМЯ_ПРОГРАММЫ]\n" "\n" "ОПЦИИ:\n" " --help - вывести это справочное сообщение.\n" " --report - программа должна быть из пакета утилит Mandriva Linux\n" " --incident - программа должна быть из пакета утилит Mandriva Linux" #: standalone.pm:67 #, c-format msgid "" "[--add]\n" " --add - \"add a network interface\" wizard\n" " --del - \"delete a network interface\" wizard\n" " --skip-wizard - manage connections\n" " --internet - configure internet\n" " --wizard - like --add" msgstr "" "[--add]\n" " --add - мастер \"добавления сетевого интерфейса\"\n" " --del - мастер \"удаления сетевого интерфейса\"\n" " --skip-wizard - управление соединениями\n" " --internet - настройка интернет\n" " --wizard - то же что и --add" #: standalone.pm:73 #, c-format msgid "" "\n" "Font Importation and monitoring application\n" "\n" "OPTIONS:\n" "--windows_import : import from all available windows partitions.\n" "--xls_fonts : show all fonts that already exist from xls\n" "--install : accept any font file and any directory.\n" "--uninstall : uninstall any font or any directory of font.\n" "--replace : replace all font if already exist\n" "--application : 0 none application.\n" " : 1 all application available supported.\n" " : name_of_application like so for staroffice \n" " : and gs for ghostscript for only this one." msgstr "" "\n" "Приложение для импорта и управления шрифтами\n" "\n" "ПАРАМЕТРЫ:\n" "--windows_import : импортировать со всех доступных разделов windows.\n" "--xls_fonts : показать все уже существующие шрифты из xls\n" "--install : принять любой файл шрифтов и любой каталог.\n" "--uninstall : удалить любой шрифт или любой каталог шрифтов.\n" "--replace : заменить все шрифты, если уже существуют\n" "--application : 0 приложение отсутствует.\n" " : 1 поддерживаются все доступные приложения.\n" " : имя_приложения такое как so для staroffice \n" " : и gs для ghostscript только для этого приложения." #: standalone.pm:88 #, c-format msgid "" "[OPTIONS]...\n" "Mandriva Linux Terminal Server Configurator\n" "--enable : enable MTS\n" "--disable : disable MTS\n" "--start : start MTS\n" "--stop : stop MTS\n" "--adduser : add an existing system user to MTS (requires username)\n" "--deluser : delete an existing system user from MTS (requires " "username)\n" "--addclient : add a client machine to MTS (requires MAC address, IP, " "nbi image name)\n" "--delclient : delete a client machine from MTS (requires MAC address, " "IP, nbi image name)" msgstr "" "[ОПЦИИ]...\n" "Конфигуратор Сервера терминалов Mandriva Linux\n" "--enable : включить MTS\n" "--disable : выключить MTS\n" "--start : запустить MTS\n" "--stop : остановить MTS\n" "--adduser : добавить существующего пользователя системы в MTS " "(требуется имя пользователя)\n" "--deluser : удалить существующего пользователя системы из MTS " "(требуется имя пользователя)\n" "--addclient : добавить клиентскую машину в MTS (требуется MAC-адрес, " "IP, имя образа nbi)\n" "--delclient : удалить клиентскую машину из MTS (требуется MAC-адрес, " "IP, имя образа nbi)" #: standalone.pm:100 #, c-format msgid "[keyboard]" msgstr "[клавиатура]" #: standalone.pm:101 #, c-format msgid "[--file=myfile] [--word=myword] [--explain=regexp] [--alert]" msgstr "" "[--file=мой_файл] [--word=мое_слово] [--explain=регулярное_выражение] [--" "alert]" #: standalone.pm:102 #, c-format msgid "" "[OPTIONS]\n" "Network & Internet connection and monitoring application\n" "\n" "--defaultintf interface : show this interface by default\n" "--connect : connect to internet if not already connected\n" "--disconnect : disconnect to internet if already connected\n" "--force : used with (dis)connect : force (dis)connection.\n" "--status : returns 1 if connected 0 otherwise, then exit.\n" "--quiet : do not be interactive. To be used with (dis)connect." msgstr "" "[ОПЦИИ]\n" "Приложения для подключения к сети и Интернету и их мониторинга\n" "\n" "--defaultintf interface : показать этот интерфейс по умолчанию\n" "--connect : подключиться к Интернету, если еще не подключен\n" "--disconnect : отключиться от Интернета, если уже подключен\n" "--force : используется с (dis)connect : принудительно (от)соединиться.\n" "--status : возвращает 1, если подключен, иначе 0, затем выходит.\n" "--quiet : не быть интерактивным. Используется с (dis)connect." #: standalone.pm:112 #, c-format msgid "" "[OPTION]...\n" " --no-confirmation do not ask first confirmation question in Mandriva " "Update mode\n" " --no-verify-rpm do not verify packages signatures\n" " --changelog-first display changelog before filelist in the " "description window\n" " --merge-all-rpmnew propose to merge all .rpmnew/.rpmsave files found" msgstr "" "[ОПЦИЯ]...\n" " --no-confirmation не просить первого подтверждения в режиме Mandriva " "Update\n" " --no-verify-rpm не проверять подписи пакетов\n" " --changelog-first показывать журнал изменений перед списком файлов в " "окне описания\n" " --merge-all-rpmnew предлагать объединить все найденные файлы .rpmnew/." "rpmsave" #: standalone.pm:117 #, c-format msgid "" "[--manual] [--device=dev] [--update-sane=sane_source_dir] [--update-" "usbtable] [--dynamic=dev]" msgstr "" "[--manual] [--device=устройство] [--update-sane=sane_source_dir] [--update-" "usbtable] [--dynamic=устройство]" #: standalone.pm:118 #, c-format msgid "" " [everything]\n" " XFdrake [--noauto] monitor\n" " XFdrake resolution" msgstr "" " [everything]\n" " XFdrake [--noauto] монитор\n" " разрешение XFdrake" #: standalone.pm:154 #, c-format msgid "" "\n" "Usage: %s [--auto] [--beginner] [--expert] [-h|--help] [--noauto] [--" "testing] [-v|--version] " msgstr "" "\n" "Использование: %s [--auto] [--beginner] [--expert] [-h|--help] [--noauto] " "[--testing] [-v|--version] " #: timezone.pm:161 timezone.pm:162 #, c-format msgid "All servers" msgstr "Все серверы" #: timezone.pm:196 #, c-format msgid "Global" msgstr "Глобально" #: timezone.pm:199 #, c-format msgid "Africa" msgstr "Африка" #: timezone.pm:200 #, c-format msgid "Asia" msgstr "Азия" #: timezone.pm:201 #, c-format msgid "Europe" msgstr "Европа" #: timezone.pm:202 #, c-format msgid "North America" msgstr "Северная Америка" #: timezone.pm:203 #, c-format msgid "Oceania" msgstr "Океания" #: timezone.pm:204 #, c-format msgid "South America" msgstr "Южная Америка" #: timezone.pm:213 #, c-format msgid "Hong Kong" msgstr "Гонконг" #: timezone.pm:250 #, c-format msgid "Russian Federation" msgstr "Российская Федерация" #: timezone.pm:258 #, c-format msgid "Yugoslavia" msgstr "Югославия" #: ugtk2.pm:813 #, c-format msgid "Is this correct?" msgstr "Все правильно?" #: ugtk2.pm:873 #, c-format msgid "No file chosen" msgstr "Файлы не выбраны" #: ugtk2.pm:875 #, c-format msgid "You have chosen a file, not a directory" msgstr "Вы указали файл, а не каталог" #: ugtk2.pm:877 #, c-format msgid "You have chosen a directory, not a file" msgstr "Вы указали каталог, а не файл" #: ugtk2.pm:879 #, c-format msgid "No such directory" msgstr "Нет такого каталога" #: ugtk2.pm:879 #, c-format msgid "No such file" msgstr "Нет такого файла" #: wizards.pm:95 #, c-format msgid "" "%s is not installed\n" "Click \"Next\" to install or \"Cancel\" to quit" msgstr "" "%s не установлен\n" "Нажмите \"Далее\" для установки или \"Отмена\" для выхода." #: wizards.pm:99 #, c-format msgid "Installation failed" msgstr "Установка завершилась неудачей" #~ msgid "" #~ "If you plan to use aboot, be careful to leave a free space (2048 sectors " #~ "is enough)\n" #~ "at the beginning of the disk" #~ msgstr "" #~ "Если вы планируете использовать aboot, не забудьте оставить свободное " #~ "место (2048 секторов будет достаточно)\n" #~ "в начале диска" #~ msgid "Security level" #~ msgstr "Уровень безопасности" #~ msgid "Expand Tree" #~ msgstr "Развернуть дерево" #~ msgid "Collapse Tree" #~ msgstr "Свернуть дерево" #~ msgid "Toggle between flat and group sorted" #~ msgstr "Переключение между простым и сортированным по группам списками"