diff --git a/AddPortMapForm.cs b/AddPortMapForm.cs
index ac734e7..4205ea7 100644
--- a/AddPortMapForm.cs
+++ b/AddPortMapForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/AddRelayMapForm.cs b/AddRelayMapForm.cs
index 2e3e477..0f02405 100644
--- a/AddRelayMapForm.cs
+++ b/AddRelayMapForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/AppLaunchForm.cs b/AppLaunchForm.cs
index bf5e2a3..027a8e8 100644
--- a/AppLaunchForm.cs
+++ b/AppLaunchForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/DeviceSettingsForm.cs b/DeviceSettingsForm.cs
index 705a22f..0d0f8ab 100644
--- a/DeviceSettingsForm.cs
+++ b/DeviceSettingsForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/DeviceUserControl.cs b/DeviceUserControl.cs
index f799a6d..41e685a 100644
--- a/DeviceUserControl.cs
+++ b/DeviceUserControl.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/FileDeletePromptForm.cs b/FileDeletePromptForm.cs
index 7d77b4c..8853ff5 100644
--- a/FileDeletePromptForm.cs
+++ b/FileDeletePromptForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/FileTransferStatusForm.cs b/FileTransferStatusForm.cs
index 06df3c6..f74d392 100644
--- a/FileTransferStatusForm.cs
+++ b/FileTransferStatusForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/FileViewer.cs b/FileViewer.cs
index b6fd7fd..dc1d44f 100644
--- a/FileViewer.cs
+++ b/FileViewer.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/FilenamePromptForm.cs b/FilenamePromptForm.cs
index eec6202..cdf0a24 100644
--- a/FilenamePromptForm.cs
+++ b/FilenamePromptForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/InstallForm.cs b/InstallForm.cs
index 55a2965..1c9cf17 100644
--- a/InstallForm.cs
+++ b/InstallForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/KVMControl.cs b/KVMControl.cs
index 1075cde..af53a5a 100644
--- a/KVMControl.cs
+++ b/KVMControl.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/KVMControlHook.cs b/KVMControlHook.cs
index 72575a7..de71aef 100644
--- a/KVMControlHook.cs
+++ b/KVMControlHook.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/KVMResizeControl.cs b/KVMResizeControl.cs
index f66c325..ba7da4b 100644
--- a/KVMResizeControl.cs
+++ b/KVMResizeControl.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/KVMSettingsForm.cs b/KVMSettingsForm.cs
index 9e10a5d..033dccd 100644
--- a/KVMSettingsForm.cs
+++ b/KVMSettingsForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/KVMStats.cs b/KVMStats.cs
index 494f905..4d62f2d 100644
--- a/KVMStats.cs
+++ b/KVMStats.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/KVMViewer.cs b/KVMViewer.cs
index 2e8ca98..e681e61 100644
--- a/KVMViewer.cs
+++ b/KVMViewer.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/LocalPipe.cs b/LocalPipe.cs
index 6e83fe3..90dc3a2 100644
--- a/LocalPipe.cs
+++ b/LocalPipe.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
index c42ab5a..a4e9858 100644
--- a/MainForm.Designer.cs
+++ b/MainForm.Designer.cs
@@ -48,6 +48,7 @@
this.nextButton1 = new System.Windows.Forms.Button();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.label1 = new System.Windows.Forms.Label();
+ this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.panel2 = new System.Windows.Forms.Panel();
this.tokenRememberCheckBox = new System.Windows.Forms.CheckBox();
@@ -135,13 +136,13 @@
this.settingsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.openMapFileDialog = new System.Windows.Forms.OpenFileDialog();
this.saveMapFileDialog = new System.Windows.Forms.SaveFileDialog();
- this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.panel5.SuspendLayout();
this.mainPanel.SuspendLayout();
this.mainTabControl.SuspendLayout();
this.tabPage1.SuspendLayout();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.tabPage2.SuspendLayout();
this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();
@@ -164,7 +165,6 @@
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.trayIconContextMenuStrip.SuspendLayout();
this.mappingsContextMenuStrip.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.SuspendLayout();
//
// panel5
@@ -304,6 +304,13 @@
this.label1.Name = "label1";
this.label1.UseMnemonic = false;
//
+ // pictureBox2
+ //
+ resources.ApplyResources(this.pictureBox2, "pictureBox2");
+ this.pictureBox2.Image = global::MeshCentralRouter.Properties.Resources.MeshCentral;
+ this.pictureBox2.Name = "pictureBox2";
+ this.pictureBox2.TabStop = false;
+ //
// tabPage2
//
this.tabPage2.Controls.Add(this.panel2);
@@ -958,13 +965,6 @@
this.saveMapFileDialog.DefaultExt = "mcrouter";
resources.ApplyResources(this.saveMapFileDialog, "saveMapFileDialog");
//
- // pictureBox2
- //
- resources.ApplyResources(this.pictureBox2, "pictureBox2");
- this.pictureBox2.Image = global::MeshCentralRouter.Properties.Resources.MeshCentral;
- this.pictureBox2.Name = "pictureBox2";
- this.pictureBox2.TabStop = false;
- //
// MainForm
//
resources.ApplyResources(this, "$this");
@@ -984,6 +984,7 @@
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.tabPage2.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
@@ -1009,7 +1010,6 @@
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.trayIconContextMenuStrip.ResumeLayout(false);
this.mappingsContextMenuStrip.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.ResumeLayout(false);
}
diff --git a/MainForm.cs b/MainForm.cs
index fc1eaf0..60524d3 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -560,6 +560,7 @@ namespace MeshCentralRouter
private void Meshcentral_onTwoFactorCookie(string cookie)
{
if (this.InvokeRequired) { this.Invoke(new MeshCentralServer.twoFactorCookieHandler(Meshcentral_onTwoFactorCookie), cookie); return; }
+ if (debug) { try { File.AppendAllText("debug.log", "Saving 2FA cookie\r\n"); } catch (Exception) { } }
Settings.SetRegValue("TwoFactorCookie", cookie);
}
diff --git a/MainForm.resx b/MainForm.resx
index 1f7b561..8f90901 100644
--- a/MainForm.resx
+++ b/MainForm.resx
@@ -129,10 +129,13 @@
- 11, 285
+ 15, 354
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
@@ -169,10 +172,13 @@
NoControl
- 241, 225
+ 321, 277
+
+
+ 4, 0, 4, 0
- 88, 13
+ 114, 17
19
@@ -202,10 +208,13 @@
NoControl
- 238, 176
+ 317, 217
+
+
+ 4, 0, 4, 0
- 53, 13
+ 69, 17
18
@@ -232,10 +241,13 @@
NoControl
- 238, 135
+ 317, 166
+
+
+ 4, 0, 4, 0
- 55, 13
+ 73, 17
17
@@ -262,10 +274,13 @@
NoControl
- 238, 92
+ 317, 113
+
+
+ 4, 0, 4, 0
- 38, 13
+ 50, 17
16
@@ -289,13 +304,16 @@
Top, Left, Right
- 241, 192
+ 321, 236
+
+
+ 4, 4, 4, 4
●
- 214, 20
+ 287, 22
102
@@ -319,10 +337,13 @@
meshcentral.com
- 241, 110
+ 321, 135
+
+
+ 4, 4, 4, 4
- 214, 21
+ 287, 24
100
@@ -343,10 +364,13 @@
Top, Left, Right
- 241, 151
+ 321, 186
+
+
+ 4, 4, 4, 4
- 214, 20
+ 287, 22
101
@@ -370,10 +394,13 @@
NoControl
- 174, 260
+ 235, 323
+
+
+ 4, 0, 4, 0
- 303, 13
+ 404, 16
103
@@ -406,10 +433,13 @@
NoControl
- 3, 260
+ 4, 323
+
+
+ 4, 0, 4, 0
- 37, 13
+ 47, 17
11
@@ -436,10 +466,13 @@
NoControl
- 371, 285
+ 498, 354
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
105
@@ -466,10 +499,13 @@
NoControl
- 0, 276
+ 0, 343
+
+
+ 4, 4, 4, 4
- 478, 40
+ 640, 49
StretchImage
@@ -496,10 +532,13 @@
NoControl
- 12, 9
+ 16, 11
+
+
+ 4, 0, 4, 0
- 454, 56
+ 608, 69
6
@@ -526,10 +565,13 @@
NoControl
- 15, 68
+ 20, 84
+
+
+ 4, 4, 4, 4
- 217, 170
+ 292, 212
Zoom
@@ -553,10 +595,13 @@
Fill
- 3, 3
+ 4, 4
+
+
+ 4, 4, 4, 4
- 478, 316
+ 640, 392
6
@@ -574,13 +619,16 @@
0
- 4, 25
+ 4, 28
+
+
+ 4, 4, 4, 4
- 3, 3, 3, 3
+ 4, 4, 4, 4
- 484, 322
+ 648, 400
0
@@ -607,10 +655,13 @@
NoControl
- 241, 221
+ 321, 272
+
+
+ 4, 4, 4, 4
- 131, 17
+ 170, 21
204
@@ -637,10 +688,13 @@
NoControl
- 241, 177
+ 321, 218
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
202
@@ -667,10 +721,13 @@
NoControl
- 342, 177
+ 456, 218
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
203
@@ -700,10 +757,13 @@
NoControl
- 238, 182
+ 317, 224
+
+
+ 4, 0, 4, 0
- 55, 13
+ 73, 17
21
@@ -733,10 +793,13 @@
NoControl
- 238, 135
+ 317, 166
+
+
+ 4, 0, 4, 0
- 38, 13
+ 48, 17
19
@@ -760,10 +823,13 @@
Top, Left, Right
- 241, 151
+ 321, 186
+
+
+ 4, 4, 4, 4
- 214, 20
+ 287, 22
201
@@ -787,10 +853,13 @@
NoControl
- 15, 68
+ 20, 84
+
+
+ 4, 4, 4, 4
- 202, 170
+ 272, 212
Zoom
@@ -817,10 +886,13 @@
NoControl
- 270, 285
+ 363, 354
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
205
@@ -847,10 +919,13 @@
NoControl
- 371, 285
+ 498, 354
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
206
@@ -877,10 +952,13 @@
NoControl
- 0, 276
+ 0, 343
+
+
+ 4, 4, 4, 4
- 478, 40
+ 640, 49
StretchImage
@@ -907,10 +985,13 @@
NoControl
- 12, 9
+ 16, 11
+
+
+ 4, 0, 4, 0
- 454, 56
+ 608, 69
6
@@ -934,10 +1015,13 @@
Fill
- 3, 3
+ 4, 4
+
+
+ 4, 4, 4, 4
- 478, 316
+ 640, 392
7
@@ -955,13 +1039,16 @@
0
- 4, 25
+ 4, 28
+
+
+ 4, 4, 4, 4
- 3, 3, 3, 3
+ 4, 4, 4, 4
- 484, 322
+ 648, 400
1
@@ -988,10 +1075,13 @@
True
- 208, 255
+ 277, 318
+
+
+ 4, 4, 4, 4
- 145, 17
+ 190, 21
302
@@ -1015,7 +1105,10 @@
Top, Bottom, Left, Right
- 15, 82
+ 20, 101
+
+
+ 4, 4, 4, 4
True
@@ -1024,7 +1117,7 @@
Vertical
- 450, 162
+ 602, 202
25
@@ -1048,10 +1141,13 @@
NoControl
- 14, 251
+ 19, 313
+
+
+ 4, 4, 4, 4
- 188, 23
+ 251, 28
301
@@ -1081,10 +1177,13 @@
NoControl
- 8, 6
+ 11, 7
+
+
+ 4, 0, 4, 0
- 468, 22
+ 627, 27
23
@@ -1114,10 +1213,13 @@
NoControl
- 12, 34
+ 16, 42
+
+
+ 4, 0, 4, 0
- 454, 45
+ 608, 55
22
@@ -1144,10 +1246,13 @@
NoControl
- 276, 291
+ 371, 362
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
303
@@ -1174,10 +1279,13 @@
NoControl
- 377, 291
+ 506, 362
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
304
@@ -1204,10 +1312,13 @@
NoControl
- 0, 282
+ 0, 351
+
+
+ 4, 4, 4, 4
- 484, 40
+ 648, 49
StretchImage
@@ -1233,8 +1344,11 @@
0, 0
+
+ 4, 4, 4, 4
+
- 484, 322
+ 648, 400
8
@@ -1252,10 +1366,13 @@
0
- 4, 25
+ 4, 28
+
+
+ 4, 4, 4, 4
- 484, 322
+ 648, 400
2
@@ -1285,43 +1402,43 @@
613, 17
- 185, 22
+ 218, 26
Show &Group Names
- 185, 22
+ 218, 26
Show &Offline Devices
- 182, 6
+ 215, 6
- 185, 22
+ 218, 26
Sort by &Name
- 185, 22
+ 218, 26
Sort by G&roup
- 182, 6
+ 215, 6
- 185, 22
+ 218, 26
S&ettings...
- 186, 126
+ 219, 146
mainContextMenuStrip
@@ -1336,10 +1453,13 @@
NoControl
- 454, 2
+ 608, 2
+
+
+ 4, 0, 4, 0
- 25, 25
+ 31, 31
403
@@ -1363,10 +1483,13 @@
Top, Right
- 306, 5
+ 411, 6
+
+
+ 4, 4, 4, 4
- 146, 20
+ 193, 22
402
@@ -1399,10 +1522,13 @@
Bottom, Left
- 4, 174
+ 5, 210
+
+
+ 4, 4, 4, 4
- 168, 35
+ 224, 43
405
@@ -1444,82 +1570,82 @@
Segoe UI, 9pt, style=Bold
- 170, 22
+ 198, 24
Add &Map...
- 170, 22
+ 198, 24
Add &Relay Map...
- 167, 6
+ 195, 6
- 171, 22
+ 204, 26
Ask Consent + Bar
- 171, 22
+ 204, 26
Ask Consent
- 171, 22
+ 204, 26
Privacy Bar
- 170, 22
+ 198, 24
Remote Desktop...
- 170, 22
+ 198, 24
Remote Files...
- 170, 22
+ 198, 24
HTTP
- 170, 22
+ 198, 24
HTTPS
- 170, 22
+ 198, 24
RDP
- 170, 22
+ 198, 24
SSH
- 170, 22
+ 198, 24
SCP
- 171, 208
+ 199, 226
devicesContextMenuStrip
@@ -1535,7 +1661,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg
- HQAAAk1TRnQBSQFMAgEBEAEAAXgBAAF4AQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
+ HQAAAk1TRnQBSQFMAgEBEAEAAYABAAGAAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABUAMAAQEBAAEYBgABPP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AJYAA/0D+AP3A/sD/yEAA/0D+gP5
A/wD/xgAAfoB+wH6A/4qAAP9A/8tAAP7A88D1QPbA88D1AO+A9QYAAP8A90D4APjA90D4APUA+MSAAP8
AZEBjwF9AU4BaAEhAfQB9QH0JAAD/gPRA8YD+ioAAcYCxwHPAtAB2ALZA90DywPBA68DmgP3FQAD2APd
@@ -1666,10 +1792,13 @@
- 10, 4
+ 13, 5
+
+
+ 4, 4, 4, 4
- 446, 210
+ 593, 258
404
@@ -1699,10 +1828,13 @@
NoControl
- 2, 88
+ 3, 108
+
+
+ 4, 0, 4, 0
- 399, 52
+ 530, 64
5
@@ -1738,10 +1870,13 @@
NoControl
- 2, 88
+ 3, 108
+
+
+ 4, 0, 4, 0
- 399, 52
+ 530, 64
4
@@ -1767,8 +1902,11 @@
0, 0
+
+ 4, 4, 4, 4
+
- 470, 248
+ 628, 305
50
@@ -1786,13 +1924,16 @@
0
- 4, 25
+ 4, 28
+
+
+ 4, 4, 4, 4
- 3, 3, 3, 3
+ 4, 4, 4, 4
- 470, 250
+ 632, 315
0
@@ -1819,10 +1960,13 @@
NoControl
- 4, 185
+ 5, 217
+
+
+ 4, 4, 4, 4
- 168, 35
+ 224, 43
55
@@ -1861,10 +2005,13 @@
NoControl
- 6, 79
+ 8, 97
+
+
+ 4, 0, 4, 0
- 453, 52
+ 595, 64
4
@@ -1892,8 +2039,11 @@ Click "Add" to get started.
0, 0
+
+ 4, 4, 4, 4
+
- 473, 224
+ 625, 264
49
@@ -1917,10 +2067,13 @@ Click "Add" to get started.
NoControl
- 1, 229
+ 1, 271
+
+
+ 4, 4, 4, 4
- 20, 20
+ 27, 25
54
@@ -1944,10 +2097,13 @@ Click "Add" to get started.
NoControl
- 241, 229
+ 317, 271
+
+
+ 4, 4, 4, 4
- 20, 20
+ 27, 25
5
@@ -1974,10 +2130,13 @@ Click "Add" to get started.
NoControl
- 373, 227
+ 493, 268
+
+
+ 4, 4, 4, 4
- 100, 23
+ 133, 28
50
@@ -2007,10 +2166,13 @@ Click "Add" to get started.
NoControl
- 267, 227
+ 352, 268
+
+
+ 4, 4, 4, 4
- 100, 23
+ 133, 28
52
@@ -2031,13 +2193,16 @@ Click "Add" to get started.
5
- 4, 25
+ 4, 28
+
+
+ 4, 4, 4, 4
- 3, 3, 3, 3
+ 4, 4, 4, 4
- 473, 256
+ 629, 311
1
@@ -2058,10 +2223,13 @@ Click "Add" to get started.
1
- 3, 3
+ 4, 4
+
+
+ 4, 4, 4, 4
- 478, 279
+ 640, 347
401
@@ -2085,10 +2253,13 @@ Click "Add" to get started.
NoControl
- 15, 291
+ 20, 362
+
+
+ 4, 4, 4, 4
- 109, 23
+ 145, 28
406
@@ -2118,10 +2289,13 @@ Click "Add" to get started.
NoControl
- 276, 291
+ 371, 362
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
407
@@ -2148,10 +2322,13 @@ Click "Add" to get started.
NoControl
- 377, 291
+ 506, 362
+
+
+ 4, 4, 4, 4
- 95, 23
+ 127, 28
408
@@ -2178,10 +2355,13 @@ Click "Add" to get started.
NoControl
- 0, 282
+ 0, 351
+
+
+ 4, 4, 4, 4
- 484, 40
+ 648, 49
StretchImage
@@ -2207,8 +2387,11 @@ Click "Add" to get started.
0, 0
+
+ 4, 4, 4, 4
+
- 484, 322
+ 648, 400
8
@@ -2226,10 +2409,13 @@ Click "Add" to get started.
0
- 4, 25
+ 4, 28
+
+
+ 4, 4, 4, 4
- 484, 322
+ 648, 400
4
@@ -2259,7 +2445,7 @@ Click "Add" to get started.
0, 0, 0, 0
- 492, 351
+ 656, 432
8
@@ -2283,10 +2469,13 @@ Click "Add" to get started.
Fill
- 0, 65
+ 0, 80
+
+
+ 4, 4, 4, 4
- 492, 351
+ 656, 432
9
@@ -2312,8 +2501,11 @@ Click "Add" to get started.
0, 0
+
+ 4, 4, 4, 4
+
- 492, 65
+ 656, 80
Zoom
@@ -2339,8 +2531,11 @@ Click "Add" to get started.
0, 0
+
+ 4, 4, 4, 4
+
- 492, 416
+ 656, 512
8
@@ -2370,22 +2565,22 @@ Click "Add" to get started.
418, 17
- 112, 22
+ 123, 24
&Open...
- 109, 6
+ 120, 6
- 112, 22
+ 123, 24
E&xit
- 113, 54
+ 124, 58
trayIconContextMenuStrip
@@ -4097,28 +4292,28 @@ Click "Add" to get started.
905, 17
- 168, 22
+ 193, 24
&Open Mappings...
- 168, 22
+ 193, 24
&Save Mappings...
- 165, 6
+ 190, 6
- 168, 22
+ 193, 24
S&ettings...
- 169, 76
+ 194, 82
mappingsContextMenuStrip
@@ -4148,10 +4343,10 @@ Click "Add" to get started.
True
- 6, 13
+ 8, 16
- 492, 416
+ 656, 512
@@ -5847,6 +6042,9 @@ Click "Add" to get started.
AADAPwAAwD8AAMA/AADAPwAA
+
+ 4, 4, 4, 4
+
MeshCentral Router
diff --git a/MapUserControl.cs b/MapUserControl.cs
index d382914..3a78f6b 100644
--- a/MapUserControl.cs
+++ b/MapUserControl.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/MappingHelpForm.cs b/MappingHelpForm.cs
index 5b71305..3709375 100644
--- a/MappingHelpForm.cs
+++ b/MappingHelpForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/MappingStats.cs b/MappingStats.cs
index 559738b..45a76d5 100644
--- a/MappingStats.cs
+++ b/MappingStats.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/MeshCentralServer.cs b/MeshCentralServer.cs
index f637cf7..51fd03d 100644
--- a/MeshCentralServer.cs
+++ b/MeshCentralServer.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -222,199 +222,354 @@ namespace MeshCentralRouter
}
if (jsonAction == null || jsonAction["action"].GetType() != typeof(string)) return;
- string action = jsonAction["action"].ToString();
- switch (action)
+ try
{
- case "pong":
- {
- // NOP
- break;
- }
- case "ping":
- {
- // Send pong back
- if (wc != null) { wc.SendString("{\"action\":\"pong\"}"); }
- break;
- }
- case "close":
- {
- disconnectCause = jsonAction["cause"].ToString();
- disconnectMsg = jsonAction["msg"].ToString();
- if (jsonAction.ContainsKey("email2fa")) { disconnectEmail2FA = (bool)jsonAction["email2fa"]; } else { disconnectEmail2FA = false; }
- if (jsonAction.ContainsKey("email2fasent")) { disconnectEmail2FASent = (bool)jsonAction["email2fasent"]; } else { disconnectEmail2FASent = false; }
- if (jsonAction.ContainsKey("sms2fa")) { disconnectSms2FA = (bool)jsonAction["sms2fa"]; } else { disconnectSms2FA = false; }
- if (jsonAction.ContainsKey("sms2fasent")) { disconnectSms2FASent = (bool)jsonAction["sms2fasent"]; } else { disconnectSms2FASent = false; }
- if (jsonAction.ContainsKey("twoFactorCookieDays") && (jsonAction["twoFactorCookieDays"].GetType() == typeof(int))) { twoFactorCookieDays = (int)jsonAction["twoFactorCookieDays"]; }
- break;
- }
- case "serverinfo":
- {
- // Get the bit flags of server features
- Dictionary serverinfo = (Dictionary)jsonAction["serverinfo"];
- if (serverinfo.ContainsKey("features") && (serverinfo["features"].GetType() == typeof(int))) { features = (int)serverinfo["features"]; }
- if (serverinfo.ContainsKey("features2") && (serverinfo["features2"].GetType() == typeof(int))) { features2 = (int)serverinfo["features2"]; }
-
- // Ask for a lot of things from the server
- wc.SendString("{\"action\":\"usergroups\"}");
- wc.SendString("{\"action\":\"meshes\"}");
- wc.SendString("{\"action\":\"nodes\"}");
- wc.SendString("{\"action\":\"authcookie\"}");
- wc.SendString("{\"action\":\"logincookie\"}");
- wc.SendString("{\"action\":\"meshToolInfo\",\"name\":\"MeshCentralRouter\"}");
- break;
- }
- case "authcookie":
- {
- authCookie = jsonAction["cookie"].ToString();
- rauthCookie = jsonAction["rcookie"].ToString();
- changeState(2);
-
- if (sender.RemoteCertificate != null)
+ string action = jsonAction["action"].ToString();
+ switch (action)
+ {
+ case "pong":
{
- certHash = webSocketClient.GetMeshCertHash(new X509Certificate2(sender.RemoteCertificate));
+ // NOP
+ break;
}
-
- break;
- }
- case "logincookie":
- {
- loginCookie = jsonAction["cookie"].ToString();
- if (onLoginTokenChanged != null) { onLoginTokenChanged(); }
- break;
- }
- case "userinfo":
- {
- Dictionary userinfo = (Dictionary)jsonAction["userinfo"];
- userid = (string)userinfo["_id"];
- if (userinfo.ContainsKey("name")) { username = (string)userinfo["name"]; }
- userRights = new Dictionary();
- if (userinfo.ContainsKey("links"))
+ case "ping":
{
- Dictionary userLinks = (Dictionary)userinfo["links"];
- foreach (string i in userLinks.Keys)
+ // Send pong back
+ if (wc != null) { wc.SendString("{\"action\":\"pong\"}"); }
+ break;
+ }
+ case "close":
+ {
+ disconnectCause = jsonAction["cause"].ToString();
+ disconnectMsg = jsonAction["msg"].ToString();
+ if (jsonAction.ContainsKey("email2fa")) { disconnectEmail2FA = (bool)jsonAction["email2fa"]; } else { disconnectEmail2FA = false; }
+ if (jsonAction.ContainsKey("email2fasent")) { disconnectEmail2FASent = (bool)jsonAction["email2fasent"]; } else { disconnectEmail2FASent = false; }
+ if (jsonAction.ContainsKey("sms2fa")) { disconnectSms2FA = (bool)jsonAction["sms2fa"]; } else { disconnectSms2FA = false; }
+ if (jsonAction.ContainsKey("sms2fasent")) { disconnectSms2FASent = (bool)jsonAction["sms2fasent"]; } else { disconnectSms2FASent = false; }
+ if (jsonAction.ContainsKey("twoFactorCookieDays") && (jsonAction["twoFactorCookieDays"].GetType() == typeof(int))) { twoFactorCookieDays = (int)jsonAction["twoFactorCookieDays"]; }
+ break;
+ }
+ case "serverinfo":
+ {
+ // Get the bit flags of server features
+ Dictionary serverinfo = (Dictionary)jsonAction["serverinfo"];
+ if (serverinfo.ContainsKey("features") && (serverinfo["features"].GetType() == typeof(int))) { features = (int)serverinfo["features"]; }
+ if (serverinfo.ContainsKey("features2") && (serverinfo["features2"].GetType() == typeof(int))) { features2 = (int)serverinfo["features2"]; }
+
+ // Ask for a lot of things from the server
+ wc.SendString("{\"action\":\"usergroups\"}");
+ wc.SendString("{\"action\":\"meshes\"}");
+ wc.SendString("{\"action\":\"nodes\"}");
+ wc.SendString("{\"action\":\"authcookie\"}");
+ wc.SendString("{\"action\":\"logincookie\"}");
+ wc.SendString("{\"action\":\"meshToolInfo\",\"name\":\"MeshCentralRouter\"}");
+ break;
+ }
+ case "authcookie":
+ {
+ authCookie = jsonAction["cookie"].ToString();
+ rauthCookie = jsonAction["rcookie"].ToString();
+ changeState(2);
+
+ if (sender.RemoteCertificate != null)
{
- Dictionary userLinksEx = (Dictionary)userLinks[i];
- if (userLinksEx.ContainsKey("rights"))
+ certHash = webSocketClient.GetMeshCertHash(new X509Certificate2(sender.RemoteCertificate));
+ }
+
+ break;
+ }
+ case "logincookie":
+ {
+ loginCookie = jsonAction["cookie"].ToString();
+ if (onLoginTokenChanged != null) { onLoginTokenChanged(); }
+ break;
+ }
+ case "userinfo":
+ {
+ Dictionary userinfo = (Dictionary)jsonAction["userinfo"];
+ userid = (string)userinfo["_id"];
+ if (userinfo.ContainsKey("name")) { username = (string)userinfo["name"]; }
+ userRights = new Dictionary();
+ if (userinfo.ContainsKey("links"))
+ {
+ Dictionary userLinks = (Dictionary)userinfo["links"];
+ foreach (string i in userLinks.Keys)
{
- userRights[i] = ulong.Parse(userLinksEx["rights"].ToString());
+ Dictionary userLinksEx = (Dictionary)userLinks[i];
+ if (userLinksEx.ContainsKey("rights"))
+ {
+ userRights[i] = ulong.Parse(userLinksEx["rights"].ToString());
+ }
}
}
+ break;
}
- break;
- }
- case "usergroups":
- {
- userGroups = new Dictionary();
- if (jsonAction.ContainsKey("ugroups"))
+ case "usergroups":
{
- Dictionary usergroups = (Dictionary)jsonAction["ugroups"];
- if (usergroups != null)
+ userGroups = new Dictionary();
+ if (jsonAction.ContainsKey("ugroups"))
{
- foreach (string i in usergroups.Keys)
+ Dictionary usergroups = (Dictionary)jsonAction["ugroups"];
+ if (usergroups != null)
{
- Dictionary usergroupsEx = (Dictionary)usergroups[i];
- if (usergroupsEx.ContainsKey("name"))
+ foreach (string i in usergroups.Keys)
{
- userGroups.Add(i, usergroupsEx["name"].ToString());
- }
- }
- if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(false);
- }
- }
- break;
- }
- case "event":
- {
- Dictionary ev = (Dictionary)jsonAction["event"];
- string action2 = ev["action"].ToString();
- switch (action2)
- {
- case "meshchange":
- {
- // Get the new values
- string meshid = ev["meshid"].ToString();
- string meshname = (string)ev["name"];
- string meshdesc = (string)ev["desc"];
- int meshtype = (int)ev["mtype"];
- ulong meshrights = 0;
- Dictionary links = ((Dictionary)ev["links"]);
- if (links.ContainsKey(userid))
- {
- Dictionary urights = ((Dictionary)links[userid]);
- if (urights != null)
+ Dictionary usergroupsEx = (Dictionary)usergroups[i];
+ if (usergroupsEx.ContainsKey("name"))
{
- if (urights["rights"].GetType() == typeof(int)) { meshrights = (ulong)((int)urights["rights"]); }
- if (urights["rights"].GetType() == typeof(Int64)) { meshrights = (ulong)((Int64)urights["rights"]); }
+ userGroups.Add(i, usergroupsEx["name"].ToString());
}
}
-
- Dictionary newlinks = new Dictionary();
- foreach (string j in links.Keys)
- {
- Dictionary urights = ((Dictionary)links[j]);
- if (urights != null)
- {
- if (urights["rights"].GetType() == typeof(int)) { newlinks[j] = (ulong)((int)urights["rights"]); }
- if (urights["rights"].GetType() == typeof(Int64)) { newlinks[j] = (ulong)((Int64)urights["rights"]); }
- }
- }
-
- // Update the mesh
- if (meshes.ContainsKey(meshid))
- {
- MeshClass mesh = (MeshClass)meshes[meshid];
- mesh.name = meshname;
- mesh.desc = meshdesc;
- mesh.rights = meshrights;
- mesh.links = newlinks;
- }
- else
- {
- MeshClass mesh = new MeshClass();
- mesh.name = meshname;
- mesh.desc = meshdesc;
- mesh.rights = meshrights;
- mesh.type = meshtype;
- mesh.links = newlinks;
- meshes[meshid] = mesh;
- }
- wc.SendString("{\"action\":\"nodes\"}");
if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(false);
- break;
}
- case "changenode":
- {
- if (nodes == null) return;
- Dictionary node = (Dictionary)ev["node"];
- string nodeid = (string)node["_id"];
- if (nodes.ContainsKey(nodeid))
+ }
+ break;
+ }
+ case "event":
+ {
+ Dictionary ev = (Dictionary)jsonAction["event"];
+ string action2 = ev["action"].ToString();
+ switch (action2)
+ {
+ case "meshchange":
{
- // Change existing node
- lock (nodes)
+ // Get the new values
+ string meshid = ev["meshid"].ToString();
+ string meshname = (string)ev["name"];
+ string meshdesc = (string)ev["desc"];
+ int meshtype = (int)ev["mtype"];
+ ulong meshrights = 0;
+ Dictionary links = ((Dictionary)ev["links"]);
+ if (links.ContainsKey(userid))
+ {
+ Dictionary urights = ((Dictionary)links[userid]);
+ if (urights != null)
+ {
+ if (urights["rights"].GetType() == typeof(int)) { meshrights = (ulong)((int)urights["rights"]); }
+ if (urights["rights"].GetType() == typeof(Int64)) { meshrights = (ulong)((Int64)urights["rights"]); }
+ }
+ }
+
+ Dictionary newlinks = new Dictionary();
+ foreach (string j in links.Keys)
+ {
+ Dictionary urights = ((Dictionary)links[j]);
+ if (urights != null)
+ {
+ if (urights["rights"].GetType() == typeof(int)) { newlinks[j] = (ulong)((int)urights["rights"]); }
+ if (urights["rights"].GetType() == typeof(Int64)) { newlinks[j] = (ulong)((Int64)urights["rights"]); }
+ }
+ }
+
+ // Update the mesh
+ if (meshes.ContainsKey(meshid))
+ {
+ MeshClass mesh = (MeshClass)meshes[meshid];
+ mesh.name = meshname;
+ mesh.desc = meshdesc;
+ mesh.rights = meshrights;
+ mesh.links = newlinks;
+ }
+ else
+ {
+ MeshClass mesh = new MeshClass();
+ mesh.name = meshname;
+ mesh.desc = meshdesc;
+ mesh.rights = meshrights;
+ mesh.type = meshtype;
+ mesh.links = newlinks;
+ meshes[meshid] = mesh;
+ }
+ wc.SendString("{\"action\":\"nodes\"}");
+ if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(false);
+ break;
+ }
+ case "changenode":
+ {
+ if (nodes == null) return;
+ Dictionary node = (Dictionary)ev["node"];
+ string nodeid = (string)node["_id"];
+ if (nodes.ContainsKey(nodeid))
+ {
+ // Change existing node
+ lock (nodes)
+ {
+ NodeClass n = (NodeClass)nodes[nodeid];
+ n.name = (string)node["name"];
+ if (node.ContainsKey("agent"))
+ {
+ n.agentid = (int)((Dictionary)node["agent"])["id"];
+ n.agentcaps = (int)((Dictionary)node["agent"])["caps"];
+ }
+ if (node.ContainsKey("conn")) { n.conn = (int)node["conn"]; }
+ n.icon = 1;
+ if (node.ContainsKey("icon")) { n.icon = (int)node["icon"]; }
+ if (node.ContainsKey("users")) { n.users = (string[])((ArrayList)node["users"]).ToArray(typeof(string)); } else { n.users = null; }
+ if (node.ContainsKey("rdpport")) { n.rdpport = (int)node["rdpport"]; }
+ ulong nodeRights = 0;
+ if (node.ContainsKey("links"))
+ {
+ Dictionary links = ((Dictionary)node["links"]);
+ if (links.ContainsKey(userid))
+ {
+ Dictionary linksEx = ((Dictionary)links[userid]);
+ if (linksEx.ContainsKey("rights")) { nodeRights = (ulong)(int)linksEx["rights"]; }
+ }
+
+ n.links = new Dictionary();
+ foreach (string j in links.Keys)
+ {
+ Dictionary linksEx = ((Dictionary)links[j]);
+ if (linksEx.ContainsKey("rights"))
+ {
+ n.links.Add(j, ulong.Parse(linksEx["rights"].ToString()));
+ }
+ }
+ }
+ n.rights = nodeRights;
+
+ // Compute rights on this device
+ ulong rights = n.rights; // Direct device rights
+ if (meshes.ContainsKey(n.meshid)) { rights |= meshes[n.meshid].rights; } // Device group rights
+ foreach (string i in n.links.Keys) { if (userGroups.ContainsKey(i)) { rights |= n.links[i]; } } // Take a look at group rights
+
+ if (rights == 0)
+ {
+ // We have no rights to this device, remove it
+ nodes.Remove(n.nodeid);
+ }
+ else
+ {
+ // Update the node
+ nodes[n.nodeid] = n;
+ }
+ }
+ if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(false);
+ }
+ else
+ {
+ wc.SendString("{\"action\":\"nodes\"}");
+ }
+ break;
+ }
+ case "nodeconnect":
+ {
+ if (nodes == null) return;
+ string nodeid = (string)ev["nodeid"];
+ if (nodes.ContainsKey(nodeid))
+ {
+ lock (nodes)
+ {
+ NodeClass n = (NodeClass)nodes[nodeid];
+ if (ev.ContainsKey("conn")) { n.conn = (int)ev["conn"]; }
+ nodes[n.nodeid] = n;
+ }
+ if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(false);
+ }
+ break;
+ }
+ case "usergroupchange":
+ {
+ wc.SendString("{\"action\":\"usergroups\"}");
+ wc.SendString("{\"action\":\"nodes\"}");
+ break;
+ }
+ }
+ break;
+ }
+ case "meshes":
+ {
+ meshes = new Dictionary();
+
+ ArrayList meshList = (ArrayList)jsonAction["meshes"];
+ for (int i = 0; i < meshList.Count; i++)
+ {
+ Dictionary mesh = (Dictionary)meshList[i];
+ MeshClass m = new MeshClass();
+ m.meshid = (string)mesh["_id"];
+ m.name = (string)mesh["name"];
+ if (mesh.ContainsKey("desc")) { m.desc = (string)mesh["desc"]; }
+ m.rights = 0;
+ m.links = new Dictionary();
+
+ Dictionary links = ((Dictionary)mesh["links"]);
+ if (links.ContainsKey(userid))
+ {
+ Dictionary urights = ((Dictionary)links[userid]);
+ if (urights != null)
+ {
+ if (urights["rights"].GetType() == typeof(int)) { m.rights = (ulong)((int)urights["rights"]); }
+ if (urights["rights"].GetType() == typeof(Int64)) { m.rights = (ulong)((Int64)urights["rights"]); }
+ }
+ }
+
+ foreach (string j in links.Keys)
+ {
+ Dictionary urights = ((Dictionary)links[j]);
+ if (urights != null)
+ {
+ if (urights["rights"].GetType() == typeof(int)) { m.links[j] = (ulong)((int)urights["rights"]); }
+ if (urights["rights"].GetType() == typeof(Int64)) { m.links[j] = (ulong)((Int64)urights["rights"]); }
+ }
+ }
+
+ if (mesh["mtype"].GetType() == typeof(string)) { m.type = int.Parse((string)mesh["mtype"]); }
+ if (mesh["mtype"].GetType() == typeof(int)) { m.type = (int)mesh["mtype"]; }
+ meshes[m.meshid] = m;
+ }
+
+ break;
+ }
+ case "nodes":
+ {
+ if (nodes == null) { nodes = new Dictionary(); }
+ Dictionary nodes2 = new Dictionary();
+ lock (nodes)
+ {
+ Dictionary groups = (Dictionary)jsonAction["nodes"];
+ foreach (string meshid in groups.Keys)
+ {
+ ArrayList nodesinMesh = (ArrayList)groups[meshid];
+ for (int i = 0; i < nodesinMesh.Count; i++)
+ {
+ Dictionary node = (Dictionary)nodesinMesh[i];
+ string nodeid = (string)node["_id"];
+ if (nodes.ContainsKey(nodeid))
{
NodeClass n = (NodeClass)nodes[nodeid];
- n.name = (string)node["name"];
+ n.nodeid = nodeid;
if (node.ContainsKey("agent"))
{
n.agentid = (int)((Dictionary)node["agent"])["id"];
n.agentcaps = (int)((Dictionary)node["agent"])["caps"];
}
- if (node.ContainsKey("conn")) { n.conn = (int)node["conn"]; }
- n.icon = 1;
- if (node.ContainsKey("icon")) { n.icon = (int)node["icon"]; }
+ else
+ {
+ n.agentid = -1;
+ n.agentcaps = 0;
+ }
+ n.name = (string)node["name"];
+ n.meshid = meshid;
+ if (node.ContainsKey("mtype"))
+ {
+ if (node["mtype"].GetType() == typeof(string)) { n.mtype = int.Parse((string)node["mtype"]); }
+ if (node["mtype"].GetType() == typeof(int)) { n.mtype = (int)node["mtype"]; }
+ }
if (node.ContainsKey("users")) { n.users = (string[])((ArrayList)node["users"]).ToArray(typeof(string)); } else { n.users = null; }
- if (node.ContainsKey("rdpport")) { n.rdpport = (int)node["rdpport"]; }
- ulong nodeRights = 0;
+ if (node.ContainsKey("rdpport")) { n.rdpport = (int)node["rdpport"]; } else { n.rdpport = 3389; }
+ if (node.ContainsKey("conn")) { n.conn = (int)node["conn"]; } else { n.conn = 0; }
+ if (node.ContainsKey("icon")) { n.icon = (int)node["icon"]; }
+ if (n.icon == 0) { n.icon = 1; }
+ n.rights = 0;
+ n.links = new Dictionary();
if (node.ContainsKey("links"))
{
Dictionary links = ((Dictionary)node["links"]);
if (links.ContainsKey(userid))
{
Dictionary linksEx = ((Dictionary)links[userid]);
- if (linksEx.ContainsKey("rights")) { nodeRights = (ulong)(int)linksEx["rights"]; }
+ if (linksEx.ContainsKey("rights")) { n.rights = (ulong)(int)linksEx["rights"]; }
}
-
- n.links = new Dictionary();
foreach (string j in links.Keys)
{
Dictionary linksEx = ((Dictionary)links[j]);
@@ -424,276 +579,144 @@ namespace MeshCentralRouter
}
}
}
- n.rights = nodeRights;
-
- // Compute rights on this device
- ulong rights = n.rights; // Direct device rights
- if (meshes.ContainsKey(n.meshid)) { rights |= meshes[n.meshid].rights; } // Device group rights
- foreach (string i in n.links.Keys) { if (userGroups.ContainsKey(i)) { rights |= n.links[i]; } } // Take a look at group rights
-
- if (rights == 0) {
- // We have no rights to this device, remove it
- nodes.Remove(n.nodeid);
- } else {
- // Update the node
- nodes[n.nodeid] = n;
- }
+ nodes2[n.nodeid] = n;
}
- if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(false);
- }
- else
- {
- wc.SendString("{\"action\":\"nodes\"}");
- }
- break;
- }
- case "nodeconnect":
- {
- if (nodes == null) return;
- string nodeid = (string)ev["nodeid"];
- if (nodes.ContainsKey(nodeid))
- {
- lock (nodes)
+ else
{
- NodeClass n = (NodeClass)nodes[nodeid];
- if (ev.ContainsKey("conn")) { n.conn = (int)ev["conn"]; }
- nodes[n.nodeid] = n;
- }
- if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(false);
- }
- break;
- }
- case "usergroupchange":
- {
- wc.SendString("{\"action\":\"usergroups\"}");
- wc.SendString("{\"action\":\"nodes\"}");
- break;
- }
- }
- break;
- }
- case "meshes":
- {
- meshes = new Dictionary();
-
- ArrayList meshList = (ArrayList)jsonAction["meshes"];
- for (int i = 0; i < meshList.Count; i++)
- {
- Dictionary mesh = (Dictionary)meshList[i];
- MeshClass m = new MeshClass();
- m.meshid = (string)mesh["_id"];
- m.name = (string)mesh["name"];
- if (mesh.ContainsKey("desc")) { m.desc = (string)mesh["desc"]; }
- m.rights = 0;
- m.links = new Dictionary();
-
- Dictionary links = ((Dictionary)mesh["links"]);
- if (links.ContainsKey(userid))
- {
- Dictionary urights = ((Dictionary)links[userid]);
- if (urights != null)
- {
- if (urights["rights"].GetType() == typeof(int)) { m.rights = (ulong)((int)urights["rights"]); }
- if (urights["rights"].GetType() == typeof(Int64)) { m.rights = (ulong)((Int64)urights["rights"]); }
- }
- }
-
- foreach (string j in links.Keys)
- {
- Dictionary urights = ((Dictionary)links[j]);
- if (urights != null)
- {
- if (urights["rights"].GetType() == typeof(int)) { m.links[j] = (ulong)((int)urights["rights"]); }
- if (urights["rights"].GetType() == typeof(Int64)) { m.links[j] = (ulong)((Int64)urights["rights"]); }
- }
- }
-
- if (mesh["mtype"].GetType() == typeof(string)) { m.type = int.Parse((string)mesh["mtype"]); }
- if (mesh["mtype"].GetType() == typeof(int)) { m.type = (int)mesh["mtype"]; }
- meshes[m.meshid] = m;
- }
-
- break;
- }
- case "nodes":
- {
- if (nodes == null) { nodes = new Dictionary(); }
- Dictionary nodes2 = new Dictionary();
- lock (nodes)
- {
- Dictionary groups = (Dictionary)jsonAction["nodes"];
- foreach (string meshid in groups.Keys)
- {
- ArrayList nodesinMesh = (ArrayList)groups[meshid];
- for (int i = 0; i < nodesinMesh.Count; i++)
- {
- Dictionary node = (Dictionary)nodesinMesh[i];
- string nodeid = (string)node["_id"];
- if (nodes.ContainsKey(nodeid))
- {
- NodeClass n = (NodeClass)nodes[nodeid];
- n.nodeid = nodeid;
- if (node.ContainsKey("agent")) {
- n.agentid = (int)((Dictionary)node["agent"])["id"];
- n.agentcaps = (int)((Dictionary)node["agent"])["caps"];
- } else {
- n.agentid = -1;
- n.agentcaps = 0;
- }
- n.name = (string)node["name"];
- n.meshid = meshid;
- if (node.ContainsKey("mtype"))
- {
- if (node["mtype"].GetType() == typeof(string)) { n.mtype = int.Parse((string)node["mtype"]); }
- if (node["mtype"].GetType() == typeof(int)) { n.mtype = (int)node["mtype"]; }
- }
- if (node.ContainsKey("users")) { n.users = (string[])((ArrayList)node["users"]).ToArray(typeof(string)); } else { n.users = null; }
- if (node.ContainsKey("rdpport")) { n.rdpport = (int)node["rdpport"]; } else { n.rdpport = 3389; }
- if (node.ContainsKey("conn")) { n.conn = (int)node["conn"]; } else { n.conn = 0; }
- if (node.ContainsKey("icon")) { n.icon = (int)node["icon"]; }
- if (n.icon == 0) { n.icon = 1; }
- n.rights = 0;
- n.links = new Dictionary();
- if (node.ContainsKey("links"))
- {
- Dictionary links = ((Dictionary)node["links"]);
- if (links.ContainsKey(userid))
+ NodeClass n = new NodeClass();
+ n.nodeid = nodeid;
+ if (node.ContainsKey("agent"))
{
- Dictionary linksEx = ((Dictionary)links[userid]);
- if (linksEx.ContainsKey("rights")) { n.rights = (ulong)(int)linksEx["rights"]; }
+ n.agentid = (int)((Dictionary)node["agent"])["id"];
+ n.agentcaps = (int)((Dictionary)node["agent"])["caps"];
}
- foreach (string j in links.Keys)
+ else
{
- Dictionary linksEx = ((Dictionary)links[j]);
- if (linksEx.ContainsKey("rights"))
+ n.agentid = -1;
+ n.agentcaps = 0;
+ }
+ n.name = (string)node["name"];
+ n.meshid = meshid;
+
+ if (node.ContainsKey("mtype"))
+ {
+ if (node["mtype"].GetType() == typeof(string)) { n.mtype = int.Parse((string)node["mtype"]); }
+ if (node["mtype"].GetType() == typeof(int)) { n.mtype = (int)node["mtype"]; }
+ }
+ if (node.ContainsKey("users"))
+ {
+ if (node["users"].GetType() == typeof(ArrayList))
{
- n.links.Add(j, ulong.Parse(linksEx["rights"].ToString()));
+ n.users = (string[])((ArrayList)node["users"]).ToArray(typeof(string));
+ }
+ else if (node["users"].GetType() == typeof(Dictionary))
+ {
+ Dictionary users = (Dictionary)node["users"];
+ ArrayList users2 = new ArrayList();
+ foreach (string u in users.Keys) { if (users[u].GetType() == typeof(string)) { users2.Add((string)users[u]); } }
+ n.users = (string[])users2.ToArray(typeof(string));
+ }
+ else
+ {
+ n.users = null;
}
}
- }
- nodes2[n.nodeid] = n;
- }
- else
- {
- NodeClass n = new NodeClass();
- n.nodeid = nodeid;
- if (node.ContainsKey("agent")) {
- n.agentid = (int)((Dictionary)node["agent"])["id"];
- n.agentcaps = (int)((Dictionary)node["agent"])["caps"];
- } else {
- n.agentid = -1;
- n.agentcaps = 0;
- }
- n.name = (string)node["name"];
- n.meshid = meshid;
-
- if (node.ContainsKey("mtype"))
- {
- if (node["mtype"].GetType() == typeof(string)) { n.mtype = int.Parse((string)node["mtype"]); }
- if (node["mtype"].GetType() == typeof(int)) { n.mtype = (int)node["mtype"]; }
- }
- if (node.ContainsKey("users")) {
- if (node["users"].GetType() == typeof(ArrayList)) {
- n.users = (string[])((ArrayList)node["users"]).ToArray(typeof(string));
- } else if (node["users"].GetType() == typeof(Dictionary)) {
- Dictionary users = (Dictionary)node["users"];
- ArrayList users2 = new ArrayList();
- foreach (string u in users.Keys) { if (users[u].GetType() == typeof(string)) { users2.Add((string)users[u]); } }
- n.users = (string[])users2.ToArray(typeof(string));
- } else {
+ else
+ {
n.users = null;
}
- } else {
- n.users = null;
- }
- if (node.ContainsKey("rdpport")) { n.rdpport = (int)node["rdpport"]; } else { n.rdpport = 3389; }
- if (node.ContainsKey("conn")) { n.conn = (int)node["conn"]; } else { n.conn = 0; }
- if (node.ContainsKey("icon")) { n.icon = (int)node["icon"]; }
- if (n.icon == 0) { n.icon = 1; }
- n.rights = 0;
- n.links = new Dictionary();
- if (node.ContainsKey("links"))
- {
- Dictionary links = ((Dictionary)node["links"]);
- if (links.ContainsKey(userid))
+ if (node.ContainsKey("rdpport")) { n.rdpport = (int)node["rdpport"]; } else { n.rdpport = 3389; }
+ if (node.ContainsKey("conn")) { n.conn = (int)node["conn"]; } else { n.conn = 0; }
+ if (node.ContainsKey("icon")) { n.icon = (int)node["icon"]; }
+ if (n.icon == 0) { n.icon = 1; }
+ n.rights = 0;
+ n.links = new Dictionary();
+ if (node.ContainsKey("links"))
{
- Dictionary linksEx = ((Dictionary)links[userid]);
- if (linksEx.ContainsKey("rights")) { n.rights = (ulong)(int)linksEx["rights"]; }
- }
- foreach (string j in links.Keys)
- {
- Dictionary linksEx = ((Dictionary)links[j]);
- if (linksEx.ContainsKey("rights"))
+ Dictionary links = ((Dictionary)node["links"]);
+ if (links.ContainsKey(userid))
{
- n.links.Add(j, ulong.Parse(linksEx["rights"].ToString()));
+ Dictionary linksEx = ((Dictionary)links[userid]);
+ if (linksEx.ContainsKey("rights")) { n.rights = (ulong)(int)linksEx["rights"]; }
+ }
+ foreach (string j in links.Keys)
+ {
+ Dictionary linksEx = ((Dictionary)links[j]);
+ if (linksEx.ContainsKey("rights"))
+ {
+ n.links.Add(j, ulong.Parse(linksEx["rights"].ToString()));
+ }
}
}
+ nodes2[n.nodeid] = n;
}
- nodes2[n.nodeid] = n;
}
}
}
+ nodes = nodes2;
+ if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(true);
+ break;
}
- nodes = nodes2;
- if ((onNodesChanged != null) && (nodes != null)) onNodesChanged(true);
- break;
- }
- case "msg":
- {
- if (jsonAction.ContainsKey("type"))
+ case "msg":
{
- string type = (string)jsonAction["type"];
- if ((type == "getclip") && (jsonAction.ContainsKey("data")) && (jsonAction.ContainsKey("nodeid")))
+ if (jsonAction.ContainsKey("type"))
{
- // We requested the remote clipboard
- string nodeid = (string)jsonAction["nodeid"];
- string clipData = (string)jsonAction["data"];
- if (onClipboardData != null) { onClipboardData(nodeid, clipData); }
+ string type = (string)jsonAction["type"];
+ if ((type == "getclip") && (jsonAction.ContainsKey("data")) && (jsonAction.ContainsKey("nodeid")))
+ {
+ // We requested the remote clipboard
+ string nodeid = (string)jsonAction["nodeid"];
+ string clipData = (string)jsonAction["data"];
+ if (onClipboardData != null) { onClipboardData(nodeid, clipData); }
+ }
}
+ break;
}
- break;
- }
- case "twoFactorCookie":
- {
- if (jsonAction.ContainsKey("cookie"))
+ case "twoFactorCookie":
{
- string cookie = (string)jsonAction["cookie"];
- if (onTwoFactorCookie != null) { onTwoFactorCookie(cookie); }
+ if (jsonAction.ContainsKey("cookie"))
+ {
+ string cookie = (string)jsonAction["cookie"];
+ if (onTwoFactorCookie != null) { onTwoFactorCookie(cookie); }
+ }
+ break;
}
- break;
- }
- case "meshToolInfo":
- {
- if (onToolUpdate == null) return;
- if (jsonAction.ContainsKey("hash") && jsonAction.ContainsKey("url"))
+ case "meshToolInfo":
{
- // MeshCentral Router hash on the server
- string hash = (string)jsonAction["hash"];
+ if (onToolUpdate == null) return;
+ if (jsonAction.ContainsKey("hash") && jsonAction.ContainsKey("url"))
+ {
+ // MeshCentral Router hash on the server
+ string hash = (string)jsonAction["hash"];
- // Hash our own executable
- byte[] selfHash;
- using (var sha384 = SHA384Managed.Create()) { using (var stream = File.OpenRead(System.Reflection.Assembly.GetEntryAssembly().Location)) { selfHash = sha384.ComputeHash(stream); } }
- string selfExecutableHashHex = BitConverter.ToString(selfHash).Replace("-", string.Empty).ToLower();
+ // Hash our own executable
+ byte[] selfHash;
+ using (var sha384 = SHA384Managed.Create()) { using (var stream = File.OpenRead(System.Reflection.Assembly.GetEntryAssembly().Location)) { selfHash = sha384.ComputeHash(stream); } }
+ string selfExecutableHashHex = BitConverter.ToString(selfHash).Replace("-", string.Empty).ToLower();
- // Get login key
- string url = jsonAction["url"] + "&auth=" + authCookie;
- if (url.StartsWith("*/")) { url = "https://" + wsurl.Authority + url.Substring(1); }
- string loginkey = getValueFromQueryString(wsurl.Query, "key");
- if (loginkey != null) { url += ("&key=" + loginkey); }
+ // Get login key
+ string url = jsonAction["url"] + "&auth=" + authCookie;
+ if (url.StartsWith("*/")) { url = "https://" + wsurl.Authority + url.Substring(1); }
+ string loginkey = getValueFromQueryString(wsurl.Query, "key");
+ if (loginkey != null) { url += ("&key=" + loginkey); }
- // Server TLS certificate hash
- string serverhash = null;
- if (jsonAction.ContainsKey("serverhash")) { serverhash = jsonAction["serverhash"].ToString(); }
+ // Server TLS certificate hash
+ string serverhash = null;
+ if (jsonAction.ContainsKey("serverhash")) { serverhash = jsonAction["serverhash"].ToString(); }
- // If the hashes don't match, event the tool update with URL
- if (selfExecutableHashHex != hash) { onToolUpdate((string)url, (string)jsonAction["hash"], (int)jsonAction["size"], serverhash); }
+ // If the hashes don't match, event the tool update with URL
+ if (selfExecutableHashHex != hash) { onToolUpdate((string)url, (string)jsonAction["hash"], (int)jsonAction["size"], serverhash); }
+ }
+ break;
}
- break;
- }
- default:
- {
- break;
- }
+ default:
+ {
+ break;
+ }
+ }
+ } catch (Exception ex)
+ {
+ if (debug) { try { File.AppendAllText("debug.log", ex.ToString() + "\r\n"); } catch (Exception) { } }
}
}
diff --git a/MeshDiscovery.cs b/MeshDiscovery.cs
index 08077a0..1389a49 100644
--- a/MeshDiscovery.cs
+++ b/MeshDiscovery.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/MeshMapper.cs b/MeshMapper.cs
index 398cf9f..25f7640 100644
--- a/MeshMapper.cs
+++ b/MeshMapper.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/NodeClass.cs b/NodeClass.cs
index 3d25663..98579ed 100644
--- a/NodeClass.cs
+++ b/NodeClass.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Program.cs b/Program.cs
index 7c961d1..4f59844 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/ServerUserControl.cs b/ServerUserControl.cs
index e1b42bb..fe9c918 100644
--- a/ServerUserControl.cs
+++ b/ServerUserControl.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Settings.cs b/Settings.cs
index 7b4e9f0..fae005a 100644
--- a/Settings.cs
+++ b/Settings.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/SettingsForm.cs b/SettingsForm.cs
index 49e6143..f010b53 100644
--- a/SettingsForm.cs
+++ b/SettingsForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/SshUsernameForm.cs b/SshUsernameForm.cs
index 8c3ab42..f505270 100644
--- a/SshUsernameForm.cs
+++ b/SshUsernameForm.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Translate.cs b/Translate.cs
index b95c37b..3a20c82 100644
--- a/Translate.cs
+++ b/Translate.cs
@@ -1,5 +1,5 @@
/*
-Copyright 2009-2021 Intel Corporation
+Copyright 2009-2022 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -22,126 +22,1332 @@ namespace MeshCentralRouter
{
public class Translate
{
+ // Do not edit the translations below, instead change the master "translate.json" file of MeshCentral.
+ // This file is auto-generated from the "translate.json" file.
+
// *** TRANSLATION TABLE START ***
static private Dictionary> translationTable = new Dictionary>() {
{
- "Failed to start remote terminal session",
+ "Site",
new Dictionary() {
- {"nl","Kan externe terminalsessie niet starten"},
- {"ko","원격 터미널 세션을 시작하지 못했습니다."},
- {"fr","Échec du démarrage de la session de terminal distant"},
- {"it","Impossibile avviare la sessione del terminale remoto"},
- {"zh-chs","无法启动远程终端会话"},
- {"pt-br","Falha ao iniciar sessão de terminal remoto"},
- {"sv","Det gick inte att starta fjärrterminsessionen"},
- {"es","No se pudo iniciar la sesión de terminal remota"},
- {"hi","दूरस्थ टर्मिनल सत्र प्रारंभ करने में विफल"},
- {"de","Fehler beim Starten der Remote-Terminal-Sitzung"}
+ {"de","Seite? ˅"},
+ {"hi","साइट"},
+ {"fr","Placer"},
+ {"zh-chs","地点"},
+ {"fi","Sivusto"},
+ {"tr","Alan"},
+ {"cs","Stránky"},
+ {"ja","サイト"},
+ {"es","Sitio"},
+ {"pl","Strona"},
+ {"pt","Local"},
+ {"nl","Lokatie"},
+ {"pt-br","Local"},
+ {"sv","Webbplats"},
+ {"da","Websted"},
+ {"ko","대지"},
+ {"it","Sito"},
+ {"ru","Сайт"}
}
},
{
- "{0} Byte",
+ ", Recorded Session",
new Dictionary() {
- {"ko","{0} 바이트"},
- {"fr","{0} octet"},
- {"zh-chs","{0} 字节"},
- {"hi","{0} बाइट"}
+ {"de",", Aufgezeichnete Sitzung"},
+ {"hi",", रिकॉर्ड किया गया सत्र"},
+ {"fr",", Séance enregistrée"},
+ {"zh-chs",", 录制会话"},
+ {"fi",", Tallennettu istunto"},
+ {"tr",", Kaydedilmiş Oturum"},
+ {"cs",", Nahraná relace"},
+ {"ja","、記録されたセッション"},
+ {"es",", Sesión grabada"},
+ {"pl",", Nagrana Sesja"},
+ {"pt",", Sessão Gravada"},
+ {"nl",", opgenomen sessie"},
+ {"pt-br",", Sessão Gravada"},
+ {"sv",", Inspelad session"},
+ {"da",", Optaget session"},
+ {"ko",", 녹화 된 세션"},
+ {"it",", Sessione registrata"},
+ {"ru",", Записанный сеанс"}
}
},
{
- "Certificate",
+ "All Displays",
new Dictionary() {
- {"nl","Certificaat"},
- {"ko","증명서"},
- {"fr","Certificat"},
- {"it","Certificato"},
- {"zh-chs","证书"},
- {"pt-br","Certificado"},
- {"sv","Certifikat"},
- {"es","Certificado"},
- {"hi","प्रमाणपत्र"},
- {"de","Zertifikat"}
+ {"de","Alle Bildschirme"},
+ {"hi","सभी प्रदर्शित करता है"},
+ {"fr","Tous affichages"},
+ {"zh-cht","所有顯示"},
+ {"zh-chs","所有显示"},
+ {"fi","Kaikki näytöt"},
+ {"tr","Tüm Ekranlar"},
+ {"cs","Všechny displeje"},
+ {"ja","すべてのディスプレイ"},
+ {"es","Todas las Pantallas"},
+ {"pl","Wszystkie Ekrany"},
+ {"pt","Todas as telas"},
+ {"nl","Alle schermen"},
+ {"pt-br","Todos os monitores"},
+ {"sv","Alla skärmar"},
+ {"da","Alle skærme"},
+ {"ko","모든 디스플레이"},
+ {"it","Tutti i display"},
+ {"ru","Все экраны"}
}
},
{
- "Stats...",
+ "MeshCentral",
new Dictionary() {
- {"nl","Statistieken..."},
- {"ko","통계 ..."},
- {"fr","Statistiques..."},
- {"it","Statistiche..."},
- {"zh-chs","统计..."},
- {"pt-br","Estatísticas..."},
- {"sv","Statistik ..."},
- {"es","Estadísticas ..."},
- {"hi","आँकड़े..."},
- {"de","Statistiken..."}
+ {"hi","मेशसेंट्रल"},
+ {"zh-chs","网格中心"}
}
},
{
- "R&efresh",
+ "Incoming Bytes",
new Dictionary() {
- {"nl","Vernieuwen"},
- {"ko","새롭게 하다"},
- {"fr","Rafraîchir"},
- {"zh-chs","刷新"},
- {"pt-br","R & efresh"},
- {"sv","R & efresh"},
- {"es","Actualizar"},
- {"hi","ताज़ा करें"},
- {"de","Aktualisierung"}
+ {"de","Eingehende Bytes"},
+ {"hi","आने वाली बाइट्स"},
+ {"fr","Octets entrants"},
+ {"zh-chs","传入字节"},
+ {"fi","Saapuvat tavut"},
+ {"tr","Gelen Bayt"},
+ {"cs","Příchozí bajty"},
+ {"ja","着信バイト"},
+ {"es","Bytes entrantes"},
+ {"pl","Bajty Przychodzące"},
+ {"pt","Bytes de entrada"},
+ {"nl","Inkomende Bytes"},
+ {"pt-br","Bytes de entrada"},
+ {"sv","Inkommande byte"},
+ {"da","Indkommende byte"},
+ {"ko","들어오는 바이트"},
+ {"it","Byte in entrata"},
+ {"ru","Входящие байты"}
+ }
+ },
+ {
+ "Invalid download.",
+ new Dictionary() {
+ {"de","Ungültiger Download."},
+ {"hi","अमान्य डाउनलोड।"},
+ {"fr","Téléchargement non valide."},
+ {"zh-chs","下载无效。"},
+ {"fi","Virheellinen lataus."},
+ {"tr","Geçersiz indirme."},
+ {"cs","Neplatné stahování."},
+ {"ja","ダウンロードが無効です。"},
+ {"es","Descarga no válida."},
+ {"pl","Nieprawidłowe pobieranie."},
+ {"pt","Download inválido."},
+ {"nl","Ongeldige download."},
+ {"pt-br","Download inválido."},
+ {"sv","Ogiltig nedladdning."},
+ {"da","Ugyldig download."},
+ {"ko","다운로드가 잘못되었습니다."},
+ {"it","Download non valido."},
+ {"ru","Неверная загрузка."}
+ }
+ },
+ {
+ "Relay",
+ new Dictionary() {
+ {"de","Weiterleitung"},
+ {"hi","रिले"},
+ {"fr","Relais"},
+ {"zh-cht","中繼"},
+ {"zh-chs","中继"},
+ {"fi","Rele"},
+ {"tr","Yayın"},
+ {"cs","Předávání (relay)"},
+ {"ja","リレー"},
+ {"es","Relé"},
+ {"pl","Przekierowanie"},
+ {"pt","Retransmissão"},
+ {"pt-br","Retransmissão"},
+ {"sv","Relä"},
+ {"ko","전달(Relay)"},
+ {"it","Ritrasmissioni"},
+ {"ru","Ретранслятор"}
+ }
+ },
+ {
+ "Port {0} to {1}:{2}",
+ new Dictionary() {
+ {"de","Port {0} nach {1}:{2}"},
+ {"hi","पोर्ट {0} से {1}:{2}"},
+ {"fr","Port {0} vers {1} :{2}"},
+ {"zh-chs","端口 {0} 到 {1}:{2}"},
+ {"fi","Portti {0} kohteeseen {1}: {2}"},
+ {"tr","{0} bağlantı noktası {1}:{2}"},
+ {"cs","Port {0} do {1}: {2}"},
+ {"ja","ポート{0}から{1}:{2}"},
+ {"es","Puerto {0} a {1}: {2}"},
+ {"pl","Port {0} do {1}:{2}"},
+ {"pt","Porta {0} para {1}: {2}"},
+ {"nl","Poort {0} naar {1}:{2}"},
+ {"pt-br","Porta {0} para {1}: {2}"},
+ {"sv","Port {0} till {1}: {2}"},
+ {"da","Port {0} til {1}:{2}"},
+ {"ko","{0}에서 {1}로 포트 : {2}"},
+ {"it","Porta {0} a {1}:{2}"},
+ {"ru","Порт {0} в {1}: {2}"}
+ }
+ },
+ {
+ "Remote - {0}",
+ new Dictionary() {
+ {"de","Fernbedienung - {0}"},
+ {"hi","रिमोट - {0}"},
+ {"fr","À distance - {0}"},
+ {"zh-chs","远程 - {0}"},
+ {"fi","Kaukosäädin - {0}"},
+ {"tr","Uzak - {0}"},
+ {"cs","Dálkové ovládání - {0}"},
+ {"ja","リモート-{0}"},
+ {"es","Remoto: {0}"},
+ {"pl","Zdalny - {0}"},
+ {"pt","Remoto - {0}"},
+ {"nl","Afstandsbediening - {0}"},
+ {"pt-br","Remoto - {0}"},
+ {"sv","Fjärrkontroll - {0}"},
+ {"ko","원격-{0}"},
+ {"it","Remoto - {0}"},
+ {"ru","Удаленный - {0}"}
+ }
+ },
+ {
+ "Very slow",
+ new Dictionary() {
+ {"de","Sehr langsam"},
+ {"hi","बहुत धीमी गति से"},
+ {"fr","Très lent"},
+ {"zh-cht","非常慢"},
+ {"zh-chs","非常慢"},
+ {"fi","Hyvin hidas"},
+ {"tr","Çok yavaş"},
+ {"cs","Velmi pomalu"},
+ {"ja","非常に遅い"},
+ {"es","Muy lento"},
+ {"pl","Bardzo powoli"},
+ {"pt","Muito devagar"},
+ {"nl","Erg traag"},
+ {"pt-br","Muito lento"},
+ {"sv","Väldigt långsam"},
+ {"da","Meget langsom"},
+ {"ko","아주 느린"},
+ {"it","Molto lento"},
+ {"ru","Очень медленно"}
+ }
+ },
+ {
+ "OpenSSH",
+ new Dictionary() {
+ {"hi","अधिभारित"},
+ {"zh-chs","开放式SSH"}
+ }
+ },
+ {
+ "Confirm Delete",
+ new Dictionary() {
+ {"de","Löschen bestätigen"},
+ {"hi","हटाने की पुष्टि करें"},
+ {"fr","Confirmation de la suppression"},
+ {"zh-chs","确认删除"},
+ {"fi","Vahvista poistaminen"},
+ {"tr","Silmeyi Onayla"},
+ {"cs","Potvrďte smazání"},
+ {"ja","削除の確認"},
+ {"es","Confirmar Eliminación"},
+ {"pl","Potwierdzić Usunięcie"},
+ {"pt","Confirmar exclusão"},
+ {"nl","Verwijderen bevestigen"},
+ {"pt-br","Confirmar exclusão"},
+ {"sv","Bekräfta radering"},
+ {"da","Bekræft sletning"},
+ {"ko","삭제 확인"},
+ {"it","Conferma cancellazione"},
+ {"ru","Подтвердите удаление"}
+ }
+ },
+ {
+ "Estimating...",
+ new Dictionary() {
+ {"de","Schätzung..."},
+ {"hi","अनुमान लगाया जा रहा है..."},
+ {"fr","Estimation ..."},
+ {"zh-chs","估计..."},
+ {"fi","Arvioidaan ..."},
+ {"tr","tahmin ediliyor..."},
+ {"cs","Odhadování ..."},
+ {"ja","見積もり..."},
+ {"es","Estimando ..."},
+ {"pl","Doceniający..."},
+ {"pt","Estimando ..."},
+ {"nl","geschat..."},
+ {"pt-br","Estimando..."},
+ {"sv","Uppskattar ..."},
+ {"da","Estimerer..."},
+ {"ko","추정 중..."},
+ {"it","Stima..."},
+ {"ru","Оценка ..."}
+ }
+ },
+ {
+ "Remote IP",
+ new Dictionary() {
+ {"de","Remote-IP"},
+ {"hi","दूरदराज़ के आई. पी"},
+ {"fr","IP distante"},
+ {"zh-chs","远程IP"},
+ {"fi","Etä -IP"},
+ {"tr","uzak IP"},
+ {"cs","Vzdálená IP"},
+ {"ja","リモートIP"},
+ {"es","IP Remota"},
+ {"pl","Zdalny IP"},
+ {"pt","IP Remoto"},
+ {"nl","Extern IP"},
+ {"pt-br","IP Remoto"},
+ {"sv","Fjärr-IP"},
+ {"da","Fjern-IP"},
+ {"ko","원격 IP"},
+ {"it","IP remoto"},
+ {"ru","Удаленный IP"}
+ }
+ },
+ {
+ "Open Web Site",
+ new Dictionary() {
+ {"de","Website öffnen"},
+ {"hi","वेब साइट खोलें"},
+ {"fr","Ouvrir le site Web"},
+ {"zh-chs","打开网站"},
+ {"fi","Avaa verkkosivusto"},
+ {"tr","Web Sitesini Aç"},
+ {"cs","Otevřete web"},
+ {"ja","Webサイトを開く"},
+ {"es","Abrir Sitio Web"},
+ {"pl","Otwórz Stronę"},
+ {"pt","Abra o site"},
+ {"nl","Website openen"},
+ {"pt-br","Abra o site"},
+ {"sv","Öppna webbplatsen"},
+ {"da","Åbn webstedet"},
+ {"ko","웹 사이트 열기"},
+ {"it","Apri sito web"},
+ {"ru","Открыть веб-сайт"}
+ }
+ },
+ {
+ "ComputerName",
+ new Dictionary() {
+ {"de","Computername"},
+ {"hi","कंप्यूटर का नाम"},
+ {"fr","Nom de l'ordinateur"},
+ {"zh-chs","计算机名"},
+ {"fi","Tietokoneen nimi"},
+ {"tr","Bilgisayar adı"},
+ {"cs","Název počítače"},
+ {"ja","コンピュータネーム"},
+ {"es","Nombre de la Computadora"},
+ {"pl","Nazwa komputera"},
+ {"pt","Nome do computador"},
+ {"nl","Computernaam"},
+ {"pt-br","Nome do computador"},
+ {"sv","Datornamn"},
+ {"da","Computernavn"},
+ {"it","Nome del computer"},
+ {"ru","Имя компьютера"}
+ }
+ },
+ {
+ "Create Folder",
+ new Dictionary() {
+ {"de","Ordner erstellen"},
+ {"hi","फोल्डर बनाएं"},
+ {"fr","Créer le dossier"},
+ {"zh-chs","创建文件夹"},
+ {"fi","Luo kansio"},
+ {"tr","Klasör oluşturun"},
+ {"cs","Vytvořit složku"},
+ {"ja","フォルダーを作る"},
+ {"es","Crear Carpeta"},
+ {"pl","Utwórz Folder"},
+ {"pt","Criar pasta"},
+ {"nl","Map aanmaken"},
+ {"pt-br","Criar pasta"},
+ {"sv","Skapa mapp"},
+ {"da","Opret mappe"},
+ {"ko","폴더 생성"},
+ {"it","Creare una cartella"},
+ {"ru","Создать папку"}
+ }
+ },
+ {
+ "Cancel Auto-Close",
+ new Dictionary() {
+ {"de","Automatisches Schließen abbrechen"},
+ {"hi","रद्द करें स्वतः बंद"},
+ {"fr","Annuler la fermeture automatique"},
+ {"zh-chs","取消自动关闭"},
+ {"fi","Peruuta automaattinen sulkeminen"},
+ {"tr","Otomatik Kapatmayı İptal Et"},
+ {"cs","Zrušit automatické zavírání"},
+ {"ja","自動クローズをキャンセルする"},
+ {"es","Cancelar Cierre Automático"},
+ {"pl","Anuluj Auto-Zamknięcie"},
+ {"pt","Cancelar fechamento automático"},
+ {"nl","Automatisch sluiten annuleren"},
+ {"pt-br","Cancelar fechamento automático"},
+ {"sv","Avbryt automatisk stängning"},
+ {"da","Annuller auto-luk"},
+ {"ko","자동 닫기 취소"},
+ {"it","Annulla chiusura automatica"},
+ {"ru","Отменить автоматическое закрытие"}
+ }
+ },
+ {
+ ", 1 connection.",
+ new Dictionary() {
+ {"de",", 1 Verbindung."},
+ {"hi",", 1 कनेक्शन।"},
+ {"fr",", 1 connexion."},
+ {"zh-chs",", 1 个连接。"},
+ {"fi",", 1 liitäntä."},
+ {"tr",", 1 bağlantı."},
+ {"cs",", 1 připojení."},
+ {"ja","、1接続。"},
+ {"es",", 1 conexión."},
+ {"pl",", 1 połączenie."},
+ {"pt",", 1 conexão."},
+ {"nl",", 1 verbinding."},
+ {"pt-br",", 1 conexão."},
+ {"sv",", 1 anslutning."},
+ {"da",", 1 forbindelse."},
+ {"ko",", 1 촌."},
+ {"it",", 1 connessione."},
+ {"ru",", 1 соединение."}
+ }
+ },
+ {
+ "Connecting...",
+ new Dictionary() {
+ {"de","Verbinden..."},
+ {"hi","कनेक्ट ..."},
+ {"fr","En cours de connexion ..."},
+ {"zh-cht","正在連線..."},
+ {"zh-chs","正在连线..."},
+ {"fi","Yhdistetään..."},
+ {"tr","Bağlanıyor..."},
+ {"cs","Připojování…"},
+ {"ja","接続しています..."},
+ {"es","Conectando...."},
+ {"pl","Łączenie..."},
+ {"pt","Conectando..."},
+ {"nl","Verbinden..."},
+ {"pt-br","Conectando ..."},
+ {"sv","Ansluter..."},
+ {"da","Forbinder..."},
+ {"ko","연결 중 ..."},
+ {"it","Collegamento ..."},
+ {"ru","Подключение..."}
+ }
+ },
+ {
+ "&Open Mappings...",
+ new Dictionary() {
+ {"de","&Zuordnungen öffnen..."},
+ {"hi","&ओपन मैपिंग..."},
+ {"fr","&Ouvrir les mappages..."},
+ {"zh-chs","打开映射 (&O)..."},
+ {"fi","& Avaa kartoitukset ..."},
+ {"tr","&Eşlemeleri Aç..."},
+ {"cs","& Otevřít mapování ..."},
+ {"ja","&Open Mapping .. .."},
+ {"es","&Abrir mapeos ..."},
+ {"pl","&Otwórz Mapowania..."},
+ {"pt","& Abrir mapeamentos ..."},
+ {"nl","&toewijzingen openen..."},
+ {"pt-br","&Abrir mapeamentos ..."},
+ {"sv","& Öppna kartläggningar ..."},
+ {"ko","매핑 열기 ..."},
+ {"it","&Apri mappature..."},
+ {"ru","&Открыть, сопоставить..."}
+ }
+ },
+ {
+ "TCP",
+ new Dictionary() {
+ {"hi","टीसीपी"}
+ }
+ },
+ {
+ "Remote Desktop Data",
+ new Dictionary() {
+ {"de","Remotedesktopdaten"},
+ {"hi","दूरस्थ डेस्कटॉप डेटा"},
+ {"fr","Données de bureau à distance"},
+ {"zh-chs","远程桌面数据"},
+ {"fi","Etätyöpöydän tiedot"},
+ {"tr","Uzak Masaüstü Verileri"},
+ {"cs","Data vzdálené plochy"},
+ {"ja","リモートデスクトップデータ"},
+ {"es","Datos de Escritorio Remoto"},
+ {"pl","Dane Pulpitu Zdalnego"},
+ {"pt","Dados da área de trabalho remota"},
+ {"nl","Extern bureaublad gegevens"},
+ {"pt-br","Dados da área de trabalho remota"},
+ {"sv","Fjärrskrivbordsdata"},
+ {"da","Fjernskrivebordsdata"},
+ {"ko","원격 데스크톱 데이터"},
+ {"it","Dati desktop remoto"},
+ {"ru","Данные удаленного рабочего стола"}
+ }
+ },
+ {
+ "Add Relay Map...",
+ new Dictionary() {
+ {"de","Relaiskarte hinzufügen..."},
+ {"hi","रिले मैप जोड़ें..."},
+ {"fr","Ajouter une carte de relais..."},
+ {"zh-chs","添加中继地图..."},
+ {"fi","Lisää välityskartta ..."},
+ {"tr","Geçiş Haritası Ekle..."},
+ {"cs","Přidat mapu relé ..."},
+ {"ja","リレーマップを追加..."},
+ {"es","Agregar mapa de retransmisiones ..."},
+ {"pl","Dodaj Mapę Przekierowania..."},
+ {"pt","Adicionar mapa de retransmissão ..."},
+ {"nl","Toevoegen relay kaart..."},
+ {"pt-br","Adicionar mapa de retransmissão ..."},
+ {"sv","Lägg till reläkarta ..."},
+ {"da","Tilføj Relay kort"},
+ {"ko","릴레이 맵 추가 ..."},
+ {"it","Aggiungi mappa di rilancio..."},
+ {"ru","Добавить карту реле ..."}
+ }
+ },
+ {
+ "Send token to registered email address?",
+ new Dictionary() {
+ {"de","Token an registrierte E-Mail-Adresse senden?"},
+ {"hi","प्राप्त ईमेल पते पर टोकन भेजें?"},
+ {"fr","Envoyer un jeton à une adresse e-mail enregistrée?"},
+ {"zh-cht","將保安編碼發送到註冊的電郵地址?"},
+ {"zh-chs","将保安编码发送到注册的电邮地址?"},
+ {"fi","Lähetetäänkö tunnus rekisteröityyn sähköpostiosoitteeseen?"},
+ {"tr","Belirteç kayıtlı e-posta adresine gönderilsin mi?"},
+ {"cs","Odeslat token na zaregistrovanou e-mailovou adresu?"},
+ {"ja","登録済みのメールアドレスにトークンを送信しますか?"},
+ {"es","¿Enviar token a la dirección de correo electrónico registrada?"},
+ {"pl","Wysłać token na zarejestrowany adres email?"},
+ {"pt","Enviar token para o endereço de e-mail registrado?"},
+ {"nl","Token verzenden naar geregistreerd e-mailadres?"},
+ {"pt-br","Enviar token para o endereço de e-mail registrado?"},
+ {"sv","Skicka token till registrerad e-postadress?"},
+ {"da","Send token til registreret e-mailadresse?"},
+ {"ko","등록된 이메일 주소로 토큰을 보내시겠습니까?"},
+ {"it","Invia token all'indirizzo email registrato?"},
+ {"ru","Отправить токен на зарегистрированный адрес электронной почты?"}
+ }
+ },
+ {
+ "HTTP",
+ new Dictionary() {
+ {"hi","एचटीटीपी"}
+ }
+ },
+ {
+ "Denied",
+ new Dictionary() {
+ {"de","Verweigert"},
+ {"hi","निषेध"},
+ {"fr","Refusée"},
+ {"zh-cht","被拒絕"},
+ {"zh-chs","被拒绝"},
+ {"fi","Evätty"},
+ {"tr","Reddedildi"},
+ {"cs","Odepřeno"},
+ {"ja","拒否されました"},
+ {"es","Denegado"},
+ {"pl","Zabronione"},
+ {"pt","Negado"},
+ {"nl","Geweigerd"},
+ {"pt-br","Negado"},
+ {"sv","Förnekad"},
+ {"da","Afslået"},
+ {"ko","거부"},
+ {"it","Negato"},
+ {"ru","Отказано"}
+ }
+ },
+ {
+ "Slow",
+ new Dictionary() {
+ {"de","Langsam"},
+ {"hi","धीरे"},
+ {"fr","Lent"},
+ {"zh-cht","慢"},
+ {"zh-chs","慢"},
+ {"fi","Hidas"},
+ {"tr","Yavaş"},
+ {"cs","Pomalu"},
+ {"ja","スロー"},
+ {"es","Lento"},
+ {"pl","Powoli"},
+ {"pt","Lento"},
+ {"nl","Traag"},
+ {"pt-br","Lento"},
+ {"sv","Långsam"},
+ {"da","Langsom"},
+ {"ko","느린"},
+ {"it","Lento"},
+ {"ru","Медленно"}
+ }
+ },
+ {
+ "Privacy Bar",
+ new Dictionary() {
+ {"de","Datenschutzleiste"},
+ {"hi","गोपनीयता बार"},
+ {"fr","Barre de confidentialité"},
+ {"zh-cht","隱私欄"},
+ {"zh-chs","隐私栏"},
+ {"fi","Tietosuojapalkki"},
+ {"tr","Gizlilik Çubuğu"},
+ {"cs","Bar ochrany osobních údajů"},
+ {"ja","プライバシーバー"},
+ {"es","Barra de Privacidad"},
+ {"pl","Pasek Prywatności"},
+ {"pt","Barra de Privacidade"},
+ {"nl","Privacy balk"},
+ {"pt-br","Barra de Privacidade"},
+ {"sv","Sekretessfält"},
+ {"ko","프라이버시 바"},
+ {"it","Privacy bar"},
+ {"ru","Панель конфиденциальности"}
+ }
+ },
+ {
+ "Display {0}",
+ new Dictionary() {
+ {"de","Anzeige {0}"},
+ {"hi","प्रदर्शन {0}"},
+ {"fr","Affichage {0}"},
+ {"zh-chs","显示{0}"},
+ {"fi","Näyttö {0}"},
+ {"tr","{0} göster"},
+ {"cs","Zobrazit {0}"},
+ {"ja","{0}を表示"},
+ {"es","Mostrar {0}"},
+ {"pl","Ekran {0}"},
+ {"pt","Exibir {0}"},
+ {"nl","Scherm {0}"},
+ {"pt-br","Exibir {0}"},
+ {"sv","Visa {0}"},
+ {"da","Vis {0}"},
+ {"ko","{0} 디스플레이"},
+ {"ru","Экран {0}"}
+ }
+ },
+ {
+ "Add &Map...",
+ new Dictionary() {
+ {"de","&Zuordnen hinzufügen..."},
+ {"hi","नक्शा जोड़ें..."},
+ {"fr","Ajouter une &carte..."},
+ {"zh-chs","添加地图 (&M)..."},
+ {"fi","Lisää & kartta ..."},
+ {"tr","&Harita ekle..."},
+ {"cs","Přidat a mapovat ..."},
+ {"ja","&Mapを追加..."},
+ {"es","Agregar & mapa ..."},
+ {"pl","Dodaj &Mapę..."},
+ {"pt","Adicionar & mapear ..."},
+ {"nl","&Toewijzing toevoegen..."},
+ {"pt-br","Adicionar & mapear ..."},
+ {"sv","Lägg till & mappa ..."},
+ {"da","Tilføj &Map..."},
+ {"ko","지도 추가 ..."},
+ {"it","Aggiungi &mappa..."},
+ {"ru","Добавить & карту ..."}
+ }
+ },
+ {
+ "Error downloading file: {0}",
+ new Dictionary() {
+ {"de","Fehler beim Herunterladen der Datei: {0}"},
+ {"hi","फ़ाइल डाउनलोड करने में त्रुटि: {0}"},
+ {"fr","Erreur lors du téléchargement du fichier : {0}"},
+ {"zh-chs","下载文件时出错:{0}"},
+ {"fi","Virhe tiedoston lataamisessa: {0}"},
+ {"tr","Dosya indirilirken hata oluştu: {0}"},
+ {"cs","Chyba při stahování souboru: {0}"},
+ {"ja","ファイルのダウンロード中にエラーが発生しました:{0}"},
+ {"es","Error al descargar el archivo: {0}"},
+ {"pl","Błąd podczas pobierania pliku: {0}"},
+ {"pt","Erro ao fazer download do arquivo: {0}"},
+ {"nl","Fout bij downloaden van bestand: {0}"},
+ {"pt-br","Erro ao baixar arquivo: {0}"},
+ {"sv","Fel vid nedladdning av fil: {0}"},
+ {"da","Fejl ved download af fil: {0}"},
+ {"ko","파일 다운로드 중 오류: {0}"},
+ {"it","Errore durante il download del file: {0}"},
+ {"ru","Ошибка при загрузке файла: {0}"}
+ }
+ },
+ {
+ "OK",
+ new Dictionary() {
+ {"hi","ठीक"},
+ {"fr","ОК"},
+ {"tr","Tamam"},
+ {"pt","Ok"},
+ {"ko","확인"},
+ {"ru","ОК"}
+ }
+ },
+ {
+ "Port Mapping Help",
+ new Dictionary() {
+ {"de","Hilfe zur Portzuordnung"},
+ {"hi","पोर्ट मैपिंग सहायता"},
+ {"fr","Aide sur le mappage de ports"},
+ {"zh-chs","端口映射帮助"},
+ {"fi","Portin kartoitusohje"},
+ {"tr","Bağlantı Noktası Eşleme Yardımı"},
+ {"cs","Nápověda k mapování portů"},
+ {"ja","ポートマッピングヘルプ"},
+ {"es","Ayuda de Mapeo de Puertos"},
+ {"pl","Pomoc Mapowania Portu"},
+ {"pt","Ajuda para mapeamento de portas"},
+ {"nl","Hulp bij poorttoewijzing"},
+ {"pt-br","Ajuda para mapeamento de portas"},
+ {"sv","Portmappning Hjälp"},
+ {"da","Port Mapping hjælp"},
+ {"ko","포트 매핑 도움말"},
+ {"it","Aiuto per la mappatura delle porte"},
+ {"ru","Справка по отображению портов"}
+ }
+ },
+ {
+ "Show &Offline Devices",
+ new Dictionary() {
+ {"de","&Offline-Geräte anzeigen"},
+ {"hi","दिखाएँ &ऑफ़लाइन उपकरण"},
+ {"fr","Afficher les appareils &hors ligne"},
+ {"zh-chs","显示离线设备 (&A)"},
+ {"fi","Näytä ja offline -laitteet"},
+ {"tr","&Çevrimdışı Cihazları Göster"},
+ {"cs","Zobrazit a offline zařízení"},
+ {"ja","デバイスの表示とオフライン"},
+ {"es","Mostrar y dispositivos sin conexión"},
+ {"pl","Pokaż Urządzenia &Offline"},
+ {"pt","Mostrar dispositivos off-line"},
+ {"nl","Toon &Offline apparaten"},
+ {"pt-br","Mostrar dispositivos off-line"},
+ {"sv","Visa & Offline-enheter"},
+ {"da","Vis &Offline enheder"},
+ {"ko","오프라인 장치 표시 (& O)"},
+ {"it","Mostra dispositivi offline"},
+ {"ru","Показать и автономные устройства"}
+ }
+ },
+ {
+ "MeshCentral Router Update",
+ new Dictionary() {
+ {"de","MeshCentral Router-Update"},
+ {"hi","मेशसेंट्रल राउटर अपडेट"},
+ {"fr","Mise à jour du routeur MeshCentral"},
+ {"zh-chs","MeshCentral 路由器更新"},
+ {"fi","MeshCentral -reitittimen päivitys"},
+ {"tr","MeshCentral Yönlendirici Güncellemesi"},
+ {"cs","Aktualizace routeru MeshCentral"},
+ {"ja","MeshCentralルーターの更新"},
+ {"es","Actualización del enrutador MeshCentral"},
+ {"pl","Aktualizacja MeshCentral Router"},
+ {"pt","Atualização do roteador MeshCentral"},
+ {"pt-br","Atualização do MeshCentral Router"},
+ {"sv","MeshCentral routeruppdatering"},
+ {"da","MeshCentral routeropdatering"},
+ {"ko","MeshCentral 라우터 업데이트"},
+ {"it","Aggiornamento del router MeshCentral"},
+ {"ru","Обновление MeshCentral Router"}
+ }
+ },
+ {
+ "Size",
+ new Dictionary() {
+ {"de","Größe"},
+ {"hi","आकार"},
+ {"fr","Taille"},
+ {"zh-cht","尺寸"},
+ {"zh-chs","尺寸"},
+ {"fi","Koko"},
+ {"tr","Boyut"},
+ {"cs","Velikost"},
+ {"ja","サイズ"},
+ {"es","Tamaño"},
+ {"pl","Rozmiar"},
+ {"pt","Tamanho"},
+ {"nl","Grootte"},
+ {"pt-br","Tamanho"},
+ {"sv","Storlek"},
+ {"da","Størrelse"},
+ {"ko","크기"},
+ {"it","Dimensione"},
+ {"ru","Размер"}
+ }
+ },
+ {
+ "CIRA",
+ new Dictionary() {
+ {"hi","सीआईआरए"}
+ }
+ },
+ {
+ "Use Alternate Port...",
+ new Dictionary() {
+ {"de","Alternativer Port verwenden..."},
+ {"hi","वैकल्पिक पोर्ट का उपयोग करें..."},
+ {"fr","Utiliser un autre port..."},
+ {"zh-chs","使用备用端口..."},
+ {"fi","Käytä vaihtoehtoista porttia ..."},
+ {"tr","Alternatif Bağlantı Noktasını Kullan..."},
+ {"cs","Použít alternativní port ..."},
+ {"ja","代替ポートを使用..."},
+ {"es","Usar Puerto Alternativo ..."},
+ {"pl","Użyj Alternatywnego Portu..."},
+ {"pt","Usar porta alternativa ..."},
+ {"nl","Alternatieve poort gebruiken..."},
+ {"pt-br","Usar porta alternativa ..."},
+ {"sv","Använd alternativ port ..."},
+ {"da","Brug alternativ port..."},
+ {"ko","대체 포트 사용 ..."},
+ {"it","Usa porta alternativa..."},
+ {"ru","Использовать альтернативный порт ..."}
+ }
+ },
+ {
+ "Unable to open file: {0}",
+ new Dictionary() {
+ {"de","Datei kann nicht geöffnet werden: {0}"},
+ {"hi","फ़ाइल खोलने में असमर्थ: {0}"},
+ {"fr","Impossible d'ouvrir le fichier : {0}"},
+ {"zh-chs","无法打开文件:{0}"},
+ {"fi","Tiedostoa ei voi avata: {0}"},
+ {"tr","Dosya açılamıyor: {0}"},
+ {"cs","Soubor nelze otevřít: {0}"},
+ {"ja","ファイルを開くことができません:{0}"},
+ {"es","No se puede abrir el archivo: {0}"},
+ {"pl","Nie można otworzyć pliku: {0}"},
+ {"pt","Não foi possível abrir o arquivo: {0}"},
+ {"nl","Kan bestand: {0} niet openen"},
+ {"pt-br","No se puede abrir el archivo: {0}"},
+ {"sv","Det gick inte att öppna filen: {0}"},
+ {"da","Kan ikke åbne filen: {0}"},
+ {"ko","파일을 열 수 없음: {0}"},
+ {"it","Impossibile aprire il file: {0}"},
+ {"ru","Невозможно открыть файл: {0}"}
+ }
+ },
+ {
+ "Connect",
+ new Dictionary() {
+ {"de","Verbinden"},
+ {"hi","जुडिये"},
+ {"fr","Se connecter"},
+ {"zh-cht","連接"},
+ {"zh-chs","连接"},
+ {"fi","Yhdistä"},
+ {"tr","Bağlan"},
+ {"cs","Připojit"},
+ {"ja","つなぐ"},
+ {"es","Conectar"},
+ {"pl","Połącz"},
+ {"pt","Conectar"},
+ {"nl","Verbinden"},
+ {"pt-br","Conectar"},
+ {"sv","Anslut"},
+ {"da","Forbind"},
+ {"ko","연결"},
+ {"it","Connetti"},
+ {"ru","Подключиться"}
+ }
+ },
+ {
+ "MeshCentral Router Installation",
+ new Dictionary() {
+ {"de","Installation des MeshCentral-Routers"},
+ {"hi","मेशसेंट्रल राउटर इंस्टालेशन"},
+ {"fr","Installation du routeur MeshCentral"},
+ {"zh-chs","MeshCentral 路由器安装"},
+ {"fi","MeshCentral -reitittimen asennus"},
+ {"tr","MeshCentral Yönlendirici Kurulumu"},
+ {"cs","Instalace routeru MeshCentral"},
+ {"ja","MeshCentralルーターのインストール"},
+ {"es","Instalación del enrutador MeshCentral"},
+ {"pl","Instalacja MeshCentral Router"},
+ {"pt","Instalação do roteador MeshCentral"},
+ {"nl","MeshCentral Router Installatie"},
+ {"pt-br","Instalação do MeshCentral Router"},
+ {"ko","MeshCentral 라우터 설치"},
+ {"it","Installazione del router MeshCentral"},
+ {"ru","Установка MeshCentral Router"}
+ }
+ },
+ {
+ "Double Click Action",
+ new Dictionary() {
+ {"de","Doppelklick-Aktion"},
+ {"hi","डबल क्लिक एक्शन"},
+ {"fr","Action de double-clic"},
+ {"zh-chs","双击操作"},
+ {"fi","Kaksoisnapsauta toimintoa"},
+ {"tr","Çift Tıklama İşlemi"},
+ {"cs","Akce dvojitým kliknutím"},
+ {"ja","ダブルクリックアクション"},
+ {"es","Acción de doble clic"},
+ {"pl","Akcja Podwójnego Kliknięcia"},
+ {"pt","Ação de duplo clique"},
+ {"nl","Dubbelklik actie"},
+ {"pt-br","Ação de duplo clique"},
+ {"sv","Dubbelklicka på åtgärd"},
+ {"da","Dobbeltklik på handling"},
+ {"ko","더블 클릭 동작"},
+ {"it","Azione doppio clic"},
+ {"ru","Действие двойного щелчка"}
+ }
+ },
+ {
+ "(Individual Devices)",
+ new Dictionary() {
+ {"de","(Einzelgeräte)"},
+ {"hi","(व्यक्तिगत उपकरण)"},
+ {"fr","(Appareils individuels)"},
+ {"zh-chs","(个别设备)"},
+ {"fi","(Yksittäiset laitteet)"},
+ {"tr","(Bireysel Cihazlar)"},
+ {"cs","(Jednotlivá zařízení)"},
+ {"ja","(個別のデバイス)"},
+ {"es","(Dispositivos individuales)"},
+ {"pl","(Poszczególne urządzenia)"},
+ {"pt","(Dispositivos Individuais)"},
+ {"nl","(Individuele apparaten)"},
+ {"pt-br","(Dispositivos Individuais)"},
+ {"sv","(Enskilda enheter)"},
+ {"da","(Individuelle enheder)"},
+ {"ko","(개별 기기)"},
+ {"it","(Dispositivi individuali)"},
+ {"ru","(Отдельные устройства)"}
+ }
+ },
+ {
+ "Path",
+ new Dictionary() {
+ {"de","Pfad"},
+ {"hi","पथ"},
+ {"fr","Chemin"},
+ {"zh-chs","小路"},
+ {"fi","Polku"},
+ {"tr","Yol"},
+ {"cs","Cesta"},
+ {"ja","道"},
+ {"es","Camino"},
+ {"pl","Ścieżka"},
+ {"pt","Caminho"},
+ {"nl","Pad"},
+ {"pt-br","Caminho"},
+ {"sv","Väg"},
+ {"da","Sti"},
+ {"ko","통로"},
+ {"it","Percorso"},
+ {"ru","Дорожка"}
+ }
+ },
+ {
+ "Desktop Settings",
+ new Dictionary() {
+ {"de","Desktop-Einstellungen"},
+ {"hi","डेस्कटॉप सेटिंग्स"},
+ {"fr","Paramètres du bureau"},
+ {"zh-chs","桌面设置"},
+ {"fi","Työpöydän asetukset"},
+ {"tr","Masaüstü Ayarları"},
+ {"cs","Nastavení plochy"},
+ {"ja","デスクトップ設定"},
+ {"es","Configuración de escritorio"},
+ {"pl","Ustawienia Pulpitu"},
+ {"pt","Configurações da área de trabalho"},
+ {"nl","Bureaubladinstellingen"},
+ {"pt-br","Configurações da área de trabalho"},
+ {"sv","Skrivbordsinställningar"},
+ {"da","Skrivebordsindstillninger"},
+ {"ko","데스크탑 설정"},
+ {"it","Impostazioni del desktop"},
+ {"ru","Настройки рабочего стола"}
+ }
+ },
+ {
+ "Remote Desktop Settings",
+ new Dictionary() {
+ {"de","Einstellungen des entfernten Desktops"},
+ {"hi","दूरस्थ डेस्कटॉप सेटिंग्स"},
+ {"fr","Paramètres du bureau à distance"},
+ {"zh-cht","遠程桌面設置"},
+ {"zh-chs","远程桌面设置"},
+ {"fi","Etätyöpöydän asetukset"},
+ {"tr","Uzak Masaüstü Ayarları"},
+ {"cs","Nastavení vzdálené plochy"},
+ {"ja","リモートデスクトップ設定"},
+ {"es","Opciones de Escritorio Remoto"},
+ {"pl","Ustawienia Pulpitu Zdalnego"},
+ {"pt","Configurações da área de trabalho remota"},
+ {"nl","Instellingen extern bureaublad"},
+ {"pt-br","Configurações de área de trabalho remota"},
+ {"sv","Fjärrskrivbordsinställningar"},
+ {"da","Indstillinger for fjernskrivebord"},
+ {"ko","원격 데스크톱 설정"},
+ {"it","Impostazioni desktop remoto"},
+ {"ru","Настройки удаленного рабочего стола"}
+ }
+ },
+ {
+ "Relay Device",
+ new Dictionary() {
+ {"de","Relaisgerät"},
+ {"hi","रिले डिवाइस"},
+ {"fr","Dispositif de relais"},
+ {"zh-chs","中继装置"},
+ {"fi","Relelaite"},
+ {"tr","Röle Cihazı"},
+ {"cs","Reléové zařízení"},
+ {"ja","リレー装置"},
+ {"es","Dispositivo de Retransmisión"},
+ {"pl","Urządzenie Przekazujące"},
+ {"pt","Dispositivo de Relé"},
+ {"nl","Doorstuur apparaat"},
+ {"pt-br","Dispositivo de Retransmissão"},
+ {"sv","Reläenhet"},
+ {"da","Relay enhed"},
+ {"ko","릴레이 장치"},
+ {"it","Dispositivo ripetitore"},
+ {"ru","Релейное устройство"}
+ }
+ },
+ {
+ "Setup...",
+ new Dictionary() {
+ {"de","Aufbau..."},
+ {"hi","सेट अप..."},
+ {"fr","Traitement..."},
+ {"zh-cht","設定..."},
+ {"zh-chs","设定..."},
+ {"fi","Asennus..."},
+ {"tr","Kurmak..."},
+ {"cs","Nastavení…"},
+ {"ja","セットアップ..."},
+ {"es","Configurar..."},
+ {"pl","Instalacja..."},
+ {"pt","Configurando..."},
+ {"pt-br","Configurando..."},
+ {"sv","Uppstart..."},
+ {"da","Opsætning..."},
+ {"ko","설치..."},
+ {"it","Impostare..."},
+ {"ru","Установка..."}
+ }
+ },
+ {
+ "Unable to bind to local port",
+ new Dictionary() {
+ {"de","Kann nicht an lokalen Port binden"},
+ {"hi","स्थानीय पोर्ट से जुड़ने में असमर्थ"},
+ {"fr","Impossible de se lier au port local"},
+ {"zh-chs","无法绑定到本地端口"},
+ {"fi","Ei voi yhdistää paikalliseen porttiin"},
+ {"tr","Yerel bağlantı noktasına bağlanamıyor"},
+ {"cs","Nelze se vázat na místní port"},
+ {"ja","ローカルポートにバインドできません"},
+ {"es","No se puede vincular al puerto local"},
+ {"pl","Nie można przypisać do portu lokalnego"},
+ {"pt","Incapaz de ligar à porta local"},
+ {"nl","Kan niet binden aan lokale poort"},
+ {"pt-br","Não foi possível conectar à porta local"},
+ {"sv","Det gick inte att binda till lokal port"},
+ {"da","Kan ikke binde til lokal port"},
+ {"ko","로컬 포트에 바인딩 할 수 없습니다."},
+ {"it","Impossibile eseguire il binding alla porta locale"},
+ {"ru","Невозможно подключиться к локальному порту"}
+ }
+ },
+ {
+ "Rename File",
+ new Dictionary() {
+ {"de","Datei umbenennen"},
+ {"hi","फाइल का नाम बदलो"},
+ {"fr","Renommer le fichier"},
+ {"zh-chs","重新命名文件"},
+ {"fi","Nimeä tiedosto uudelleen"},
+ {"tr","Dosyayı yeniden adlandır"},
+ {"cs","Přejmenuj soubor"},
+ {"ja","ファイルの名前を変更"},
+ {"es","Renombrar Archivo"},
+ {"pl","Zmień Nazwę Pliku"},
+ {"pt","Renomear arquivo"},
+ {"nl","Bestand hernoemen"},
+ {"pt-br","Renomear arquivo"},
+ {"sv","Döp om fil"},
+ {"da","Omdøb fil"},
+ {"ko","파일명 변경"},
+ {"it","Rinomina il file"},
+ {"ru","Переименуйте файл"}
+ }
+ },
+ {
+ "Push local clipboard to remote device",
+ new Dictionary() {
+ {"de","Lokale Zwischenablage auf Remote-Gerät übertragen"},
+ {"hi","स्थानीय क्लिपबोर्ड को दूरस्थ डिवाइस पर पुश करें"},
+ {"fr","Transférer le presse-papiers local vers l'appareil distant"},
+ {"zh-chs","将本地剪贴板推送到远程设备"},
+ {"fi","Työnnä paikallinen leikepöytä etälaitteeseen"},
+ {"tr","Yerel panoyu uzak cihaza itin"},
+ {"cs","Přesuňte místní schránku do vzdáleného zařízení"},
+ {"ja","ローカルクリップボードをリモートデバイスにプッシュする"},
+ {"es","Empuje el portapapeles local al dispositivo remoto"},
+ {"pl","Prześlij lokalny schowek do urządzenia zdalnego"},
+ {"pt","Envie a área de transferência local para o dispositivo remoto"},
+ {"nl","Verplaats lokaal klembord naar extern apparaat"},
+ {"pt-br","Envie a área de transferência local para o dispositivo remoto"},
+ {"sv","Tryck lokalt urklipp till fjärrenheten"},
+ {"da","Skub den lokale udklipsholder til fjernenheden"},
+ {"ko","로컬 클립 보드를 원격 장치로 푸시"},
+ {"it","Spingi gli appunti locali sul dispositivo remoto"},
+ {"ru","Перенести локальный буфер обмена на удаленное устройство"}
+ }
+ },
+ {
+ "Overwrite {0} files?",
+ new Dictionary() {
+ {"de","{0} Dateien überschreiben?"},
+ {"hi","{0} फ़ाइलें अधिलेखित करें?"},
+ {"fr","Écraser {0} fichiers ?"},
+ {"zh-chs","覆盖 {0} 个文件?"},
+ {"fi","Korvataanko {0} tiedostoa?"},
+ {"tr","{0} dosyanın üzerine yazılsın mı?"},
+ {"cs","Přepsat {0} souborů?"},
+ {"ja","{0}ファイルを上書きしますか?"},
+ {"es","¿Sobrescribir {0} archivos?"},
+ {"pl","Zastąpić {0} plików?"},
+ {"pt","Substituir {0} arquivos?"},
+ {"nl","{0} bestanden overschrijven?"},
+ {"pt-br","¿Sobrescribir {0} archivos?"},
+ {"sv","Skriv över {0} filer?"},
+ {"da","Overskriv {0} filer?"},
+ {"ko","{0} 파일을 덮어쓰시겠습니까?"},
+ {"it","Sovrascrivere {0} file?"},
+ {"ru","Перезаписать {0} файлы?"}
+ }
+ },
+ {
+ "Two-factor Authentication",
+ new Dictionary() {
+ {"de","Zwei-Faktor-Authentifizierung"},
+ {"hi","दो तरीकों से प्रमाणीकरण"},
+ {"fr","Authentification à deux facteurs"},
+ {"zh-chs","两因素身份验证"},
+ {"fi","Kaksivaiheinen todennus"},
+ {"tr","İki Faktörlü Kimlik Doğrulama"},
+ {"cs","Dvoufaktorové ověřování"},
+ {"ja","二要素認証"},
+ {"es","Autenticación de Dos Factores"},
+ {"pl","Uwierzytelnianie Dwuskładnikowe"},
+ {"pt","Autenticação de dois fatores"},
+ {"nl","Twee-factor authenticatie"},
+ {"pt-br","Autenticação de dois fatores"},
+ {"sv","Tvåfaktorsautentisering"},
+ {"da","2-faktor godkendelse"},
+ {"ko","2 단계 인증"},
+ {"it","Autenticazione a due fattori"},
+ {"ru","Двухфакторная аутентификация"}
+ }
+ },
+ {
+ "label1",
+ new Dictionary() {
+ {"de","Etikett1"},
+ {"hi","लेबल1"},
+ {"fr","étiquette1"},
+ {"zh-chs","标签 1"},
+ {"fi","etiketti 1"},
+ {"tr","etiket1"},
+ {"cs","štítek 1"},
+ {"es","etiqueta1"},
+ {"pl","etykieta1"},
+ {"pt","etiqueta1"},
+ {"pt-br","etiqueta1"},
+ {"sv","etikett1"},
+ {"it","etichetta1"}
+ }
+ },
+ {
+ "Email sent",
+ new Dictionary() {
+ {"de","E-Mail gesendet"},
+ {"hi","ईमेल भेजा"},
+ {"fr","Email envoyé"},
+ {"zh-chs","邮件已发送"},
+ {"fi","Sähköposti lähetetty"},
+ {"tr","E-posta gönderildi"},
+ {"cs","Email odeslán"},
+ {"ja","送信された電子メール"},
+ {"es","Correo electrónico enviado"},
+ {"pl","Email wysłano"},
+ {"pt","Email enviado"},
+ {"nl","E-mail verzonden"},
+ {"pt-br","Email enviado"},
+ {"sv","Email skickat"},
+ {"da","E-mail sendt"},
+ {"ko","이메일을 보냈습니다."},
+ {"it","Email inviata"},
+ {"ru","Письмо отправлено"}
}
},
{
"Sort by &Name",
new Dictionary() {
- {"nl","Sorteer op &Naam"},
- {"ko","이름으로 분류하다"},
+ {"de","Nach Name sortieren"},
+ {"hi","नाम द्वारा क्रमबद्ध करें"},
{"fr","Trier par nom"},
- {"it","Ordina per nome"},
{"zh-chs","按名称分类"},
+ {"fi","Lajittele nimen mukaan"},
+ {"tr","İsme göre sırala"},
+ {"cs","Seřaď dle jména"},
+ {"ja","名前順"},
+ {"es","Ordenar por nombre"},
+ {"pl","Sortuj po &Nazwie"},
+ {"pt","Classificar por & nome"},
+ {"nl","Sorteer op &Naam"},
{"pt-br","Classificar por & nome"},
{"sv","Sortera efter &Namn"},
- {"es","Ordenar por nombre"},
- {"hi","नाम द्वारा क्रमबद्ध करें"},
- {"de","Nach Name sortieren"}
+ {"da","Sortér efter &navn"},
+ {"ko","이름으로 분류하다"},
+ {"it","Ordina per nome"},
+ {"ru","Сортировать по имени"}
}
},
{
- "Changing language will close this tool. Are you sure?",
+ "Token",
new Dictionary() {
- {"nl","Als u de taal wijzigt, wordt deze tool gesloten.Weet je het zeker?"},
- {"ko","언어를 변경하면이 도구가 닫힙니다. 확실합니까?"},
- {"fr","Le changement de langue fermera cet outil. Êtes-vous sûr?"},
- {"it","La modifica della lingua chiuderà questo strumento. Sei sicuro?"},
- {"zh-chs","更改语言将关闭此工具。你确定吗?"},
- {"pt-br","Alterar o idioma fechará esta ferramenta. Tem certeza?"},
- {"sv","Om du byter språk kommer detta verktyg att stängas. Är du säker?"},
- {"es","El cambio de idioma cerrará esta herramienta. ¿Está seguro?"},
- {"hi","भाषा बदलने से यह टूल बंद हो जाएगा। क्या आपको यकीन है?"},
- {"de","Wenn Sie die Sprache ändern, wird dieses Tool geschlossen. Bist du sicher?"}
+ {"de","Zeichen"},
+ {"hi","टोकन"},
+ {"fr","Jeton"},
+ {"zh-cht","代幣"},
+ {"zh-chs","代币"},
+ {"fi","Tunnus"},
+ {"tr","Anahtar"},
+ {"cs","Žeton"},
+ {"ja","トークン"},
+ {"pt","Símbolo"},
+ {"pt-br","Símbolo"},
+ {"sv","Tecken"},
+ {"ko","토큰"},
+ {"it","Gettone"},
+ {"ru","Токен"}
}
},
{
- "Device Group",
+ "Medium",
new Dictionary() {
- {"de","Gerätegruppe"},
- {"hi","डिवाइस समूह"},
- {"fr","Groupe d'appareils"},
- {"zh-cht","裝置群"},
- {"zh-chs","设备组"},
- {"fi","Laiteryhmä"},
- {"tr","Cihaz Grubu"},
- {"cs","Skupina zařízení"},
- {"ja","デバイスグループ"},
- {"es","Grupo de Dispositivos"},
- {"pt","Grupo de dispositivos"},
- {"nl","Apparaat groep"},
- {"pt-br","Grupo de Dispositivos"},
- {"sv","Enhetsgrupp"},
- {"ko","장치 그룹"},
- {"it","Gruppo di dispositivi"},
- {"ru","Группа устройства"}
+ {"de","Mittel"},
+ {"hi","मध्यम"},
+ {"fr","Moyen"},
+ {"zh-cht","中"},
+ {"zh-chs","中"},
+ {"fi","Keskikokoinen"},
+ {"tr","Orta"},
+ {"cs","Středně"},
+ {"ja","中"},
+ {"es","Medio"},
+ {"pl","Średnio"},
+ {"pt","Médio"},
+ {"nl","Gemiddeld"},
+ {"pt-br","Médio"},
+ {"ko","중간"},
+ {"it","medio"},
+ {"ru","Средний"}
+ }
+ },
+ {
+ "Remote Files",
+ new Dictionary() {
+ {"de","Remote-Dateien"},
+ {"hi","दूरस्थ फ़ाइलें"},
+ {"fr","Fichiers distants"},
+ {"zh-chs","远程文件"},
+ {"fi","Etätiedostot"},
+ {"tr","Uzak Dosyalar"},
+ {"cs","Vzdálené soubory"},
+ {"ja","リモートファイル"},
+ {"es","Archivos Remotos"},
+ {"pl","Zdalne Pliki"},
+ {"pt","Arquivos Remotos"},
+ {"nl","Externe bestanden"},
+ {"pt-br","Arquivos Remotos"},
+ {"sv","Fjärrfiler"},
+ {"da","Fjernfiler"},
+ {"ko","원격 파일"},
+ {"it","File remoti"},
+ {"ru","Удаленные файлы"}
+ }
+ },
+ {
+ "RDP Port",
+ new Dictionary() {
+ {"de","RDP-Port"},
+ {"hi","आरडीपी पोर्ट"},
+ {"fr","Port RDP"},
+ {"zh-chs","RDP 端口"},
+ {"fi","RDP -portti"},
+ {"tr","RDP Bağlantı Noktası"},
+ {"cs","Port RDP"},
+ {"ja","RDPポート"},
+ {"es","Puerto RDP"},
+ {"pl","Port RDP"},
+ {"pt","Porta RDP"},
+ {"nl","RDP poort"},
+ {"pt-br","Porta RDP"},
+ {"sv","RDP-port"},
+ {"da","RDP port"},
+ {"ko","RDP 포트"},
+ {"it","Porta RDP"},
+ {"ru","Порт RDP"}
+ }
+ },
+ {
+ "Updating...",
+ new Dictionary() {
+ {"de","Aktualisierung..."},
+ {"hi","अपडेट हो रहा है..."},
+ {"fr","Mise à jour..."},
+ {"zh-chs","正在更新..."},
+ {"fi","Päivitetään ..."},
+ {"tr","güncelleniyor..."},
+ {"cs","Aktualizace ..."},
+ {"ja","更新中..."},
+ {"es","Actualizando ..."},
+ {"pl","Aktualizacja..."},
+ {"pt","Atualizando ..."},
+ {"nl","Bijwerken..."},
+ {"pt-br","Atualizando ..."},
+ {"sv","Uppdaterar ..."},
+ {"da","Opdaterer..."},
+ {"ko","업데이트 중 ..."},
+ {"it","In aggiornamento..."},
+ {"ru","Обновление ..."}
}
},
{
@@ -157,127 +1363,453 @@ namespace MeshCentralRouter
{"cs","Čekání na povolení přístupu uživatelem ..."},
{"ja","ユーザーがアクセスを許可するのを待っています..."},
{"es","Esperando a que el usuario otorgue acceso..."},
+ {"pl","Oczekiwanie na przyznanie dostępu przez użytkownika..."},
{"pt","Esperando que o usuário conceda acesso ..."},
{"nl","Wachten op toestemming van de gebruiker..."},
{"pt-br","Esperando que o usuário conceda acesso ..."},
{"sv","Väntar på att användaren ska ge åtkomst ..."},
+ {"da","Venter på, at brugeren giver adgang..."},
{"ko","사용자가 액세스 권한을 부여하기를 기다리는 중 ..."},
{"it","In attesa che l'utente conceda l'accesso... "},
{"ru","Ожидание предоставления доступа пользователем ..."}
}
},
{
- "Remote desktop quality, scaling and frame rate settings. These can be adjusted depending on the quality of the network connection.",
+ " MeshCentral Router",
new Dictionary() {
- {"nl","Instellingen voor kwaliteit, schaal en framesnelheid van het externe bureaublad. Deze kunnen worden aangepast afhankelijk van de kwaliteit van de netwerkverbinding."},
- {"ko","원격 데스크톱 품질, 크기 조정 및 프레임 속도 설정. 네트워크 연결 품질에 따라 조정할 수 있습니다."},
- {"fr","Paramètres de qualité, de mise à l'échelle et de fréquence d'images du bureau à distance. Ceux-ci peuvent être ajustés en fonction de la qualité de la connexion réseau."},
- {"it","Impostazioni di qualità, ridimensionamento e frame rate del desktop remoto. Questi possono essere regolati in base alla qualità della connessione di rete."},
- {"zh-chs","远程桌面质量、缩放和帧速率设置。这些可以根据网络连接的质量进行调整。"},
- {"pt-br","Configurações de qualidade, escala e taxa de quadros da área de trabalho remota. Eles podem ser ajustados dependendo da qualidade da conexão de rede."},
- {"sv","Fjärrskrivbords kvalitet, skalning och bildfrekvensinställningar. Dessa kan justeras beroende på nätverksanslutningens kvalitet."},
- {"es","Configuración de la calidad del escritorio remoto, la escala y la velocidad de fotogramas. Estos se pueden ajustar en función de la calidad de la conexión de red."},
- {"hi","दूरस्थ डेस्कटॉप गुणवत्ता, स्केलिंग और फ्रेम दर सेटिंग्स। इन्हें नेटवर्क कनेक्शन की गुणवत्ता के आधार पर समायोजित किया जा सकता है।"},
- {"de","Remote-Desktop-Qualität, Skalierung und Bildrateneinstellungen. Diese können je nach Qualität der Netzwerkverbindung angepasst werden."}
+ {"de"," MeshCentral-Router"},
+ {"hi"," मेशसेंट्रल राउटर"},
+ {"fr"," Routeur MeshCentral"},
+ {"zh-chs"," MeshCentral 路由器"},
+ {"fi","MeshCentral -reititin"},
+ {"tr"," MeshCentral Yönlendirici"},
+ {"cs","MeshCentral Router"},
+ {"ja","MeshCentralルーター"},
+ {"es"," Enrutador MeshCentral"},
+ {"pt","Roteador MeshCentral"},
+ {"ko"," MeshCentral 라우터"},
+ {"it","MeshCentral Router"},
+ {"ru","MeshCentral Маршрутизатор"}
}
},
{
- "Use Alternate Port...",
+ "Remote",
new Dictionary() {
- {"nl","Alternatieve poort gebruiken..."},
- {"ko","대체 포트 사용 ..."},
- {"fr","Utiliser un autre port..."},
- {"it","Usa porta alternativa..."},
- {"zh-chs","使用备用端口..."},
- {"pt-br","Usar porta alternativa ..."},
- {"sv","Använd alternativ port ..."},
- {"es","Usar Puerto Alternativo ..."},
- {"hi","वैकल्पिक पोर्ट का उपयोग करें..."},
- {"de","Alternativer Port verwenden..."}
+ {"de","Entfernt"},
+ {"hi","रिमोट"},
+ {"fr","Éloigné"},
+ {"zh-cht","遠程"},
+ {"zh-chs","远程"},
+ {"fi","Etä"},
+ {"tr","Uzaktan kumanda"},
+ {"cs","Vzdálené"},
+ {"ja","リモート"},
+ {"es","Remoto"},
+ {"pl","Zdalny"},
+ {"pt","Remoto"},
+ {"nl","Extern"},
+ {"pt-br","Controle remoto"},
+ {"sv","Avlägsen"},
+ {"ko","원격"},
+ {"it","Remoto"},
+ {"ru","Удаленно"}
}
},
{
- "No Port Mappings\r\n\r\nClick \"Add\" to get started.",
+ "Remove",
new Dictionary() {
- {"nl","Geen poorttoewijzingen\r\n\r\nKlik op \"Toevoegen\" om te beginnen."},
- {"ko","포트 매핑 없음\r\n\r\n시작하려면 \"추가\"를 클릭하십시오."},
- {"fr","Aucun mappage de port\r\n\r\nCliquez sur \"Ajouter\" pour commencer."},
- {"it","Nessuna mappatura delle porte.\r\n\r\nFai clic su \"Aggiungi\" per iniziare."},
- {"zh-chs","无端口映射\r\n\r\n单击“添加”开始。"},
- {"pt-br","Sem mapeamentos de portas\r\n\r\nClique em \"Adicionar\" para começar."},
- {"sv","Inga portkartor\r\n\r\nKlicka på \"Lägg till\" för att komma igång."},
- {"es","Sin Asignaciones de Puertos\r\n\r\nHaz clic en \"Agregar\" para comenzar."},
- {"hi","कोई पोर्ट मैपिंग नहीं\r\n\r\nआरंभ करने के लिए \"जोड़ें\" पर क्लिक करें।"},
- {"de","Keine Portzuordnungen\r\n\r\nKlicken Sie auf \"Hinzufügen\", um zu beginnen."}
+ {"de","Entfernen"},
+ {"hi","हटाना"},
+ {"fr","Retirer"},
+ {"zh-cht","删除"},
+ {"zh-chs","删除"},
+ {"fi","Poista"},
+ {"tr","Kaldırmak"},
+ {"cs","Odstranit"},
+ {"ja","削除する"},
+ {"es","Remover"},
+ {"pl","Usuń"},
+ {"pt","Remover"},
+ {"nl","Verwijderen"},
+ {"pt-br","Remover"},
+ {"sv","Avlägsna"},
+ {"da","Fjern"},
+ {"ko","제거"},
+ {"it","Rimuovere"},
+ {"ru","Удалить"}
}
},
{
- "label1",
+ "Failed to start remote terminal session",
new Dictionary() {
- {"fr","étiquette1"},
- {"it","etichetta1"},
- {"zh-chs","标签 1"},
- {"pt-br","etiqueta1"},
- {"sv","etikett1"},
- {"es","etiqueta1"},
- {"hi","लेबल1"},
- {"de","Etikett1"}
+ {"de","Fehler beim Starten der Remote-Terminal-Sitzung"},
+ {"hi","दूरस्थ टर्मिनल सत्र प्रारंभ करने में विफल"},
+ {"fr","Échec du démarrage de la session de terminal distant"},
+ {"zh-chs","无法启动远程终端会话"},
+ {"fi","Etäpääteistunnon käynnistäminen epäonnistui"},
+ {"tr","Uzak terminal oturumu başlatılamadı"},
+ {"cs","Spuštění relace vzdáleného terminálu se nezdařilo"},
+ {"ja","リモートターミナルセッションの開始に失敗しました"},
+ {"es","No se pudo iniciar la sesión de terminal remota"},
+ {"pl","Nie udało się uruchomić sesji zdalnego terminala"},
+ {"pt","Falha ao iniciar sessão de terminal remoto"},
+ {"nl","Kan externe terminalsessie niet starten"},
+ {"pt-br","Falha ao iniciar sessão de terminal remoto"},
+ {"sv","Det gick inte att starta fjärrterminsessionen"},
+ {"da","Kunne ikke starte fjernterminalsession"},
+ {"ko","원격 터미널 세션을 시작하지 못했습니다."},
+ {"it","Impossibile avviare la sessione del terminale remoto"},
+ {"ru","Не удалось запустить сеанс удаленного терминала"}
}
},
{
- "Server",
+ "Relay Mapping",
new Dictionary() {
- {"ko","서버"},
- {"fr","Serveur"},
- {"zh-chs","服务器"},
- {"pt-br","Servidor"},
- {"es","Servidor"},
- {"hi","सर्वर"}
+ {"de","Relaiszuordnung"},
+ {"hi","रिले मैपिंग"},
+ {"fr","Cartographie des relais"},
+ {"zh-chs","中继映射"},
+ {"fi","Relekartoitus"},
+ {"tr","Röle Haritalama"},
+ {"cs","Reléové mapování"},
+ {"ja","リレーマッピング"},
+ {"es","Mapeo de Relés"},
+ {"pl","Mapowanie Przekierowania"},
+ {"pt","Mapeamento de retransmissão"},
+ {"nl","Doorstuurtoewijzing"},
+ {"pt-br","Mapeamento de retransmissão"},
+ {"sv","Relämappning"},
+ {"ko","릴레이 매핑"},
+ {"it","Mappatura ritrasmissione"},
+ {"ru","Отображение реле"}
}
},
{
- "Log out",
+ ", {0} users",
new Dictionary() {
- {"nl","Uitloggen"},
- {"ko","로그 아웃"},
- {"fr","Se déconnecter"},
- {"it","Disconnettersi"},
- {"zh-chs","登出"},
- {"pt-br","Sair"},
- {"sv","Logga ut"},
- {"es","Cerrar sesión"},
- {"hi","लॉग आउट"},
- {"de","Ausloggen"}
+ {"de",", {0} Nutzer"},
+ {"hi",", {0} उपयोगकर्ता"},
+ {"fr",", {0} utilisateurs"},
+ {"zh-chs",", {0} 个用户"},
+ {"fi",", {0} käyttäjää"},
+ {"tr",", {0} kullanıcı"},
+ {"cs",", Uživatelé: {0}"},
+ {"ja","、{0}ユーザー"},
+ {"es",", {0} usuarios"},
+ {"pl",", {0} użytkowników"},
+ {"pt",", {0} usuários"},
+ {"nl",", {0} gebruikers"},
+ {"pt-br",", {0} usuários"},
+ {"sv",", {0} användare"},
+ {"da",", {0} brugere"},
+ {"ko",", {0} 명의 사용자"},
+ {"it",", {0} utenti"},
+ {"ru",", Пользователей: {0}"}
}
},
{
- "Don't ask for {0} days.",
+ "SMS sent",
new Dictionary() {
- {"nl","Niet vragen voor {0} dagen."},
- {"ko","{0} 일을 요구하지 마세요."},
- {"fr","Ne demandez pas {0} jours."},
- {"it","Non chiedere per {0} giorni."},
- {"zh-chs","不要要求 {0} 天。"},
- {"pt-br","Não pergunte por {0} dias."},
- {"sv","Be inte om {0} dagar."},
- {"es","No pedir por {0} días."},
- {"hi","{0} दिनों के लिए मत पूछो।"},
- {"de","Frag nicht nach {0} Tagen."}
+ {"de","SMS gesendet"},
+ {"hi","एसएमएस भेजा गया"},
+ {"fr","SMS envoyé"},
+ {"zh-chs","短信发送"},
+ {"fi","SMS lähetetty"},
+ {"tr","SMS gönderildi"},
+ {"cs","SMS odeslána"},
+ {"ja","SMSが送信されました"},
+ {"es","SMS enviado"},
+ {"pl","SMS wysłany"},
+ {"pt","SMS enviado"},
+ {"nl","SMS verzonden"},
+ {"pt-br","SMS enviado"},
+ {"sv","SMS skickat"},
+ {"da","SMS sendt"},
+ {"ko","SMS 전송"},
+ {"it","SMS inviato"},
+ {"ru","SMS отправлено"}
}
},
{
- "Forward all keyboard keys",
+ "Remote Desktop Stats",
new Dictionary() {
- {"nl","Alle toetsenbordtoetsen doorsturen"},
- {"ko","모든 키보드 키 전달"},
- {"fr","Transférer toutes les touches du clavier"},
- {"it","Inoltra tutti i tasti della tastiera"},
- {"zh-chs","转发所有键盘键"},
- {"pt-br","Encaminhar todas as teclas do teclado"},
- {"sv","Vidarebefordra alla tangentbordstangenter"},
- {"es","Reenviar todas las teclas del teclado"},
- {"hi","सभी कीबोर्ड कुंजियों को अग्रेषित करें"},
- {"de","Alle Tastaturtasten weiterleiten"}
+ {"de","Remotedesktop-Statistiken"},
+ {"hi","दूरस्थ डेस्कटॉप आँकड़े"},
+ {"fr","Statistiques du bureau à distance"},
+ {"zh-chs","远程桌面统计"},
+ {"fi","Etätyöpöydän tilastot"},
+ {"tr","Uzak Masaüstü İstatistikleri"},
+ {"cs","Statistiky vzdálené plochy"},
+ {"ja","リモートデスクトップ統計"},
+ {"es","Estadísticas de Escritorio Remoto"},
+ {"pl","Statystyki Zdalnego Pulpitu"},
+ {"pt","Estatísticas da área de trabalho remota"},
+ {"nl","Extern bureaublad statistieken"},
+ {"pt-br","Estatísticas da área de trabalho remota"},
+ {"sv","Statistik för fjärrskrivbord"},
+ {"da","Statistik for fjernskrivebord"},
+ {"ko","원격 데스크톱 통계"},
+ {"it","Statistiche desktop remoto"},
+ {"ru","Статистика удаленного рабочего стола"}
+ }
+ },
+ {
+ "PuTTY SSH client",
+ new Dictionary() {
+ {"de","PuTTY SSH-Client"},
+ {"hi","पुटी एसएसएच क्लाइंट"},
+ {"fr","Client SSH PuTTY"},
+ {"zh-chs","PuTTY SSH 客户端"},
+ {"fi","PuTTY SSH -asiakas"},
+ {"tr","PuTTY SSH istemcisi"},
+ {"cs","Klient PuTTY SSH"},
+ {"ja","PuTTYSSHクライアント"},
+ {"es","Cliente PuTTY SSH"},
+ {"pl","Klient PuTTY SSH"},
+ {"pt","Cliente PuTTY SSH"},
+ {"pt-br","Cliente PuTTY SSH"},
+ {"sv","PuTTY SSH-klient"},
+ {"da","PuTTY SSH-klient"},
+ {"ko","PuTTY SSH 클라이언트"},
+ {"ru","Клиент PuTTY SSH"}
+ }
+ },
+ {
+ "SMS",
+ new Dictionary() {
+ {"hi","एसएमएस"},
+ {"zh-cht","短信"},
+ {"zh-chs","短信"},
+ {"fi","Tekstiviesti"},
+ {"ru","смс"}
+ }
+ },
+ {
+ "Login",
+ new Dictionary() {
+ {"de","Anmeldung"},
+ {"hi","लॉग इन करें"},
+ {"fr","Connexion"},
+ {"zh-cht","登入"},
+ {"zh-chs","登录"},
+ {"fi","Kirjaudu sisään"},
+ {"tr","Oturum aç"},
+ {"cs","Přihlášení"},
+ {"ja","ログイン"},
+ {"es","Iniciar sesión"},
+ {"pl","Logowanie"},
+ {"pt","Entrar"},
+ {"nl","Inloggen"},
+ {"pt-br","Conecte-se"},
+ {"sv","Logga in"},
+ {"ko","로그인"},
+ {"ru","Войти"}
+ }
+ },
+ {
+ "SSH Username",
+ new Dictionary() {
+ {"de","SSH-Benutzername"},
+ {"hi","एसएसएच उपयोगकर्ता नाम"},
+ {"fr","Nom d'utilisateur SSH"},
+ {"zh-chs","SSH 用户名"},
+ {"fi","SSH -käyttäjänimi"},
+ {"tr","SSH Kullanıcı Adı"},
+ {"cs","Uživatelské jméno SSH"},
+ {"ja","SSHユーザー名"},
+ {"es","Nombre de usuario SSH"},
+ {"pl","Nazwa Użytkownika SSH"},
+ {"pt","Nome de usuário SSH"},
+ {"nl","SSH gebruikersnaam"},
+ {"pt-br","Nome de usuário SSH"},
+ {"sv","SSH-användarnamn"},
+ {"da","SSH brugernavn"},
+ {"ko","SSH 사용자 이름"},
+ {"it","Nome utente SSH"},
+ {"ru","Имя пользователя SSH"}
+ }
+ },
+ {
+ "Set RDP port...",
+ new Dictionary() {
+ {"de","RDP-Port einstellen..."},
+ {"hi","आरडीपी पोर्ट सेट करें..."},
+ {"fr","Définir le port RDP..."},
+ {"zh-chs","设置 RDP 端口..."},
+ {"fi","Aseta RDP -portti ..."},
+ {"tr","RDP bağlantı noktasını ayarla..."},
+ {"cs","Nastavit port RDP ..."},
+ {"ja","RDPポートを設定します。"},
+ {"es","Establecer puerto RDP ..."},
+ {"pl","Ustaw port RDP..."},
+ {"pt","Definir porta RDP ..."},
+ {"nl","RDP poort instellen..."},
+ {"pt-br","Definir porta RDP ..."},
+ {"sv","Ställ in RDP-port ..."},
+ {"da","Sæt RDP port..."},
+ {"ko","RDP 포트 설정 ..."},
+ {"it","Imposta porta RDP..."},
+ {"ru","Установить порт RDP ..."}
+ }
+ },
+ {
+ "Transfer Errors",
+ new Dictionary() {
+ {"de","Übertragungsfehler"},
+ {"hi","स्थानांतरण त्रुटियाँ"},
+ {"fr","Erreurs de transfert "},
+ {"zh-chs","传输错误"},
+ {"fi","Siirtovirheet"},
+ {"tr","Aktarım Hataları"},
+ {"cs","Chyby přenosu"},
+ {"ja","転送エラー"},
+ {"es","Errores de transferencia"},
+ {"pl","Błędy transferu"},
+ {"pt","Erros de transferência"},
+ {"nl","Overdrachtsfouten"},
+ {"pt-br","Errores de transferencia"},
+ {"sv","Överföringsfel"},
+ {"da","Overførselsfejl"},
+ {"ko","전송 오류"},
+ {"it","Errori di trasferimento"},
+ {"ru","Ошибки передачи"}
+ }
+ },
+ {
+ "S&ettings...",
+ new Dictionary() {
+ {"de","Die Einstellungen..."},
+ {"hi","समायोजन..."},
+ {"fr","Paramètres..."},
+ {"zh-chs","设置(&E)..."},
+ {"fi","Asetukset..."},
+ {"tr","&ayarlar..."},
+ {"cs","S & ettings ..."},
+ {"ja","設定..."},
+ {"es","A&justes..."},
+ {"pl","U&stawienia..."},
+ {"pt","Definições..."},
+ {"nl","Instellingen..."},
+ {"pt-br","Configurações..."},
+ {"sv","Inställningar..."},
+ {"ko","설정 (& E) ..."},
+ {"ru","Настройки..."}
+ }
+ },
+ {
+ "Password",
+ new Dictionary() {
+ {"de","Passwort"},
+ {"hi","कुंजिका"},
+ {"fr","Mot de passe"},
+ {"zh-cht","密碼"},
+ {"zh-chs","密码"},
+ {"fi","Salasana"},
+ {"tr","Parola"},
+ {"cs","Heslo"},
+ {"ja","パスワード"},
+ {"es","Contraseña"},
+ {"pl","Hasło"},
+ {"pt","Senha"},
+ {"nl","Wachtwoord"},
+ {"pt-br","Senha"},
+ {"sv","Lösenord"},
+ {"da","Kodeord"},
+ {"ko","암호"},
+ {"ru","Пароль"}
+ }
+ },
+ {
+ "Name",
+ new Dictionary() {
+ {"hi","नाम"},
+ {"fr","Nom"},
+ {"zh-cht","名稱"},
+ {"zh-chs","名称"},
+ {"fi","Nimi"},
+ {"tr","İsim"},
+ {"cs","Jméno/název"},
+ {"ja","名"},
+ {"es","Nombre"},
+ {"pl","Nazwa"},
+ {"pt","Nome"},
+ {"nl","Naam"},
+ {"pt-br","Nome"},
+ {"sv","Namn"},
+ {"da","Navn"},
+ {"ko","이름"},
+ {"it","Nome"},
+ {"ru","Имя"}
+ }
+ },
+ {
+ "Add Map...",
+ new Dictionary() {
+ {"de","Karte hinzufügen..."},
+ {"hi","नक्शा जोड़ें..."},
+ {"fr","Ajouter une carte..."},
+ {"zh-chs","添加地图..."},
+ {"fi","Lisää kartta ..."},
+ {"tr","Harita Ekle..."},
+ {"cs","Přidat mapu ..."},
+ {"ja","地図を追加..."},
+ {"es","Agregar mapa ..."},
+ {"pl","Dodaj Mapę..."},
+ {"pt","Adicionar mapa ..."},
+ {"nl","Kaart toevoegen..."},
+ {"pt-br","Adicionar mapa ..."},
+ {"sv","Lägg till karta ..."},
+ {"da","Tilføj kort..."},
+ {"ko","지도 추가 ..."},
+ {"it","Aggiungi mappa..."},
+ {"ru","Добавить карту ..."}
+ }
+ },
+ {
+ "Outgoing Bytes",
+ new Dictionary() {
+ {"de","Ausgehende Bytes"},
+ {"hi","आउटगोइंग बाइट्स"},
+ {"fr","Octets sortants"},
+ {"zh-chs","传出字节"},
+ {"fi","Lähtevät tavut"},
+ {"tr","Giden Bayt"},
+ {"cs","Odchozí bajty"},
+ {"ja","発信バイト"},
+ {"es","Bytes Salientes"},
+ {"pl","Bajty Wychodzące"},
+ {"pt","Bytes de saída"},
+ {"nl","Uitgaande Bytes"},
+ {"pt-br","Bytes de saída"},
+ {"sv","Utgående byte"},
+ {"da","Udgående bytes"},
+ {"ko","나가는 바이트"},
+ {"it","Byte in uscita"},
+ {"ru","Исходящие байты"}
+ }
+ },
+ {
+ "Swap Mouse Buttons",
+ new Dictionary() {
+ {"de","Maustasten vertauschen"},
+ {"hi","माउस माउस को स्वैप करें"},
+ {"fr","Echanger les boutons de la souris"},
+ {"zh-cht","交換鼠標按鈕"},
+ {"zh-chs","交换鼠标按钮"},
+ {"fi","Vaihda hiiren painikkeet"},
+ {"tr","Fare Düğmelerini Değiştirin"},
+ {"cs","Zaměňte tlačítka myši"},
+ {"ja","マウスボタンを交換する"},
+ {"es","Cambiar Botones del Mouse"},
+ {"pl","Zamień Przyciski Myszy"},
+ {"pt","Botões de troca do mouse"},
+ {"nl","Wissel muisknoppen"},
+ {"pt-br","Trocar botões do mouse"},
+ {"sv","Byt musknappar"},
+ {"da","Byt museknapper"},
+ {"ko","마우스 버튼 교체"},
+ {"it","Scambia i pulsanti del mouse"},
+ {"ru","Поменять местами кнопки мыши"}
}
},
{
@@ -298,1747 +1830,26 @@ namespace MeshCentralRouter
}
},
{
- "Ask Consent",
- new Dictionary() {
- {"de","Einwilligung anfordern"},
- {"hi","सहमति से पूछें"},
- {"fr","Demander le consentement"},
- {"zh-cht","詢問同意"},
- {"zh-chs","询问同意"},
- {"fi","Pyydä Hyväksyntää"},
- {"tr","Onay isteyin"},
- {"cs","Požádat o souhlas"},
- {"ja","同意を求める"},
- {"es","Pedir Consentimiento"},
- {"pt","Peça consentimento"},
- {"nl","Vraag toestemming"},
- {"pt-br","Peça consentimento"},
- {"sv","Fråga samtycke"},
- {"ko","연결 요청"},
- {"it","Chiedi il consenso"},
- {"ru","Спросите согласия"}
- }
- },
- {
- "Add &Map...",
- new Dictionary() {
- {"nl","&Toewijzing toevoegen..."},
- {"ko","지도 추가 ..."},
- {"fr","Ajouter une &carte..."},
- {"it","Aggiungi &mappa..."},
- {"zh-chs","添加地图 (&M)..."},
- {"pt-br","Adicionar & mapear ..."},
- {"sv","Lägg till & mappa ..."},
- {"es","Agregar & mapa ..."},
- {"hi","नक्शा जोड़ें..."},
- {"de","&Zuordnen hinzufügen..."}
- }
- },
- {
- "Stopped",
- new Dictionary() {
- {"nl","Gestopt"},
- {"ko","중지됨"},
- {"fr","Arrêté"},
- {"it","Fermato"},
- {"zh-chs","停止"},
- {"pt-br","Parou"},
- {"sv","Stannade"},
- {"es","Detenido"},
- {"hi","रोका हुआ"},
- {"de","Gestoppt"}
- }
- },
- {
- "Two-factor Authentication",
- new Dictionary() {
- {"nl","Twee-factor authenticatie"},
- {"ko","2 단계 인증"},
- {"fr","Authentification à deux facteurs"},
- {"it","Autenticazione a due fattori"},
- {"zh-chs","两因素身份验证"},
- {"pt-br","Autenticação de dois fatores"},
- {"sv","Tvåfaktorsautentisering"},
- {"es","Autenticación de Dos Factores"},
- {"hi","दो तरीकों से प्रमाणीकरण"},
- {"de","Zwei-Faktor-Authentifizierung"}
- }
- },
- {
- "Update",
- new Dictionary() {
- {"de","Updates"},
- {"hi","अपडेट करें"},
- {"fr","Mettre à jour"},
- {"zh-cht","更新資料"},
- {"zh-chs","更新资料"},
- {"fi","Päivittää"},
- {"tr","Güncelleme"},
- {"cs","Aktualizace"},
- {"ja","更新"},
- {"es","Actualizar"},
- {"pt","Atualizar"},
- {"nl","Bijwerken"},
- {"pt-br","Atualizar"},
- {"sv","Uppdatering"},
- {"ko","개조하다"},
- {"it","Aggiornamenti"},
- {"ru","Обновить"}
- }
- },
- {
- "Quality",
- new Dictionary() {
- {"de","Qualität"},
- {"hi","गुणवत्ता"},
- {"fr","Qualité"},
- {"zh-cht","品質"},
- {"zh-chs","质量"},
- {"fi","Laatu"},
- {"tr","Kalite"},
- {"cs","Kvalita"},
- {"ja","品質"},
- {"es","Calidad"},
- {"pt","Qualidade"},
- {"nl","Kwaliteit"},
- {"pt-br","Qualidade"},
- {"sv","Kvalitet"},
- {"ko","품질"},
- {"it","Qualità"},
- {"ru","Качество"}
- }
- },
- {
- "View Certificate Details...",
- new Dictionary() {
- {"nl","Certificaatdetails bekijken..."},
- {"ko","인증서 세부 정보보기 ..."},
- {"fr","Afficher les détails du certificat..."},
- {"it","Visualizza dettagli certificato..."},
- {"zh-chs","查看证书详细信息..."},
- {"pt-br","Exibir detalhes do certificado ..."},
- {"sv","Visa certifikatinformation ..."},
- {"es","Ver Detalles del Certificado ..."},
- {"hi","प्रमाणपत्र विवरण देखें..."},
- {"de","Zertifikatdetails anzeigen..."}
- }
- },
- {
- "Remote Files...",
- new Dictionary() {
- {"nl","Externe bestanden..."},
- {"ko","원격 파일 ..."},
- {"fr","Fichiers distants..."},
- {"it","File remoti..."},
- {"zh-chs","远程文件..."},
- {"pt-br","Arquivos remotos ..."},
- {"sv","Fjärrfiler ..."},
- {"es","Archivos Remotos ..."},
- {"hi","दूरस्थ फ़ाइलें..."},
- {"de","Remote-Dateien..."}
- }
- },
- {
- ", Recorded Session",
- new Dictionary() {
- {"nl",", opgenomen sessie"},
- {"ko",", 녹화 된 세션"},
- {"fr",", Séance enregistrée"},
- {"it",", Sessione registrata"},
- {"zh-chs",", 录制会话"},
- {"pt-br",", Sessão Gravada"},
- {"sv",", Inspelad session"},
- {"es",", Sesión grabada"},
- {"hi",", रिकॉर्ड किया गया सत्र"},
- {"de",", Aufgezeichnete Sitzung"}
- }
- },
- {
- "Email verification required",
- new Dictionary() {
- {"nl","E-mailverificatie vereist"},
- {"ko","이메일 확인 필요"},
- {"fr","Vérification de l'e-mail requise"},
- {"it","Verifica e-mail richiesta"},
- {"zh-chs","需要电子邮件验证"},
- {"pt-br","Verificação de e-mail necessária"},
- {"sv","Verifiering av e-post krävs"},
- {"es","Se requiere verificación de correo electrónico"},
- {"hi","ईमेल सत्यापन आवश्यक"},
- {"de","E-Mail-Verifizierung erforderlich"}
- }
- },
- {
- "Ignore",
- new Dictionary() {
- {"nl","Negeren"},
- {"ko","무시"},
- {"fr","Ignorer"},
- {"it","Ignorare"},
- {"zh-chs","忽略"},
- {"pt-br","Ignorar"},
- {"sv","Strunta i"},
- {"es","Ignorar"},
- {"hi","नज़रअंदाज़ करना"},
- {"de","Ignorieren"}
- }
- },
- {
- "Relay Mapping",
- new Dictionary() {
- {"nl","Doorstuurtoewijzing"},
- {"ko","릴레이 매핑"},
- {"fr","Cartographie des relais"},
- {"it","Mappatura ritrasmissione"},
- {"zh-chs","中继映射"},
- {"pt-br","Mapeamento de retransmissão"},
- {"sv","Relämappning"},
- {"es","Mapeo de Relés"},
- {"hi","रिले मैपिंग"},
- {"de","Relaiszuordnung"}
- }
- },
- {
- ", {0} connections.",
- new Dictionary() {
- {"nl",", {0} verbindingen."},
- {"ko",", {0} 명 연결."},
- {"fr",", {0} connexions."},
- {"it",", {0} connessioni."},
- {"zh-chs",", {0} 个连接。"},
- {"pt-br",", {0} conexões."},
- {"sv",", {0} anslutningar."},
- {"es",", {0} conexiones."},
- {"hi",", {0} कनेक्शन।"},
- {"de",", {0} Verbindungen."}
- }
- },
- {
- "Enter the RDP port of the remote computer, the default RDP port is 3389.",
- new Dictionary() {
- {"nl","Voer de RDP poort van de externe computer in, de standaard RDP poort is 3389."},
- {"ko","원격 컴퓨터의 RDP 포트를 입력합니다. 기본 RDP 포트는 3389입니다."},
- {"fr","Entrez le port RDP de l'ordinateur distant, le port RDP par défaut est 3389."},
- {"it","Immettere la porta RDP del computer remoto, la porta RDP predefinita è 3389."},
- {"zh-chs","输入远程计算机的RDP端口,默认RDP端口为3389。"},
- {"pt-br","Insira a porta RDP do computador remoto, a porta RDP padrão é 3389."},
- {"sv","Ange RDP-porten på fjärrdatorn, standard-RDP-porten är 3389."},
- {"es","Ingresa el puerto RDP de la computadora remota, el puerto RDP predeterminado es 3389."},
- {"hi","दूरस्थ कंप्यूटर का RDP पोर्ट दर्ज करें, डिफ़ॉल्ट RDP पोर्ट 3389 है।"},
- {"de","Geben Sie den RDP-Port des Remote-Computers ein, der Standard-RDP-Port ist 3389."}
- }
- },
- {
- "Confirm Delete",
- new Dictionary() {
- {"nl","Verwijderen bevestigen"},
- {"ko","삭제 확인"},
- {"fr","Confirmation de la suppression"},
- {"it","Conferma cancellazione"},
- {"zh-chs","确认删除"},
- {"pt-br","Confirmar exclusão"},
- {"sv","Bekräfta radering"},
- {"es","Confirmar Eliminación"},
- {"hi","हटाने की पुष्टि करें"},
- {"de","Löschen bestätigen"}
- }
- },
- {
- "Updating...",
- new Dictionary() {
- {"nl","Bijwerken..."},
- {"ko","업데이트 중 ..."},
- {"fr","Mise à jour..."},
- {"it","In aggiornamento..."},
- {"zh-chs","正在更新..."},
- {"pt-br","Atualizando ..."},
- {"sv","Uppdaterar ..."},
- {"es","Actualizando ..."},
- {"hi","अपडेट हो रहा है..."},
- {"de","Aktualisierung..."}
- }
- },
- {
- "&Delete",
- new Dictionary() {
- {"nl","&Verwijderen"},
- {"ko","&지우다"},
- {"fr","&Effacer"},
- {"it","&Elimina"},
- {"zh-chs","&删除"},
- {"pt-br","&Excluir"},
- {"sv","&Radera"},
- {"es","&Borrar"},
- {"hi","&हटाएं"},
- {"de","&Löschen"}
- }
- },
- {
- "&Info...",
- new Dictionary() {
- {"ko","정보 ..."},
- {"zh-chs","&信息..."},
- {"pt-br","& Info ..."},
- {"es","&Info ..."},
- {"hi","जानकारी..."}
- }
- },
- {
- "Invalid username or password",
- new Dictionary() {
- {"nl","Ongeldige gebruikersnaam of wachtwoord"},
- {"ko","잘못된 사용자 이름 또는 비밀번호"},
- {"fr","Nom d'utilisateur ou mot de passe invalide"},
- {"it","Username o password non validi"},
- {"zh-chs","无效的用户名或密码"},
- {"pt-br","nome de usuário ou senha inválidos"},
- {"sv","Ogiltigt användarnamn eller lösenord"},
- {"es","Usuario o contraseña invalido"},
- {"hi","अमान्य उपयोगकर्ता नाम या पासवर्ड"},
- {"de","ungültiger Benutzername oder Passwort"}
- }
- },
- {
- "Rename File",
- new Dictionary() {
- {"nl","Bestand hernoemen"},
- {"ko","파일명 변경"},
- {"fr","Renommer le fichier"},
- {"it","Rinomina il file"},
- {"zh-chs","重新命名文件"},
- {"pt-br","Renomear arquivo"},
- {"sv","Döp om fil"},
- {"es","Renombrar Archivo"},
- {"hi","फाइल का नाम बदलो"},
- {"de","Datei umbenennen"}
- }
- },
- {
- "Email",
- new Dictionary() {
- {"de","E-Mail"},
- {"hi","ईमेल"},
- {"zh-cht","電郵"},
- {"zh-chs","电邮"},
- {"fi","Sähköposti"},
- {"tr","E-posta"},
- {"cs","E-mail"},
- {"ja","Eメール"},
- {"es","Correo electrónico"},
- {"nl","E-mail"},
- {"pt-br","E-mail"},
- {"sv","E-post"},
- {"ko","이메일"},
- {"it","E-mail"}
- }
- },
- {
- "Display connection statistics",
- new Dictionary() {
- {"nl","Verbindingsstatistieken weergeven"},
- {"ko","연결 통계 표시"},
- {"fr","Afficher les statistiques de connexion"},
- {"it","Visualizza le statistiche di connessione"},
- {"zh-chs","显示连接统计"},
- {"pt-br","Exibir estatísticas de conexão"},
- {"sv","Visa anslutningsstatistik"},
- {"es","Mostrar estadísticas de conexión"},
- {"hi","कनेक्शन आंकड़े प्रदर्शित करें"},
- {"de","Verbindungsstatistik anzeigen"}
- }
- },
- {
- "ServerName",
- new Dictionary