Merge pull request #19 from duplicati/master

upstream
This commit is contained in:
Max
2016-10-28 18:38:59 +02:00
committed by GitHub
40 changed files with 13179 additions and 495 deletions
@@ -54,32 +54,29 @@ namespace Duplicati.GUI.TrayIcon
{
set
{
m_appIndicator.IconName = GetTrayIconFilename(value);
switch(value)
{
case TrayIcons.Paused:
m_appIndicator.IconName = "normal-pause";
m_appIndicator.IconDesc = "Paused";
break;
case TrayIcons.Running:
m_appIndicator.IconName = "normal-running";
m_appIndicator.IconDesc = "Running";
break;
case TrayIcons.IdleError:
m_appIndicator.IconName = "normal-error";
m_appIndicator.IconDesc = "Error";
break;
case TrayIcons.RunningError:
m_appIndicator.IconName = "normal-running";
break;
case TrayIcons.PausedError:
m_appIndicator.IconName = "normal-pause";
m_appIndicator.IconDesc = "Paused";
break;
case TrayIcons.Idle:
default:
m_appIndicator.IconName = "normal";
m_appIndicator.IconDesc = "Ready";
break;
case TrayIcons.Paused:
m_appIndicator.IconDesc = "Paused";
break;
case TrayIcons.Running:
m_appIndicator.IconDesc = "Running";
break;
case TrayIcons.IdleError:
m_appIndicator.IconDesc = "Error";
break;
case TrayIcons.RunningError:
m_appIndicator.IconDesc = "Running";
break;
case TrayIcons.PausedError:
m_appIndicator.IconDesc = "Paused";
break;
case TrayIcons.Idle:
default:
m_appIndicator.IconDesc = "Ready";
break;
}
}
}
@@ -372,5 +372,29 @@
<Link>OSXTrayHost\rumps.py</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\dark\context_menu_open.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\dark\context_menu_pause.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\dark\context_menu_quit.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\dark\context_menu_resume.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\light\context_menu_open.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\light\context_menu_pause.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\light\context_menu_quit.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SVGIcons\light\context_menu_resume.svg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
@@ -24,11 +24,16 @@ namespace Duplicati.GUI.TrayIcon
{
public class GtkRunner : TrayIconBase
{
private static string m_svgfolder;
/// <summary>
/// Static constructor that ensures the Gtk environment is initialized
/// </summary>
static GtkRunner()
{
m_svgfolder = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "SVGIcons");
m_svgfolder = System.IO.Path.Combine(m_svgfolder, "dark");
Gtk.Application.Init();
}
@@ -45,34 +50,36 @@ namespace Duplicati.GUI.TrayIcon
private static Dictionary<MenuIcons, Gtk.Image> _icons = new Dictionary<MenuIcons, Gtk.Image>();
public MenuItem MenuItem { get { return m_item; } }
private string GetFilenameForIcon(MenuIcons icon)
{
switch (icon)
{
case MenuIcons.Pause:
return "context_menu_pause";
case MenuIcons.Quit:
return "context_menu_quit";
case MenuIcons.Resume:
return "context_menu_resume";
case MenuIcons.Status:
return "context_menu_open";
default:
return null;
}
}
private Gtk.Image GetIcon(MenuIcons icon)
{
if (Duplicati.Library.Utility.Utility.IsClientOSX)
return null;
if (!_icons.ContainsKey(icon))
{
switch(icon)
_icons[icon] = null;
var filename = GetFilenameForIcon(icon);
if (filename != null)
{
case MenuIcons.None:
_icons[icon] = null;
break;
case MenuIcons.Pause:
_icons[icon] = ImageToGtk(ImageLoader.Pause);
break;
case MenuIcons.Quit:
_icons[icon] = ImageToGtk(ImageLoader.CloseMenuIcon);
break;
case MenuIcons.Resume:
_icons[icon] = ImageToGtk(ImageLoader.Play);
break;
case MenuIcons.Status:
_icons[icon] = ImageToGtk(ImageLoader.StatusMenuIcon);
break;
default:
_icons[icon] = null;
break;
filename = System.IO.Path.Combine(m_svgfolder, System.IO.Path.ChangeExtension(filename, ".svg"));
if (System.IO.File.Exists(filename))
_icons[icon] = new Gtk.Image(filename);
}
}
@@ -89,9 +96,9 @@ namespace Duplicati.GUI.TrayIcon
if (!Duplicati.Library.Utility.Utility.IsClientOSX)
if (icon != MenuIcons.None) {
((ImageMenuItem)m_item).Image = GetIcon(icon);
//TODO: Not sure we should do this, it overrides policy?
m_item.ExposeEvent += DrawImageMenuItemImage;
// On some (older versions) of GDK, this hack is required
//m_item.ExposeEvent += DrawImageMenuItemImage;
}
if (subitems != null && subitems.Count > 0)
@@ -116,6 +123,7 @@ namespace Duplicati.GUI.TrayIcon
m_callback();
}
/*
/// <summary> Draw the image to the image menu item. Taken from: http://mono.1490590.n4.nabble.com/ImageMenuItem-does-not-display-the-image-Linux-platform-tp3510861p3511376.html </summary>
/// The event source. <see cref="System.Object"/>
/// The event args. <see cref="Gtk.ExposeEventArgs"/>
@@ -133,7 +141,8 @@ namespace Duplicati.GUI.TrayIcon
args.Event.Window.DrawPixbuf(mainGC, image.Pixbuf, 0, 0, r.Left + 2,
r.Top + (r.Height - image.Pixbuf.Height) / 2, -1, -1, Gdk.RgbDither.None, 0, 0);
}
}
*/
public string Text
{
@@ -176,7 +185,9 @@ namespace Duplicati.GUI.TrayIcon
protected virtual void CreateTrayInstance()
{
m_trayIcon = new StatusIcon();
// Sometimes the tray icon will not display
// if it is not created with an icon
m_trayIcon = StatusIcon.NewFromStock(Stock.About);
}
protected override void Run (string[] args)
@@ -231,33 +242,63 @@ namespace Duplicati.GUI.TrayIcon
Gtk.Image img = new Gtk.Image(stream);
return img;
}
}
}
protected static string GetTrayIconFilename(TrayIcons icon)
{
switch (icon)
{
case TrayIcons.Paused:
return "normal-pause";
case TrayIcons.Running:
return "normal-running";
case TrayIcons.IdleError:
return "normal-error";
case TrayIcons.RunningError:
return "normal-running";
case TrayIcons.PausedError:
return "normal-pause";
case TrayIcons.Idle:
default:
return "normal";
}
}
protected static Pixbuf GetIcon(TrayIcons icon)
{
if (!_images.ContainsKey(icon))
{
switch(icon)
if (Duplicati.Library.Utility.Utility.IsClientOSX)
{
case TrayIcons.Paused:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap());
break;
case TrayIcons.Running:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
break;
case TrayIcons.IdleError:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.ErrorIcon).ToBitmap());
break;
case TrayIcons.RunningError:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
break;
case TrayIcons.PausedError:
switch (icon)
{
case TrayIcons.Paused:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap());
break;
case TrayIcons.Idle:
default:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.NormalIcon).ToBitmap());
break;
break;
case TrayIcons.Running:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
break;
case TrayIcons.IdleError:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.ErrorIcon).ToBitmap());
break;
case TrayIcons.RunningError:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap());
break;
case TrayIcons.PausedError:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap());
break;
case TrayIcons.Idle:
default:
_images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.NormalIcon).ToBitmap());
break;
}
}
else
{
_images[icon] = null;
var filename = System.IO.Path.Combine(m_svgfolder, System.IO.Path.ChangeExtension(GetTrayIconFilename(icon), ".svg"));
if (System.IO.File.Exists(filename))
_images[icon] = new Pixbuf(filename);
}
}
@@ -116,6 +116,7 @@ def get_input():
img = NSImage.alloc().initWithData_(data)
img.setScalesWhenResized_(True)
img.setSize_((18, 18))
img.setTemplate_(True)
app.icon = img
print "info:Image updated"
@@ -0,0 +1,13 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="show_Kopie" data-name="show Kopie">
<polygon class="cls-1" points="8 4.001 2 10.301 3.5 11.876 8 7.072 12.5 11.876 14 10.301 8 4.001"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 427 B

@@ -0,0 +1,14 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="pause_Kopie" data-name="pause Kopie">
<rect class="cls-1" x="4" y="2" width="3" height="12"/>
<rect class="cls-1" x="9" y="2" width="3" height="12"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 445 B

@@ -0,0 +1,13 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="15.997" height="16" viewBox="0 0 15.997 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="stop_Kopie" data-name="stop Kopie">
<polygon id="stop" class="cls-1" points="13.998 3.95 12.048 2 7.998 6.05 3.948 2 1.998 3.95 6.049 8 1.998 12.05 3.948 14 7.998 9.95 12.048 14 13.998 12.05 9.949 8 13.998 3.95"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 513 B

@@ -0,0 +1,13 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="resume_Kopie" data-name="resume Kopie">
<polygon class="cls-1" points="5 14 13 8 5 2 5 14"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 384 B

@@ -0,0 +1,13 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="show_Kopie" data-name="show Kopie">
<polygon class="cls-1" points="8 4.001 2 10.301 3.5 11.876 8 7.072 12.5 11.876 14 10.301 8 4.001"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 427 B

@@ -0,0 +1,14 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="pause_Kopie" data-name="pause Kopie">
<rect class="cls-1" x="4" y="2" width="3" height="12"/>
<rect class="cls-1" x="9" y="2" width="3" height="12"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 445 B

@@ -0,0 +1,13 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="15.997" height="16" viewBox="0 0 15.997 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="stop_Kopie" data-name="stop Kopie">
<polygon id="stop" class="cls-1" points="13.998 3.95 12.048 2 7.998 6.05 3.948 2 1.998 3.95 6.049 8 1.998 12.05 3.948 14 7.998 9.95 12.048 14 13.998 12.05 9.949 8 13.998 3.95"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 513 B

@@ -0,0 +1,13 @@
<svg id="tray_menu_icons" data-name="tray menu icons" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<defs>
<style>
.cls-1 {
fill: #65b1dd;
}
</style>
</defs>
<title>tray context menu icons</title>
<g id="resume_Kopie" data-name="resume Kopie">
<polygon class="cls-1" points="5 14 13 8 5 2 5 14"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 384 B

+1 -1
View File
@@ -103,7 +103,7 @@ namespace Duplicati.Library.Main.Strings
public static string UsnpolicyShort { get { return LC.L(@"Controls the use of NTFS Update Sequence Numbers"); } }
public static string DisableusndiffcheckLong { get { return LC.L(@"If USN is enabled the USN numbers are used to find all changed files since last backup. Use this option to disable the use of USN numbers, which will make Duplicati investigate all source files. This option is primarily intended for testing and should not be disabled in a production environment. If USN is not enabled, this option has no effect."); } }
public static string DisableusndiffcheckShort { get { return LC.L(@"Disables changelist by USN numbers"); } }
public static string DisabletimetoleranceLong { get { return LC.L(@"When matching timestamps, Duplicati will adjust the times by a small fraction to ensure that minor time differences do not cause unexpected updated. If the option --{0} is set to keep a week of backups, and the backup is made the same time each week, it is possible that a the clock drifts slightly, such that full week has just passed, causing Duplicati to delete the older backup earlier than expected. To avoid this, Duplicati inserts a 1% tolerance (max 1 hour). Use this option to disable the tolerance, and use strict time checking", "--keep-time"); } }
public static string DisabletimetoleranceLong { get { return LC.L(@"When matching timestamps, Duplicati will adjust the times by a small fraction to ensure that minor time differences do not cause unexpected updates. If the option --{0} is set to keep a week of backups, and the backup is made the same time each week, it is possible that the clock drifts slightly, such that full week has just passed, causing Duplicati to delete the older backup earlier than expected. To avoid this, Duplicati inserts a 1% tolerance (max 1 hour). Use this option to disable the tolerance, and use strict time checking", "--keep-time"); } }
public static string DisabletimetoleranceShort { get { return LC.L(@"Deactivates tolerance when comparing times"); } }
public static string ListverifyuploadsShort { get { return LC.L(@"Verify uploads by listing contents"); } }
public static string SynchronousuploadLong { get { return LC.L(@"Duplicati will upload files while scanning the disk and producing volumes, which usually makes the backup faster. Use this flag to turn the behavior off, so that Duplicati will wait for each volume to complete."); } }
@@ -63,9 +63,29 @@ namespace Duplicati.Library.Modules.Builtin
}
#endregion
#region Implementation of IGenericSourceModule
public Dictionary<string, string> ParseSourcePaths(ref string[] paths, ref string filter, Dictionary<string, string> commandlineOptions)
{
// Early exit in case we are non-windows to prevent attempting to load Windows-only components
if (!Utility.Utility.IsClientWindows)
{
Logging.Log.WriteMessage("Hyper-V backup works only on Windows OS", Logging.LogMessageType.Warning);
if (paths != null)
paths = paths.Where(x => !x.Equals(m_HyperVPathAllRegExp, StringComparison.OrdinalIgnoreCase) && !Regex.IsMatch(x, m_HyperVPathGuidRegExp, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)).ToArray();
return new Dictionary<string, string>();
}
// Windows, do the real stuff!
return RealParseSourcePaths(ref paths, ref filter, commandlineOptions);
}
// Make sure the JIT does not attempt to inline this call and thus load
// referenced types from System.Management here
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
private Dictionary<string, string> RealParseSourcePaths(ref string[] paths, ref string filter, Dictionary<string, string> commandlineOptions)
{
var changedOptions = new Dictionary<string, string>();
var filtersInclude = new List<string>();
@@ -84,15 +104,7 @@ namespace Duplicati.Library.Modules.Builtin
filter = string.Join(System.IO.Path.PathSeparator.ToString(), remainingfilters);
}
if (!Utility.Utility.IsClientWindows)
{
Logging.Log.WriteMessage("Hyper-V backup works only on Windows OS", Logging.LogMessageType.Warning);
if(paths != null)
paths = paths.Where(x => !x.Equals(m_HyperVPathAllRegExp, StringComparison.OrdinalIgnoreCase) && !Regex.IsMatch(x, m_HyperVPathGuidRegExp, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)).ToArray();
}
if (paths == null || !ContainFilesForBackup(paths) || !Utility.Utility.IsClientWindows)
if (paths == null || !ContainFilesForBackup(paths))
return changedOptions;
if (commandlineOptions.Keys.Contains("vss-exclude-writers"))
+8 -2
View File
@@ -177,8 +177,14 @@ namespace Duplicati.Library.Snapshots
var fse = UnixSupport.File.GetUserGroupAndPermissions(f);
dict["unix:uid-gid-perm"] = string.Format("{0}-{1}-{2}", fse.UID, fse.GID, fse.Permissions);
dict["unix:owner-name"] = fse.OwnerName;
dict["unix:group-name"] = fse.GroupName;
if (fse.OwnerName != null)
{
dict["unix:owner-name"] = fse.OwnerName;
}
if (fse.GroupName != null)
{
dict["unix:group-name"] = fse.GroupName;
}
return dict;
}
File diff suppressed because one or more lines are too long
@@ -51,6 +51,7 @@ backupApp.directive('restoreFilePicker', function() {
id: data.data.Files[n].Path,
size: data.data.Files[n].Sizes[0],
iconCls: leaf ? 'x-tree-icon-leaf' : '',
entrytype: AppUtils.getEntryTypeFromIconCls(leaf ? 'x-tree-icon-leaf' : ''),
leaf: leaf
});
}
@@ -294,7 +295,8 @@ backupApp.directive('restoreFilePicker', function() {
expanded: items[n].expanded,
iconCls: items[n].iconCls,
leaf: items[n].leaf,
id: items[n].Path
id: items[n].Path,
entrytype: AppUtils.getEntryTypeFromIconCls(items[n].iconCls)
};
if (items[n].Children) {
@@ -33,6 +33,11 @@ backupApp.directive('sourceFolderPicker', function() {
return scope.systeminfo.CaseSensitiveFilesystem ? path : path.toLowerCase();
}
function setEntryType(n)
{
n.entrytype = AppUtils.getEntryTypeFromIconCls(n.iconCls);
}
function setIconCls(n) {
var cp = compareablePath(n.id);
@@ -56,6 +61,8 @@ backupApp.directive('sourceFolderPicker', function() {
n.iconCls = 'x-tree-icon-broken';
else if (cp.substr(cp.length - 1, 1) != dirsep)
n.iconCls = 'x-tree-icon-leaf';
setEntryType(n);
}
function indexOfPathInArray(array, item) {
@@ -227,9 +234,11 @@ backupApp.directive('sourceFolderPicker', function() {
}, function(data) {
var p = data.config.data.path;
var ix = findInList(sources, compareablePath(p));
if (ix != null && sources[ix].id == p)
sources[ix].iconCls = 'x-tree-icon-broken';
var ix = findInList(sourceNodeChildren, compareablePath(p));
if (ix != null && sourceNodeChildren[ix].id == p) {
sourceNodeChildren[ix].iconCls = 'x-tree-icon-broken';
setEntryType(sourceNodeChildren[ix]);
}
});
}
}
@@ -327,6 +336,10 @@ backupApp.directive('sourceFolderPicker', function() {
AppService.post('/filesystem?onlyfolders=false&showhidden=true', {path: node.id}).then(function(data) {
node.children = data.data;
node.loading = false;
if (node.children != null)
for(var i in node.children)
setEntryType(node.children[i]);
updateIncludeFlags(node, node.include);
@@ -26,6 +26,11 @@ backupApp.directive('destinationFolderPicker', function() {
return scope.systeminfo.CaseSensitiveFilesystem ? path : path.toLowerCase();
};
function setEntryType(n)
{
n.entrytype = AppUtils.getEntryTypeFromIconCls(n.iconCls);
}
function setIconCls(n) {
var cp = compareablePath(n.id);
var dirsep = scope.systeminfo.DirectorySeparator || '/';
@@ -42,6 +47,8 @@ backupApp.directive('destinationFolderPicker', function() {
n.iconCls = 'x-tree-icon-home';
else if (cp.substr(cp.length - 1, 1) != dirsep)
n.iconCls = 'x-tree-icon-leaf';
setEntryType(n);
}
$scope.toggleExpanded = function(node) {
@@ -59,6 +66,10 @@ backupApp.directive('destinationFolderPicker', function() {
AppService.post('/filesystem?onlyfolders=true&showhidden=true', {path: node.id}).then(function(data) {
node.children = data.data;
node.loading = false;
if (node.children != null)
for(var i in node.children)
setEntryType(node.children[i]);
}, function() {
node.loading = false;
@@ -118,7 +129,10 @@ backupApp.directive('destinationFolderPicker', function() {
usernode.children.push(data.data[i]);
}
else
systemnode.children.push(data.data[i]);
{
setEntryType(data.data[i]);
systemnode.children.push(data.data[i]);
}
}
updateHideUserNode();
@@ -41,6 +41,40 @@ backupApp.service('AppUtils', function($rootScope, $timeout, $cookies, DialogSer
if (m) $timeout(m);
};
this.getEntryTypeFromIconCls = function(cls)
{
// Entry type is used in as the ALT entry,
// to guide screen reading software for visually
// impaired users
var res = gettextCatalog.getString('Folder');
if (cls == 'x-tree-icon-mydocuments')
res = gettextCatalog.getString('My Documents');
else if (cls == gettextCatalog.getString('x-tree-icon-mymusic'))
res = gettextCatalog.getString('My Music');
else if (cls == 'x-tree-icon-mypictures')
res = gettextCatalog.getString('My Pictures');
else if (cls == 'x-tree-icon-desktop')
res = gettextCatalog.getString('Desktop');
else if (cls == 'x-tree-icon-home')
res = gettextCatalog.getString('Home');
else if (cls == 'x-tree-icon-hypervmachine')
res = gettextCatalog.getString('Hyper-V Machine');
else if (cls == 'x-tree-icon-hyperv')
res = gettextCatalog.getString('Hyper-V Machines');
else if (cls == 'x-tree-icon-broken')
res = gettextCatalog.getString('Broken access');
else if (cls == 'x-tree-icon-locked')
res = gettextCatalog.getString('Access denied');
else if (cls == 'x-tree-icon-symlink')
res = gettextCatalog.getString('Symbolic link');
else if (cls == 'x-tree-icon-leaf')
res = gettextCatalog.getString('File');
return res;
}
function reloadTexts() {
apputils.fileSizeMultipliers = [
{name: gettextCatalog.getString('byte'), value: ''},
@@ -32,7 +32,7 @@
<div class="buttons" ng-hide="Testing">
<a href ng-click="save()" class="save" translate>OK</a>
<a href ng-click="testConnection()" class="test-connection" translate>Test connection</a>
<a href ng-click="hide()" class="warning cancel" translate>Cancel</a>
<a href ng-click="hide()" class="cancel" translate>Cancel</a>
</div>
<div class="button testmessage" ng-show="Testing">
@@ -1,12 +1,12 @@
<ul dx-start-with="treedata" class="tree-view">
<li ng-repeat="node in $dxPrior.children" ng-class="{hidden: node.invisible || (node.hidden &amp;&amp; !ngShowHidden)}">
<div ng-class="{selected: node.selected}">
<a class="nav" ng-click="toggleExpanded(node)" ng-class="{expanded: node.expanded, leaf: node.leaf}"></a>
<a class="check" ng-click="toggleCheck(node)" ng-class="{include: node.include == '+', exclude: node.include == '-', partial: node.include == ' ', root: node.root}"></a>
<a class="type {{node.iconCls}}" ng-class="{invisible: node.hidden, loading: node.loading}"></a>
<div ng-class="{selected: node.selected}" alt="{{node.selected ? 'selected' : 'not selected'}}">
<a class="nav" ng-click="toggleExpanded(node)" ng-class="{expanded: node.expanded, leaf: node.leaf}" alt="{{node.expanded ? 'expanded' : 'contracted'}}"></a>
<a class="check" ng-click="toggleCheck(node)" ng-class="{include: node.include == '+', exclude: node.include == '-', partial: node.include == ' ', root: node.root}" alt="{{node.include == ' ' ? 'partially included' : (node.include == '-' ? 'excluded' : (node.include == '+' ? 'included' : 'not checked'))}}"></a>
<a class="type {{node.iconCls}}" alt="{{loading ? 'loading' : node.entrytype}}" ng-class="{invisible: node.hidden, loading: node.loading}"></a>
<span ng-click="toggleSelected(node)" ng-bind-html="node.text | highlight:ngSearchFilter"></span>
</div>
<ul ng-class="{expanded: node.expanded}" dx-connect="node"/>
<ul ng-class="{expanded: node.expanded}" dx-connect="node" alt="{{node.expanded ? 'expanded' : 'contracted'}}"/>
</li>
</ul>
@@ -1,12 +1,12 @@
<ul dx-start-with="treedata" class="tree-view">
<li ng-repeat="node in $dxPrior.children" ng-class="{hidden: (node.hidden &amp;&amp; !ngShowHidden)}">
<div ng-class="{selected: node.selected}">
<a class="nav" ng-click="toggleExpanded(node)" ng-class="{expanded: node.expanded, leaf: node.leaf}"></a>
<a class="check" ng-click="toggleCheck(node)" ng-class="{include: node.include == '+', exclude: node.include == '-', partial: node.include == ' ', root: node.root}"></a>
<a class="type {{node.iconCls}}" ng-class="{invisible: node.hidden, loading: node.loading}"></a>
<div ng-class="{selected: node.selected}" alt="{{node.selected ? 'selected' : 'not selected'}}">
<a class="nav" ng-click="toggleExpanded(node)" alt="{{node.expanded ? 'expanded' : 'contracted'}}" ng-class="{expanded: node.expanded, leaf: node.leaf}"></a>
<a class="check" ng-click="toggleCheck(node)" alt="{{node.include == ' ' ? 'partially included' : (node.include == '-' ? 'excluded' : (node.include == '+' ? 'included' : 'not checked'))}}" ng-class="{include: node.include == '+', exclude: node.include == '-', partial: node.include == ' ', root: node.root}"></a>
<a class="type {{node.iconCls}}" alt="{{loading ? 'loading' : node.entrytype}}" ng-class="{invisible: node.hidden, loading: node.loading}"></a>
<span ng-click="toggleSelected(node)" title="{{ node.tooltip }}">{{ node.text }}</span>
</div>
<ul ng-class="{expanded: node.expanded, include: node.include, exclude: node.exclude}" dx-connect="node"/>
<ul ng-class="{expanded: node.expanded, include: node.include, exclude: node.exclude}" alt="{{node.include == '+' ? 'included' : (node.include == '-' ? 'excluded' : 'partially included')}}" dx-connect="node"/>
</li>
</ul>
@@ -1,11 +1,11 @@
<ul dx-start-with="treedata" class="tree-view">
<li ng-repeat="node in $dxPrior.children" ng-class="{hidden: node.invisible || (node.hidden &amp;&amp; !ngShowHidden)}">
<div ng-class="{selected: node.selected}">
<a class="nav" ng-click="toggleExpanded(node)" ng-class="{expanded: node.expanded, leaf: node.leaf}"></a>
<a class="type {{node.iconCls}}" ng-class="{invisible: node.hidden, loading: node.loading}"></a>
<div ng-class="{selected: node.selected}" alt="{{node.selected ? 'selected' : 'not selected'}}">
<a class="nav" ng-click="toggleExpanded(node)" ng-class="{expanded: node.expanded, leaf: node.leaf}" alt="{{node.expanded ? 'expanded' : 'contracted'}}"></a>
<a class="type {{node.iconCls}}" alt="{{loading ? 'loading' : node.entrytype}}" ng-class="{invisible: node.hidden, loading: node.loading}"></a>
<span ng-click="toggleSelected(node)">{{ node.text }}</span>
</div>
<ul ng-class="{expanded: node.expanded}" dx-connect="node"/>
<ul ng-class="{expanded: node.expanded}" alt="{{node.expanded ? 'expanded' : 'contracted'}}" dx-connect="node"/>
</li>
</ul>
+1
View File
@@ -5,4 +5,5 @@ cd $SCRIPT_DIR
cd ../../Duplicati/
find . -type f -name *.cs > $SCRIPT_DIR"/"filelist_cs.txt
xgettext -k --from-code=UTF-8 --output=$SCRIPT_DIR"/"localization.pot --files-from=$SCRIPT_DIR"/"filelist_cs.txt --language=C# --keyword=LC.L
sed -i "s/charset=CHARSET/charset=UTF-8/g" $SCRIPT_DIR"/"localization.pot
rm $SCRIPT_DIR"/"filelist_cs.txt
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
+75 -65
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-10-14 13:50+0200\n"
"POT-Creation-Date: 2016-10-26 13:13+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -150,7 +150,7 @@ msgstr ""
msgid ""
"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 include all files with a txt extension. Regular expressions are "
"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]."
msgstr ""
@@ -479,7 +479,7 @@ msgstr ""
#: Library/Backend/CloudFiles/Strings.cs:4
#, csharp-format
msgid ""
"Cloudfiles use different servers for authentification based on where the "
"CloudFiles use different servers for authentification based on where the "
"account was resides, use this option to set an alternate authentication URL. "
"This option overrides --{0}."
msgstr ""
@@ -584,7 +584,7 @@ msgid ""
"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, "
"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 (*), eg.: \"*:\\backup\", which will examine all drive letters. If "
"a username and password is supplied, the same credentials are used for all "
@@ -2295,12 +2295,12 @@ msgstr ""
msgid ""
"When matching timestamps, Duplicati will adjust the times by a small "
"fraction to ensure that minor time differences do not cause unexpected "
"updated. If the option --{0} is set to keep a week of backups, and the "
"backup is made the same time each week, it is possible that a the clock "
"drifts slightly, such that full week has just passed, causing Duplicati to "
"delete the older backup earlier than expected. To avoid this, Duplicati "
"inserts a 1% tolerance (max 1 hour). Use this option to disable the "
"tolerance, and use strict time checking"
"updates. If the option --{0} is set to keep a week of backups, and the "
"backup is made the same time each week, it is possible that the clock drifts "
"slightly, such that full week has just passed, causing Duplicati to delete "
"the older backup earlier than expected. To avoid this, Duplicati inserts a "
"1% tolerance (max 1 hour). Use this option to disable the tolerance, and use "
"strict time checking"
msgstr ""
#: Library/Main/Strings.cs:107
@@ -3022,91 +3022,101 @@ msgid ""
msgstr ""
#: Library/Modules/Builtin/Strings.cs:36
msgid "Executes a script before starting an operation, and again on completion"
msgid ""
"This module works internaly to parse source parameters to backup Hyper-V "
"virtual machines"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:37
msgid "Configure Hyper-V module"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:40
msgid "Executes a script before starting an operation, and again on completion"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:41
msgid "Run script"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:38
#: Library/Modules/Builtin/Strings.cs:42
msgid ""
"Executes a script after performing an operation. The script will receive the "
"operation results written to stdout."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:39
#: Library/Modules/Builtin/Strings.cs:43
msgid "Run a script on exit"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:40
#: Library/Modules/Builtin/Strings.cs:44
#, csharp-format
msgid "The script \"{0}\" returned with exit code {1}"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:41
#: Library/Modules/Builtin/Strings.cs:45
msgid ""
"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."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:42
#: Library/Modules/Builtin/Strings.cs:46
msgid "Run a required script on startup"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:43
#: Library/Modules/Builtin/Strings.cs:47
#, csharp-format
msgid "Error while executing script \"{0}\": {1}"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:44
#: Library/Modules/Builtin/Strings.cs:48
#, csharp-format
msgid "Execution of the script \"{0}\" timed out"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:45
#: Library/Modules/Builtin/Strings.cs:49
msgid ""
"Executes a script before performing an operation. The operation will block "
"until the script has completed or timed out."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:46
#: Library/Modules/Builtin/Strings.cs:50
msgid "Run a script on startup"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:47
#: Library/Modules/Builtin/Strings.cs:51
#, csharp-format
msgid "The script \"{0}\" reported error messages: {1}"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:48
#: Library/Modules/Builtin/Strings.cs:52
msgid ""
"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."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:49
#: Library/Modules/Builtin/Strings.cs:53
msgid "Sets the script timeout"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:52
#: Library/Modules/Builtin/Strings.cs:56
msgid "This module can send email after an operation completes"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:53
#: Library/Modules/Builtin/Strings.cs:57
msgid "Send mail"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:54
#: Library/Modules/Builtin/Strings.cs:58
#, csharp-format
msgid ""
"Unable to find the destination mail server through MX lookup, please use the "
"option {0} to specify what smtp server to use."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:55
#: Library/Modules/Builtin/Strings.cs:59
msgid ""
"This value can be a filename. If a the file exists, the file contents will "
"be used as the message body.\n"
@@ -3123,19 +3133,19 @@ msgid ""
"Any unknown/unset value is removed."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:64
#: Library/Modules/Builtin/Strings.cs:68
msgid "The message body"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:65
#: Library/Modules/Builtin/Strings.cs:69
msgid "The password used to authenticate with the SMTP server if required."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:66
#: Library/Modules/Builtin/Strings.cs:70
msgid "SMTP Password"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:67
#: Library/Modules/Builtin/Strings.cs:71
msgid ""
"This setting is required if mail should be sent, all other settings have "
"default values. You can supply multiple email adresses seperated with "
@@ -3147,21 +3157,21 @@ msgid ""
"admin@example.com"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:71
#: Library/Modules/Builtin/Strings.cs:75
msgid "Email recipient(s)"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:72
#: Library/Modules/Builtin/Strings.cs:76
msgid ""
"By default, mail will only be sent after a Backup operation. Use this option "
"to send mail for all operations."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:73
#: Library/Modules/Builtin/Strings.cs:77
msgid "Send email for all operations"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:74
#: Library/Modules/Builtin/Strings.cs:78
msgid ""
"Adress of the email sender. If no host is supplied, the hostname of the "
"first recipient is used. Examples of allowed formats:\n"
@@ -3172,11 +3182,11 @@ msgid ""
"Mail Sender <sender@example.com>"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:80
#: Library/Modules/Builtin/Strings.cs:84
msgid "Email sender"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:81
#: Library/Modules/Builtin/Strings.cs:85
#, csharp-format
msgid ""
"You can specify one of \"{0}\", \"{1}\", \"{2}\". You can supply multiple "
@@ -3185,11 +3195,11 @@ msgid ""
"send an email."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:82 Library/Modules/Builtin/Strings.cs:114
#: Library/Modules/Builtin/Strings.cs:86 Library/Modules/Builtin/Strings.cs:118
msgid "The messages to send"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:83
#: Library/Modules/Builtin/Strings.cs:87
msgid ""
"A url for the SMTP server, e.g. smtp://example.com:25. Multiple servers can "
"be supplied in a prioritized list, seperated with semicolon. If a server "
@@ -3205,64 +3215,64 @@ msgid ""
"used for non-ssl, and 587 for SSL connections."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:87
#: Library/Modules/Builtin/Strings.cs:91
msgid "SMTP Url"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:88
#: Library/Modules/Builtin/Strings.cs:92
#, csharp-format
msgid ""
"This setting supplies the email subject. Values are replaced as described in "
"the description for --{0}."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:89
#: Library/Modules/Builtin/Strings.cs:93
msgid "The email subject"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:90
#: Library/Modules/Builtin/Strings.cs:94
msgid "The username used to authenticate with the SMTP server if required."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:91
#: Library/Modules/Builtin/Strings.cs:95
msgid "SMTP Username"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:92
#: Library/Modules/Builtin/Strings.cs:96
#, csharp-format
msgid "Failed to send email: {0}"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:93
#: Library/Modules/Builtin/Strings.cs:97
#, csharp-format
msgid "Whole SMTP communication: {0}"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:94
#: Library/Modules/Builtin/Strings.cs:98
#, csharp-format
msgid "Failed to send email with server: {0}, message: {1}, retrying with {2}"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:95
#: Library/Modules/Builtin/Strings.cs:99
#, csharp-format
msgid "Email sent successfully using server: {0}"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:98
#: Library/Modules/Builtin/Strings.cs:102
msgid "XMPP recipient email"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:99
#: Library/Modules/Builtin/Strings.cs:103
msgid ""
"The users who should have the messages sent, specify multiple users "
"seperated with commas"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:100
#: Library/Modules/Builtin/Strings.cs:104
msgid "The message template"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:101
#: Library/Modules/Builtin/Strings.cs:105
msgid ""
"This value can be a filename. If a the file exists, the file contents will "
"be used as the message.\n"
@@ -3279,25 +3289,25 @@ msgid ""
"Any unknown/unset value is removed."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:110
#: Library/Modules/Builtin/Strings.cs:114
msgid "The XMPP username"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:111
#: Library/Modules/Builtin/Strings.cs:115
msgid ""
"The username for the account that will send the message, including the "
"hostname. I.e. \"account@jabber.org/Home\""
msgstr ""
#: Library/Modules/Builtin/Strings.cs:112
#: Library/Modules/Builtin/Strings.cs:116
msgid "The XMPP password"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:113
#: Library/Modules/Builtin/Strings.cs:117
msgid "The password for the account that will send the message"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:115
#: Library/Modules/Builtin/Strings.cs:119
#, csharp-format
msgid ""
"You can specify one of \"{0}\", \"{1}\", \"{2}\". \n"
@@ -3306,30 +3316,30 @@ msgid ""
"all backup operations to send a message."
msgstr ""
#: Library/Modules/Builtin/Strings.cs:117
#: Library/Modules/Builtin/Strings.cs:121
msgid "Send messages for all operations"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:118
#: Library/Modules/Builtin/Strings.cs:122
msgid ""
"By default, messages will only be sent after a Backup operation. Use this "
"option to send messages for all operations"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:119
#: Library/Modules/Builtin/Strings.cs:123
msgid "XMPP report module"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:120
#: Library/Modules/Builtin/Strings.cs:124
msgid ""
"This module provides support for sending status reports via XMPP messagesß"
"This module provides support for sending status reports via XMPP messages"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:121
#: Library/Modules/Builtin/Strings.cs:125
msgid "Timeout occured while logging in to jabber server"
msgstr ""
#: Library/Modules/Builtin/Strings.cs:122
#: Library/Modules/Builtin/Strings.cs:126
#, csharp-format
msgid "Failed to send jabber message: {0}"
msgstr ""
@@ -3567,7 +3577,7 @@ msgstr ""
#: Server/Strings.cs:18
#, csharp-format
msgid "A serious error occured in Duplicati: {0}"
msgid "A serious error occurred in Duplicati: {0}"
msgstr ""
#: Server/Strings.cs:19
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/bash
# transifex client in PATH necessary
cd $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
tx pull --language=de
tx pull --language=de,fr,es
+122 -71
View File
@@ -58,7 +58,7 @@ msgstr "Zugriff auf die Benutzeroberfläche"
msgid "Account name"
msgstr "Account-Name"
#: templates/notificationarea.html:29 templates/updatechangelog.html:11
#: templates/notificationarea.html:26 templates/updatechangelog.html:11
msgid "Activate"
msgstr "Aktivieren"
@@ -104,6 +104,10 @@ msgstr "Optionen für Profis"
msgid "Advanced:"
msgstr "Für Profis:"
#: scripts/directives/sourceFolderPicker.js:403
msgid "All Hyper-V Machines"
msgstr "Alle Hyper-V Machinen"
#: templates/settings.html:106
msgid ""
"All usage reports are sent anonymously and do not contain any personal "
@@ -349,6 +353,10 @@ msgstr "Vorheriges Backup fertigstellen..."
msgid "Compression modules:"
msgstr "Kompression:"
#: scripts/directives/sourceFolderPicker.js:361
msgid "Computer"
msgstr "Computer"
#: templates/import.html:6
msgid "Configuration file:"
msgstr "Konfigurationsdatei:"
@@ -407,7 +415,7 @@ msgstr "Fortfahren"
msgid "Continue without encryption"
msgstr "Ohne Verschlüsselung fortfahren"
#: scripts/services/AppUtils.js:560
#: scripts/services/AppUtils.js:563
msgid "Core options"
msgstr "Allgemeine Optionen"
@@ -479,7 +487,7 @@ msgstr "Benutzerdefinierte Server-URL ({{server}})"
msgid "Custom storage class ({{class}})"
msgstr "Benutzerdefinierte Speicher-Klasse ({{class}})"
#: scripts/services/AppUtils.js:53 templates/addoredit.html:242
#: scripts/services/AppUtils.js:56 templates/addoredit.html:242
msgid "Days"
msgstr "Tage"
@@ -545,13 +553,13 @@ msgstr ""
msgid "Disabled"
msgstr "Deaktiviert"
#: templates/notificationarea.html:13 templates/notificationarea.html:27
#: templates/notificationarea.html:10 templates/notificationarea.html:24
msgid "Dismiss"
msgstr "Verwerfen"
#: scripts/controllers/DeleteController.js:77
msgid "Do you really want to delete the backup: \"{{name}}\" ?"
msgstr "Möchtest du das Backup \"{{name}}\" wirklich löschen?"
msgstr "Backup \"{{name}}\" wirklich löschen?"
#: scripts/controllers/LocalDatabaseController.js:28
msgid "Do you really want to delete the local database for: {{name}}"
@@ -581,15 +589,15 @@ msgstr "Spenden-Links werden versteckt (jetzt anzeigen)"
msgid "Donation messages are visible, click to hide"
msgstr "Spendenlinks werden angezeigt (jetzt ausblenden)"
#: templates/export.html:48
#: templates/export.html:45
msgid "Done"
msgstr "Fertig"
#: templates/notificationarea.html:17
#: templates/notificationarea.html:14
msgid "Download"
msgstr "Herunterladen"
#: templates/notificationarea.html:30
#: templates/notificationarea.html:27
msgid "Downloading ..."
msgstr "Herunterladen..."
@@ -597,11 +605,11 @@ msgstr "Herunterladen..."
msgid "Downloading files ..."
msgstr "Dateien herunterladen..."
#: templates/notificationarea.html:24
#: templates/notificationarea.html:21
msgid "Downloading update..."
msgstr "Update Herunterladen..."
#: scripts/services/AppUtils.js:222
#: scripts/services/AppUtils.js:225
msgid "Duplicate option {{opt}}"
msgstr "doppelte Option {{opt}}"
@@ -611,6 +619,9 @@ msgid ""
" When deleting a backup, you can also delete the local database without affecting the ability to restore the remote files.\r\n"
" If you are using the local database for backups from the commandline, you should keep the database."
msgstr ""
"Jedes Backup hat eine lokale Datenbank.\n"
"Beim Löschen des Backups kann die lokale Datenbank, ohne die Wiederherstellung der Remote-Dateien zu beeinträchtigen.\n"
"Wenn Sie die lokale Datenbank für Backups von der Befehlszeile aus verwenden, sollten Sie die Datenbank behalten."
#: templates/localdatabase.html:8
msgid ""
@@ -691,7 +702,7 @@ msgstr "Ausdruck hier eingeben"
msgid "Enter folder path name"
msgstr "Ordnerpfad eingeben"
#: scripts/services/AppUtils.js:78
#: scripts/services/AppUtils.js:81
msgid "Enter one option per line in command-line format, eg. {0}"
msgstr "Gib eine Option pro Zeile an im Kommandozeilen-Format, z.B. {0}"
@@ -711,9 +722,9 @@ msgstr "Ziel-Pfad angeben"
#: scripts/controllers/RestoreController.js:85
#: scripts/controllers/RestoreDirectController.js:50
#: scripts/controllers/RestoreDirectController.js:75
#: scripts/services/AppUtils.js:222 scripts/services/AppUtils.js:268
#: scripts/services/AppUtils.js:270 scripts/services/AppUtils.js:278
#: scripts/services/AppUtils.js:280
#: scripts/services/AppUtils.js:225 scripts/services/AppUtils.js:271
#: scripts/services/AppUtils.js:273 scripts/services/AppUtils.js:281
#: scripts/services/AppUtils.js:283
msgid "Error"
msgstr "Fehler"
@@ -729,31 +740,31 @@ msgstr "Fehler und Abstürze"
msgid "Exclude"
msgstr "Ausschließen"
#: scripts/services/AppUtils.js:81
#: scripts/services/AppUtils.js:84
msgid "Exclude directories whose names contain"
msgstr "Ordner ausschließen dessen Namen beinhaltet"
#: scripts/services/AppUtils.js:124
#: scripts/services/AppUtils.js:127
msgid "Exclude expression"
msgstr "Filter (ausschließen)"
#: scripts/services/AppUtils.js:99
#: scripts/services/AppUtils.js:102
msgid "Exclude file"
msgstr "Datei ausschließen"
#: scripts/services/AppUtils.js:105
#: scripts/services/AppUtils.js:108
msgid "Exclude file extension"
msgstr "Dateiendung ausschließen"
#: scripts/services/AppUtils.js:87
#: scripts/services/AppUtils.js:90
msgid "Exclude files whose names contain"
msgstr "Dateien ausschließen dessen Namen beinhaltet"
#: scripts/services/AppUtils.js:93
#: scripts/services/AppUtils.js:96
msgid "Exclude folder"
msgstr "Ordner ausschließen"
#: scripts/services/AppUtils.js:110
#: scripts/services/AppUtils.js:113
msgid "Exclude regular expression"
msgstr "Regulären Ausdruck (ausschließen)"
@@ -821,7 +832,7 @@ msgstr "Konnte Standard-Einstellungen nicht lesen:"
msgid "Failed to restore files: {{message}}"
msgstr "Wiederherstellung der Dateien fehlgeschlagen: {{message}}"
#: scripts/controllers/SystemSettingsController.js:82
#: scripts/controllers/SystemSettingsController.js:85
msgid "Failed to save:"
msgstr "Fehler beim Speichern:"
@@ -857,15 +868,15 @@ msgstr "Ordner"
msgid "Force stop"
msgstr "Stoppen erzwingen"
#: scripts/services/AppUtils.js:64
#: scripts/services/AppUtils.js:67
msgid "Fri"
msgstr "Fr"
#: scripts/services/AppUtils.js:46
#: scripts/services/AppUtils.js:49
msgid "GByte"
msgstr "GByte"
#: scripts/services/AppUtils.js:73
#: scripts/services/AppUtils.js:76
msgid "GByte/s"
msgstr "GByte/s"
@@ -901,7 +912,7 @@ msgstr "Ausblenden"
msgid "Hide hidden folders"
msgstr "versteckte Ordner ausblenden"
#: scripts/services/AppUtils.js:52 templates/settings.html:33
#: scripts/services/AppUtils.js:55 templates/settings.html:33
msgid "Hours"
msgstr "Stunden"
@@ -909,6 +920,18 @@ msgstr "Stunden"
msgid "How do you want to handle existing files?"
msgstr "Wie sollen bestehende Dateien behandelt werden?"
#: scripts/directives/sourceFolderPicker.js:418
msgid "Hyper-V Machine:"
msgstr "Hyper-V Machine:"
#: scripts/directives/sourceFolderPicker.js:397
msgid "Hyper-V Machines"
msgstr "Hyper-V Machinen"
#: scripts/directives/sourceFolderPicker.js:51
msgid "ID:"
msgstr "ID:"
#: templates/addoredit.html:179
msgid "If a date was missed, the job will run as soon as possible."
msgstr "Wurde ein Zeitpunkt verpasst, startet das Backup so bald wie möglich."
@@ -923,10 +946,25 @@ msgstr ""
"Datenbank repariert werden.\\nSollte die Reparatur nicht erfolgreich sein, "
"so kann die lokale Datenbank gelöscht und neu erstellt werden."
#: templates/export.html:41 templates/notificationarea.html:7
msgid "If the backup file was not downloaded automatically,"
#: templates/export.html:41
msgid ""
"If the backup file was not downloaded automatically, <a "
"href=\"{{DownloadURL}}\" target=\"_blank\">right click and choose &quot;Save"
" as ...&quot;</a>"
msgstr ""
"Wenn die Backup-Dateien nicht automatisch heruntergeladen werden konnten,"
"Wenn die Sicherungsdatei nicht automatisch heruntergeladen wurde, <a "
"href=\"{{DownloadURL}}\" target=\"_blank\">klicken Sie mit der rechten "
"Maustaste und wählen Sie \"Speichern unter...\"</a>"
#: templates/notificationarea.html:7
msgid ""
"If the backup file was not downloaded automatically, <a "
"href=\"{{item.DownloadLink}}\" target=\"_blank\">right click and choose "
"&quot;Save as ...&quot;</a>"
msgstr ""
"Wenn die Sicherungsdatei nicht automatisch heruntergeladen wurde, <a "
"href=\"{{item.DownloadLink}}\" target=\"_blank\">klicken Sie mit der rechten"
" Maustaste und wählen Sie \"Speichern unter...\"</a>"
#: scripts/services/EditUriBackendConfig.js:99
msgid ""
@@ -946,6 +984,8 @@ msgid ""
"If you want to use the backup later, you can export the configuration before"
" deleting it"
msgstr ""
"Wenn Sie das Backup später verwenden möchten, kann die Konfiguration vor dem"
" Löschen exportiert werden"
#: templates/import.html:19
msgid "Import"
@@ -967,23 +1007,23 @@ msgstr "Importieren..."
msgid "Include a file?"
msgstr "Datei einfügen?"
#: scripts/services/AppUtils.js:120
#: scripts/services/AppUtils.js:123
msgid "Include expression"
msgstr "Filter (einschließen)"
#: scripts/services/AppUtils.js:115
#: scripts/services/AppUtils.js:118
msgid "Include regular expression"
msgstr "Regulären Ausdruck (einschließen)"
#: templates/captcha.html:11
msgid "Incorrect answer, try again"
msgstr ""
msgstr "Fehlerhafte Antwort, versuche es erneut"
#: templates/settings.html:83
msgid "Individual builds for developers only."
msgstr "Individuelle Versionen für Entwickler."
#: templates/notificationarea.html:28 templates/updatechangelog.html:10
#: templates/notificationarea.html:25 templates/updatechangelog.html:10
msgid "Install"
msgstr "Installieren"
@@ -994,7 +1034,7 @@ msgstr "Installation fehlgeschlagen:"
#: scripts/controllers/EditBackupController.js:235
#: scripts/controllers/EditBackupController.js:242
msgid "Invalid retention time"
msgstr ""
msgstr "Ungültige Aufbewahrungszeit"
#: scripts/services/EditUriBuiltins.js:535
msgid ""
@@ -1004,11 +1044,11 @@ msgstr ""
"Manche FTP-Server erlauben einen Login ohne Passwort.\n"
"Bist Du sicher, dass Dein FTP-Server dazu gehört?"
#: scripts/services/AppUtils.js:44
#: scripts/services/AppUtils.js:47
msgid "KByte"
msgstr "KByte"
#: scripts/services/AppUtils.js:71
#: scripts/services/AppUtils.js:74
msgid "KByte/s"
msgstr "KByte/s"
@@ -1042,7 +1082,7 @@ msgstr "Backups werden aufgelistet..."
#: scripts/services/ServerStatus.js:60
msgid "Listing remote files ..."
msgstr ""
msgstr "Auflisten von Remote-Dateien..."
#: templates/log.html:7
msgid "Live"
@@ -1061,7 +1101,7 @@ msgstr "Laden..."
#: templates/delete.html:40
msgid "Loading remote storage usage ..."
msgstr ""
msgstr "Remote-Speicherplatznutzung abfragen..."
#: templates/localdatabase.html:2
msgid "Local database for"
@@ -1087,11 +1127,11 @@ msgstr "Speicherort, wo die Buckets erstellt werden"
msgid "Log data"
msgstr "Log-Meldungen"
#: scripts/services/AppUtils.js:45
#: scripts/services/AppUtils.js:48
msgid "MByte"
msgstr "MByte"
#: scripts/services/AppUtils.js:72
#: scripts/services/AppUtils.js:75
msgid "MByte/s"
msgstr "MByte/s"
@@ -1111,7 +1151,7 @@ msgstr "Pfad eingeben"
msgid "Menu"
msgstr "Menü"
#: scripts/services/AppUtils.js:51 templates/settings.html:32
#: scripts/services/AppUtils.js:54 templates/settings.html:32
msgid "Minutes"
msgstr "Minuten"
@@ -1131,11 +1171,11 @@ msgstr "Passwort fehlt"
msgid "Missing sources"
msgstr "Quelle fehlt"
#: scripts/services/AppUtils.js:60
#: scripts/services/AppUtils.js:63
msgid "Mon"
msgstr "Mo"
#: scripts/services/AppUtils.js:55 templates/addoredit.html:244
#: scripts/services/AppUtils.js:58 templates/addoredit.html:244
msgid "Months"
msgstr "Monate"
@@ -1159,7 +1199,7 @@ msgstr "Name"
msgid "Never"
msgstr "Nie"
#: templates/notificationarea.html:22
#: templates/notificationarea.html:19
msgid "New update found: {{message}}"
msgstr "Neues Update verfügbar: {{message}}"
@@ -1256,8 +1296,8 @@ msgstr "OpenStack AuthURI"
msgid "OpenStack Object Storage / Swift"
msgstr "OpenStack Object Storage / Swift"
#: scripts/controllers/SystemSettingsController.js:104
#: scripts/controllers/SystemSettingsController.js:93
#: scripts/controllers/SystemSettingsController.js:107
#: scripts/controllers/SystemSettingsController.js:96
msgid "Operation failed:"
msgstr "Operation fehlgeschlagen:"
@@ -1454,7 +1494,7 @@ msgstr "Wiederherstellungsoptionen"
#: templates/restore.html:87
msgid "Restore read/write permissions"
msgstr "Scheib- und Leserechter wiederherstellen"
msgstr "Schreib- und Leserechte wiederherstellen"
#: scripts/controllers/RestoreController.js:344
#: scripts/controllers/RestoreController.js:365
@@ -1493,7 +1533,7 @@ msgstr "S3 Kompatibel"
msgid "Same as the base install version: {{channelname}}"
msgstr "Wie die zuerst installierte Version: {{channelname}}"
#: scripts/services/AppUtils.js:65
#: scripts/services/AppUtils.js:68
msgid "Sat"
msgstr "Sa"
@@ -1555,7 +1595,7 @@ msgstr "Server ist pausiert,"
#: scripts/controllers/HomeController.js:7
msgid "Server is currently paused, do you want to resume now?"
msgstr "Server ist pausiert, wollen Sie jetzt wieder aufnehmen?"
msgstr "Server ist zurzeit pausiert, Server starten?"
#: scripts/controllers/HomeController.js:7
msgid "Server paused"
@@ -1569,8 +1609,8 @@ msgstr "Server Zustandseigenschaften"
msgid "Settings"
msgstr "Einstellungen"
#: templates/addoredit.html:71 templates/notificationarea.html:15
#: templates/notificationarea.html:32
#: templates/addoredit.html:71 templates/notificationarea.html:12
#: templates/notificationarea.html:29
msgid "Show"
msgstr "Zeigen"
@@ -1603,6 +1643,10 @@ msgstr ""
msgid "Source Data"
msgstr "Quell-Daten"
#: scripts/directives/sourceFolderPicker.js:367
msgid "Source data"
msgstr "Quell-Daten"
#: templates/addoredit.html:104
msgid "Source folders"
msgstr "Quell-Verzeichnisse"
@@ -1652,7 +1696,7 @@ msgstr "Gespeichert"
msgid "Strong"
msgstr "Stark"
#: scripts/services/AppUtils.js:66
#: scripts/services/AppUtils.js:69
msgid "Sun"
msgstr "So"
@@ -1672,11 +1716,11 @@ msgstr "System-Informationen"
msgid "System properties"
msgstr "System-Eigenschaften"
#: scripts/services/AppUtils.js:47
#: scripts/services/AppUtils.js:50
msgid "TByte"
msgstr "TByte"
#: scripts/services/AppUtils.js:74
#: scripts/services/AppUtils.js:77
msgid "TByte/s"
msgstr "TByte/s"
@@ -1731,11 +1775,11 @@ msgstr ""
#: scripts/controllers/EditBackupController.js:131
msgid ""
"The path does not end with a '{0}' character, which means that you include a file, not a folder.\n"
"The path does not end with a '{{dirsep}}' character, which means that you include a file, not a folder.\n"
"\n"
"Do you want to include the specified file?"
msgstr ""
"Ohne das abschließende '{0}' fügst du eine Datei hinzu und kein Verzeichnis.\n"
"Ohne das abschließende '{{dirsep}}' fügst du eine Datei hinzu und kein Verzeichnis.\n"
"\n"
"Möchtest du diese Datei hinzufügen?"
@@ -1770,7 +1814,8 @@ msgstr ""
#: templates/backends/s3.html:40
msgid "The storage class affects the availability and price for a stored file"
msgstr ""
"The storage class affects the availability and price for a stored file"
"Die Speicherklasse wirkt sich auf die Verfügbarkeit und den Preis einer "
"gespeicherten Datei aus"
#: scripts/controllers/RestoreDirectController.js:71
msgid ""
@@ -1793,7 +1838,7 @@ msgstr "Dieser Monat"
msgid "This week"
msgstr "Diese Woche"
#: scripts/services/AppUtils.js:63
#: scripts/services/AppUtils.js:66
msgid "Thu"
msgstr "Do"
@@ -1806,6 +1851,8 @@ msgid ""
"To confirm you want to delete all remote files for \"{{name}}\", please "
"enter the word you see below"
msgstr ""
"Zum Bestätigen für das Löschen der Remote-Dateien für \"{{name}}\", bitte "
"das unten angegebene Wort eingeben"
#: scripts/controllers/ExportController.js:10
msgid "To export without a passphrase, uncheck the \"Encrypt file\" box"
@@ -1823,7 +1870,7 @@ msgstr ""
"Neue Funktionen ausprobieren. Nutze diese Versionen nicht mit wichtigen "
"Backups!"
#: scripts/services/AppUtils.js:61
#: scripts/services/AppUtils.js:64
msgid "Tue"
msgstr "Di"
@@ -1892,6 +1939,10 @@ msgstr "Schwaches Passwort nutzen"
msgid "Useless"
msgstr "Nutzlos"
#: scripts/directives/sourceFolderPicker.js:354
msgid "User data"
msgstr "Benutzer Daten"
#: scripts/services/EditUriBuiltins.js:45
msgid "User has too many permissions"
msgstr "Nutzer hat zu viele Rechte"
@@ -1921,13 +1972,13 @@ msgid "Verify files"
msgstr "Backup prüfen"
#: scripts/services/CaptchaService.js:32 scripts/services/ServerStatus.js:58
#: templates/notificationarea.html:31
#: templates/notificationarea.html:28
msgid "Verifying ..."
msgstr "Prüfen..."
#: scripts/services/CaptchaService.js:32
msgid "Verifying answer"
msgstr ""
msgstr "Antwort verifizieren"
#: scripts/services/ServerStatus.js:34 scripts/services/ServerStatus.js:43
msgid "Verifying backend data ..."
@@ -1958,10 +2009,13 @@ msgid ""
"WARNING: The remote database is found to be in use by the commandline "
"library"
msgstr ""
"WARNUNG: Die Remote-Datenbank wird bereits von der Kommandozeilen Bibliothek"
" verwendet"
#: templates/delete.html:44
msgid "WARNING: This will prevent you from restoring the data in the future."
msgstr ""
"WARNUNG: Dadurch können Sie die Daten in Zukunft nicht wiederherstellen."
#: templates/waitarea.html:2
msgid "Waiting for task to begin"
@@ -1987,11 +2041,11 @@ msgstr "Schwach"
msgid "Weak passphrase"
msgstr "Schwaches Passwort"
#: scripts/services/AppUtils.js:62
#: scripts/services/AppUtils.js:65
msgid "Wed"
msgstr "Mi"
#: scripts/services/AppUtils.js:54 templates/addoredit.html:243
#: scripts/services/AppUtils.js:57 templates/addoredit.html:243
msgid "Weeks"
msgstr "Wochen"
@@ -1999,7 +2053,7 @@ msgstr "Wochen"
msgid "Where do you want to restore the files to?"
msgstr "Wohin sollen die Dateien wiederhergestellt werden?"
#: scripts/services/AppUtils.js:56 templates/addoredit.html:245
#: scripts/services/AppUtils.js:59 templates/addoredit.html:245
msgid "Years"
msgstr "Jahre"
@@ -2097,7 +2151,7 @@ msgstr "Gib das Passwort ein, um die Verschlüsselung zu deaktivieren"
#: scripts/controllers/EditBackupController.js:242
msgid "You must enter a positive number of backups to keep"
msgstr ""
msgstr "Sie müssen eine positive Nummer der zu behaltenden Backups eingeben"
#: scripts/services/EditUriBuiltins.js:622
msgid "You must enter a tenant name if you do not provide an API Key"
@@ -2106,6 +2160,7 @@ msgstr "Gib einen Kundennamen an, wenn Du keinen API-Key hast."
#: scripts/controllers/EditBackupController.js:235
msgid "You must enter a valid duration for the time to keep backups"
msgstr ""
"Sie müssen einen gültigen Zeitraum für zu behaltenden Backups eingeben"
#: scripts/services/EditUriBuiltins.js:619
msgid "You must enter either a password or an API Key"
@@ -2160,11 +2215,11 @@ msgstr "eine Anzahl"
msgid "bucket/folder/subfolder"
msgstr "Bucket/Ordner/Unterordner"
#: scripts/services/AppUtils.js:43
#: scripts/services/AppUtils.js:46
msgid "byte"
msgstr "byte"
#: scripts/services/AppUtils.js:70
#: scripts/services/AppUtils.js:73
msgid "byte/s"
msgstr "Byte/s"
@@ -2193,10 +2248,6 @@ msgstr "Jetzt starten"
msgid "resuming in"
msgstr "starte in"
#: templates/export.html:43 templates/notificationarea.html:9
msgid "right click and choose &quot;Save as ...&quot;"
msgstr "Rechtsklick und &quot;Speichern unter...&quot; auswählen"
#: templates/about.html:11
msgid ""
"{{appname}} was primarily developed by <a href=\"{{mail1}}\">{{dev1}}</a> "
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+88 -62
View File
@@ -55,7 +55,7 @@ msgstr ""
msgid "Account name"
msgstr ""
#: templates/notificationarea.html:29
#: templates/notificationarea.html:26
#: templates/updatechangelog.html:11
msgid "Activate"
msgstr ""
@@ -103,6 +103,10 @@ msgstr ""
msgid "Advanced:"
msgstr ""
#: scripts/directives/sourceFolderPicker.js:403
msgid "All Hyper-V Machines"
msgstr ""
#: templates/settings.html:106
msgid "All usage reports are sent anonymously and do not contain any personal information. They contain information about hardware and operating system, the type of backend, backup duration, overall size of source data and similar data. They do not contain paths, filenames, usernames, passwords or similar sensitive information."
msgstr ""
@@ -347,6 +351,10 @@ msgstr ""
msgid "Compression modules:"
msgstr ""
#: scripts/directives/sourceFolderPicker.js:361
msgid "Computer"
msgstr ""
#: templates/import.html:6
msgid "Configuration file:"
msgstr ""
@@ -406,7 +414,7 @@ msgstr ""
msgid "Continue without encryption"
msgstr ""
#: scripts/services/AppUtils.js:560
#: scripts/services/AppUtils.js:563
msgid "Core options"
msgstr ""
@@ -480,7 +488,7 @@ msgstr ""
msgid "Custom storage class ({{class}})"
msgstr ""
#: scripts/services/AppUtils.js:53
#: scripts/services/AppUtils.js:56
#: templates/addoredit.html:242
msgid "Days"
msgstr ""
@@ -543,8 +551,8 @@ msgstr ""
msgid "Disabled"
msgstr ""
#: templates/notificationarea.html:13
#: templates/notificationarea.html:27
#: templates/notificationarea.html:10
#: templates/notificationarea.html:24
msgid "Dismiss"
msgstr ""
@@ -584,15 +592,15 @@ msgstr ""
msgid "Donation messages are visible, click to hide"
msgstr ""
#: templates/export.html:48
#: templates/export.html:45
msgid "Done"
msgstr ""
#: templates/notificationarea.html:17
#: templates/notificationarea.html:14
msgid "Download"
msgstr ""
#: templates/notificationarea.html:30
#: templates/notificationarea.html:27
msgid "Downloading ..."
msgstr ""
@@ -600,11 +608,11 @@ msgstr ""
msgid "Downloading files ..."
msgstr ""
#: templates/notificationarea.html:24
#: templates/notificationarea.html:21
msgid "Downloading update..."
msgstr ""
#: scripts/services/AppUtils.js:222
#: scripts/services/AppUtils.js:225
msgid "Duplicate option {{opt}}"
msgstr ""
@@ -692,7 +700,7 @@ msgstr ""
msgid "Enter folder path name"
msgstr ""
#: scripts/services/AppUtils.js:78
#: scripts/services/AppUtils.js:81
msgid "Enter one option per line in command-line format, eg. {0}"
msgstr ""
@@ -714,11 +722,11 @@ msgstr ""
#: scripts/controllers/RestoreController.js:85
#: scripts/controllers/RestoreDirectController.js:50
#: scripts/controllers/RestoreDirectController.js:75
#: scripts/services/AppUtils.js:222
#: scripts/services/AppUtils.js:268
#: scripts/services/AppUtils.js:270
#: scripts/services/AppUtils.js:278
#: scripts/services/AppUtils.js:280
#: scripts/services/AppUtils.js:225
#: scripts/services/AppUtils.js:271
#: scripts/services/AppUtils.js:273
#: scripts/services/AppUtils.js:281
#: scripts/services/AppUtils.js:283
msgid "Error"
msgstr ""
@@ -734,31 +742,31 @@ msgstr ""
msgid "Exclude"
msgstr ""
#: scripts/services/AppUtils.js:81
#: scripts/services/AppUtils.js:84
msgid "Exclude directories whose names contain"
msgstr ""
#: scripts/services/AppUtils.js:124
#: scripts/services/AppUtils.js:127
msgid "Exclude expression"
msgstr ""
#: scripts/services/AppUtils.js:99
#: scripts/services/AppUtils.js:102
msgid "Exclude file"
msgstr ""
#: scripts/services/AppUtils.js:105
#: scripts/services/AppUtils.js:108
msgid "Exclude file extension"
msgstr ""
#: scripts/services/AppUtils.js:87
#: scripts/services/AppUtils.js:90
msgid "Exclude files whose names contain"
msgstr ""
#: scripts/services/AppUtils.js:93
#: scripts/services/AppUtils.js:96
msgid "Exclude folder"
msgstr ""
#: scripts/services/AppUtils.js:110
#: scripts/services/AppUtils.js:113
msgid "Exclude regular expression"
msgstr ""
@@ -827,7 +835,7 @@ msgstr ""
msgid "Failed to restore files: {{message}}"
msgstr ""
#: scripts/controllers/SystemSettingsController.js:82
#: scripts/controllers/SystemSettingsController.js:85
msgid "Failed to save:"
msgstr ""
@@ -868,15 +876,15 @@ msgstr ""
msgid "Force stop"
msgstr ""
#: scripts/services/AppUtils.js:64
#: scripts/services/AppUtils.js:67
msgid "Fri"
msgstr ""
#: scripts/services/AppUtils.js:46
#: scripts/services/AppUtils.js:49
msgid "GByte"
msgstr ""
#: scripts/services/AppUtils.js:73
#: scripts/services/AppUtils.js:76
msgid "GByte/s"
msgstr ""
@@ -915,7 +923,7 @@ msgstr ""
msgid "Hide hidden folders"
msgstr ""
#: scripts/services/AppUtils.js:52
#: scripts/services/AppUtils.js:55
#: templates/settings.html:33
msgid "Hours"
msgstr ""
@@ -924,6 +932,18 @@ msgstr ""
msgid "How do you want to handle existing files?"
msgstr ""
#: scripts/directives/sourceFolderPicker.js:418
msgid "Hyper-V Machine:"
msgstr ""
#: scripts/directives/sourceFolderPicker.js:397
msgid "Hyper-V Machines"
msgstr ""
#: scripts/directives/sourceFolderPicker.js:51
msgid "ID:"
msgstr ""
#: templates/addoredit.html:179
msgid "If a date was missed, the job will run as soon as possible."
msgstr ""
@@ -933,8 +953,11 @@ msgid "If the backup and the remote storage is out of sync, Duplicati will requi
msgstr ""
#: templates/export.html:41
msgid "If the backup file was not downloaded automatically, <a href=\"{{DownloadURL}}\" target=\"_blank\">right click and choose &quot;Save as ...&quot;</a>"
msgstr ""
#: templates/notificationarea.html:7
msgid "If the backup file was not downloaded automatically,"
msgid "If the backup file was not downloaded automatically, <a href=\"{{item.DownloadLink}}\" target=\"_blank\">right click and choose &quot;Save as ...&quot;</a>"
msgstr ""
#: scripts/services/EditUriBackendConfig.js:99
@@ -971,11 +994,11 @@ msgstr ""
msgid "Include a file?"
msgstr ""
#: scripts/services/AppUtils.js:120
#: scripts/services/AppUtils.js:123
msgid "Include expression"
msgstr ""
#: scripts/services/AppUtils.js:115
#: scripts/services/AppUtils.js:118
msgid "Include regular expression"
msgstr ""
@@ -987,7 +1010,7 @@ msgstr ""
msgid "Individual builds for developers only."
msgstr ""
#: templates/notificationarea.html:28
#: templates/notificationarea.html:25
#: templates/updatechangelog.html:10
msgid "Install"
msgstr ""
@@ -1007,11 +1030,11 @@ msgid ""
"Are you sure your FTP server supports password-less logins?"
msgstr ""
#: scripts/services/AppUtils.js:44
#: scripts/services/AppUtils.js:47
msgid "KByte"
msgstr ""
#: scripts/services/AppUtils.js:71
#: scripts/services/AppUtils.js:74
msgid "KByte/s"
msgstr ""
@@ -1099,11 +1122,11 @@ msgstr ""
msgid "Log data"
msgstr ""
#: scripts/services/AppUtils.js:45
#: scripts/services/AppUtils.js:48
msgid "MByte"
msgstr ""
#: scripts/services/AppUtils.js:72
#: scripts/services/AppUtils.js:75
msgid "MByte/s"
msgstr ""
@@ -1124,7 +1147,7 @@ msgstr ""
msgid "Menu"
msgstr ""
#: scripts/services/AppUtils.js:51
#: scripts/services/AppUtils.js:54
#: templates/settings.html:32
msgid "Minutes"
msgstr ""
@@ -1145,11 +1168,11 @@ msgstr ""
msgid "Missing sources"
msgstr ""
#: scripts/services/AppUtils.js:60
#: scripts/services/AppUtils.js:63
msgid "Mon"
msgstr ""
#: scripts/services/AppUtils.js:55
#: scripts/services/AppUtils.js:58
#: templates/addoredit.html:244
msgid "Months"
msgstr ""
@@ -1174,7 +1197,7 @@ msgstr ""
msgid "Never"
msgstr ""
#: templates/notificationarea.html:22
#: templates/notificationarea.html:19
msgid "New update found: {{message}}"
msgstr ""
@@ -1271,8 +1294,8 @@ msgstr ""
msgid "OpenStack Object Storage / Swift"
msgstr ""
#: scripts/controllers/SystemSettingsController.js:104
#: scripts/controllers/SystemSettingsController.js:93
#: scripts/controllers/SystemSettingsController.js:107
#: scripts/controllers/SystemSettingsController.js:96
msgid "Operation failed:"
msgstr ""
@@ -1520,7 +1543,7 @@ msgstr ""
msgid "Same as the base install version: {{channelname}}"
msgstr ""
#: scripts/services/AppUtils.js:65
#: scripts/services/AppUtils.js:68
msgid "Sat"
msgstr ""
@@ -1600,8 +1623,8 @@ msgid "Settings"
msgstr ""
#: templates/addoredit.html:71
#: templates/notificationarea.html:15
#: templates/notificationarea.html:32
#: templates/notificationarea.html:12
#: templates/notificationarea.html:29
msgid "Show"
msgstr ""
@@ -1632,6 +1655,10 @@ msgstr ""
msgid "Source Data"
msgstr ""
#: scripts/directives/sourceFolderPicker.js:367
msgid "Source data"
msgstr ""
#: templates/addoredit.html:104
msgid "Source folders"
msgstr ""
@@ -1683,7 +1710,7 @@ msgstr ""
msgid "Strong"
msgstr ""
#: scripts/services/AppUtils.js:66
#: scripts/services/AppUtils.js:69
msgid "Sun"
msgstr ""
@@ -1703,11 +1730,11 @@ msgstr ""
msgid "System properties"
msgstr ""
#: scripts/services/AppUtils.js:47
#: scripts/services/AppUtils.js:50
msgid "TByte"
msgstr ""
#: scripts/services/AppUtils.js:74
#: scripts/services/AppUtils.js:77
msgid "TByte/s"
msgstr ""
@@ -1757,7 +1784,7 @@ msgstr ""
#: scripts/controllers/EditBackupController.js:131
msgid ""
"The path does not end with a '{0}' character, which means that you include a file, not a folder.\n"
"The path does not end with a '{{dirsep}}' character, which means that you include a file, not a folder.\n"
"\n"
"Do you want to include the specified file?"
msgstr ""
@@ -1801,7 +1828,7 @@ msgstr ""
msgid "This week"
msgstr ""
#: scripts/services/AppUtils.js:63
#: scripts/services/AppUtils.js:66
msgid "Thu"
msgstr ""
@@ -1825,7 +1852,7 @@ msgstr ""
msgid "Try out the new features we are working on. Don't use with important data."
msgstr ""
#: scripts/services/AppUtils.js:61
#: scripts/services/AppUtils.js:64
msgid "Tue"
msgstr ""
@@ -1890,6 +1917,10 @@ msgstr ""
msgid "Useless"
msgstr ""
#: scripts/directives/sourceFolderPicker.js:354
msgid "User data"
msgstr ""
#: scripts/services/EditUriBuiltins.js:45
msgid "User has too many permissions"
msgstr ""
@@ -1923,7 +1954,7 @@ msgstr ""
#: scripts/services/CaptchaService.js:32
#: scripts/services/ServerStatus.js:58
#: templates/notificationarea.html:31
#: templates/notificationarea.html:28
msgid "Verifying ..."
msgstr ""
@@ -1989,11 +2020,11 @@ msgstr ""
msgid "Weak passphrase"
msgstr ""
#: scripts/services/AppUtils.js:62
#: scripts/services/AppUtils.js:65
msgid "Wed"
msgstr ""
#: scripts/services/AppUtils.js:54
#: scripts/services/AppUtils.js:57
#: templates/addoredit.html:243
msgid "Weeks"
msgstr ""
@@ -2002,7 +2033,7 @@ msgstr ""
msgid "Where do you want to restore the files to?"
msgstr ""
#: scripts/services/AppUtils.js:56
#: scripts/services/AppUtils.js:59
#: templates/addoredit.html:245
msgid "Years"
msgstr ""
@@ -2146,11 +2177,11 @@ msgstr ""
msgid "bucket/folder/subfolder"
msgstr ""
#: scripts/services/AppUtils.js:43
#: scripts/services/AppUtils.js:46
msgid "byte"
msgstr ""
#: scripts/services/AppUtils.js:70
#: scripts/services/AppUtils.js:73
msgid "byte/s"
msgstr ""
@@ -2181,11 +2212,6 @@ msgstr ""
msgid "resuming in"
msgstr ""
#: templates/export.html:43
#: templates/notificationarea.html:9
msgid "right click and choose &quot;Save as ...&quot;"
msgstr ""
#: templates/about.html:11
msgid "{{appname}} was primarily developed by <a href=\"{{mail1}}\">{{dev1}}</a> and <a href=\"{{mail2}}\">{{dev2}}</a>. {{appname}} can be downloaded from <a href=\"{{websitelink}}\">{{websitename}}</a>. {{appname}} is licensed under the <a href=\"{{licenselink}}\">{{licensename}}</a>."
msgstr ""
+1 -1
View File
@@ -1 +1 @@
28
29
+13
View File
@@ -1,3 +1,16 @@
2016-10-27 - 2.0.1.29_canary_2016-10-27
==========
* Better support for LVM snapshots, thanks @a1ezzz
* Fixed additional Debian dependencies, thanks @a1ezzz
* Additional translation files, Spanish and French
* Improved HyperV support from CLI and UI, thanks @mnaiman and @agrajaghh
* Fixed a bug with log-spam from Windows Service, thanks @mnaiman
* Fixed issue with backup metadata and user that do not exist locally, thanks @gerco
* Improved screen reading support
* Fixed OSX icon on dark statusbar
* Fixed crashes on Linux related to icon format
* Updated GTK support and switched to SVG icons
2016-10-19
==========
* Some additions to the translation system
+20 -2
View File
@@ -238,8 +238,26 @@ namespace UnixSupport
UID = fse.OwnerUserId;
GID = fse.OwnerGroupId;
Permissions = (long)fse.FileAccessPermissions;
OwnerName = fse.OwnerUser.UserName;
GroupName = fse.OwnerGroup.GroupName;
try
{
OwnerName = fse.OwnerUser.UserName;
}
catch (ArgumentException)
{
// Could not retrieve user name, possibly the user is not defined on the local system
OwnerName = null;
}
try
{
GroupName = fse.OwnerGroup.GroupName;
}
catch (ArgumentException)
{
// Could not retrieve group name, possibly the group is not defined on the local system
GroupName = null;
}
}
}