From 89d82dd2deb1c87762dcc91e6591d68b652c20f4 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 21:58:02 -0400 Subject: [PATCH 01/44] Remove a redundant whitespace character from RcloneRemotePathLong --- Duplicati/Library/Backend/Rclone/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Backend/Rclone/Strings.cs b/Duplicati/Library/Backend/Rclone/Strings.cs index 5c7e30596..6cfd35e76 100644 --- a/Duplicati/Library/Backend/Rclone/Strings.cs +++ b/Duplicati/Library/Backend/Rclone/Strings.cs @@ -30,7 +30,7 @@ namespace Duplicati.Library.Backend.Strings public static string RcloneRemoteRepoShort { get { return LC.L(@"Remote repository"); } } public static string RcloneRemoteRepoLong { get { return LC.L(@"Remote repository for Rclone. This can be any of the backends provided by Rclone. More info available on https://rclone.org/."); } } public static string RcloneRemotePathShort { get { return LC.L(@"Remote path"); } } - public static string RcloneRemotePathLong { get { return LC.L(@"Path on the Remote repository. "); } } + public static string RcloneRemotePathLong { get { return LC.L(@"Path on the Remote repository."); } } public static string RcloneOptionRcloneShort { get { return LC.L(@"Rclone options"); } } public static string RcloneOptionRcloneLong { get { return LC.L(@"Options will be transferred to rclone."); } } public static string RcloneExecutableShort { get { return LC.L(@"Rclone executable"); } } From 6be72121be623fa701f2620c2d98d49b63e4aabb Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 21:58:45 -0400 Subject: [PATCH 02/44] Sort strings on Rclone/Strings.cs --- Duplicati/Library/Backend/Rclone/Strings.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Duplicati/Library/Backend/Rclone/Strings.cs b/Duplicati/Library/Backend/Rclone/Strings.cs index 6cfd35e76..2b41a5eab 100644 --- a/Duplicati/Library/Backend/Rclone/Strings.cs +++ b/Duplicati/Library/Backend/Rclone/Strings.cs @@ -23,18 +23,17 @@ namespace Duplicati.Library.Backend.Strings { internal static class Rclone { - public static string DisplayName { get { return LC.L(@"Rclone"); } } public static string Description { get { return LC.L(@"This backend can read and write data to Rclone."); } } - public static string RcloneLocalRepoShort { get { return LC.L(@"Local repository"); } } + public static string DisplayName { get { return LC.L(@"Rclone"); } } public static string RcloneLocalRepoLong { get { return LC.L(@"Local repository for Rclone. Make sure it is configured as a local drive, as it needs access to the files generated by Duplicati."); } } - public static string RcloneRemoteRepoShort { get { return LC.L(@"Remote repository"); } } + public static string RcloneLocalRepoShort { get { return LC.L(@"Local repository"); } } public static string RcloneRemoteRepoLong { get { return LC.L(@"Remote repository for Rclone. This can be any of the backends provided by Rclone. More info available on https://rclone.org/."); } } - public static string RcloneRemotePathShort { get { return LC.L(@"Remote path"); } } + public static string RcloneRemoteRepoShort { get { return LC.L(@"Remote repository"); } } public static string RcloneRemotePathLong { get { return LC.L(@"Path on the Remote repository."); } } - public static string RcloneOptionRcloneShort { get { return LC.L(@"Rclone options"); } } + public static string RcloneRemotePathShort { get { return LC.L(@"Remote path"); } } public static string RcloneOptionRcloneLong { get { return LC.L(@"Options will be transferred to rclone."); } } - public static string RcloneExecutableShort { get { return LC.L(@"Rclone executable"); } } + public static string RcloneOptionRcloneShort { get { return LC.L(@"Rclone options"); } } public static string RcloneExecutableLong { get { return LC.L(@"Full path to the rclone executable. Only needed if it's not in your path."); } } - + public static string RcloneExecutableShort { get { return LC.L(@"Rclone executable"); } } } } From 67942647af88a554f2bd8bb5f0345de1d91b757d Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 14:00:27 -0400 Subject: [PATCH 03/44] Sort strings on Storj/Strings.cs --- Duplicati/Library/Backend/Storj/Strings.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Duplicati/Library/Backend/Storj/Strings.cs b/Duplicati/Library/Backend/Storj/Strings.cs index e49803dcc..edeeaf2ce 100644 --- a/Duplicati/Library/Backend/Storj/Strings.cs +++ b/Duplicati/Library/Backend/Storj/Strings.cs @@ -27,19 +27,19 @@ namespace Duplicati.Library.Backend.Strings public static string DisplayName { get { return LC.L(@"Storj DCS (Decentralized Cloud Storage)"); } } public static string Description { get { return LC.L(@"This backend can read and write data to the Storj DCS."); } } public static string TestConnectionFailed { get { return LC.L(@"The connection-test failed."); } } - public static string StorjAuthMethodDescriptionShort { get { return LC.L(@"The authentication method"); } } public static string StorjAuthMethodDescriptionLong { get { return LC.L(@"The authentication method describes which way to use to connect to the network - either via API key or via an access grant."); } } - public static string StorjSatelliteDescriptionShort { get { return LC.L(@"The satellite"); } } + public static string StorjAuthMethodDescriptionShort { get { return LC.L(@"The authentication method"); } } public static string StorjSatelliteDescriptionLong { get { return LC.L(@"The satellite that keeps track of all metadata. Use a Storj DCS server for high-performance SLA-backed connectivity or use a community server. Or even host your own."); } } - public static string StorjAPIKeyDescriptionShort { get { return LC.L(@"The API key"); } } + public static string StorjSatelliteDescriptionShort { get { return LC.L(@"The satellite"); } } public static string StorjAPIKeyDescriptionLong { get { return LC.L(@"The API key grants access to a specific project on your chosen satellite. Head over to the dashboard of your satellite to create one if you do not already have an API key."); } } - public static string StorjSecretDescriptionShort { get { return LC.L(@"The encryption passphrase"); } } + public static string StorjAPIKeyDescriptionShort { get { return LC.L(@"The API key"); } } public static string StorjSecretDescriptionLong { get { return LC.L(@"The encryption passphrase is used to encrypt your data before sending it to the Storj network. This passphrase can be the only secret to provide - for Storj you do not necessary need any additional encryption (from Duplicati) in place."); } } - public static string StorjSharedAccessDescriptionShort { get { return LC.L(@"The access grant"); } } + public static string StorjSecretDescriptionShort { get { return LC.L(@"The encryption passphrase"); } } public static string StorjSharedAccessDescriptionLong { get { return LC.L(@"An access grant contains all information in one encrypted string. You may use it instead of a satellite, API key and secret."); } } - public static string StorjBucketDescriptionShort { get { return LC.L(@"The bucket"); } } + public static string StorjSharedAccessDescriptionShort { get { return LC.L(@"The access grant"); } } public static string StorjBucketDescriptionLong { get { return LC.L(@"The bucket where the backup will reside in."); } } - public static string StorjFolderDescriptionShort { get { return LC.L(@"The folder"); } } + public static string StorjBucketDescriptionShort { get { return LC.L(@"The bucket"); } } public static string StorjFolderDescriptionLong { get { return LC.L(@"The folder within the bucket where the backup will reside in."); } } + public static string StorjFolderDescriptionShort { get { return LC.L(@"The folder"); } } } } From 964fcf5804f883be6ca93115a2c3573c2ed34238 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 22:05:14 -0400 Subject: [PATCH 04/44] Sort Description and DisplayName --- Duplicati/Library/Backend/Storj/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Backend/Storj/Strings.cs b/Duplicati/Library/Backend/Storj/Strings.cs index edeeaf2ce..56c656add 100644 --- a/Duplicati/Library/Backend/Storj/Strings.cs +++ b/Duplicati/Library/Backend/Storj/Strings.cs @@ -24,8 +24,8 @@ namespace Duplicati.Library.Backend.Strings { public static class Storj { - public static string DisplayName { get { return LC.L(@"Storj DCS (Decentralized Cloud Storage)"); } } public static string Description { get { return LC.L(@"This backend can read and write data to the Storj DCS."); } } + public static string DisplayName { get { return LC.L(@"Storj DCS (Decentralized Cloud Storage)"); } } public static string TestConnectionFailed { get { return LC.L(@"The connection-test failed."); } } public static string StorjAuthMethodDescriptionLong { get { return LC.L(@"The authentication method describes which way to use to connect to the network - either via API key or via an access grant."); } } public static string StorjAuthMethodDescriptionShort { get { return LC.L(@"The authentication method"); } } From 4316ce63700921c38690e6e53d2a58cd31993ff2 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:32:42 -0400 Subject: [PATCH 05/44] Sort strings on CLI/Strings.cs --- Duplicati/CommandLine/CLI/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/CommandLine/CLI/Strings.cs b/Duplicati/CommandLine/CLI/Strings.cs index 5ab5f4c56..573c0c77a 100644 --- a/Duplicati/CommandLine/CLI/Strings.cs +++ b/Duplicati/CommandLine/CLI/Strings.cs @@ -49,8 +49,8 @@ namespace Duplicati.CommandLine.Strings public static string IncludeShort { get { return LC.L(@"Include files"); } } public static string ExcludeLong { get { return LC.L(@"Exclude files that match this filter. The special character * means any number of character, and the special character ? means any single character, use *.txt to exclude all files with a txt extension. Regular expressions are also supported and can be supplied by using hard braces, i.e. [.*\.txt]. Filter groups (which encapsulate a built-in set of well-known files and folders) can be specified by using curly braces, i.e. {{TemporaryFiles}}."); } } public static string ExcludeShort { get { return LC.L(@"Exclude files"); } } - public static string ControlFilesOptionShort { get { return LC.L(@"Use control files"); } } public static string ControlFilesOptionLong { get { return LC.L(@"If this option is used with a backup operation, it is interpreted as a list of files to add to the filesets. When used with list or restore, it will list or restore the control files instead of the normal files."); } } + public static string ControlFilesOptionShort { get { return LC.L(@"Use control files"); } } public static string QuietConsoleOptionLong { get { return LC.L(@"If this option is set, progress reports and other messages that would normally go to the console will be redirected to the log."); } } public static string QuietConsoleOptionShort { get { return LC.L(@"Disable console output"); } } public static string SkippingSourceArgumentsOnNonBackupOperation { get { return @"The --source argument was specified in the parameter file, but the current operation is not a backup operation, so the argument is ignored"; } } From 254bcc63a7d362e22671397566c19d3b648d7041 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 22:17:52 -0400 Subject: [PATCH 06/44] Rename DescriptionS3ClientLong to S3ClientDescriptionLong --- Duplicati/Library/Backend/S3/S3Backend.cs | 2 +- Duplicati/Library/Backend/S3/Strings.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Duplicati/Library/Backend/S3/S3Backend.cs b/Duplicati/Library/Backend/S3/S3Backend.cs index a5c0661bb..db31caf12 100644 --- a/Duplicati/Library/Backend/S3/S3Backend.cs +++ b/Duplicati/Library/Backend/S3/S3Backend.cs @@ -333,7 +333,7 @@ namespace Duplicati.Library.Backend new CommandLineArgument(SERVER_NAME, CommandLineArgument.ArgumentType.String, Strings.S3Backend.S3ServerNameDescriptionShort, Strings.S3Backend.S3ServerNameDescriptionLong(hostnames.ToString()), DEFAULT_S3_HOST), new CommandLineArgument(LOCATION_OPTION, CommandLineArgument.ArgumentType.String, Strings.S3Backend.S3LocationDescriptionShort, Strings.S3Backend.S3LocationDescriptionLong(locations.ToString())), new CommandLineArgument(SSL_OPTION, CommandLineArgument.ArgumentType.Boolean, Strings.S3Backend.DescriptionUseSSLShort, Strings.S3Backend.DescriptionUseSSLLong), - new CommandLineArgument(S3_CLIENT_OPTION, CommandLineArgument.ArgumentType.String, Strings.S3Backend.S3ClientDescriptionShort, Strings.S3Backend.DescriptionS3ClientLong), + new CommandLineArgument(S3_CLIENT_OPTION, CommandLineArgument.ArgumentType.String, Strings.S3Backend.S3ClientDescriptionShort, Strings.S3Backend.S3ClientDescriptionLong), new CommandLineArgument(S3_DISABLE_CHUNK_ENCODING_OPTION, CommandLineArgument.ArgumentType.Boolean, Strings.S3Backend.DescriptionDisableChunkEncodingShort, Strings.S3Backend.DescriptionDisableChunkEncodingLong, "false"), new CommandLineArgument("auth-password", CommandLineArgument.ArgumentType.Password, Strings.S3Backend.AuthPasswordDescriptionShort, Strings.S3Backend.AuthPasswordDescriptionLong), new CommandLineArgument("auth-username", CommandLineArgument.ArgumentType.String, Strings.S3Backend.AuthUsernameDescriptionShort, Strings.S3Backend.AuthUsernameDescriptionLong), diff --git a/Duplicati/Library/Backend/S3/Strings.cs b/Duplicati/Library/Backend/S3/Strings.cs index 10291fffb..309af4b00 100644 --- a/Duplicati/Library/Backend/S3/Strings.cs +++ b/Duplicati/Library/Backend/S3/Strings.cs @@ -43,7 +43,7 @@ namespace Duplicati.Library.Backend.Strings public static string S3ServerNameDescriptionShort { get { return LC.L(@"Specifies an alternate S3 server name"); } } public static string S3ClientDescriptionShort { get { return LC.L(@"Specifies the S3 client library to use"); } } public static string DescriptionUseSSLLong { get { return LC.L(@"Use this flag to communicate using Secure Socket Layer (SSL) over http (https). Note that bucket names containing a period has problems with SSL connections."); } } - public static string DescriptionS3ClientLong { get { return LC.L(@"Set either to aws or minio. Then either the AWS SDK or Minio SDK will be used to communicate with S3 services."); } } + public static string S3ClientDescriptionLong { get { return LC.L(@"Set either to aws or minio. Then either the AWS SDK or Minio SDK will be used to communicate with S3 services."); } } public static string DescriptionUseSSLShort { get { return LC.L(@"Instructs Duplicati to use an SSL (https) connection"); } } public static string DescriptionDisableChunkEncodingLong { get { return LC.L(@"This disables chunk encoding for the aws client, which is not supported by all S3 providers."); } } public static string DescriptionDisableChunkEncodingShort { get { return LC.L(@"Disable chunk encoding (aws client only)"); } } From 17cdd7e912abd5e608a4744d5f21b93f524c822d Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 22:19:11 -0400 Subject: [PATCH 07/44] Sort S3ClientDescriptionLong --- Duplicati/Library/Backend/S3/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Backend/S3/Strings.cs b/Duplicati/Library/Backend/S3/Strings.cs index 309af4b00..5657cf51a 100644 --- a/Duplicati/Library/Backend/S3/Strings.cs +++ b/Duplicati/Library/Backend/S3/Strings.cs @@ -41,9 +41,9 @@ namespace Duplicati.Library.Backend.Strings public static string S3ServerNameDescriptionLong(string providers) { return LC.L(@"Companies other than Amazon are now supporting the S3 API, meaning that this backend can read and write data to those providers as well. Use this option to set the hostname. Currently known providers are: {0}", providers); } public static string S3ServerNameDescriptionShort { get { return LC.L(@"Specifies an alternate S3 server name"); } } + public static string S3ClientDescriptionLong { get { return LC.L(@"Set either to aws or minio. Then either the AWS SDK or Minio SDK will be used to communicate with S3 services."); } } public static string S3ClientDescriptionShort { get { return LC.L(@"Specifies the S3 client library to use"); } } public static string DescriptionUseSSLLong { get { return LC.L(@"Use this flag to communicate using Secure Socket Layer (SSL) over http (https). Note that bucket names containing a period has problems with SSL connections."); } } - public static string S3ClientDescriptionLong { get { return LC.L(@"Set either to aws or minio. Then either the AWS SDK or Minio SDK will be used to communicate with S3 services."); } } public static string DescriptionUseSSLShort { get { return LC.L(@"Instructs Duplicati to use an SSL (https) connection"); } } public static string DescriptionDisableChunkEncodingLong { get { return LC.L(@"This disables chunk encoding for the aws client, which is not supported by all S3 providers."); } } public static string DescriptionDisableChunkEncodingShort { get { return LC.L(@"Disable chunk encoding (aws client only)"); } } From 011f71f9d22a644b787606dbf416b5f1d848cbe7 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:36:29 -0400 Subject: [PATCH 08/44] Sort strings on Compression/Strings.cs --- Duplicati/Library/Compression/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Compression/Strings.cs b/Duplicati/Library/Compression/Strings.cs index 50c237227..559d1bed8 100644 --- a/Duplicati/Library/Compression/Strings.cs +++ b/Duplicati/Library/Compression/Strings.cs @@ -26,8 +26,8 @@ namespace Duplicati.Library.Compression.Strings { public static string CompressionlevelShort { get { return LC.L(@"Sets the Zip compression level"); } } public static string CompressionmethodLong(string optionname) { return LC.L(@"This option can be used to set an alternative compressor method, such as LZMA. Note that using another value than Deflate will cause the {0} option to be ignored.", optionname); } public static string CompressionmethodShort { get { return LC.L(@"Sets the Zip compression method"); } } + public static string Compressionzip64Long { get { return LC.L(@"The zip64 format is required for files larger than 4GiB, use this flag to toggle it"); } } public static string Compressionzip64Short { get { return LC.L(@"Toggles Zip64 support"); } } - public static string Compressionzip64Long { get { return LC.L(@"The zip64 format is required for files larger than 4GiB, use this flag to toggle it"); } } public static string Description { get { return LC.L(@"This module provides the industry standard Zip compression. Files created with this module can be read by any standard-compliant zip application."); } } public static string DisplayName { get { return LC.L(@"Zip compression"); } } public static string FileNotFoundError(string filename) { return LC.L(@"File not found: {0}", filename); } From e702013c2e2aa27c724570010d4ca585ad7d39b6 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 22:32:34 -0400 Subject: [PATCH 09/44] Fix indents --- Duplicati/Library/Compression/Strings.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Duplicati/Library/Compression/Strings.cs b/Duplicati/Library/Compression/Strings.cs index 559d1bed8..5ccc972c4 100644 --- a/Duplicati/Library/Compression/Strings.cs +++ b/Duplicati/Library/Compression/Strings.cs @@ -27,8 +27,8 @@ namespace Duplicati.Library.Compression.Strings { public static string CompressionmethodLong(string optionname) { return LC.L(@"This option can be used to set an alternative compressor method, such as LZMA. Note that using another value than Deflate will cause the {0} option to be ignored.", optionname); } public static string CompressionmethodShort { get { return LC.L(@"Sets the Zip compression method"); } } public static string Compressionzip64Long { get { return LC.L(@"The zip64 format is required for files larger than 4GiB, use this flag to toggle it"); } } - public static string Compressionzip64Short { get { return LC.L(@"Toggles Zip64 support"); } } - public static string Description { get { return LC.L(@"This module provides the industry standard Zip compression. Files created with this module can be read by any standard-compliant zip application."); } } + public static string Compressionzip64Short { get { return LC.L(@"Toggles Zip64 support"); } } + public static string Description { get { return LC.L(@"This module provides the industry standard Zip compression. Files created with this module can be read by any standard-compliant zip application."); } } public static string DisplayName { get { return LC.L(@"Zip compression"); } } public static string FileNotFoundError(string filename) { return LC.L(@"File not found: {0}", filename); } } From dba91b2a17d7670dda50c0ab5ba1264482da2c86 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:37:36 -0400 Subject: [PATCH 10/44] Sort DescriptionDisableUploadVerifyShort on FTP/Strings.cs --- Duplicati/Library/Backend/FTP/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Backend/FTP/Strings.cs b/Duplicati/Library/Backend/FTP/Strings.cs index 694f2ba56..7d16a5630 100644 --- a/Duplicati/Library/Backend/FTP/Strings.cs +++ b/Duplicati/Library/Backend/FTP/Strings.cs @@ -39,7 +39,7 @@ namespace Duplicati.Library.Backend.Strings { public static string MissingFolderError(string foldername, string message) { return LC.L(@"The folder {0} was not found, message: {1}", foldername, message); } public static string ListVerifyFailure(string filename, IEnumerable files) { return LC.L(@"The file {0} was uploaded but not found afterwards, the file listing returned {1}", filename, string.Join(Environment.NewLine, files)); } public static string ListVerifySizeFailure(string filename, long actualsize, long expectedsize) { return LC.L(@"The file {0} was uploaded but the returned size was {1} and it was expected to be {2}", filename, actualsize, expectedsize); } - public static string DescriptionDisableUploadVerifyShort { get { return LC.L(@"Disable upload verification"); } } public static string DescriptionDisableUploadVerifyLong { get { return LC.L(@"To protect against network failures, every upload will be attempted verified. Use this option to disable this verification to make the upload faster but less reliable."); } } + public static string DescriptionDisableUploadVerifyShort { get { return LC.L(@"Disable upload verification"); } } } } From 04c9b8bbfc79af5ecb66145103a7c79df57d272e Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 22:37:06 -0400 Subject: [PATCH 11/44] Sort Description and DisplayName --- Duplicati/Library/Backend/FTP/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Backend/FTP/Strings.cs b/Duplicati/Library/Backend/FTP/Strings.cs index 7d16a5630..8949517ba 100644 --- a/Duplicati/Library/Backend/FTP/Strings.cs +++ b/Duplicati/Library/Backend/FTP/Strings.cs @@ -25,6 +25,7 @@ using System.Collections.Generic; namespace Duplicati.Library.Backend.Strings { internal static class FTPBackend { public static string Description { get { return LC.L(@"This backend can read and write data to an FTP based backend. Allowed formats are ""ftp://hostname/folder"" or ""ftp://username:password@hostname/folder"""); } } + public static string DisplayName { get { return LC.L(@"FTP"); } } public static string DescriptionFTPActiveLong { get { return LC.L(@"If this flag is set, the FTP connection is made in active mode. Even if the ""ftp-passive"" flag is also set, the connection will be made in active mode"); } } public static string DescriptionFTPActiveShort { get { return LC.L(@"Toggles the FTP connections method"); } } public static string DescriptionFTPPassiveLong { get { return LC.L(@"If this flag is set, the FTP connection is made in passive mode, which works better with some firewalls. If the ""ftp-regular"" flag is also set, this flag is ignored"); } } @@ -35,7 +36,6 @@ namespace Duplicati.Library.Backend.Strings { public static string DescriptionAuthUsernameShort { get { return LC.L(@"Supplies the username used to connect to the server"); } } public static string DescriptionUseSSLLong { get { return LC.L(@"Use this flag to communicate using Secure Socket Layer (SSL) over ftp (ftps)."); } } public static string DescriptionUseSSLShort { get { return LC.L(@"Instructs Duplicati to use an SSL (ftps) connection"); } } - public static string DisplayName { get { return LC.L(@"FTP"); } } public static string MissingFolderError(string foldername, string message) { return LC.L(@"The folder {0} was not found, message: {1}", foldername, message); } public static string ListVerifyFailure(string filename, IEnumerable files) { return LC.L(@"The file {0} was uploaded but not found afterwards, the file listing returned {1}", filename, string.Join(Environment.NewLine, files)); } public static string ListVerifySizeFailure(string filename, long actualsize, long expectedsize) { return LC.L(@"The file {0} was uploaded but the returned size was {1} and it was expected to be {2}", filename, actualsize, expectedsize); } From c348e51048d412c4744bf4052763cde349d5f254 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 22:37:53 -0400 Subject: [PATCH 12/44] Move DescriptionDisableUploadVerifyLong and DescriptionDisableUploadVerifyShort up --- Duplicati/Library/Backend/FTP/Strings.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Duplicati/Library/Backend/FTP/Strings.cs b/Duplicati/Library/Backend/FTP/Strings.cs index 8949517ba..baa5f01a5 100644 --- a/Duplicati/Library/Backend/FTP/Strings.cs +++ b/Duplicati/Library/Backend/FTP/Strings.cs @@ -36,10 +36,10 @@ namespace Duplicati.Library.Backend.Strings { public static string DescriptionAuthUsernameShort { get { return LC.L(@"Supplies the username used to connect to the server"); } } public static string DescriptionUseSSLLong { get { return LC.L(@"Use this flag to communicate using Secure Socket Layer (SSL) over ftp (ftps)."); } } public static string DescriptionUseSSLShort { get { return LC.L(@"Instructs Duplicati to use an SSL (ftps) connection"); } } + public static string DescriptionDisableUploadVerifyLong { get { return LC.L(@"To protect against network failures, every upload will be attempted verified. Use this option to disable this verification to make the upload faster but less reliable."); } } + public static string DescriptionDisableUploadVerifyShort { get { return LC.L(@"Disable upload verification"); } } public static string MissingFolderError(string foldername, string message) { return LC.L(@"The folder {0} was not found, message: {1}", foldername, message); } public static string ListVerifyFailure(string filename, IEnumerable files) { return LC.L(@"The file {0} was uploaded but not found afterwards, the file listing returned {1}", filename, string.Join(Environment.NewLine, files)); } public static string ListVerifySizeFailure(string filename, long actualsize, long expectedsize) { return LC.L(@"The file {0} was uploaded but the returned size was {1} and it was expected to be {2}", filename, actualsize, expectedsize); } - public static string DescriptionDisableUploadVerifyLong { get { return LC.L(@"To protect against network failures, every upload will be attempted verified. Use this option to disable this verification to make the upload faster but less reliable."); } } - public static string DescriptionDisableUploadVerifyShort { get { return LC.L(@"Disable upload verification"); } } } } From 68d79ce435fe02c943fdffb7d98bb468213a9fa5 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:41:09 -0400 Subject: [PATCH 13/44] Sort strings on Box/Strings.cs --- Duplicati/Library/Backend/Box/Strings.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Duplicati/Library/Backend/Box/Strings.cs b/Duplicati/Library/Backend/Box/Strings.cs index c0976f7a2..c796384b2 100644 --- a/Duplicati/Library/Backend/Box/Strings.cs +++ b/Duplicati/Library/Backend/Box/Strings.cs @@ -24,11 +24,9 @@ namespace Duplicati.Library.Backend.Strings internal static class Box { public static string Description { get { return LC.L(@"This backend can read and write data to Box.com. Supported format is ""box://folder/subfolder""."); } } public static string DisplayName { get { return LC.L(@"Box.com"); } } - public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } - public static string ReallydeleteShort { get { return LC.L(@"Force delete files"); } } + public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string ReallydeleteLong { get { return LC.L(@"After deleting a file, it may end up in the trash folder where it will be deleted after a grace period. Use this command to force immediate removal of delete files."); } } - + public static string ReallydeleteShort { get { return LC.L(@"Force delete files"); } } } } - From 18c2b1d4fac532eca138821414c4a274251da02a Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:41:51 -0400 Subject: [PATCH 14/44] Sort strings on Dropbox/Strings.cs --- Duplicati/Library/Backend/Dropbox/Strings.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Duplicati/Library/Backend/Dropbox/Strings.cs b/Duplicati/Library/Backend/Dropbox/Strings.cs index e710ee62f..5319250f2 100644 --- a/Duplicati/Library/Backend/Dropbox/Strings.cs +++ b/Duplicati/Library/Backend/Dropbox/Strings.cs @@ -26,9 +26,7 @@ namespace Duplicati.Library.Backend.Strings { public static string Description { get { return LC.L(@"This backend can read and write data to Dropbox. Supported format is ""dropbox://folder/subfolder""."); } } public static string DisplayName { get { return LC.L(@"Dropbox"); } } - public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } - + public static string AuthidShort { get { return LC.L(@"The authorization code"); } } } } - From ca99c1f4d5b311a1e2fc4ce355122e5e8a45b025 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:47:16 -0400 Subject: [PATCH 15/44] Sort strings on OAuthHelper/Strings.cs --- Duplicati/Library/Backend/OAuthHelper/Strings.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Duplicati/Library/Backend/OAuthHelper/Strings.cs b/Duplicati/Library/Backend/OAuthHelper/Strings.cs index a43965943..3e639cf86 100644 --- a/Duplicati/Library/Backend/OAuthHelper/Strings.cs +++ b/Duplicati/Library/Backend/OAuthHelper/Strings.cs @@ -26,9 +26,8 @@ namespace Duplicati.Library.Strings public static string MissingAuthID(string url) { return LC.L(@"You need an AuthID, you can get it from: {0}", url); } public static string AuthorizationFailure(string message, string url) { return LC.L(@"Failed to authorize using the OAuth service: {0}. If the problem persists, try generating a new authid token from: {1}", message, url); } public static string UnexpectedError(System.Net.HttpStatusCode statuscode, string description) { return LC.L(@"Unexpected error code: {0} - {1}", statuscode, description); } - public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } + public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string OverQuotaError { get { return LC.L(@"The OAuth service is currently over quota, try again in a few hours"); } } } } - From 80edc82f04784cf4931d6b65569338b1ffff8246 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:44:16 -0400 Subject: [PATCH 16/44] Sort strings on GoogleServices/Strings.cs --- Duplicati/Library/Backend/GoogleServices/Strings.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Duplicati/Library/Backend/GoogleServices/Strings.cs b/Duplicati/Library/Backend/GoogleServices/Strings.cs index b17eaed90..997011817 100644 --- a/Duplicati/Library/Backend/GoogleServices/Strings.cs +++ b/Duplicati/Library/Backend/GoogleServices/Strings.cs @@ -28,8 +28,8 @@ namespace Duplicati.Library.Backend.Strings public static string DisplayName { get { return LC.L(@"Google Cloud Storage"); } } public static string MissingAuthID(string url) { return LC.L(@"You need an AuthID, you can get it from: {0}", url); } public static string ProjectIDMissingError(string projectoption) { return LC.L(@"You must supply a project ID with --{0} for creating a bucket", projectoption); } - public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } + public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string LocationDescriptionLong(string regions) { return LC.L(@"This option is only used when creating new buckets. Use this option to change what region the data is stored in. Charges vary with bucket location. Known bucket locations: {0}", regions); } @@ -37,19 +37,18 @@ namespace Duplicati.Library.Backend.Strings public static string StorageclassDescriptionLong(string classes) { return LC.L(@"This option is only used when creating new buckets. Use this option to change what storage type the bucket has. Charges and functionality vary with bucket storage class. Known storage classes: {0}", classes); } public static string StorageclassDescriptionShort { get { return LC.L(@"Specifies storage class for creating a bucket"); } } - public static string ProjectDescriptionShort { get { return LC.L(@"Specifies project for creating a bucket"); } } public static string ProjectDescriptionLong { get { return LC.L(@"This option is only used when creating new buckets. Use this option to supply the project ID that the bucket is attached to. The project determines where usage charges are applied"); } } + public static string ProjectDescriptionShort { get { return LC.L(@"Specifies project for creating a bucket"); } } } internal static class GoogleDrive { public static string Description { get { return LC.L(@"This backend can read and write data to Google Drive. Supported format is ""googledrive://folder/subfolder""."); } } - public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } + public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string DisplayName { get { return LC.L(@"Google Drive"); } } public static string MultipleEntries(string folder, string parent) { return LC.L(@"There is more than one item named ""{0}"" in the folder ""{1}""", folder, parent); } - public static string TeamDriveIdShort { get { return LC.L("Team drive ID"); } } public static string TeamDriveIdLong { get { return LC.L("This option sets the team drive to use. Leaving it empty uses the personal drive"); } } + public static string TeamDriveIdShort { get { return LC.L("Team drive ID"); } } } } - From 1a09132254b17770d160494caa7b45311ef03dcc Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Fri, 26 Jul 2024 23:46:21 -0400 Subject: [PATCH 17/44] Sort and group strings on GoogleServices/Strings.cs Remove blank lines as well --- Duplicati/Library/Backend/GoogleServices/Strings.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Duplicati/Library/Backend/GoogleServices/Strings.cs b/Duplicati/Library/Backend/GoogleServices/Strings.cs index 997011817..b76fae6c8 100644 --- a/Duplicati/Library/Backend/GoogleServices/Strings.cs +++ b/Duplicati/Library/Backend/GoogleServices/Strings.cs @@ -30,7 +30,6 @@ namespace Duplicati.Library.Backend.Strings public static string ProjectIDMissingError(string projectoption) { return LC.L(@"You must supply a project ID with --{0} for creating a bucket", projectoption); } public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } public static string AuthidShort { get { return LC.L(@"The authorization code"); } } - public static string LocationDescriptionLong(string regions) { return LC.L(@"This option is only used when creating new buckets. Use this option to change what region the data is stored in. Charges vary with bucket location. Known bucket locations: {0}", regions); } public static string LocationDescriptionShort { get { return LC.L(@"Specifies location option for creating a bucket"); } } @@ -39,15 +38,14 @@ namespace Duplicati.Library.Backend.Strings public static string StorageclassDescriptionShort { get { return LC.L(@"Specifies storage class for creating a bucket"); } } public static string ProjectDescriptionLong { get { return LC.L(@"This option is only used when creating new buckets. Use this option to supply the project ID that the bucket is attached to. The project determines where usage charges are applied"); } } public static string ProjectDescriptionShort { get { return LC.L(@"Specifies project for creating a bucket"); } } - } internal static class GoogleDrive { public static string Description { get { return LC.L(@"This backend can read and write data to Google Drive. Supported format is ""googledrive://folder/subfolder""."); } } - public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } - public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string DisplayName { get { return LC.L(@"Google Drive"); } } public static string MultipleEntries(string folder, string parent) { return LC.L(@"There is more than one item named ""{0}"" in the folder ""{1}""", folder, parent); } + public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } + public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string TeamDriveIdLong { get { return LC.L("This option sets the team drive to use. Leaving it empty uses the personal drive"); } } public static string TeamDriveIdShort { get { return LC.L("Team drive ID"); } } } From 424a5edb77d78a4f807a7977ce374bdab9898c29 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 03:05:26 -0400 Subject: [PATCH 18/44] Sort strings on JottaCloud/Strings.cs --- Duplicati/Library/Backend/Jottacloud/Strings.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Duplicati/Library/Backend/Jottacloud/Strings.cs b/Duplicati/Library/Backend/Jottacloud/Strings.cs index 1fe8737cf..0f0dcc2f3 100644 --- a/Duplicati/Library/Backend/Jottacloud/Strings.cs +++ b/Duplicati/Library/Backend/Jottacloud/Strings.cs @@ -24,19 +24,19 @@ namespace Duplicati.Library.Backend.Strings { { public static string DisplayName { get { return LC.L(@"Jottacloud"); } } public static string Description { get { return LC.L(@"This backend can read and write data to Jottacloud using it's REST protocol. Allowed format is ""jottacloud://folder/subfolder""."); } } - public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string AuthidLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } + public static string AuthidShort { get { return LC.L(@"The authorization code"); } } public static string NoUsernameError { get { return LC.L(@"No username found"); } } public static string NoPathError { get { return LC.L(@"No path given, cannot upload files to the root folder"); } } public static string IllegalMountPoint { get { return LC.L(@"Illegal mount point given."); } } public static string FileUploadError { get { return LC.L(@"Failed to upload file"); } } - public static string DescriptionDeviceShort { get { return LC.L(@"Supplies the backup device to use"); } } public static string DescriptionDeviceLong(string mountPointOption) { return LC.L(@"The backup device to use. Will be created if not already exists. You can manage your devices from the backup panel in the Jottacloud web interface. When you specify a custom device you should also specify the mount point to use on this device with the ""{0}"" option.", mountPointOption); } - public static string DescriptionMountPointShort { get { return LC.L(@"Supplies the mount point to use on the server"); } } + public static string DescriptionDeviceShort { get { return LC.L(@"Supplies the backup device to use"); } } public static string DescriptionMountPointLong(string deviceOptionName) { return LC.L(@"The mount point to use on the server. The default is ""Archive"" for using the built-in archive mount point. Set this option to ""Sync"" to use the built-in synchronization mount point instead, or if you have specified a custom device with option ""{0}"" you are free to name the mount point as you like.", deviceOptionName); } - public static string ThreadsShort { get { return LC.L(@"Number of threads for restore operations"); } } + public static string DescriptionMountPointShort { get { return LC.L(@"Supplies the mount point to use on the server"); } } public static string ThreadsLong { get { return LC.L(@"Number of threads for restore operations. In some cases the download rate is limited to 18.5 Mbps per stream. Use multiple threads to increase throughput."); } } - public static string ChunksizeShort { get { return LC.L(@"The chunk size for simultaneous downloading"); } } + public static string ThreadsShort { get { return LC.L(@"Number of threads for restore operations"); } } public static string ChunksizeLong { get { return LC.L(@"The chunk size for simultaneous downloading. These chunks will be held in memory, so keep it as low as possible."); } } + public static string ChunksizeShort { get { return LC.L(@"The chunk size for simultaneous downloading"); } } } } From 5293f5856d7a4a6a35a5e90657e129daf4487bfc Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:57:23 -0400 Subject: [PATCH 19/44] Sort strings on SSHv2/Strings.cs --- Duplicati/Library/Backend/SSHv2/Strings.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Duplicati/Library/Backend/SSHv2/Strings.cs b/Duplicati/Library/Backend/SSHv2/Strings.cs index 8ef2a75ce..3898cbebd 100644 --- a/Duplicati/Library/Backend/SSHv2/Strings.cs +++ b/Duplicati/Library/Backend/SSHv2/Strings.cs @@ -25,21 +25,21 @@ namespace Duplicati.Library.Backend.Strings { public static string Description { get { return LC.L(@"Module for generating SSH private/public keys"); } } public static string DisplayName { get { return LC.L(@"SSH Key Generator"); } } - public static string KeyUsernameShort { get { return LC.L(@"Public key username"); } } public static string KeyUsernameLong { get { return LC.L(@"A username to append to the public key"); } } - public static string KeyTypeShort { get { return LC.L(@"The key type"); } } + public static string KeyUsernameShort { get { return LC.L(@"Public key username"); } } public static string KeyTypeLong { get { return LC.L(@"Determines the type of key to generate"); } } - public static string KeyLenShort { get { return LC.L(@"The key length"); } } + public static string KeyTypeShort { get { return LC.L(@"The key type"); } } public static string KeyLenLong { get { return LC.L(@"The length of the key in bits"); } } + public static string KeyLenShort { get { return LC.L(@"The key length"); } } } internal static class KeyUploader { public static string Description { get { return LC.L(@"Module for uploading SSH public keys"); } } public static string DisplayName { get { return LC.L(@"SSH Key Uploader"); } } - public static string UrlShort { get { return LC.L(@"The SSH connection URL"); } } public static string UrlLong { get { return LC.L(@"The SSH connection URL used to establish the connection"); } } - public static string PubkeyShort { get { return LC.L(@"The SSH public key to append"); } } + public static string UrlShort { get { return LC.L(@"The SSH connection URL"); } } public static string PubkeyLong { get { return LC.L(@"The SSH public key must be a valid SSH string, which is appended to the .ssh/authorized_keys file"); } } + public static string PubkeyShort { get { return LC.L(@"The SSH public key to append"); } } } internal static class SSHv2Backend { From f6bb4fed2ed2e1fb38e1fec1b544443c95100d21 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:30:43 -0400 Subject: [PATCH 20/44] Sort strings on Duplicati.Library.RestAPI/Strings.cs --- Duplicati.Library.RestAPI/Strings.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Duplicati.Library.RestAPI/Strings.cs b/Duplicati.Library.RestAPI/Strings.cs index 83cfbdd7e..16ec0e271 100644 --- a/Duplicati.Library.RestAPI/Strings.cs +++ b/Duplicati.Library.RestAPI/Strings.cs @@ -34,16 +34,16 @@ Error message: {0}", error); } public static string WebserverInterfaceDescription { get { return LC.L(@"The interface the webserver listens on. The special values ""*"" and ""any"" means any interface. The special value ""loopback"" means the loopback adapter."); } } public static string WebserverPasswordDescription { get { return LC.L(@"The password required to access the webserver. This option is saved so you do not need to set it on each run. Setting an empty value disables the password."); } } public static string WebserverAllowedhostnamesDescription { get { return LC.L(@"The hostnames that are accepted, separated with semicolons. If any of the hostnames are ""*"", all hostnames are allowed and the hostname checking is disabled."); } } - public static string PingpongkeepaliveShort { get { return LC.L(@"Enables the ping-pong responder"); } } public static string PingpongkeepaliveLong { get { return LC.L(@"When running as a server, the service daemon must verify that the process is responding. If this option is enabled, the server reads stdin and writes a reply to each line read"); } } - public static string LogretentionShort { get { return LC.L(@"Clean up old log data"); } } + public static string PingpongkeepaliveShort { get { return LC.L(@"Enables the ping-pong responder"); } } public static string LogretentionLong { get { return LC.L(@"Set the time after which log data will be purged from the database."); } } - public static string ServerdatafolderShort { get { return LC.L(@"Sets the folder where settings are stored"); } } + public static string LogretentionShort { get { return LC.L(@"Clean up old log data"); } } public static string ServerdatafolderLong(string envname) { return LC.L(@"Duplicati needs to store a small database with all settings. Use this option to choose where the settings are stored. This option can also be set with the environment variable {0}.", envname); } - public static string ServerencryptionkeyShort { get { return LC.L(@"Sets the database encryption key"); } } + public static string ServerdatafolderShort { get { return LC.L(@"Sets the folder where settings are stored"); } } public static string ServerencryptionkeyLong(string envname, string decryptionoption) { return LC.L(@"This option sets the encryption key used to scramble the local settings database. This option can also be set with the environment variable {0}. Use the option --{1} to disable the database scrambling.", envname, decryptionoption); } - public static string TempdirShort { get { return LC.L(@"Temporary storage folder"); } } + public static string ServerencryptionkeyShort { get { return LC.L(@"Sets the database encryption key"); } } public static string TempdirLong { get { return LC.L(@"This option can be used to supply an alternative folder for temporary storage. By default the system default temporary folder is used. Note that also SQLite will put temporary files in this temporary folder."); } } + public static string TempdirShort { get { return LC.L(@"Temporary storage folder"); } } public static string WebserverResetJwtConfigDescription { get { return LC.L(@"Resets the JWT configuration, invalidating any issued login tokens"); } } } internal static class Scheduler From 9910070c6c9297a98c93024c8bac5ad6782ed4ba Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:42:39 -0400 Subject: [PATCH 21/44] Sort strings on File/Strings.cs --- Duplicati/Library/Backend/File/Strings.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Duplicati/Library/Backend/File/Strings.cs b/Duplicati/Library/Backend/File/Strings.cs index dbd1f4d6a..c7045f11f 100644 --- a/Duplicati/Library/Backend/File/Strings.cs +++ b/Duplicati/Library/Backend/File/Strings.cs @@ -35,9 +35,9 @@ namespace Duplicati.Library.Backend.Strings { public static string NoDestinationWithMarkerFileError(string markername, string[] folders) { return LC.L(@"The marker file ""{0}"" was not found in any of the examined destinations: {1}", markername, string.Join(", ", folders)); } public static string UseMoveForPutLong { get { return LC.L(@"When storing the file, the standard operation is to copy the file and delete the original. This sequence ensures that the operation can be retried if something goes wrong. Activating this option may cause the retry operation to fail. This option has no effect unless the --disable-streaming-transfers option is activated."); } } public static string UseMoveForPutShort { get { return LC.L(@"Move the file instead of copying it"); } } - public static string ForceReauthShort { get { return LC.L(@"Force authentication against remote share"); } } public static string ForceReauthLong { get { return LC.L(@"If this option is set, any existing authentication against the remote share is dropped before attempting to authenticate"); } } - public static string DisableLengthVerificationShort { get { return LC.L(@"Disable length verification"); } } + public static string ForceReauthShort { get { return LC.L(@"Force authentication against remote share"); } } public static string DisableLengthVerificationLong { get { return LC.L(@"As an extra precaution the uploaded file length will be checked against the local source length."); } } + public static string DisableLengthVerificationShort { get { return LC.L(@"Disable length verification"); } } } } From 2f9b8933c4cf6af1a52b3c2288525aa93ef379d5 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:48:43 -0400 Subject: [PATCH 22/44] Sort strings on OneDrive/Strings.cs - part 1 --- Duplicati/Library/Backend/OneDrive/Strings.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Duplicati/Library/Backend/OneDrive/Strings.cs b/Duplicati/Library/Backend/OneDrive/Strings.cs index a270a6458..d61ac5304 100644 --- a/Duplicati/Library/Backend/OneDrive/Strings.cs +++ b/Duplicati/Library/Backend/OneDrive/Strings.cs @@ -23,15 +23,15 @@ namespace Duplicati.Library.Backend.Strings { internal static class MicrosoftGraph { - public static string AuthIdShort { get { return LC.L(@"The authorization code"); } } public static string AuthIdLong(string url) { return LC.L(@"The authorization token retrieved from {0}", url); } + public static string AuthIdShort { get { return LC.L(@"The authorization code"); } } public static string MissingAuthId(string url) { return LC.L(@"No Auth-ID was provided - you can get one from {0}", url); } - public static string FragmentSizeShort { get { return LC.L(@"Fragment size for large uploads"); } } public static string FragmentSizeLong { get { return LC.L(@"Size of individual fragments which are uploaded separately for large files. It is recommended to be between 5-10 MiB (though a smaller value may work better on a slower or less reliable connection), and to be a multiple of 320 KiB."); } } + public static string FragmentSizeShort { get { return LC.L(@"Fragment size for large uploads"); } } public static string FragmentRetryCountShort { get { return LC.L(@"Number of retries for each fragment"); } } public static string FragmentRetryCountLong { get { return LC.L(@"Number of retry attempts made for each fragment before failing the overall file upload"); } } - public static string FragmentRetryDelayShort { get { return LC.L(@"Millisecond delay between fragment errors"); } } public static string FragmentRetryDelayLong { get { return LC.L(@"Amount of time (in milliseconds) to wait between failures when uploading fragments"); } } + public static string FragmentRetryDelayShort { get { return LC.L(@"Millisecond delay between fragment errors"); } } public static string UseHttpClientShort { get { return LC.L(@"Whether the HttpClient class should be used"); } } public static string UseHttpClientLong { get { return LC.L(@"Use this option to set HttpClient class to perform HTTP requests"); } } } @@ -40,16 +40,16 @@ namespace Duplicati.Library.Backend.Strings { public static string DisplayName { get { return LC.L(@"Microsoft OneDrive v2"); } } public static string Description(string mssadescription, string mssalink, string msopdescription, string msoplink) { return LC.L(@"Stores files in Microsoft OneDrive or Microsoft OneDrive for Business via the Microsoft Graph API. Usage of this backend requires that you agree to the terms in {0} ({1}) and {2} ({3})", mssadescription, mssalink, msopdescription, msoplink); } - public static string DriveIdShort { get { return LC.L(@"Optional ID of the drive"); } } public static string DriveIdLong(string defaultDrive) { return LC.L(@"ID of the drive to store data in. If no drive is specified, the default OneDrive or OneDrive for Business drive will be used via '{0}'.", defaultDrive); } + public static string DriveIdShort { get { return LC.L(@"Optional ID of the drive"); } } } internal static class SharePointV2 { public static string DisplayName { get { return LC.L(@"Microsoft SharePoint v2"); } } public static string Description(string mssadescription, string mssalink, string msopdescription, string msoplink) { return LC.L(@"Stores files in a Microsoft SharePoint site via the Microsoft Graph API. Usage of this backend requires that you agree to the terms in {0} ({1}) and {2} ({3})", mssadescription, mssalink, msopdescription, msoplink); } - public static string SiteIdShort { get { return LC.L(@"ID of the site"); } } public static string SiteIdLong { get { return LC.L(@"ID of the site to store data in"); } } + public static string SiteIdShort { get { return LC.L(@"ID of the site"); } } public static string MissingSiteId { get { return LC.L(@"No site ID was provided"); } } public static string ConflictingSiteId(string given, string found) { return LC.L(@"Conflicting site IDs used: given {0} but found {1}", given, found); } } @@ -58,8 +58,8 @@ namespace Duplicati.Library.Backend.Strings { public static string DisplayName { get { return LC.L(@"Microsoft Office 365 Group"); } } public static string Description(string mssadescription, string mssalink, string msopdescription, string msoplink) { return LC.L(@"Stores files in a Microsoft Office 365 Group via the Microsoft Graph API. Allowed formats are ""sharepoint://tenant.sharepoint.com/{{PathToWeb}}//{{Documents}}/subfolder"" (with ""//"" being optionally used to indicate the root document folder), or just ""sharepoint://subfolder"" (in which case you must also explicitly specify the SharePoint site's ID via --site-id). Usage of this backend requires that you agree to the terms in {0} ({1}) and {2} ({3})", mssadescription, mssalink, msopdescription, msoplink); } - public static string GroupIdShort { get { return LC.L(@"ID of the group"); } } public static string GroupIdLong { get { return LC.L(@"ID of the group to store data in"); } } + public static string GroupIdShort { get { return LC.L(@"ID of the group"); } } public static string GroupEmailShort { get { return LC.L(@"Email address of the group"); } } public static string GroupEmailLong { get { return LC.L(@"Email address of the group to store data in"); } } public static string MissingGroupIdAndEmailAddress { get { return LC.L(@"No group ID or group email address was provided"); } } From 3ef3db4e716757746714f9ad4b7c81e8b4d417c2 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:49:52 -0400 Subject: [PATCH 23/44] Sort strings on OneDrive/Strings.cs - part 2 --- Duplicati/Library/Backend/OneDrive/Strings.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Duplicati/Library/Backend/OneDrive/Strings.cs b/Duplicati/Library/Backend/OneDrive/Strings.cs index d61ac5304..c834b60d1 100644 --- a/Duplicati/Library/Backend/OneDrive/Strings.cs +++ b/Duplicati/Library/Backend/OneDrive/Strings.cs @@ -28,12 +28,12 @@ namespace Duplicati.Library.Backend.Strings public static string MissingAuthId(string url) { return LC.L(@"No Auth-ID was provided - you can get one from {0}", url); } public static string FragmentSizeLong { get { return LC.L(@"Size of individual fragments which are uploaded separately for large files. It is recommended to be between 5-10 MiB (though a smaller value may work better on a slower or less reliable connection), and to be a multiple of 320 KiB."); } } public static string FragmentSizeShort { get { return LC.L(@"Fragment size for large uploads"); } } - public static string FragmentRetryCountShort { get { return LC.L(@"Number of retries for each fragment"); } } public static string FragmentRetryCountLong { get { return LC.L(@"Number of retry attempts made for each fragment before failing the overall file upload"); } } + public static string FragmentRetryCountShort { get { return LC.L(@"Number of retries for each fragment"); } } public static string FragmentRetryDelayLong { get { return LC.L(@"Amount of time (in milliseconds) to wait between failures when uploading fragments"); } } public static string FragmentRetryDelayShort { get { return LC.L(@"Millisecond delay between fragment errors"); } } - public static string UseHttpClientShort { get { return LC.L(@"Whether the HttpClient class should be used"); } } public static string UseHttpClientLong { get { return LC.L(@"Use this option to set HttpClient class to perform HTTP requests"); } } + public static string UseHttpClientShort { get { return LC.L(@"Whether the HttpClient class should be used"); } } } internal static class OneDriveV2 @@ -60,8 +60,8 @@ namespace Duplicati.Library.Backend.Strings public static string Description(string mssadescription, string mssalink, string msopdescription, string msoplink) { return LC.L(@"Stores files in a Microsoft Office 365 Group via the Microsoft Graph API. Allowed formats are ""sharepoint://tenant.sharepoint.com/{{PathToWeb}}//{{Documents}}/subfolder"" (with ""//"" being optionally used to indicate the root document folder), or just ""sharepoint://subfolder"" (in which case you must also explicitly specify the SharePoint site's ID via --site-id). Usage of this backend requires that you agree to the terms in {0} ({1}) and {2} ({3})", mssadescription, mssalink, msopdescription, msoplink); } public static string GroupIdLong { get { return LC.L(@"ID of the group to store data in"); } } public static string GroupIdShort { get { return LC.L(@"ID of the group"); } } - public static string GroupEmailShort { get { return LC.L(@"Email address of the group"); } } public static string GroupEmailLong { get { return LC.L(@"Email address of the group to store data in"); } } + public static string GroupEmailShort { get { return LC.L(@"Email address of the group"); } } public static string MissingGroupIdAndEmailAddress { get { return LC.L(@"No group ID or group email address was provided"); } } public static string NoGroupsWithEmail(string email) { return LC.L(@"No groups were found with the given email address: {0}", email); } public static string MultipleGroupsWithEmail(string email) { return LC.L(@"Multiple groups were found with the given email address: {0}", email); } From be96e9a669c0220caed9c241e41a3cc9a3512766 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 01:37:40 -0400 Subject: [PATCH 24/44] Change 'Id' to 'ID' --- Duplicati/Library/Backend/AliyunOSS/Strings.cs | 4 ++-- Duplicati/Library/Backend/Idrivee2/Strings.cs | 2 +- Duplicati/Library/Backend/TencentCOS/COSBackend.cs | 2 +- Duplicati/Library/Backend/TencentCOS/Strings.cs | 4 ++-- .../Server/webroot/ngax/scripts/services/EditUriBuiltins.js | 2 +- .../Server/webroot/ngax/templates/backends/aliyunoss.html | 4 ++-- Duplicati/Server/webroot/ngax/templates/backends/cos.html | 6 +++--- Duplicati/Server/webroot/ngax/templates/backends/e2.html | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Duplicati/Library/Backend/AliyunOSS/Strings.cs b/Duplicati/Library/Backend/AliyunOSS/Strings.cs index da9a9972c..fd9bf7140 100644 --- a/Duplicati/Library/Backend/AliyunOSS/Strings.cs +++ b/Duplicati/Library/Backend/AliyunOSS/Strings.cs @@ -6,8 +6,8 @@ namespace Duplicati.Library.Backend.Strings { public static string Description { get { return LC.L(@"This backend can read and write data to Aliyun OSS."); } } public static string DisplayName { get { return LC.L(@"Aliyun OSS (Object Storage Service)"); } } - public static string OSSAccessKeyIdDescriptionLong { get { return LC.L(@"AccessKeyId is used to identify the user."); } } - public static string OSSAccessKeyIdDescriptionShort { get { return LC.L(@"Access Key Id"); } } + public static string OSSAccessKeyIdDescriptionLong { get { return LC.L(@"AccessKeyID is used to identify the user."); } } + public static string OSSAccessKeyIdDescriptionShort { get { return LC.L(@"Access Key ID"); } } public static string OSSAccessKeySecretDescriptionLong { get { return LC.L(@"AccessKeySecret is the key used by the user to encrypt signature strings and by OSS to verify these signature strings"); } } public static string OSSAccessKeySecretDescriptionShort { get { return LC.L(@"Access Key Secret"); } } public static string OSSBucketNameDescriptionLong { get { return LC.L(@"A storage space is a container used to store objects (Object), and all objects must belong to a specific storage space."); } } diff --git a/Duplicati/Library/Backend/Idrivee2/Strings.cs b/Duplicati/Library/Backend/Idrivee2/Strings.cs index a65006a82..e4b2bc12a 100644 --- a/Duplicati/Library/Backend/Idrivee2/Strings.cs +++ b/Duplicati/Library/Backend/Idrivee2/Strings.cs @@ -31,7 +31,7 @@ namespace Duplicati.Library.Backend.Strings { public static string DisplayName { get { return LC.L(@"IDrive e2"); } } public static string NoKeySecretError { get { return LC.L(@"No Access key secret given"); } } - public static string NoKeyIdError { get { return LC.L(@"No Access key Id given"); } } + public static string NoKeyIdError { get { return LC.L(@"No Access key ID given"); } } public static string Description { get; set; } } } diff --git a/Duplicati/Library/Backend/TencentCOS/COSBackend.cs b/Duplicati/Library/Backend/TencentCOS/COSBackend.cs index 6ed5d4955..fa1f8013c 100644 --- a/Duplicati/Library/Backend/TencentCOS/COSBackend.cs +++ b/Duplicati/Library/Backend/TencentCOS/COSBackend.cs @@ -82,7 +82,7 @@ namespace Duplicati.Library.Backend.TencentCOS /// public string Appid { get; set; } /// - /// Cloud API Secret Id + /// Cloud API Secret ID /// public string SecretId { get; set; } /// diff --git a/Duplicati/Library/Backend/TencentCOS/Strings.cs b/Duplicati/Library/Backend/TencentCOS/Strings.cs index 9ec452002..777d22d4d 100644 --- a/Duplicati/Library/Backend/TencentCOS/Strings.cs +++ b/Duplicati/Library/Backend/TencentCOS/Strings.cs @@ -28,8 +28,8 @@ namespace Duplicati.Library.Backend.Strings public static string DisplayName { get { return LC.L(@"Tencent COS (Cloud Object Storage)"); } } public static string COSAccountDescriptionLong { get { return LC.L(@"Account ID of Tencent Cloud Account"); } } public static string COSAccountDescriptionShort { get { return LC.L(@"Account ID"); } } - public static string COSAPISecretIdDescriptionLong { get { return LC.L(@"Cloud API Secret Id"); } } - public static string COSAPISecretIdDescriptionShort { get { return LC.L(@"Secret Id"); } } + public static string COSAPISecretIdDescriptionLong { get { return LC.L(@"Cloud API Secret ID"); } } + public static string COSAPISecretIdDescriptionShort { get { return LC.L(@"Secret ID"); } } public static string COSAPISecretKeyDescriptionLong { get { return LC.L(@"Cloud API Secret Key"); } } public static string COSAPISecretKeyDescriptionShort { get { return LC.L(@"Secret Key"); } } public static string COSBucketDescriptionLong { get { return LC.L(@"Bucket, format: BucketName-APPID"); } } diff --git a/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js b/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js index c0719e335..258456f45 100644 --- a/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js +++ b/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js @@ -1327,7 +1327,7 @@ backupApp.service('EditUriBuiltins', function (AppService, AppUtils, SystemInfo, EditUriBackendConfig.validaters['e2'] = function (scope, continuation) { var res = - EditUriBackendConfig.require_field(scope, 'Username', gettextCatalog.getString('Idrivee2 Access Key Id')) && + EditUriBackendConfig.require_field(scope, 'Username', gettextCatalog.getString('Idrivee2 Access Key ID')) && EditUriBackendConfig.require_field(scope, 'Password', gettextCatalog.getString('Idrivee2 Access Key Secret')) && EditUriBackendConfig.require_field(scope, 'Server', gettextCatalog.getString('Bucket Name')); diff --git a/Duplicati/Server/webroot/ngax/templates/backends/aliyunoss.html b/Duplicati/Server/webroot/ngax/templates/backends/aliyunoss.html index a208dc107..889b29727 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/aliyunoss.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/aliyunoss.html @@ -5,9 +5,9 @@
- + + placeholder="{{'OSS Access Key ID' | translate}}"/>
diff --git a/Duplicati/Server/webroot/ngax/templates/backends/cos.html b/Duplicati/Server/webroot/ngax/templates/backends/cos.html index 1d6b602e8..3bf10a580 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/cos.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/cos.html @@ -1,13 +1,13 @@
- +
- + + placeholder="{{'Cloud API Secret ID' | translate}}"/>
diff --git a/Duplicati/Server/webroot/ngax/templates/backends/e2.html b/Duplicati/Server/webroot/ngax/templates/backends/e2.html index 86af8a762..b32d07f81 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/e2.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/e2.html @@ -1,6 +1,6 @@
- - + +
From 8e6304ae4de318c54dd25baf666e6898e9a69111 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 01:51:31 -0400 Subject: [PATCH 25/44] Split 'AccessKeyID' and 'AccessKeySecret' --- Duplicati/Library/Backend/AliyunOSS/Strings.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Duplicati/Library/Backend/AliyunOSS/Strings.cs b/Duplicati/Library/Backend/AliyunOSS/Strings.cs index fd9bf7140..bf652f651 100644 --- a/Duplicati/Library/Backend/AliyunOSS/Strings.cs +++ b/Duplicati/Library/Backend/AliyunOSS/Strings.cs @@ -6,9 +6,9 @@ namespace Duplicati.Library.Backend.Strings { public static string Description { get { return LC.L(@"This backend can read and write data to Aliyun OSS."); } } public static string DisplayName { get { return LC.L(@"Aliyun OSS (Object Storage Service)"); } } - public static string OSSAccessKeyIdDescriptionLong { get { return LC.L(@"AccessKeyID is used to identify the user."); } } + public static string OSSAccessKeyIdDescriptionLong { get { return LC.L(@"Access Key ID is used to identify the user."); } } public static string OSSAccessKeyIdDescriptionShort { get { return LC.L(@"Access Key ID"); } } - public static string OSSAccessKeySecretDescriptionLong { get { return LC.L(@"AccessKeySecret is the key used by the user to encrypt signature strings and by OSS to verify these signature strings"); } } + public static string OSSAccessKeySecretDescriptionLong { get { return LC.L(@"Access Key Secret is the key used by the user to encrypt signature strings and by OSS to verify these signature strings"); } } public static string OSSAccessKeySecretDescriptionShort { get { return LC.L(@"Access Key Secret"); } } public static string OSSBucketNameDescriptionLong { get { return LC.L(@"A storage space is a container used to store objects (Object), and all objects must belong to a specific storage space."); } } public static string OSSBucketNameDescriptionShort { get { return LC.L(@"Bucket Name"); } } From 77817f1300758d337f20a094f47ad989699d8bda Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 01:53:38 -0400 Subject: [PATCH 26/44] Capitalize 'Access key secret' and 'Access key ID' --- Duplicati/Library/Backend/Idrivee2/Strings.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Duplicati/Library/Backend/Idrivee2/Strings.cs b/Duplicati/Library/Backend/Idrivee2/Strings.cs index e4b2bc12a..83a4a8079 100644 --- a/Duplicati/Library/Backend/Idrivee2/Strings.cs +++ b/Duplicati/Library/Backend/Idrivee2/Strings.cs @@ -30,8 +30,8 @@ namespace Duplicati.Library.Backend.Strings { public static string BucketNameOrPathDescriptionShort { get { return LC.L(@"The ""Bucket Name or Complete Path"""); } } public static string DisplayName { get { return LC.L(@"IDrive e2"); } } - public static string NoKeySecretError { get { return LC.L(@"No Access key secret given"); } } - public static string NoKeyIdError { get { return LC.L(@"No Access key ID given"); } } + public static string NoKeySecretError { get { return LC.L(@"No Access Key Secret given"); } } + public static string NoKeyIdError { get { return LC.L(@"No Access Key ID given"); } } public static string Description { get; set; } } } From ccb3b54f1ff65992df13256694292b444f0de211 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 07:07:02 -0400 Subject: [PATCH 27/44] Remove 'The "' from Backblaze/Strings.cs --- Duplicati/Library/Backend/Backblaze/Strings.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Duplicati/Library/Backend/Backblaze/Strings.cs b/Duplicati/Library/Backend/Backblaze/Strings.cs index 6c964a405..eb1772fdd 100644 --- a/Duplicati/Library/Backend/Backblaze/Strings.cs +++ b/Duplicati/Library/Backend/Backblaze/Strings.cs @@ -22,17 +22,17 @@ using Duplicati.Library.Localization.Short; namespace Duplicati.Library.Backend.Strings { internal static class B2 { - public static string B2applicationkeyDescriptionLong { get { return LC.L(@"The ""B2 Cloud Storage Application Key"" can be obtained after logging into your Backblaze account, this can also be supplied through the ""auth-password"" property"); } } - public static string B2applicationkeyDescriptionShort { get { return LC.L(@"The ""B2 Cloud Storage Application Key"""); } } - public static string B2accountidDescriptionLong { get { return LC.L(@"The ""B2 Cloud Storage Account ID"" can be obtained after logging into your Backblaze account, this can also be supplied through the ""auth-username"" property"); } } - public static string B2accountidDescriptionShort { get { return LC.L(@"The ""B2 Cloud Storage Account ID"""); } } + public static string B2applicationkeyDescriptionLong { get { return LC.L(@"B2 Cloud Storage Application Key can be obtained after logging into your Backblaze account, this can also be supplied through the ""auth-password"" property"); } } + public static string B2applicationkeyDescriptionShort { get { return LC.L(@"B2 Cloud Storage Application Key"); } } + public static string B2accountidDescriptionLong { get { return LC.L(@"B2 Cloud Storage Account ID can be obtained after logging into your Backblaze account, this can also be supplied through the ""auth-username"" property"); } } + public static string B2accountidDescriptionShort { get { return LC.L(@"B2 Cloud Storage Account ID"); } } public static string DisplayName { get { return LC.L(@"B2 Cloud Storage"); } } public static string AuthPasswordDescriptionLong { get { return LC.L(@"The password used to connect to the server. This may also be supplied as the environment variable ""AUTH_PASSWORD""."); } } public static string AuthPasswordDescriptionShort { get { return LC.L(@"Supplies the password used to connect to the server"); } } public static string AuthUsernameDescriptionLong { get { return LC.L(@"The username used to connect to the server. This may also be supplied as the environment variable ""AUTH_USERNAME""."); } } public static string AuthUsernameDescriptionShort { get { return LC.L(@"Supplies the username used to connect to the server"); } } - public static string NoB2KeyError { get { return LC.L(@"No ""B2 Cloud Storage Application Key"" given"); } } - public static string NoB2UserIDError { get { return LC.L(@"No ""B2 Cloud Storage Account ID"" given"); } } + public static string NoB2KeyError { get { return LC.L(@"No B2 Cloud Storage Application Key given"); } } + public static string NoB2UserIDError { get { return LC.L(@"No B2 Cloud Storage Account ID given"); } } public static string Description { get { return LC.L(@"This backend can read and write data to the Backblaze B2 Cloud Storage. Allowed formats are: ""b2://bucketname/prefix"""); } } public static string B2createbuckettypeDescriptionLong { get { return LC.L(@"By default, a private bucket is created. Use this option to set the bucket type. Refer to the B2 documentation for allowed types "); } } public static string B2createbuckettypeDescriptionShort { get { return LC.L(@"The bucket type used when creating a bucket"); } } From 37b9d15b29f68bbb7a9a3f123f266c4f43d3a6b4 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 07:45:37 -0400 Subject: [PATCH 28/44] Remove 'The "' from Idrivee2/Strings.cs --- Duplicati/Library/Backend/Idrivee2/Strings.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Duplicati/Library/Backend/Idrivee2/Strings.cs b/Duplicati/Library/Backend/Idrivee2/Strings.cs index 83a4a8079..dd43fbebb 100644 --- a/Duplicati/Library/Backend/Idrivee2/Strings.cs +++ b/Duplicati/Library/Backend/Idrivee2/Strings.cs @@ -21,10 +21,10 @@ using Duplicati.Library.Localization.Short; namespace Duplicati.Library.Backend.Strings { internal static class Idrivee2Backend { - public static string KeySecretDescriptionLong { get { return LC.L(@"The ""Access Key Secret "" can be obtained after logging into your IDrive e2 account, this can also be supplied through the ""auth-password"" property."); } } - public static string KeySecretDescriptionShort { get { return LC.L(@"The ""Access Key Secret"""); } } - public static string KeyIDDescriptionLong { get { return LC.L(@"The ""Access Key ID"" can be obtained after logging into your IDrive e2 account., this can also be supplied through the ""auth-username"" property."); } } - public static string KeyIDDescriptionShort { get { return LC.L(@"The ""Access Key ID"""); } } + public static string KeySecretDescriptionLong { get { return LC.L(@"Access Key Secret can be obtained after logging into your IDrive e2 account, this can also be supplied through the ""auth-password"" property."); } } + public static string KeySecretDescriptionShort { get { return LC.L(@"Access Key Secret"); } } + public static string KeyIDDescriptionLong { get { return LC.L(@"Access Key ID can be obtained after logging into your IDrive e2 account., this can also be supplied through the ""auth-username"" property."); } } + public static string KeyIDDescriptionShort { get { return LC.L(@"Access Key ID"); } } public static string BucketNameOrPathDescriptionLong { get { return LC.L(@"The ""Bucket Name or Complete Path"" is name of target bucket or complete of a folder inside the bucket."); } } public static string BucketNameOrPathDescriptionShort { get { return LC.L(@"The ""Bucket Name or Complete Path"""); } } From 67fcd7fbf17ead6cb689a6ea0e75c652fe9b147c Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 07:52:07 -0400 Subject: [PATCH 29/44] Remove 'The "' from S3/Strings.cs --- Duplicati/Library/Backend/S3/Strings.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Duplicati/Library/Backend/S3/Strings.cs b/Duplicati/Library/Backend/S3/Strings.cs index 10291fffb..a46c57e0f 100644 --- a/Duplicati/Library/Backend/S3/Strings.cs +++ b/Duplicati/Library/Backend/S3/Strings.cs @@ -23,10 +23,10 @@ namespace Duplicati.Library.Backend.Strings { internal static class S3Backend { - public static string AMZKeyDescriptionLong { get { return LC.L(@"The AWS ""Secret Access Key"" can be obtained after logging into your AWS account, this can also be supplied through the ""auth-password"" property"); } } - public static string AMZKeyDescriptionShort { get { return LC.L(@"The AWS ""Secret Access Key"""); } } - public static string AMZUserIDDescriptionLong { get { return LC.L(@"The AWS ""Access Key ID"" can be obtained after logging into your AWS account, this can also be supplied through the ""auth-username"" property"); } } - public static string AMZUserIDDescriptionShort { get { return LC.L(@"The AWS ""Access Key ID"""); } } + public static string AMZKeyDescriptionLong { get { return LC.L(@"AWS Secret Access Key can be obtained after logging into your AWS account, this can also be supplied through the ""auth-password"" property"); } } + public static string AMZKeyDescriptionShort { get { return LC.L(@"AWS Secret Access Key"); } } + public static string AMZUserIDDescriptionLong { get { return LC.L(@"AWS Access Key ID can be obtained after logging into your AWS account, this can also be supplied through the ""auth-username"" property"); } } + public static string AMZUserIDDescriptionShort { get { return LC.L(@"AWS Access Key ID"); } } public static string DisplayName { get { return LC.L(@"S3 compatible"); } } public static string AuthPasswordDescriptionLong { get { return LC.L(@"The password used to connect to the server. This may also be supplied as the environment variable ""AUTH_PASSWORD""."); } } public static string AuthPasswordDescriptionShort { get { return LC.L(@"Supplies the password used to connect to the server"); } } From 42a83beeaac4bb7b31972e04b4042dd7078bf87e Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 07:48:03 -0400 Subject: [PATCH 30/44] Split sentences correctly on Backblaze/Strings.cs, Idrivee2/Strings.cs, and S3/Strings.cs --- Duplicati/Library/Backend/Backblaze/Strings.cs | 4 ++-- Duplicati/Library/Backend/Idrivee2/Strings.cs | 4 ++-- Duplicati/Library/Backend/S3/Strings.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Duplicati/Library/Backend/Backblaze/Strings.cs b/Duplicati/Library/Backend/Backblaze/Strings.cs index eb1772fdd..37578a369 100644 --- a/Duplicati/Library/Backend/Backblaze/Strings.cs +++ b/Duplicati/Library/Backend/Backblaze/Strings.cs @@ -22,9 +22,9 @@ using Duplicati.Library.Localization.Short; namespace Duplicati.Library.Backend.Strings { internal static class B2 { - public static string B2applicationkeyDescriptionLong { get { return LC.L(@"B2 Cloud Storage Application Key can be obtained after logging into your Backblaze account, this can also be supplied through the ""auth-password"" property"); } } + public static string B2applicationkeyDescriptionLong { get { return LC.L(@"B2 Cloud Storage Application Key can be obtained after logging into your Backblaze account. This can also be supplied through the ""auth-password"" property"); } } public static string B2applicationkeyDescriptionShort { get { return LC.L(@"B2 Cloud Storage Application Key"); } } - public static string B2accountidDescriptionLong { get { return LC.L(@"B2 Cloud Storage Account ID can be obtained after logging into your Backblaze account, this can also be supplied through the ""auth-username"" property"); } } + public static string B2accountidDescriptionLong { get { return LC.L(@"B2 Cloud Storage Account ID can be obtained after logging into your Backblaze account. This can also be supplied through the ""auth-username"" property"); } } public static string B2accountidDescriptionShort { get { return LC.L(@"B2 Cloud Storage Account ID"); } } public static string DisplayName { get { return LC.L(@"B2 Cloud Storage"); } } public static string AuthPasswordDescriptionLong { get { return LC.L(@"The password used to connect to the server. This may also be supplied as the environment variable ""AUTH_PASSWORD""."); } } diff --git a/Duplicati/Library/Backend/Idrivee2/Strings.cs b/Duplicati/Library/Backend/Idrivee2/Strings.cs index dd43fbebb..860bf5916 100644 --- a/Duplicati/Library/Backend/Idrivee2/Strings.cs +++ b/Duplicati/Library/Backend/Idrivee2/Strings.cs @@ -21,9 +21,9 @@ using Duplicati.Library.Localization.Short; namespace Duplicati.Library.Backend.Strings { internal static class Idrivee2Backend { - public static string KeySecretDescriptionLong { get { return LC.L(@"Access Key Secret can be obtained after logging into your IDrive e2 account, this can also be supplied through the ""auth-password"" property."); } } + public static string KeySecretDescriptionLong { get { return LC.L(@"Access Key Secret can be obtained after logging into your IDrive e2 account. This can also be supplied through the ""auth-password"" property."); } } public static string KeySecretDescriptionShort { get { return LC.L(@"Access Key Secret"); } } - public static string KeyIDDescriptionLong { get { return LC.L(@"Access Key ID can be obtained after logging into your IDrive e2 account., this can also be supplied through the ""auth-username"" property."); } } + public static string KeyIDDescriptionLong { get { return LC.L(@"Access Key ID can be obtained after logging into your IDrive e2 account. This can also be supplied through the ""auth-username"" property."); } } public static string KeyIDDescriptionShort { get { return LC.L(@"Access Key ID"); } } public static string BucketNameOrPathDescriptionLong { get { return LC.L(@"The ""Bucket Name or Complete Path"" is name of target bucket or complete of a folder inside the bucket."); } } diff --git a/Duplicati/Library/Backend/S3/Strings.cs b/Duplicati/Library/Backend/S3/Strings.cs index a46c57e0f..6d5516f30 100644 --- a/Duplicati/Library/Backend/S3/Strings.cs +++ b/Duplicati/Library/Backend/S3/Strings.cs @@ -23,9 +23,9 @@ namespace Duplicati.Library.Backend.Strings { internal static class S3Backend { - public static string AMZKeyDescriptionLong { get { return LC.L(@"AWS Secret Access Key can be obtained after logging into your AWS account, this can also be supplied through the ""auth-password"" property"); } } + public static string AMZKeyDescriptionLong { get { return LC.L(@"AWS Secret Access Key can be obtained after logging into your AWS account. This can also be supplied through the ""auth-password"" property"); } } public static string AMZKeyDescriptionShort { get { return LC.L(@"AWS Secret Access Key"); } } - public static string AMZUserIDDescriptionLong { get { return LC.L(@"AWS Access Key ID can be obtained after logging into your AWS account, this can also be supplied through the ""auth-username"" property"); } } + public static string AMZUserIDDescriptionLong { get { return LC.L(@"AWS Access Key ID can be obtained after logging into your AWS account. This can also be supplied through the ""auth-username"" property"); } } public static string AMZUserIDDescriptionShort { get { return LC.L(@"AWS Access Key ID"); } } public static string DisplayName { get { return LC.L(@"S3 compatible"); } } public static string AuthPasswordDescriptionLong { get { return LC.L(@"The password used to connect to the server. This may also be supplied as the environment variable ""AUTH_PASSWORD""."); } } From 8499e03efc3c7c2fc4cac1135e44f3d657cfb6f0 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 13:46:38 -0400 Subject: [PATCH 31/44] Sort strings on Mega/Strings.cs --- Duplicati/Library/Backend/Mega/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Backend/Mega/Strings.cs b/Duplicati/Library/Backend/Mega/Strings.cs index 1fc7e7d35..75b534d95 100644 --- a/Duplicati/Library/Backend/Mega/Strings.cs +++ b/Duplicati/Library/Backend/Mega/Strings.cs @@ -26,8 +26,8 @@ namespace Duplicati.Library.Backend.Strings { public static string AuthPasswordDescriptionShort { get { return LC.L(@"Supplies the password used to connect to the server"); } } public static string AuthUsernameDescriptionLong { get { return LC.L(@"The username used to connect to the server. This may also be supplied as the environment variable ""AUTH_USERNAME""."); } } public static string AuthUsernameDescriptionShort { get { return LC.L(@"Supplies the username used to connect to the server"); } } - public static string AuthTwoFactorKeyDescriptionShort { get { return LC.L(@"The shared secret used to generate two-factor TOTP codes"); } } public static string AuthTwoFactorKeyDescriptionLong { get { return LC.L(@"For accounts with two-factor authentication enabled, this is the shared secret used to generate the two-factor TOTP codes."); } } + public static string AuthTwoFactorKeyDescriptionShort { get { return LC.L(@"The shared secret used to generate two-factor TOTP codes"); } } public static string NoPasswordError { get { return LC.L(@"No password given"); } } public static string NoUsernameError { get { return LC.L(@"No username given"); } } public static string Description { get { return LC.L(@"This backend can read and write data to Mega.co.nz. Allowed formats are: ""mega://folder/subfolder"""); } } From 9bc2158f9b7a0ccea06a8c41c2078f893e3e4e2a Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Wed, 24 Jul 2024 22:27:22 -0400 Subject: [PATCH 32/44] Sort strings on Builtin/Strings.cs - part 1 --- Duplicati/Library/Modules/Builtin/Strings.cs | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Duplicati/Library/Modules/Builtin/Strings.cs b/Duplicati/Library/Modules/Builtin/Strings.cs index 309de3340..59b2b0d3a 100644 --- a/Duplicati/Library/Modules/Builtin/Strings.cs +++ b/Duplicati/Library/Modules/Builtin/Strings.cs @@ -32,8 +32,8 @@ namespace Duplicati.Library.Modules.Builtin.Strings public static string EmptyPassphraseError { get { return LC.L(@"Empty passphrases are not allowed"); } } public static string EnterPassphrasePrompt { get { return LC.L(@"Enter encryption passphrase"); } } public static string PassphraseMismatchError { get { return LC.L(@"The passphrases do not match"); } } - public static string ForcepassphrasefromstdinShort { get { return LC.L(@"Read passphrase from STDIN"); } } public static string ForcepassphrasefromstdinLong { get { return LC.L(@"By default, the passphrase is attempted read from the TTY device directly, increasing the security by not copying the passphrase into a stream. In some setups, such as when running detached from a console, this does not work. Set this flag to prevent trying a TTY read and only read the passphrase from STDIN."); } } + public static string ForcepassphrasefromstdinShort { get { return LC.L(@"Read passphrase from STDIN"); } } } internal static class CheckMonoSSL { @@ -53,16 +53,16 @@ namespace Duplicati.Library.Modules.Builtin.Strings public static string DisableNagleLong { get { return LC.L(@"By default the http requests use the RFC 896 nagling algorithm to support transfer of small packages more efficiently."); } } public static string DisableNagleShort { get { return LC.L(@"Disable nagling"); } } public static string DisplayName { get { return LC.L(@"Configure http requests"); } } - public static string OauthurlShort { get { return LC.L(@"Alternate OAuth URL"); } } public static string OauthurlLong { get { return LC.L(@"Duplicati uses an external server to support the OAuth authentication flow. If you have set up your own Duplicati OAuth server, you can supply the refresh url."); } } + public static string OauthurlShort { get { return LC.L(@"Alternate OAuth URL"); } } public static string SslversionsShort { get { return LC.L(@"Sets allowed SSL versions"); } } public static string SslversionsLong { get { return LC.L(@"This option changes the default SSL versions allowed. This is an advanced option and should only be used if you want to enhance security or work around an issue with a particular SSL protocol."); } } - public static string OperationtimeoutShort { get { return LC.L(@"Sets the default operation timeout"); } } public static string OperationtimeoutLong { get { return LC.L(@"This option changes the default timeout for any HTTP request, the time covers the entire operation from initial packet to shutdown"); } } + public static string OperationtimeoutShort { get { return LC.L(@"Sets the default operation timeout"); } } public static string ReadwritetimeoutShort { get { return LC.L(@"Sets readwrite"); } } public static string ReadwritetimeoutLong { get { return LC.L(@"This option changes the default read-write timeout. Read-write timeouts are used to detect a stalled requests, and this option configures the maximum time between activity on a connection."); } } - public static string BufferrequestsShort { get { return LC.L(@"Sets HTTP buffering"); } } public static string BufferrequestsLong { get { return LC.L(@"This option sets the HTTP buffering. Setting this to ""{0}"" can cause memory leaks, but can also improve performance in some cases.", "true"); } } + public static string BufferrequestsShort { get { return LC.L(@"Sets HTTP buffering"); } } } internal static class HyperVOptions { @@ -84,8 +84,8 @@ namespace Duplicati.Library.Modules.Builtin.Strings public static string ExitCodeError(string script, int exitcode, string message) { return LC.L(@"The script ""{0}"" returned with exit code {1}{2}", script, exitcode, string.IsNullOrWhiteSpace(message) ? string.Empty : string.Format(": {0}", message)); } public static string RequiredoptionLong { get { return LC.L(@"Executes a script before performing an operation. The operation will block until the script has completed or timed out. If the script returns a non-zero error code or times out, the operation will be aborted."); } } public static string RequiredoptionShort { get { return LC.L(@"Run a required script on startup"); } } - public static string ResultFormatShort { get { return LC.L(@"Selects the output format for results"); } } public static string ResultFormatLong(IEnumerable options) { return LC.L(@"Selects the output format for results. Available formats: {0}", string.Join(", ", options)); } + public static string ResultFormatShort { get { return LC.L(@"Selects the output format for results"); } } public static string ScriptExecuteError(string script, string message) { return LC.L(@"Error while executing script ""{0}"": {1}", script, message); } public static string ScriptTimeoutError(string script) { return LC.L(@"Execution of the script ""{0}"" timed out", script); } public static string StartupoptionLong { get { return LC.L(@"Executes a script before performing an operation. The operation will block until the script has completed or timed out."); } } @@ -93,8 +93,8 @@ namespace Duplicati.Library.Modules.Builtin.Strings public static string StdErrorReport(string script, string message) { return LC.L(@"The script ""{0}"" reported error messages: {1}", script, message); } public static string TimeoutoptionLong { get { return LC.L(@"Sets the maximum time a script is allowed to execute. If the script has not completed within this time, it will continue to execute but the operation will continue too, and no script output will be processed."); } } public static string TimeoutoptionShort { get { return LC.L(@"Sets the script timeout"); } } - public static string EnableArgumentsShort { get { return LC.L(@"Enable script arguments"); } } public static string EnableArgumentsLong { get { return LC.L(@"This option enables the use of script arguments. If this option is enabled, the script arguments are treated as commandline strings. Use single or double quotes to separate arguments."); } } + public static string EnableArgumentsShort { get { return LC.L(@"Enable script arguments"); } } } internal static class SendMail { @@ -143,8 +143,8 @@ To enable SMTP over SSL, use the format smtps://example.com. To enable SMTP STAR } internal static class SendJabberMessage { - public static string SendxmpptoShort { get { return LC.L(@"XMPP recipient email"); } } public static string SendxmpptoLong { get { return LC.L(@"The users who should have the messages sent, specify multiple users separated with commas"); } } + public static string SendxmpptoShort { get { return LC.L(@"XMPP recipient email"); } } public static string SendxmppmessageShort { get { return LC.L(@"The message template"); } } public static string SendxmppmessageLong { get { return LC.L(@"This value can be a filename. If the file exists, the file contents will be used as the message. @@ -155,13 +155,13 @@ In the message, certain tokens are replaced: %PARSEDRESULT% - The parsed result, if the operation is a backup. Possible values are: Error, Warning, Success All command line options are also reported within %value%, e.g. %volsize%. Any unknown/unset value is removed."); } } - public static string SendxmppusernameShort { get { return LC.L(@"The XMPP username"); } } public static string SendxmppusernameLong { get { return LC.L(@"The username for the account that will send the message, including the hostname. I.e. ""account@jabber.org/Home"""); } } + public static string SendxmppusernameShort { get { return LC.L(@"The XMPP username"); } } public static string SendxmpppasswordShort { get { return LC.L(@"The XMPP password"); } } public static string SendxmpppasswordLong { get { return LC.L(@"The password for the account that will send the message"); } } - public static string SendxmpplevelShort { get { return LC.L(@"The messages to send"); } } public static string SendxmpplevelLong(string success, string warning, string error, string fatal, string all) { return LC.L(@"You can specify one of ""{0}"", ""{1}"", ""{2}"", ""{3}"". You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The special value ""{4}"" is a shorthand for ""{0},{1},{2},{3}"" and will cause all backup operations to send a message.", success, warning, error, fatal, all); } + public static string SendxmpplevelShort { get { return LC.L(@"The messages to send"); } } public static string SendxmppanyoperationShort { get { return LC.L(@"Send messages for all operations"); } } public static string SendxmppanyoperationLong { get { return LC.L(@"By default, messages will only be sent after a Backup operation. Use this option to send messages for all operations"); } } public static string DisplayName { get { return LC.L(@"XMPP report module"); } } @@ -173,8 +173,8 @@ You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The sp { public static string DisplayName { get { return LC.L(@"HTTP report module"); } } public static string Description { get { return LC.L(@"This module provides support for sending status reports via HTTP messages"); } } - public static string SendhttpurlShort { get { return LC.L(@"HTTP report url"); } } public static string SendhttpurlLong { get { return LC.L(@"HTTP report url"); } } + public static string SendhttpurlShort { get { return LC.L(@"HTTP report url"); } } public static string SendhttpmessageShort { get { return LC.L(@"The message template"); } } public static string SendhttpmessageLong { get { return LC.L(@"This value can be a filename. If the file exists, the file contents will be used as the message. @@ -185,21 +185,21 @@ In the message, certain tokens are replaced: %PARSEDRESULT% - The parsed result, if the operation is a backup. Possible values are: Error, Warning, Success All command line options are also reported within %value%, e.g. %volsize%. Any unknown/unset value is removed."); } } - public static string SendhttpmessageparameternameShort { get { return LC.L(@"The name of the parameter to send the message as"); } } public static string SendhttpmessageparameternameLong { get { return LC.L(@"The name of the parameter to send the message as."); } } + public static string SendhttpmessageparameternameShort { get { return LC.L(@"The name of the parameter to send the message as"); } } public static string SendhttpextraparametersShort { get { return LC.L(@"Extra parameters to add to the http message"); } } public static string SendhttpextraparametersLong { get { return LC.L(@"Extra parameters to add to the http message. I.e. ""parameter1=value1¶meter2=value2"""); } } - public static string SendhttplevelShort { get { return LC.L(@"The messages to send"); } } public static string SendhttplevelLong(string success, string warning, string error, string fatal, string all) { return LC.L(@"You can specify one of ""{0}"", ""{1}"", ""{2}"", ""{3}"". You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The special value ""{4}"" is a shorthand for ""{0},{1},{2},{3}"" and will cause all backup operations to send a message.", success, warning, error, fatal, all); } + public static string SendhttplevelShort { get { return LC.L(@"The messages to send"); } } public static string SendhttpanyoperationShort { get { return LC.L(@"Send messages for all operations"); } } public static string SendhttpanyoperationLong { get { return LC.L(@"By default, messages will only be sent after a Backup operation. Use this option to send messages for all operations"); } } - public static string HttpverbShort { get { return LC.L(@"Sets the HTTP verb to use"); } } public static string HttpverbLong { get { return LC.L(@"Use this option to change the default HTTP verb used to submit a report"); } } + public static string HttpverbShort { get { return LC.L(@"Sets the HTTP verb to use"); } } public static string SendhttpurlsformShort { get { return LC.L(@"HTTP report urls for sending form data"); } } public static string SendhttpurlsformLong { get { return LC.L(@"HTTP report urls for sending form-encoded data. This property accepts multiple urls, seperated by a semi-colon. All urls will receive the same data. Note that this option ignores the format and verb settings"); } } - public static string SendhttpurlsjsonShort { get { return LC.L(@"HTTP report urls for sending JSON data"); } } public static string SendhttpurlsjsonLong { get { return LC.L(@"HTTP report urls for sending JSON data. This property accepts multiple urls, seperated by a semi-colon. All urls will receive the same data. Note that this option ignores the format and verb settings"); } } + public static string SendhttpurlsjsonShort { get { return LC.L(@"HTTP report urls for sending JSON data"); } } } internal static class ReportHelper @@ -209,8 +209,8 @@ You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The sp public static string OptionLoglevelShort { get { return LC.L("Defines a log level for messages"); } } public static string OptionLogfilterShort { get { return LC.L("Log message filter"); } } public static string OptionLogfilterLong { get { return LC.L("Use this option to set a filter expression that defines what options are included in the report"); } } - public static string OptionmaxloglinesShort { get { return LC.L("Limits log lines"); } } public static string OptionmaxloglinesLong { get { return LC.L("Use this option to set the maximum number of log lines to include in the report. Zero or negative values means unlimited."); } } + public static string OptionmaxloglinesShort { get { return LC.L("Limits log lines"); } } public static string ResultFormatShort { get { return LC.L(@"Selects the output format for results"); } } public static string ResultFormatLong(IEnumerable options) { return LC.L(@"Selects the output format for results. Available formats: {0}", string.Join(", ", options)); } } From 2d22b8cdd6a2e71f7be17f29d108eb69fac5ca3c Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Thu, 25 Jul 2024 00:49:26 -0400 Subject: [PATCH 33/44] Sort strings on Builtin/Strings.cs - part 2 --- Duplicati/Library/Modules/Builtin/Strings.cs | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Duplicati/Library/Modules/Builtin/Strings.cs b/Duplicati/Library/Modules/Builtin/Strings.cs index 59b2b0d3a..cd33c315b 100644 --- a/Duplicati/Library/Modules/Builtin/Strings.cs +++ b/Duplicati/Library/Modules/Builtin/Strings.cs @@ -55,12 +55,12 @@ namespace Duplicati.Library.Modules.Builtin.Strings public static string DisplayName { get { return LC.L(@"Configure http requests"); } } public static string OauthurlLong { get { return LC.L(@"Duplicati uses an external server to support the OAuth authentication flow. If you have set up your own Duplicati OAuth server, you can supply the refresh url."); } } public static string OauthurlShort { get { return LC.L(@"Alternate OAuth URL"); } } - public static string SslversionsShort { get { return LC.L(@"Sets allowed SSL versions"); } } public static string SslversionsLong { get { return LC.L(@"This option changes the default SSL versions allowed. This is an advanced option and should only be used if you want to enhance security or work around an issue with a particular SSL protocol."); } } + public static string SslversionsShort { get { return LC.L(@"Sets allowed SSL versions"); } } public static string OperationtimeoutLong { get { return LC.L(@"This option changes the default timeout for any HTTP request, the time covers the entire operation from initial packet to shutdown"); } } public static string OperationtimeoutShort { get { return LC.L(@"Sets the default operation timeout"); } } - public static string ReadwritetimeoutShort { get { return LC.L(@"Sets readwrite"); } } public static string ReadwritetimeoutLong { get { return LC.L(@"This option changes the default read-write timeout. Read-write timeouts are used to detect a stalled requests, and this option configures the maximum time between activity on a connection."); } } + public static string ReadwritetimeoutShort { get { return LC.L(@"Sets readwrite"); } } public static string BufferrequestsLong { get { return LC.L(@"This option sets the HTTP buffering. Setting this to ""{0}"" can cause memory leaks, but can also improve performance in some cases.", "true"); } } public static string BufferrequestsShort { get { return LC.L(@"Sets HTTP buffering"); } } } @@ -145,7 +145,6 @@ To enable SMTP over SSL, use the format smtps://example.com. To enable SMTP STAR { public static string SendxmpptoLong { get { return LC.L(@"The users who should have the messages sent, specify multiple users separated with commas"); } } public static string SendxmpptoShort { get { return LC.L(@"XMPP recipient email"); } } - public static string SendxmppmessageShort { get { return LC.L(@"The message template"); } } public static string SendxmppmessageLong { get { return LC.L(@"This value can be a filename. If the file exists, the file contents will be used as the message. In the message, certain tokens are replaced: @@ -155,15 +154,16 @@ In the message, certain tokens are replaced: %PARSEDRESULT% - The parsed result, if the operation is a backup. Possible values are: Error, Warning, Success All command line options are also reported within %value%, e.g. %volsize%. Any unknown/unset value is removed."); } } + public static string SendxmppmessageShort { get { return LC.L(@"The message template"); } } public static string SendxmppusernameLong { get { return LC.L(@"The username for the account that will send the message, including the hostname. I.e. ""account@jabber.org/Home"""); } } public static string SendxmppusernameShort { get { return LC.L(@"The XMPP username"); } } - public static string SendxmpppasswordShort { get { return LC.L(@"The XMPP password"); } } public static string SendxmpppasswordLong { get { return LC.L(@"The password for the account that will send the message"); } } + public static string SendxmpppasswordShort { get { return LC.L(@"The XMPP password"); } } public static string SendxmpplevelLong(string success, string warning, string error, string fatal, string all) { return LC.L(@"You can specify one of ""{0}"", ""{1}"", ""{2}"", ""{3}"". You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The special value ""{4}"" is a shorthand for ""{0},{1},{2},{3}"" and will cause all backup operations to send a message.", success, warning, error, fatal, all); } public static string SendxmpplevelShort { get { return LC.L(@"The messages to send"); } } - public static string SendxmppanyoperationShort { get { return LC.L(@"Send messages for all operations"); } } public static string SendxmppanyoperationLong { get { return LC.L(@"By default, messages will only be sent after a Backup operation. Use this option to send messages for all operations"); } } + public static string SendxmppanyoperationShort { get { return LC.L(@"Send messages for all operations"); } } public static string DisplayName { get { return LC.L(@"XMPP report module"); } } public static string Description { get { return LC.L(@"This module provides support for sending status reports via XMPP messages"); } } public static string LoginTimeoutError { get { return LC.L(@"Timeout occurred while logging in to jabber server"); } } @@ -175,7 +175,6 @@ You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The sp public static string Description { get { return LC.L(@"This module provides support for sending status reports via HTTP messages"); } } public static string SendhttpurlLong { get { return LC.L(@"HTTP report url"); } } public static string SendhttpurlShort { get { return LC.L(@"HTTP report url"); } } - public static string SendhttpmessageShort { get { return LC.L(@"The message template"); } } public static string SendhttpmessageLong { get { return LC.L(@"This value can be a filename. If the file exists, the file contents will be used as the message. In the message, certain tokens are replaced: @@ -185,19 +184,20 @@ In the message, certain tokens are replaced: %PARSEDRESULT% - The parsed result, if the operation is a backup. Possible values are: Error, Warning, Success All command line options are also reported within %value%, e.g. %volsize%. Any unknown/unset value is removed."); } } + public static string SendhttpmessageShort { get { return LC.L(@"The message template"); } } public static string SendhttpmessageparameternameLong { get { return LC.L(@"The name of the parameter to send the message as."); } } public static string SendhttpmessageparameternameShort { get { return LC.L(@"The name of the parameter to send the message as"); } } - public static string SendhttpextraparametersShort { get { return LC.L(@"Extra parameters to add to the http message"); } } public static string SendhttpextraparametersLong { get { return LC.L(@"Extra parameters to add to the http message. I.e. ""parameter1=value1¶meter2=value2"""); } } + public static string SendhttpextraparametersShort { get { return LC.L(@"Extra parameters to add to the http message"); } } public static string SendhttplevelLong(string success, string warning, string error, string fatal, string all) { return LC.L(@"You can specify one of ""{0}"", ""{1}"", ""{2}"", ""{3}"". You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The special value ""{4}"" is a shorthand for ""{0},{1},{2},{3}"" and will cause all backup operations to send a message.", success, warning, error, fatal, all); } public static string SendhttplevelShort { get { return LC.L(@"The messages to send"); } } - public static string SendhttpanyoperationShort { get { return LC.L(@"Send messages for all operations"); } } public static string SendhttpanyoperationLong { get { return LC.L(@"By default, messages will only be sent after a Backup operation. Use this option to send messages for all operations"); } } + public static string SendhttpanyoperationShort { get { return LC.L(@"Send messages for all operations"); } } public static string HttpverbLong { get { return LC.L(@"Use this option to change the default HTTP verb used to submit a report"); } } public static string HttpverbShort { get { return LC.L(@"Sets the HTTP verb to use"); } } - public static string SendhttpurlsformShort { get { return LC.L(@"HTTP report urls for sending form data"); } } public static string SendhttpurlsformLong { get { return LC.L(@"HTTP report urls for sending form-encoded data. This property accepts multiple urls, seperated by a semi-colon. All urls will receive the same data. Note that this option ignores the format and verb settings"); } } + public static string SendhttpurlsformShort { get { return LC.L(@"HTTP report urls for sending form data"); } } public static string SendhttpurlsjsonLong { get { return LC.L(@"HTTP report urls for sending JSON data. This property accepts multiple urls, seperated by a semi-colon. All urls will receive the same data. Note that this option ignores the format and verb settings"); } } public static string SendhttpurlsjsonShort { get { return LC.L(@"HTTP report urls for sending JSON data"); } } } @@ -207,11 +207,11 @@ You can supply multiple options with a comma separator, e.g. ""{0},{1}"". The sp public static string SendMessageFailedError(string message) { return LC.L(@"Failed to send message: {0}", message); } public static string OptionLoglevelLong { get { return LC.L("Use this option to set the log level for messages to include in the report"); } } public static string OptionLoglevelShort { get { return LC.L("Defines a log level for messages"); } } - public static string OptionLogfilterShort { get { return LC.L("Log message filter"); } } public static string OptionLogfilterLong { get { return LC.L("Use this option to set a filter expression that defines what options are included in the report"); } } + public static string OptionLogfilterShort { get { return LC.L("Log message filter"); } } public static string OptionmaxloglinesLong { get { return LC.L("Use this option to set the maximum number of log lines to include in the report. Zero or negative values means unlimited."); } } public static string OptionmaxloglinesShort { get { return LC.L("Limits log lines"); } } - public static string ResultFormatShort { get { return LC.L(@"Selects the output format for results"); } } public static string ResultFormatLong(IEnumerable options) { return LC.L(@"Selects the output format for results. Available formats: {0}", string.Join(", ", options)); } + public static string ResultFormatShort { get { return LC.L(@"Selects the output format for results"); } } } } From 330233f5ecd9e594779a6fd55b4a27a677bdebde Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 11:06:00 -0400 Subject: [PATCH 34/44] Use the precomposed character U+2026 for horizontal ellipsis on JS and HTML files --- Duplicati/Server/webroot/ngax/index.html | 4 ++-- .../Server/webroot/ngax/scripts/directives/backupEditUri.js | 2 +- .../Server/webroot/ngax/scripts/services/CaptchaService.js | 4 ++-- .../Server/webroot/ngax/scripts/services/EditUriBuiltins.js | 4 ++-- .../Server/webroot/ngax/scripts/services/ServerStatus.js | 2 +- Duplicati/Server/webroot/ngax/templates/captcha.html | 4 ++-- Duplicati/Server/webroot/ngax/templates/commandline.html | 6 +++--- Duplicati/Server/webroot/ngax/templates/delete.html | 2 +- Duplicati/Server/webroot/ngax/templates/restore.html | 2 +- Duplicati/Server/webroot/ngax/templates/restorewizard.html | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Duplicati/Server/webroot/ngax/index.html b/Duplicati/Server/webroot/ngax/index.html index 81d6f3d25..7b395cd4e 100755 --- a/Duplicati/Server/webroot/ngax/index.html +++ b/Duplicati/Server/webroot/ngax/index.html @@ -297,7 +297,7 @@ If this problem persist open this page from the TrayIcon instead.
- The connection to the server is lost, attempting again in {{time}} ... + The connection to the server is lost, attempting again in {{time}} …
Connecting to server … @@ -305,7 +305,7 @@
diff --git a/Duplicati/Server/webroot/ngax/scripts/directives/backupEditUri.js b/Duplicati/Server/webroot/ngax/scripts/directives/backupEditUri.js index e7dd6e14d..5a4a62a7a 100644 --- a/Duplicati/Server/webroot/ngax/scripts/directives/backupEditUri.js +++ b/Duplicati/Server/webroot/ngax/scripts/directives/backupEditUri.js @@ -40,7 +40,7 @@ backupApp.directive('backupEditUri', function(gettextCatalog) { if (dlg != null) dlg.dismiss(); - dlg = DialogService.dialog(gettextCatalog.getString('Testing ...'), gettextCatalog.getString('Testing connection ...'), [], null, function() { + dlg = DialogService.dialog(gettextCatalog.getString('Testing …'), gettextCatalog.getString('Testing connection …'), [], null, function() { AppService.postJson('/remoteoperation/test', { path: uri }).then(function() { scope.Testing = false; dlg.dismiss(); diff --git a/Duplicati/Server/webroot/ngax/scripts/services/CaptchaService.js b/Duplicati/Server/webroot/ngax/scripts/services/CaptchaService.js index 1eb9e90a8..2551a9f40 100644 --- a/Duplicati/Server/webroot/ngax/scripts/services/CaptchaService.js +++ b/Duplicati/Server/webroot/ngax/scripts/services/CaptchaService.js @@ -29,7 +29,7 @@ backupApp.service('CaptchaService', function(DialogService, AppService, AppUtils cb.verifying = true; - DialogService.dialog(gettextCatalog.getString('Verifying answer'), gettextCatalog.getString('Verifying ...'), [], function() {}, function() { + DialogService.dialog(gettextCatalog.getString('Verifying answer'), gettextCatalog.getString('Verifying …'), [], function() {}, function() { AppService.postJson('/captcha/' + encodeURIComponent(cb.token), {'answer': cb.answer, 'target': cb.target}).then(function(resp) { DialogService.dismissCurrent(); @@ -52,4 +52,4 @@ backupApp.service('CaptchaService', function(DialogService, AppService, AppUtils self.attemptSolve(); }; -}); \ No newline at end of file +}); diff --git a/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js b/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js index c0719e335..088bf8c30 100644 --- a/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js +++ b/Duplicati/Server/webroot/ngax/scripts/services/EditUriBuiltins.js @@ -46,7 +46,7 @@ backupApp.service('EditUriBuiltins', function (AppService, AppUtils, SystemInfo, var dlg = null; - dlg = DialogService.dialog(gettextCatalog.getString('Testing permissions...'), gettextCatalog.getString('Testing permissions …'), [], null, function () { + dlg = DialogService.dialog(gettextCatalog.getString('Testing permissions …'), gettextCatalog.getString('Testing permissions …'), [], null, function () { AppService.postJson('/webmodule/s3-iamconfig', { 's3-operation': 'CanCreateUser', 's3-username': scope.Username, @@ -120,7 +120,7 @@ backupApp.service('EditUriBuiltins', function (AppService, AppUtils, SystemInfo, var dlg = null; - dlg = DialogService.dialog(gettextCatalog.getString('Creating user...'), gettextCatalog.getString('Creating new user with limited access …'), [], null, function () { + dlg = DialogService.dialog(gettextCatalog.getString('Creating user …'), gettextCatalog.getString('Creating new user with limited access …'), [], null, function () { path = (scope.Server || '') + '/' + (scope.Path || ''); AppService.postJson('/webmodule/s3-iamconfig', { diff --git a/Duplicati/Server/webroot/ngax/scripts/services/ServerStatus.js b/Duplicati/Server/webroot/ngax/scripts/services/ServerStatus.js index b8dc85fbf..e4dd3946e 100644 --- a/Duplicati/Server/webroot/ngax/scripts/services/ServerStatus.js +++ b/Duplicati/Server/webroot/ngax/scripts/services/ServerStatus.js @@ -40,7 +40,7 @@ backupApp.service('ServerStatus', function ($rootScope, $timeout, AppService, Ap 'Backup_Finalize': gettextCatalog.getString('Completing backup …'), 'Backup_WaitForUpload': gettextCatalog.getString('Waiting for upload to finish …'), 'Backup_Delete': gettextCatalog.getString('Deleting unwanted files …'), - 'Backup_Compact': gettextCatalog.getString('Compacting remote data ...'), + 'Backup_Compact': gettextCatalog.getString('Compacting remote data …'), 'Backup_VerificationUpload': gettextCatalog.getString('Uploading verification file …'), 'Backup_PostBackupVerify': gettextCatalog.getString('Verifying backend data …'), 'Backup_Complete': gettextCatalog.getString('Backup complete!'), diff --git a/Duplicati/Server/webroot/ngax/templates/captcha.html b/Duplicati/Server/webroot/ngax/templates/captcha.html index 7effca3b1..dbac3932c 100644 --- a/Duplicati/Server/webroot/ngax/templates/captcha.html +++ b/Duplicati/Server/webroot/ngax/templates/captcha.html @@ -7,9 +7,9 @@
-
Checking ...
+
Checking …
Incorrect answer, try again
-
Loading ...
+
Loading …
diff --git a/Duplicati/Server/webroot/ngax/templates/commandline.html b/Duplicati/Server/webroot/ngax/templates/commandline.html index 1de63d8e1..1b863aff2 100644 --- a/Duplicati/Server/webroot/ngax/templates/commandline.html +++ b/Duplicati/Server/webroot/ngax/templates/commandline.html @@ -49,13 +49,13 @@ {{'Server is currently paused,' | translate}} resume now
- Connecting to task .... + Connecting to task …
- Waiting for task to start .... + Waiting for task to start …
- Running .... stop now + Running … stop now
Finished! diff --git a/Duplicati/Server/webroot/ngax/templates/delete.html b/Duplicati/Server/webroot/ngax/templates/delete.html index 60a66329e..b500b825e 100644 --- a/Duplicati/Server/webroot/ngax/templates/delete.html +++ b/Duplicati/Server/webroot/ngax/templates/delete.html @@ -37,7 +37,7 @@

Delete remote files

-
Loading remote storage usage ...
+
Loading remote storage usage …
Delete {{filecount}} files ({{filesize}}) from the remote storage?
diff --git a/Duplicati/Server/webroot/ngax/templates/restore.html b/Duplicati/Server/webroot/ngax/templates/restore.html index fa9bf70bf..cde69382b 100644 --- a/Duplicati/Server/webroot/ngax/templates/restore.html +++ b/Duplicati/Server/webroot/ngax/templates/restore.html @@ -56,7 +56,7 @@ - Busy ... + Busy … Search
diff --git a/Duplicati/Server/webroot/ngax/templates/restorewizard.html b/Duplicati/Server/webroot/ngax/templates/restorewizard.html index 21c795378..45ca51d6d 100644 --- a/Duplicati/Server/webroot/ngax/templates/restorewizard.html +++ b/Duplicati/Server/webroot/ngax/templates/restorewizard.html @@ -6,13 +6,13 @@
  • - +
    Point to your backup files and restore from there
  • - +
    Load destination from an exported job or a storage provider
  • From 4b432f160f4a17c381779d5cb5848081b1198281 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 22:35:09 -0400 Subject: [PATCH 35/44] Change api to API --- Duplicati/Server/webroot/ngax/templates/backends/openstack.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Server/webroot/ngax/templates/backends/openstack.html b/Duplicati/Server/webroot/ngax/templates/backends/openstack.html index b4062703f..405ef1894 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/openstack.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/openstack.html @@ -42,7 +42,7 @@
    - +
    From 556f1ee9588cc157e0a6126278d125e81268a3c3 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 22:48:49 -0400 Subject: [PATCH 36/44] Change eg. to e.g. --- Duplicati/CommandLine/RecoveryTool/Recompress.cs | 3 +-- Duplicati/CommandLine/RecoveryTool/help.txt | 4 ++-- Duplicati/Library/Backend/AliyunOSS/AliyunOSSOptions.cs | 2 +- .../Library/Backend/AlternativeFTP/AlternativeFTPBackend.cs | 2 +- Duplicati/Library/Backend/File/Strings.cs | 2 +- Duplicati/Library/Backend/SSHv2/Strings.cs | 2 +- Duplicati/Library/Common/IO/VssBackupComponents.cs | 4 ++-- Duplicati/Library/Interface/IBackend.cs | 2 +- Duplicati/Library/Logging/Log.cs | 2 +- Duplicati/Library/Modules/Builtin/Strings.cs | 2 +- Duplicati/Library/Snapshots/UsnJournalService.cs | 4 ++-- .../Library/Snapshots/lvm-scripts/create-lvm-snapshot.sh | 2 +- Duplicati/Library/Utility/Utility.cs | 2 +- Duplicati/Server/webroot/ngax/scripts/services/AppUtils.js | 2 +- .../Server/webroot/ngax/templates/backends/rclone.html | 6 +++--- Duplicati/Server/webroot/ngax/templates/commandline.html | 2 +- 16 files changed, 21 insertions(+), 22 deletions(-) diff --git a/Duplicati/CommandLine/RecoveryTool/Recompress.cs b/Duplicati/CommandLine/RecoveryTool/Recompress.cs index 3af041237..548b24eb7 100644 --- a/Duplicati/CommandLine/RecoveryTool/Recompress.cs +++ b/Duplicati/CommandLine/RecoveryTool/Recompress.cs @@ -199,7 +199,7 @@ namespace Duplicati.CommandLine.RecoveryTool { Console.Write(" recompressing ..."); - //Recompressing from eg. zip to zip + //Recompressing from e.g. zip to zip if (localFileSource == localFileTarget) { File.Move(localFileSource, localFileSource + ".same"); @@ -322,4 +322,3 @@ namespace Duplicati.CommandLine.RecoveryTool } } } - diff --git a/Duplicati/CommandLine/RecoveryTool/help.txt b/Duplicati/CommandLine/RecoveryTool/help.txt index 4099a32dc..ae4a7fb66 100644 --- a/Duplicati/CommandLine/RecoveryTool/help.txt +++ b/Duplicati/CommandLine/RecoveryTool/help.txt @@ -25,7 +25,7 @@ Optionally you can also run: Shows what files are available and tests filters 5: Recompress - Ability to change compression type of files on remote backend eg. from 7z to zip + Ability to change compression type of files on remote backend e.g. from 7z to zip @@ -107,4 +107,4 @@ To see what options a specific backend supports, type: %CLI_EXE% help The environment variables AUTH_USERNAME and AUTH_PASSWORD are supported. -The options --parameters-file and --tempdir are supported. \ No newline at end of file +The options --parameters-file and --tempdir are supported. diff --git a/Duplicati/Library/Backend/AliyunOSS/AliyunOSSOptions.cs b/Duplicati/Library/Backend/AliyunOSS/AliyunOSSOptions.cs index 6fef28f58..97dc0b352 100644 --- a/Duplicati/Library/Backend/AliyunOSS/AliyunOSSOptions.cs +++ b/Duplicati/Library/Backend/AliyunOSS/AliyunOSSOptions.cs @@ -35,7 +35,7 @@ /// Endpoint represents the access domain name for OSS external services. /// Endpoint 表示OSS对外服务的访问域名。 /// https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints#concept-zt4-cvy-5db - /// eg. + /// e.g. /// oss-cn-guangzhou.aliyuncs.com /// oss-cn-hongkong.aliyuncs.com /// oss-us-west-1.aliyuncs.com diff --git a/Duplicati/Library/Backend/AlternativeFTP/AlternativeFTPBackend.cs b/Duplicati/Library/Backend/AlternativeFTP/AlternativeFTPBackend.cs index 9c605f1b7..7e5a89c92 100644 --- a/Duplicati/Library/Backend/AlternativeFTP/AlternativeFTPBackend.cs +++ b/Duplicati/Library/Backend/AlternativeFTP/AlternativeFTPBackend.cs @@ -86,7 +86,7 @@ namespace Duplicati.Library.Backend.AlternativeFTP } /// - /// The protocol key, eg. ftp, http or ssh + /// The protocol key, e.g. ftp, http or ssh /// public string ProtocolKey { diff --git a/Duplicati/Library/Backend/File/Strings.cs b/Duplicati/Library/Backend/File/Strings.cs index dbd1f4d6a..ed2eed2d6 100644 --- a/Duplicati/Library/Backend/File/Strings.cs +++ b/Duplicati/Library/Backend/File/Strings.cs @@ -25,7 +25,7 @@ namespace Duplicati.Library.Backend.Strings { public static string AlternateDestinationMarkerShort { get { return LC.L(@"Look for a file in the destination folder"); } } public static string AlternateTargetPathsLong(string optionname, char pathseparator) { return LC.L(@"This option allows multiple targets to be specified. The primary target path is placed before the list of paths supplied with this option. Before starting the backup, each folder in the list is checked for existence and optionally the presence of the marker file supplied by --{0}. The first existing path that optionally contains the marker file is then used as the destination. Multiple destinations are separated with a ""{1}"". On Windows, the path may be a UNC path, and the drive letter may be substituted with an asterisk (*), e.g: ""*:\backup"", which will examine all drive letters. If a username and password is supplied, the same credentials are used for all destinations.", optionname, pathseparator); } public static string AlternateTargetPathsShort { get { return LC.L(@"A list of secondary target paths"); } } - public static string Description { get { return LC.L(@"This backend can read and write data to an file based backend. Allowed formats are ""file://hostname/folder"" or ""file://username:password@hostname/folder"". You may supply UNC paths (eg: ""file://\\server\folder"") or local paths (eg: (win) ""file://c:\folder"", (linux) ""file:///usr/pub/files"")"); } } + public static string Description { get { return LC.L(@"This backend can read and write data to an file based backend. Allowed formats are ""file://hostname/folder"" or ""file://username:password@hostname/folder"". You may supply UNC paths (e.g.: ""file://\\server\folder"") or local paths (e.g.: (win) ""file://c:\folder"", (linux) ""file:///usr/pub/files"")"); } } public static string DescriptionAuthPasswordLong { get { return LC.L(@"The password used to connect to the server. This may also be supplied as the environment variable ""AUTH_PASSWORD""."); } } public static string DescriptionAuthPasswordShort { get { return LC.L(@"Supplies the password used to connect to the server"); } } public static string DescriptionAuthUsernameLong { get { return LC.L(@"The username used to connect to the server. This may also be supplied as the environment variable ""AUTH_USERNAME""."); } } diff --git a/Duplicati/Library/Backend/SSHv2/Strings.cs b/Duplicati/Library/Backend/SSHv2/Strings.cs index 8ef2a75ce..df31f64d9 100644 --- a/Duplicati/Library/Backend/SSHv2/Strings.cs +++ b/Duplicati/Library/Backend/SSHv2/Strings.cs @@ -48,7 +48,7 @@ namespace Duplicati.Library.Backend.Strings public static string DescriptionAuthPasswordShort { get { return LC.L(@"Supplies the password used to connect to the server"); } } public static string DescriptionAuthUsernameLong { get { return LC.L(@"The username used to connect to the server. This may also be supplied as the environment variable ""AUTH_USERNAME""."); } } public static string DescriptionAuthUsernameShort { get { return LC.L(@"Supplies the username used to connect to the server"); } } - public static string DescriptionFingerprintLong { get { return LC.L(@"The server fingerprint used for validation of server identity. Format is eg. ""ssh-rsa 4096 11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66""."); } } + public static string DescriptionFingerprintLong { get { return LC.L(@"The server fingerprint used for validation of server identity. Format is e.g. ""ssh-rsa 4096 11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66""."); } } public static string DescriptionFingerprintShort { get { return LC.L(@"Supplies server fingerprint used for validation of server identity"); } } public static string DescriptionAnyFingerprintLong { get { return LC.L(@"To guard against man-in-the-middle attacks, the server fingerprint is verified on connection. Use this option to disable host-key fingerprint verification. You should only use this option for testing."); } } public static string DescriptionAnyFingerprintShort { get { return LC.L(@"Disables fingerprint validation"); } } diff --git a/Duplicati/Library/Common/IO/VssBackupComponents.cs b/Duplicati/Library/Common/IO/VssBackupComponents.cs index 212e22d6a..4cea777bf 100644 --- a/Duplicati/Library/Common/IO/VssBackupComponents.cs +++ b/Duplicati/Library/Common/IO/VssBackupComponents.cs @@ -48,13 +48,13 @@ namespace Duplicati.Library.Common.IO private IVssBackupComponents _vssBackupComponents; /// - /// The list of snapshot ids for each volume, key is the path root, eg C:\. + /// The list of snapshot ids for each volume, key is the path root, e.g. C:\. /// The dictionary is case insensitive /// private Dictionary _volumes; /// - /// The mapping of snapshot sources to their snapshot entries , key is the path root, eg C:\. + /// The mapping of snapshot sources to their snapshot entries , key is the path root, e.g. C:\. /// The dictionary is case insensitive /// private Dictionary _volumeMap; diff --git a/Duplicati/Library/Interface/IBackend.cs b/Duplicati/Library/Interface/IBackend.cs index 24476f78a..038ed2355 100644 --- a/Duplicati/Library/Interface/IBackend.cs +++ b/Duplicati/Library/Interface/IBackend.cs @@ -44,7 +44,7 @@ namespace Duplicati.Library.Interface string DisplayName { get; } /// - /// The protocol key, eg. ftp, http or ssh + /// The protocol key, e.g. ftp, http or ssh /// string ProtocolKey { get; } diff --git a/Duplicati/Library/Logging/Log.cs b/Duplicati/Library/Logging/Log.cs index 5ea96442d..eb1621381 100644 --- a/Duplicati/Library/Logging/Log.cs +++ b/Duplicati/Library/Logging/Log.cs @@ -451,7 +451,7 @@ namespace Duplicati.Library.Logging LogScope sc; if (!m_log_instances.TryGetValue(cur, out sc)) - throw new Exception("Unable to find log in lookup table, this may be caused by attempting to transport call contexts between AppDomains (eg. with remoting calls)"); + throw new Exception("Unable to find log in lookup table, this may be caused by attempting to transport call contexts between AppDomains (e.g. with remoting calls)"); return sc; } diff --git a/Duplicati/Library/Modules/Builtin/Strings.cs b/Duplicati/Library/Modules/Builtin/Strings.cs index 309de3340..985da2249 100644 --- a/Duplicati/Library/Modules/Builtin/Strings.cs +++ b/Duplicati/Library/Modules/Builtin/Strings.cs @@ -46,7 +46,7 @@ namespace Duplicati.Library.Modules.Builtin.Strings public static string Description { get { return LC.L(@"This module exposes a number of properties that can be used to change the way http requests are issued"); } } public static string DescriptionAcceptAnyCertificateLong { get { return LC.L(@"Use this option to accept any server certificate, regardless of what errors it may have. Please use --accept-specified-ssl-hash instead, whenever possible."); } } public static string DescriptionAcceptAnyCertificateShort { get { return LC.L(@"Accept any server certificate"); } } - public static string DescriptionAcceptHashLong2 { get { return LC.L(@"If your server certificate is reported as invalid (eg. with self-signed certificates), you can supply the certificate hash (SHA1) to approve it anyway. The hash value must be entered in hex format without spaces or colons. You can enter multiple hashes separated by commas."); } } + public static string DescriptionAcceptHashLong2 { get { return LC.L(@"If your server certificate is reported as invalid (e.g. with self-signed certificates), you can supply the certificate hash (SHA1) to approve it anyway. The hash value must be entered in hex format without spaces or colons. You can enter multiple hashes separated by commas."); } } public static string DescriptionAcceptHashShort { get { return LC.L(@"Optionally accept a known SSL certificate"); } } public static string DisableExpect100Long { get { return LC.L(@"The default HTTP request has the header ""Expect: 100-Continue"" attached, which allows some optimizations when authenticating, but also breaks some web servers, causing them to report ""417 - Expectation failed"""); } } public static string DisableExpect100Short { get { return LC.L(@"Disable the expect header"); } } diff --git a/Duplicati/Library/Snapshots/UsnJournalService.cs b/Duplicati/Library/Snapshots/UsnJournalService.cs index d94553ed1..83e91ddad 100644 --- a/Duplicati/Library/Snapshots/UsnJournalService.cs +++ b/Duplicati/Library/Snapshots/UsnJournalService.cs @@ -172,7 +172,7 @@ namespace Duplicati.Library.Snapshots // With this, we need still need to do the following: // // 1. Simplify the folder list, such that it only contains the parent-most entries - // (eg. { "C:\A\B\", "C:\A\B\C\", "C:\A\B\D\E\" } => { "C:\A\B\" } + // (e.g. { "C:\A\B\", "C:\A\B\C\", "C:\A\B\D\E\" } => { "C:\A\B\" } volumeData.Folders = Utility.Utility.SimplifyFolderList(changedFolders).ToList(); // 2. Our list of files may contain entries inside one of the simplified folders (from step 1., above). @@ -187,7 +187,7 @@ namespace Duplicati.Library.Snapshots } catch (Exception e) { - // full scan is required this time (eg. due to missing journal entries) + // full scan is required this time (e.g. due to missing journal entries) volumeData.Exception = e; volumeData.IsFullScan = true; volumeData.Folders = new List(); diff --git a/Duplicati/Library/Snapshots/lvm-scripts/create-lvm-snapshot.sh b/Duplicati/Library/Snapshots/lvm-scripts/create-lvm-snapshot.sh index 693d9fc81..efd00fe45 100755 --- a/Duplicati/Library/Snapshots/lvm-scripts/create-lvm-snapshot.sh +++ b/Duplicati/Library/Snapshots/lvm-scripts/create-lvm-snapshot.sh @@ -5,7 +5,7 @@ # Input is always: # $1 = name of the snapshot, a random name with no spaces or non-printable chars, usually something like "duplicati-0102030011234567" # $2 = name of the device to create the snapshot for, this is the output of find-volume.sh, and usually a LVM id like "vg_name/lv_name" -# $3 = the full path to the temporary folder used by the application, suffixed with a /, eg "/tmp/" +# $3 = the full path to the temporary folder used by the application, suffixed with a /, e.g. "/tmp/" # # The script MUST output a line with tmpdir="", where dir is the temporary mounted directory # This ensures that the script can override the settings to better fit the distro, diff --git a/Duplicati/Library/Utility/Utility.cs b/Duplicati/Library/Utility/Utility.cs index 1047a40bb..94d158f18 100644 --- a/Duplicati/Library/Utility/Utility.cs +++ b/Duplicati/Library/Utility/Utility.cs @@ -674,7 +674,7 @@ namespace Duplicati.Library.Utility } /// - /// Formats a size into a human readable format, eg. 2048 becomes "2 KB" or -2283 becomes "-2.23 KB%quot. + /// Formats a size into a human readable format, e.g. 2048 becomes "2 KB" or -2283 becomes "-2.23 KB%quot. /// /// The size to format /// A human readable string representing the size diff --git a/Duplicati/Server/webroot/ngax/scripts/services/AppUtils.js b/Duplicati/Server/webroot/ngax/scripts/services/AppUtils.js index 02e8f614a..748ba155f 100644 --- a/Duplicati/Server/webroot/ngax/scripts/services/AppUtils.js +++ b/Duplicati/Server/webroot/ngax/scripts/services/AppUtils.js @@ -119,7 +119,7 @@ backupApp.service('AppUtils', function($rootScope, $timeout, $cookies, AppServic ]; - apputils.exampleOptionString = gettextCatalog.getString('Enter one option per line in command-line format, eg. {0}'); + apputils.exampleOptionString = gettextCatalog.getString('Enter one option per line in command-line format, e.g. {0}'); apputils.filterClasses = [{ name: gettextCatalog.getString('Exclude directories whose names contain'), diff --git a/Duplicati/Server/webroot/ngax/templates/backends/rclone.html b/Duplicati/Server/webroot/ngax/templates/backends/rclone.html index 3ce2c15d2..52f7c940c 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/rclone.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/rclone.html @@ -1,13 +1,13 @@
    - +
    - +
    - +
    Make sure that rclone is in your path, or add the location to rclone via the advanced options.
    diff --git a/Duplicati/Server/webroot/ngax/templates/commandline.html b/Duplicati/Server/webroot/ngax/templates/commandline.html index 1de63d8e1..b4a1efd06 100644 --- a/Duplicati/Server/webroot/ngax/templates/commandline.html +++ b/Duplicati/Server/webroot/ngax/templates/commandline.html @@ -26,7 +26,7 @@
    From a0e069c59f8df86340f3905a364d2cc2ca9f86a8 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sat, 27 Jul 2024 23:02:40 -0400 Subject: [PATCH 37/44] Remove a redundant word from a string on TencentCOS/Strings.cs --- Duplicati/Library/Backend/TencentCOS/Strings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Library/Backend/TencentCOS/Strings.cs b/Duplicati/Library/Backend/TencentCOS/Strings.cs index 9ec452002..9de2900ce 100644 --- a/Duplicati/Library/Backend/TencentCOS/Strings.cs +++ b/Duplicati/Library/Backend/TencentCOS/Strings.cs @@ -34,7 +34,7 @@ namespace Duplicati.Library.Backend.Strings public static string COSAPISecretKeyDescriptionShort { get { return LC.L(@"Secret Key"); } } public static string COSBucketDescriptionLong { get { return LC.L(@"Bucket, format: BucketName-APPID"); } } public static string COSBucketDescriptionShort { get { return LC.L(@"Bucket"); } } - public static string COSLocationDescriptionLong { get { return LC.L(@"Region (Region) is the distribution area of ​​the Tencent cloud hosting machine room, the object storage COS data is stored in the storage buckets of these regions. https://intl.cloud.tencent.com/document/product/436/6224"); } } + public static string COSLocationDescriptionLong { get { return LC.L(@"Region is the distribution area of ​​the Tencent cloud hosting machine room, the object storage COS data is stored in the storage buckets of these regions. https://intl.cloud.tencent.com/document/product/436/6224"); } } public static string COSLocationDescriptionShort { get { return LC.L(@"Specifies COS location constraints"); } } public static string COSStorageClassDescriptionLong { get { return LC.L(@"Storage class of the object; check enumerated values at https://intl.cloud.tencent.com/document/product/436/30925"); } } public static string COSStorageClassDescriptionShort { get { return LC.L(@"Storage class of the object"); } } From d27d26e0d0396627c7138ddd77bdbeb3bab83cd0 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sun, 28 Jul 2024 02:08:50 -0400 Subject: [PATCH 38/44] Remove 'Enter' from the input areas on html files for backends --- Duplicati/Server/webroot/ngax/templates/backends/azure.html | 6 +++--- Duplicati/Server/webroot/ngax/templates/backends/file.html | 2 +- .../Server/webroot/ngax/templates/backends/generic.html | 2 +- .../Server/webroot/ngax/templates/backends/idrive.html | 2 +- .../Server/webroot/ngax/templates/backends/jottacloud.html | 2 +- Duplicati/Server/webroot/ngax/templates/backends/mega.html | 2 +- .../Server/webroot/ngax/templates/backends/msgroup.html | 4 ++-- Duplicati/Server/webroot/ngax/templates/backends/oauth.html | 2 +- .../Server/webroot/ngax/templates/backends/sharepoint.html | 4 ++-- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Duplicati/Server/webroot/ngax/templates/backends/azure.html b/Duplicati/Server/webroot/ngax/templates/backends/azure.html index 18dcdcad3..f3995daf6 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/azure.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/azure.html @@ -1,13 +1,13 @@
    - +
    - +
    - +
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/file.html b/Duplicati/Server/webroot/ngax/templates/backends/file.html index 985d232ae..d1ebc39d6 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/file.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/file.html @@ -4,7 +4,7 @@
    - + Browse
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/generic.html b/Duplicati/Server/webroot/ngax/templates/backends/generic.html index c0bd64cac..79bd5c597 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/generic.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/generic.html @@ -11,7 +11,7 @@
    - +
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/idrive.html b/Duplicati/Server/webroot/ngax/templates/backends/idrive.html index 1a5973341..812a246cb 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/idrive.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/idrive.html @@ -1,6 +1,6 @@
    - +
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/jottacloud.html b/Duplicati/Server/webroot/ngax/templates/backends/jottacloud.html index dcff7dab5..aeb173f28 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/jottacloud.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/jottacloud.html @@ -1,6 +1,6 @@
    - +
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/mega.html b/Duplicati/Server/webroot/ngax/templates/backends/mega.html index 1d813c8da..08b783c9e 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/mega.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/mega.html @@ -1,6 +1,6 @@
    - +
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/msgroup.html b/Duplicati/Server/webroot/ngax/templates/backends/msgroup.html index 8be273d22..b72c31651 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/msgroup.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/msgroup.html @@ -1,11 +1,11 @@
    - +
    - +
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/oauth.html b/Duplicati/Server/webroot/ngax/templates/backends/oauth.html index 8b04b97ec..5e8fd4946 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/oauth.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/oauth.html @@ -1,6 +1,6 @@
    - +
    diff --git a/Duplicati/Server/webroot/ngax/templates/backends/sharepoint.html b/Duplicati/Server/webroot/ngax/templates/backends/sharepoint.html index 4749d72f1..8d6b2c864 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/sharepoint.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/sharepoint.html @@ -1,6 +1,6 @@
    - +
    @@ -9,4 +9,4 @@ AuthID -
    \ No newline at end of file +
    From 2326e1b3f42253990d5fe7042eccab90a907349c Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sun, 28 Jul 2024 02:10:16 -0400 Subject: [PATCH 39/44] Remove 'Set the' from backends/sia.html --- Duplicati/Server/webroot/ngax/templates/backends/sia.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Server/webroot/ngax/templates/backends/sia.html b/Duplicati/Server/webroot/ngax/templates/backends/sia.html index b00d16da7..78a45e74f 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/sia.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/sia.html @@ -4,7 +4,7 @@
    - +
    From c9bf0deeb167617e56d9ebad128501b9c4fa9353 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sun, 28 Jul 2024 02:13:15 -0400 Subject: [PATCH 40/44] Remove 'The' from backends/storj.html --- .../webroot/ngax/templates/backends/storj.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Duplicati/Server/webroot/ngax/templates/backends/storj.html b/Duplicati/Server/webroot/ngax/templates/backends/storj.html index ef84d9757..22c2510f6 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/storj.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/storj.html @@ -19,25 +19,25 @@
    - +
    - +
    - +
    - +
    - +
    - +
    From 2481df4d9613eb2d4710fd9dea5dcaa533c3c223 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sun, 28 Jul 2024 02:17:35 -0400 Subject: [PATCH 41/44] Fix capitalization on openstack.html --- .../Server/webroot/ngax/templates/backends/openstack.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Duplicati/Server/webroot/ngax/templates/backends/openstack.html b/Duplicati/Server/webroot/ngax/templates/backends/openstack.html index b4062703f..2ec3f3b94 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/openstack.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/openstack.html @@ -23,7 +23,7 @@
    - +
    @@ -36,12 +36,12 @@
    - +
    - +
    From c6aa9ce5e802f17fe2c2f93e9b4f272292d058cb Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sun, 28 Jul 2024 02:26:00 -0400 Subject: [PATCH 42/44] Fix capitalization on azure.html --- Duplicati/Server/webroot/ngax/templates/backends/azure.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Duplicati/Server/webroot/ngax/templates/backends/azure.html b/Duplicati/Server/webroot/ngax/templates/backends/azure.html index f3995daf6..8d10a1218 100644 --- a/Duplicati/Server/webroot/ngax/templates/backends/azure.html +++ b/Duplicati/Server/webroot/ngax/templates/backends/azure.html @@ -8,6 +8,6 @@
    - +
    From eeb092bf3d73f3ffccc3dbbb3d415ab5085b2011 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sun, 28 Jul 2024 11:15:30 -0400 Subject: [PATCH 43/44] Remove class CheckMonoSSL --- Duplicati/Library/Modules/Builtin/Strings.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Duplicati/Library/Modules/Builtin/Strings.cs b/Duplicati/Library/Modules/Builtin/Strings.cs index 309de3340..2ebd7d13a 100644 --- a/Duplicati/Library/Modules/Builtin/Strings.cs +++ b/Duplicati/Library/Modules/Builtin/Strings.cs @@ -35,12 +35,6 @@ namespace Duplicati.Library.Modules.Builtin.Strings public static string ForcepassphrasefromstdinShort { get { return LC.L(@"Read passphrase from STDIN"); } } public static string ForcepassphrasefromstdinLong { get { return LC.L(@"By default, the passphrase is attempted read from the TTY device directly, increasing the security by not copying the passphrase into a stream. In some setups, such as when running detached from a console, this does not work. Set this flag to prevent trying a TTY read and only read the passphrase from STDIN."); } } } - internal static class CheckMonoSSL - { - public static string Description { get { return LC.L(@"When running with Mono, this module will check if any certificates are installed and suggest installing them otherwise"); } } - public static string Displayname { get { return LC.L(@"Check for SSL certificates"); } } - public static string ErrorMessage { get { return LC.L(@"No certificates found, you can install some with one of these commands:{0} cert-sync /etc/ssl/certs/ca-certificates.crt #for Debian based systems{0} cert-sync /etc/pki/tls/certs/ca-bundle.crt #for RedHat derivatives{0} curl -LO https://curl.se/ca/cacert.pem; cert-sync --user cacert.pem; rm cacert.pem #for MacOS{0}Read more: {1}", Environment.NewLine, "http://www.mono-project.com/docs/about-mono/releases/3.12.0/#cert-sync"); } } - } internal static class HttpOptions { public static string Description { get { return LC.L(@"This module exposes a number of properties that can be used to change the way http requests are issued"); } } From 1a2de59a56c6d15bf5f6fc9604ae216327e8d7f0 Mon Sep 17 00:00:00 2001 From: Suguru Hirahara Date: Sun, 28 Jul 2024 23:43:20 -0400 Subject: [PATCH 44/44] Remove MonoHelpSSL as well --- Duplicati/Library/Utility/SslCertificateValidator.cs | 2 +- Duplicati/Library/Utility/Strings.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Duplicati/Library/Utility/SslCertificateValidator.cs b/Duplicati/Library/Utility/SslCertificateValidator.cs index 2f113ef7f..f1245d699 100644 --- a/Duplicati/Library/Utility/SslCertificateValidator.cs +++ b/Duplicati/Library/Utility/SslCertificateValidator.cs @@ -38,7 +38,7 @@ namespace Duplicati.Library.Utility public SslPolicyErrors SslError { get { return m_errors; } } public InvalidCertificateException(string certificate, SslPolicyErrors error) - : base(Strings.SslCertificateValidator.VerifyCertificateException(error, certificate) + (!OperatingSystem.IsWindows() ? Strings.SslCertificateValidator.MonoHelpSSL : "")) + : base(Strings.SslCertificateValidator.VerifyCertificateException(error, certificate)) { m_certificate = certificate; m_errors = error; diff --git a/Duplicati/Library/Utility/Strings.cs b/Duplicati/Library/Utility/Strings.cs index 8f57b8a5e..899f81a04 100644 --- a/Duplicati/Library/Utility/Strings.cs +++ b/Duplicati/Library/Utility/Strings.cs @@ -28,7 +28,6 @@ namespace Duplicati.Library.Utility.Strings { } internal static class SslCertificateValidator { public static string InvalidCallSequence { get { return LC.L(@"The SSL certificate validator was called in an incorrect order"); } } - public static string MonoHelpSSL { get { return LC.L(@"{0}You may want to import a set of trusted certificates into the Mono certificate store.{0}Use the command:{0} cert-sync /etc/ssl/certs/ca-certificates.crt #for Debian based systems{0} cert-sync /etc/pki/tls/certs/ca-bundle.crt #for RedHat derivatives{0}Read more: {1}", Environment.NewLine, "http://www.mono-project.com/docs/about-mono/releases/3.12.0/#cert-sync"); } } public static string VerifyCertificateException(System.Net.Security.SslPolicyErrors error, string hash) { return LC.L(@"The server certificate had the error {0} and the hash {1}{2}If you trust this certificate, use the commandline option --accept-specified-ssl-hash={1} to accept the server certificate anyway.{2}You can also attempt to import the server certificate into your operating systems trust pool.", error, hash, Environment.NewLine); } public static string VerifyCertificateHashError(System.Exception exception, System.Net.Security.SslPolicyErrors error) { return LC.L(@"Failed while validating certificate hash, error message: {0}, SSL error name: {1}", exception, error); } }