From d2349bd713b2946be725f810f581016664809626 Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Tue, 14 Sep 2021 12:03:01 +0100 Subject: [PATCH 1/8] merge with new options --- CHANGELOG.md | 1 + mRemoteNG/App/Runtime.cs | 4 + mRemoteNG/App/Shutdown.cs | 29 +++- .../ConnectionsBackupFrequencyEnum.cs | 13 ++ .../Connections/SaveConnectionsOnEdit.cs | 13 +- mRemoteNG/Connection/ConnectionsService.cs | 1 + mRemoteNG/Properties/Resources.Designer.cs | 5 +- mRemoteNG/Properties/Resources.resx | 3 + mRemoteNG/Properties/Settings.Designer.cs | 12 ++ mRemoteNG/Properties/Settings.settings | 3 + mRemoteNG/Resources/Backup_Icon.ico | Bin 0 -> 45451 bytes mRemoteNG/Resources/Icons/Backup_Icon.ico | Bin 0 -> 240126 bytes .../Resources/Language/Language.Designer.cs | 132 ++++++++++---- mRemoteNG/Resources/Language/Language.resx | 33 +++- mRemoteNG/Resources/test.ico | Bin 0 -> 45451 bytes .../Forms/OptionsPages/BackupPage.Designer.cs | 164 ++++++++++++++++++ mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs | 149 ++++++++++++++++ .../UI/Forms/OptionsPages/BackupPage.resx | 119 +++++++++++++ .../UI/Forms/OptionsPages/ConnectionsPage.cs | 74 ++++---- .../UI/Forms/OptionsPages/OptionsPage.cs | 11 ++ .../UI/Forms/OptionsPages/StartupExitPage.cs | 3 - mRemoteNG/UI/Forms/frmOptions.cs | 2 + mRemoteNG/app.config | 9 +- mRemoteNG/mRemoteNG.csproj | 14 ++ .../user_interface/options.rst | 39 +++-- 25 files changed, 731 insertions(+), 102 deletions(-) create mode 100644 mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs create mode 100644 mRemoteNG/Resources/Backup_Icon.ico create mode 100644 mRemoteNG/Resources/Icons/Backup_Icon.ico create mode 100644 mRemoteNG/Resources/test.ico create mode 100644 mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs create mode 100644 mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs create mode 100644 mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx diff --git a/CHANGELOG.md b/CHANGELOG.md index 52af0484..8a12522c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] ### Added +- #1476: Configurable backups. Can now edit/set backup frequency, backup path, and max number of backup files. - #1427: Fix RDP local desktop scale not taking effect on remote - #1770: Added missing RDP performance settings - #1332: Added option to hide menu strip container diff --git a/mRemoteNG/App/Runtime.cs b/mRemoteNG/App/Runtime.cs index 23d0e3aa..bf34daf5 100644 --- a/mRemoteNG/App/Runtime.cs +++ b/mRemoteNG/App/Runtime.cs @@ -102,6 +102,10 @@ namespace mRemoteNG.App if (Settings.Default.UseSQLServer) { ConnectionsService.LastSqlUpdate = DateTime.Now; + } + else + { + ConnectionsService.LastFileUpdate = System.IO.File.GetLastWriteTime(connectionFileName); } // re-enable sql update checking after updates are loaded diff --git a/mRemoteNG/App/Shutdown.cs b/mRemoteNG/App/Shutdown.cs index dd06609e..0c99155c 100644 --- a/mRemoteNG/App/Shutdown.cs +++ b/mRemoteNG/App/Shutdown.cs @@ -2,6 +2,7 @@ using System; using System.Diagnostics; using System.Windows.Forms; +using mRemoteNG.Config.Connections; using mRemoteNG.Config.Putty; using mRemoteNG.Properties; using mRemoteNG.Resources.Language; @@ -60,8 +61,34 @@ namespace mRemoteNG.App private static void SaveConnections() { - if (Settings.Default.SaveConsOnExit) + DateTime lastUpdate; + DateTime updateDate; + DateTime currentDate = DateTime.Now; + + //OBSOLETE: Settings.Default.SaveConsOnExit is obsolete and should be removed in a future release + if (Settings.Default.SaveConsOnExit || (Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnExit)) + { Runtime.ConnectionsService.SaveConnections(); + return; + } + lastUpdate = Runtime.ConnectionsService.UsingDatabase ? Runtime.ConnectionsService.LastSqlUpdate : Runtime.ConnectionsService.LastFileUpdate; + + switch (Settings.Default.SaveConnectionsFrequency) + { + case (int)ConnectionsBackupFrequencyEnum.Daily: + updateDate = lastUpdate.AddDays(1); + break; + case (int)ConnectionsBackupFrequencyEnum.Weekly: + updateDate = lastUpdate.AddDays(7); + break; + default: + return; + } + + if (currentDate >= updateDate) + { + Runtime.ConnectionsService.SaveConnections(); + } } private static void SaveSettings(Control quickConnectToolStrip, diff --git a/mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs b/mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs new file mode 100644 index 00000000..03967d3e --- /dev/null +++ b/mRemoteNG/Config/Connections/ConnectionsBackupFrequencyEnum.cs @@ -0,0 +1,13 @@ +namespace mRemoteNG.Config.Connections +{ + public enum ConnectionsBackupFrequencyEnum + { + Unassigned = 0, + Never = 1, + OnEdit = 2, + OnExit = 3, + Daily = 4, + Weekly = 5, + Custom = 6 + } +} \ No newline at end of file diff --git a/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs b/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs index e8a31d5e..168d42c9 100644 --- a/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs +++ b/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs @@ -3,6 +3,7 @@ using System.Collections.Specialized; using System.ComponentModel; using mRemoteNG.Connection; using mRemoteNG.UI.Forms; +using mRemoteNG.Properties; namespace mRemoteNG.Config.Connections { @@ -48,12 +49,14 @@ namespace mRemoteNG.Config.Connections private void SaveConnectionOnEdit(string propertyName = "") { - if (!Properties.Settings.Default.SaveConnectionsAfterEveryEdit) - return; - if (FrmMain.Default.IsClosing) - return; + //OBSOLETE: mRemoteNG.Settings.Default.SaveConnectionsAfterEveryEdit is obsolete and should be removed in a future release + if (mRemoteNG.Properties.Settings.Default.SaveConnectionsAfterEveryEdit || (mRemoteNG.Properties.Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnEdit)) + { + if (FrmMain.Default.IsClosing) + return; - _connectionsService.SaveConnectionsAsync(propertyName); + _connectionsService.SaveConnectionsAsync(propertyName); + } } } } \ No newline at end of file diff --git a/mRemoteNG/Connection/ConnectionsService.cs b/mRemoteNG/Connection/ConnectionsService.cs index ced89190..bb26bd68 100644 --- a/mRemoteNG/Connection/ConnectionsService.cs +++ b/mRemoteNG/Connection/ConnectionsService.cs @@ -37,6 +37,7 @@ namespace mRemoteNG.Connection public string ConnectionFileName { get; private set; } public RemoteConnectionsSyncronizer RemoteConnectionsSyncronizer { get; set; } public DateTime LastSqlUpdate { get; set; } + public DateTime LastFileUpdate { get; set; } public ConnectionTreeModel ConnectionTreeModel { get; private set; } diff --git a/mRemoteNG/Properties/Resources.Designer.cs b/mRemoteNG/Properties/Resources.Designer.cs index a047b0d3..ce1c38bf 100644 --- a/mRemoteNG/Properties/Resources.Designer.cs +++ b/mRemoteNG/Properties/Resources.Designer.cs @@ -8,7 +8,10 @@ // //------------------------------------------------------------------------------ -namespace mRemoteNG.Properties { +namespace mRemoteNG { + using System; + + using System; diff --git a/mRemoteNG/Properties/Resources.resx b/mRemoteNG/Properties/Resources.resx index 14830220..406baadf 100644 --- a/mRemoteNG/Properties/Resources.resx +++ b/mRemoteNG/Properties/Resources.resx @@ -331,4 +331,7 @@ ..\Resources\StartupProject_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\test.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/mRemoteNG/Properties/Settings.Designer.cs b/mRemoteNG/Properties/Settings.Designer.cs index 15db67a9..f1b63a70 100644 --- a/mRemoteNG/Properties/Settings.Designer.cs +++ b/mRemoteNG/Properties/Settings.Designer.cs @@ -2915,6 +2915,18 @@ namespace mRemoteNG.Properties { } } + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public int SaveConnectionsFrequency { + get { + return ((int)(this["SaveConnectionsFrequency"])); + } + set { + this["SaveConnectionsFrequency"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("Highest")] diff --git a/mRemoteNG/Properties/Settings.settings b/mRemoteNG/Properties/Settings.settings index 6fb5fd1e..e0552004 100644 --- a/mRemoteNG/Properties/Settings.settings +++ b/mRemoteNG/Properties/Settings.settings @@ -725,6 +725,9 @@ False + + 0 + Highest diff --git a/mRemoteNG/Resources/Backup_Icon.ico b/mRemoteNG/Resources/Backup_Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8aa98e515dae1fd85d0df9997de54ed10730c400 GIT binary patch literal 45451 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 I@_Fh10YBW>hyVZp literal 0 HcmV?d00001 diff --git a/mRemoteNG/Resources/Icons/Backup_Icon.ico b/mRemoteNG/Resources/Icons/Backup_Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..86340997e61f392e765a650e0f3f19f6099ed5b2 GIT binary patch literal 240126 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

JFF&)+Tv&Y!Ry>z3H&r88B3XolNmKAzI~v17>; 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

^Y2?80;JZqj7&-l27t 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 KtOcG?3;h2e0$n5k literal 0 HcmV?d00001 diff --git a/mRemoteNG/Resources/Language/Language.Designer.cs b/mRemoteNG/Resources/Language/Language.Designer.cs index e96f1fe6..40091eb1 100644 --- a/mRemoteNG/Resources/Language/Language.Designer.cs +++ b/mRemoteNG/Resources/Language/Language.Designer.cs @@ -8,7 +8,11 @@ // //------------------------------------------------------------------------------ -namespace mRemoteNG.Resources.Language { +namespace mRemoteNG.Resources.Language +{ + using System; + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -85,7 +89,7 @@ namespace mRemoteNG.Resources.Language { } /// - /// Looks up a localized string similar to &Warn me when closing connections. + /// Looks up a localized string similar to Warn me when closing connections. /// internal static string _CloseWarnAll { get { @@ -1287,6 +1291,51 @@ namespace mRemoteNG.Resources.Language { } } + /// + /// Looks up a localized string similar to Daily. + /// + internal static string ConnectionsBackupFrequencyDaily { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyDaily", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Never backup connections. + /// + internal static string ConnectionsBackupFrequencyNever { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyNever", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to On Edit. + /// + internal static string ConnectionsBackupFrequencyOnEdit { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyOnEdit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to On Exit. + /// + internal static string ConnectionsBackupFrequencyOnExit { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyOnExit", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly. + /// + internal static string ConnectionsBackupFrequencyWeekly { + get { + return ResourceManager.GetString("ConnectionsBackupFrequencyWeekly", resourceCulture); + } + } + /// /// Looks up a localized string similar to Couldn't set default port!. /// @@ -4219,7 +4268,7 @@ namespace mRemoteNG.Resources.Language { } /// - /// Looks up a localized string similar to Start Program. + /// Looks up a localized string similar to Start Program/alternate shell. /// internal static string PropertyDescriptionStartProgram { get { @@ -5364,15 +5413,6 @@ namespace mRemoteNG.Resources.Language { } } - /// - /// Looks up a localized string similar to Save connections on exit. - /// - internal static string SaveConsOnExit { - get { - return ResourceManager.GetString("SaveConsOnExit", resourceCulture); - } - } - /// /// Looks up a localized string similar to Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group File (.jpeg)|*.jpeg|Joint Photographic Experts Group File (.jpg)|*.jpg|Portable Network Graphics File (.png)|*.png. /// @@ -5625,15 +5665,6 @@ namespace mRemoteNG.Resources.Language { } } - /// - /// Looks up a localized string similar to Start Program. - /// - internal static string StartProgram { - get { - return ResourceManager.GetString("StartProgram", resourceCulture); - } - } - /// /// Looks up a localized string similar to Socks 5. /// @@ -5849,18 +5880,16 @@ namespace mRemoteNG.Resources.Language { return ResourceManager.GetString("StartMinimized", resourceCulture); } } - + /// - /// Looks up a localized string similar to Start minimized. + /// Looks up a localized string similar to Start Program. /// - internal static string StartFullScreen - { - get - { - return ResourceManager.GetString("StartFullScreen", resourceCulture); + internal static string StartProgram { + get { + return ResourceManager.GetString("StartProgram", resourceCulture); } } - + /// /// Looks up a localized string similar to Startup/Exit. /// @@ -5879,6 +5908,51 @@ namespace mRemoteNG.Resources.Language { } } + /// + /// Looks up a localized string similar to Backup. + /// + internal static string strBackup { + get { + return ResourceManager.GetString("strBackup", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Browse.... + /// + internal static string strBrowse { + get { + return ResourceManager.GetString("strBrowse", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Connection Backup Frequency. + /// + internal static string strConnectionBackupFrequency { + get { + return ResourceManager.GetString("strConnectionBackupFrequency", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Maximum number of backups. + /// + internal static string strConnectionsBackupMaxCount { + get { + return ResourceManager.GetString("strConnectionsBackupMaxCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Location of connection file backup. + /// + internal static string strConnectionsBackupPath { + get { + return ResourceManager.GetString("strConnectionsBackupPath", resourceCulture); + } + } + /// /// Looks up a localized string similar to Support Forum. /// diff --git a/mRemoteNG/Resources/Language/Language.resx b/mRemoteNG/Resources/Language/Language.resx index 62289db3..429b03c5 100644 --- a/mRemoteNG/Resources/Language/Language.resx +++ b/mRemoteNG/Resources/Language/Language.resx @@ -1313,7 +1313,7 @@ If you run into such an error, please create a new connection file! Creating quick connect failed - &Warn me when closing connections + Warn me when closing connections Warn me only when e&xiting mRemoteNG @@ -1483,8 +1483,35 @@ If you run into such an error, please create a new connection file! Do you want to save the current connections file before loading another? - - Save connections on exit + + Daily + + + Connection Backup Frequency + + + Weekly + + + Maximum number of backups + + + Location of connection file backup + + + On Edit + + + On Exit + + + Never backup connections + + + Browse... + + + Backup Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group File (.jpeg)|*.jpeg|Joint Photographic Experts Group File (.jpg)|*.jpg|Portable Network Graphics File (.png)|*.png diff --git a/mRemoteNG/Resources/test.ico b/mRemoteNG/Resources/test.ico new file mode 100644 index 0000000000000000000000000000000000000000..5d06b9f2857b39f0b5d3395e3e7999ba6bcc3a38 GIT binary patch literal 45451 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 literal 0 HcmV?d00001 diff --git a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs new file mode 100644 index 00000000..2e28e94d --- /dev/null +++ b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.Designer.cs @@ -0,0 +1,164 @@ + + +namespace mRemoteNG.UI.Forms.OptionsPages +{ + + public sealed partial class BackupPage : OptionsPage + { + + //UserControl overrides dispose to clean up the component list. + [System.Diagnostics.DebuggerNonUserCode()]protected override void Dispose(bool disposing) + { + try + { + if (disposing && components != null) + { + components.Dispose(); + } + } + finally + { + base.Dispose(disposing); + } + } + + //Required by the Windows Form Designer + private System.ComponentModel.Container components = null; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough()]private void InitializeComponent() + { + this.tableLayoutPanelBackupFile = new System.Windows.Forms.TableLayoutPanel(); + this.textBoxConnectionBackupPath = new System.Windows.Forms.TextBox(); + this.lblConnectionsBackupPath = new System.Windows.Forms.Label(); + this.lblConnectionsBackupFrequency = new System.Windows.Forms.Label(); + this.lblConnectionsBackupMaxCount = new System.Windows.Forms.Label(); + this.cmbConnectionBackupFrequency = new System.Windows.Forms.ComboBox(); + this.buttonBrowsePath = new System.Windows.Forms.Button(); + this.numMaxBackups = new System.Windows.Forms.NumericUpDown(); + this.tableLayoutPanelBackupFile.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numMaxBackups)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanelBackupFile + // + this.tableLayoutPanelBackupFile.ColumnCount = 4; + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanelBackupFile.Controls.Add(this.textBoxConnectionBackupPath, 1, 2); + this.tableLayoutPanelBackupFile.Controls.Add(this.lblConnectionsBackupPath, 0, 2); + this.tableLayoutPanelBackupFile.Controls.Add(this.lblConnectionsBackupFrequency, 0, 0); + this.tableLayoutPanelBackupFile.Controls.Add(this.lblConnectionsBackupMaxCount, 0, 1); + this.tableLayoutPanelBackupFile.Controls.Add(this.cmbConnectionBackupFrequency, 1, 0); + this.tableLayoutPanelBackupFile.Controls.Add(this.buttonBrowsePath, 2, 2); + this.tableLayoutPanelBackupFile.Controls.Add(this.numMaxBackups, 1, 1); + this.tableLayoutPanelBackupFile.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelBackupFile.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelBackupFile.Name = "tableLayoutPanelBackupFile"; + this.tableLayoutPanelBackupFile.RowCount = 4; + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelBackupFile.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanelBackupFile.Size = new System.Drawing.Size(630, 412); + this.tableLayoutPanelBackupFile.TabIndex = 15; + // + // textBoxConnectionBackupPath + // + this.textBoxConnectionBackupPath.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxConnectionBackupPath.Location = new System.Drawing.Point(195, 58); + this.textBoxConnectionBackupPath.Name = "textBoxConnectionBackupPath"; + this.textBoxConnectionBackupPath.Size = new System.Drawing.Size(250, 22); + this.textBoxConnectionBackupPath.TabIndex = 14; + // + // lblConnectionsBackupPath + // + this.lblConnectionsBackupPath.AutoSize = true; + this.lblConnectionsBackupPath.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblConnectionsBackupPath.Location = new System.Drawing.Point(3, 55); + this.lblConnectionsBackupPath.Name = "lblConnectionsBackupPath"; + this.lblConnectionsBackupPath.Size = new System.Drawing.Size(186, 29); + this.lblConnectionsBackupPath.TabIndex = 13; + this.lblConnectionsBackupPath.Text = "Location of connection file backup"; + this.lblConnectionsBackupPath.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblConnectionsBackupFrequency + // + this.lblConnectionsBackupFrequency.AutoSize = true; + this.lblConnectionsBackupFrequency.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblConnectionsBackupFrequency.Location = new System.Drawing.Point(3, 0); + this.lblConnectionsBackupFrequency.Name = "lblConnectionsBackupFrequency"; + this.lblConnectionsBackupFrequency.Size = new System.Drawing.Size(186, 27); + this.lblConnectionsBackupFrequency.TabIndex = 14; + this.lblConnectionsBackupFrequency.Text = "Connection Backup Frequency"; + this.lblConnectionsBackupFrequency.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // lblConnectionsBackupMaxCount + // + this.lblConnectionsBackupMaxCount.AutoSize = true; + this.lblConnectionsBackupMaxCount.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblConnectionsBackupMaxCount.Location = new System.Drawing.Point(3, 27); + this.lblConnectionsBackupMaxCount.Name = "lblConnectionsBackupMaxCount"; + this.lblConnectionsBackupMaxCount.Size = new System.Drawing.Size(186, 28); + this.lblConnectionsBackupMaxCount.TabIndex = 13; + this.lblConnectionsBackupMaxCount.Text = "Maximum number of backups"; + this.lblConnectionsBackupMaxCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cmbConnectionBackupFrequency + // + this.cmbConnectionBackupFrequency.Dock = System.Windows.Forms.DockStyle.Fill; + this.cmbConnectionBackupFrequency.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbConnectionBackupFrequency.FormattingEnabled = true; + this.cmbConnectionBackupFrequency.Location = new System.Drawing.Point(195, 3); + this.cmbConnectionBackupFrequency.Name = "cmbConnectionBackupFrequency"; + this.cmbConnectionBackupFrequency.Size = new System.Drawing.Size(250, 21); + this.cmbConnectionBackupFrequency.TabIndex = 13; + // + // buttonBrowsePath + // + this.buttonBrowsePath.Location = new System.Drawing.Point(451, 58); + this.buttonBrowsePath.Name = "buttonBrowsePath"; + this.buttonBrowsePath.Size = new System.Drawing.Size(75, 23); + this.buttonBrowsePath.TabIndex = 15; + this.buttonBrowsePath.Text = "Browse"; + this.buttonBrowsePath.UseVisualStyleBackColor = true; + this.buttonBrowsePath.Click += new System.EventHandler(this.ButtonBrowsePath_Click); + // + // numMaxBackups + // + this.numMaxBackups.Location = new System.Drawing.Point(195, 30); + this.numMaxBackups.Name = "numMaxBackups"; + this.numMaxBackups.Size = new System.Drawing.Size(60, 22); + this.numMaxBackups.TabIndex = 16; + // + // BackupPage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.tableLayoutPanelBackupFile); + this.Name = "BackupPage"; + this.Size = new System.Drawing.Size(630, 412); + this.tableLayoutPanelBackupFile.ResumeLayout(false); + this.tableLayoutPanelBackupFile.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numMaxBackups)).EndInit(); + this.ResumeLayout(false); + + } + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBackupFile; + private System.Windows.Forms.TextBox textBoxConnectionBackupPath; + private System.Windows.Forms.Label lblConnectionsBackupPath; + private System.Windows.Forms.Label lblConnectionsBackupFrequency; + private System.Windows.Forms.Label lblConnectionsBackupMaxCount; + private System.Windows.Forms.ComboBox cmbConnectionBackupFrequency; + private System.Windows.Forms.Button buttonBrowsePath; + private System.Windows.Forms.NumericUpDown numMaxBackups; + } +} \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs new file mode 100644 index 00000000..6e85520c --- /dev/null +++ b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs @@ -0,0 +1,149 @@ +using mRemoteNG.Config; +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using mRemoteNG.App; +using mRemoteNG.Config.Connections; +using mRemoteNG.Security; +using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; + +namespace mRemoteNG.UI.Forms.OptionsPages +{ + public sealed partial class BackupPage + { + private readonly FrmMain _frmMain = FrmMain.Default; + private List _connectionBackup; + + public BackupPage() + { + InitializeComponent(); + ApplyTheme(); + PageIcon = Properties.Resources.Backup_Icon; + } + + public override string PageName + { + get => Language.strBackup; + set { } + } + + public override void ApplyLanguage() + { + base.ApplyLanguage(); + + buttonBrowsePath.Text = Language.strBrowse; + + _connectionBackup = new List + { + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.Never, + Language.ConnectionsBackupFrequencyNever) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.OnEdit, + Language.ConnectionsBackupFrequencyOnEdit) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.OnExit, + Language.ConnectionsBackupFrequencyOnExit) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.Daily, + Language.ConnectionsBackupFrequencyDaily) + }, + { + new DropdownList((int) ConnectionsBackupFrequencyEnum.Weekly, + Language.ConnectionsBackupFrequencyWeekly) + }, + //{ new DropdownList( (int)ConnectionsBackupFrequencyEnum.Custom, Language.ConnectionsBackupFrequencyCustom)} + }; + + cmbConnectionBackupFrequency.DataSource = _connectionBackup; + cmbConnectionBackupFrequency.DisplayMember = "DisplayString"; + cmbConnectionBackupFrequency.ValueMember = "Index"; + + lblConnectionsBackupFrequency.Text = Language.strConnectionBackupFrequency; + lblConnectionsBackupMaxCount.Text = Language.strConnectionsBackupMaxCount; + lblConnectionsBackupPath.Text = Language.strConnectionsBackupPath; + } + + public override void LoadSettings() + { + numMaxBackups.Value = Convert.ToDecimal(Settings.Default.BackupFileKeepCount); + + if (Settings.Default.SaveConnectionsFrequency == (int) ConnectionsBackupFrequencyEnum.Unassigned) + { + if (Settings.Default.SaveConnectionsAfterEveryEdit) + { + Settings.Default.SaveConnectionsFrequency = (int) ConnectionsBackupFrequencyEnum.OnEdit; + } + else if (Settings.Default.SaveConsOnExit) + { + Settings.Default.SaveConnectionsFrequency = (int) ConnectionsBackupFrequencyEnum.OnExit; + } + else + { + Settings.Default.SaveConnectionsFrequency = (int) ConnectionsBackupFrequencyEnum.Never; + } + } + + cmbConnectionBackupFrequency.SelectedValue = Settings.Default.SaveConnectionsFrequency; + textBoxConnectionBackupPath.Text = Settings.Default.CustomConsPath; + + } + + public override void SaveSettings() + { + Settings.Default.BackupFileKeepCount = (int) numMaxBackups.Value; + + if (Settings.Default.AutoSaveEveryMinutes > 0) + { + _frmMain.tmrAutoSave.Interval = Settings.Default.AutoSaveEveryMinutes * 60000; + _frmMain.tmrAutoSave.Enabled = true; + } + else + { + _frmMain.tmrAutoSave.Enabled = false; + } + + Settings.Default.SaveConnectionsFrequency = (int) cmbConnectionBackupFrequency.SelectedValue; + + if (textBoxConnectionBackupPath.Text.Trim().Length <= 0) + { + Settings.Default.LoadConsFromCustomLocation = false; + Settings.Default.CustomConsPath = String.Empty; + } + else + { + var newFileName = textBoxConnectionBackupPath.Text; + + Runtime.ConnectionsService.SaveConnections(Runtime.ConnectionsService.ConnectionTreeModel, false, + new SaveFilter(), newFileName); + + if (newFileName == Runtime.ConnectionsService.GetDefaultStartupConnectionFileName()) + { + Settings.Default.LoadConsFromCustomLocation = false; + } + else + { + Settings.Default.LoadConsFromCustomLocation = true; + Settings.Default.CustomConsPath = newFileName; + } + } + + //Obsolete. Set to false + Settings.Default.SaveConnectionsAfterEveryEdit = false; + Settings.Default.SaveConsOnExit = false; + } + + private void ButtonBrowsePath_Click(object sender, EventArgs e) + { + var saveDialog = DialogFactory.ConnectionsSaveAsDialog(); + + var dialogResult = saveDialog.ShowDialog(this); + + textBoxConnectionBackupPath.Text = dialogResult == DialogResult.OK ? saveDialog.FileName : string.Empty; + } + } +} \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx new file mode 100644 index 00000000..392a4fa0 --- /dev/null +++ b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.resx @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs index 2df46cbe..6649cbcb 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs @@ -1,5 +1,7 @@ using mRemoteNG.Config; using System; +using System.Collections.Generic; +using mRemoteNG.Config.Connections; using mRemoteNG.Properties; using mRemoteNG.Resources.Language; @@ -8,6 +10,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages public sealed partial class ConnectionsPage { private readonly FrmMain _frmMain = FrmMain.Default; + private List _connectionWarning; public ConnectionsPage() { @@ -25,12 +28,23 @@ namespace mRemoteNG.UI.Forms.OptionsPages public override void ApplyLanguage() { base.ApplyLanguage(); + + _connectionWarning = new List + { + { new DropdownList((int)ConfirmCloseEnum.Never, Language.RadioCloseWarnMultiple)}, + { new DropdownList((int)ConfirmCloseEnum.Exit, Language.RadioCloseWarnExit)}, + { new DropdownList((int)ConfirmCloseEnum.Multiple, Language.RadioCloseWarnMultiple)}, + { new DropdownList((int)ConfirmCloseEnum.All, Language._CloseWarnAll)} + }; + + //comboBoxConnectionWarning.DataSource = _connectionWarning; + //comboBoxConnectionWarning.DisplayMember = "DisplayString"; + //comboBoxConnectionWarning.ValueMember = "Index"; chkSingleClickOnConnectionOpensIt.Text = Language.SingleClickOnConnectionOpensIt; chkSingleClickOnOpenedConnectionSwitchesToIt.Text = Language.SingleClickOnOpenConnectionSwitchesToIt; chkConnectionTreeTrackActiveConnection.Text = Language.TrackActiveConnectionInConnectionTree; chkHostnameLikeDisplayName.Text = Language.SetHostnameLikeDisplayName; - chkSaveConnectionsAfterEveryEdit.Text = Language.SaveConnectionsAfterEveryEdit; chkUseFilterSearch.Text = Language.FilterSearchMatchesInConnectionTree; chkPlaceSearchBarAboveConnectionTree.Text = Language.PlaceSearchBarAboveConnectionTree; chkDoNotTrimUsername.Text = Language.DoNotTrimUsername; @@ -38,12 +52,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages lblRdpReconnectionCount.Text = Language.RdpReconnectCount; lblRDPConTimeout.Text = Language.RdpOverallConnectionTimeout; lblAutoSave1.Text = Language.AutoSaveEvery; + //ngLabel1.Text = Language.strLabelClosingConnections; - lblClosingConnections.Text = Language.ClosingConnections; - radCloseWarnAll.Text = Language._CloseWarnAll; - radCloseWarnMultiple.Text = Language.RadioCloseWarnMultiple; - radCloseWarnExit.Text = Language.RadioCloseWarnExit; - radCloseWarnNever.Text = Language.RadioCloseWarnNever; } public override void LoadSettings() @@ -52,7 +62,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages chkSingleClickOnOpenedConnectionSwitchesToIt.Checked = Settings.Default.SingleClickSwitchesToOpenConnection; chkConnectionTreeTrackActiveConnection.Checked = Settings.Default.TrackActiveConnectionInConnectionTree; chkHostnameLikeDisplayName.Checked = Settings.Default.SetHostnameLikeDisplayName; - chkSaveConnectionsAfterEveryEdit.Checked = Settings.Default.SaveConnectionsAfterEveryEdit; + chkUseFilterSearch.Checked = Settings.Default.UseFilterSearch; chkPlaceSearchBarAboveConnectionTree.Checked = Settings.Default.PlaceSearchBarAboveConnectionTree; chkDoNotTrimUsername.Checked = Settings.Default.DoNotTrimUsername; @@ -61,20 +71,22 @@ namespace mRemoteNG.UI.Forms.OptionsPages numRDPConTimeout.Value = Convert.ToDecimal(Settings.Default.ConRDPOverallConnectionTimeout); numAutoSave.Value = Convert.ToDecimal(Settings.Default.AutoSaveEveryMinutes); - switch (Settings.Default.ConfirmCloseConnection) + //comboBoxConnectionWarning.SelectedValue = Settings.Default.ConfirmCloseConnection; + + if (Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.Unassigned) { - case (int)ConfirmCloseEnum.Never: - radCloseWarnNever.Checked = true; - break; - case (int)ConfirmCloseEnum.Exit: - radCloseWarnExit.Checked = true; - break; - case (int)ConfirmCloseEnum.Multiple: - radCloseWarnMultiple.Checked = true; - break; - default: - radCloseWarnAll.Checked = true; - break; + if (Settings.Default.SaveConnectionsAfterEveryEdit) + { + Settings.Default.SaveConnectionsFrequency = (int)ConnectionsBackupFrequencyEnum.OnEdit; + } + else if (Settings.Default.SaveConsOnExit) + { + Settings.Default.SaveConnectionsFrequency = (int)ConnectionsBackupFrequencyEnum.OnExit; + } + else + { + Settings.Default.SaveConnectionsFrequency = (int)ConnectionsBackupFrequencyEnum.Never; + } } } @@ -84,7 +96,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages Settings.Default.SingleClickSwitchesToOpenConnection = chkSingleClickOnOpenedConnectionSwitchesToIt.Checked; Settings.Default.TrackActiveConnectionInConnectionTree = chkConnectionTreeTrackActiveConnection.Checked; Settings.Default.SetHostnameLikeDisplayName = chkHostnameLikeDisplayName.Checked; - Settings.Default.SaveConnectionsAfterEveryEdit = chkSaveConnectionsAfterEveryEdit.Checked; + Settings.Default.UseFilterSearch = chkUseFilterSearch.Checked; Settings.Default.PlaceSearchBarAboveConnectionTree = chkPlaceSearchBarAboveConnectionTree.Checked; Settings.Default.DoNotTrimUsername = chkDoNotTrimUsername.Checked; @@ -102,25 +114,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages _frmMain.tmrAutoSave.Enabled = false; } - if (radCloseWarnAll.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.All; - } - - if (radCloseWarnMultiple.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.Multiple; - } - - if (radCloseWarnExit.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.Exit; - } - - if (radCloseWarnNever.Checked) - { - Settings.Default.ConfirmCloseConnection = (int)ConfirmCloseEnum.Never; - } + //Settings.Default.ConfirmCloseConnection = (int)comboBoxConnectionWarning.SelectedValue; } } } \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs index 550ccf3e..8360424a 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/OptionsPage.cs @@ -64,4 +64,15 @@ namespace mRemoteNG.UI.Forms.OptionsPages ResumeLayout(false); } } + internal class DropdownList + { + public int Index { get; set; } + public string DisplayString { get; set; } + + public DropdownList(int argIndex, string argDisplay) + { + Index = argIndex; + DisplayString = argDisplay; + } + } } \ No newline at end of file diff --git a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs index 71c76bc5..836dbcb8 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs @@ -23,7 +23,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages { base.ApplyLanguage(); - chkSaveConsOnExit.Text = Language.SaveConsOnExit; chkReconnectOnStart.Text = Language.ReconnectAtStartup; chkSingleInstance.Text = Language.AllowOnlySingleInstance; chkStartMinimized.Text = Language.StartMinimized; @@ -33,7 +32,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages { base.SaveSettings(); - Settings.Default.SaveConsOnExit = chkSaveConsOnExit.Checked; Settings.Default.OpenConsFromLastSession = chkReconnectOnStart.Checked; Settings.Default.SingleInstance = chkSingleInstance.Checked; Settings.Default.StartMinimized = chkStartMinimized.Checked; @@ -42,7 +40,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void StartupExitPage_Load(object sender, EventArgs e) { - chkSaveConsOnExit.Checked = Settings.Default.SaveConsOnExit; chkReconnectOnStart.Checked = Settings.Default.OpenConsFromLastSession; chkSingleInstance.Checked = Settings.Default.SingleInstance; chkStartMinimized.Checked = Settings.Default.StartMinimized; diff --git a/mRemoteNG/UI/Forms/frmOptions.cs b/mRemoteNG/UI/Forms/frmOptions.cs index 8743ce10..1b98c03f 100644 --- a/mRemoteNG/UI/Forms/frmOptions.cs +++ b/mRemoteNG/UI/Forms/frmOptions.cs @@ -82,6 +82,8 @@ namespace mRemoteNG.UI.Forms {typeof(ThemePage).Name, new ThemePage {Dock = DockStyle.Fill}}, {typeof(SecurityPage).Name, new SecurityPage {Dock = DockStyle.Fill}}, {typeof(AdvancedPage).Name, new AdvancedPage {Dock = DockStyle.Fill}}, + {typeof(BackupPage).Name, new BackupPage {Dock = DockStyle.Fill}}, + {typeof(ComponentsPage).Name, new ComponentsPage {Dock = DockStyle.Fill}}, }; } diff --git a/mRemoteNG/app.config b/mRemoteNG/app.config index cc4f174b..5519ba5b 100644 --- a/mRemoteNG/app.config +++ b/mRemoteNG/app.config @@ -591,12 +591,6 @@ 20 - - AES - - - GCM - 10000 @@ -747,6 +741,9 @@ False + + 0 + Highest diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index c6fff13d..7c6b1e14 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -74,6 +74,7 @@ + @@ -511,6 +512,15 @@ UserControl + + UserControl + + + BackupPage.cs + + + ComponentsPage.cs + UserControl @@ -876,6 +886,9 @@ AppearancePage.cs + + BackupPage.cs + ConnectionsPage.cs @@ -1088,6 +1101,7 @@ PreserveNewest + PreserveNewest diff --git a/mRemoteNGDocumentation/user_interface/options.rst b/mRemoteNGDocumentation/user_interface/options.rst index 89c28ba8..d1861eb7 100644 --- a/mRemoteNGDocumentation/user_interface/options.rst +++ b/mRemoteNGDocumentation/user_interface/options.rst @@ -18,9 +18,6 @@ Options below are for the various settings for Startup/Exit of mRemoteNG. * - Option - Default - Description - * - Save connection on exit - - On - - Save to connection file/database on exit of mRemoteNG * - Reconnect to previously opened sessions on startup - Off - This option will allow you to open the connection from which you where connected to after last exit of application @@ -109,32 +106,46 @@ Connections * - Set hostname like display name when creating or renaming connections - Off - Will make mRemoteNG try to use the remote host hostname to set the title of the tab in mRemoteNG. - * - Save connections after every exit - - On - - When active mRemoteNG will save the connection tree to the active config after every exit. If inactive then you have to save using **File > Save Connection File** or keyboard shortcut Ctrl+S * - Filter search matches in connection tree - Off - Allows you to filter out the connections to which does not match your filter search in the connection tree. If not active the search will only select the filter to which you do search. * - RDP Reconnect count - 5 - - Value in seconds + - Value in seconds * - RDP Connection Timeout - 20 - - Value in seconds + - Value in seconds * - Auto save time in minutes (0 means disabled) - 0 - Value in minutes - * - When closing connections - - Warn me when closing connections + * - When closing connections Warn me... + - ... when any connection closes - Various options of how mRemoteNG should act when you close connections. The different options are listed below: :: - - Warn me when closing connections - - Warn me only when closing multiple connections - - Warn me only when exiting mRemoteNG - - Do not warn me when closing connections + - ... when any connection closes + - ... when closing multiple connections + - ... only when exiting mRemoteNG + - ... never By default a warning will come up on closing a connection. Change this value based on your prefered settings. + * - Connection Backup Frequency + - On Edit + - Various options of when mRemoteNG should create a backup of the connections file. The different options are listed below: + :: + - Never backup connections + - On Edit + - On Exit + - Daily + - Weekly + By default a backup will be saved every time the connections are edited. Change this value based on your prefered settings. + * - Maximum number of backups + - 10 + - Number of backup copies of the connection file to keep. + * - Location of backup files + - (blank) + - Full path of backup copies of the connection files. + Credentials =========== Options for credentials in mRemoteNG. The main purpose here is that when you have empty username, password or domain field then use below information. From f884c47ad889cc446f2af0b9400e7a38fc131e9a Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Fri, 17 Sep 2021 22:58:58 +0100 Subject: [PATCH 2/8] set Language as resource --- mRemoteNG/App/CompatibilityChecker.cs | 1 + mRemoteNG/App/Import.cs | 1 + .../App/Initialization/StartupDataLogger.cs | 1 + mRemoteNG/App/Runtime.cs | 1 + mRemoteNG/App/Shutdown.cs | 1 + .../Config/Connections/SqlConnectionsSaver.cs | 1 + .../Config/DataProviders/FileBackupCreator.cs | 1 + .../Xml/XmlConnectionsDeserializer.cs | 1 + .../ActiveDirectoryDeserializer.cs | 1 + ...oteDesktopConnectionManagerDeserializer.cs | 3 +- .../Versioning/SqlDatabaseVersionVerifier.cs | 1 + .../Connection/AbstractConnectionRecord.cs | 1 + mRemoteNG/Connection/ConnectionInfo.cs | 1 + .../Connection/ConnectionInfoInheritance.cs | 1 + mRemoteNG/Connection/ConnectionInitiator.cs | 1 + mRemoteNG/Connection/ConnectionsService.cs | 1 + .../Http/Connection.Protocol.HTTPBase.cs | 1 + .../Connection/Protocol/IntegratedProgram.cs | 1 + .../Connection.Protocol.PowerShell.cs | 1 + .../Connection/Protocol/ProtocolFactory.cs | 1 + mRemoteNG/Connection/Protocol/ProtocolType.cs | 1 + mRemoteNG/Connection/Protocol/PuttyBase.cs | 1 + .../Protocol/RDP/AuthenticationLevel.cs | 1 + .../Protocol/RDP/RDGatewayUsageMethod.cs | 1 + .../RDP/RDGatewayUseConnectionCredentials.cs | 1 + .../Connection/Protocol/RDP/RDPColors.cs | 1 + .../Connection/Protocol/RDP/RDPResolutions.cs | 1 + .../Protocol/RDP/RDPSoundQuality.cs | 1 + .../Connection/Protocol/RDP/RDPSounds.cs | 1 + .../Connection/Protocol/RDP/RdpErrorCodes.cs | 1 + .../Connection/Protocol/RDP/RdpProtocol6.cs | 1 + .../Connection/Protocol/RDP/RdpProtocol7.cs | 1 + .../Connection/Protocol/RDP/RdpProtocol8.cs | 1 + .../Protocol/VNC/Connection.Protocol.VNC.cs | 1 + mRemoteNG/Connection/Protocol/VNC/VNCEnum.cs | 1 + mRemoteNG/Connection/PuttySessionInfo.cs | 3 +- mRemoteNG/Connection/WebHelper.cs | 1 + .../CredentialDeletionMsgBoxConfirmer.cs | 1 + .../Credential/PlaceholderCredentialRecord.cs | 1 + mRemoteNG/Language/Language.Designer.cs | 3 +- .../MessageWriters/PopupMessageWriter.cs | 1 + mRemoteNG/Properties/AssemblyInfo.cs | 2 +- mRemoteNG/Properties/Resources.Designer.cs | 189 +++++++++--------- mRemoteNG/Properties/Resources.resx | 3 + mRemoteNG/Properties/Settings.Designer.cs | 11 +- .../PasswordIncludesLowerCaseConstraint.cs | 1 + .../PasswordIncludesNumbersConstraint.cs | 1 + ...wordIncludesSpecialCharactersConstraint.cs | 1 + .../PasswordIncludesUpperCaseConstraint.cs | 1 + .../PasswordLengthConstraint.cs | 1 + .../AeadCryptographyProvider.cs | 3 +- .../LegacyRijndaelCryptographyProvider.cs | 3 +- .../Cmdline/StartupArgumentsInterpreter.cs | 1 + mRemoteNG/Tools/ExternalTool.cs | 1 + mRemoteNG/Tools/MiscTools.cs | 1 + mRemoteNG/Tools/NotificationAreaIcon.cs | 1 + mRemoteNG/Tools/ReconnectGroup.Designer.cs | 5 +- mRemoteNG/Tools/ReconnectGroup.cs | 1 + mRemoteNG/Tools/ScanHost.cs | 1 + mRemoteNG/Tools/SecureTransfer.cs | 1 + mRemoteNG/Tools/Tools.LocalizedAttributes.cs | 3 +- .../Tree/ConnectionTreeDragAndDropHandler.cs | 1 + mRemoteNG/Tree/Root/RootNodeInfo.cs | 1 + .../Tree/Root/RootPuttySessionsNodeInfo.cs | 1 + .../SelectedConnectionDeletionConfirmer.cs | 1 + .../UI/Controls/ConnectionContextMenu.cs | 1 + .../ConnectionInfoPropertyGrid.cs | 1 + .../Controls/ConnectionTree/ConnectionTree.cs | 1 + .../UI/Controls/CredentialRecordListBox.cs | 1 + .../UI/Controls/CredentialRecordListView.cs | 1 + .../UI/Controls/ExternalToolsToolStrip.cs | 1 + mRemoteNG/UI/Controls/MultiSshToolStrip.cs | 1 + mRemoteNG/UI/Controls/QuickConnectComboBox.cs | 1 + .../UI/Controls/QuickConnectToolStrip.cs | 1 + mRemoteNG/UI/Controls/mrngIpTextBox.cs | 1 + mRemoteNG/UI/Controls/mrngSearchBox.cs | 1 + mRemoteNG/UI/DialogFactory.cs | 1 + mRemoteNG/UI/Forms/FrmAbout.cs | 1 + mRemoteNG/UI/Forms/FrmExport.cs | 1 + mRemoteNG/UI/Forms/FrmInputBox.cs | 1 + mRemoteNG/UI/Forms/FrmPassword.Designer.cs | 5 +- mRemoteNG/UI/Forms/FrmPassword.cs | 1 + mRemoteNG/UI/Forms/FrmUnhandledException.cs | 1 + .../UI/Forms/OptionsPages/AdvancedPage.cs | 1 + .../UI/Forms/OptionsPages/AppearancePage.cs | 1 + .../OptionsPages/ConnectionsPage.Designer.cs | 7 +- .../UI/Forms/OptionsPages/ConnectionsPage.cs | 1 + .../UI/Forms/OptionsPages/CredentialsPage.cs | 1 + .../Forms/OptionsPages/NotificationsPage.cs | 1 + .../UI/Forms/OptionsPages/SecurityPage.cs | 1 + .../UI/Forms/OptionsPages/SqlServerPage.cs | 1 + .../UI/Forms/OptionsPages/StartupExitPage.cs | 1 + .../OptionsPages/TabsPanelsPage.Designer.cs | 7 +- .../UI/Forms/OptionsPages/TabsPanelsPage.cs | 1 + mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs | 1 + .../UI/Forms/OptionsPages/UpdatesPage.cs | 1 + mRemoteNG/UI/Forms/frmChoosePanel.Designer.cs | 9 +- mRemoteNG/UI/Forms/frmChoosePanel.cs | 1 + mRemoteNG/UI/Forms/frmMain.cs | 1 + mRemoteNG/UI/Forms/frmOptions.cs | 3 +- mRemoteNG/UI/Menu/AdvancedWindowMenu.cs | 1 + mRemoteNG/UI/Menu/FileMenu.cs | 1 + mRemoteNG/UI/Menu/HelpMenu.cs | 1 + mRemoteNG/UI/Menu/ToolsMenu.cs | 1 + mRemoteNG/UI/Menu/ViewMenu.cs | 1 + mRemoteNG/UI/Panels/PanelAdder.cs | 1 + mRemoteNG/UI/Tabs/ConnectionTab.cs | 1 + mRemoteNG/UI/Tabs/DockPaneStripNG.cs | 1 + mRemoteNG/UI/TaskDialog/frmTaskDialog.cs | 1 + .../UI/Window/ActiveDirectoryImportWindow.cs | 1 + mRemoteNG/UI/Window/ConfigWindow.cs | 1 + mRemoteNG/UI/Window/ConnectionTreeWindow.cs | 1 + mRemoteNG/UI/Window/ConnectionWindow.cs | 1 + .../UI/Window/ErrorAndInfoWindow.Designer.cs | 9 +- mRemoteNG/UI/Window/ErrorAndInfoWindow.cs | 1 + mRemoteNG/UI/Window/ExternalToolsWindow.cs | 1 + mRemoteNG/UI/Window/PortScanWindow.cs | 1 + mRemoteNG/UI/Window/SSHTransferWindow.cs | 1 + mRemoteNG/UI/Window/UltraVNCWindow.cs | 1 + mRemoteNG/UI/Window/UpdateWindow.cs | 1 + mRemoteNG/mRemoteNG.csproj | 3 - 121 files changed, 247 insertions(+), 127 deletions(-) diff --git a/mRemoteNG/App/CompatibilityChecker.cs b/mRemoteNG/App/CompatibilityChecker.cs index b838a1f2..cc60270d 100644 --- a/mRemoteNG/App/CompatibilityChecker.cs +++ b/mRemoteNG/App/CompatibilityChecker.cs @@ -7,6 +7,7 @@ using mRemoteNG.Messages; using mRemoteNG.Properties; using mRemoteNG.UI.Forms; using mRemoteNG.UI.TaskDialog; +using mRemoteNG.Resources.Language; namespace mRemoteNG.App { diff --git a/mRemoteNG/App/Import.cs b/mRemoteNG/App/Import.cs index bf496321..60b50205 100644 --- a/mRemoteNG/App/Import.cs +++ b/mRemoteNG/App/Import.cs @@ -7,6 +7,7 @@ using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Container; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.App { diff --git a/mRemoteNG/App/Initialization/StartupDataLogger.cs b/mRemoteNG/App/Initialization/StartupDataLogger.cs index ded52c9a..eab7a3c7 100644 --- a/mRemoteNG/App/Initialization/StartupDataLogger.cs +++ b/mRemoteNG/App/Initialization/StartupDataLogger.cs @@ -3,6 +3,7 @@ using System.Management; using System.Threading; using System.Windows.Forms; using mRemoteNG.Messages; +using mRemoteNG.Resources.Language; namespace mRemoteNG.App.Initialization { diff --git a/mRemoteNG/App/Runtime.cs b/mRemoteNG/App/Runtime.cs index fc9dcad9..bf34daf5 100644 --- a/mRemoteNG/App/Runtime.cs +++ b/mRemoteNG/App/Runtime.cs @@ -16,6 +16,7 @@ using System.Security; using System.Threading; using System.Windows.Forms; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.App { diff --git a/mRemoteNG/App/Shutdown.cs b/mRemoteNG/App/Shutdown.cs index 135bef96..e69c557e 100644 --- a/mRemoteNG/App/Shutdown.cs +++ b/mRemoteNG/App/Shutdown.cs @@ -7,6 +7,7 @@ using mRemoteNG.Config.Putty; using mRemoteNG.Properties; using mRemoteNG.UI.Controls; using mRemoteNG.UI.Forms; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs b/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs index e6c38bb0..d39295e9 100644 --- a/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs +++ b/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs @@ -17,6 +17,7 @@ using mRemoteNG.Security.SymmetricEncryption; using mRemoteNG.Tools; using mRemoteNG.Tree; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Config.Connections { diff --git a/mRemoteNG/Config/DataProviders/FileBackupCreator.cs b/mRemoteNG/Config/DataProviders/FileBackupCreator.cs index 330ccf71..57c9fbef 100644 --- a/mRemoteNG/Config/DataProviders/FileBackupCreator.cs +++ b/mRemoteNG/Config/DataProviders/FileBackupCreator.cs @@ -2,6 +2,7 @@ using System.IO; using mRemoteNG.App; using mRemoteNG.Messages; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Config.DataProviders { diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs index bcc2ab9a..56e80e79 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs @@ -17,6 +17,7 @@ using mRemoteNG.Tree; using mRemoteNG.Tree.Root; using mRemoteNG.UI.Forms; using mRemoteNG.UI.TaskDialog; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs index fa6591f0..15ca955c 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs @@ -9,6 +9,7 @@ using mRemoteNG.Container; using mRemoteNG.Tools; using mRemoteNG.Tree; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Config.Serializers.MiscSerializers { diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs index 3925ae97..dee482d0 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Security.Cryptography; using System.Text; @@ -9,6 +9,7 @@ using mRemoteNG.Connection.Protocol.RDP; using mRemoteNG.Container; using mRemoteNG.Tree; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Config.Serializers.MiscSerializers { diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs b/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs index 17d80204..8e14486f 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs @@ -2,6 +2,7 @@ using mRemoteNG.App.Info; using mRemoteNG.Config.DatabaseConnectors; using mRemoteNG.Messages; +using mRemoteNG.Resources.Language; using System; namespace mRemoteNG.Config.Serializers.Versioning diff --git a/mRemoteNG/Connection/AbstractConnectionRecord.cs b/mRemoteNG/Connection/AbstractConnectionRecord.cs index 9ad98875..b3b799c2 100644 --- a/mRemoteNG/Connection/AbstractConnectionRecord.cs +++ b/mRemoteNG/Connection/AbstractConnectionRecord.cs @@ -7,6 +7,7 @@ using mRemoteNG.Connection.Protocol.VNC; using mRemoteNG.Properties; using mRemoteNG.Tools; using mRemoteNG.Tools.Attributes; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection diff --git a/mRemoteNG/Connection/ConnectionInfo.cs b/mRemoteNG/Connection/ConnectionInfo.cs index 8e58df21..1da5c72b 100644 --- a/mRemoteNG/Connection/ConnectionInfo.cs +++ b/mRemoteNG/Connection/ConnectionInfo.cs @@ -16,6 +16,7 @@ using mRemoteNG.Connection.Protocol.VNC; using mRemoteNG.Container; using mRemoteNG.Properties; using mRemoteNG.Tree; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection diff --git a/mRemoteNG/Connection/ConnectionInfoInheritance.cs b/mRemoteNG/Connection/ConnectionInfoInheritance.cs index 73135617..713c9233 100644 --- a/mRemoteNG/Connection/ConnectionInfoInheritance.cs +++ b/mRemoteNG/Connection/ConnectionInfoInheritance.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using System.Linq; using System.Reflection; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection { diff --git a/mRemoteNG/Connection/ConnectionInitiator.cs b/mRemoteNG/Connection/ConnectionInitiator.cs index 8bcf64e9..ff8d0780 100644 --- a/mRemoteNG/Connection/ConnectionInitiator.cs +++ b/mRemoteNG/Connection/ConnectionInitiator.cs @@ -11,6 +11,7 @@ using mRemoteNG.UI.Panels; using mRemoteNG.UI.Tabs; using mRemoteNG.UI.Window; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection diff --git a/mRemoteNG/Connection/ConnectionsService.cs b/mRemoteNG/Connection/ConnectionsService.cs index 0eb25cf6..4e8a5712 100644 --- a/mRemoteNG/Connection/ConnectionsService.cs +++ b/mRemoteNG/Connection/ConnectionsService.cs @@ -18,6 +18,7 @@ using mRemoteNG.Tools; using mRemoteNG.Tree; using mRemoteNG.Tree.Root; using mRemoteNG.UI; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection { diff --git a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs index 1d303b6a..00df0dbe 100644 --- a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs +++ b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs @@ -4,6 +4,7 @@ using Microsoft.Web.WebView2.WinForms; using mRemoteNG.Tools; using mRemoteNG.App; using mRemoteNG.UI.Tabs; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.Http diff --git a/mRemoteNG/Connection/Protocol/IntegratedProgram.cs b/mRemoteNG/Connection/Protocol/IntegratedProgram.cs index 8db7f59b..42c72d0c 100644 --- a/mRemoteNG/Connection/Protocol/IntegratedProgram.cs +++ b/mRemoteNG/Connection/Protocol/IntegratedProgram.cs @@ -7,6 +7,7 @@ using mRemoteNG.App; using mRemoteNG.Messages; using mRemoteNG.Properties; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol { diff --git a/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs b/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs index 603647f7..4197ad83 100644 --- a/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs +++ b/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs @@ -3,6 +3,7 @@ using System.Drawing; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Messages; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.PowerShell { diff --git a/mRemoteNG/Connection/Protocol/ProtocolFactory.cs b/mRemoteNG/Connection/Protocol/ProtocolFactory.cs index e3d592b8..8f20464a 100644 --- a/mRemoteNG/Connection/Protocol/ProtocolFactory.cs +++ b/mRemoteNG/Connection/Protocol/ProtocolFactory.cs @@ -8,6 +8,7 @@ using mRemoteNG.Connection.Protocol.VNC; using System; using mRemoteNG.Connection.Protocol.PowerShell; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol { diff --git a/mRemoteNG/Connection/Protocol/ProtocolType.cs b/mRemoteNG/Connection/Protocol/ProtocolType.cs index 07fdfdfe..6f4016fd 100644 --- a/mRemoteNG/Connection/Protocol/ProtocolType.cs +++ b/mRemoteNG/Connection/Protocol/ProtocolType.cs @@ -1,4 +1,5 @@ using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol { diff --git a/mRemoteNG/Connection/Protocol/PuttyBase.cs b/mRemoteNG/Connection/Protocol/PuttyBase.cs index 633b037a..45afdeac 100644 --- a/mRemoteNG/Connection/Protocol/PuttyBase.cs +++ b/mRemoteNG/Connection/Protocol/PuttyBase.cs @@ -10,6 +10,7 @@ using System.Drawing; using System.Threading; using System.Windows.Forms; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/Connection/Protocol/RDP/AuthenticationLevel.cs b/mRemoteNG/Connection/Protocol/RDP/AuthenticationLevel.cs index dcae7030..008e02eb 100644 --- a/mRemoteNG/Connection/Protocol/RDP/AuthenticationLevel.cs +++ b/mRemoteNG/Connection/Protocol/RDP/AuthenticationLevel.cs @@ -1,4 +1,5 @@ using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RDGatewayUsageMethod.cs b/mRemoteNG/Connection/Protocol/RDP/RDGatewayUsageMethod.cs index 398d6eca..cc3eb38c 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RDGatewayUsageMethod.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RDGatewayUsageMethod.cs @@ -1,4 +1,5 @@ using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RDGatewayUseConnectionCredentials.cs b/mRemoteNG/Connection/Protocol/RDP/RDGatewayUseConnectionCredentials.cs index 8f5e6f19..49e7c084 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RDGatewayUseConnectionCredentials.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RDGatewayUseConnectionCredentials.cs @@ -1,4 +1,5 @@ using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RDPColors.cs b/mRemoteNG/Connection/Protocol/RDP/RDPColors.cs index 34c03c60..ca45ff7a 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RDPColors.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RDPColors.cs @@ -1,4 +1,5 @@ using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RDPResolutions.cs b/mRemoteNG/Connection/Protocol/RDP/RDPResolutions.cs index d4367e20..c34f3055 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RDPResolutions.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RDPResolutions.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RDPSoundQuality.cs b/mRemoteNG/Connection/Protocol/RDP/RDPSoundQuality.cs index cca98da1..2e9f3741 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RDPSoundQuality.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RDPSoundQuality.cs @@ -1,4 +1,5 @@ using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RDPSounds.cs b/mRemoteNG/Connection/Protocol/RDP/RDPSounds.cs index 13d84792..45f18beb 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RDPSounds.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RDPSounds.cs @@ -1,4 +1,5 @@ using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpErrorCodes.cs b/mRemoteNG/Connection/Protocol/RDP/RdpErrorCodes.cs index e0216758..a5dbf8c3 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpErrorCodes.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpErrorCodes.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using mRemoteNG.App; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs index 415fb7d5..502c461a 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol6.cs @@ -14,6 +14,7 @@ using mRemoteNG.UI; using mRemoteNG.UI.Forms; using mRemoteNG.UI.Tabs; using MSTSCLib; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs index f5d29e87..1b6a0419 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs @@ -3,6 +3,7 @@ using mRemoteNG.App; using MSTSCLib; using System; using System.Windows.Forms; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs index 410bb93c..c1cb1057 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs @@ -5,6 +5,7 @@ using AxMSTSCLib; using mRemoteNG.App; using mRemoteNG.Messages; using MSTSCLib; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.RDP { diff --git a/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs b/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs index e212b257..04f2cc66 100644 --- a/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs +++ b/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs @@ -5,6 +5,7 @@ using System.Net.Sockets; using mRemoteNG.App; using mRemoteNG.Tools; using mRemoteNG.UI.Forms; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/Connection/Protocol/VNC/VNCEnum.cs b/mRemoteNG/Connection/Protocol/VNC/VNCEnum.cs index 35f74e9f..8d632b34 100644 --- a/mRemoteNG/Connection/Protocol/VNC/VNCEnum.cs +++ b/mRemoteNG/Connection/Protocol/VNC/VNCEnum.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection.Protocol.VNC { diff --git a/mRemoteNG/Connection/PuttySessionInfo.cs b/mRemoteNG/Connection/PuttySessionInfo.cs index 33dc514e..f609dd6a 100644 --- a/mRemoteNG/Connection/PuttySessionInfo.cs +++ b/mRemoteNG/Connection/PuttySessionInfo.cs @@ -1,4 +1,4 @@ -using mRemoteNG.App; +using mRemoteNG.App; using mRemoteNG.Messages; using mRemoteNG.Tools; using System; @@ -6,6 +6,7 @@ using System.ComponentModel; using mRemoteNG.Connection.Protocol; using mRemoteNG.Tree; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection diff --git a/mRemoteNG/Connection/WebHelper.cs b/mRemoteNG/Connection/WebHelper.cs index c58f1b06..fa86cef7 100644 --- a/mRemoteNG/Connection/WebHelper.cs +++ b/mRemoteNG/Connection/WebHelper.cs @@ -1,4 +1,5 @@ using mRemoteNG.Connection.Protocol; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Connection { diff --git a/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs b/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs index ab64d25e..5afdcb1e 100644 --- a/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs +++ b/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using mRemoteNG.Tree; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Credential diff --git a/mRemoteNG/Credential/PlaceholderCredentialRecord.cs b/mRemoteNG/Credential/PlaceholderCredentialRecord.cs index ee4d5fdc..9916893b 100644 --- a/mRemoteNG/Credential/PlaceholderCredentialRecord.cs +++ b/mRemoteNG/Credential/PlaceholderCredentialRecord.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Security; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Credential { diff --git a/mRemoteNG/Language/Language.Designer.cs b/mRemoteNG/Language/Language.Designer.cs index bc9cf2af..e1c702b3 100644 --- a/mRemoteNG/Language/Language.Designer.cs +++ b/mRemoteNG/Language/Language.Designer.cs @@ -9,7 +9,8 @@ //------------------------------------------------------------------------------ -namespace mRemoteNG.Resources.Language{ +namespace mRemoteNG.Resources.Language +{ using System; diff --git a/mRemoteNG/Messages/MessageWriters/PopupMessageWriter.cs b/mRemoteNG/Messages/MessageWriters/PopupMessageWriter.cs index 07f5f57c..9b1c147e 100644 --- a/mRemoteNG/Messages/MessageWriters/PopupMessageWriter.cs +++ b/mRemoteNG/Messages/MessageWriters/PopupMessageWriter.cs @@ -1,5 +1,6 @@ using System; using System.Windows.Forms; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Messages.MessageWriters { diff --git a/mRemoteNG/Properties/AssemblyInfo.cs b/mRemoteNG/Properties/AssemblyInfo.cs index 276bcab2..d5598745 100644 --- a/mRemoteNG/Properties/AssemblyInfo.cs +++ b/mRemoteNG/Properties/AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyDescription("Multi-protocol remote connections manager")] [assembly: AssemblyCompany("mRemoteNG")] [assembly: AssemblyProduct("mRemoteNG")] -[assembly: AssemblyCopyright("2020 mRemoteNG Dev Team, 2010-2013 Riley McArdle, 2007-2009 Felix Deimel")] +[assembly: AssemblyCopyright("2021 mRemoteNG Dev Team, 2010-2013 Riley McArdle, 2007-2009 Felix Deimel")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] diff --git a/mRemoteNG/Properties/Resources.Designer.cs b/mRemoteNG/Properties/Resources.Designer.cs index 7a9954e9..cc9b4322 100644 --- a/mRemoteNG/Properties/Resources.Designer.cs +++ b/mRemoteNG/Properties/Resources.Designer.cs @@ -1,27 +1,26 @@ //------------------------------------------------------------------------------ // -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.42000 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 // -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ -namespace mRemoteNG { - using System; - - +//mRemoteNG.Properties +namespace mRemoteNG.Properties +{ using System; /// - /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// A strongly-typed resource class, for looking up localized strings, etc. /// - // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] @@ -36,7 +35,7 @@ namespace mRemoteNG { } /// - /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -50,8 +49,8 @@ namespace mRemoteNG { } /// - /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -64,7 +63,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Add_16x { get { @@ -74,7 +73,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap AddFolder_16x { get { @@ -84,7 +83,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap AddItem_16x { get { @@ -94,7 +93,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap AppearanceEditor_16x { get { @@ -104,7 +103,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ASPWebSite_16x { get { @@ -114,7 +113,17 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Backup_Icon { + get { + object obj = ResourceManager.GetObject("Backup_Icon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Close_16x { get { @@ -124,7 +133,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap CloseSolution_16x { get { @@ -134,7 +143,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap CollapseAll_16x { get { @@ -144,7 +153,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ConnectedOverlay { get { @@ -154,7 +163,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Console_16x { get { @@ -164,7 +173,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Copy_16x { get { @@ -174,7 +183,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Diagram_16x { get { @@ -184,7 +193,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Disconnect_16x { get { @@ -194,7 +203,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Document_16x { get { @@ -204,7 +213,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ExpandAll_16x { get { @@ -214,7 +223,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ExpandDown_16x { get { @@ -224,7 +233,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Export_16x { get { @@ -234,7 +243,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ExtendedProperty_16x { get { @@ -244,7 +253,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap F1Help_16x { get { @@ -254,7 +263,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Favorite_16x { get { @@ -264,7 +273,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap FolderClosed_16x { get { @@ -274,7 +283,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap FullScreen_16x { get { @@ -284,7 +293,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap GlyphDown_16x { get { @@ -294,7 +303,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap GlyphLeft_16x { get { @@ -304,7 +313,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap GlyphRight_16x { get { @@ -314,7 +323,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap GlyphUp_16x { get { @@ -324,7 +333,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Header_dark { get { @@ -334,7 +343,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap HostStatus_Check { get { @@ -344,7 +353,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap HostStatus_Off { get { @@ -354,7 +363,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap HostStatus_On { get { @@ -364,7 +373,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap InsertPanel_16x { get { @@ -374,7 +383,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Key_16x { get { @@ -384,7 +393,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Loading_Spinner { get { @@ -394,7 +403,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Lock_16x { get { @@ -404,7 +413,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap LogError_16x { get { @@ -414,7 +423,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap LogWarning_16x { get { @@ -424,7 +433,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Message_16x { get { @@ -434,7 +443,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Monitor_16x { get { @@ -444,7 +453,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// internal static System.Drawing.Icon mRemoteNG_Icon { get { @@ -454,14 +463,14 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Zeichenfolge, die <Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> + /// Looks up a localized string similar to <Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> /// <VisualElements /// BackgroundColor='#343A40' /// ShowNameOnSquare150x150Logo='on' /// ForegroundText='light' /// Square150x150Logo='VisualElements_150.png' /// Square70x70Logo='VisualElements_70.png' /> - ///</Application> ähnelt. + ///</Application>. /// internal static string mRemoteNG_VisualElementsManifest { get { @@ -470,7 +479,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap NewFile_16x { get { @@ -480,7 +489,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap OpenFile_16x { get { @@ -490,7 +499,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Panel_16x { get { @@ -500,7 +509,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Property_16x { get { @@ -510,7 +519,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap PuttyConfig { get { @@ -520,7 +529,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap PuttySessions { get { @@ -530,7 +539,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Refresh_16x { get { @@ -540,7 +549,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Remove_16x { get { @@ -550,7 +559,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Rename_16x { get { @@ -560,7 +569,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Resize_16x { get { @@ -570,7 +579,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Run_16x { get { @@ -580,7 +589,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap RunUpdate_16x { get { @@ -590,7 +599,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Save_16x { get { @@ -600,7 +609,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Schema_16x { get { @@ -610,7 +619,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap SchemaObjectProperty_16x { get { @@ -620,7 +629,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Search_16x { get { @@ -630,7 +639,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap SearchAndApps_16x { get { @@ -640,7 +649,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Settings_16x { get { @@ -650,7 +659,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap SortAscending_16x { get { @@ -660,7 +669,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap SortDescending_16x { get { @@ -670,7 +679,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap SQLDatabase_16x { get { @@ -680,7 +689,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap StartupProject_16x { get { @@ -690,7 +699,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap StatusInformation_16x { get { @@ -700,7 +709,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Stop_16x { get { @@ -710,7 +719,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap SyncArrow_16x { get { @@ -720,7 +729,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Tab_16x { get { @@ -730,7 +739,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap Test_16x { get { @@ -740,7 +749,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ToggleOfficeKeyboardScheme_16x { get { @@ -750,7 +759,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap UIAboutBox_16x { get { @@ -760,7 +769,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap UniqueKeyError_16x { get { @@ -770,7 +779,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap ViewDownBySchema_16x { get { @@ -780,7 +789,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap VisualElements_150 { get { @@ -790,7 +799,7 @@ namespace mRemoteNG { } /// - /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + /// Looks up a localized resource of type System.Drawing.Bitmap. /// internal static System.Drawing.Bitmap VisualElements_70 { get { diff --git a/mRemoteNG/Properties/Resources.resx b/mRemoteNG/Properties/Resources.resx index 33fb75ec..7bf6e35f 100644 --- a/mRemoteNG/Properties/Resources.resx +++ b/mRemoteNG/Properties/Resources.resx @@ -337,4 +337,7 @@ ..\Resources\Property_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Backup_Icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/mRemoteNG/Properties/Settings.Designer.cs b/mRemoteNG/Properties/Settings.Designer.cs index 2407b4f5..859604ea 100644 --- a/mRemoteNG/Properties/Settings.Designer.cs +++ b/mRemoteNG/Properties/Settings.Designer.cs @@ -1,14 +1,15 @@ //------------------------------------------------------------------------------ // -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.42000 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 // -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ -namespace mRemoteNG.Properties { +namespace mRemoteNG.Properties +{ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs index 04d87a4c..e1f76978 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs @@ -1,6 +1,7 @@ using System; using System.Security; using System.Text.RegularExpressions; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Security.PasswordCreation { diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs index b147f2b8..f3ddee22 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs @@ -1,6 +1,7 @@ using System; using System.Security; using System.Text.RegularExpressions; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Security.PasswordCreation { diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs index b8c4494f..ea816131 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Security; using System.Text.RegularExpressions; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Security.PasswordCreation diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs index b5e0f67c..0e45c71d 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs @@ -1,6 +1,7 @@ using System; using System.Security; using System.Text.RegularExpressions; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Security.PasswordCreation { diff --git a/mRemoteNG/Security/PasswordCreation/PasswordLengthConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordLengthConstraint.cs index 68b30143..d5196aab 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordLengthConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordLengthConstraint.cs @@ -1,5 +1,6 @@ using System; using System.Security; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Security.PasswordCreation diff --git a/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs b/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs index 134f16b0..b3f4c64c 100644 --- a/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs +++ b/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs @@ -1,4 +1,4 @@ -/* +/* * Initial work: * This work (Modern Encryption of a String C#, by James Tuley), * identified by James Tuley, is free of known copyright restrictions. @@ -16,6 +16,7 @@ using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Modes; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs b/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs index 0b551de8..476f1140 100644 --- a/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs +++ b/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs @@ -1,10 +1,11 @@ -using System; +using System; using System.IO; using System.Security; using System.Security.Cryptography; using System.Text; using mRemoteNG.App; using mRemoteNG.Messages; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Security.SymmetricEncryption diff --git a/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs b/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs index 9eb1b5f6..f2cfc1e5 100644 --- a/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs +++ b/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs @@ -6,6 +6,7 @@ using System.Windows.Forms; using mRemoteNG.App.Info; using mRemoteNG.Messages; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools.Cmdline diff --git a/mRemoteNG/Tools/ExternalTool.cs b/mRemoteNG/Tools/ExternalTool.cs index f965b2fb..a574e52d 100644 --- a/mRemoteNG/Tools/ExternalTool.cs +++ b/mRemoteNG/Tools/ExternalTool.cs @@ -9,6 +9,7 @@ using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Container; using mRemoteNG.Messages; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/Tools/MiscTools.cs b/mRemoteNG/Tools/MiscTools.cs index 3472c608..2e0f508a 100644 --- a/mRemoteNG/Tools/MiscTools.cs +++ b/mRemoteNG/Tools/MiscTools.cs @@ -11,6 +11,7 @@ using mRemoteNG.Messages; using mRemoteNG.Properties; using mRemoteNG.UI.Forms; using MySql.Data.Types; +using mRemoteNG.Resources.Language; using static System.String; namespace mRemoteNG.Tools diff --git a/mRemoteNG/Tools/NotificationAreaIcon.cs b/mRemoteNG/Tools/NotificationAreaIcon.cs index 395bfbca..14902a2a 100644 --- a/mRemoteNG/Tools/NotificationAreaIcon.cs +++ b/mRemoteNG/Tools/NotificationAreaIcon.cs @@ -6,6 +6,7 @@ using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Properties; using mRemoteNG.UI.Forms; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools diff --git a/mRemoteNG/Tools/ReconnectGroup.Designer.cs b/mRemoteNG/Tools/ReconnectGroup.Designer.cs index 0143c07c..2166207c 100644 --- a/mRemoteNG/Tools/ReconnectGroup.Designer.cs +++ b/mRemoteNG/Tools/ReconnectGroup.Designer.cs @@ -1,4 +1,5 @@ using mRemoteNG.UI.Controls; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools { @@ -69,7 +70,7 @@ namespace mRemoteNG.Tools this.btnClose.Name = "btnClose"; this.btnClose.Size = new System.Drawing.Size(159, 23); this.btnClose.TabIndex = 7; - this.btnClose.Text = global::mRemoteNG.Language._Close; + this.btnClose.Text = Language._Close; this.btnClose.UseVisualStyleBackColor = true; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // @@ -91,7 +92,7 @@ namespace mRemoteNG.Tools this.chkReconnectWhenReady.Name = "chkReconnectWhenReady"; this.chkReconnectWhenReady.Size = new System.Drawing.Size(140, 17); this.chkReconnectWhenReady.TabIndex = 6; - this.chkReconnectWhenReady.Text = global::mRemoteNG.Language.CheckboxReconnectWhenReady; + this.chkReconnectWhenReady.Text = Language.CheckboxReconnectWhenReady; this.chkReconnectWhenReady.UseVisualStyleBackColor = true; this.chkReconnectWhenReady.CheckedChanged += new System.EventHandler(this.chkReconnectWhenReady_CheckedChanged); // diff --git a/mRemoteNG/Tools/ReconnectGroup.cs b/mRemoteNG/Tools/ReconnectGroup.cs index 6387bd53..6aa9bc26 100644 --- a/mRemoteNG/Tools/ReconnectGroup.cs +++ b/mRemoteNG/Tools/ReconnectGroup.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools { diff --git a/mRemoteNG/Tools/ScanHost.cs b/mRemoteNG/Tools/ScanHost.cs index 6af10c60..ad347ae8 100644 --- a/mRemoteNG/Tools/ScanHost.cs +++ b/mRemoteNG/Tools/ScanHost.cs @@ -8,6 +8,7 @@ using mRemoteNG.Connection.Protocol.SSH; using mRemoteNG.Connection.Protocol.Telnet; using mRemoteNG.Connection.Protocol.VNC; using mRemoteNG.Messages; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools diff --git a/mRemoteNG/Tools/SecureTransfer.cs b/mRemoteNG/Tools/SecureTransfer.cs index 6feb30a7..2c93e052 100644 --- a/mRemoteNG/Tools/SecureTransfer.cs +++ b/mRemoteNG/Tools/SecureTransfer.cs @@ -4,6 +4,7 @@ using mRemoteNG.App; using Renci.SshNet; using Renci.SshNet.Sftp; using static System.IO.FileMode; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools { diff --git a/mRemoteNG/Tools/Tools.LocalizedAttributes.cs b/mRemoteNG/Tools/Tools.LocalizedAttributes.cs index c67ce616..d4c2d7fb 100644 --- a/mRemoteNG/Tools/Tools.LocalizedAttributes.cs +++ b/mRemoteNG/Tools/Tools.LocalizedAttributes.cs @@ -1,5 +1,6 @@ -using System; +using System; using System.ComponentModel; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs b/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs index 6aadb61f..b97f6bf1 100644 --- a/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs +++ b/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs @@ -5,6 +5,7 @@ using BrightIdeasSoftware; using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tree diff --git a/mRemoteNG/Tree/Root/RootNodeInfo.cs b/mRemoteNG/Tree/Root/RootNodeInfo.cs index be8f30cb..fd5f7856 100644 --- a/mRemoteNG/Tree/Root/RootNodeInfo.cs +++ b/mRemoteNG/Tree/Root/RootNodeInfo.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tree.Root diff --git a/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs b/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs index 53198d45..748fd1df 100644 --- a/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs +++ b/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs @@ -1,5 +1,6 @@ using mRemoteNG.Properties; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tree.Root { diff --git a/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs b/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs index 7a265aff..bf83cc6a 100644 --- a/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs +++ b/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs @@ -2,6 +2,7 @@ using mRemoteNG.Container; using System; using System.Windows.Forms; +using mRemoteNG.Resources.Language; namespace mRemoteNG.Tree diff --git a/mRemoteNG/UI/Controls/ConnectionContextMenu.cs b/mRemoteNG/UI/Controls/ConnectionContextMenu.cs index c9930606..87f7c5e6 100644 --- a/mRemoteNG/UI/Controls/ConnectionContextMenu.cs +++ b/mRemoteNG/UI/Controls/ConnectionContextMenu.cs @@ -10,6 +10,7 @@ using mRemoteNG.Tools; using mRemoteNG.Tools.Clipboard; using mRemoteNG.Tree; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; // ReSharper disable UnusedParameter.Local diff --git a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs index 59387d3f..3bf8322b 100644 --- a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs +++ b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs @@ -16,6 +16,7 @@ using mRemoteNG.Security; using mRemoteNG.Tools; using mRemoteNG.Tools.Attributes; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid { diff --git a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs index f23c8c87..95a90044 100644 --- a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs +++ b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs @@ -15,6 +15,7 @@ using mRemoteNG.Tools.Clipboard; using mRemoteNG.Tree; using mRemoteNG.Tree.ClickHandlers; using mRemoteNG.Tree.Root; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/UI/Controls/CredentialRecordListBox.cs b/mRemoteNG/UI/Controls/CredentialRecordListBox.cs index 83a76b7d..e3c46f7c 100644 --- a/mRemoteNG/UI/Controls/CredentialRecordListBox.cs +++ b/mRemoteNG/UI/Controls/CredentialRecordListBox.cs @@ -2,6 +2,7 @@ using System.ComponentModel; using System.Windows.Forms; using mRemoteNG.Credential; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/Controls/CredentialRecordListView.cs b/mRemoteNG/UI/Controls/CredentialRecordListView.cs index c3f38b12..c51cea3a 100644 --- a/mRemoteNG/UI/Controls/CredentialRecordListView.cs +++ b/mRemoteNG/UI/Controls/CredentialRecordListView.cs @@ -6,6 +6,7 @@ using mRemoteNG.Credential; using mRemoteNG.Credential.Repositories; using mRemoteNG.Tools.CustomCollections; using mRemoteNG.UI.Controls.PageSequence; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs b/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs index e2e97748..ec1e553e 100644 --- a/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs +++ b/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs @@ -5,6 +5,7 @@ using mRemoteNG.App; using mRemoteNG.Messages; using mRemoteNG.Tools; using mRemoteNG.Tree; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/Controls/MultiSshToolStrip.cs b/mRemoteNG/UI/Controls/MultiSshToolStrip.cs index 47d9ad50..9764d9f4 100644 --- a/mRemoteNG/UI/Controls/MultiSshToolStrip.cs +++ b/mRemoteNG/UI/Controls/MultiSshToolStrip.cs @@ -7,6 +7,7 @@ using System.Linq; using mRemoteNG.App; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/Controls/QuickConnectComboBox.cs b/mRemoteNG/UI/Controls/QuickConnectComboBox.cs index 4fb49c29..1a1a4038 100644 --- a/mRemoteNG/UI/Controls/QuickConnectComboBox.cs +++ b/mRemoteNG/UI/Controls/QuickConnectComboBox.cs @@ -4,6 +4,7 @@ using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs b/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs index 9289c2da..2586a853 100644 --- a/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs +++ b/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs @@ -11,6 +11,7 @@ using mRemoteNG.Container; using mRemoteNG.Properties; using mRemoteNG.Themes; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/Controls/mrngIpTextBox.cs b/mRemoteNG/UI/Controls/mrngIpTextBox.cs index 15aa2a42..3ad5dc48 100644 --- a/mRemoteNG/UI/Controls/mrngIpTextBox.cs +++ b/mRemoteNG/UI/Controls/mrngIpTextBox.cs @@ -6,6 +6,7 @@ using System; using System.Windows.Forms; using mRemoteNG.Themes; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/Controls/mrngSearchBox.cs b/mRemoteNG/UI/Controls/mrngSearchBox.cs index 2003a303..eab3887d 100644 --- a/mRemoteNG/UI/Controls/mrngSearchBox.cs +++ b/mRemoteNG/UI/Controls/mrngSearchBox.cs @@ -1,5 +1,6 @@ using System; using System.Windows.Forms; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Controls { diff --git a/mRemoteNG/UI/DialogFactory.cs b/mRemoteNG/UI/DialogFactory.cs index 478522a7..64b1b71c 100644 --- a/mRemoteNG/UI/DialogFactory.cs +++ b/mRemoteNG/UI/DialogFactory.cs @@ -5,6 +5,7 @@ using mRemoteNG.App; using mRemoteNG.App.Info; using mRemoteNG.Messages; using mRemoteNG.UI.TaskDialog; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI { diff --git a/mRemoteNG/UI/Forms/FrmAbout.cs b/mRemoteNG/UI/Forms/FrmAbout.cs index a8191a12..35632f00 100644 --- a/mRemoteNG/UI/Forms/FrmAbout.cs +++ b/mRemoteNG/UI/Forms/FrmAbout.cs @@ -2,6 +2,7 @@ using System.Windows.Forms; using mRemoteNG.App.Info; using mRemoteNG.Themes; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { diff --git a/mRemoteNG/UI/Forms/FrmExport.cs b/mRemoteNG/UI/Forms/FrmExport.cs index 204cb515..29dc3246 100644 --- a/mRemoteNG/UI/Forms/FrmExport.cs +++ b/mRemoteNG/UI/Forms/FrmExport.cs @@ -6,6 +6,7 @@ using mRemoteNG.Config.Connections; using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Themes; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { diff --git a/mRemoteNG/UI/Forms/FrmInputBox.cs b/mRemoteNG/UI/Forms/FrmInputBox.cs index b78d6c06..a04afb95 100644 --- a/mRemoteNG/UI/Forms/FrmInputBox.cs +++ b/mRemoteNG/UI/Forms/FrmInputBox.cs @@ -1,5 +1,6 @@ using System.Windows.Forms; using mRemoteNG.Themes; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { diff --git a/mRemoteNG/UI/Forms/FrmPassword.Designer.cs b/mRemoteNG/UI/Forms/FrmPassword.Designer.cs index bb494f22..090e6cee 100644 --- a/mRemoteNG/UI/Forms/FrmPassword.Designer.cs +++ b/mRemoteNG/UI/Forms/FrmPassword.Designer.cs @@ -1,4 +1,5 @@ using mRemoteNG.UI.Controls; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { @@ -75,7 +76,7 @@ namespace mRemoteNG.UI.Forms this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(75, 23); this.btnOK.TabIndex = 7; - this.btnOK.Text = global::mRemoteNG.Language._Ok; + this.btnOK.Text = Language._Ok; this.btnOK.UseVisualStyleBackColor = true; this.btnOK.Click += new System.EventHandler(this.BtnOK_Click); // @@ -88,7 +89,7 @@ namespace mRemoteNG.UI.Forms this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(75, 23); this.btnCancel.TabIndex = 6; - this.btnCancel.Text = global::mRemoteNG.Language._Cancel; + this.btnCancel.Text = Language._Cancel; this.btnCancel.UseVisualStyleBackColor = true; this.btnCancel.Click += new System.EventHandler(this.BtnCancel_Click); // diff --git a/mRemoteNG/UI/Forms/FrmPassword.cs b/mRemoteNG/UI/Forms/FrmPassword.cs index f9f96e40..20363086 100644 --- a/mRemoteNG/UI/Forms/FrmPassword.cs +++ b/mRemoteNG/UI/Forms/FrmPassword.cs @@ -4,6 +4,7 @@ using System.Windows.Forms; using mRemoteNG.Security; using mRemoteNG.Themes; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { diff --git a/mRemoteNG/UI/Forms/FrmUnhandledException.cs b/mRemoteNG/UI/Forms/FrmUnhandledException.cs index a387f82d..34ff87d9 100644 --- a/mRemoteNG/UI/Forms/FrmUnhandledException.cs +++ b/mRemoteNG/UI/Forms/FrmUnhandledException.cs @@ -5,6 +5,7 @@ using System.Text; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.App.Info; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { diff --git a/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs b/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs index e5dc3ab5..e6ec5b61 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs @@ -7,6 +7,7 @@ using mRemoteNG.Config.Putty; using mRemoteNG.Connection.Protocol; using mRemoteNG.Properties; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs b/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs index 97e378e9..6663a038 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs @@ -3,6 +3,7 @@ using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Properties; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs index 7c4bc7e9..89d4fc9b 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.Designer.cs @@ -1,6 +1,5 @@ - - -using mRemoteNG.UI.Controls; +using mRemoteNG.UI.Controls; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { @@ -154,7 +153,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkSingleClickOnOpenedConnectionSwitchesToIt.Name = "chkSingleClickOnOpenedConnectionSwitchesToIt"; this.chkSingleClickOnOpenedConnectionSwitchesToIt.Size = new System.Drawing.Size(492, 17); this.chkSingleClickOnOpenedConnectionSwitchesToIt.TabIndex = 1; - this.chkSingleClickOnOpenedConnectionSwitchesToIt.Text = global::mRemoteNG.Language.SingleClickOnOpenConnectionSwitchesToIt; + this.chkSingleClickOnOpenedConnectionSwitchesToIt.Text = Language.SingleClickOnOpenConnectionSwitchesToIt; this.chkSingleClickOnOpenedConnectionSwitchesToIt.UseVisualStyleBackColor = true; // // lblAutoSave1 diff --git a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs index 557fee51..6649cbcb 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using mRemoteNG.Config.Connections; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs index 3197d076..50c6982f 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs @@ -2,6 +2,7 @@ using mRemoteNG.App; using mRemoteNG.Properties; using mRemoteNG.Security.SymmetricEncryption; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs index 7412407a..c3bcdb6b 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs @@ -3,6 +3,7 @@ using System.IO; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs b/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs index 29c9dee6..f11cc2b8 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs @@ -8,6 +8,7 @@ using mRemoteNG.Config.Serializers.ConnectionSerializers.Xml; using mRemoteNG.Properties; using mRemoteNG.Security; using mRemoteNG.Security.Factories; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs index 6d865fb6..b5118bf7 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs @@ -4,6 +4,7 @@ using mRemoteNG.Config.Connections.Multiuser; using mRemoteNG.Config.DatabaseConnectors; using mRemoteNG.Properties; using mRemoteNG.Security.SymmetricEncryption; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs index 1ad0e9fc..836dbcb8 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs @@ -1,5 +1,6 @@ using System; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs b/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs index 66e11b91..404aecb9 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.Designer.cs @@ -1,6 +1,5 @@ - - -using mRemoteNG.UI.Controls; +using mRemoteNG.UI.Controls; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { @@ -80,7 +79,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages this.chkIdentifyQuickConnectTabs.Name = "chkIdentifyQuickConnectTabs"; this.chkIdentifyQuickConnectTabs.Size = new System.Drawing.Size(315, 17); this.chkIdentifyQuickConnectTabs.TabIndex = 4; - this.chkIdentifyQuickConnectTabs.Text = global::mRemoteNG.Language.IdentifyQuickConnectTabs; + this.chkIdentifyQuickConnectTabs.Text = Language.IdentifyQuickConnectTabs; this.chkIdentifyQuickConnectTabs.UseVisualStyleBackColor = true; // // chkOpenNewTabRightOfSelected diff --git a/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs index d03a4d5e..c8999794 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs @@ -1,4 +1,5 @@ using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs index bc00382d..6266db90 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using BrightIdeasSoftware; using mRemoteNG.Properties; using mRemoteNG.UI.TaskDialog; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs b/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs index 6c86ce55..4e336e54 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs @@ -8,6 +8,7 @@ using mRemoteNG.Properties; using mRemoteNG.Security.SymmetricEncryption; using mRemoteNG.Tools; using mRemoteNG.UI.TaskDialog; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { diff --git a/mRemoteNG/UI/Forms/frmChoosePanel.Designer.cs b/mRemoteNG/UI/Forms/frmChoosePanel.Designer.cs index b285b905..4f6b341e 100644 --- a/mRemoteNG/UI/Forms/frmChoosePanel.Designer.cs +++ b/mRemoteNG/UI/Forms/frmChoosePanel.Designer.cs @@ -1,6 +1,5 @@ - - -using mRemoteNG.UI.Controls; +using mRemoteNG.UI.Controls; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { @@ -54,7 +53,7 @@ namespace mRemoteNG.UI.Forms this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(75, 24); this.btnOK.TabIndex = 20; - this.btnOK.Text = global::mRemoteNG.Language._Ok; + this.btnOK.Text = Language._Ok; this.btnOK.UseVisualStyleBackColor = true; this.btnOK.Click += new System.EventHandler(this.btnOK_Click); // @@ -76,7 +75,7 @@ namespace mRemoteNG.UI.Forms this.btnNew.Name = "btnNew"; this.btnNew.Size = new System.Drawing.Size(75, 24); this.btnNew.TabIndex = 40; - this.btnNew.Text = global::mRemoteNG.Language._New; + this.btnNew.Text = Language._New; this.btnNew.UseVisualStyleBackColor = true; this.btnNew.Click += new System.EventHandler(this.btnNew_Click); // diff --git a/mRemoteNG/UI/Forms/frmChoosePanel.cs b/mRemoteNG/UI/Forms/frmChoosePanel.cs index 57110215..432b782f 100644 --- a/mRemoteNG/UI/Forms/frmChoosePanel.cs +++ b/mRemoteNG/UI/Forms/frmChoosePanel.cs @@ -2,6 +2,7 @@ using mRemoteNG.App; using mRemoteNG.Themes; using mRemoteNG.UI.Panels; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { diff --git a/mRemoteNG/UI/Forms/frmMain.cs b/mRemoteNG/UI/Forms/frmMain.cs index aacd7a72..fa0ab8a7 100644 --- a/mRemoteNG/UI/Forms/frmMain.cs +++ b/mRemoteNG/UI/Forms/frmMain.cs @@ -30,6 +30,7 @@ using mRemoteNG.UI.Panels; using WeifenLuo.WinFormsUI.Docking; using mRemoteNG.UI.Controls; using Settings = mRemoteNG.Properties.Settings; +using mRemoteNG.Resources.Language; // ReSharper disable MemberCanBePrivate.Global diff --git a/mRemoteNG/UI/Forms/frmOptions.cs b/mRemoteNG/UI/Forms/frmOptions.cs index 0da3984c..0ed14f95 100644 --- a/mRemoteNG/UI/Forms/frmOptions.cs +++ b/mRemoteNG/UI/Forms/frmOptions.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using mRemoteNG.Themes; using System.Configuration; using mRemoteNG.Properties; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { @@ -82,7 +83,7 @@ namespace mRemoteNG.UI.Forms {typeof(SecurityPage).Name, new SecurityPage {Dock = DockStyle.Fill}}, {typeof(AdvancedPage).Name, new AdvancedPage {Dock = DockStyle.Fill}}, {typeof(BackupPage).Name, new BackupPage {Dock = DockStyle.Fill}}, - {typeof(ComponentsPage).Name, new ComponentsPage {Dock = DockStyle.Fill}}, + //{typeof(ComponentsPage).Name, new ComponentsPage {Dock = DockStyle.Fill}}, }; } diff --git a/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs b/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs index eb43d314..96550245 100644 --- a/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs +++ b/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs @@ -1,6 +1,7 @@ using System; using System.Windows.Forms; using mRemoteNG.Tools; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Menu { diff --git a/mRemoteNG/UI/Menu/FileMenu.cs b/mRemoteNG/UI/Menu/FileMenu.cs index dac9cc7f..80ba2965 100644 --- a/mRemoteNG/UI/Menu/FileMenu.cs +++ b/mRemoteNG/UI/Menu/FileMenu.cs @@ -6,6 +6,7 @@ using mRemoteNG.Properties; using mRemoteNG.Security; using mRemoteNG.UI.Forms; using mRemoteNG.UI.Window; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Menu { diff --git a/mRemoteNG/UI/Menu/HelpMenu.cs b/mRemoteNG/UI/Menu/HelpMenu.cs index a887c71d..b3a61930 100644 --- a/mRemoteNG/UI/Menu/HelpMenu.cs +++ b/mRemoteNG/UI/Menu/HelpMenu.cs @@ -4,6 +4,7 @@ using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.App.Info; using mRemoteNG.UI.Forms; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Menu { diff --git a/mRemoteNG/UI/Menu/ToolsMenu.cs b/mRemoteNG/UI/Menu/ToolsMenu.cs index 5bdddcd1..32f83022 100644 --- a/mRemoteNG/UI/Menu/ToolsMenu.cs +++ b/mRemoteNG/UI/Menu/ToolsMenu.cs @@ -2,6 +2,7 @@ using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Credential; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Menu { diff --git a/mRemoteNG/UI/Menu/ViewMenu.cs b/mRemoteNG/UI/Menu/ViewMenu.cs index 7ff5d4d9..1d79eee9 100644 --- a/mRemoteNG/UI/Menu/ViewMenu.cs +++ b/mRemoteNG/UI/Menu/ViewMenu.cs @@ -6,6 +6,7 @@ using mRemoteNG.Properties; using mRemoteNG.UI.Forms; using mRemoteNG.UI.Panels; using mRemoteNG.UI.Window; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Menu { diff --git a/mRemoteNG/UI/Panels/PanelAdder.cs b/mRemoteNG/UI/Panels/PanelAdder.cs index 700e17e8..239b0df4 100644 --- a/mRemoteNG/UI/Panels/PanelAdder.cs +++ b/mRemoteNG/UI/Panels/PanelAdder.cs @@ -7,6 +7,7 @@ using System.Collections; using System.Linq; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Panels { diff --git a/mRemoteNG/UI/Tabs/ConnectionTab.cs b/mRemoteNG/UI/Tabs/ConnectionTab.cs index 7b9ddad9..31c9faff 100644 --- a/mRemoteNG/UI/Tabs/ConnectionTab.cs +++ b/mRemoteNG/UI/Tabs/ConnectionTab.cs @@ -9,6 +9,7 @@ using mRemoteNG.Connection.Protocol.VNC; using mRemoteNG.Properties; using mRemoteNG.UI.TaskDialog; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Tabs { diff --git a/mRemoteNG/UI/Tabs/DockPaneStripNG.cs b/mRemoteNG/UI/Tabs/DockPaneStripNG.cs index 537211a2..a769424a 100644 --- a/mRemoteNG/UI/Tabs/DockPaneStripNG.cs +++ b/mRemoteNG/UI/Tabs/DockPaneStripNG.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using mRemoteNG.Connection; using mRemoteNG.Properties; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Tabs { diff --git a/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs b/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs index 50aee430..38eef4a6 100644 --- a/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs +++ b/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using mRemoteNG.UI.Controls; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.TaskDialog { diff --git a/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs b/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs index 2def983e..96383d38 100644 --- a/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs +++ b/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs @@ -5,6 +5,7 @@ using WeifenLuo.WinFormsUI.Docking; using mRemoteNG.App; using mRemoteNG.Container; using mRemoteNG.Themes; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window { diff --git a/mRemoteNG/UI/Window/ConfigWindow.cs b/mRemoteNG/UI/Window/ConfigWindow.cs index aa32a3fa..0666e358 100644 --- a/mRemoteNG/UI/Window/ConfigWindow.cs +++ b/mRemoteNG/UI/Window/ConfigWindow.cs @@ -14,6 +14,7 @@ using mRemoteNG.Themes; using mRemoteNG.Tree.Root; using mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window diff --git a/mRemoteNG/UI/Window/ConnectionTreeWindow.cs b/mRemoteNG/UI/Window/ConnectionTreeWindow.cs index e1e5598f..bc32b3f3 100644 --- a/mRemoteNG/UI/Window/ConnectionTreeWindow.cs +++ b/mRemoteNG/UI/Window/ConnectionTreeWindow.cs @@ -16,6 +16,7 @@ using mRemoteNG.Tree.Root; using mRemoteNG.UI.Controls.ConnectionTree; using mRemoteNG.UI.TaskDialog; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; // ReSharper disable ArrangeAccessorOwnerBody diff --git a/mRemoteNG/UI/Window/ConnectionWindow.cs b/mRemoteNG/UI/Window/ConnectionWindow.cs index 4829267b..a20fb5b7 100644 --- a/mRemoteNG/UI/Window/ConnectionWindow.cs +++ b/mRemoteNG/UI/Window/ConnectionWindow.cs @@ -18,6 +18,7 @@ using mRemoteNG.UI.Forms; using mRemoteNG.UI.Tabs; using mRemoteNG.UI.TaskDialog; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window { diff --git a/mRemoteNG/UI/Window/ErrorAndInfoWindow.Designer.cs b/mRemoteNG/UI/Window/ErrorAndInfoWindow.Designer.cs index efc94417..3c547af1 100644 --- a/mRemoteNG/UI/Window/ErrorAndInfoWindow.Designer.cs +++ b/mRemoteNG/UI/Window/ErrorAndInfoWindow.Designer.cs @@ -1,5 +1,6 @@  using mRemoteNG.UI.Controls; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window { @@ -82,7 +83,7 @@ namespace mRemoteNG.UI.Window // // clmMessage // - this.clmMessage.Text = global::mRemoteNG.Language.Message; + this.clmMessage.Text = Language.Message; this.clmMessage.Width = 184; // // cMenMC @@ -102,7 +103,7 @@ namespace mRemoteNG.UI.Window this.cMenMCCopy.Name = "cMenMCCopy"; this.cMenMCCopy.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); this.cMenMCCopy.Size = new System.Drawing.Size(140, 22); - this.cMenMCCopy.Text = global::mRemoteNG.Language.Copy; + this.cMenMCCopy.Text = Language.Copy; this.cMenMCCopy.Click += new System.EventHandler(this.cMenMCCopy_Click); // // cMenMCDelete @@ -111,7 +112,7 @@ namespace mRemoteNG.UI.Window this.cMenMCDelete.Name = "cMenMCDelete"; this.cMenMCDelete.ShortcutKeys = System.Windows.Forms.Keys.Delete; this.cMenMCDelete.Size = new System.Drawing.Size(140, 22); - this.cMenMCDelete.Text = global::mRemoteNG.Language.Delete; + this.cMenMCDelete.Text = Language.Delete; this.cMenMCDelete.Click += new System.EventHandler(this.cMenMCDelete_Click); // // imgListMC @@ -152,7 +153,7 @@ namespace mRemoteNG.UI.Window this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.HideOnClose = true; this.Name = "ErrorAndInfoWindow"; - this.TabText = global::mRemoteNG.Language.Notifications; + this.TabText = Language.Notifications; this.Text = "Notifications"; this.Load += new System.EventHandler(this.ErrorsAndInfos_Load); this.Resize += new System.EventHandler(this.ErrorsAndInfos_Resize); diff --git a/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs b/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs index 422c65fa..51e5f633 100644 --- a/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs +++ b/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs @@ -9,6 +9,7 @@ using mRemoteNG.App; using mRemoteNG.Messages; using mRemoteNG.UI.Forms; using mRemoteNG.Themes; +using mRemoteNG.Resources.Language; using Message = mRemoteNG.Messages.Message; namespace mRemoteNG.UI.Window diff --git a/mRemoteNG/UI/Window/ExternalToolsWindow.cs b/mRemoteNG/UI/Window/ExternalToolsWindow.cs index 92902a42..d164d01e 100644 --- a/mRemoteNG/UI/Window/ExternalToolsWindow.cs +++ b/mRemoteNG/UI/Window/ExternalToolsWindow.cs @@ -9,6 +9,7 @@ using WeifenLuo.WinFormsUI.Docking; using mRemoteNG.UI.Forms; using mRemoteNG.Themes; using mRemoteNG.Tools.CustomCollections; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window { diff --git a/mRemoteNG/UI/Window/PortScanWindow.cs b/mRemoteNG/UI/Window/PortScanWindow.cs index 76b60cf7..27824807 100644 --- a/mRemoteNG/UI/Window/PortScanWindow.cs +++ b/mRemoteNG/UI/Window/PortScanWindow.cs @@ -11,6 +11,7 @@ using mRemoteNG.Messages; using mRemoteNG.Tools; using mRemoteNG.Tree.Root; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window { diff --git a/mRemoteNG/UI/Window/SSHTransferWindow.cs b/mRemoteNG/UI/Window/SSHTransferWindow.cs index 07933af5..b102bf35 100644 --- a/mRemoteNG/UI/Window/SSHTransferWindow.cs +++ b/mRemoteNG/UI/Window/SSHTransferWindow.cs @@ -8,6 +8,7 @@ using System.Windows.Forms; using mRemoteNG.Messages; using mRemoteNG.UI.Controls; using mRemoteNG.UI.Forms; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window { diff --git a/mRemoteNG/UI/Window/UltraVNCWindow.cs b/mRemoteNG/UI/Window/UltraVNCWindow.cs index f065eb35..e6d829d5 100644 --- a/mRemoteNG/UI/Window/UltraVNCWindow.cs +++ b/mRemoteNG/UI/Window/UltraVNCWindow.cs @@ -1,6 +1,7 @@ using System; using mRemoteNG.App; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window diff --git a/mRemoteNG/UI/Window/UpdateWindow.cs b/mRemoteNG/UI/Window/UpdateWindow.cs index da3f912d..0d0da221 100644 --- a/mRemoteNG/UI/Window/UpdateWindow.cs +++ b/mRemoteNG/UI/Window/UpdateWindow.cs @@ -10,6 +10,7 @@ using mRemoteNG.App.Update; using mRemoteNG.Messages; using mRemoteNG.Themes; using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Window { diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index adbe5fe2..f3cb90a5 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -516,9 +516,6 @@ BackupPage.cs - - ComponentsPage.cs - UserControl From b899056a8e1351d7f7f2fdb40d17487c76e49df5 Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Fri, 17 Sep 2021 23:12:47 +0100 Subject: [PATCH 3/8] lib update --- mRemoteNG/Themes/ThemeManager.cs | 14 +------------- mRemoteNG/mRemoteNG.csproj | 14 +++++++------- mRemoteNGSpecs/mRemoteNGSpecs.csproj | 2 +- mRemoteNGTests/mRemoteNGTests.csproj | 4 ++-- 4 files changed, 11 insertions(+), 23 deletions(-) diff --git a/mRemoteNG/Themes/ThemeManager.cs b/mRemoteNG/Themes/ThemeManager.cs index 07ce282b..4edbdaaa 100644 --- a/mRemoteNG/Themes/ThemeManager.cs +++ b/mRemoteNG/Themes/ThemeManager.cs @@ -1,4 +1,4 @@ -using mRemoteNG.App; +using mRemoteNG.App; using System; using System.Collections; using System.Collections.Generic; @@ -167,18 +167,6 @@ namespace mRemoteNG.Themes //Load the embedded themes, extended palettes are taken from the vs2015 themes, trying to match the color theme - // 2003 - var vs2003 = new ThemeInfo("vs2003", new VS2003Theme(), "", - VisualStudioToolStripExtender.VsVersion.Vs2003, - ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); - themes.Add(vs2003.Name, vs2003); - - // 2005 - var vs2005 = new ThemeInfo("vs2005", new VS2005Theme(), "", - VisualStudioToolStripExtender.VsVersion.Vs2005, - ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); - themes.Add(vs2005.Name, vs2005); - // 2012 var vs2012Light = new ThemeInfo("vs2012Light", new VS2012LightTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2012, diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index f3cb90a5..c28a8224 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -1335,28 +1335,28 @@ 1.3.0 - 3.0.6 + 3.1.0 - 3.0.6 + 3.1.0 - 3.0.6 + 3.1.0 - 3.0.6 + 3.1.0 - 3.0.6 + 3.1.0 - 3.17.3 + 3.18.0 2.0.12 - 1.0.902.49 + 1.0.961.33 8.0.26 diff --git a/mRemoteNGSpecs/mRemoteNGSpecs.csproj b/mRemoteNGSpecs/mRemoteNGSpecs.csproj index 679c2beb..402f3f9b 100644 --- a/mRemoteNGSpecs/mRemoteNGSpecs.csproj +++ b/mRemoteNGSpecs/mRemoteNGSpecs.csproj @@ -73,7 +73,7 @@ 16.0.1 - 3.17.3 + 3.18.0 13.0.1 diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj index c5bf2b2c..bb44ddef 100644 --- a/mRemoteNGTests/mRemoteNGTests.csproj +++ b/mRemoteNGTests/mRemoteNGTests.csproj @@ -296,7 +296,7 @@ 4.4.1 - 3.0.6 + 3.1.0 2.0.12 @@ -322,7 +322,7 @@ 4.7.1221 - 4.8.11 + 4.8.12 5.0.0 From 8dc5e813743b4ec8cd10c84ad708721a7a1d477e Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Tue, 21 Sep 2021 22:46:49 +0100 Subject: [PATCH 4/8] Update French translation #2045 --- mRemoteNG/Language/Language.fr.resx | 1000 +++++++++++++++++++++------ 1 file changed, 789 insertions(+), 211 deletions(-) diff --git a/mRemoteNG/Language/Language.fr.resx b/mRemoteNG/Language/Language.fr.resx index 4cba6f64..4fef3e05 100644 --- a/mRemoteNG/Language/Language.fr.resx +++ b/mRemoteNG/Language/Language.fr.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - A propos + À propos AddNodeFromXML a échoué ! @@ -142,10 +142,10 @@ Toujours afficher l'icône dans la zone de notification - Demandez-moi plus tard + Me le demander plus tard - Personnalisez les paramètres maintenant + Personnaliser les paramètres maintenant Utiliser les paramètres recommandés @@ -160,7 +160,7 @@ Apparence - Sauvegarde automatique toutes les: + Sauvegarde automatique en minutes (0 = désactivé) : Dernière version @@ -211,10 +211,10 @@ &Arrêter - Tester le Proxy + Tester le proxy - Impossible de démarrer le scan de port, format d'addresse IP incorrect ! + Impossible de démarrer le scan de port : format d'adresse IP incorrect ! Apparence @@ -229,7 +229,7 @@ Passerelle - Autre + Divers Protocole @@ -250,7 +250,7 @@ Ce serveur proxy requiert une authentification - Utilisez un chemin personnalisé pour PuTTY : + Utiliser un chemin personnalisé pour PuTTY : Se reconnecter une fois prêt @@ -265,7 +265,7 @@ En attente de fermeture - Vérifier Encore une fois + Vérifier de nouveau Vérifier les mises à jour au démarrage @@ -277,10 +277,10 @@ Vérifier l'installation correcte des composants au démarrage - Choisissez panneau avant de se connecter + Choisir un panneau avant de se connecter - Ports Fermés + Ports fermés Réduire tous les dossiers @@ -298,7 +298,7 @@ Impossible de convertir les arguments de la ligne de commande ! - {0} a détecté que l'utilitaire Lenovo Auto Scroll Utility est executé sur le système. Cet utilitaire est connu pour générer des problèmes avec {0}. Il est recommandé de le désactiver ou de le désinstaller. + {0} a détecté que l'utilitaire Lenovo Auto Scroll Utility est exécuté sur le système. Cet utilitaire est connu pour générer des problèmes avec {0}. Il est recommandé de le désactiver ou de le désinstaller. Problème de compatibilité détecté @@ -322,25 +322,25 @@ pGrid_PopertyValueChanged a échoué ! - Fenêtre de configuration échec du chargement ! + Échec du chargement de la fenêtre de configuration ! - Êtes-vous sûr de vouloir fermer le panneau, "{0}"? Toutes les connexions contenues dans ce panneau seront fermées également. + Êtes-vous sûr de vouloir fermer le panneau "{0}" ? Toutes les connexions contenues dans ce panneau seront également fermées. - Êtes-vous sûr de vouloir supprimer l'outil externe, "{0}"? + Êtes-vous sûr de vouloir supprimer l'outil externe "{0}" ? - Êtes-vous sûr de vouloir supprimer l'outil externe séléctioné :"{0}"? + Êtes-vous sûr de vouloir supprimer l'outil externe sélectionné "{0}" ? - Êtes-vous sûr de vouloir supprimer la connexion, "{0}"? + Êtes-vous sûr de vouloir supprimer la connexion "{0}" ? - Êtes-vous sûr de vouloir supprimer le dossier vide, "{0}"? + Êtes-vous sûr de vouloir supprimer le dossier vide "{0}" ? - Êtes-vous sûr de vouloir supprimer le dossier, "{0}"? Tous les dossiers ou les connexions qu'il contient seront également supprimés. + Êtes-vous sûr de vouloir supprimer le dossier "{0}" ? Tous les dossiers et connexions qu'il contient seront également supprimés. Voulez-vous fermer toutes les connexions ouvertes ? @@ -361,19 +361,16 @@ Évènement de protocole connecté - Connexion à "{0}"via "{1}"créé par l'utilisateur "{2}"; (Description: "{3}"Champ Utilisateur: "{4}") + Connexion à "{0}" via "{1}" créée par l'utilisateur "{2}" (Description : "{3}" Champ utilisateur : "{4}") Connexion échouée ! - - Erreur de protocole - - L'ouverture de la connexion a échouée ! + L'ouverture de la connexion a échoué ! - Impossible d'ouvrir la connexion : Aucun nom d'hôte spécifié ! + Impossible d'ouvrir la connexion : aucun nom d'hôte spécifié ! Connexions @@ -382,19 +379,20 @@ Impossible de définir le port par défaut ! - Impossible de créer le fichier de sauvegarde de connexions ! + Impossible de créer le fichier de sauvegarde des connexions ! - Connexions fichier "{0}" ne peut être chargé ! + Le fichier des connexions "{0}" ne peut pas être chargé ! - Connexions fichier "{0}" ne peut être chargé ! À partir de fichiers de nouvelles connexions. + Le fichier des connexions "{0}" ne peut pas être chargé ! +Démarrage avec un nouveau fichier de connexions. - Impossible d'enregistrer le fichier de connexions sous "{0}" ! + Impossible d'enregistrer le fichier des connexions sous "{0}" ! - Connectez-vous à une session de console + Se connecter à une session de console Connexion (avec options) @@ -409,7 +407,7 @@ Échec de fermeture de la connexion ! - Impossible de créer le nouveau fichier de connexions ! + Impossible de créer le nouveau fichier des connexions ! Le contrôle ToolStrip est introuvable dans le FilteredPropertyGrid. @@ -427,16 +425,16 @@ Télécharger et installer - Double + Doublon Voulez-vous continuer sans mot de passe ? - Pour un Login, Mot de passe ou Domaine vide, utiliser : + Pour un identifiant, mot de passe ou domaine vide, utiliser : - Chiffrer complètement le fichier de connexion + Chiffrer complètement le fichier des connexions IP de fin @@ -451,10 +449,10 @@ Échec de l'ajout du dossier (UI.Window.Tree).{0} - La base de données version {0} n'est pas compatible avec cette version de {1}. + La base de données version {0} n'est pas compatible avec cette version {1}. - La liste de connexion n'as pu être sauvegardée. + La liste des connexions n'a pas pu être sauvegardée. Échec du déchiffrement.{0} @@ -466,7 +464,7 @@ Erreurs - Le fichier de connexion ne peut pas être chargé. {0}{0}{2}{0}{3}{0}{0} Pour éviter la perte de données, {1} va être fermé. + Le fichier des connexions ne peut pas être chargé. {0}{0}{2}{0}{3}{0}{0} Pour éviter la perte de données, {1} va être fermé. Échec de VerifyDatabaseVersion (Config.Connections.Save). {0} @@ -484,28 +482,28 @@ Tous les fichiers (*.*) - Les dossiers de candidature (*. exe) + Applications (*.exe) - Fichiers mRemote CSV (*. csv) + Fichiers CSV mRemoteNG (*.csv) - Fichiers mRemote XML (*. xml) + Fichiers XML mRemoteNG (*.xml) - Fichiers RDP (*. rdp) + Fichiers RDP (*.rdp) Hériter {0} - Description de la propriété héritée: {0} + Description de la propriété héritée : {0} Gratuit - Plein Écran + Plein écran Général @@ -532,19 +530,19 @@ Impossible de créer de nouvelles connexions HTTP ! - Échec de changement de Tuile du Document HTTP ! + Échec de changement de tuile du document HTTP ! Échec de Set HTTP Props ! - Identifier les onglets de connexion rapide en ajoutant le préfixe "Rapide". + Identifier les onglets de connexion rapide en ajoutant le préfixe "Rapide" Importer à partir d'Active Directory - Importer à partir du balayage de ports + Importer à partir du scan de ports Informations @@ -553,22 +551,22 @@ Échec de l'arrêt du processus Int App ! - Échec du Focus Int App ! + Échec du focus Int App ! - Handle Int App: {0} + Handle Int App : {0} - Échec de l'arrêt forcé du Processus Int App ! + Échec de l'arrêt forcé du processus Int App ! Échec du redimensionnement Int App ! - --- Éléments IntApp --- + --- Éléments Int App --- - Titre Int App: {0} + Titre Int App : {0} Adresse : @@ -577,7 +575,7 @@ Lors de la fermeture des connexions : - Nom Affiché + Nom affiché Domaine @@ -586,25 +584,25 @@ Nom d'hôte : - Édition Portable + Édition portable - Pour configurer les sessions PuTTY cliquez sur ce bouton : + Configurer les sessions PuTTY : - Temps d'attente maximum pour Putty et les composants externes : + Temps d'attente max. pour PuTTY : - Paru sous la GNU General Public License (GPL) + Paru sous la licence GNU General Public License (GPL) - seconde + secondes - Sélectionnez un groupe dans la liste ci-dessous ou cliquez sur Nouveau pour en ajouter un nouveau. Cliquez sur OK pour continuer. + Sélectionner un groupe dans la liste ci-dessous ou cliquer sur Nouveau pour en ajouter un nouveau. Cliquer sur OK pour continuer. - L'état du serveur : + État du serveur : Base de données : @@ -622,10 +620,10 @@ {0} doit être redémarré pour que le changement de langue prenne effet. - La lecture à partir de SQL a échouée ! + Le chargement à partir de la base de données SQL a échoué - Le chargement à partir du XML a échoué ! + Le chargement à partir du fichier XML a échoué ! Fichier local @@ -637,7 +635,7 @@ Ajouter un panneau de connexion - Rechercher des mises à jour + Rechercher les mises à jour Configuration @@ -649,7 +647,7 @@ Copier - Ctrl-Alt-Del + Ctrl-Alt-Suppr Ctrl-Échap @@ -682,7 +680,7 @@ Lancer l'outil externe - Nouveau fichier de connexion + Nouveau fichier de connexions Nouvel outil externe @@ -694,16 +692,16 @@ Tout copier - Supprimer tout + Tout supprimer - Ouvrir un fichier de connexion... + Ouvrir un fichier de connexions... Options - Scan de port + Scan de ports Barre de connexion rapide @@ -721,7 +719,7 @@ Signaler un bug - Réinitialisation de la disposition des panneaux + Réinitialiser la disposition des panneaux Enregistrer le fichier de connexions @@ -730,7 +728,7 @@ Enregistrer le fichier de connexions sous... - Envoyer les touches spéciales (VNC) + Envoyer des touches spéciales (VNC) &Afficher le texte d'aide @@ -745,7 +743,7 @@ Transfert de fichiers SSH - Démarrer le Chat (VNC) + Démarrer le chat (VNC) Forum du support @@ -763,10 +761,10 @@ Voir seulement (VNC) - Site Web + Site web - Réduire dans la zone de notification. + Réduire dans la zone de notification Déplacer vers le bas @@ -775,7 +773,7 @@ Déplacer vers le haut - Mes identifiants de connexion actuels (Informations de connexion Windows) + Mes identifiants de connexion actuels (informations de connexion Windows) Jamais @@ -787,7 +785,7 @@ Nouveau dossier - Nouveau Panneau + Nouveau panneau Nouveau titre @@ -796,10 +794,10 @@ Non - Pas de compression + Aucune compression - Pas d'application externe spécifiée. + Aucune application externe spécifiée. Aucun @@ -814,8 +812,8 @@ Aucune mise à jour disponible - Vous essayez de charger un fichier de connexion qui a été créé avec une version plus ancienne de mRemote, des erreurs internes pourraient survenir. -Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous plait ! + Vous essayez de charger un fichier de connexions qui a été créé avec une version plus ancienne de mRemoteNG. Des erreurs internes peuvent survenir. +Si vous rencontrez une erreur, créez un nouveau fichier de connexions ! Ouvrir les nouveaux onglets à droite de l'onglet actuellement sélectionné @@ -842,40 +840,40 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Merci de remplir tous les champs - Impossible de charger le panneau Scan de port ! + Impossible de charger le panneau Scan de ports ! - Entrez le nom ou l'adresse ip de l'hôte auquel vous souhaitez vous connecter. + Entrer le nom ou l'adresse IP de l'hôte auquel vous souhaitez vous connecter. Sélectionner toutes les options d'héritage. - Sélectionnez le niveau d'authentification que cette connexion doit utiliser. + Sélectionner le niveau d'authentification que cette connexion doit utiliser. - Sélectionnez la manière de vous authentifier auprès du serveur VNC. + Sélectionner la manière de vous authentifier auprès du serveur VNC. - Indiquez si vous souhaitez utiliser le cache bitmap ou non. + Indiquer si vous souhaitez utiliser le cache bitmap ou non. - Sélectionnez la qualité de couleur à utiliser. + Sélectionner la qualité des couleurs à utiliser. - Sélectionnez la valeur de compression à utiliser. + Sélectionner la valeur de compression à utiliser. - Mettez vos notes ou une description de l'hôte ici. + Entrer des notes ou une description de l'hôte ici. - Choisir oui si le thème de l'hôte distant doit être affiché. + Sélectionner Oui pour afficher le thème de l'hôte distant. - Sélectionnez oui si vous voulez afficher le fond d'ecran de l'hôte distant. + Sélectionner Oui pour afficher le fond d'écran de l'hôte distant. - Entrez votre nom de domaine. + Entrer un nom de domaine. Choisir d'utiliser la composition du bureau ou non. @@ -884,112 +882,112 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Choisir d'utiliser le lissage des polices ou non. - Choisissez l'encodage à utiliser. + Choisir l'encodage à utiliser. - Sélectionnez l'outil externe qui doit être démarré. + Sélectionner l'outil externe à démarrer. - Sélectionnez un outil externe qui doit être lancé après la déconnexion de l'hôte distant. + Sélectionner un outil externe à démarrer après la déconnexion de l'hôte distant. - Sélectionnez un outil externe qui doit être lancé avant que la connexion à l'hôte distant ne soit établie. + Sélectionner un outil externe à démarrer avant que la connexion à l'hôte distant ne soit établie. - Choisissez une icône qui s'affichera lorsque vous serez connecté à l'hôte. + Choisir une icône qui s'affichera lorsque vous serez connecté à l'hôte. - Entrez l'adresse MAC de l'hôte distant si vous souhaitez l'utiliser dans un outil externe. + Entrer l'adresse MAC de l'hôte distant si vous souhaitez l'utiliser dans un outil externe. - Nom affiché dans l'arborescence de connexions. + Nom affiché dans l'arborescence des connexions. Panneau dans lequel la connexion sera ouverte. - Entrez votre mot de passe. + Entrer un mot de passe. - Entrez le port d'écoute du protocole choisi + Entrer le port d'écoute du protocole choisi. - Choisissez le protocole utilisé par mRemoteNG pour se connecter à l'hôte. + Choisir le protocole utilisé par mRemoteNG pour se connecter à l'hôte. - Sélectionnez une session PuTTY à utiliser lors de la connexion. + Sélectionner une session PuTTY à utiliser lors de la connexion. - Spécifie le nom de domaine fourni par l'utilisateur pour se connecter au serveur RD Gateway. + Spécifier le nom de domaine fourni par l'utilisateur pour se connecter au serveur RD Gateway. - Indiquer le nom d'hôte du serveur Remote Desktop Gateway. + Indiquer le nom d'hôte du serveur RD Gateway. - Spécifie quand utiliser un serveur Remote Desktop Gateway (RD Gateway). + Spécifier quand utiliser un serveur RD Gateway. - Spécifie de se connecter ou non à la passerelle en utilisant les mêmes identifiants que la connexion. + Spécifier de se connecter ou non à la passerelle en utilisant les mêmes identifiants que la connexion. - Spécifie le nom de domaine que l'utilisateur fourni pour se connecter au serveur RD Gateway. + Spécifier le nom de domaine que l'utilisateur fournit pour se connecter au serveur RD Gateway. - Choisissez si les lecteurs de disque locaux doivent être redirigés sur l'hôte distant. + Choisir si les lecteurs de disques locaux doivent être redirigés vers l'hôte distant. - Choisissez si les combinaisons de touches (par exemple, Alt-Tab) doivent être redirigées vers l'hôte distant. + Choisir si les combinaisons de touches (par exemple Alt-Tab) doivent être redirigées vers l'hôte distant. - Choisissez si les ports locaux doivent être redirigés sur l'hôte distant. + Choisir si les ports locaux doivent être redirigés vers l'hôte distant. - Choisissez si les imprimantes locales doivent être redirigées sur l'hôte distant. + Choisir si les imprimantes locales doivent être redirigées vers l'hôte distant. - Précisez si les cartes à puce doivent être disponibles sur l'hôte distant. + Choisir si les cartes à puce doivent être disponibles sur l'hôte distant. - Choisi de quelle manière les sons de l'hôte distant doivent être redirigés. + Choisir de quelle manière les sons de l'hôte distant doivent être redirigés. - Choisi quel moteur de rendu disponible sera utilisé pour afficher du HTML. + Choisir quel moteur de rendu disponible sera utilisé pour afficher du HTML. - Choisi la résolution ou le mode pour lesquels la connexion sera ouverte. + Choisir la résolution ou le mode pour lesquels la connexion sera ouverte. - Sélectionnez le mode de Taille Intelligente à utiliser. + Sélectionner le mode de taille intelligente à utiliser. Connexion à la console de l'hôte distant. - Utilisez les informations d'identification Security Support Provider (CredSSP) pour l'authentification si elle est disponible. + Utiliser les informations d'identification Security Support Provider (CredSSP) pour l'authentification si disponibles. - N'hésitez pas à entrer toutes les informations dont vous avez besoin ici. + Entrer toutes les informations dont vous avez besoin ici. - Entrez votre nom d'utilisateur. + Entrer le nom d'utilisateur. - Si vous souhaitez établir une vue uniquement de l'hôte distant, sélectionnez oui. + Si vous souhaitez établir une vue uniquement de l'hôte distant, sélectionnez Oui. - Entrez l'adresse du proxy à utiliser. + Entrer l'adresse du proxy à utiliser. - Entrez votre mot de passe pour l'authentification contre le proxy. + Entrer le mot de passe pour l'authentification au proxy. - Entrez le port d'écoute du serveur proxy + Entrer le port d'écoute du serveur proxy. Si vous utilisez un proxy pour tunneler vos connexions VNC, sélectionnez son type. - Entrez votre nom d'utilisateur pour vous authentifier sur le proxy. + Entrer le nom d'utilisateur pour vous authentifier sur le proxy. Nom d'hôte / IP @@ -998,7 +996,7 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Tous - Serveur d'authentification + Niveau d'authentification Mode d'authentification @@ -1016,13 +1014,13 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Description - Afficher le Thème + Afficher les thèmes - Afficher le Fond d'écran + Afficher le fond d'écran - Composition du bureau + Activer la composition du bureau Lissage des polices @@ -1034,7 +1032,7 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Outil externe - Outil Externe Après + Outil externe après Outil externe avant @@ -1058,22 +1056,22 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Session PuTTY - Domaine de la Passerelle + Domaine de la passerelle RDP - Nom d'Hôte de la Passerelle + Nom d'hôte de la passerelle RDP - Mot de passe pour la Passerelle RDP + Mot de passe de la passerelle RDP - Utiliser Gateway + Utilisation de la passerelle RDP - Identifiant pour la Passerelle + Utiliser les informations de connexion pour l'identification à la passerelle RDP - Nom d'utilisateur pour la Passerelle RDP + Nom d'utilisateur de la passerelle RDP Lecteurs de disque @@ -1100,7 +1098,7 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Mode SmartSize - Utilisez la session console + Utiliser la session console Utiliser CredSSP @@ -1109,54 +1107,53 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous Champ utilisateur - Adresse proxy + Adresse du proxy - Mot de passe du Proxy + Mot de passe du proxy - Port du Proxy + Port du proxy - Type de proxy + Type du proxy - Nom d'utilisateur du Proxy + Nom d'utilisateur du proxy - Évènement de Protocole Déconnecté. -Message: -{0} + Évènement de déconnexion du protocole. Hôte : "{1}" ; Protocole : "{2}" ; Message : "{0}" - Échec de Déconnexion du Protocole d’Évènement. {0} + Évènement d'échec de déconnexion du protocole. +{0} Protocole à importer - Le test du proxy a échoué ! + Test du proxy échoué ! - Test du Proxy réussi ! + Test du proxy réussi ! - Échec de l'arrêt du processus Putty ! + Échec de l'arrêt du processus PuTTY ! Impossible de définir le focus ! - Handle Putty : {0} + Prise en charge de PuTTY : {0} - Échec de la fermeture du processus Putty ! + Échec de la fermeture forcée du processus PuTTY ! - Handle Panneau : {0} + Prise en charge du panneau : {0} - Échec du redimensionnement de Putty ! + Échec du redimensionnement du processus PuTTY ! Sessions PuTTY sauvegardées @@ -1165,7 +1162,7 @@ Message: Paramètres de PuTTY - Échec de l'affichage de la fenêtre de paramètres de Putty ! + Échec de l'affichage de la fenêtre des paramètres de PuTTY ! --- Outils PuTTY --- @@ -1180,19 +1177,19 @@ Message: Connexion rapide - Échec de l'ajout de connexion rapide ! + Échec de l'ajout d'une connexion rapide ! - La connexion rapide à échouée + La connexion rapide a échoué &M'avertir lors de la fermeture des connexions - M'avertir uniquement lorsque mRemoteNG se f&erme + M'avertir uniquement à la f&ermeture de mRemoteNG - M'avertir seulement lors de la fermeture de connexions &multiples + M'avertir uniquement lors de la fermeture de connexions &multiples &Ne pas m'avertir lors de la fermeture des connexions @@ -1219,34 +1216,34 @@ Message: 65536 couleurs (16 bits) - Impossible de lancer une connexion RDP, vérifiez les prérequis mRemoteNG. + Impossible de lancer une connexion RDP. Vérifiez les prérequis mRemoteNG. - Désactiver le curseur clignotant + Désactiver le clignotement du curseur - Désactiver l'Ombre du pointeur + Désactiver l'ombre du curseur - Désactiver le glissement de fenêtre complet + Désactiver le glissement de la fenêtre complète Désactiver les animations du menu - Échec de Déconnexion RDP, tentative d'arrêt en cours ! + Échec de la déconnexion RDP. Tentative d'arrêt en cours ! - Code d'erreur interne 1. + Code d'erreur RDP 1. - Code d'erreur interne 2. + Code d'erreur RDP 2. - Code d'erreur interne 3. Ce n'est pas un état valide. + Code d'erreur RDP 3. - Code d'erreur interne 4. + Code d'erreur RDP 4. Une erreur irrécupérable s'est produite lors de la connexion au client. @@ -1261,22 +1258,22 @@ Message: Une erreur inconnue s'est produite. - Une erreur de création de fenêtre a été commise. + Une erreur de création de fenêtre s'est produite. - Erreur d'initialisation de Winsock. + Une erreur d'initialisation de Winsock s'est produite. Ajuster au panneau - Échec de RDP Focus ! + Échec du focus RDP ! - La passerelle Bureau à distance est prise en charge. + La passerelle RDP est prise en charge. - La passerelle Bureau à distance n'est pas prise en charge ! + La passerelle RDP n'est pas prise en charge ! Nombre de reconnexions RDP : @@ -1288,7 +1285,7 @@ Message: Échec de RDP SetUseConsoleSession ! - Configuration du basculement de console pour RDC {0}. + Configuration du basculement de la console pour RDP {0}. Échec de RDP SetCredentials ! @@ -1309,22 +1306,22 @@ Message: Échec de RDP SetProps ! - Échec de Rdp Set Redirection ! + Échec de RDP SetRedirection ! - Échec de Rdp Set Redirect Keys ! + Échec de RDP SetRedirectKeys ! Échec de RDP SetResolution ! - Apporter à cet ordinateur + Transférer le son vers cet ordinateur - Ne pas jouer + Ne pas lire - Laisser à un ordinateur distant + Sortir le son sur l'ordinateur distant Échec de RDP ToggleFullscreen ! @@ -1339,7 +1336,7 @@ Message: Fichier distant - Supprimer tout + Tout supprimer Renommer @@ -1351,13 +1348,13 @@ Message: Enregistrer - Enregistrer tout + Tout enregistrer Souhaitez-vous enregistrer le fichier actuel de connexions avant d'en charger un autre ? - Enregistrer les connexions à la sortie + Enregistrer les connexions à la fermeture Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group File (.jpeg)|*.jpeg|Joint Photographic Experts Group File (.jpg)|*.jpg|Portable Network Graphics File (.png)|*.png @@ -1366,40 +1363,40 @@ Message: Écran - Captures d'écran + Capture d'écran Captures d'écran - Rechercher + Invite de recherche - Envoyer à ... + Envoyer à... Utiliser le nom d'hôte comme nom affiché lors de la création ou le renommage de connexions - Échec de sauvegarde des paramètres ou de suppression de l'Icône de la Barre des tâches ! + Échec de sauvegarde des paramètres ou de suppression de l'icône de la barre des tâches ! - Afficher la description des info-bulles dans l'arborescence + Afficher des info-bulles avec les descriptions dans l'arborescence Afficher le chemin d'accès complet du fichier de connexions dans le titre de la fenêtre - Afficher les informations de connexion dans le nom des onglets + Afficher les informations de connexion dans le titre des onglets - Afficher le protocole dans le nom de l'onglet + Afficher le protocole dans le titre des onglets - Un simple clic sur une connexion l'ouvre + Un simple clic sur une connexion ouvre celle-ci - Un simple clic sur une connexion ouverte nous renvoie dessus + Un simple clic sur une connexion ouverte affiche l'onglet correspondant Socks 5 @@ -1408,13 +1405,13 @@ Message: Trier - Croissant (AZ) + Croissant (A-Z) - Décroissant (ZA) + Décroissant (Z-A) - Consultez l'aide - Getting started - SQL Configuration pour plus d'informations ! + Consulter l'aide - Démarrage rapide - Configuration SQL - pour plus d'informations ! SQL Server @@ -1444,13 +1441,13 @@ Message: Statut - Se déplacer sur le panneau des Notifications : + Se rendre sur le panneau des notifications : - Avancée + Avancé - Onglets && Panneaux + Onglets && panneaux Mises à jour @@ -1483,34 +1480,35 @@ Message: Essayer d'intégrer - Ultra VNC Repeater + UltraVNC Repeater Port UltraVNC SingleClick : - Décochez les propriétés que vous souhaitez ne pas être enregistrée ! + Décocher les propriétés que vous ne souhaitez pas enregistrer ! - mRemoteNG nécessite une mise à jour + Une mise à jour est disponible pour mRemoteNG mRemoteNG peut se connecter périodiquement sur le site mRemoteNG pour vérifier les mises à jour. - La vérification de la fin de mise à jour a échouée ! + Le téléchargement des informations de mise à jour a échoué. - Téléchargement terminé ! mRemoteNG va se fermer et l'installation va commencer. + Téléchargement terminé ! +mRemoteNG va se fermer et l'installation va commencer. - Téléchargement échoué ! + Le téléchargement de la mise à jour a échoué. - Le téléchargement de la mise à jour a échoué ! + Le téléchargement de la mise à jour a échoué. - Chaque {0} jours + Tous les {0} jours Quotidien @@ -1522,19 +1520,19 @@ Message: Hebdomadaire - Utilisez d'autres nom d'utilisateur et mot de passe + Utiliser des noms d'utilisateur et mots de passe différents Utilisateur - Utilisez les mêmes nom d'utilisateur et mot de passe + Utiliser les mêmes noms d'utilisateur et mots de passe Utiliser une carte à puce - Utilisez SQL Server pour charger && enregistrer les connexions + Utiliser SQL Server pour charger et enregistrer les connexions Version @@ -1543,25 +1541,25 @@ Message: VNC - VNC déconnexion échouée ! + Déconnexion de VNC échouée ! - Le rafraîchissement de l'écran VNC a échoué ! + Échec du rafraîchissement de l'écran VNC ! - VNC SendSpecialKeys a échoué ! + Échec de VNC SendSpecialKeys ! - Échec de VNC Set Event Handlers ! + Échec de VNC SetEventHandlers ! - Échec de VNC Set Props ! + Échec de VNC SetProps ! - Toggle VNC SmartSize échoué ! + Échec de VNC ToggleSmartSize ! - Échec de VNC Toggle ViewOnly ! + Échec de VNC ToggleViewOnly ! M'avertir si l'authentification échoue @@ -1575,4 +1573,584 @@ Message: Crédits + + Démarrer minimisé + + + Fermer vers la zone de notification + + + &Exporter vers le fichier... + + + &Démarrer + + + &Réessayer + + + Active Directory + + + Ajouter + + + Options de sécurité avancées + + + Toujours afficher les onglets des connexions + + + Appliquer + + + Capture audio + + + Redimensionner automatiquement + + + Historique des modifications + + + Sélectionner un chemin pour le fichier de log de mRemoteNG + + + Sélectionner un chemin + + + Effacer la chaîne de recherche + + + Presse-papiers + + + &Ouvrir un fichier de connexions + + + Tous les fichiers importables + + + Une erreur est survenue lors de l'import du fichier "{0}". + + + Une exception non gérée s'est produite + + + Les deux mots de passe doivent correspondre. + + + Impossible de créer le thème : le libellé existe déjà ou des caractères spéciaux sont présents dans le nom + + + Impossible de glisser-déposer un noeud sur lui-même. + + + Favori + + + Favoris + + + Utiliser les paramètres par défaut + + + UltraVNC SingleClick + + + Entrer le nouveau nom du thème + + + Titre + + + Délai d'expiration [secondes] + + + Ce noeud n'est pas sélectionnable pour glisser-déposer. + + + Cette exception va forcer la fermeture de mRemoteNG + + + Le mot de passe doit faire au minimum 3 caractères. + + + En cours de test... + + + Test de la connexion + + + Tester les paramètres + + + Tester la connexion + + + Démarrer un programme / un shell alternatif + + + Démarrer un programme + + + Pile d'appels + + + En dehors de l'index + + + Dynamique + + + Quitter {0} + + + Qualité du son + + + Multi SSH : + + + Barre d'outils multi SSH + + + Répertoire de travail : + + + Répertoire de travail + + + Fenêtre + + + Proxy + + + Popups + + + PowerShell + + + SmartCard + + + VM ID + + + Utiliser le VM ID + + + Utiliser le mode amélioré + + + Traquer la connexion active dans l'arborescence des connexions + + + Ce noeud est déjà présent dans ce dossier. + + + Tunnel SSH + + + Options SSH + + + Afficher/masquer les menus + + + Afficher dans la barre d'outils + + + Utiliser un chemin de fichier personnalisé + + + Le fichier de connexions est introuvable. + + + Sécurité + + + Enregistrer les connexions après chaque modification + + + Démarrer avec des privilèges élevés + + + Canal stable + + + Lecture seule : + + + Version RDP + + + Minutes avant la veille + + + Une erreur du protocole de connexion s'est produite. Hôte : "{1}" ; Code d'erreur : "{2}" ; Description de l'erreur : "{0}" + + + Exception non gérée mRemoteNG + + + Message de l'exception + + + Supprimer + + + Tout déconnecter sauf cet onglet + + + Déconnecter les onglets à droite + + + Reconnecter toutes les connexions + + + Doit être entre 0 et 255 + + + Options mRemoteNG + + + Verrouiller la position de la barre d'outils + + + Connexion réussie + + + Le serveur '{0}' n'était pas accessible. + + + Importer un fichier existant + + + Base de données '{0}' indisponible. + + + Identification échouée pour l'utilisateur '{0}'. + + + Avertissement : un redémarrage est nécessaire pour prendre en compte les modifications apportées aux thèmes. + + + Nouveau nom du thème + + + Copier le nom d'hôte + + + Edge Chromium + + + Environnement + + + Ne pas supprimer les espaces dans les noms d'utilisateurs + + + Créer un panneau vide au démarrage de mRemoteNG + + + Licence + + + Informations de connexion + + + Informations de connexion non disponibles + + + Télécharger + + + Moteur de chiffrage + + + Débugage + + + Tout exporter + + + Exporter le fichier + + + Exporter les éléments + + + Test de chiffrage + + + Exporter les propriétés + + + &Format de fichier : + + + Téléchargement terminé ! + + + Exporter la connexion sélectionnée + + + Exporter le dossier sélectionné + + + Construction de l'URL à charger échouée + + + Haut + + + HTTP + + + HTTPS + + + Importer depuis le &fichier... + + + Internet Explorer + + + Itérations de la fonction de clé de dérivation + + + Impossible de glisser le noeud parent sur l'enfant. + + + Créer un nouveau fichier de connexions + + + Filtrer les résultats de la recherche dans l'arborescence des connexions + + + Charger les informations de répartition + + + Logger vers le répertoire de l'application + + + Logger les types de messages suivants + + + Chemin du fichier de log + + + Moyen + + + CSV mRemoteNG + + + Mot de passe mRemoteNG pour {0} + + + XML mRemoteNG + + + Nouvel outil externe + + + Ouvrir un fichier différent + + + Ouvrir un fichier + + + Scan des ports terminé. + + + Appuyer sur ENTRER pour envoyer. Ctrl+C est envoyé immédiatement. + + + Placer la barre de recherche au-dessus de l'arborescence des connexions + + + Ne pas se connecter à la session console + + + L'historique des changements n'a pas pu être téléchargé. + + + Les informations de connexion n'ont pas pu être chargées depuis SQL Server. + + + L'ID de la machine virtuelle Hyper-V à laquelle se connecter. + + + PuTTY n'a pas pu être démarré. + + + Afficher sur la colonne de la barre d'outils + + + Afficher les types de messages suivants + + + Afficher cette connexion dans le menu des favoris. + + + La longueur du mot de passe doit être entre {0} et {1} + + + Le mot de passe doit contenir au minimum {0} caractère(s) minuscule(s) + + + Le mot de passe doit contenir au minimum {0} caractère(s) numérique(s) + + + Le mot de passe doit contenir au minimum {0} caractères suivants : {1} + + + Le mot de passe doit contenir au minimum {0} caractère(s) majuscule(s) + + + Une erreur s'est produite en tentant de changer la résolution de l'hôte '{0}' + + + Log en cours + + + Délai d'expiration de la connexion RDP + + + Se connecter sans informations de connexion + + + Fichiers du gestionnaire de connexions PuTTY + + + Fichiers Remote Desktop Connection Manager (*.rdg) + + + Informations de connexion assignées + + + Impossible de trouver l'outil externe "{0}" + + + Détermine si l'ombre du curseur doit être visible. + + + Détermine si le clignotement du curseur doit être désactivé. + + + Le canal stable ne concerne que les versions finalisées. +Le canal preview inclut les versions beta et release candidates. +Le canal nightly inclut les versions alpha, beta et release candidates. + + + Une erreur s'est produite en tentant de se reconnecter à l'hôte RDP '{0}' + + + Voulez-vous vraiment supprimer les informations de connexion {0} ? + + + Bloquer le mode de chiffrement + + + Se connecter en visualisation seulement + + + Création WebView2 échouée avec une exception + + + Utiliser le VM ID pour se connecter à la machine virtuelle en fonctionnement sur Hyper-V. + + + Utiliser l'encodage UTF-8 pour la propriété RDP "Load Balance Info" + + + Le paramètre de sécurité Windows "Utiliser des algorithmes compatibles FIPS pour le chiffrement, le hachage et la signature" est activé. + +Voir l'article de support Microsoft http://support.microsoft.com/kb/811833 pour plus d'informations. + +{0} n'est pas totalement compatible avec FIPS. Cliquer sur OK pour poursuivre à vos risques et périls ou Annuler pour quitter. + + + Voulez-vous vraiment fermer toutes les connexions à l'exception de "{0}" ? + + + Sélectionner la qualité audio fournie par le protocole : dynamique, moyenne, élevée + + + Se connecter à un hôte Hyper-V avec le mode amélioré activé. + + + Impossible de créer un client RDP. La version du protocole RDP {0} n'est pas supportée sur cette machine. Veuillez choisir une ancienne version du protocole. + + + Détermine si les menus et fenêtres doivent être affichés avec des animations dans la session à distance. + + + Détermine si le contenu de la fenêtre est affiché lors du glisser-déposer vers un autre emplacement. + + + Voulez-vous vraiment supprimer le thème ? + + + Le chiffrement de {0} entrée(s) en utilisant {1}/{2} et {3} itérations a duré {4} secondes. + + + Importer les sub OUs + + + Sélectionner si le presse-papiers doit être partagé. + + + Sélectionner si le périphérique d'entrée audio par défaut sur la machine distance doit être redirigé vers cet ordinateur. + + + Sélectionner de redimensionner automatiquement la connexion quand la fenêtre est redimensionnée ou lorsque le mode plein écran est activé. +Nécessite RCD 8.0 ou postérieur. + + + Pour les connexions à travers un tunnel SSH, spécifier la connexion SSH à utiliser pour établir le tunnel SSH. + + + Choisir de recevoir une alerte lors de la déconnexion de la session RDP pour cause d'inactivité + + + Spécifier un mot de passe pour chiffrer le fichier de connexions. Ce mot de passe vous sera demandé au démarrage de mRemoteNG. + + + Spécifier la version de RDP à utiliser pour ouvrir les connexions. + + + Spécifier les informations de répartition de charge à utiliser par les routeurs pour choisir le meilleur serveur. + + + Spécifier le mot de passe du serveur Remote Desktop Gateway. + + + Préciser ici les options additionnelles à utiliser pour les connexions SSH. Se reporter à la documentation PuTTY pour plus de détails. + + + Problème de configuration du tunnel SSH. La connexion vers : "{0}" via le tunnel SSH : "{1}" est impossible. Une connexion de tunnel SSH a été trouvée dans l'arborescence mais le protocole n'est pas dérivé de PuTTY. Vérifiez que la connexion de tunnel SSH utilise bien le protocole SSH. + + + Problème de configuration du tunnel SSH. La connexion vers : "{0}" via le tunnel SSH : "{1}" est impossible. Aucune connexion de tunnel SSH utilisant le protocole SSH 1 ou 2 n'a été trouvée dans l'arborescence. Supprimez le tunnel SSH ou spécifiez un tunnel SSH existant. + + + Problème de configuration du tunnel SSH. La connexion vers : "{0}" via le tunnel SSH : "{1}" est impossible. Le processus PuTTY s'est terminé. Vérifiez d'éventuels problèmes avec la connexion de tunnel SSH. + + + Problème de configuration du tunnel SSH. La connexion vers : "{0}" via le tunnel SSH : "{1}" est impossible. La connexion SSH a échoué. Vérifiez d'éventuels problèmes avec la connexion de tunnel SSH. + + + Expiration du délai pour la connexion au tunnel SSH. La connexion vers : "{0}" via le tunnel SSH : "{1}" est impossible. Le port du tunnel local n'as pas répondu à temps. Vérifiez d'éventuels problèmes avec la connexion de tunnel SSH. + + + Initialisation du tunnel SSH échouée. La connexion vers : "{0}" via le tunnel SSH : "{1}" est impossible. La connexion SSH n'a pas pu être initialisée. Vérifiez d'éventuels problèmes avec la connexion de tunnel SSH. + + + Nombre de minutes pendant lesquelles laisser la session RDP en veille avant déconnexion (utiliser 0 pour ne pas mettre de limite) + \ No newline at end of file From 1808ad9ad7a36c9c0c11c0a72d74fda816f22800 Mon Sep 17 00:00:00 2001 From: Adrian Date: Wed, 20 Oct 2021 17:10:24 -0500 Subject: [PATCH 5/8] Correct issues with the Windows Clipboard Chain, where the chain was broken when messages to WM_CHANGECBCHAIN weren't handled appropriately as well unregister self from the clipboard chain when closing. --- mRemoteNG/App/NativeMethods.cs | 6 ++++++ mRemoteNG/UI/Forms/frmMain.cs | 23 ++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/mRemoteNG/App/NativeMethods.cs b/mRemoteNG/App/NativeMethods.cs index 0e15954b..8d7dc349 100644 --- a/mRemoteNG/App/NativeMethods.cs +++ b/mRemoteNG/App/NativeMethods.cs @@ -71,6 +71,12 @@ namespace mRemoteNG.App [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] internal static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer); + [DllImport("User32.dll", CharSet = CharSet.Auto)] + internal static extern bool ChangeClipboardChain( + IntPtr hWndRemove, // handle to window to remove + IntPtr hWndNewNext // handle to next window + ); + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] internal static extern bool SetForegroundWindow(IntPtr hWnd); diff --git a/mRemoteNG/UI/Forms/frmMain.cs b/mRemoteNG/UI/Forms/frmMain.cs index fa0ab8a7..a05b7d7e 100644 --- a/mRemoteNG/UI/Forms/frmMain.cs +++ b/mRemoteNG/UI/Forms/frmMain.cs @@ -454,6 +454,7 @@ namespace mRemoteNG.UI.Forms } } + NativeMethods.ChangeClipboardChain(Handle, _fpChainedWindowHandle); Shutdown.Cleanup(_quickConnectToolStrip, _externalToolsToolStrip, _multiSshToolStrip, this); Shutdown.StartUpdate(); @@ -583,9 +584,25 @@ namespace mRemoteNG.UI.Forms _clipboardChangedEvent?.Invoke(); break; case NativeMethods.WM_CHANGECBCHAIN: - //Send to the next window - NativeMethods.SendMessage(_fpChainedWindowHandle, m.Msg, m.LParam, m.WParam); - _fpChainedWindowHandle = m.LParam; + // When a clipboard viewer window receives the WM_CHANGECBCHAIN message, + // it should call the SendMessage function to pass the message to the + // next window in the chain, unless the next window is the window + // being removed. In this case, the clipboard viewer should save + // the handle specified by the lParam parameter as the next window in the chain. + // + // wParam is the Handle to the window being removed from + // the clipboard viewer chain + // lParam is the Handle to the next window in the chain + // following the window being removed. + if (m.WParam == _fpChainedWindowHandle) { + // If wParam is the next clipboard viewer then it + // is being removed so update pointer to the next + // window in the clipboard chain + _fpChainedWindowHandle = m.LParam; + } else { + //Send to the next window + NativeMethods.SendMessage(_fpChainedWindowHandle, m.Msg, m.LParam, m.WParam); + } break; } } From 1c5695df7ef3d266af4fd3d3857f85e6e56a4b0f Mon Sep 17 00:00:00 2001 From: Adrian Date: Wed, 20 Oct 2021 17:52:50 -0500 Subject: [PATCH 6/8] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c600613d..78be4d11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - #1465: REGRESSION: Smart Cards redirection to Remote Desktop not working - #1337: Unhandled exception after closing mRemoteNG - #359: Making a VNC connection to an unreachable host causes the application to not respond for 20-30 seconds +- #618: Do not break the Windows Clipboard Chain when exiting. ## [1.77.1] - 2019-09-02 ### Added From 4b44be2e54a8d771c06de26e6c26fb730b5e2dee Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Thu, 28 Oct 2021 17:57:48 +0100 Subject: [PATCH 7/8] libs update --- mRemoteNG/mRemoteNG.csproj | 6 +++--- .../Installer/Fragments/FilesFragment.wxs | 12 ++++++++++-- mRemoteNGSpecs/mRemoteNGSpecs.csproj | 2 +- mRemoteNGTests/mRemoteNGTests.csproj | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index c28a8224..286d18f7 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -1350,16 +1350,16 @@ 3.1.0 - 3.18.0 + 3.19.0 2.0.12 - 1.0.961.33 + 1.0.1020.30 - 8.0.26 + 8.0.27 4.0.0 diff --git a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs index 9d14389a..063abf91 100644 --- a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs +++ b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs @@ -38,6 +38,9 @@ + + + @@ -53,6 +56,7 @@ + @@ -87,6 +91,9 @@ + + + @@ -113,6 +120,7 @@ + @@ -176,8 +184,8 @@ - - + + diff --git a/mRemoteNGSpecs/mRemoteNGSpecs.csproj b/mRemoteNGSpecs/mRemoteNGSpecs.csproj index 402f3f9b..df91d1d2 100644 --- a/mRemoteNGSpecs/mRemoteNGSpecs.csproj +++ b/mRemoteNGSpecs/mRemoteNGSpecs.csproj @@ -73,7 +73,7 @@ 16.0.1 - 3.18.0 + 3.19.0 13.0.1 diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj index bb44ddef..19aa0e73 100644 --- a/mRemoteNGTests/mRemoteNGTests.csproj +++ b/mRemoteNGTests/mRemoteNGTests.csproj @@ -322,7 +322,7 @@ 4.7.1221 - 4.8.12 + 4.8.13 5.0.0 From 5de75e6a8a6ee50a0a3c610fb17df711c1ce2add Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Sat, 30 Oct 2021 01:04:39 +0100 Subject: [PATCH 8/8] downgrade DockPanelSuite to 3.0.6 due reference error in 3.1.0 --- mRemoteNG/mRemoteNG.csproj | 10 +++++----- mRemoteNGTests/mRemoteNGTests.csproj | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index 286d18f7..19250212 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -1335,19 +1335,19 @@ 1.3.0 - 3.1.0 + 3.0.6 - 3.1.0 + 3.0.6 - 3.1.0 + 3.0.6 - 3.1.0 + 3.0.6 - 3.1.0 + 3.0.6 3.19.0 diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj index 19aa0e73..b3daa98e 100644 --- a/mRemoteNGTests/mRemoteNGTests.csproj +++ b/mRemoteNGTests/mRemoteNGTests.csproj @@ -296,7 +296,7 @@ 4.4.1 - 3.1.0 + 3.0.6 2.0.12