Merge branch 'master' into e2
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"; } }
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 <backend>
|
||||
|
||||
The environment variables AUTH_USERNAME and AUTH_PASSWORD are supported.
|
||||
The options --parameters-file and --tempdir are supported.
|
||||
The options --parameters-file and --tempdir are supported.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 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 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(@"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"); } }
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Duplicati.Library.Backend.AlternativeFTP
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The protocol key, eg. ftp, http or ssh
|
||||
/// The protocol key, e.g. ftp, http or ssh
|
||||
/// </summary>
|
||||
public string ProtocolKey
|
||||
{
|
||||
|
||||
@@ -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"); } }
|
||||
|
||||
@@ -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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,11 +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 DisplayName { get { return LC.L(@"FTP"); } }
|
||||
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<string> 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."); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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""."); } }
|
||||
@@ -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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,28 +28,25 @@ 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); }
|
||||
public static string LocationDescriptionShort { get { return LC.L(@"Specifies location option for creating a bucket"); } }
|
||||
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 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 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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,17 +21,17 @@
|
||||
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"""); } }
|
||||
|
||||
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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"""); } }
|
||||
|
||||
@@ -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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,33 +23,33 @@ 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 FragmentRetryCountShort { get { return LC.L(@"Number of retries for each fragment"); } }
|
||||
public static string FragmentSizeShort { get { return LC.L(@"Fragment size for large uploads"); } }
|
||||
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 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 UseHttpClientShort { get { return LC.L(@"Whether the HttpClient class should be used"); } }
|
||||
public static string FragmentRetryDelayShort { get { return LC.L(@"Millisecond delay between fragment errors"); } }
|
||||
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
|
||||
{
|
||||
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,10 +58,10 @@ 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 GroupEmailShort { get { return LC.L(@"Email address of the group"); } }
|
||||
public static string GroupIdShort { get { return LC.L(@"ID 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); }
|
||||
|
||||
@@ -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 RcloneRemoteRepoShort { get { return LC.L(@"Remote repository"); } }
|
||||
public static string RcloneRemotePathLong { get { return LC.L(@"Path on the Remote repository."); } }
|
||||
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 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"); } }
|
||||
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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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"); } }
|
||||
@@ -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 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 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)"); } }
|
||||
|
||||
@@ -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
|
||||
{
|
||||
@@ -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"); } }
|
||||
|
||||
@@ -24,22 +24,22 @@ 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 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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace Duplicati.Library.Backend.TencentCOS
|
||||
/// </summary>
|
||||
public string Appid { get; set; }
|
||||
/// <summary>
|
||||
/// Cloud API Secret Id
|
||||
/// Cloud API Secret ID
|
||||
/// </summary>
|
||||
public string SecretId { get; set; }
|
||||
/// <summary>
|
||||
|
||||
@@ -28,13 +28,13 @@ 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"); } }
|
||||
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"); } }
|
||||
|
||||
@@ -48,13 +48,13 @@ namespace Duplicati.Library.Common.IO
|
||||
private IVssBackupComponents _vssBackupComponents;
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// </summary>
|
||||
private Dictionary<string, Guid> _volumes;
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// </summary>
|
||||
private Dictionary<string, string> _volumeMap;
|
||||
|
||||
@@ -26,9 +26,9 @@ 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 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 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 DisplayName { get { return LC.L(@"Zip compression"); } }
|
||||
public static string FileNotFoundError(string filename) { return LC.L(@"File not found: {0}", filename); }
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Duplicati.Library.Interface
|
||||
string DisplayName { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The protocol key, eg. ftp, http or ssh
|
||||
/// The protocol key, e.g. ftp, http or ssh
|
||||
/// </summary>
|
||||
string ProtocolKey { get; }
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -32,37 +32,31 @@ 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."); } }
|
||||
}
|
||||
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"); } }
|
||||
public static string ForcepassphrasefromstdinShort { get { return LC.L(@"Read passphrase from STDIN"); } }
|
||||
}
|
||||
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"); } }
|
||||
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"); } }
|
||||
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 SslversionsShort { get { return LC.L(@"Sets allowed SSL versions"); } }
|
||||
public static string OauthurlShort { get { return LC.L(@"Alternate OAuth URL"); } }
|
||||
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 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 ReadwritetimeoutShort { get { return LC.L(@"Sets readwrite"); } }
|
||||
public static string OperationtimeoutShort { get { return LC.L(@"Sets the default operation timeout"); } }
|
||||
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 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"); } }
|
||||
}
|
||||
internal static class HyperVOptions
|
||||
{
|
||||
@@ -84,8 +78,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<string> 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 +87,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,9 +137,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 SendxmppmessageShort { get { return LC.L(@"The message template"); } }
|
||||
public static string SendxmpptoShort { get { return LC.L(@"XMPP recipient email"); } }
|
||||
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 +148,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 SendxmppusernameShort { get { return LC.L(@"The XMPP username"); } }
|
||||
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 SendxmpppasswordShort { get { return LC.L(@"The XMPP password"); } }
|
||||
public static string SendxmppusernameShort { get { return LC.L(@"The XMPP username"); } }
|
||||
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 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 SendxmppanyoperationShort { get { return LC.L(@"Send messages for all operations"); } }
|
||||
public static string SendxmpplevelShort { get { return LC.L(@"The messages to send"); } }
|
||||
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"); } }
|
||||
@@ -173,9 +167,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 SendhttpmessageShort { get { return LC.L(@"The message template"); } }
|
||||
public static string SendhttpurlShort { get { return LC.L(@"HTTP report url"); } }
|
||||
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,21 +178,22 @@ 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 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 SendhttpextraparametersShort { get { return LC.L(@"Extra parameters to add to the http message"); } }
|
||||
public static string SendhttpmessageparameternameShort { get { return LC.L(@"The name of the parameter to send the message as"); } }
|
||||
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 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 SendhttpanyoperationShort { get { return LC.L(@"Send messages for all operations"); } }
|
||||
public static string SendhttplevelShort { get { return LC.L(@"The messages to send"); } }
|
||||
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 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 SendhttpurlsformShort { get { return LC.L(@"HTTP report urls for sending form data"); } }
|
||||
public static string HttpverbShort { get { return LC.L(@"Sets the HTTP verb to use"); } }
|
||||
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 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"); } }
|
||||
}
|
||||
|
||||
internal static class ReportHelper
|
||||
@@ -207,11 +201,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 OptionmaxloglinesShort { get { return LC.L("Limits log lines"); } }
|
||||
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 ResultFormatShort { get { return LC.L(@"Selects the output format for results"); } }
|
||||
public static string OptionmaxloglinesShort { get { return LC.L("Limits log lines"); } }
|
||||
public static string ResultFormatLong(IEnumerable<string> 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"); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<string>();
|
||||
|
||||
@@ -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="<dir>", where dir is the temporary mounted directory
|
||||
# This ensures that the script can override the settings to better fit the distro,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); }
|
||||
}
|
||||
|
||||
@@ -674,7 +674,7 @@ namespace Duplicati.Library.Utility
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
/// <param name="size">The size to format</param>
|
||||
/// <returns>A human readable string representing the size</returns>
|
||||
|
||||
@@ -297,7 +297,7 @@
|
||||
If this problem persist open this page from the TrayIcon instead.
|
||||
</div>
|
||||
<div class="content" ng-show="state.connectionState != 'unauthorized' && state.connectionState != 'connecting'" translate translate-params-time="(state.connectionAttemptTimer + 1000) | timeremaining">
|
||||
The connection to the server is lost, attempting again in {{time}} ...
|
||||
The connection to the server is lost, attempting again in {{time}} …
|
||||
</div>
|
||||
<div class="content" translate ng-hide="state.connectionState != 'connecting'">
|
||||
Connecting to server …
|
||||
@@ -305,7 +305,7 @@
|
||||
<div class="content buttons">
|
||||
<a href ng-show="state.connectionState == 'unauthorized'" ng-click="reload()" class="button" translate>Reload</a>
|
||||
<a href ng-show="state.connectionState != 'unauthorized' && state.connectionState != 'connecting'" ng-click="doReconnect()" class="button" translate>Connect now</a>
|
||||
<a href ng-hide="state.connectionState != 'connecting'" class="button" style="cursor: default;" translate>Connecting...</a>
|
||||
<a href ng-hide="state.connectionState != 'connecting'" class="button" style="cursor: default;" translate>Connecting …</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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', {
|
||||
@@ -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('IDrive e2 Access Key Id')) &&
|
||||
EditUriBackendConfig.require_field(scope, 'Username', gettextCatalog.getString('IDrive e2 Access Key ID')) &&
|
||||
EditUriBackendConfig.require_field(scope, 'Password', gettextCatalog.getString('IDrive e2 Access Key Secret')) &&
|
||||
EditUriBackendConfig.require_field(scope, 'Server', gettextCatalog.getString('Bucket Name'));
|
||||
|
||||
|
||||
@@ -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!'),
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
<label for="oss_access_key_id" translate>OSS Access Key Id</label>
|
||||
<label for="oss_access_key_id" translate>OSS Access Key ID</label>
|
||||
<input type="text" name="oss_access_key_id" id="oss_access_key_id" ng-model="$parent.oss_access_key_id"
|
||||
placeholder="{{'OSS Access Key Id' | translate}}"/>
|
||||
placeholder="{{'OSS Access Key ID' | translate}}"/>
|
||||
</div>
|
||||
|
||||
<div class="input password">
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<div class="input text">
|
||||
<label for="azure_path" translate>Container name</label>
|
||||
<input type="text" name="azure_path" id="azure_path" ng-model="$parent.Path" placeholder="{{'Enter container name' | translate}}" />
|
||||
<input type="text" name="azure_path" id="azure_path" ng-model="$parent.Path" placeholder="{{'Container name' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
<label for="azure_username" translate>Account name</label>
|
||||
<input type="text" name="azure_username" id="azure_username" ng-model="$parent.Username" placeholder="{{'Enter account name' | translate}}" />
|
||||
<input type="text" name="azure_username" id="azure_username" ng-model="$parent.Username" placeholder="{{'Account name' | translate}}" />
|
||||
</div>
|
||||
<div class="input password">
|
||||
<label for="azure_password" translate>Access Key</label>
|
||||
<input autocomplete="new-password" type="password" name="azure_password" id="azure_password" ng-model="$parent.Password" placeholder="{{'Enter access key' | translate}}" />
|
||||
<label for="azure_password" translate>Access key</label>
|
||||
<input autocomplete="new-password" type="password" name="azure_password" id="azure_password" ng-model="$parent.Password" placeholder="{{'Access key' | translate}}" />
|
||||
</div>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<div class="input text">
|
||||
<label for="cos_app_id" translate>COS App Id</label>
|
||||
<label for="cos_app_id" translate>COS App ID</label>
|
||||
<input type="text" name="cos_app_id" id="cos_app_id" ng-model="$parent.cos_app_id"
|
||||
placeholder="{{'Tencent Cloud Account APPID' | translate}}"/>
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
<label for="cos_secret_id" translate>COS Secret Id</label>
|
||||
<label for="cos_secret_id" translate>COS Secret ID</label>
|
||||
<input type="text" name="cos_secret_id" id="cos_secret_id" ng-model="$parent.cos_secret_id"
|
||||
placeholder="{{'Cloud API Secret Id' | translate}}"/>
|
||||
placeholder="{{'Cloud API Secret ID' | translate}}"/>
|
||||
</div>
|
||||
|
||||
<div class="input password">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="input text">
|
||||
<label for="e2_access_key" translate>Access Key Id</label>
|
||||
<input type="text" name="e2_access_key" id="e2_access_key" ng-model="$parent.Username" placeholder="{{'IDrive e2 Access Key Id' | translate}}" />
|
||||
<label for="e2_access_key" translate>Access Key ID</label>
|
||||
<input type="text" name="e2_access_key" id="e2_access_key" ng-model="$parent.Username" placeholder="{{'IDrive e2 Access Key ID' | translate}}" />
|
||||
</div>
|
||||
<div class="input password">
|
||||
<label for="e2_access_secret" translate>Access Key Secret</label>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div ng-show="HideFolderBrowser" class="input text overlayButton multiple" style="max-width: none">
|
||||
<label for="file_path" translate>Folder path</label>
|
||||
<input type="text" name="file_path" id="file_path" ng-model="$parent.Path" placeholder="{{'Enter the destination path' | translate}}" />
|
||||
<input type="text" name="file_path" id="file_path" ng-model="$parent.Path" placeholder="{{'Destination path' | translate}}" />
|
||||
<a href id="file_targetFolderPathAdd" class="button" ng-click="HideFolderBrowser = false" translate>Browse</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
<div class="input text">
|
||||
<label for="generic_path" translate>Path on server</label>
|
||||
<input type="text" name="generic_path" id="generic_path" ng-model="$parent.Path" placeholder="{{'Enter the destination path' | translate}}" />
|
||||
<input type="text" name="generic_path" id="generic_path" ng-model="$parent.Path" placeholder="{{'Destination path' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="input text">
|
||||
<label for="idrive_path" translate>IDrive Sync directory path</label>
|
||||
<input type="text" name="idrive_path" id="idrive_path" ng-model="$parent.Path" placeholder="{{'Enter directory path' | translate}}" />
|
||||
<input type="text" name="idrive_path" id="idrive_path" ng-model="$parent.Path" placeholder="{{'Directory path' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="input text">
|
||||
<label for="jottacloud_path" translate>Folder path</label>
|
||||
<input type="text" name="jottacloud_path" id="jottacloud_path" ng-model="$parent.Path" placeholder="{{'Enter the destination path' | translate}}" />
|
||||
<input type="text" name="jottacloud_path" id="jottacloud_path" ng-model="$parent.Path" placeholder="{{'Destination path' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="input text">
|
||||
<label for="mega_path" translate>Folder path</label>
|
||||
<input type="text" name="mega_path" id="mega_path" ng-model="$parent.Path" placeholder="{{'Enter folder path name' | translate}}" />
|
||||
<input type="text" name="mega_path" id="mega_path" ng-model="$parent.Path" placeholder="{{'Folder path name' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<div class="input text">
|
||||
<label for="msgroup_group_email" translate>Group email</label>
|
||||
<input type="text" name="msgroup_group_email" id="msgroup_group_email" ng-model="$parent.msgroup_group_email" placeholder="{{'Enter the email address of the Office 365 group' | translate}}" />
|
||||
<input type="text" name="msgroup_group_email" id="msgroup_group_email" ng-model="$parent.msgroup_group_email" placeholder="{{'Email address of the Office 365 group' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
<label for="msgroup_path" translate>Path on server</label>
|
||||
<input type="text" name="msgroup_path" id="msgroup_path" ng-model="$parent.Path" placeholder="{{'Enter the destination path' | translate}}" />
|
||||
<input type="text" name="msgroup_path" id="msgroup_path" ng-model="$parent.Path" placeholder="{{'Destination path' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="input text">
|
||||
<label for="oauth_path" translate>Path on server</label>
|
||||
<input type="text" name="oauth_path" id="oauth_path" ng-model="$parent.Path" placeholder="{{'Enter the destination path' | translate}}" />
|
||||
<input type="text" name="oauth_path" id="oauth_path" ng-model="$parent.Path" placeholder="{{'Destination path' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
<label for="openstack_domainname" translate>Domain Name</label>
|
||||
<label for="openstack_domainname" translate>Domain name</label>
|
||||
<input type="text" name="openstack_domainname" id="openstack_domainname" ng-model="$parent.openstack_domainname" placeholder="{{'User domain name' | translate}}" />
|
||||
</div>
|
||||
<div class="input text">
|
||||
@@ -36,13 +36,13 @@
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
<label for="openstack_tenantname" translate>Tenant Name</label>
|
||||
<label for="openstack_tenantname" translate>Tenant name</label>
|
||||
<input type="text" name="openstack_tenantname" id="openstack_tenantname" ng-model="$parent.openstack_tenantname" placeholder="{{'Optional tenant name' | translate}}" title="{{'If you do not enter an API Key, the tenant name is required' | translate}}"/>
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
<label for="openstack_apikey" translate>API Key</label>
|
||||
<input type="text" name="openstack_apikey" id="openstack_apikey" ng-model="$parent.openstack_apikey" placeholder="{{'Optional api key' | translate}}" title="{{'Some OpenStack providers allow an API key instead of a password and tenant name' | translate}}" />
|
||||
<input type="text" name="openstack_apikey" id="openstack_apikey" ng-model="$parent.openstack_apikey" placeholder="{{'Optional API key' | translate}}" title="{{'Some OpenStack providers allow an API key instead of a password and tenant name' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<div class="input text">
|
||||
<label for="rclone_local_repository" translate>Local repository</label>
|
||||
<input type="text" name="rclone_local_repository" id="rclone_local_repository" ng-model="$parent.rclone_local_repository" placeholder="{{'local repository, eg local' | translate}}" />
|
||||
<input type="text" name="rclone_local_repository" id="rclone_local_repository" ng-model="$parent.rclone_local_repository" placeholder="{{'local repository, e.g. local' | translate}}" />
|
||||
</div>
|
||||
<div class="input text">
|
||||
<label for="rclone_remote_repository" translate>Remote repository</label>
|
||||
<input type="text" name="rclone_remote_repository" id="rclone_remote-repository" ng-model="$parent.Server" placeholder="{{'remote repository, eg. remote' | translate}}" />
|
||||
<input type="text" name="rclone_remote_repository" id="rclone_remote-repository" ng-model="$parent.Server" placeholder="{{'remote repository, e.g. remote' | translate}}" />
|
||||
</div>
|
||||
<div class="input text">
|
||||
<label for="rclone_remote_path" translate>Remote path</label>
|
||||
<input type="text" name="rclone_remote_path" id="rclone_remote_path" ng-model="$parent.Path" placeholder="{{'remote path, eg backup' | translate}}" />
|
||||
<input type="text" name="rclone_remote_path" id="rclone_remote_path" ng-model="$parent.Path" placeholder="{{'remote path, e.g. backup' | translate}}" />
|
||||
</div>
|
||||
<div translate>Make sure that rclone is in your path, or add the location to rclone via the advanced options.</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<div class="input text">
|
||||
<label for="sharepoint_path" translate>Destination path</label>
|
||||
<input type="text" name="sharepoint_path" id="sharepoint_path" ng-model="$parent.Path" placeholder="{{'Enter the full destination path, including the server name, but without https' | translate}}" />
|
||||
<input type="text" name="sharepoint_path" id="sharepoint_path" ng-model="$parent.Path" placeholder="{{'Full destination path, including the server name, but without https' | translate}}" />
|
||||
</div>
|
||||
|
||||
<div class="input text">
|
||||
@@ -9,4 +9,4 @@
|
||||
<a ng-hide="oauth_in_progress" href ng-click="oauth_start_token_creation()" translate>AuthID</a>
|
||||
</label>
|
||||
<input type="text" name="sharepoint_authid" id="sharepoint_authid" ng-model="$parent.AuthID" placeholder="{{'Click the AuthID link to create an AuthID' | translate}}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
</div>
|
||||
<div class="input text">
|
||||
<label for="sia_path" translate>Folder path</label>
|
||||
<input type="text" name="sia_targetpath" id="sia_targetpath" ng-model="$parent.sia_targetpath" placeholder="{{'Set the target path. Example: /backup' | translate}}" />
|
||||
<input type="text" name="sia_targetpath" id="sia_targetpath" ng-model="$parent.sia_targetpath" placeholder="{{'Target path. Example: /backup' | translate}}" />
|
||||
</div>
|
||||
<div class="input password">
|
||||
<label for="sia_password" translate>Server password</label>
|
||||
|
||||
@@ -19,25 +19,25 @@
|
||||
</div>
|
||||
<div class="input text" ng-show="$parent.storj_auth_method == 'API key'">
|
||||
<label for="storj_api_key" translate>API key</label>
|
||||
<input type="text" name="storj_api_key" id="storj_api_key" ng-model="$parent.storj_api_key" placeholder="{{'The API key' | translate}}" />
|
||||
<input type="text" name="storj_api_key" id="storj_api_key" ng-model="$parent.storj_api_key" placeholder="{{'API key' | translate}}" />
|
||||
</div>
|
||||
<div class="input password" ng-show="$parent.storj_auth_method == 'API key'">
|
||||
<label for="storj_secret" translate>Encryption passphrase</label>
|
||||
<input autocomplete="new-password" type="password" name="storj_secret" id="storj_secret" ng-model="$parent.storj_secret" placeholder="{{'The encryption passphrase' | translate}}" />
|
||||
<input autocomplete="new-password" type="password" name="storj_secret" id="storj_secret" ng-model="$parent.storj_secret" placeholder="{{'Encryption passphrase' | translate}}" />
|
||||
</div>
|
||||
<div class="input password" ng-show="$parent.storj_auth_method == 'API key'">
|
||||
<label for="storj_secret_verify" translate>Verify encryption passphrase</label>
|
||||
<input autocomplete="new-password" type="password" name="storj_secret_verify" id="storj_secret_verify" ng-model="$parent.storj_secret_verify" placeholder="{{'The encryption passphrase (for verification)' | translate}}" />
|
||||
<input autocomplete="new-password" type="password" name="storj_secret_verify" id="storj_secret_verify" ng-model="$parent.storj_secret_verify" placeholder="{{'Encryption passphrase (for verification)' | translate}}" />
|
||||
</div>
|
||||
<div class="input text" ng-show="$parent.storj_auth_method == 'Access grant'">
|
||||
<label for="storj_shared_access" translate>Access grant</label>
|
||||
<input type="text" name="storj_shared_access" id="storj_shared_access" ng-model="$parent.storj_shared_access" placeholder="{{'The access grant' | translate}}" />
|
||||
<input type="text" name="storj_shared_access" id="storj_shared_access" ng-model="$parent.storj_shared_access" placeholder="{{'Access grant' | translate}}" />
|
||||
</div>
|
||||
<div class="input text">
|
||||
<label for="storj_bucket" translate>Bucket</label>
|
||||
<input type="text" name="storj_bucket" id="storj_bucket" ng-model="$parent.storj_bucket" placeholder="{{'The bucket for storing the backup' | translate}}" />
|
||||
<input type="text" name="storj_bucket" id="storj_bucket" ng-model="$parent.storj_bucket" placeholder="{{'Bucket for storing the backup' | translate}}" />
|
||||
</div>
|
||||
<div class="input text">
|
||||
<label for="storj_folder" translate>Folder path</label>
|
||||
<input type="text" name="storj_folder" id="storj_folder" ng-model="$parent.storj_folder" placeholder="{{'The folder within the bucket for storing the backup' | translate}}" />
|
||||
<input type="text" name="storj_folder" id="storj_folder" ng-model="$parent.storj_folder" placeholder="{{'Folder within the bucket for storing the backup' | translate}}" />
|
||||
</div>
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<input type="button" value="{{'Reload' | translate}}" ng-click="reload()" />
|
||||
</div>
|
||||
|
||||
<div class="centered-text" ng-show="entry.verifying" translate>Checking ...</div>
|
||||
<div class="centered-text" ng-show="entry.verifying" translate>Checking …</div>
|
||||
<div class="centered-text warning" ng-show="!entry.verifying && entry.hasfailed" translate>Incorrect answer, try again</div>
|
||||
|
||||
</div>
|
||||
<div ng-hide="entry.imageurl" translate>Loading ...</div>
|
||||
<div ng-hide="entry.imageurl" translate>Loading …</div>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<label for="backupOptions">Advanced options</label>
|
||||
<div>
|
||||
<a href ng-click="ShowAdvancedTextArea = false" class="advanced-toggle"><i class="fa fa-check"></i> Edit as text</a>
|
||||
<textarea id="backupOptions" ng-model="ExtendedOptions" string-array-as-text placeholder="{{'Enter one option per line in command-line format, eg. --dblock-size=100MB' | translate}}"></textarea>
|
||||
<textarea id="backupOptions" ng-model="ExtendedOptions" string-array-as-text placeholder="{{'Enter one option per line in command-line format, e.g. --dblock-size=100MB' | translate}}"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -49,13 +49,13 @@
|
||||
{{'Server is currently paused,' | translate}} <a style="cursor: pointer" ng-click="ServerStatus.resume()" translate>resume now</a>
|
||||
</div>
|
||||
<div ng-show="serverstate.programState != 'Paused' && Started == null" translate="">
|
||||
Connecting to task ....
|
||||
Connecting to task …
|
||||
</div>
|
||||
<div ng-show="serverstate.programState != 'Paused' && Started == false" translate="">
|
||||
Waiting for task to start ....
|
||||
Waiting for task to start …
|
||||
</div>
|
||||
<div ng-show="Started == true && Finished == false">
|
||||
<span translate>Running ....</span> <a href ng-click="Abort()" ng-hide="RawFinished">stop now</a>
|
||||
<span translate>Running …</span> <a href ng-click="Abort()" ng-hide="RawFinished">stop now</a>
|
||||
</div>
|
||||
<div ng-show="Started == true && Finished == true" translate>
|
||||
Finished!
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<div ng-hide="NoLocalDB">
|
||||
<h2 translate>Delete remote files</h2>
|
||||
|
||||
<div ng-show="Backup.Backup.Metadata.TargetFilesCount == null" translate>Loading remote storage usage ...</div>
|
||||
<div ng-show="Backup.Backup.Metadata.TargetFilesCount == null" translate>Loading remote storage usage …</div>
|
||||
<div ng-show="Backup.Backup.Metadata.TargetFilesCount != null" translate translate-params-filecount="Backup.Backup.Metadata.TargetFilesCount" translate-params-filesize="Backup.Backup.Metadata.TargetSizeString">
|
||||
Delete {{filecount}} files ({{filesize}}) from the remote storage?
|
||||
</div>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<label for="searchfilter" translate>Search for files</label>
|
||||
<input type="search" id="searchfilter" name="searchfilter" ng-model="SearchFilter" placeholder="{{'Type to highlight files' | translate}}" ng-on-enter-press="doSearch()" ng-on-escape-press="clearSearch()" />
|
||||
<a href id="searchfiltersubmit" class="button" ng-click="doSearch()" ng-cancelsearch="clearSearch()" ng-enabled="!Searching">
|
||||
<span ng-show="Searching" translate>Busy ...</span>
|
||||
<span ng-show="Searching" translate>Busy …</span>
|
||||
<span ng-hide="Searching" translate>Search</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
<ul>
|
||||
<li class="input" ng-click="selection.backupid = 'direct'">
|
||||
<input type="radio" name="direct" id="direct" ng-model="selection.backupid" value="direct">
|
||||
<label for="direct" translate>Direct restore from backup files ...</label>
|
||||
<label for="direct" translate>Direct restore from backup files …</label>
|
||||
<div class="subtext" translate>Point to your backup files and restore from there</div>
|
||||
</li>
|
||||
|
||||
<li class="input" ng-click="selection.backupid = 'import'">
|
||||
<input type="radio" name="import" id="import" ng-model="selection.backupid" value="import">
|
||||
<label for="import" translate>Restore from configuration ...</label>
|
||||
<label for="import" translate>Restore from configuration …</label>
|
||||
<div class="subtext" translate>Load destination from an exported job or a storage provider</div>
|
||||
</li>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user