From 721591d3e305a2bc9152cb94fe6f44b8c1cd91e4 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Wed, 30 May 2012 12:10:56 -0400 Subject: [PATCH] Added a Deletion Options dialog that pops up when Send to Trash is triggered. It offers hardlink and direct deletion options. This new feature supersedes the old "Send to Trash and Hardlink" menu item, which was removed. --- build.py | 6 +- cocoa/base/DeletionOptions.h | 25 + cocoa/base/DeletionOptions.m | 58 ++ cocoa/base/ResultWindow.h | 6 +- cocoa/base/ResultWindow.m | 24 +- cocoa/base/en.lproj/DeletionOptions.strings | 21 + cocoa/base/en.lproj/DeletionOptions.xib | 556 ++++++++++++++++++++ cocoa/base/en.lproj/MainMenu.strings | 3 - cocoa/base/en.lproj/MainMenu.xib | 123 +++-- cocoa/base/en.lproj/ResultWindow.strings | 3 - cocoa/base/en.lproj/ResultWindow.xib | 85 +-- cocoa/inter/all.py | 9 + cocoa/inter/app.py | 6 +- cocoa/inter/deletion_options.py | 27 + cocoa/me/dg_cocoa.py | 9 +- cocoa/me/dupeguru.xcodeproj/project.pbxproj | 56 ++ cocoa/pe/dg_cocoa.py | 9 +- cocoa/pe/dupeguru.xcodeproj/project.pbxproj | 56 ++ cocoa/se/dg_cocoa.py | 9 +- cocoa/se/dupeguru.xcodeproj/project.pbxproj | 56 ++ core/app.py | 32 +- core/gui/deletion_options.py | 23 + locale/core.pot | 52 +- locale/cs/LC_MESSAGES/core.po | 52 +- locale/cs/LC_MESSAGES/ui.po | 154 +++--- locale/de/LC_MESSAGES/core.po | 52 +- locale/de/LC_MESSAGES/ui.po | 154 +++--- locale/fr/LC_MESSAGES/core.po | 57 +- locale/fr/LC_MESSAGES/ui.po | 156 +++--- locale/hy/LC_MESSAGES/core.po | 52 +- locale/hy/LC_MESSAGES/ui.po | 154 +++--- locale/it/LC_MESSAGES/core.po | 51 +- locale/it/LC_MESSAGES/ui.po | 154 +++--- locale/ru/LC_MESSAGES/core.po | 52 +- locale/ru/LC_MESSAGES/ui.po | 154 +++--- locale/ui.pot | 170 +++--- locale/uk/LC_MESSAGES/columns.po | 40 +- locale/uk/LC_MESSAGES/core.po | 77 ++- locale/uk/LC_MESSAGES/ui.po | 392 +++++++------- locale/zh_CN/LC_MESSAGES/core.po | 52 +- locale/zh_CN/LC_MESSAGES/ui.po | 154 +++--- qt/base/app.py | 2 + qt/base/deletion_options.py | 64 +++ qt/base/result_window.py | 9 - 44 files changed, 2249 insertions(+), 1207 deletions(-) create mode 100644 cocoa/base/DeletionOptions.h create mode 100644 cocoa/base/DeletionOptions.m create mode 100644 cocoa/base/en.lproj/DeletionOptions.strings create mode 100644 cocoa/base/en.lproj/DeletionOptions.xib create mode 100644 cocoa/inter/all.py create mode 100644 cocoa/inter/deletion_options.py create mode 100644 core/gui/deletion_options.py create mode 100644 qt/base/deletion_options.py diff --git a/build.py b/build.py index 4b342747..ffa885cc 100644 --- a/build.py +++ b/build.py @@ -198,6 +198,7 @@ def build_cocoa_bridging_interfaces(edition): add_to_pythonpath('cocoalib') from cocoa.inter import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline, OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyFairware) + from inter.deletion_options import PyDeletionOptions, DeletionOptionsView from inter.details_panel import PyDetailsPanel, DetailsPanelView from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView from inter.prioritize_dialog import PyPrioritizeDialog, PrioritizeDialogView @@ -210,12 +211,13 @@ def build_cocoa_bridging_interfaces(edition): appmod = importlib.import_module('inter.app_{}'.format(edition)) allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyFairware, PyDetailsPanel, PyDirectoryOutline, PyPrioritizeDialog, PyPrioritizeList, PyProblemDialog, - PyIgnoreListDialog, PyResultTable, PyStatsLabel, PyDupeGuruBase, appmod.PyDupeGuru] + PyIgnoreListDialog, PyDeletionOptions, PyResultTable, PyStatsLabel, PyDupeGuruBase, + appmod.PyDupeGuru] for class_ in allclasses: objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True) allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView, DetailsPanelView, DirectoryOutlineView, PrioritizeDialogView, PrioritizeListView, - IgnoreListDialogView, ResultTableView, StatsLabelView, DupeGuruView] + IgnoreListDialogView, DeletionOptionsView, ResultTableView, StatsLabelView, DupeGuruView] clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses] objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m') build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m']) diff --git a/cocoa/base/DeletionOptions.h b/cocoa/base/DeletionOptions.h new file mode 100644 index 00000000..1df2bec0 --- /dev/null +++ b/cocoa/base/DeletionOptions.h @@ -0,0 +1,25 @@ +/* +Copyright 2012 Hardcoded Software (http://www.hardcoded.net) + +This software is licensed under the "BSD" License as described in the "LICENSE" file, +which should be included with this package. The terms are also available at +http://www.hardcoded.net/licenses/bsd_license +*/ + +#import +#import "PyDeletionOptions.h" + +@interface DeletionOptions : NSWindowController +{ + IBOutlet NSTextField *messageTextField; + IBOutlet NSButton *hardlinkButton; + IBOutlet NSButton *directButton; + + PyDeletionOptions *model; +} +- (id)initWithPyRef:(PyObject *)aPyRef; + +- (IBAction)updateOptions:(id)sender; +- (IBAction)proceed:(id)sender; +- (IBAction)cancel:(id)sender; +@end \ No newline at end of file diff --git a/cocoa/base/DeletionOptions.m b/cocoa/base/DeletionOptions.m new file mode 100644 index 00000000..b7049da5 --- /dev/null +++ b/cocoa/base/DeletionOptions.m @@ -0,0 +1,58 @@ +/* +Copyright 2012 Hardcoded Software (http://www.hardcoded.net) + +This software is licensed under the "BSD" License as described in the "LICENSE" file, +which should be included with this package. The terms are also available at +http://www.hardcoded.net/licenses/bsd_license +*/ + +#import "DeletionOptions.h" +#import "HSPyUtil.h" + +@implementation DeletionOptions +- (id)initWithPyRef:(PyObject *)aPyRef +{ + self = [super initWithWindowNibName:@"DeletionOptions"]; + [self window]; + model = [[PyDeletionOptions alloc] initWithModel:aPyRef]; + [model bindCallback:createCallback(@"DeletionOptionsView", self)]; + return self; +} + +- (void)dealloc +{ + [model release]; + [super dealloc]; +} + +- (IBAction)updateOptions:(id)sender +{ + [model setHardlink:[hardlinkButton state] == NSOnState]; + [model setDirect:[directButton state] == NSOnState]; +} + +- (IBAction)proceed:(id)sender +{ + [NSApp stopModalWithCode:NSOKButton]; +} + +- (IBAction)cancel:(id)sender +{ + [NSApp stopModalWithCode:NSCancelButton]; +} + +/* model --> view */ +- (void)updateMsg:(NSString *)msg +{ + [messageTextField setStringValue:msg]; +} + +- (BOOL)show +{ + [hardlinkButton setState:NSOffState]; + [directButton setState:NSOffState]; + NSInteger r = [NSApp runModalForWindow:[self window]]; + [[self window] close]; + return r == NSOKButton; +} +@end \ No newline at end of file diff --git a/cocoa/base/ResultWindow.h b/cocoa/base/ResultWindow.h index 8737d78f..33f85a1e 100644 --- a/cocoa/base/ResultWindow.h +++ b/cocoa/base/ResultWindow.h @@ -11,6 +11,7 @@ http://www.hardcoded.net/licenses/bsd_license #import "StatsLabel.h" #import "ResultTable.h" #import "ProblemDialog.h" +#import "DeletionOptions.h" #import "HSTableView.h" #import "PyDupeGuru.h" @@ -31,6 +32,7 @@ http://www.hardcoded.net/licenses/bsd_license ResultTable *table; StatsLabel *statsLabel; ProblemDialog *problemDialog; + DeletionOptions *deletionOptions; QLPreviewPanel* previewPanel; } - (id)initWithParentApp:(AppDelegateBase *)app; @@ -41,7 +43,6 @@ http://www.hardcoded.net/licenses/bsd_license /* Helpers */ - (void)fillColumnsMenu; -- (void)sendMarkedToTrash:(BOOL)hardlinkDeleted; - (void)updateOptionSegments; - (void)showProblemDialog; - (void)adjustUIToLocalization; @@ -49,8 +50,7 @@ http://www.hardcoded.net/licenses/bsd_license /* Actions */ - (IBAction)changeOptions:(id)sender; - (IBAction)copyMarked:(id)sender; -- (IBAction)deleteMarked:(id)sender; -- (IBAction)hardlinkMarked:(id)sender; +- (IBAction)trashMarked:(id)sender; - (IBAction)exportToXHTML:(id)sender; - (IBAction)filter:(id)sender; - (IBAction)ignoreSelected:(id)sender; diff --git a/cocoa/base/ResultWindow.m b/cocoa/base/ResultWindow.m index db5215f8..beef0980 100644 --- a/cocoa/base/ResultWindow.m +++ b/cocoa/base/ResultWindow.m @@ -27,6 +27,7 @@ http://www.hardcoded.net/licenses/bsd_license table = [[ResultTable alloc] initWithPyRef:[model resultTable] view:matches]; statsLabel = [[StatsLabel alloc] initWithPyRef:[model statsLabel] view:stats]; problemDialog = [[ProblemDialog alloc] initWithPyRef:[model problemDialog]]; + deletionOptions = [[DeletionOptions alloc] initWithPyRef:[model deletionOptions]]; [self initResultColumns]; [self fillColumnsMenu]; [matches setTarget:self]; @@ -74,18 +75,6 @@ http://www.hardcoded.net/licenses/bsd_license [mi setTarget:self]; } -- (void)sendMarkedToTrash:(BOOL)hardlinkDeleted -{ - NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - [model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])]; - if (hardlinkDeleted) { - [model hardlinkMarked]; - } - else { - [model deleteMarked]; - } -} - - (void)updateOptionSegments { [optionsSwitch setSelected:[[app detailsPanel] isVisible] forSegment:0]; @@ -145,14 +134,11 @@ http://www.hardcoded.net/licenses/bsd_license [model copyMarked]; } -- (IBAction)deleteMarked:(id)sender +- (IBAction)trashMarked:(id)sender { - [self sendMarkedToTrash:NO]; -} - -- (IBAction)hardlinkMarked:(id)sender -{ - [self sendMarkedToTrash:YES]; + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + [model setRemoveEmptyFolders:n2b([ud objectForKey:@"removeEmptyFolders"])]; + [model deleteMarked]; } - (IBAction)exportToXHTML:(id)sender diff --git a/cocoa/base/en.lproj/DeletionOptions.strings b/cocoa/base/en.lproj/DeletionOptions.strings new file mode 100644 index 00000000..ebe071a6 --- /dev/null +++ b/cocoa/base/en.lproj/DeletionOptions.strings @@ -0,0 +1,21 @@ + +/* Class = "NSWindow"; title = "Deletion Options"; ObjectID = "1"; */ +"1.title" = "Deletion Options"; + +/* Class = "NSButtonCell"; title = "Hardlink deleted files"; ObjectID = "4"; */ +"4.title" = "Hardlink deleted files"; + +/* Class = "NSTextFieldCell"; title = "After having deleted a duplicate, place a hardlink targeting the reference file to replace the deleted file."; ObjectID = "8"; */ +"8.title" = "After having deleted a duplicate, place a hardlink targeting the reference file to replace the deleted file."; + +/* Class = "NSButtonCell"; title = "Directly delete files"; ObjectID = "36"; */ +"36.title" = "Directly delete files"; + +/* Class = "NSTextFieldCell"; title = "Instead of sending files to trash, delete them directly. This option is usually used as a workaround when the normal deletion method doesn't work."; ObjectID = "38"; */ +"38.title" = "Instead of sending files to trash, delete them directly. This option is usually used as a workaround when the normal deletion method doesn't work."; + +/* Class = "NSButtonCell"; title = "Proceed"; ObjectID = "40"; */ +"40.title" = "Proceed"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "42"; */ +"42.title" = "Cancel"; diff --git a/cocoa/base/en.lproj/DeletionOptions.xib b/cocoa/base/en.lproj/DeletionOptions.xib new file mode 100644 index 00000000..572e42a1 --- /dev/null +++ b/cocoa/base/en.lproj/DeletionOptions.xib @@ -0,0 +1,556 @@ + + + + 1060 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 2182 + + + NSTextField + NSView + NSWindowTemplate + NSTextFieldCell + NSButtonCell + NSButton + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + DeletionOptions + + + FirstResponder + + + NSApplication + + + 3 + 2 + {{196, 240}, {449, 215}} + 1618477056 + Deletion Options + NSWindow + + + + + 256 + + + + 268 + {{18, 154}, {413, 18}} + + + + _NS:9 + YES + + 67239424 + 0 + Hardlink deleted files + + LucidaGrande + 13 + 1044 + + _NS:9 + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 268 + {{18, 96}, {413, 18}} + + + + _NS:9 + YES + + 67239424 + 0 + Directly delete files + + _NS:9 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{38, 120}, {394, 28}} + + + + _NS:9 + {250, 750} + YES + + 67239424 + 272629760 + After having deleted a duplicate, place a hardlink targeting the reference file to replace the deleted file. + + LucidaGrande + 11 + 16 + + _NS:9 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{38, 48}, {394, 42}} + + + + _NS:9 + {250, 750} + YES + + 67239424 + 272629760 + Instead of sending files to trash, delete them directly. This option is usually used as a workaround when the normal deletion method doesn't work. + + _NS:9 + + + + + + + + 268 + {{331, 12}, {104, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Proceed + + _NS:9 + + -2038284033 + 129 + + DQ + 200 + 25 + + + + + 268 + {{227, 12}, {104, 32}} + + + + _NS:9 + YES + + 67239424 + 134217728 + Cancel + + _NS:9 + + -2038284033 + 129 + + Gw + 200 + 25 + + + + + 268 + {{17, 178}, {415, 17}} + + + + _NS:1505 + YES + + 68288064 + 272630784 + + + _NS:1505 + + + + + + + {449, 215} + + + + + {{0, 0}, {1920, 1058}} + {10000000000000, 10000000000000} + NO + + + + + + + messageTextField + + + + 45 + + + + hardlinkButton + + + + 46 + + + + directButton + + + + 47 + + + + updateOptions: + + + + 48 + + + + updateOptions: + + + + 49 + + + + cancel: + + + + 50 + + + + proceed: + + + + 51 + + + + window + + + + 52 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + + + + + + 2 + + + + + + + + + + + + + + 3 + + + + + + + + 4 + + + + + 7 + + + + + + + + 8 + + + + + 35 + + + + + + + + 36 + + + + + 37 + + + + + + + + 38 + + + + + 39 + + + + + + + + 40 + + + + + 41 + + + + + + + + 42 + + + + + 43 + + + + + + + + 44 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + {{357, 418}, {480, 270}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 52 + + + + + DeletionOptions + NSWindowController + + id + id + id + + + + cancel: + id + + + proceed: + id + + + updateOptions: + id + + + + NSButton + NSButton + NSTextField + + + + directButton + NSButton + + + hardlinkButton + NSButton + + + messageTextField + NSTextField + + + + IBProjectSource + ./Classes/DeletionOptions.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + NSSwitch + {15, 15} + + + diff --git a/cocoa/base/en.lproj/MainMenu.strings b/cocoa/base/en.lproj/MainMenu.strings index 6ae2a321..8d666689 100644 --- a/cocoa/base/en.lproj/MainMenu.strings +++ b/cocoa/base/en.lproj/MainMenu.strings @@ -158,9 +158,6 @@ /* Class = "NSMenuItem"; title = "Save Results..."; ObjectID = "1206"; */ "1206.title" = "Save Results..."; -/* Class = "NSMenuItem"; title = "Delete Marked and Replace with Hardlinks"; ObjectID = "1227"; */ -"1227.title" = "Delete Marked and Replace with Hardlinks"; - /* Class = "NSMenuItem"; title = "Load Recent Results"; ObjectID = "1239"; */ "1239.title" = "Load Recent Results"; diff --git a/cocoa/base/en.lproj/MainMenu.xib b/cocoa/base/en.lproj/MainMenu.xib index 86578529..f34a1cbb 100644 --- a/cocoa/base/en.lproj/MainMenu.xib +++ b/cocoa/base/en.lproj/MainMenu.xib @@ -2,13 +2,13 @@ 1060 - 11D50 - 2177 - 1138.32 - 568.00 + 11E53 + 2182 + 1138.47 + 569.00 com.apple.InterfaceBuilder.CocoaPlugin - 2177 + 2182 NSMenu @@ -338,15 +338,6 @@ - - - Delete Marked and Replace with Hardlinks - T - 1048576 - 2147483647 - - - Move Marked to... @@ -780,14 +771,6 @@ 1244 - - - deleteMarked: - - - - 1245 - exportToXHTML: @@ -796,14 +779,6 @@ 1246 - - - hardlinkMarked: - - - - 1247 - ignoreSelected: @@ -964,6 +939,14 @@ 1282 + + + trashMarked: + + + + 1286 + delegate @@ -1314,7 +1297,6 @@ - @@ -1544,11 +1526,6 @@ - - 1227 - - - 1239 @@ -1603,7 +1580,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1668,7 +1644,7 @@ - 1285 + 1286 @@ -1816,6 +1792,57 @@ ./Classes/IgnoreListDialog.h + + PrioritizeDialog + NSWindowController + + id + id + id + id + + + + addSelected: + id + + + cancel: + id + + + ok: + id + + + removeSelected: + id + + + + NSPopUpButton + NSTableView + NSTableView + + + + categoryPopUpView + NSPopUpButton + + + criteriaTableView + NSTableView + + + prioritizationTableView + NSTableView + + + + IBProjectSource + ./Classes/PrioritizeDialog.h + + ProblemDialog NSWindowController @@ -1852,10 +1879,8 @@ id id - id id id - id id id id @@ -1879,6 +1904,7 @@ id id id + id @@ -1889,10 +1915,6 @@ copyMarked: id - - deleteMarked: - id - exportToXHTML: id @@ -1901,10 +1923,6 @@ filter: id - - hardlinkMarked: - id - ignoreSelected: id @@ -1997,11 +2015,16 @@ toggleQuicklookPanel: id + + trashMarked: + id + NSSearchField HSTableView NSSegmentedControl + NSToolbarItem NSTextField @@ -2017,6 +2040,10 @@ optionsSwitch NSSegmentedControl + + optionsToolbarItem + NSToolbarItem + stats NSTextField diff --git a/cocoa/base/en.lproj/ResultWindow.strings b/cocoa/base/en.lproj/ResultWindow.strings index a07f6bc6..85901326 100644 --- a/cocoa/base/en.lproj/ResultWindow.strings +++ b/cocoa/base/en.lproj/ResultWindow.strings @@ -29,9 +29,6 @@ /* Class = "NSToolbarItem"; paletteLabel = "Directories"; ObjectID = "19"; */ "19.paletteLabel" = "Directories"; -/* Class = "NSMenuItem"; title = "Delete Marked and Replace with Hardlinks"; ObjectID = "27"; */ -"27.title" = "Delete Marked and Replace with Hardlinks"; - /* Class = "NSMenuItem"; title = "Send Marked to Trash"; ObjectID = "29"; */ "29.title" = "Send Marked to Trash"; diff --git a/cocoa/base/en.lproj/ResultWindow.xib b/cocoa/base/en.lproj/ResultWindow.xib index 26cead48..10bb1335 100644 --- a/cocoa/base/en.lproj/ResultWindow.xib +++ b/cocoa/base/en.lproj/ResultWindow.xib @@ -2,10 +2,10 @@ 1060 - 11D50 + 11E53 2182 - 1138.32 - 568.00 + 1138.47 + 569.00 com.apple.InterfaceBuilder.CocoaPlugin 2182 @@ -162,7 +162,6 @@ {{0, 14}, {195, 23}} - YES 67239424 @@ -220,7 +219,6 @@ {{0, 14}, {81, 22}} - YES 343014976 @@ -313,7 +311,6 @@ {{12, 14}, {44, 25}} - _NS:161 YES @@ -381,7 +378,6 @@ {{1, 14}, {40, 25}} - YES -2076049856 @@ -430,16 +426,6 @@ _popUpItemAction: - - - Delete Marked and Replace with Hardlinks - - 2147483647 - - - _popUpItemAction: - - Move Marked to... @@ -560,6 +546,7 @@ + -1 YES 3 YES @@ -664,7 +651,6 @@ {{17, 6}, {523, 17}} - YES 67239424 @@ -698,7 +684,7 @@ {557, 355} - + YES @@ -799,7 +785,7 @@ {{0, 28}, {559, 373}} - + 133682 @@ -834,22 +820,6 @@ 46 - - - deleteMarked: - - - - 50 - - - - hardlinkMarked: - - - - 51 - moveMarked: @@ -1042,6 +1012,14 @@ 82 + + + trashMarked: + + + + 93 + delegate @@ -1276,7 +1254,6 @@ 26 - @@ -1358,11 +1335,6 @@ - - 27 - - - 16 @@ -1451,7 +1423,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1496,7 +1467,7 @@ - 92 + 93 @@ -1587,17 +1558,6 @@ ResultWindow ResultWindowBase - - removeDeadTracks: - id - - - removeDeadTracks: - - removeDeadTracks: - id - - IBProjectSource ./Classes/ResultWindow.h @@ -1609,10 +1569,8 @@ id id - id id id - id id id id @@ -1636,6 +1594,7 @@ id id id + id @@ -1646,10 +1605,6 @@ copyMarked: id - - deleteMarked: - id - exportToXHTML: id @@ -1658,10 +1613,6 @@ filter: id - - hardlinkMarked: - id - ignoreSelected: id @@ -1754,6 +1705,10 @@ toggleQuicklookPanel: id + + trashMarked: + id + NSSearchField diff --git a/cocoa/inter/all.py b/cocoa/inter/all.py new file mode 100644 index 00000000..222d300a --- /dev/null +++ b/cocoa/inter/all.py @@ -0,0 +1,9 @@ +from .deletion_options import PyDeletionOptions +from .details_panel import PyDetailsPanel +from .directory_outline import PyDirectoryOutline +from .prioritize_dialog import PyPrioritizeDialog +from .prioritize_list import PyPrioritizeList +from .problem_dialog import PyProblemDialog +from .ignore_list_dialog import PyIgnoreListDialog +from .result_table import PyResultTable +from .stats_label import PyStatsLabel \ No newline at end of file diff --git a/cocoa/inter/app.py b/cocoa/inter/app.py index a1a9cfb1..b39720b0 100644 --- a/cocoa/inter/app.py +++ b/cocoa/inter/app.py @@ -54,6 +54,9 @@ class PyDupeGuruBase(PyFairware): def ignoreListDialog(self) -> pyref: return self.model.ignore_list_dialog + def deletionOptions(self) -> pyref: + return self.model.deletion_options + #---Directories def addDirectory_(self, directory: str) -> int: return self.model.add_directory(directory) @@ -99,9 +102,6 @@ class PyDupeGuruBase(PyFairware): def deleteMarked(self): self.model.delete_marked() - def hardlinkMarked(self): - self.model.delete_marked(replace_with_hardlinks=True) - def applyFilter_(self, filter: str): self.model.apply_filter(filter) diff --git a/cocoa/inter/deletion_options.py b/cocoa/inter/deletion_options.py new file mode 100644 index 00000000..9fa01150 --- /dev/null +++ b/cocoa/inter/deletion_options.py @@ -0,0 +1,27 @@ +# Created On: 2012-05-30 +# Copyright 2012 Hardcoded Software (http://www.hardcoded.net) +# +# This software is licensed under the "BSD" License as described in the "LICENSE" file, +# which should be included with this package. The terms are also available at +# http://www.hardcoded.net/licenses/bsd_license + +from cocoa.inter import PyGUIObject, GUIObjectView + +class DeletionOptionsView(GUIObjectView): + def updateMsg_(self, msg: str): pass + def show(self) -> bool: pass + +class PyDeletionOptions(PyGUIObject): + def setHardlink_(self, hardlink: bool): + self.model.hardlink = hardlink + + def setDirect_(self, direct: bool): + self.model.direct = direct + + #--- model --> view + def update_msg(self, msg): + self.callback.updateMsg_(msg) + + def show(self): + return self.callback.show() + diff --git a/cocoa/me/dg_cocoa.py b/cocoa/me/dg_cocoa.py index f9c1764e..6d1a83d8 100644 --- a/cocoa/me/dg_cocoa.py +++ b/cocoa/me/dg_cocoa.py @@ -9,12 +9,5 @@ install_gettext_trans_under_cocoa() from cocoa.inter import PySelectableList, PyColumns, PyTable -from inter.details_panel import PyDetailsPanel -from inter.directory_outline import PyDirectoryOutline -from inter.prioritize_dialog import PyPrioritizeDialog -from inter.prioritize_list import PyPrioritizeList -from inter.problem_dialog import PyProblemDialog -from inter.ignore_list_dialog import PyIgnoreListDialog -from inter.result_table import PyResultTable -from inter.stats_label import PyStatsLabel +from inter.all import * from inter.app_me import PyDupeGuru diff --git a/cocoa/me/dupeguru.xcodeproj/project.pbxproj b/cocoa/me/dupeguru.xcodeproj/project.pbxproj index 72233a0e..01b1fee6 100644 --- a/cocoa/me/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/me/dupeguru.xcodeproj/project.pbxproj @@ -90,6 +90,17 @@ CE97060114C46F70007A28F6 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CE97060014C46F70007A28F6 /* dg_cocoa.py */; }; CE97060314C471F2007A28F6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CE97060214C471F2007A28F6 /* main.m */; }; CEA14F431461ED63007F01A5 /* locale in Resources */ = {isa = PBXBuildFile; fileRef = CEA14F421461ED63007F01A5 /* locale */; }; + CEA39FA1157679FB00F294DE /* DeletionOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = CEA39F97157679FB00F294DE /* DeletionOptions.xib */; }; + CEA39FA2157679FB00F294DE /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05330D12E5D3ED0029EF25 /* DetailsPanel.xib */; }; + CEA39FA3157679FB00F294DE /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05330F12E5D3ED0029EF25 /* DirectoryPanel.xib */; }; + CEA39FA4157679FB00F294DE /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05331112E5D3ED0029EF25 /* MainMenu.xib */; }; + CEA39FA5157679FB00F294DE /* ProblemDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05331312E5D3ED0029EF25 /* ProblemDialog.xib */; }; + CEA39FA6157679FB00F294DE /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE1195941510FFB20063C8AF /* IgnoreListDialog.xib */; }; + CEA39FA7157679FB00F294DE /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05331512E5D3ED0029EF25 /* ResultWindow.xib */; }; + CEA39FA8157679FB00F294DE /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05332112E5D4100029EF25 /* Preferences.xib */; }; + CEA39FA9157679FB00F294DE /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */; }; + CEA39FAD15767A2900F294DE /* PyDeletionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA39FAC15767A2900F294DE /* PyDeletionOptions.m */; }; + CEA39FB015767A3A00F294DE /* DeletionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA39FAF15767A3A00F294DE /* DeletionOptions.m */; }; CEB14D29124DFC2800FA7481 /* ResultTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB14D28124DFC2800FA7481 /* ResultTable.m */; }; CEDF07A3112493B200EE5BC0 /* StatsLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDF07A2112493B200EE5BC0 /* StatsLabel.m */; }; CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; }; @@ -299,6 +310,19 @@ CE97060014C46F70007A28F6 /* dg_cocoa.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = dg_cocoa.py; path = ../../build/dg_cocoa.py; sourceTree = ""; }; CE97060214C471F2007A28F6 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ../base/main.m; sourceTree = ""; }; CEA14F421461ED63007F01A5 /* locale */ = {isa = PBXFileReference; lastKnownFileType = folder; name = locale; path = ../../build/locale; sourceTree = ""; }; + CEA39F98157679FB00F294DE /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39F99157679FB00F294DE /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39F9A157679FB00F294DE /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39F9B157679FB00F294DE /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39F9C157679FB00F294DE /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39F9D157679FB00F294DE /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39F9E157679FB00F294DE /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39F9F157679FB00F294DE /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39FA0157679FB00F294DE /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEA39FAB15767A2900F294DE /* PyDeletionOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDeletionOptions.h; sourceTree = ""; }; + CEA39FAC15767A2900F294DE /* PyDeletionOptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDeletionOptions.m; sourceTree = ""; }; + CEA39FAE15767A3A00F294DE /* DeletionOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeletionOptions.h; path = ../base/DeletionOptions.h; sourceTree = ""; }; + CEA39FAF15767A3A00F294DE /* DeletionOptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DeletionOptions.m; path = ../base/DeletionOptions.m; sourceTree = ""; }; CEB14D27124DFC2800FA7481 /* ResultTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ResultTable.h; path = ../base/ResultTable.h; sourceTree = SOURCE_ROOT; }; CEB14D28124DFC2800FA7481 /* ResultTable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ResultTable.m; path = ../base/ResultTable.m; sourceTree = SOURCE_ROOT; }; CEC3D37C14911253006B1A91 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DetailsPanel.xib; sourceTree = ""; }; @@ -492,6 +516,7 @@ CE05331512E5D3ED0029EF25 /* ResultWindow.xib */, CE05332112E5D4100029EF25 /* Preferences.xib */, CE84C9BB1423AF200050A6AD /* PrioritizeDialog.xib */, + CEA39F97157679FB00F294DE /* DeletionOptions.xib */, ); name = xib; sourceTree = ""; @@ -565,6 +590,8 @@ CE84C9AD1423ADFB0050A6AD /* PrioritizeDialog.m */, CE84C9AE1423ADFB0050A6AD /* PrioritizeList.h */, CE84C9AF1423ADFB0050A6AD /* PrioritizeList.m */, + CEA39FAE15767A3A00F294DE /* DeletionOptions.h */, + CEA39FAF15767A3A00F294DE /* DeletionOptions.m */, CE97060214C471F2007A28F6 /* main.m */, ); name = dgbase; @@ -599,6 +626,8 @@ CE9705DD14C46E7D007A28F6 /* PyProblemDialog.m */, CE11958D1510FF700063C8AF /* PyIgnoreListDialog.h */, CE11958E1510FF700063C8AF /* PyIgnoreListDialog.m */, + CEA39FAB15767A2900F294DE /* PyDeletionOptions.h */, + CEA39FAC15767A2900F294DE /* PyDeletionOptions.m */, CE9705DE14C46E7D007A28F6 /* PyResultTable.h */, CE9705DF14C46E7D007A28F6 /* PyResultTable.m */, CE9705E014C46E7D007A28F6 /* PySelectableList.h */, @@ -704,6 +733,15 @@ CE9705FF14C46F60007A28F6 /* py in Resources */, CE97060114C46F70007A28F6 /* dg_cocoa.py in Resources */, CE1195961510FFB20063C8AF /* IgnoreListDialog.xib in Resources */, + CEA39FA1157679FB00F294DE /* DeletionOptions.xib in Resources */, + CEA39FA2157679FB00F294DE /* DetailsPanel.xib in Resources */, + CEA39FA3157679FB00F294DE /* DirectoryPanel.xib in Resources */, + CEA39FA4157679FB00F294DE /* MainMenu.xib in Resources */, + CEA39FA5157679FB00F294DE /* ProblemDialog.xib in Resources */, + CEA39FA6157679FB00F294DE /* IgnoreListDialog.xib in Resources */, + CEA39FA7157679FB00F294DE /* ResultWindow.xib in Resources */, + CEA39FA8157679FB00F294DE /* Preferences.xib in Resources */, + CEA39FA9157679FB00F294DE /* PrioritizeDialog.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -766,6 +804,8 @@ CE11958F1510FF700063C8AF /* PyIgnoreListDialog.m in Sources */, CE1195931510FF890063C8AF /* IgnoreListDialog.m in Sources */, CEF6BCAA1575769C00DACF6F /* HSPyUtil.m in Sources */, + CEA39FAD15767A2900F294DE /* PyDeletionOptions.m in Sources */, + CEA39FB015767A3A00F294DE /* DeletionOptions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -933,6 +973,22 @@ name = PrioritizeDialog.xib; sourceTree = ""; }; + CEA39F97157679FB00F294DE /* DeletionOptions.xib */ = { + isa = PBXVariantGroup; + children = ( + CEA39F9A157679FB00F294DE /* en */, + CEA39F98157679FB00F294DE /* cs */, + CEA39F99157679FB00F294DE /* de */, + CEA39F9B157679FB00F294DE /* fr */, + CEA39F9C157679FB00F294DE /* hy */, + CEA39F9D157679FB00F294DE /* it */, + CEA39F9E157679FB00F294DE /* ru */, + CEA39F9F157679FB00F294DE /* uk */, + CEA39FA0157679FB00F294DE /* zh_CN */, + ); + name = DeletionOptions.xib; + sourceTree = ""; + }; CEF3185513D8660000B8CDCA /* about.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/cocoa/pe/dg_cocoa.py b/cocoa/pe/dg_cocoa.py index d064b0fa..f70d5f80 100644 --- a/cocoa/pe/dg_cocoa.py +++ b/cocoa/pe/dg_cocoa.py @@ -9,13 +9,6 @@ install_gettext_trans_under_cocoa() from cocoa.inter import PySelectableList, PyColumns, PyTable -from inter.details_panel import PyDetailsPanel -from inter.directory_outline import PyDirectoryOutline -from inter.prioritize_dialog import PyPrioritizeDialog -from inter.prioritize_list import PyPrioritizeList -from inter.problem_dialog import PyProblemDialog -from inter.ignore_list_dialog import PyIgnoreListDialog -from inter.result_table import PyResultTable -from inter.stats_label import PyStatsLabel +from inter.all import * from inter.app_pe import PyDupeGuru diff --git a/cocoa/pe/dupeguru.xcodeproj/project.pbxproj b/cocoa/pe/dupeguru.xcodeproj/project.pbxproj index 3481fe69..ba2ac051 100644 --- a/cocoa/pe/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/pe/dupeguru.xcodeproj/project.pbxproj @@ -82,6 +82,17 @@ CECA899D09DB132E00A3D774 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CECA899B09DB132E00A3D774 /* DetailsPanel.m */; }; CECB2AC513D867AD0081E295 /* about.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC113D867AD0081E295 /* about.xib */; }; CECB2AC613D867AD0081E295 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CECB2AC313D867AD0081E295 /* ErrorReportWindow.xib */; }; + CED3BC1515767AFB0028F3C9 /* PyDeletionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = CED3BC1415767AFB0028F3C9 /* PyDeletionOptions.m */; }; + CED3BC1915767B0E0028F3C9 /* DeletionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = CED3BC1815767B0E0028F3C9 /* DeletionOptions.m */; }; + CED3BC2415767B200028F3C9 /* DeletionOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = CED3BC1A15767B200028F3C9 /* DeletionOptions.xib */; }; + CED3BC2515767B200028F3C9 /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339312E5DA350029EF25 /* DirectoryPanel.xib */; }; + CED3BC2615767B200028F3C9 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339512E5DA350029EF25 /* MainMenu.xib */; }; + CED3BC2715767B200028F3C9 /* ProblemDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339712E5DA350029EF25 /* ProblemDialog.xib */; }; + CED3BC2815767B200028F3C9 /* IgnoreListDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7857951511019400174D51 /* IgnoreListDialog.xib */; }; + CED3BC2915767B200028F3C9 /* ResultWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE05339912E5DA350029EF25 /* ResultWindow.xib */; }; + CED3BC2A15767B200028F3C9 /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A312E5DA4D0029EF25 /* DetailsPanel.xib */; }; + CED3BC2B15767B200028F3C9 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE0533A512E5DA4D0029EF25 /* Preferences.xib */; }; + CED3BC2C15767B200028F3C9 /* PrioritizeDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE7D24A71423B123002E2297 /* PrioritizeDialog.xib */; }; CEE6D562149113570087CDFC /* HSColumns.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE6D561149113570087CDFC /* HSColumns.m */; }; CEE8D3E2157576FD00E1A1B8 /* HSPyUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE8D3E1157576FD00E1A1B8 /* HSPyUtil.m */; }; CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; }; @@ -309,6 +320,19 @@ CECB2ACB13D867C00081E295 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/about.xib; sourceTree = ""; }; CECB2ACC13D867C00081E295 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/ErrorReportWindow.xib; sourceTree = ""; }; CECB2ACD13D867C00081E295 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../de.lproj/FairwareReminder.xib; sourceTree = ""; }; + CED3BC1315767AFB0028F3C9 /* PyDeletionOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDeletionOptions.h; sourceTree = ""; }; + CED3BC1415767AFB0028F3C9 /* PyDeletionOptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDeletionOptions.m; sourceTree = ""; }; + CED3BC1715767B0E0028F3C9 /* DeletionOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeletionOptions.h; path = ../base/DeletionOptions.h; sourceTree = ""; }; + CED3BC1815767B0E0028F3C9 /* DeletionOptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DeletionOptions.m; path = ../base/DeletionOptions.m; sourceTree = ""; }; + CED3BC1B15767B200028F3C9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC1C15767B200028F3C9 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC1D15767B200028F3C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC1E15767B200028F3C9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC1F15767B200028F3C9 /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC2015767B200028F3C9 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC2115767B200028F3C9 /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC2215767B200028F3C9 /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DeletionOptions.xib; sourceTree = ""; }; + CED3BC2315767B200028F3C9 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/DeletionOptions.xib; sourceTree = ""; }; CEE6D5461491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DirectoryPanel.xib; sourceTree = ""; }; CEE6D5481491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/MainMenu.xib; sourceTree = ""; }; CEE6D5491491130D0087CDFC /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/PrioritizeDialog.xib; sourceTree = ""; }; @@ -455,6 +479,7 @@ CE0533A312E5DA4D0029EF25 /* DetailsPanel.xib */, CE0533A512E5DA4D0029EF25 /* Preferences.xib */, CE7D24A71423B123002E2297 /* PrioritizeDialog.xib */, + CED3BC1A15767B200028F3C9 /* DeletionOptions.xib */, ); name = xib; sourceTree = ""; @@ -488,6 +513,8 @@ CE7857A81511021200174D51 /* PyIgnoreListDialog.h */, CE7857A91511021200174D51 /* PyIgnoreListDialog.m */, CE75019514C477B100E2A349 /* PyProblemDialog.m */, + CED3BC1315767AFB0028F3C9 /* PyDeletionOptions.h */, + CED3BC1415767AFB0028F3C9 /* PyDeletionOptions.m */, CE75019614C477B100E2A349 /* PyResultTable.h */, CE75019714C477B100E2A349 /* PyResultTable.m */, CE75019814C477B100E2A349 /* PySelectableList.h */, @@ -574,6 +601,8 @@ CE7D24A01423B106002E2297 /* PrioritizeDialog.m */, CE7D24A11423B106002E2297 /* PrioritizeList.h */, CE7D24A21423B106002E2297 /* PrioritizeList.m */, + CED3BC1715767B0E0028F3C9 /* DeletionOptions.h */, + CED3BC1815767B0E0028F3C9 /* DeletionOptions.m */, CE75017214C4770500E2A349 /* main.m */, ); name = dgbase; @@ -706,6 +735,15 @@ CE75017514C4771800E2A349 /* py in Resources */, CE75017714C4772100E2A349 /* dg_cocoa.py in Resources */, CE7857971511019400174D51 /* IgnoreListDialog.xib in Resources */, + CED3BC2415767B200028F3C9 /* DeletionOptions.xib in Resources */, + CED3BC2515767B200028F3C9 /* DirectoryPanel.xib in Resources */, + CED3BC2615767B200028F3C9 /* MainMenu.xib in Resources */, + CED3BC2715767B200028F3C9 /* ProblemDialog.xib in Resources */, + CED3BC2815767B200028F3C9 /* IgnoreListDialog.xib in Resources */, + CED3BC2915767B200028F3C9 /* ResultWindow.xib in Resources */, + CED3BC2A15767B200028F3C9 /* DetailsPanel.xib in Resources */, + CED3BC2B15767B200028F3C9 /* Preferences.xib in Resources */, + CED3BC2C15767B200028F3C9 /* PrioritizeDialog.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -771,6 +809,8 @@ CE7857AA1511021200174D51 /* PyIgnoreListDialog.m in Sources */, CE7857AD1511022A00174D51 /* IgnoreListDialog.m in Sources */, CEE8D3E2157576FD00E1A1B8 /* HSPyUtil.m in Sources */, + CED3BC1515767AFB0028F3C9 /* PyDeletionOptions.m in Sources */, + CED3BC1915767B0E0028F3C9 /* DeletionOptions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -970,6 +1010,22 @@ name = ErrorReportWindow.xib; sourceTree = ""; }; + CED3BC1A15767B200028F3C9 /* DeletionOptions.xib */ = { + isa = PBXVariantGroup; + children = ( + CED3BC1D15767B200028F3C9 /* en */, + CED3BC1B15767B200028F3C9 /* cs */, + CED3BC1C15767B200028F3C9 /* de */, + CED3BC1E15767B200028F3C9 /* fr */, + CED3BC1F15767B200028F3C9 /* hy */, + CED3BC2015767B200028F3C9 /* it */, + CED3BC2115767B200028F3C9 /* ru */, + CED3BC2215767B200028F3C9 /* uk */, + CED3BC2315767B200028F3C9 /* zh_CN */, + ); + name = DeletionOptions.xib; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/cocoa/se/dg_cocoa.py b/cocoa/se/dg_cocoa.py index d5fd7ef4..59aaae07 100644 --- a/cocoa/se/dg_cocoa.py +++ b/cocoa/se/dg_cocoa.py @@ -9,12 +9,5 @@ install_gettext_trans_under_cocoa() from cocoa.inter import PySelectableList, PyColumns, PyTable -from inter.details_panel import PyDetailsPanel -from inter.directory_outline import PyDirectoryOutline -from inter.prioritize_dialog import PyPrioritizeDialog -from inter.prioritize_list import PyPrioritizeList -from inter.problem_dialog import PyProblemDialog -from inter.ignore_list_dialog import PyIgnoreListDialog -from inter.result_table import PyResultTable -from inter.stats_label import PyStatsLabel +from inter.all import * from inter.app_se import PyDupeGuru \ No newline at end of file diff --git a/cocoa/se/dupeguru.xcodeproj/project.pbxproj b/cocoa/se/dupeguru.xcodeproj/project.pbxproj index 846f4c61..55add918 100644 --- a/cocoa/se/dupeguru.xcodeproj/project.pbxproj +++ b/cocoa/se/dupeguru.xcodeproj/project.pbxproj @@ -64,6 +64,9 @@ CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */ = {isa = PBXBuildFile; fileRef = CEA450B714BDDFD7002DAAF2 /* dg_cocoa.py */; }; CEB2AF5614C49AC800F907A9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB2AF5514C49AC800F907A9 /* main.m */; }; CEBCE2D81573FE49000402E1 /* HSPyUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBCE2D71573FE49000402E1 /* HSPyUtil.m */; }; + CEC3F8F815765F9F00B26F0C /* DeletionOptions.xib in Resources */ = {isa = PBXBuildFile; fileRef = CEC3F8F615765F9F00B26F0C /* DeletionOptions.xib */; }; + CEC3F8FC157668A300B26F0C /* DeletionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC3F8FB157668A300B26F0C /* DeletionOptions.m */; }; + CEC3F8FF1576697700B26F0C /* PyDeletionOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC3F8FE1576697700B26F0C /* PyDeletionOptions.m */; }; CEE7EA130FE675C80004E467 /* DetailsPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = CEE7EA120FE675C80004E467 /* DetailsPanel.m */; }; CEEB135209C837A2004D2330 /* dupeguru.icns in Resources */ = {isa = PBXBuildFile; fileRef = CEEB135109C837A2004D2330 /* dupeguru.icns */; }; CEEF2A1814C0A5A60082545A /* PyDupeGuru.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A1714C0A5A60082545A /* PyDupeGuru.m */; }; @@ -77,6 +80,14 @@ CEEF2A4114C0B9050082545A /* HSTable.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEF2A3B14C0B9050082545A /* HSTable.m */; }; CEF0ACCE12DF3C2000B32F7E /* HSRecentFiles.m in Sources */ = {isa = PBXBuildFile; fileRef = CEF0ACCD12DF3C2000B32F7E /* HSRecentFiles.m */; }; CEFC294609C89E3D00D9F998 /* folder32.png in Resources */ = {isa = PBXBuildFile; fileRef = CEFC294509C89E3D00D9F998 /* folder32.png */; }; + CEFC64DE157678A500664D8C /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134212E5CE4D00A36C80 /* DetailsPanel.xib */; }; + CEFC64E1157678AF00664D8C /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134212E5CE4D00A36C80 /* DetailsPanel.xib */; }; + CEFC64E3157678C000664D8C /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134212E5CE4D00A36C80 /* DetailsPanel.xib */; }; + CEFC64E5157678CA00664D8C /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134212E5CE4D00A36C80 /* DetailsPanel.xib */; }; + CEFC64EA157678DE00664D8C /* DetailsPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134212E5CE4D00A36C80 /* DetailsPanel.xib */; }; + CEFC64EB157678DE00664D8C /* DirectoryPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134412E5CE4D00A36C80 /* DirectoryPanel.xib */; }; + CEFC64EC157678DE00664D8C /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134612E5CE4D00A36C80 /* MainMenu.xib */; }; + CEFC64ED157678DE00664D8C /* ProblemDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE81134812E5CE4D00A36C80 /* ProblemDialog.xib */; }; CEFC7F9E0FC9517500CD5728 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F8B0FC9517500CD5728 /* Dialogs.m */; }; CEFC7FA10FC9517500CD5728 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F910FC9517500CD5728 /* ProgressController.m */; }; CEFC7FA50FC9517500CD5728 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFC7F9B0FC9517500CD5728 /* Utils.m */; }; @@ -251,6 +262,11 @@ CEBCE2D61573FE49000402E1 /* HSPyUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSPyUtil.h; path = ../../cocoalib/HSPyUtil.h; sourceTree = ""; }; CEBCE2D71573FE49000402E1 /* HSPyUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSPyUtil.m; path = ../../cocoalib/HSPyUtil.m; sourceTree = ""; }; CEBCE2DA1573FEBF000402E1 /* HSFairwareProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareProtocol.h; path = ../../cocoalib/HSFairwareProtocol.h; sourceTree = ""; }; + CEC3F8F715765F9F00B26F0C /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../base/en.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEC3F8FA157668A300B26F0C /* DeletionOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeletionOptions.h; path = ../base/DeletionOptions.h; sourceTree = ""; }; + CEC3F8FB157668A300B26F0C /* DeletionOptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DeletionOptions.m; path = ../base/DeletionOptions.m; sourceTree = ""; }; + CEC3F8FD1576697700B26F0C /* PyDeletionOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PyDeletionOptions.h; sourceTree = ""; }; + CEC3F8FE1576697700B26F0C /* PyDeletionOptions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PyDeletionOptions.m; sourceTree = ""; }; CECFFF1C13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DetailsPanel.xib; sourceTree = SOURCE_ROOT; }; CECFFF1D13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DirectoryPanel.xib; sourceTree = SOURCE_ROOT; }; CECFFF1F13CDF8D0003A4518 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; }; @@ -316,6 +332,14 @@ CEF27A9D1423EAD90048ADFA /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/PrioritizeDialog.xib; sourceTree = ""; }; CEF27A9E1423EAD90048ADFA /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/PrioritizeDialog.xib; sourceTree = ""; }; CEFC294509C89E3D00D9F998 /* folder32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = folder32.png; path = ../../images/folder32.png; sourceTree = SOURCE_ROOT; }; + CEFC64DD157678A500664D8C /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = ../base/de.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEFC64E0157678AF00664D8C /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = ../base/cs.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEFC64E2157678C000664D8C /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = ../base/fr.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEFC64E4157678CA00664D8C /* hy */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = hy; path = ../base/hy.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEFC64E6157678DE00664D8C /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = ../base/it.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEFC64E7157678DE00664D8C /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ../base/ru.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEFC64E8157678DE00664D8C /* uk */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = uk; path = ../base/uk.lproj/DeletionOptions.xib; sourceTree = ""; }; + CEFC64E9157678DE00664D8C /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = zh_CN; path = ../base/zh_CN.lproj/DeletionOptions.xib; sourceTree = ""; }; CEFC7F8A0FC9517500CD5728 /* Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dialogs.h; path = ../../cocoalib/Dialogs.h; sourceTree = SOURCE_ROOT; }; CEFC7F8B0FC9517500CD5728 /* Dialogs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Dialogs.m; path = ../../cocoalib/Dialogs.m; sourceTree = SOURCE_ROOT; }; CEFC7F900FC9517500CD5728 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; }; @@ -465,6 +489,8 @@ CE4746D214C09C12001A66DE /* PyProblemDialog.m */, CE412C0B1510ECAA00484122 /* PyIgnoreListDialog.h */, CE412C0C1510ECAA00484122 /* PyIgnoreListDialog.m */, + CEC3F8FD1576697700B26F0C /* PyDeletionOptions.h */, + CEC3F8FE1576697700B26F0C /* PyDeletionOptions.m */, CE9FC23114C0866F005C31FD /* PyResultTable.h */, CE9FC23214C0866F005C31FD /* PyResultTable.m */, CE1D091614BE0C6400CA6B8C /* PyStatsLabel.h */, @@ -529,6 +555,7 @@ CE81134A12E5CE4D00A36C80 /* ResultWindow.xib */, CE81135612E5CE6D00A36C80 /* Preferences.xib */, CE9777CF141F8CB400C13FB5 /* PrioritizeDialog.xib */, + CEC3F8F615765F9F00B26F0C /* DeletionOptions.xib */, ); name = xib; sourceTree = ""; @@ -600,6 +627,8 @@ CE9777CC141F8C2500C13FB5 /* PrioritizeDialog.m */, CE89240614239CC30024CE4E /* PrioritizeList.h */, CE89240714239CC30024CE4E /* PrioritizeList.m */, + CEC3F8FA157668A300B26F0C /* DeletionOptions.h */, + CEC3F8FB157668A300B26F0C /* DeletionOptions.m */, CEB2AF5514C49AC800F907A9 /* main.m */, ); name = dgbase; @@ -689,6 +718,15 @@ CE18005114BDD87B001B6329 /* py in Resources */, CEA450B814BDDFD7002DAAF2 /* dg_cocoa.py in Resources */, CE412C111510ECCA00484122 /* IgnoreListDialog.xib in Resources */, + CEC3F8F815765F9F00B26F0C /* DeletionOptions.xib in Resources */, + CEFC64DE157678A500664D8C /* DetailsPanel.xib in Resources */, + CEFC64E1157678AF00664D8C /* DetailsPanel.xib in Resources */, + CEFC64E3157678C000664D8C /* DetailsPanel.xib in Resources */, + CEFC64E5157678CA00664D8C /* DetailsPanel.xib in Resources */, + CEFC64EA157678DE00664D8C /* DetailsPanel.xib in Resources */, + CEFC64EB157678DE00664D8C /* DirectoryPanel.xib in Resources */, + CEFC64EC157678DE00664D8C /* MainMenu.xib in Resources */, + CEFC64ED157678DE00664D8C /* ProblemDialog.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -750,6 +788,8 @@ CE412C0D1510ECAA00484122 /* PyIgnoreListDialog.m in Sources */, CE412C141510ED2E00484122 /* IgnoreListDialog.m in Sources */, CEBCE2D81573FE49000402E1 /* HSPyUtil.m in Sources */, + CEC3F8FC157668A300B26F0C /* DeletionOptions.m in Sources */, + CEC3F8FF1576697700B26F0C /* PyDeletionOptions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -949,6 +989,22 @@ name = PrioritizeDialog.xib; sourceTree = ""; }; + CEC3F8F615765F9F00B26F0C /* DeletionOptions.xib */ = { + isa = PBXVariantGroup; + children = ( + CEC3F8F715765F9F00B26F0C /* en */, + CEFC64DD157678A500664D8C /* de */, + CEFC64E0157678AF00664D8C /* cs */, + CEFC64E2157678C000664D8C /* fr */, + CEFC64E4157678CA00664D8C /* hy */, + CEFC64E6157678DE00664D8C /* it */, + CEFC64E7157678DE00664D8C /* ru */, + CEFC64E8157678DE00664D8C /* uk */, + CEFC64E9157678DE00664D8C /* zh_CN */, + ); + name = DeletionOptions.xib; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/core/app.py b/core/app.py index 553829ff..b9c06a02 100644 --- a/core/app.py +++ b/core/app.py @@ -12,6 +12,7 @@ import logging import subprocess import re import time +import shutil from send2trash import send2trash from hscommon import io @@ -24,6 +25,7 @@ from hscommon.util import (delete_if_empty, first, escape, nonone, format_time_d from hscommon.trans import tr from . import directories, results, scanner, export, fs +from .gui.deletion_options import DeletionOptions from .gui.details_panel import DetailsPanel from .gui.directory_tree import DirectoryTree from .gui.ignore_list_dialog import IgnoreListDialog @@ -118,6 +120,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): self.ignore_list_dialog = IgnoreListDialog(self) self.stats_label = StatsLabel(self) self.result_table = self._create_result_table() + self.deletion_options = DeletionOptions() children = [self.result_table, self.directory_tree, self.stats_label, self.details_panel] for child in children: child.connect() @@ -155,23 +158,30 @@ class DupeGuru(RegistrableApplication, Broadcaster): return len([dupe for dupe in group.dupes if self.results.is_marked(dupe)]) return cmp_value(group.ref, key) - def _do_delete(self, j, replace_with_hardlinks): + def _do_delete(self, j, replace_with_hardlinks, direct_deletion): def op(dupe): j.add_progress() - return self._do_delete_dupe(dupe, replace_with_hardlinks) + return self._do_delete_dupe(dupe, replace_with_hardlinks, direct_deletion) j.start_job(self.results.mark_count) self.results.perform_on_marked(op, True) - def _do_delete_dupe(self, dupe, replace_with_hardlinks): + def _do_delete_dupe(self, dupe, replace_with_hardlinks, direct_deletion): if not io.exists(dupe.path): return logging.debug("Sending '%s' to trash", dupe.path) - send2trash(str(dupe.path)) # Raises OSError when there's a problem + str_path = str(dupe.path) + if direct_deletion: + if op.isdir(str_path): + shutil.rmtree(str_path) + else: + os.remove(str_path) + else: + send2trash(str_path) # Raises OSError when there's a problem if replace_with_hardlinks: group = self.results.get_group_of_duplicate(dupe) ref = group.ref - os.link(str(ref.path), str(dupe.path)) + os.link(str(ref.path), str_path) self.clean_empty_dirs(dupe.path[:-1]) def _create_file(self, path): @@ -334,19 +344,17 @@ class DupeGuru(RegistrableApplication, Broadcaster): jobid = JobType.Copy if copy else JobType.Move self.view.start_job(jobid, do) - def delete_marked(self, replace_with_hardlinks=False): + def delete_marked(self): if not self._check_demo(): return if not self.results.mark_count: self.view.show_message(MSG_NO_MARKED_DUPES) return - if replace_with_hardlinks: - msg = tr("You are about to send %d files to Trash (and hardlink them afterwards). Continue?") - else: - msg = tr("You are about to send %d files to Trash. Continue?") - if not self.view.ask_yes_no(msg % self.results.mark_count): + if not self.deletion_options.show(self.results.mark_count): return - self.view.start_job(JobType.Delete, self._do_delete, args=[replace_with_hardlinks]) + args = [self.deletion_options.hardlink, self.deletion_options.direct] + logging.debug("Starting deletion job with args %r", args) + self.view.start_job(JobType.Delete, self._do_delete, args=args) def export_to_xhtml(self): columns = [col for col in self.result_table.columns.ordered_columns diff --git a/core/gui/deletion_options.py b/core/gui/deletion_options.py new file mode 100644 index 00000000..a7009417 --- /dev/null +++ b/core/gui/deletion_options.py @@ -0,0 +1,23 @@ +# Created On: 2012-05-30 +# Copyright 2012 Hardcoded Software (http://www.hardcoded.net) +# +# This software is licensed under the "BSD" License as described in the "LICENSE" file, +# which should be included with this package. The terms are also available at +# http://www.hardcoded.net/licenses/bsd_license + +from hscommon.gui.base import GUIObject +from hscommon.trans import tr + +class DeletionOptions(GUIObject): + #--- View interface + # update_msg(msg: str) + # show() + # + + def show(self, mark_count): + self.hardlink = False + self.direct = False + msg = tr("You are sending {} file(s) to the Trash.").format(mark_count) + self.view.update_msg(msg) + return self.view.show() + diff --git a/locale/core.pot b/locale/core.pot index 81975837..9313c84a 100644 --- a/locale/core.pot +++ b/locale/core.pot @@ -3,79 +3,71 @@ msgid "" msgstr "" "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "" -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "" -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "" -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "" -#: core/app.py:231 +#: core/app.py:258 msgid "You cannot delete, move or copy more than 10 duplicates at once in demo mode." msgstr "" -#: core/app.py:252 +#: core/app.py:279 msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?" msgstr "" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:327 -msgid "You are about to send %d files to Trash (and hardlink them afterwards). Continue?" -msgstr "" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "" - -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "" -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "" -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "" @@ -95,6 +87,10 @@ msgstr "" msgid "Grouped %d/%d matches" msgstr "" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." +msgstr "" + #: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "" @@ -155,15 +151,15 @@ msgstr "" msgid "Analyzed %d/%d pictures" msgstr "" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "" diff --git a/locale/cs/LC_MESSAGES/core.po b/locale/cs/LC_MESSAGES/core.po index 635fe247..1eac6d12 100644 --- a/locale/cs/LC_MESSAGES/core.po +++ b/locale/cs/LC_MESSAGES/core.po @@ -2,25 +2,25 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:231 +#: core/app.py:258 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "Shromažďuji prohlížené soubory" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání." -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s (%d vyřazeno)" @@ -96,15 +96,15 @@ msgstr "Přiřazuji prioritu skupině" msgid "Analyzed %d/%d pictures" msgstr "Analyzováno %d/%d snímků" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "Provedeno %d/%d porovnání bloků" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "Připravuji porovnávání" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "Ověřeno %d/%d shod" @@ -112,31 +112,31 @@ msgstr "Ověřeno %d/%d shod" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "Nebyli nalezeny žádné duplicity." -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "" -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "" -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "" -#: core/app.py:252 +#: core/app.py:279 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -148,35 +148,27 @@ msgstr "" msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Opravdu chcete odstranit všech %d položek ze seznamu výjimek?" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách." -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:327 -msgid "" -"You are about to send %d files to Trash (and hardlink them afterwards). " -"Continue?" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." msgstr "" -"Chystáte se vyhodit %d souborů do koše (a následně na ně vytvořit " -"hardlinky). Pokračovat?" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "Chystáte se vyhodit %d souborů do koše. Pokračovat?" diff --git a/locale/cs/LC_MESSAGES/ui.po b/locale/cs/LC_MESSAGES/ui.po index 0e41eb4f..82503e4a 100644 --- a/locale/cs/LC_MESSAGES/ui.po +++ b/locale/cs/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "Vyhledávám duplicity" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "Nahrávám" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "Přesouvám" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "Kopíruji" -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Nápověda dupeGuru" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "O aplikaci" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -87,16 +87,16 @@ msgstr "Okno s výsledky" msgid "Add Folder..." msgstr "" -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Soubor" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Nápověda" @@ -140,7 +140,7 @@ msgstr "Vyberte soubor s výsledky, který chcete nahrát" msgid "All Files (*.*)" msgstr "" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "" @@ -255,19 +255,20 @@ msgstr "Problémy!" msgid "Reveal Selected" msgstr "Ukázat vybrané ve správci souborů" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Zavřít" -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Detaily" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Akce" @@ -286,104 +287,99 @@ msgstr "" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "Označené nahradit pevnými odkazy" - -#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "Označené přesunout..." -#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "Označené kopírovat..." -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "Odstranit označené z výsledků" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "" -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "Odstranit výběr z výsledků" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "Přidat výběr na seznam výjimek" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "Výběr jako reference" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "Vybrané otevřít výchozí aplikací" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "" -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "Vybrané přejmenovat" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "Označit vše" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "Zrušit označení" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "Invertovat označení" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "Označit vybrané" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Uložit výsledky..." -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Spustit vlastní příkaz" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Sloupce" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Výchozí nastavení" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Vyberte soubor pro uložení výsledků" @@ -496,16 +492,16 @@ msgstr "EXIF razítko" msgid "Match pictures of different dimensions" msgstr "Porovnávat snímky s různými rozměry" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "Vyčistit cache snímků" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "Opravdu chcete odstranit veškeré uložené analýzy snímků?" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "Picture cache cleared." @@ -652,6 +648,8 @@ msgstr "Změnit prioritu výsledků" msgid "Ok" msgstr "Ok" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Zrušit" @@ -690,7 +688,7 @@ msgstr "Akce" msgid "Directories" msgstr "Adresáře" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Jen duplicity" @@ -789,7 +787,7 @@ msgstr "Odstraňuji mrtvé stopy z Vaší knihovny iTunes" msgid "Scanning the iTunes Library" msgstr "Procházím knihovnu iTunes" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "Vyhazuji kopie do koše" @@ -813,13 +811,13 @@ msgstr "'%@' does not exist." msgid "The name '%@' already exists." msgstr "The name '%@' already exists." -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "You have no dead tracks in your iTunes Library" @@ -835,36 +833,70 @@ msgstr "" msgid "OK" msgstr "" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "" + +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" diff --git a/locale/de/LC_MESSAGES/core.po b/locale/de/LC_MESSAGES/core.po index f0cd2da3..7eca4320 100644 --- a/locale/de/LC_MESSAGES/core.po +++ b/locale/de/LC_MESSAGES/core.po @@ -2,25 +2,25 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:231 +#: core/app.py:258 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "Sammle Dateien zum Scannen" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "Der ausgewählte Ordner enthält keine scannbare Dateien." -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s (%d verworfen)" @@ -96,15 +96,15 @@ msgstr "Gruppenpriorisierung" msgid "Analyzed %d/%d pictures" msgstr "Analysiere %d/%d Bilder" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "Performed %d/%d chunk matches" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "Vorbereitung auf den Vergleich" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "%d/%d verifizierte Paare" @@ -112,31 +112,31 @@ msgstr "%d/%d verifizierte Paare" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "Keine Duplikate gefunden." -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "" -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "" -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "" -#: core/app.py:252 +#: core/app.py:279 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -146,36 +146,28 @@ msgstr "%d Dateien werden in zukünftigen Scans ignoriert werden. Fortfahren?" msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Möchten Sie wirklich alle %d Einträge aus der Ignorier-Liste löschen?" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Sie haben keinen eigenen Befehl erstellt. Bitte in den Einstellungen " "konfigurieren." -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "kopieren" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "verschieben" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "Wählen sie einen Ordner zum {} der ausgewählten Dateien" -#: core/app.py:327 -msgid "" -"You are about to send %d files to Trash (and hardlink them afterwards). " -"Continue?" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." msgstr "" -"%d Dateien werden gelöscht und mit physikalischen Verknüpfungen ersetzt. " -"Fortfahren?" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "%d Dateien werden in den Mülleimer zu verschoben. Fortfahren?" diff --git a/locale/de/LC_MESSAGES/ui.po b/locale/de/LC_MESSAGES/ui.po index bb91427b..f6b31665 100644 --- a/locale/de/LC_MESSAGES/ui.po +++ b/locale/de/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "Suche nach Duplikaten" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "Laden" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "Verschieben" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "Kopieren" -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "Sende Dateien in den Mülleimer" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "Beenden" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Einstellungen" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "dupeGuru Hilfe" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "Über dupeGuru" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "Registriere dupeGuru" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "Auf Updates überprüfen" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "Debug Log öffnen" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -87,16 +87,16 @@ msgstr "Ergebnisfenster" msgid "Add Folder..." msgstr "Ordner hinzufügen..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Ablage" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "Ansicht" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Hilfe" @@ -140,7 +140,7 @@ msgstr "Wählen Sie eine Ergebnisliste zum Laden aus." msgid "All Files (*.*)" msgstr "Alle Dateien (*.*)" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru Ergebnisse (*.dupeguru)" @@ -264,19 +264,20 @@ msgstr "" msgid "Reveal Selected" msgstr "Zeige Markierte" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Schließen" -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Details" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Aktionen" @@ -295,104 +296,99 @@ msgstr "Verschiebe Markierte in den Mülleimer" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "Lösche Markierte und ersetze mit Hardlinks" - -#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "Verschiebe Markierte nach..." -#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "Kopiere Markierte nach..." -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "Entferne Markierte aus den Ergebnissen" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "Entferne Ausgewählte aus den Ergebnissen" -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "Entferne Ausgewählte aus den Ergebnissen" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "Füge Ausgewählte der Ignorier-Liste hinzu" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "Mache Ausgewählte zur Referenz" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "Öffne Ausgewählte mit Standardanwendung" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "Öffne beeinhaltenden Ordner der Ausgewählten" -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "Ausgewählte umbenennen" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "Alles markieren" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "Nichts markieren" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "Markierung invertieren" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "Ausgewählte markieren" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "Exportiere als HTML" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Speichere Ergebnisse..." -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Eigenen Befehl ausführen" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "Auswählen" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Spalten" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Voreinstellungen" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "{} (Ergebnisse)" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Datei zum Speichern der Ergebnisliste auswählen." @@ -505,17 +501,17 @@ msgstr "EXIF Timestamp" msgid "Match pictures of different dimensions" msgstr "Vergleiche Bilder mit unterschiedlicher Auflösung" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "Bildzwischenspeicher leeren" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "" "Möchten Sie wirklich alle zwischengespeicherten Bildanalysen entfernen?" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "Bildzwischenspeicher geleert." @@ -662,6 +658,8 @@ msgstr "Re-Prioritize Results" msgid "Ok" msgstr "Ok" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Cancel" @@ -690,7 +688,7 @@ msgstr "Action" msgid "Directories" msgstr "Directories" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Dupes Only" @@ -789,7 +787,7 @@ msgstr "Entferne tote Stücke aus Ihrer iTunes Bibliothek." msgid "Scanning the iTunes Library" msgstr "Scanne die iTunes Bibiliothek" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "Verschiebe Duplikate in den Mülleimer" @@ -813,13 +811,13 @@ msgstr "'%@' does not exist." msgid "The name '%@' already exists." msgstr "The name '%@' already exists." -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "You have no dead tracks in your iTunes Library" @@ -835,36 +833,70 @@ msgstr "" msgid "OK" msgstr "" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "" + +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" diff --git a/locale/fr/LC_MESSAGES/core.po b/locale/fr/LC_MESSAGES/core.po index a4011147..22ed444e 100644 --- a/locale/fr/LC_MESSAGES/core.po +++ b/locale/fr/LC_MESSAGES/core.po @@ -2,27 +2,27 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "ne peut effacer, déplacer ou copier que 10 doublons à la fois" -#: core/app.py:231 +#: core/app.py:258 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -"Vous ne pouvez pas effacer, déplacer ou copier plus de 10 doublons à la " -"fois en mode démo." +"Vous ne pouvez pas effacer, déplacer ou copier plus de 10 doublons à la fois" +" en mode démo." -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "Collecte des fichiers à scanner" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides." -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s (%d hors-groupe)" @@ -98,15 +98,15 @@ msgstr "Prioritization des groupes" msgid "Analyzed %d/%d pictures" msgstr "Analyzé %d/%d images" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "%d/%d blocs d'images comparés" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "Préparation pour la comparaison" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "Vérifié %d/%d paires" @@ -114,32 +114,32 @@ msgstr "Vérifié %d/%d paires" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "Aucun doublon marqué. Rien à faire." -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "Aucun doublon sélectionné. Rien à faire." -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "Aucun doublon trouvé." -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "Tous les fichiers marqués ont été copiés correctement." -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "Tous les fichiers marqués ont été déplacés correctement." -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "" "Tous les fichiers marqués ont été correctement envoyés à la corbeille." -#: core/app.py:252 +#: core/app.py:279 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -151,34 +151,27 @@ msgstr "" "Voulez-vous vider la liste de fichiers ignorés des %d items qu'elle " "contient?" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences." -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "%d fichiers seront retirés des résultats. Continuer?" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "copier" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "déplacer" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "Sélectionnez un dossier vers lequel {} les fichiers marqués." -#: core/app.py:327 -msgid "" -"You are about to send %d files to Trash (and hardlink them afterwards). " -"Continue?" -msgstr "" -"%d fichiers seront envoyés à la corbeille (puis 'hardlinkés'). Continuer?" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "%d fichiers seront envoyés à la corbeille. Continuer?" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." +msgstr "Vous envoyez {} fichier(s) à la corbeille." diff --git a/locale/fr/LC_MESSAGES/ui.po b/locale/fr/LC_MESSAGES/ui.po index b1fdf0fd..060e550e 100644 --- a/locale/fr/LC_MESSAGES/ui.po +++ b/locale/fr/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "Scan de doublons en cours" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "Chargement en cours" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "Déplacement en cours" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "Copie en cours" -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "Envoi de fichiers à la corbeille" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "Quitter" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Préférences" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Aide dupeGuru" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "À propos de dupeGuru" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "Enregistrer dupeGuru" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "Vérifier les mises à jour" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "Ouvrir logs de déboguage" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -87,16 +87,16 @@ msgstr "Fenêtre de résultats" msgid "Add Folder..." msgstr "Ajouter dossier..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Fichier" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "Voir" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Aide" @@ -140,7 +140,7 @@ msgstr "Sélectionnez un fichier résultats à charger" msgid "All Files (*.*)" msgstr "Tout les fichiers (*.*)" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "Résultats dupeGuru (*.dupeguru)" @@ -266,19 +266,20 @@ msgstr "" msgid "Reveal Selected" msgstr "Révéler Fichier" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Fermer" -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Détails" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Actions" @@ -297,104 +298,99 @@ msgstr "Envoyer marqués à la corbeille" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "Remplacer marqués par des hardlinks" - -#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "Déplacer marqués vers..." -#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "Copier marqués vers..." -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "Retirer marqués des résultats" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "Re-prioriser les résultats" -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "Retirer sélectionnés des résultats" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "Ajouter sélectionnés à la liste de fichiers ignorés" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "Transformer sélectionnés en références" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "Ouvrir sélectionné avec l'application par défaut" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "Ouvrir le dossier contenant le fichier sélectionné" -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "Renommer sélectionné" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "Tout marquer" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "Tout démarquer" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "Inverser le marquage" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "Marquer sélectionnés" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "Exporter vers HTML" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Sauvegarder résultats..." -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Invoquer commande personnalisée" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "Marquer" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Colonnes" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Réinitialiser" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "{} (Résultats)" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Sélectionnez un fichier résultats dans lequel sauvegarder" @@ -507,16 +503,16 @@ msgstr "EXIF Timestamp" msgid "Match pictures of different dimensions" msgstr "Comparer les images de tailles différentes" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "Vider la cache d'images" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "Voulez-vous vraiment vider la cache de vos analyses précédentes?" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "La cache des analyses précédentes a été vidée." @@ -663,6 +659,8 @@ msgstr "Re-prioriser les résultats" msgid "Ok" msgstr "Ok" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Annuler" @@ -701,7 +699,7 @@ msgstr "Action" msgid "Directories" msgstr "Dossiers" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Sans réf." @@ -800,7 +798,7 @@ msgstr "Retrait des tracks mortes de votre librairie iTunes" msgid "Scanning the iTunes Library" msgstr "Scan de la librairie iTunes en cours" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "Envoi de doublons à la corbeille en cours" @@ -824,14 +822,14 @@ msgstr "'%@' n'existe pas." msgid "The name '%@' already exists." msgstr "Le nom '%@' existe déjà." -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" "Votre librairie iTunes contient %d tracks mortes qui seront retirées. " "Continuer?" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "Votre librairie iTunes ne contient aucune track morte." @@ -847,36 +845,72 @@ msgstr "Non" msgid "OK" msgstr "OK" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "Liste de doublons ignorés" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "Effacer sélection" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "Vider" + +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "Options de suppression" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "Remplacer par des \"hardlinks\"" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "Après avoir supprimé un fichier, on remplace celui-ci par un lien " +"vers son fichier de référence." + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "Supprimer les fichiers directement" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "Au lieu de passer par la corbeille, supprimer directement. Cette " +"option n'est généralement utilisée qu'en cas de problème." + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "Continuer" diff --git a/locale/hy/LC_MESSAGES/core.po b/locale/hy/LC_MESSAGES/core.po index 62e652c3..81f5bf0a 100755 --- a/locale/hy/LC_MESSAGES/core.po +++ b/locale/hy/LC_MESSAGES/core.po @@ -13,12 +13,12 @@ msgstr "" "X-Poedit-Language: Armenian\n" "X-Poedit-SourceCharset: utf-8\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" "միաժամանակ հնարավոր է ջնջել, տեղափոխել կամ պատճենել միայն 10 օրինակներ" -#: core/app.py:231 +#: core/app.py:258 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." @@ -26,15 +26,15 @@ msgstr "" "Չեք կարող ջնջել, տեղափձոխել կամ պատճենել ավելի քան 10 օրինակներ փորձնական " "եղանակում:" -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:" -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s (%d անպիտան)" @@ -110,15 +110,15 @@ msgstr "Խմբի առաջնայնացում" msgid "Analyzed %d/%d pictures" msgstr "Ստուգվում է %d/%d նկարները" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "Կատարվում է %d/%d տվյալի համընկնում" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "Նախապատրաստեցվում է համընկնումը" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "Ստուգում է %d/%d համընկնումները" @@ -126,31 +126,31 @@ msgstr "Ստուգում է %d/%d համընկնումները" msgid "Read EXIF of %d/%d pictures" msgstr "Կարդալ EXIF-ը d/%d նկարներից" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "Կրկնօրինակներ չկան:" -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "Բոլոր նշված ֆայլերը հաջողությամբ պատճենվել են:" -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "Բոլոր նշված ֆայլերը հաջողությամբ տեղափոխվել են:" -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "Բոլոր նշված ֆայլերը հաջողությամբ Ջնջվել են:" -#: core/app.py:252 +#: core/app.py:279 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -161,32 +161,26 @@ msgstr "" msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Ցանկանու՞մ եք հեռացնել բոլոր %d ֆայլերը անտեսումների ցանկից:" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:" -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "պատճենել" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "տեղափոխել" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "Ընտրել թղթապանակ՝ {} նշված ֆայլերի համար" -#: core/app.py:327 -msgid "" -"You are about to send %d files to Trash (and hardlink them afterwards). " -"Continue?" -msgstr "Դուք ուղարկում եք %d ֆայլերը Աղբարկղ: Շարունակե՞լ:" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "%d ֆայլերը տեղափոխվելու են Աղբարկղ: Շարունակե՞լ:" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." +msgstr "" diff --git a/locale/hy/LC_MESSAGES/ui.po b/locale/hy/LC_MESSAGES/ui.po index edac9a1a..85795865 100755 --- a/locale/hy/LC_MESSAGES/ui.po +++ b/locale/hy/LC_MESSAGES/ui.po @@ -13,19 +13,19 @@ msgstr "" "X-Poedit-Language: Armenian\n" "X-Poedit-SourceCharset: utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "Ստուգվում են կրկնօրինակները" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "Բացվում է" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "Տեղափոխվում է" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "Պատճենվում է" @@ -41,7 +41,7 @@ msgstr "Հեռացվում են վնասված շավիղները iTunes-ի Շտ msgid "Scanning the iTunes Library" msgstr "Ստուգվում է iTunes-ի Շտեմարանը" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "Խաբկանքները տեղափոխվում են Աղբարկղ" @@ -53,39 +53,39 @@ msgstr "Զրույց iPhoto-ի հետ: Մի կպեք! " msgid "The iPhoto application couldn't be found." msgstr "iPhoto ծրագիրը չի գտնվել:" -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "Ֆայլերը ուղարկվում են Աղբարկղ" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "Փակել" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Կարգավորումներ" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "dupeGuru-ի Օգնությունը" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "dupeGuru-ի մասին" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "Գրանցել dupeGuru-ն" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "Ստուգել թարմացումները" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "Բացել Սխալների մատյանը" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -122,16 +122,16 @@ msgstr "Արդյունքի պատուհանը" msgid "Add Folder..." msgstr "Ավելացնել թղթապանակ..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Ֆայլ" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "Տեսքը" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Օգնություն" @@ -175,7 +175,7 @@ msgstr "Ընտրեք արդյունքի ֆայլը՝ բացելու համար" msgid "All Files (*.*)" msgstr "Բոլոր ֆայլերը (*.*)" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru-ի արդյունքները (*.dupeguru)" @@ -299,19 +299,20 @@ msgstr "" msgid "Reveal Selected" msgstr "Ցուցադրել ընտրվածը" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Փակել" -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Մանրամասն" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Գործողություններ" @@ -330,104 +331,99 @@ msgstr "Ուղարկել նշվածները Աղբարկղ" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "Ջնջել նշված և փոխարինված ըստ ձեռադրի" - -#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "Տեղափ. նշվածը՝" -#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "Պատճ. նշվածը՝" -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "Հեռացնել նշվածները ցանկից" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "Վերաառաջնայնավորել արդյունքները..." -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "ՀԵռացնել ընտրվածը արդյունքներից" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "Ավելացնել ընտրվածը Անտեսումների ցանկ" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "Նշել ընտրվածի հղումը" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "Բացել ընտրվածը Հիմնական ծրագրով" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "Բացել ընտրվածը պարունակող թղթապանակը" -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "Անվանափոխել ընտրվածը" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "Նշել բոլորը" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "Ոչինչ չնշել" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "Ետարկել նշումը" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "Նշել ընտրվածը" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "Արտածել HTML-ով" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Պահպանել արդյունքները..." -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Անտեսել Հրամանի կատարումը" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "Նշել" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Սյուները" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Ետարկել ծրագրայինի" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "{} Արդյունքներ" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Ընտրեք ֆայլը՝ պահպանելու արդյունքները՝" @@ -540,16 +536,16 @@ msgstr "EXIF Timestamp" msgid "Match pictures of different dimensions" msgstr "Նկարների համընկնում տարբեր չափերով" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "Մաքրել նկարի պահոցը" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "Ցանկանու՞մ եք հեռացնել բոլոր պահված նկարները ստուգելուց:" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "Նկարի պահոցը մաքրվել է:" @@ -594,14 +590,14 @@ msgstr "'%@'-ը գոյություն չունի:" msgid "The name '%@' already exists." msgstr "'%@' անունը արդեն առկա է:" -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" "Ձեր iTunes- Շտեմարանը պարունակում է %d մահացած շավիղներ, որոնք կարող են " "ջնջվել: Շարունակե՞լ:" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "Դուք չունեք շավիղներ Ձեր iTunes Շտեմարանում" @@ -731,6 +727,8 @@ msgstr "Վերաառաջնայնավորել արդյունքները" msgid "Ok" msgstr "ԼԱՎ" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Չեղարկել" @@ -759,7 +757,7 @@ msgstr "Գործողությունը" msgid "Directories" msgstr "Թղթապանակներ" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Միայն կրկ." @@ -846,36 +844,70 @@ msgstr "Ջնջել դատարկ թղթապանակները ջնջելուց կա msgid "dupeGuru PE Preferences" msgstr "dupeGuru PE կարգավորումները" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "" + +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" diff --git a/locale/it/LC_MESSAGES/core.po b/locale/it/LC_MESSAGES/core.po index 28ae7fe4..a76d50a8 100644 --- a/locale/it/LC_MESSAGES/core.po +++ b/locale/it/LC_MESSAGES/core.po @@ -2,25 +2,25 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:231 +#: core/app.py:258 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "Raccolta file da scansionare" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "Le cartelle selezionate non contengono file da scansionare." -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s (%d scartati)" @@ -97,15 +97,15 @@ msgstr "Applicazione delle priorità di gruppo" msgid "Analyzed %d/%d pictures" msgstr "Analizzate %d/%d immagini" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "Effettuate %d/%d comparazioni sui sottogruppi di immagini" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "Preparazione per la comparazione" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "Verificate %d/%d somiglianze" @@ -113,31 +113,31 @@ msgstr "Verificate %d/%d somiglianze" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "Non sono stati trovati dei duplicati." -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "Tutti i file marcati sono stati copiati correttamente." -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "Tutti i file marcati sono stati spostati correttamente." -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "Tutti i file marcati sono stati inviati nel cestino." -#: core/app.py:252 +#: core/app.py:279 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -151,35 +151,28 @@ msgstr "" "Vuoi veramente rimuovere tutti i %d elementi dalla lista dei file da " "ignorare?" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Non hai impostato nessun comando personalizzato. Impostalo nelle tue " "preferenze." -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "Stai per rimuovere %d file dai risultati. Continuare?" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:327 -msgid "" -"You are about to send %d files to Trash (and hardlink them afterwards). " -"Continue?" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." msgstr "" -"Stai per inviare %d file nel cestino (compresi gli hardlink). Continuare?" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "Stai per inviare %d file nel cestino. Continuare?" diff --git a/locale/it/LC_MESSAGES/ui.po b/locale/it/LC_MESSAGES/ui.po index d224491d..f0602508 100644 --- a/locale/it/LC_MESSAGES/ui.po +++ b/locale/it/LC_MESSAGES/ui.po @@ -2,19 +2,19 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "Scansione per i duplicati" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "Caricamento" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "Spostamento" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "Copia in corso" @@ -30,7 +30,7 @@ msgstr "Rimozione delle tracce insistenti dalla libreria di iTunes" msgid "Scanning the iTunes Library" msgstr "Scansione della libreria di iTunes" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "Spostamento dei duplicati nel cestino" @@ -42,39 +42,39 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "Non trovo l'applicazione iPhoto." -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Aiuto di dupeGuru" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "Informazioni su dupeGuru" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -111,16 +111,16 @@ msgstr "Finestra dei risultati" msgid "Add Folder..." msgstr "" -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "File" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Aiuto" @@ -166,7 +166,7 @@ msgstr "Seleziona un risultato (file) da caricare" msgid "All Files (*.*)" msgstr "" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "" @@ -292,19 +292,20 @@ msgstr "" msgid "Reveal Selected" msgstr "Mostra i selezionati" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Chiudi" -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Dettagli" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Azioni" @@ -323,104 +324,99 @@ msgstr "" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "Cancella gli elementi marcati e sostituiscili con degli Hardlinks" - -#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "Sposta gli elementi marcati nel..." -#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "Copia gli elementi evidenziati nel..." -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "Rimuovi gli elementi marcati dai risultati" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "" -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "Rimuovi gli elementi selezionati dai risultati" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "Aggiungi gli elementi selezionati alla lista da ignorare" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "Imposta gli elementi selezionati come riferimento" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "Apri gli elementi selezionati con l'applicazione predefinita" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "" -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "Rinomina gli elementi selezionati" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "Marca tutti" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "Deseleziona tutti" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "Inverti la selezione" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "Marca i selezionati" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Salva i risultati..." -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Invoca comando personalizzato" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Colonne" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Ripristina impostazioni predefinite" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Seleziona un file dove salvare i tuoi risultati" @@ -533,18 +529,18 @@ msgstr "Data e ora EXIF" msgid "Match pictures of different dimensions" msgstr "Includi immagini di dimensione differente" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "Cancella la cache delle immagini" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "" "Vuoi veramente rimuovere tutte le analisi delle immagini memorizzate nella " "cache?" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "" @@ -691,6 +687,8 @@ msgstr "Cambia la priorità dei risultati" msgid "Ok" msgstr "Ok" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Cancella" @@ -729,7 +727,7 @@ msgstr "Azione" msgid "Directories" msgstr "Cartelle" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Solo duplicati" @@ -829,14 +827,14 @@ msgstr "'%@' non esiste." msgid "The name '%@' already exists." msgstr "Il nome '%@' è già esistente." -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" "La tua libreria di iTunes contiene %d tracce inesistenti pronte per essere " "rimosse. Continuare?" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "La tua libreria di iTunes non contiene tracce inesistenti" @@ -852,36 +850,70 @@ msgstr "No" msgid "OK" msgstr "" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "" + +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/core.po b/locale/ru/LC_MESSAGES/core.po index 91de16ab..ecec2bbd 100755 --- a/locale/ru/LC_MESSAGES/core.po +++ b/locale/ru/LC_MESSAGES/core.po @@ -12,12 +12,12 @@ msgstr "" "X-Poedit-Country: RUSSIAN FEDERATION\n" "X-Poedit-Language: Russian\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" "сможете только для удаления, перемещения или копирования 10 копий сразу" -#: core/app.py:231 +#: core/app.py:258 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." @@ -25,15 +25,15 @@ msgstr "" "Вы не можете удалять, перемещать или копировать более 10 дубликатов сразу в " "демонстрационном режиме." -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "Сбор файлов для сканирования" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "Выбранных директорий не содержат сканируемых файлов." -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s. (%d отменено)" @@ -109,15 +109,15 @@ msgstr "Делая группы приоритетов" msgid "Analyzed %d/%d pictures" msgstr "Анализируется %d/%d фотографии" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "Исполняет %d/%d совпадениях кусоков" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "Подготовка для сравнения" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "Проверенные %d/%d совпадениях" @@ -125,31 +125,31 @@ msgstr "Проверенные %d/%d совпадениях" msgid "Read EXIF of %d/%d pictures" msgstr "Прочитано EXIF %d/%d из фотографии" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "Дубликаты не найдены." -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "Все выбранные файлы были скопированы успешно." -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "Все выбранные файлы были перемещены успешно." -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "Все выбранные файлы были успешно отправлены в корзину." -#: core/app.py:252 +#: core/app.py:279 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -161,36 +161,28 @@ msgstr "" msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Вы действительно хотите удалить все элементы %d из черного списка?" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "У вас нет пользовательской команды создали. Установите его в ваших " "предпочтениях." -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "Вы собираетесь удалить файлы %d из результата поиска. Продолжить?" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "копия" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "перемещение" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "Выберите каталог на {} отмеченные файлы" -#: core/app.py:327 -msgid "" -"You are about to send %d files to Trash (and hardlink them afterwards). " -"Continue?" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." msgstr "" -"Вы собираетесь отправить%d файлы в корзину (и жесткую них позже). " -"Продолжить?" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "Вы собираетесь отправить %d файлы в корзину. Продолжить?" diff --git a/locale/ru/LC_MESSAGES/ui.po b/locale/ru/LC_MESSAGES/ui.po index d7666723..241dbf51 100755 --- a/locale/ru/LC_MESSAGES/ui.po +++ b/locale/ru/LC_MESSAGES/ui.po @@ -12,19 +12,19 @@ msgstr "" "X-Poedit-Country: RUSSIAN FEDERATION\n" "X-Poedit-Language: Russian\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "Проверка на наличие дубликатов" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "Загрузка" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "Перемещение" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "Копирование" @@ -40,7 +40,7 @@ msgstr "Удаление мертвых треков из вашей библи msgid "Scanning the iTunes Library" msgstr "Сканирование ITunes библиотеки" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "Отправка обманов в корзину" @@ -52,39 +52,39 @@ msgstr "В контакте с iPhoto. Не трогайте!" msgid "The iPhoto application couldn't be found." msgstr "iPhoto приложение не может быть найдено." -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "Отправка файлов в корзину" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "Выход" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Предпочтения" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Справка dupeGuru" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "О dupeGuru" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "Регистрация dupeGuru" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "Проверить обновления" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "Открыть журнал Debug" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -121,16 +121,16 @@ msgstr "Окно результатов" msgid "Add Folder..." msgstr "Добавить папку ..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Файл" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "Вид" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Помощь" @@ -174,7 +174,7 @@ msgstr "Выберите файл результатов для загрузки msgid "All Files (*.*)" msgstr "Все файлы (*.*)" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru результаты (*. dupeguru)" @@ -302,19 +302,20 @@ msgstr "" msgid "Reveal Selected" msgstr "Показать выбранное" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Закрывать" -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Детали" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Действия" @@ -333,104 +334,99 @@ msgstr "Отправить Помечено в Корзину" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "Удалить Помеченные и заменить с Жестким" - -#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "Перемещение Помечено в ..." -#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "Скопировть Помечено в ..." -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "Удалить Помеченные от результатов" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "Изменить приоритеты Результатов ..." -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "Удалить выбранные из результатов" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "Добавить выбранные в черный список" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "Сделать выбранной ссылки" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "Открыть выбранный с приложений по умолчанию" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "Открыть содержащую папку выборных " -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "Переименовать выбранное" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "Отметить все" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "Не отметить" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "Обратить Маркировку" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "Отметить Выбранные" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "Экспорт в HTML" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Сохранить результаты ..." -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Вызвать специальную команду" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "Отметить" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Колонны" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Восстановить значения по умолчанию" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "{} Результаты" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Выберите файл, чтобы сохранить ваши результаты" @@ -543,16 +539,16 @@ msgstr "EXIF Timestamp" msgid "Match pictures of different dimensions" msgstr "Совпадения рисунков разных размеров" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "Очистить кэш фото" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "Вы действительно хотите удалить все кэшированные анализ картины?" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "Кэш-память изображений очищается." @@ -597,14 +593,14 @@ msgstr "'%@' не существует." msgid "The name '%@' already exists." msgstr " Имя '%@' уже существует." -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" "Ваш ITunes библиотека содержит %d мертвых треков готовы быть удалены. " "Продолжить?" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "У вас нет мертвых треков в вашей библиотеке ITunes" @@ -734,6 +730,8 @@ msgstr "Изменить приоритеты Результатов" msgid "Ok" msgstr "ОК" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Отменить" @@ -762,7 +760,7 @@ msgstr "Действие" msgid "Directories" msgstr "Каталоги" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Только обманки" @@ -849,36 +847,70 @@ msgstr "Удалить пустые папки после удаления и п msgid "dupeGuru PE Preferences" msgstr "dupeGuru PE предпочтения" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "" + +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" diff --git a/locale/ui.pot b/locale/ui.pot index 5ce296b9..55aa7983 100644 --- a/locale/ui.pot +++ b/locale/ui.pot @@ -2,19 +2,19 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "" @@ -30,30 +30,30 @@ msgstr "" msgid "Scanning the iTunes Library" msgstr "" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" @@ -65,50 +65,90 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "" -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." msgstr "" +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" + +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +#: cocoa/base/en.lproj/PrioritizeDialog.strings:0 +msgid "Cancel" +msgstr "" + #: qt/base/details_table.py:16 cocoa/base/en.lproj/DetailsPanel.strings:0 #: cocoa/pe/en.lproj/DetailsPanel.strings:0 msgid "Attribute" @@ -138,16 +178,16 @@ msgstr "" msgid "Add Folder..." msgstr "" -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "" @@ -191,7 +231,7 @@ msgstr "" msgid "All Files (*.*)" msgstr "" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "" @@ -223,16 +263,22 @@ msgstr "" msgid "Normal" msgstr "" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "" +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: cocoa/base/en.lproj/ProblemDialog.strings:0 +msgid "Close" +msgstr "" + #: qt/base/preferences_dialog.py:37 msgid "Scan Type:" msgstr "" @@ -320,19 +366,14 @@ msgstr "" msgid "Reveal Selected" msgstr "" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 -#: cocoa/base/en.lproj/ProblemDialog.strings:0 -msgid "Close" -msgstr "" - -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "" @@ -351,112 +392,107 @@ msgstr "" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" +msgid "Move Marked to..." msgstr "" #: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Move Marked to..." +msgid "Copy Marked to..." msgstr "" #: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Copy Marked to..." -msgstr "" - -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "" -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "" -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "" -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "" @@ -569,16 +605,16 @@ msgstr "" msgid "Match pictures of different dimensions" msgstr "" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "" @@ -749,10 +785,6 @@ msgstr "" msgid "Ok" msgstr "" -#: cocoa/base/en.lproj/PrioritizeDialog.strings:0 -msgid "Cancel" -msgstr "" - #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "dupeGuru Results" msgstr "" diff --git a/locale/uk/LC_MESSAGES/columns.po b/locale/uk/LC_MESSAGES/columns.po index e04c6ade..b031b574 100755 --- a/locale/uk/LC_MESSAGES/columns.po +++ b/locale/uk/LC_MESSAGES/columns.po @@ -12,8 +12,7 @@ msgstr "" "X-Poedit-Country: UKRAINE\n" "X-Poedit-Language: Ukrainian\n" -#: core/gui/ignore_list_table.py:18 -#: core/gui/ignore_list_table.py:19 +#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19 #: core/gui/problem_table.py:17 msgid "File Path" msgstr "Шлях до файлу" @@ -22,23 +21,17 @@ msgstr "Шлях до файлу" msgid "Error Message" msgstr "Повідомлення про помилку" -#: core/prioritize.py:63 -#: core_me/result_table.py:24 -#: core_pe/result_table.py:21 +#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21 #: core_se/result_table.py:21 msgid "Kind" msgstr "Тип" -#: core/prioritize.py:72 -#: core_me/result_table.py:19 -#: core_pe/result_table.py:19 +#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19 #: core_se/result_table.py:19 msgid "Folder" msgstr "Папка" -#: core/prioritize.py:88 -#: core_me/result_table.py:18 -#: core_pe/result_table.py:18 +#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18 #: core_se/result_table.py:18 msgid "Filename" msgstr "Ім’я файлу" @@ -47,10 +40,8 @@ msgstr "Ім’я файлу" msgid "Size" msgstr "Розмір" -#: core/prioritize.py:138 -#: core_me/result_table.py:25 -#: core_pe/result_table.py:23 -#: core_se/result_table.py:22 +#: core/prioritize.py:138 core_me/result_table.py:25 +#: core_pe/result_table.py:23 core_se/result_table.py:22 msgid "Modification" msgstr "Дата модифікації" @@ -58,8 +49,7 @@ msgstr "Дата модифікації" msgid "Duration" msgstr "Тривалість" -#: core_me/prioritize.py:22 -#: core_me/result_table.py:22 +#: core_me/prioritize.py:22 core_me/result_table.py:22 msgid "Bitrate" msgstr "Якість звуку" @@ -107,30 +97,24 @@ msgstr "Номер доріжки" msgid "Comment" msgstr "Коментар" -#: core_me/result_table.py:33 -#: core_pe/result_table.py:24 +#: core_me/result_table.py:33 core_pe/result_table.py:24 #: core_se/result_table.py:23 msgid "Match %" msgstr "Збіг (%)" -#: core_me/result_table.py:34 -#: core_se/result_table.py:24 +#: core_me/result_table.py:34 core_se/result_table.py:24 msgid "Words Used" msgstr "Використані слова" -#: core_me/result_table.py:35 -#: core_pe/result_table.py:25 +#: core_me/result_table.py:35 core_pe/result_table.py:25 #: core_se/result_table.py:25 msgid "Dupe Count" msgstr "Кількість дублікатів" -#: core_pe/prioritize.py:16 -#: core_pe/result_table.py:22 +#: core_pe/prioritize.py:16 core_pe/result_table.py:22 msgid "Dimensions" msgstr "Виміри" -#: core_pe/result_table.py:20 -#: core_se/result_table.py:20 +#: core_pe/result_table.py:20 core_se/result_table.py:20 msgid "Size (KB)" msgstr "Розмір (KB)" - diff --git a/locale/uk/LC_MESSAGES/core.po b/locale/uk/LC_MESSAGES/core.po index 94e32c95..5a4d117a 100755 --- a/locale/uk/LC_MESSAGES/core.po +++ b/locale/uk/LC_MESSAGES/core.po @@ -12,38 +12,39 @@ msgstr "" "X-Poedit-Country: UKRAINE\n" "X-Poedit-Language: Ukrainian\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "може видаляти, переміщувати або копіювати лише 10 копій відразу" -#: core/app.py:231 -msgid "You cannot delete, move or copy more than 10 duplicates at once in demo mode." -msgstr "Ви не можете видаляти, переміщати або копіювати більше 10 дублікатів відразу в демонстраційному режимі." +#: core/app.py:258 +msgid "" +"You cannot delete, move or copy more than 10 duplicates at once in demo " +"mode." +msgstr "" +"Ви не можете видаляти, переміщати або копіювати більше 10 дублікатів відразу" +" в демонстраційному режимі." -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "Збір файлів для пошуку" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "Обрані папки не містять файлів придатних для пошуку." -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s (%d відкинуто)" -#: core/engine.py:178 -#: core/engine.py:215 +#: core/engine.py:178 core/engine.py:215 msgid "0 matches found" msgstr "0 результатів знайдено" -#: core/engine.py:196 -#: core/engine.py:223 +#: core/engine.py:196 core/engine.py:223 msgid "%d matches found" msgstr "%d результатів знайдено" -#: core/engine.py:208 -#: core/scanner.py:80 +#: core/engine.py:208 core/scanner.py:80 msgid "Read size of %d/%d files" msgstr "Прочитано розмір %d/%d файлів" @@ -111,15 +112,15 @@ msgstr "Виконується пріорітизація груп" msgid "Analyzed %d/%d pictures" msgstr "Проаналізовано %d/%d фотографій" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "Виконано %d/%d порівнянь шматків" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "Підготовка до порівняння" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "Перевірено %d/%d результатів" @@ -127,64 +128,62 @@ msgstr "Перевірено %d/%d результатів" msgid "Read EXIF of %d/%d pictures" msgstr "Прочитано EXIF з %d/%d фотографій" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "Немає позначених дублікатів - нічого робити." -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "Немає обраних дублікатів - нічого робити." -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "Не знайдено жодного дублікату." -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "Усі позначені файли були скопійовані успішно." -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "Усі позначені файли були переміщені успішно." -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "Усі позначені файли були успішно відправлені до кошика." -#: core/app.py:252 -msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?" -msgstr "Усі обрані %d результатів будуть ігноруватися під час усіх наступних пошуків. Продовжити?" +#: core/app.py:279 +msgid "" +"All selected %d matches are going to be ignored in all subsequent scans. " +"Continue?" +msgstr "" +"Усі обрані %d результатів будуть ігноруватися під час усіх наступних " +"пошуків. Продовжити?" #: core/gui/ignore_list_dialog.py:24 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "Ви дійсно хочете видалити всі %d елементів з чорного списку?" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "Власна команда не встановлена. Встановіть її у налаштуваннях." -#: core/app.py:454 -#: core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "Ви збираєтеся видалити %d файлів з результату пошуку. Продовжити?" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "копіювання" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "переміщення" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "Оберіть цільову папку для {} позначених файлів" -#: core/app.py:327 -msgid "You are about to send %d files to Trash (and hardlink them afterwards). Continue?" -msgstr "Ви збираєтеся відправити %d файлів до кошика (та потім створити жорсткі посилання замість них). Продовжити?" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "Ви збираєтеся відправити %d файлів до кошику. Продовжити?" - +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." +msgstr "" diff --git a/locale/uk/LC_MESSAGES/ui.po b/locale/uk/LC_MESSAGES/ui.po index e9809200..bf5f47cd 100755 --- a/locale/uk/LC_MESSAGES/ui.po +++ b/locale/uk/LC_MESSAGES/ui.po @@ -1,4 +1,4 @@ -# +# msgid "" msgstr "" "Project-Id-Version: Ukrainian\n" @@ -12,23 +12,19 @@ msgstr "" "X-Poedit-Country: UKRAINE\n" "X-Poedit-Language: Ukrainian\n" -#: cocoa/inter/app.py:15 -#: qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "Пошук дублікатів" -#: cocoa/inter/app.py:16 -#: qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "Завантаження" -#: cocoa/inter/app.py:17 -#: qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "Переміщення" -#: cocoa/inter/app.py:18 -#: qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "Копіювання" @@ -44,8 +40,7 @@ msgstr "Видалення мертвих треків з вашої біблі msgid "Scanning the iTunes Library" msgstr "Сканування бібліотеки iTunes" -#: cocoa/inter/app_me.py:154 -#: cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "Відправлення дублікатів до кошика" @@ -57,73 +52,68 @@ msgstr "Виконується взаємодія з програмою iPhoto. msgid "The iPhoto application couldn't be found." msgstr "Не вдалося знайти програму iPhoto." -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "Відправлення файлів до кошика" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "Вихід" -#: qt/base/app.py:111 -#: qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "Налаштування" -#: qt/base/app.py:113 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "Довідка dupeGuru" -#: qt/base/app.py:114 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "Про dupeGuru" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "Зареєструвати dupeGuru" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "Перевірити оновлення" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "Відкрити журнал налагодження" -#: qt/base/app.py:232 -#: cocoa/base/en.lproj/Localizable.strings:0 -msgid "A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again." -msgstr "Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте кілька секунд, потім повторіть спробу." +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 +msgid "" +"A previous action is still hanging in there. You can't start a new one yet. " +"Wait a few seconds, then try again." +msgstr "" +"Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте" +" кілька секунд, потім повторіть спробу." -#: qt/base/details_table.py:16 -#: cocoa/base/en.lproj/DetailsPanel.strings:0 +#: qt/base/details_table.py:16 cocoa/base/en.lproj/DetailsPanel.strings:0 #: cocoa/pe/en.lproj/DetailsPanel.strings:0 msgid "Attribute" msgstr "Атрибут" -#: qt/base/details_table.py:16 -#: cocoa/base/en.lproj/DetailsPanel.strings:0 +#: qt/base/details_table.py:16 cocoa/base/en.lproj/DetailsPanel.strings:0 #: cocoa/pe/en.lproj/DetailsPanel.strings:0 msgid "Selected" msgstr "Обраний" -#: qt/base/details_table.py:16 -#: qt/base/directories_model.py:21 +#: qt/base/details_table.py:16 qt/base/directories_model.py:21 #: cocoa/base/en.lproj/DetailsPanel.strings:0 #: cocoa/base/en.lproj/DirectoryPanel.strings:0 #: cocoa/pe/en.lproj/DetailsPanel.strings:0 msgid "Reference" msgstr "Посилання" -#: qt/base/directories_dialog.py:57 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/directories_dialog.py:57 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Load Results..." msgstr "Завантажити результати ..." -#: qt/base/directories_dialog.py:58 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/directories_dialog.py:58 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Results Window" msgstr "Вікно результатів" @@ -131,25 +121,21 @@ msgstr "Вікно результатів" msgid "Add Folder..." msgstr "Додати папку ..." -#: qt/base/directories_dialog.py:67 -#: qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "Файл" -#: qt/base/directories_dialog.py:69 -#: qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "Вид" -#: qt/base/directories_dialog.py:71 -#: qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "Допомога" -#: qt/base/directories_dialog.py:73 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/directories_dialog.py:73 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Load Recent Results" msgstr "Завантажити нещодавні результати" @@ -172,18 +158,15 @@ msgstr "Шукати" msgid "Unsaved results" msgstr "Незбережені результати" -#: qt/base/directories_dialog.py:180 -#: cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:180 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to quit?" msgstr "Ви маєте незбережені результати, ви дійсно хочете вийти?" -#: qt/base/directories_dialog.py:188 -#: cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:188 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a folder to add to the scanning list" msgstr "Оберіть папку для додання в список пошуку" -#: qt/base/directories_dialog.py:205 -#: cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:205 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a results file to load" msgstr "Виберіть файл результатів для завантаження" @@ -191,8 +174,7 @@ msgstr "Виберіть файл результатів для завантаж msgid "All Files (*.*)" msgstr "Всі файли (*.*)" -#: qt/base/directories_dialog.py:206 -#: qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "Результати dupeGuru (*.dupeguru) " @@ -200,8 +182,7 @@ msgstr "Результати dupeGuru (*.dupeguru) " msgid "Start a new scan" msgstr "Почати новий пошук" -#: qt/base/directories_dialog.py:218 -#: cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/directories_dialog.py:218 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have unsaved results, do you really want to continue?" msgstr "Ви маєте незбережені результати, ви дійсно хочете продовжити?" @@ -241,8 +222,7 @@ msgstr "Більше результатів" msgid "Fewer Results" msgstr "Менше результатів" -#: qt/base/preferences_dialog.py:88 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/preferences_dialog.py:88 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Font size:" @@ -252,36 +232,31 @@ msgstr "Розмір шрифта:" msgid "Language:" msgstr "Мова:" -#: qt/base/preferences_dialog.py:98 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/preferences_dialog.py:98 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Copy and Move:" msgstr "Копіювання і переміщення:" -#: qt/base/preferences_dialog.py:101 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/preferences_dialog.py:101 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Right in destination" msgstr "Прямо у цільову папку" -#: qt/base/preferences_dialog.py:102 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/preferences_dialog.py:102 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Recreate relative path" msgstr "Відтворити відносний шлях" -#: qt/base/preferences_dialog.py:103 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/preferences_dialog.py:103 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Recreate absolute path" msgstr "Відтворити абсолютний шлях" -#: qt/base/preferences_dialog.py:106 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/base/preferences_dialog.py:106 cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Custom Command (arguments: %d for dupe, %r for ref):" msgstr "Власна команда (аргументи: %d для дублікату, %r для посиланя):" @@ -297,54 +272,57 @@ msgstr "Змінити пріоритети дублікатів" #: qt/base/prioritize_dialog.py:75 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 -msgid "Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information." -msgstr "Додайте критерії в праве поле і натисніть кнопку ОК, щоб відправити дублікати, які найкраще відповідають цим критеріям, до вихідної позиції відповідних груп. Прочитайте файл довідки для отримання додаткової інформації." +msgid "" +"Add criteria to the right box and click OK to send the dupes that correspond" +" the best to these criteria to their respective group's reference position. " +"Read the help file for more information." +msgstr "" +"Додайте критерії в праве поле і натисніть кнопку ОК, щоб відправити " +"дублікати, які найкраще відповідають цим критеріям, до вихідної позиції " +"відповідних груп. Прочитайте файл довідки для отримання додаткової " +"інформації." -#: qt/base/problem_dialog.py:31 -#: cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:31 cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Problems!" msgstr "Проблеми!" -#: qt/base/problem_dialog.py:35 -#: cocoa/base/en.lproj/ProblemDialog.strings:0 -msgid "There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results." -msgstr "Виникли проблеми під час обробки деяких (або всіх) файлів. Причини цих проблем описані в таблиці нижче. Ці файли не були видалені з результатів пошуку." +#: qt/base/problem_dialog.py:35 cocoa/base/en.lproj/ProblemDialog.strings:0 +msgid "" +"There were problems processing some (or all) of the files. The cause of " +"these problems are described in the table below. Those files were not " +"removed from your results." +msgstr "" +"Виникли проблеми під час обробки деяких (або всіх) файлів. Причини цих " +"проблем описані в таблиці нижче. Ці файли не були видалені з результатів " +"пошуку." -#: qt/base/problem_dialog.py:52 -#: cocoa/base/en.lproj/ProblemDialog.strings:0 +#: qt/base/problem_dialog.py:52 cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Reveal Selected" msgstr "Показати вибрані" -#: qt/base/problem_dialog.py:57 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "Закрити" -#: qt/base/result_window.py:47 -#: qt/base/result_window.py:177 -#: qt/me/details_dialog.py:20 -#: qt/pe/details_dialog.py:25 -#: qt/se/details_dialog.py:20 -#: cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 +#: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 +#: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "Деталі" -#: qt/base/result_window.py:48 -#: qt/base/result_window.py:86 -#: qt/base/result_window.py:151 -#: qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "Дії" -#: qt/base/result_window.py:49 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:49 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Show Dupes Only" msgstr "Показати тільки дуплікати" -#: qt/base/result_window.py:50 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:50 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Show Delta Values" msgstr "Показати різницю" @@ -352,153 +330,124 @@ msgstr "Показати різницю" msgid "Send Marked to Recycle Bin" msgstr "Надіслати позначене до кошику" -#: qt/base/result_window.py:52 -#: cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "Видалити позначене та замінити жорсткими посиланнями (hardlinks)" - -#: qt/base/result_window.py:53 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "Перемістити позначене до ..." -#: qt/base/result_window.py:54 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "Скопіювати позначене до ..." -#: qt/base/result_window.py:55 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "Видалити позначене з результатів" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "Змінити пріоритети результатів ..." -#: qt/base/result_window.py:57 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "Видалити обране з результатів" -#: qt/base/result_window.py:58 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "Додати обране в чорний список" -#: qt/base/result_window.py:59 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "Зробити обране посиланням" -#: qt/base/result_window.py:60 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "Відкрити обране програмою за умовчанням" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "Відкрити папку, що містить обране" -#: qt/base/result_window.py:62 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "Перейменувати обране" -#: qt/base/result_window.py:63 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "Позначити всі" -#: qt/base/result_window.py:64 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "Скинути позначення" -#: qt/base/result_window.py:65 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "Інвертувати позначення" -#: qt/base/result_window.py:66 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "Позначити обране" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "Експорт в HTML" -#: qt/base/result_window.py:68 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "Зберегти результати ..." -#: qt/base/result_window.py:69 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "Викликати власну команду" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "Позначити" -#: qt/base/result_window.py:88 -#: cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "Колонки" -#: qt/base/result_window.py:147 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "Відновити налаштування за замовчуванням" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "{} Результати" -#: qt/base/result_window.py:300 -#: cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "Оберіть файл у який слід зберегти ваші результати" -#: qt/me/preferences_dialog.py:39 -#: qt/se/preferences_dialog.py:39 +#: qt/me/preferences_dialog.py:39 qt/se/preferences_dialog.py:39 #: cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 msgid "Filename" msgstr "Ім’я файлу" -#: qt/me/preferences_dialog.py:40 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:40 cocoa/me/en.lproj/Preferences.strings:0 msgid "Filename - Fields" msgstr "Ім’я файлу розбите на поля" -#: qt/me/preferences_dialog.py:41 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:41 cocoa/me/en.lproj/Preferences.strings:0 msgid "Filename - Fields (No Order)" msgstr "Ім’я файлу розбите на поля (У довільному порядку)" -#: qt/me/preferences_dialog.py:42 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:42 cocoa/me/en.lproj/Preferences.strings:0 msgid "Tags" msgstr "Теги" -#: qt/me/preferences_dialog.py:43 -#: qt/pe/preferences_dialog.py:33 -#: qt/se/preferences_dialog.py:40 -#: cocoa/pe/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:43 qt/pe/preferences_dialog.py:33 +#: qt/se/preferences_dialog.py:40 cocoa/pe/en.lproj/Preferences.strings:0 msgid "Contents" msgstr "Зміст" @@ -506,126 +455,102 @@ msgstr "Зміст" msgid "Audio Contents" msgstr "Аудіо зміст" -#: qt/me/preferences_dialog.py:55 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:55 cocoa/me/en.lproj/Preferences.strings:0 msgid "Tags to scan:" msgstr "Теги для пошуку:" -#: qt/me/preferences_dialog.py:61 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:61 cocoa/me/en.lproj/Preferences.strings:0 msgid "Track" msgstr "Трек" -#: qt/me/preferences_dialog.py:63 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:63 cocoa/me/en.lproj/Preferences.strings:0 msgid "Artist" msgstr "Артист" -#: qt/me/preferences_dialog.py:65 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:65 cocoa/me/en.lproj/Preferences.strings:0 msgid "Album" msgstr "Альбом" -#: qt/me/preferences_dialog.py:67 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:67 cocoa/me/en.lproj/Preferences.strings:0 msgid "Title" msgstr "Назва" -#: qt/me/preferences_dialog.py:69 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:69 cocoa/me/en.lproj/Preferences.strings:0 msgid "Genre" msgstr "Жанр" -#: qt/me/preferences_dialog.py:71 -#: cocoa/me/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:71 cocoa/me/en.lproj/Preferences.strings:0 msgid "Year" msgstr "Рік" -#: qt/me/preferences_dialog.py:75 -#: qt/se/preferences_dialog.py:49 +#: qt/me/preferences_dialog.py:75 qt/se/preferences_dialog.py:49 #: cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 msgid "Word weighting" msgstr "Порівнювати за словами" -#: qt/me/preferences_dialog.py:77 -#: qt/se/preferences_dialog.py:51 +#: qt/me/preferences_dialog.py:77 qt/se/preferences_dialog.py:51 #: cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 msgid "Match similar words" msgstr "Вважати схожі слова однаковими" -#: qt/me/preferences_dialog.py:79 -#: qt/pe/preferences_dialog.py:41 -#: qt/se/preferences_dialog.py:53 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:79 qt/pe/preferences_dialog.py:41 +#: qt/se/preferences_dialog.py:53 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Can mix file kind" msgstr "Можна змішувати типи файлів" -#: qt/me/preferences_dialog.py:81 -#: qt/pe/preferences_dialog.py:43 -#: qt/se/preferences_dialog.py:55 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:81 qt/pe/preferences_dialog.py:43 +#: qt/se/preferences_dialog.py:55 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Use regular expressions when filtering" msgstr "Використовувати регулярних виразів при фільтрації" -#: qt/me/preferences_dialog.py:83 -#: qt/pe/preferences_dialog.py:45 -#: qt/se/preferences_dialog.py:57 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:83 qt/pe/preferences_dialog.py:45 +#: qt/se/preferences_dialog.py:57 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Remove empty folders on delete or move" msgstr "Видалити порожні папки під час видалення чи переміщення" -#: qt/me/preferences_dialog.py:85 -#: qt/pe/preferences_dialog.py:47 -#: qt/se/preferences_dialog.py:76 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:85 qt/pe/preferences_dialog.py:47 +#: qt/se/preferences_dialog.py:76 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Ignore duplicates hardlinking to the same file" msgstr "Ігнорувати дублікати, що є жорсткими посиланнями на той самий файл" -#: qt/me/preferences_dialog.py:87 -#: qt/pe/preferences_dialog.py:49 -#: qt/se/preferences_dialog.py:78 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/me/preferences_dialog.py:87 qt/pe/preferences_dialog.py:49 +#: qt/se/preferences_dialog.py:78 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Debug mode (restart required)" msgstr "Режим налагодження (потрібен перезапуск)" -#: qt/pe/preferences_dialog.py:34 -#: cocoa/pe/en.lproj/Preferences.strings:0 +#: qt/pe/preferences_dialog.py:34 cocoa/pe/en.lproj/Preferences.strings:0 msgid "EXIF Timestamp" msgstr "Часова мітка EXIF" -#: qt/pe/preferences_dialog.py:39 -#: cocoa/pe/en.lproj/Preferences.strings:0 +#: qt/pe/preferences_dialog.py:39 cocoa/pe/en.lproj/Preferences.strings:0 msgid "Match pictures of different dimensions" msgstr "Порівнювати малюнки різних розмірів" -#: qt/pe/result_window.py:20 -#: qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "Очистити кеш зображень" -#: qt/pe/result_window.py:26 -#: cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "Ви дійсно хочете видалити всі кешовані результати аналізу зображень?" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "Кеш зображень очищено." -#: qt/se/preferences_dialog.py:41 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/se/preferences_dialog.py:41 cocoa/se/en.lproj/Preferences.strings:0 msgid "Folders" msgstr "Папки" @@ -633,8 +558,7 @@ msgstr "Папки" msgid "Ignore files smaller than" msgstr "Ігнорувати файли менші ніж" -#: qt/se/preferences_dialog.py:71 -#: cocoa/se/en.lproj/Preferences.strings:0 +#: qt/se/preferences_dialog.py:71 cocoa/se/en.lproj/Preferences.strings:0 msgid "KB" msgstr "КБ" @@ -667,13 +591,14 @@ msgstr "'%@' не існує." msgid "The name '%@' already exists." msgstr "Ім’я '%@' вже існує." -#: cocoa/inter/app_me.py:182 -#: cocoa/base/en.lproj/Localizable.strings:0 -msgid "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" -msgstr "Ваша бібліотека iTunes містить %d мертвих треків, які готові до видалення. Продовжити?" +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 +msgid "" +"Your iTunes Library contains %d dead tracks ready to be removed. Continue?" +msgstr "" +"Ваша бібліотека iTunes містить %d мертвих треків, які готові до видалення. " +"Продовжити?" -#: cocoa/inter/app_me.py:186 -#: cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "У вашій бібліотеці iTunes немає мертвих треків " @@ -803,6 +728,8 @@ msgstr "Змінити пріоритети Результати" msgid "Ok" msgstr "Ok" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Скасувати" @@ -831,8 +758,7 @@ msgstr "Дія" msgid "Directories" msgstr "Папки" -#: qt/base/result_window.py:178 -#: cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Тільки дублікати" @@ -919,36 +845,70 @@ msgstr "Видалити порожні папки після видалення msgid "dupeGuru PE Preferences" msgstr "Налаштування dupeGuru PE" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "Виконується взаємодія з програмою iTunes. Не чіпайте її!" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "Не можливо знайти програму iTunes" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "Різниця" -#: cocoa/inter/app_me.py:176 -msgid "There were communication problems with iTunes. The operation couldn't be completed." +#: cocoa/inter/app_me.py:185 +msgid "" +"There were communication problems with iTunes. The operation couldn't be " +"completed." msgstr "Виникла проблема зв'язку з iTunes. Операція не може бути завершена." -#: qt/base/app.py:112 -#: qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "Чорний список" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "Видалити обрані" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "Очистити" +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/core.po b/locale/zh_CN/LC_MESSAGES/core.po index 001833a2..fa208a3e 100644 --- a/locale/zh_CN/LC_MESSAGES/core.po +++ b/locale/zh_CN/LC_MESSAGES/core.po @@ -2,25 +2,25 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: core/app.py:94 +#: core/app.py:96 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:231 +#: core/app.py:258 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:501 +#: core/app.py:526 msgid "Collecting files to scan" msgstr "收集文件以备扫描" -#: core/app.py:512 +#: core/app.py:537 msgid "The selected directories contain no scannable file." msgstr "所选文件夹中不包含可供扫描的文件。" -#: core/app.py:551 +#: core/app.py:576 msgid "%s (%d discarded)" msgstr "%s (%d 无效)" @@ -96,15 +96,15 @@ msgstr "优化分组" msgid "Analyzed %d/%d pictures" msgstr "分析 %d/%d 图像" -#: core_pe/matchblock.py:144 +#: core_pe/matchblock.py:152 msgid "Performed %d/%d chunk matches" msgstr "" -#: core_pe/matchblock.py:149 +#: core_pe/matchblock.py:157 msgid "Preparing for matching" msgstr "准备进行匹配" -#: core_pe/matchblock.py:184 +#: core_pe/matchblock.py:192 msgid "Verified %d/%d matches" msgstr "验证 %d/%d 匹配项" @@ -112,31 +112,31 @@ msgstr "验证 %d/%d 匹配项" msgid "Read EXIF of %d/%d pictures" msgstr "" -#: core/app.py:36 +#: core/app.py:38 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:37 +#: core/app.py:39 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:189 +#: core/app.py:216 msgid "No duplicates found." msgstr "没有找到重复文件。" -#: core/app.py:202 +#: core/app.py:229 msgid "All marked files were copied sucessfully." msgstr "" -#: core/app.py:203 +#: core/app.py:230 msgid "All marked files were moved sucessfully." msgstr "" -#: core/app.py:204 +#: core/app.py:231 msgid "All marked files were sucessfully sent to Trash." msgstr "" -#: core/app.py:252 +#: core/app.py:279 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -146,32 +146,26 @@ msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。继 msgid "Do you really want to remove all %d items from the ignore list?" msgstr "确定要从忽略列表中移除 %d 项吗?" -#: core/app.py:367 +#: core/app.py:392 msgid "You have no custom command set up. Set it up in your preferences." msgstr "你没有设定自定义命令。请在首选项中进行设定。" -#: core/app.py:454 core/app.py:465 +#: core/app.py:479 core/app.py:490 msgid "You are about to remove %d files from results. Continue?" msgstr "你将从结果中移除 %d 个文件。继续吗?" -#: core/app.py:312 +#: core/app.py:339 msgid "copy" msgstr "复制" -#: core/app.py:312 +#: core/app.py:339 msgid "move" msgstr "移动" -#: core/app.py:313 +#: core/app.py:340 msgid "Select a directory to {} marked files to" msgstr "选择一个文件夹将标记的 {} 个文件进行..." -#: core/app.py:327 -msgid "" -"You are about to send %d files to Trash (and hardlink them afterwards). " -"Continue?" -msgstr "即将有 %d 个文件被移动垃圾桶并删除硬盘上的文件。继续吗?" - -#: core/app.py:329 -msgid "You are about to send %d files to Trash. Continue?" -msgstr "即将有 %d 个文件被移到回收站。继续吗?" +#: core/gui/deletion_options.py:20 +msgid "You are sending {} file(s) to the Trash." +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/ui.po b/locale/zh_CN/LC_MESSAGES/ui.po index 78d0aa41..f37f9c8b 100644 --- a/locale/zh_CN/LC_MESSAGES/ui.po +++ b/locale/zh_CN/LC_MESSAGES/ui.po @@ -2,55 +2,55 @@ msgid "" msgstr "Content-Type: text/plain; charset=utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:39 +#: cocoa/inter/app.py:15 qt/base/app.py:40 msgid "Scanning for duplicates" msgstr "重复文件扫描中" -#: cocoa/inter/app.py:16 qt/base/app.py:40 +#: cocoa/inter/app.py:16 qt/base/app.py:41 msgid "Loading" msgstr "载入中" -#: cocoa/inter/app.py:17 qt/base/app.py:41 +#: cocoa/inter/app.py:17 qt/base/app.py:42 msgid "Moving" msgstr "移动中" -#: cocoa/inter/app.py:18 qt/base/app.py:42 +#: cocoa/inter/app.py:18 qt/base/app.py:43 msgid "Copying" msgstr "复制中" -#: qt/base/app.py:43 +#: qt/base/app.py:44 msgid "Sending files to the recycle bin" msgstr "将文件移到回收站" -#: qt/base/app.py:110 +#: qt/base/app.py:112 msgid "Quit" msgstr "退出" -#: qt/base/app.py:111 qt/base/preferences_dialog.py:123 +#: qt/base/app.py:113 qt/base/preferences_dialog.py:123 msgid "Preferences" msgstr "首选项" -#: qt/base/app.py:113 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:115 cocoa/base/en.lproj/MainMenu.strings:0 msgid "dupeGuru Help" msgstr "dupeGuru帮助" -#: qt/base/app.py:114 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/app.py:116 cocoa/base/en.lproj/MainMenu.strings:0 msgid "About dupeGuru" msgstr "关于dupeGuru" -#: qt/base/app.py:115 +#: qt/base/app.py:117 msgid "Register dupeGuru" msgstr "注册dupeGuru" -#: qt/base/app.py:116 +#: qt/base/app.py:118 msgid "Check for Update" msgstr "检查更新" -#: qt/base/app.py:117 +#: qt/base/app.py:119 msgid "Open Debug Log" msgstr "打开调试记录" -#: qt/base/app.py:232 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/app.py:234 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "A previous action is still hanging in there. You can't start a new one yet. " "Wait a few seconds, then try again." @@ -85,16 +85,16 @@ msgstr "结果窗口" msgid "Add Folder..." msgstr "增加文件夹..." -#: qt/base/directories_dialog.py:67 qt/base/result_window.py:82 +#: qt/base/directories_dialog.py:67 qt/base/result_window.py:78 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "File" msgstr "文件" -#: qt/base/directories_dialog.py:69 qt/base/result_window.py:90 +#: qt/base/directories_dialog.py:69 qt/base/result_window.py:86 msgid "View" msgstr "视图" -#: qt/base/directories_dialog.py:71 qt/base/result_window.py:92 +#: qt/base/directories_dialog.py:71 qt/base/result_window.py:88 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Help" msgstr "帮助" @@ -138,7 +138,7 @@ msgstr "选择一个结果文件并载入" msgid "All Files (*.*)" msgstr "所有文件 (*.*)" -#: qt/base/directories_dialog.py:206 qt/base/result_window.py:301 +#: qt/base/directories_dialog.py:206 qt/base/result_window.py:296 msgid "dupeGuru Results (*.dupeguru)" msgstr "dupeGuru结果 (*.dupeguru)" @@ -260,19 +260,20 @@ msgstr "在处理部分或全部文件时发现问题。产生问题的原因在 msgid "Reveal Selected" msgstr "显示选择" -#: qt/base/problem_dialog.py:57 cocoa/base/en.lproj/IgnoreListDialog.strings:0 +#: qt/base/ignore_list_dialog.py:47 qt/base/problem_dialog.py:57 +#: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/ProblemDialog.strings:0 msgid "Close" msgstr "关闭" -#: qt/base/result_window.py:47 qt/base/result_window.py:177 +#: qt/base/result_window.py:47 qt/base/result_window.py:171 #: qt/me/details_dialog.py:20 qt/pe/details_dialog.py:25 #: qt/se/details_dialog.py:20 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Details" msgstr "详细说明" -#: qt/base/result_window.py:48 qt/base/result_window.py:86 -#: qt/base/result_window.py:151 qt/base/result_window.py:176 +#: qt/base/result_window.py:48 qt/base/result_window.py:82 +#: qt/base/result_window.py:146 qt/base/result_window.py:170 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Actions" msgstr "行为" @@ -291,104 +292,99 @@ msgstr "将标记的文件移到回收站" #: qt/base/result_window.py:52 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 -msgid "Delete Marked and Replace with Hardlinks" -msgstr "删除标记文件并用硬连接进行替换" - -#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 -#: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Move Marked to..." msgstr "将标记的文件移动到..." -#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:53 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Copy Marked to..." msgstr "将标记的文件复制到..." -#: qt/base/result_window.py:55 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:54 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Marked from Results" msgstr "从结果中移除所标记的文件" -#: qt/base/result_window.py:56 +#: qt/base/result_window.py:55 msgid "Re-Prioritize Results..." msgstr "从结果中移除所选的文件" -#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:56 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Remove Selected from Results" msgstr "从结果中移除所选的文件" -#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:57 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Add Selected to Ignore List" msgstr "将所选文件添加到忽略列表中" -#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:58 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Make Selected Reference" msgstr "将所选文件设定为参照文件" -#: qt/base/result_window.py:60 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:59 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Open Selected with Default Application" msgstr "使用默认程序打开所选文件" -#: qt/base/result_window.py:61 +#: qt/base/result_window.py:60 msgid "Open Containing Folder of Selected" msgstr "打开所选文件所在的文件夹" -#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:61 cocoa/base/en.lproj/MainMenu.strings:0 #: cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Rename Selected" msgstr "重命名所选文件" -#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:62 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark All" msgstr "标记全部" -#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:63 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark None" msgstr "全部取消标记" -#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:64 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invert Marking" msgstr "反选标记文件" -#: qt/base/result_window.py:66 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:65 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Mark Selected" msgstr "标记所选文件" -#: qt/base/result_window.py:67 +#: qt/base/result_window.py:66 msgid "Export To HTML" msgstr "导出为 HTML" -#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:67 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Save Results..." msgstr "保存结果..." -#: qt/base/result_window.py:69 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:68 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Invoke Custom Command" msgstr "调用自定义命令" -#: qt/base/result_window.py:84 +#: qt/base/result_window.py:80 msgid "Mark" msgstr "标记" -#: qt/base/result_window.py:88 cocoa/base/en.lproj/MainMenu.strings:0 +#: qt/base/result_window.py:84 cocoa/base/en.lproj/MainMenu.strings:0 msgid "Columns" msgstr "显示列" -#: qt/base/result_window.py:147 cocoa/se/en.lproj/Preferences.strings:0 +#: qt/base/result_window.py:142 cocoa/se/en.lproj/Preferences.strings:0 #: cocoa/me/en.lproj/Preferences.strings:0 #: cocoa/pe/en.lproj/Preferences.strings:0 msgid "Reset to Defaults" msgstr "重置为默认值" -#: qt/base/result_window.py:170 +#: qt/base/result_window.py:164 msgid "{} Results" msgstr "{} (结果)" -#: qt/base/result_window.py:300 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/base/result_window.py:295 cocoa/base/en.lproj/Localizable.strings:0 msgid "Select a file to save your results to" msgstr "将结果保存为..." @@ -501,16 +497,16 @@ msgstr "EXIF Timestamp" msgid "Match pictures of different dimensions" msgstr "匹配不同规格的图像" -#: qt/pe/result_window.py:20 qt/pe/result_window.py:25 +#: qt/pe/result_window.py:19 qt/pe/result_window.py:24 #: cocoa/base/en.lproj/Localizable.strings:0 msgid "Clear Picture Cache" msgstr "清空图片缓存" -#: qt/pe/result_window.py:26 cocoa/base/en.lproj/Localizable.strings:0 +#: qt/pe/result_window.py:25 cocoa/base/en.lproj/Localizable.strings:0 msgid "Do you really want to remove all your cached picture analysis?" msgstr "确定要移除所有缓存图片?" -#: qt/pe/result_window.py:29 +#: qt/pe/result_window.py:28 msgid "Picture cache cleared." msgstr "图片缓存已清空。" @@ -657,6 +653,8 @@ msgstr "Re-Prioritize Results" msgid "Ok" msgstr "Ok" +#: qt/base/deletion_options.py:50 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 #: cocoa/base/en.lproj/PrioritizeDialog.strings:0 msgid "Cancel" msgstr "Cancel" @@ -695,7 +693,7 @@ msgstr "Action" msgid "Directories" msgstr "Directories" -#: qt/base/result_window.py:178 cocoa/base/en.lproj/ResultWindow.strings:0 +#: qt/base/result_window.py:172 cocoa/base/en.lproj/ResultWindow.strings:0 msgid "Dupes Only" msgstr "Dupes Only" @@ -794,7 +792,7 @@ msgstr "从你的iTunes库中移除无效的音轨" msgid "Scanning the iTunes Library" msgstr "正在扫描iTunes库" -#: cocoa/inter/app_me.py:154 cocoa/inter/app_pe.py:144 +#: cocoa/inter/app_me.py:157 cocoa/inter/app_pe.py:144 msgid "Sending dupes to the Trash" msgstr "将重复文件移到垃圾桶" @@ -818,13 +816,13 @@ msgstr "'%@' does not exist." msgid "The name '%@' already exists." msgstr "The name '%@' already exists." -#: cocoa/inter/app_me.py:182 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:191 cocoa/base/en.lproj/Localizable.strings:0 msgid "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" msgstr "" "Your iTunes Library contains %d dead tracks ready to be removed. Continue?" -#: cocoa/inter/app_me.py:186 cocoa/base/en.lproj/Localizable.strings:0 +#: cocoa/inter/app_me.py:195 cocoa/base/en.lproj/Localizable.strings:0 msgid "You have no dead tracks in your iTunes Library" msgstr "You have no dead tracks in your iTunes Library" @@ -840,36 +838,70 @@ msgstr "" msgid "OK" msgstr "" -#: cocoa/inter/app_me.py:156 +#: cocoa/inter/app_me.py:159 msgid "Talking to iTunes. Don't touch it!" msgstr "" -#: cocoa/inter/app_me.py:200 +#: cocoa/inter/app_me.py:213 msgid "The iTunes application couldn't be found." msgstr "" -#: qt/base/result_window.py:179 +#: qt/base/result_window.py:173 msgid "Delta Values" msgstr "" -#: cocoa/inter/app_me.py:176 +#: cocoa/inter/app_me.py:185 msgid "" "There were communication problems with iTunes. The operation couldn't be " "completed." msgstr "" -#: qt/base/app.py:112 qt/base/ignore_list_dialog.py:31 +#: qt/base/app.py:114 qt/base/ignore_list_dialog.py:32 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 #: cocoa/base/en.lproj/MainMenu.strings:0 msgid "Ignore List" msgstr "" -#: qt/base/ignore_list_dialog.py:44 +#: qt/base/ignore_list_dialog.py:45 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Remove Selected" msgstr "" -#: qt/base/ignore_list_dialog.py:45 +#: qt/base/ignore_list_dialog.py:46 #: cocoa/base/en.lproj/IgnoreListDialog.strings:0 msgid "Clear" msgstr "" + +#: qt/base/deletion_options.py:29 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Deletion Options" +msgstr "" + +#: qt/base/deletion_options.py:34 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Hardlink deleted files" +msgstr "" + +#: qt/base/deletion_options.py:36 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"After having deleted a duplicate, place a hardlink targeting the reference " +"file to replace the deleted file." +msgstr "" + +#: qt/base/deletion_options.py:41 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Directly delete files" +msgstr "" + +#: qt/base/deletion_options.py:43 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "" +"Instead of sending files to trash, delete them directly. This option is " +"usually used as a workaround when the normal deletion method doesn't work." +msgstr "" + +#: qt/base/deletion_options.py:49 +#: cocoa/base/en.lproj/DeletionOptions.strings:0 +msgid "Proceed" +msgstr "" diff --git a/qt/base/app.py b/qt/base/app.py index 67bd4dcb..da5c819b 100644 --- a/qt/base/app.py +++ b/qt/base/app.py @@ -32,6 +32,7 @@ from .result_window import ResultWindow from .directories_dialog import DirectoriesDialog from .problem_dialog import ProblemDialog from .ignore_list_dialog import IgnoreListDialog +from .deletion_options import DeletionOptions tr = trget('ui') @@ -89,6 +90,7 @@ class DupeGuru(QObject): self.details_dialog = self.DETAILS_DIALOG_CLASS(self.resultWindow, self) self.problemDialog = ProblemDialog(parent=self.resultWindow, model=self.model.problem_dialog) self.ignoreListDialog = IgnoreListDialog(parent=self.resultWindow, model=self.model.ignore_list_dialog) + self.deletionOptions = DeletionOptions(parent=self.resultWindow, model=self.model.deletion_options) self.preferences_dialog = self.PREFERENCES_DIALOG_CLASS(self.resultWindow, self) self.about_box = AboutBox(self.resultWindow, self) diff --git a/qt/base/deletion_options.py b/qt/base/deletion_options.py new file mode 100644 index 00000000..09bddeb7 --- /dev/null +++ b/qt/base/deletion_options.py @@ -0,0 +1,64 @@ +# Created By: Virgil Dupras +# Created On: 2012-05-30 +# Copyright 2012 Hardcoded Software (http://www.hardcoded.net) +# +# This software is licensed under the "BSD" License as described in the "LICENSE" file, +# which should be included with this package. The terms are also available at +# http://www.hardcoded.net/licenses/bsd_license + +from PyQt4.QtCore import Qt +from PyQt4.QtGui import QDialog, QVBoxLayout, QLabel, QCheckBox, QDialogButtonBox + +from hscommon.trans import trget +from qtlib.util import horizontalWrap + +tr = trget('ui') + +class DeletionOptions(QDialog): + def __init__(self, parent, model): + flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint + QDialog.__init__(self, parent, flags) + self._setupUi() + self.model = model + self.model.view = self + + self.buttonBox.accepted.connect(self.accept) + self.buttonBox.rejected.connect(self.reject) + + def _setupUi(self): + self.setWindowTitle(tr("Deletion Options")) + self.resize(400, 250) + self.verticalLayout = QVBoxLayout(self) + self.msgLabel = QLabel() + self.verticalLayout.addWidget(self.msgLabel) + self.hardlinkCheckbox = QCheckBox(tr("Hardlink deleted files")) + self.verticalLayout.addWidget(self.hardlinkCheckbox) + text = tr("After having deleted a duplicate, place a hardlink targeting the reference file " + "to replace the deleted file.") + self.hardlinkMessageLabel = QLabel(text) + self.hardlinkMessageLabel.setWordWrap(True) + self.verticalLayout.addWidget(self.hardlinkMessageLabel) + self.directCheckbox = QCheckBox(tr("Directly delete files")) + self.verticalLayout.addWidget(self.directCheckbox) + text = tr("Instead of sending files to trash, delete them directly. This option is usually " + "used as a workaround when the normal deletion method doesn't work.") + self.directMessageLabel = QLabel(text) + self.directMessageLabel.setWordWrap(True) + self.verticalLayout.addWidget(self.directMessageLabel) + self.buttonBox = QDialogButtonBox() + self.buttonBox.addButton(tr("Proceed"), QDialogButtonBox.AcceptRole) + self.buttonBox.addButton(tr("Cancel"), QDialogButtonBox.RejectRole) + self.verticalLayout.addWidget(self.buttonBox) + + #--- model --> view + def update_msg(self, msg): + self.msgLabel.setText(msg) + + def show(self): + self.hardlinkCheckbox.setChecked(self.model.hardlink) + self.directCheckbox.setChecked(self.model.direct) + result = self.exec() + self.model.hardlink = self.hardlinkCheckbox.isChecked() + self.model.direct = self.directCheckbox.isChecked() + return result == QDialog.Accepted + diff --git a/qt/base/result_window.py b/qt/base/result_window.py index f1ddfc1e..460529a0 100644 --- a/qt/base/result_window.py +++ b/qt/base/result_window.py @@ -49,7 +49,6 @@ class ResultWindow(QMainWindow): ('actionPowerMarker', 'Ctrl+1', '', tr("Show Dupes Only"), self.powerMarkerTriggered), ('actionDelta', 'Ctrl+2', '', tr("Show Delta Values"), self.deltaTriggered), ('actionDeleteMarked', 'Ctrl+D', '', tr("Send Marked to Recycle Bin"), self.deleteTriggered), - ('actionHardlinkMarked', 'Ctrl+Shift+D', '', tr("Delete Marked and Replace with Hardlinks"), self.hardlinkTriggered), ('actionMoveMarked', 'Ctrl+M', '', tr("Move Marked to..."), self.moveTriggered), ('actionCopyMarked', 'Ctrl+Shift+M', '', tr("Copy Marked to..."), self.copyTriggered), ('actionRemoveMarked', 'Ctrl+R', '', tr("Remove Marked from Results"), self.removeMarkedTriggered), @@ -72,9 +71,6 @@ class ResultWindow(QMainWindow): self.actionDelta.setCheckable(True) self.actionPowerMarker.setCheckable(True) - if (not ISOSX) and (not ISLINUX): - self.actionHardlinkMarked.setVisible(False) - def _setupMenu(self): self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 630, 22)) @@ -93,7 +89,6 @@ class ResultWindow(QMainWindow): self.setMenuBar(self.menubar) self.menuActions.addAction(self.actionDeleteMarked) - self.menuActions.addAction(self.actionHardlinkMarked) self.menuActions.addAction(self.actionMoveMarked) self.menuActions.addAction(self.actionCopyMarked) self.menuActions.addAction(self.actionRemoveMarked) @@ -150,7 +145,6 @@ class ResultWindow(QMainWindow): # Action menu actionMenu = QMenu(tr("Actions"), self.menubar) actionMenu.addAction(self.actionDeleteMarked) - actionMenu.addAction(self.actionHardlinkMarked) actionMenu.addAction(self.actionMoveMarked) actionMenu.addAction(self.actionCopyMarked) actionMenu.addAction(self.actionRemoveMarked) @@ -245,9 +239,6 @@ class ResultWindow(QMainWindow): url = QUrl.fromLocalFile(exported_path) QDesktopServices.openUrl(url) - def hardlinkTriggered(self): - self.app.model.delete_marked(replace_with_hardlinks=True) - def makeReferenceTriggered(self): self.app.model.make_selected_reference()