diff --git a/build.py b/build.py index 6ab551f4..c7aeb8ac 100644 --- a/build.py +++ b/build.py @@ -255,7 +255,8 @@ def build_cocoa_bridging_interfaces(edition): add_to_pythonpath('cocoa') add_to_pythonpath('cocoalib') from cocoa.inter import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline, - OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyBaseApp, PyFairware) + OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyBaseApp, + PyFairware, PyTextField, ProgressWindowView, PyProgressWindow) from inter.deletion_options import PyDeletionOptions, DeletionOptionsView from inter.details_panel import PyDetailsPanel, DetailsPanelView from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView @@ -270,12 +271,13 @@ def build_cocoa_bridging_interfaces(edition): allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyBaseApp, PyFairware, PyDetailsPanel, PyDirectoryOutline, PyPrioritizeDialog, PyPrioritizeList, PyProblemDialog, PyIgnoreListDialog, PyDeletionOptions, PyResultTable, PyStatsLabel, PyDupeGuruBase, - appmod.PyDupeGuru] + PyTextField, PyProgressWindow, 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, DeletionOptionsView, ResultTableView, StatsLabelView, DupeGuruView] + IgnoreListDialogView, DeletionOptionsView, ResultTableView, StatsLabelView, + ProgressWindowView, 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/AppDelegateBase.h b/cocoa/base/AppDelegateBase.h index f5341732..f3c7f219 100644 --- a/cocoa/base/AppDelegateBase.h +++ b/cocoa/base/AppDelegateBase.h @@ -15,6 +15,7 @@ http://www.hardcoded.net/licenses/bsd_license #import "IgnoreListDialog.h" #import "HSFairwareAboutBox.h" #import "HSRecentFiles.h" +#import "HSProgressWindow.h" @interface AppDelegateBase : NSObject { @@ -27,6 +28,7 @@ http://www.hardcoded.net/licenses/bsd_license DirectoryPanel *_directoryPanel; DetailsPanel *_detailsPanel; IgnoreListDialog *_ignoreListDialog; + HSProgressWindow *_progressWindow; NSWindowController *_preferencesPanel; HSFairwareAboutBox *_aboutBox; HSRecentFiles *_recentResults; diff --git a/cocoa/base/AppDelegateBase.m b/cocoa/base/AppDelegateBase.m index 57b6a2c5..7c906390 100644 --- a/cocoa/base/AppDelegateBase.m +++ b/cocoa/base/AppDelegateBase.m @@ -74,6 +74,8 @@ http://www.hardcoded.net/licenses/bsd_license _directoryPanel = [self createDirectoryPanel]; _detailsPanel = [self createDetailsPanel]; _ignoreListDialog = [[IgnoreListDialog alloc] initWithPyRef:[model ignoreListDialog]]; + _progressWindow = [[HSProgressWindow alloc] initWithPyRef:[[self model] progressWindow] view:nil]; + [_progressWindow setParentWindow:[_resultWindow window]]; _aboutBox = nil; // Lazily loaded _preferencesPanel = nil; // Lazily loaded [[[self directoryPanel] window] makeKeyAndOrderFront:self]; @@ -197,7 +199,6 @@ http://www.hardcoded.net/licenses/bsd_license /* Delegate */ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - [[ProgressController mainProgressController] setWorker:model]; [model initialRegistrationSetup]; [model loadSession]; } diff --git a/cocoa/base/ResultWindowBase.m b/cocoa/base/ResultWindowBase.m index fc9e75ff..08a43c1a 100644 --- a/cocoa/base/ResultWindowBase.m +++ b/cocoa/base/ResultWindowBase.m @@ -42,9 +42,6 @@ http://www.hardcoded.net/licenses/bsd_license [matches setTarget:self]; [matches setDoubleAction:@selector(openClicked)]; [self adjustUIToLocalization]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jobStarted:) name:JobStarted object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jobInProgress:) name:JobInProgress object:nil]; return self; } @@ -340,22 +337,6 @@ http://www.hardcoded.net/licenses/bsd_license previewPanel = nil; } -- (void)jobInProgress:(NSNotification *)aNotification -{ - [Dialogs showMessage:NSLocalizedString(@"A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.", @"")]; -} - -- (void)jobStarted:(NSNotification *)aNotification -{ - [[self window] makeKeyAndOrderFront:nil]; - NSDictionary *ui = [aNotification userInfo]; - NSString *desc = [ui valueForKey:@"desc"]; - [[ProgressController mainProgressController] setJobDesc:desc]; - NSString *jobid = [ui valueForKey:@"jobid"]; - [[ProgressController mainProgressController] setJobId:jobid]; - [[ProgressController mainProgressController] showSheetForParent:[self window]]; -} - - (BOOL)validateToolbarItem:(NSToolbarItem *)theItem { return ![[ProgressController mainProgressController] isShown]; diff --git a/cocoa/inter/all.py b/cocoa/inter/all.py index 222d300a..fdc9d57c 100644 --- a/cocoa/inter/all.py +++ b/cocoa/inter/all.py @@ -1,3 +1,4 @@ +from cocoa.inter import PyTextField, PyProgressWindow from .deletion_options import PyDeletionOptions from .details_panel import PyDetailsPanel from .directory_outline import PyDirectoryOutline diff --git a/cocoa/inter/app.py b/cocoa/inter/app.py index 28902400..51768c74 100644 --- a/cocoa/inter/app.py +++ b/cocoa/inter/app.py @@ -1,23 +1,8 @@ import logging from objp.util import pyref, dontwrap -from jobprogress import job -import cocoa -from cocoa import install_exception_hook, install_cocoa_logger, proxy +from cocoa import install_exception_hook, install_cocoa_logger, patch_threaded_job_performer, proxy from cocoa.inter import PyFairware, FairwareView -from hscommon.trans import trget - -from core.app import JobType - -tr = trget('ui') - -JOBID2TITLE = { - JobType.Scan: tr("Scanning for duplicates"), - JobType.Load: tr("Loading"), - JobType.Move: tr("Moving"), - JobType.Copy: tr("Copying"), - JobType.Delete: tr("Sending to Trash"), -} class DupeGuruView(FairwareView): def askYesNoWithPrompt_(self, prompt: str) -> bool: pass @@ -26,16 +11,14 @@ class DupeGuruView(FairwareView): def selectDestFileWithPrompt_extension_(self, prompt: str, extension: str) -> str: pass class PyDupeGuruBase(PyFairware): - FOLLOW_PROTOCOLS = ['Worker'] - @dontwrap def _init(self, modelclass): logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s') install_exception_hook() install_cocoa_logger() + patch_threaded_job_performer() appdata = proxy.getAppdataPath() self.model = modelclass(self, appdata) - self.progress = cocoa.ThreadedJobPerformer() #---Sub-proxies def detailsPanel(self) -> pyref: @@ -56,6 +39,9 @@ class PyDupeGuruBase(PyFairware): def ignoreListDialog(self) -> pyref: return self.model.ignore_list_dialog + def progressWindow(self) -> pyref: + return self.model.progress_window + def deletionOptions(self) -> pyref: return self.model.deletion_options @@ -157,31 +143,6 @@ class PyDupeGuruBase(PyFairware): def setCopyMoveDestType_(self, copymove_dest_type: int): self.model.options['copymove_dest_type'] = copymove_dest_type - #---Worker - def getJobProgress(self) -> object: # NSNumber - try: - return self.progress.last_progress - except AttributeError: - # I have *no idea* why this can possible happen (last_progress is always set by - # create_job() *before* any threaded job notification, which shows the progress panel, - # is sent), but it happens anyway, so there we go. ref: #106 - return -1 - - def getJobDesc(self) -> str: - try: - return self.progress.last_desc - except AttributeError: - # see getJobProgress - return '' - - def cancelJob(self): - self.progress.job_cancelled = True - - def jobCompleted_(self, jobid: str): - result = self.model._job_completed(jobid, self.progress.last_error) - if not result: - self.progress.reraise_if_error() - #--- model --> view @dontwrap def open_path(self, path): @@ -191,18 +152,6 @@ class PyDupeGuruBase(PyFairware): def reveal_path(self, path): proxy.revealPath_(str(path)) - @dontwrap - def start_job(self, jobid, func, args=()): - try: - j = self.progress.create_job() - args = tuple([j] + list(args)) - self.progress.run_threaded(func, args=args) - except job.JobInProgressError: - proxy.postNotification_userInfo_('JobInProgress', None) - else: - ud = {'desc': JOBID2TITLE[jobid], 'jobid':jobid} - proxy.postNotification_userInfo_('JobStarted', ud) - @dontwrap def ask_yes_no(self, prompt): return self.callback.askYesNoWithPrompt_(prompt) diff --git a/cocoa/wscript b/cocoa/wscript index 95e46ada..b97df48d 100644 --- a/cocoa/wscript +++ b/cocoa/wscript @@ -50,7 +50,8 @@ def build(ctx): 'views/HSTableView', 'views/HSOutlineView', 'views/NSIndexPathAdditions', 'views/NSTableViewAdditions', 'controllers/HSColumns', 'controllers/HSGUIController', 'controllers/HSTable', - 'controllers/HSOutline', 'controllers/HSPopUpList', 'controllers/HSSelectableList'] + 'controllers/HSOutline', 'controllers/HSPopUpList', 'controllers/HSSelectableList', + 'controllers/HSTextField', 'controllers/HSProgressWindow'] cocoalib_src = [cocoalib_node.find_node(usename + '.m') for usename in cocoalib_uses] + cocoalib_node.ant_glob('autogen/*.m') project_folders = ['autogen', 'base', ctx.env.DGEDITION] project_src = sum([ctx.srcnode.ant_glob('%s/*.m' % folder) for folder in project_folders], []) diff --git a/cocoalib/cocoa/__init__.py b/cocoalib/cocoa/__init__.py index bdbd725e..e56d9a0f 100644 --- a/cocoalib/cocoa/__init__.py +++ b/cocoalib/cocoa/__init__.py @@ -16,19 +16,14 @@ from .CocoaProxy import CocoaProxy proxy = CocoaProxy() -try: - from jobprogress.performer import ThreadedJobPerformer as ThreadedJobPerformerBase - class ThreadedJobPerformer(ThreadedJobPerformerBase): - def _async_run(self, *args): - proxy.createPool() - try: - ThreadedJobPerformerBase._async_run(self, *args) - finally: - proxy.destroyPool() -except ImportError: - # jobprogress isn't used in all HS apps - pass - +def autoreleasepool(func): + def wrapper(*args, **kwargs): + proxy.createPool() + try: + func(*args, **kwargs) + finally: + proxy.destroyPool() + return wrapper def as_fetch(as_list, as_type, step_size=1000): """When fetching items from a very big list through applescript, the connection with the app @@ -113,3 +108,10 @@ class CocoaHandler(logging.Handler): def install_cocoa_logger(): logging.getLogger().addHandler(CocoaHandler()) + +def patch_threaded_job_performer(): + # _async_run, under cocoa, has to be run within an autorelease pool to prevent leaks. + # You only need this patch is you use one of CocoaProxy's function (which allocate objc + # structures) inside a threaded job. + from jobprogress.performer import ThreadedJobPerformer + ThreadedJobPerformer._async_run = autoreleasepool(ThreadedJobPerformer._async_run) diff --git a/cocoalib/controllers/HSProgressWindow.h b/cocoalib/controllers/HSProgressWindow.h index e186ebe5..739959e7 100644 --- a/cocoalib/controllers/HSProgressWindow.h +++ b/cocoalib/controllers/HSProgressWindow.h @@ -17,10 +17,12 @@ http://www.hardcoded.net/licenses/bsd_license NSInteger progress; HSTextField *jobdescTextField; HSTextField *progressdescTextField; + NSWindow *parentWindow; } - (id)initWithPyRef:(PyObject *)aPyRef view:(NSView *)aView; - (PyProgressWindow *)model; +- (void)setParentWindow:(NSWindow *)aParentWindow; - (void)setProgress:(NSInteger)aProgress; - (void)showWindow; diff --git a/cocoalib/controllers/HSProgressWindow.m b/cocoalib/controllers/HSProgressWindow.m index 47cda1db..eba64bfd 100644 --- a/cocoalib/controllers/HSProgressWindow.m +++ b/cocoalib/controllers/HSProgressWindow.m @@ -17,6 +17,7 @@ http://www.hardcoded.net/licenses/bsd_license [[ProgressController mainProgressController] setWorker:self]; jobdescTextField = [[HSTextField alloc] initWithPyRef:[[self model] jobdescTextField] view:[[ProgressController mainProgressController] descText]]; progressdescTextField = [[HSTextField alloc] initWithPyRef:[[self model] progressdescTextField] view:[[ProgressController mainProgressController] statusText]]; + parentWindow = nil; return self; } @@ -26,6 +27,11 @@ http://www.hardcoded.net/licenses/bsd_license } /* Public */ +- (void)setParentWindow:(NSWindow *)aParentWindow +{ + parentWindow = aParentWindow; +} + - (void)setProgress:(NSInteger)aProgress { progress = aProgress; @@ -33,7 +39,12 @@ http://www.hardcoded.net/licenses/bsd_license - (void)showWindow { - [[ProgressController mainProgressController] show]; + if (parentWindow != nil) { + [[ProgressController mainProgressController] showSheetForParent:parentWindow]; + } + else { + [[ProgressController mainProgressController] show]; + } } - (void)closeWindow diff --git a/core/app.py b/core/app.py index 106e7f38..4b14bbe5 100644 --- a/core/app.py +++ b/core/app.py @@ -15,13 +15,16 @@ import time import shutil from send2trash import send2trash +from jobprogress import job from hscommon.reg import RegistrableApplication from hscommon.notify import Broadcaster from hscommon.path import Path from hscommon.conflict import smart_move, smart_copy +from hscommon.gui.progress_window import ProgressWindow from hscommon.util import (delete_if_empty, first, escape, nonone, format_time_decimal, allsame, rem_file_ext) from hscommon.trans import tr +from hscommon.plat import ISWINDOWS from . import directories, results, scanner, export, fs from .gui.deletion_options import DeletionOptions @@ -51,6 +54,16 @@ class JobType: Copy = 'job_copy' Delete = 'job_delete' +JOBID2TITLE = { + JobType.Scan: tr("Scanning for duplicates"), + JobType.Load: tr("Loading"), + JobType.Move: tr("Moving"), + JobType.Copy: tr("Copying"), + JobType.Delete: tr("Sending to Trash"), +} +if ISWINDOWS: + JOBID2TITLE[JobType.Delete] = tr("Sending files to the recycle bin") + def format_timestamp(t, delta): if delta: return format_time_decimal(t) @@ -86,7 +99,6 @@ class DupeGuru(RegistrableApplication, Broadcaster): #--- View interface # open_path(path) # reveal_path(path) - # start_job(jobid, func, args=()) ( func(j, *args) ) # ask_yes_no(prompt) --> bool # show_results_window() # show_problem_dialog() @@ -123,6 +135,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): self.stats_label = StatsLabel(self) self.result_table = self._create_result_table() self.deletion_options = DeletionOptions() + self.progress_window = ProgressWindow(self._job_completed) children = [self.result_table, self.directory_tree, self.stats_label, self.details_panel] for child in children: child.connect() @@ -225,12 +238,16 @@ class DupeGuru(RegistrableApplication, Broadcaster): if self.results.get_group_of_duplicate(d) is not None] self.notify('results_changed') - def _job_completed(self, jobid, exc): - # Must be called by subclasses when they detect that an async job is completed. If an - # exception was raised during the job, `exc` will be set. Return True when the error was - # handled. If we return False when exc is set, a the exception will be re-raised. - if exc is not None: - return False # We don't handle any exception in here + def _start_job(self, jobid, func, args=()): + title = JOBID2TITLE[jobid] + try: + self.progress_window.run(jobid, title, func, args=args) + except job.JobInProgressError: + msg = tr("A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.") + self.view.show_message(msg) + + def _job_completed(self, jobid): + print("complete!", jobid) if jobid == JobType.Scan: self._results_changed() if not self.results.groups: @@ -362,7 +379,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): if destination: desttype = self.options['copymove_dest_type'] jobid = JobType.Copy if copy else JobType.Move - self.view.start_job(jobid, do) + self._start_job(jobid, do) def delete_marked(self): if not self._check_demo(): @@ -375,7 +392,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): args = [self.deletion_options.link_deleted, self.deletion_options.use_hardlinks, self.deletion_options.direct] logging.debug("Starting deletion job with args %r", args) - self.view.start_job(JobType.Delete, self._do_delete, args=args) + self._start_job(JobType.Delete, self._do_delete, args=args) def export_to_xhtml(self): colnames, rows = self._get_export_data() @@ -439,7 +456,8 @@ class DupeGuru(RegistrableApplication, Broadcaster): def load_from(self, filename): def do(j): self.results.load_from_xml(filename, self._get_file, j) - self.view.start_job(JobType.Load, do) + print("load finished") + self._start_job(JobType.Load, do) def make_selected_reference(self): dupes = self.without_ref(self.selected_dupes) @@ -580,7 +598,7 @@ class DupeGuru(RegistrableApplication, Broadcaster): return self.results.groups = [] self._results_changed() - self.view.start_job(JobType.Scan, do) + self._start_job(JobType.Scan, do) def toggle_selected_mark_state(self): selected = self.without_ref(self.selected_dupes) diff --git a/hscommon/gui/progress_window.py b/hscommon/gui/progress_window.py index e3bb3483..a7aa91cc 100644 --- a/hscommon/gui/progress_window.py +++ b/hscommon/gui/progress_window.py @@ -30,6 +30,7 @@ class ProgressWindow(GUIObject, ThreadedJobPerformer): last_desc = self.last_desc if not self._job_running or last_progress is None: self.view.close() + self.reraise_if_error() if not self.job_cancelled: self._finish_func(self.jobid) return diff --git a/locale/core.pot b/locale/core.pot index 82634a68..15405da4 100644 --- a/locale/core.pot +++ b/locale/core.pot @@ -4,91 +4,119 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: utf-8\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:39 +#: core/app.py:42 msgid "You're about to open many files at once. Depending on what those files are opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "" + +#: core/app.py:59 +msgid "Loading" +msgstr "" + +#: core/app.py:60 +msgid "Moving" +msgstr "" + +#: core/app.py:61 +msgid "Copying" +msgstr "" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "" + +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:232 +#: core/app.py:246 +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 "" + +#: core/app.py:254 msgid "No duplicates found." msgstr "" -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "" -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "" -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "" -#: core/app.py:274 +#: core/app.py:296 msgid "You cannot delete, move or copy more than 10 duplicates at once in demo mode." msgstr "" -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "" -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "" -#: core/app.py:294 +#: core/app.py:316 msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?" msgstr "" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" -#: core/app.py:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "" -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "" diff --git a/locale/cs/LC_MESSAGES/core.po b/locale/cs/LC_MESSAGES/core.po index b7ddd696..f49de3b6 100644 --- a/locale/cs/LC_MESSAGES/core.po +++ b/locale/cs/LC_MESSAGES/core.po @@ -9,55 +9,55 @@ msgstr "" "Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Nebyli nalezeny žádné duplicity." -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "" -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "" -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "" -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "" -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "" -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -65,44 +65,44 @@ msgstr "" "Všech %d vybraných shod bude v následujících hledáních ignorováno. " "Pokračovat?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 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:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 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:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Shromažďuji prohlížené soubory" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání." -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d vyřazeno)" @@ -209,3 +209,35 @@ msgstr "Ověřeno %d/%d shod" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Vyhledávám duplicity" + +#: core/app.py:59 +msgid "Loading" +msgstr "Nahrávám" + +#: core/app.py:60 +msgid "Moving" +msgstr "Přesouvám" + +#: core/app.py:61 +msgid "Copying" +msgstr "Kopíruji" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Vyhazuji do koše" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "" + +#: core/app.py:246 +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 "" +"Předchozí akce stále nebyla ukončena. Novou zatím nemůžete spustit. Počkejte" +" pár sekund a zkuste to znovu." diff --git a/locale/cs/LC_MESSAGES/ui.po b/locale/cs/LC_MESSAGES/ui.po index 4aeb9fd4..38a381ee 100644 --- a/locale/cs/LC_MESSAGES/ui.po +++ b/locale/cs/LC_MESSAGES/ui.po @@ -9,26 +9,6 @@ msgstr "" "Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Vyhledávám duplicity" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Nahrávám" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Přesouvám" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Kopíruji" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Vyhazuji do koše" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Odstraňuji mrtvé stopy z Vaší knihovny iTunes" @@ -81,10 +61,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "Nelze najít aplikaci iPhoto." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "" - #: qt/base/app.py:95 msgid "Quit" msgstr "" @@ -118,14 +94,6 @@ msgstr "" msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:217 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 "" -"Předchozí akce stále nebyla ukončena. Novou zatím nemůžete spustit. Počkejte" -" pár sekund a zkuste to znovu." - #: qt/base/app.py:257 msgid "{} file (*.{})" msgstr "" @@ -404,7 +372,7 @@ msgstr "Odstranit označené z výsledků" #: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0 msgid "Re-Prioritize Results..." -msgstr "" +msgstr "Změnit prioritu výsledků..." #: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0 msgid "Remove Selected from Results" @@ -859,9 +827,3 @@ msgstr "Zoom" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr "" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Změnit prioritu výsledků" diff --git a/locale/de/LC_MESSAGES/core.po b/locale/de/LC_MESSAGES/core.po index 9744258a..d75126e6 100644 --- a/locale/de/LC_MESSAGES/core.po +++ b/locale/de/LC_MESSAGES/core.po @@ -9,99 +9,99 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Keine Duplikate gefunden." -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "" -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "" -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "" -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "" -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "" -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" msgstr "%d Dateien werden in zukünftigen Scans ignoriert werden. Fortfahren?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "kopieren" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "verschieben" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "Wählen sie einen Ordner zum {} der ausgewählten Dateien" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 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:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Sammle Dateien zum Scannen" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "Der ausgewählte Ordner enthält keine scannbare Dateien." -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d verworfen)" @@ -208,3 +208,35 @@ msgstr "%d/%d verifizierte Paare" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Suche nach Duplikaten" + +#: core/app.py:59 +msgid "Loading" +msgstr "Laden" + +#: core/app.py:60 +msgid "Moving" +msgstr "Verschieben" + +#: core/app.py:61 +msgid "Copying" +msgstr "Kopieren" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Verschiebe in den Mülleimer" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "Sende Dateien in den Mülleimer" + +#: core/app.py:246 +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 "" +"Eine vorherige Aktion ist noch in der Bearbeitung. Sie können noch keine " +"Neue starten. Warten Sie einige Sekunden und versuchen es erneut." diff --git a/locale/de/LC_MESSAGES/ui.po b/locale/de/LC_MESSAGES/ui.po index 96230ffa..40e0bc01 100644 --- a/locale/de/LC_MESSAGES/ui.po +++ b/locale/de/LC_MESSAGES/ui.po @@ -9,26 +9,6 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Suche nach Duplikaten" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Laden" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Verschieben" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Kopieren" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Verschiebe in den Mülleimer" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Entferne tote Stücke aus Ihrer iTunes Bibliothek." @@ -81,10 +61,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "The iPhoto application couldn't be found." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "Sende Dateien in den Mülleimer" - #: qt/base/app.py:95 msgid "Quit" msgstr "Beenden" @@ -118,14 +94,6 @@ msgstr "Auf Updates überprüfen" msgid "Open Debug Log" msgstr "Debug Log öffnen" -#: qt/base/app.py:217 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 "" -"Eine vorherige Aktion ist noch in der Bearbeitung. Sie können noch keine " -"Neue starten. Warten Sie einige Sekunden und versuchen es erneut." - #: qt/base/app.py:257 msgid "{} file (*.{})" msgstr "" @@ -403,7 +371,7 @@ msgstr "Entferne Markierte aus den Ergebnissen" #: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0 msgid "Re-Prioritize Results..." -msgstr "Entferne Ausgewählte aus den Ergebnissen" +msgstr "Entferne Ausgewählte aus den Ergebnissen..." #: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0 msgid "Remove Selected from Results" @@ -859,9 +827,3 @@ msgstr "Zoomen" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr "" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Re-Prioritize Results" diff --git a/locale/fr/LC_MESSAGES/core.po b/locale/fr/LC_MESSAGES/core.po index fff27606..728a0ba0 100644 --- a/locale/fr/LC_MESSAGES/core.po +++ b/locale/fr/LC_MESSAGES/core.po @@ -11,15 +11,15 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "Aucun doublon marqué. Rien à faire." -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "Aucun doublon sélectionné. Rien à faire." -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" @@ -27,28 +27,28 @@ msgstr "" "Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement " "encombrer votre système. Continuer?" -#: core/app.py:98 +#: core/app.py:110 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:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Aucun doublon trouvé." -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "Tous les fichiers marqués ont été copiés correctement." -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "Tous les fichiers marqués ont été déplacés correctement." -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "" "Tous les fichiers marqués ont été correctement envoyés à la corbeille." -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." @@ -56,58 +56,58 @@ msgstr "" "Vous ne pouvez pas effacer, déplacer ou copier plus de 10 doublons à la fois" " en mode démo." -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "'{}' est déjà dans la liste." -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "'{}' n'existe pas." -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" msgstr "%d fichiers seront ignorés des prochains scans. Continuer?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "copier" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "déplacer" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "Sélectionnez un dossier vers lequel {} les fichiers marqués." -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "Choisissez une destination pour votre exportation CSV" -#: core/app.py:406 +#: core/app.py:428 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:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "%d fichiers seront retirés des résultats. Continuer?" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation." -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Collecte des fichiers à scanner" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides." -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d hors-groupe)" @@ -216,3 +216,35 @@ msgstr "Vérifié %d/%d paires" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "Lu l'EXIF de %d/%d images" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Scan de doublons en cours" + +#: core/app.py:59 +msgid "Loading" +msgstr "Chargement en cours" + +#: core/app.py:60 +msgid "Moving" +msgstr "Déplacement en cours" + +#: core/app.py:61 +msgid "Copying" +msgstr "Copie en cours" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Envoi de fichiers à la corbeille" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "Envoi de fichiers à la corbeille" + +#: core/app.py:246 +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 "" +"Une action précédente est encore en cours. Attendez quelques secondes avant " +"d'en repartir une nouvelle." diff --git a/locale/fr/LC_MESSAGES/ui.po b/locale/fr/LC_MESSAGES/ui.po index 3af716c0..ed315aa0 100644 --- a/locale/fr/LC_MESSAGES/ui.po +++ b/locale/fr/LC_MESSAGES/ui.po @@ -12,26 +12,6 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Scan de doublons en cours" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Chargement en cours" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Déplacement en cours" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Copie en cours" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Envoi vers corbeille" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Retrait des tracks mortes de votre librairie iTunes" @@ -89,10 +69,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "iPhoto n'a pas pu être trouvée dans vos applications." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "Envoi de fichiers à la corbeille" - #: qt/base/app.py:95 msgid "Quit" msgstr "Quitter" @@ -126,14 +102,6 @@ msgstr "Vérifier les mises à jour" msgid "Open Debug Log" msgstr "Ouvrir logs de déboguage" -#: qt/base/app.py:217 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 "" -"Une action précédente est encore en cours. Attendez quelques secondes avant " -"d'en repartir une nouvelle." - #: qt/base/app.py:257 msgid "{} file (*.{})" msgstr "Fichier {} (*.{})" @@ -872,9 +840,3 @@ msgstr "Réduire/agrandir" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr " (Mac OS X ou Linux seulement)" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Re-prioriser les résultats" diff --git a/locale/hy/LC_MESSAGES/core.po b/locale/hy/LC_MESSAGES/core.po index c8ba31ad..daa0bb31 100755 --- a/locale/hy/LC_MESSAGES/core.po +++ b/locale/hy/LC_MESSAGES/core.po @@ -9,42 +9,42 @@ msgstr "" "Language: hy\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" "միաժամանակ հնարավոր է ջնջել, տեղափոխել կամ պատճենել միայն 10 օրինակներ" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Կրկնօրինակներ չկան:" -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "Բոլոր նշված ֆայլերը հաջողությամբ պատճենվել են:" -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "Բոլոր նշված ֆայլերը հաջողությամբ տեղափոխվել են:" -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "Բոլոր նշված ֆայլերը հաջողությամբ Ջնջվել են:" -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." @@ -52,58 +52,58 @@ msgstr "" "Չեք կարող ջնջել, տեղափձոխել կամ պատճենել ավելի քան 10 օրինակներ փորձնական " "եղանակում:" -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "'{}'-ը արդեն առկա է ցանկում:" -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "'{}'-ը գոյություն չունի:" -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" msgstr "" "Ընտրված %d համընկնումները կանտեսվեն հետագա բոլոր ստուգումներից: Շարունակե՞լ:" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "պատճենել" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "տեղափոխել" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "Ընտրել թղթապանակ՝ {} նշված ֆայլերի համար" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 msgid "You have no custom command set up. Set it up in your preferences." msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:" -#: core/app.py:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:" -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d անպիտան)" @@ -210,3 +210,35 @@ msgstr "Ստուգում է %d/%d համընկնումները" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "Կարդալ EXIF-ը d/%d նկարներից" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Ստուգվում են կրկնօրինակները" + +#: core/app.py:59 +msgid "Loading" +msgstr "Բացվում է" + +#: core/app.py:60 +msgid "Moving" +msgstr "Տեղափոխվում է" + +#: core/app.py:61 +msgid "Copying" +msgstr "Պատճենվում է" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Ուղարկվում է Աղբարկղ" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "Ֆայլերը ուղարկվում են Աղբարկղ" + +#: core/app.py:246 +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 "" +"Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: " +"Սպասեք մի քանի վայրկյան և կրկին փորձեք:" diff --git a/locale/hy/LC_MESSAGES/ui.po b/locale/hy/LC_MESSAGES/ui.po index 813f31fc..825fb7f7 100755 --- a/locale/hy/LC_MESSAGES/ui.po +++ b/locale/hy/LC_MESSAGES/ui.po @@ -9,26 +9,6 @@ msgstr "" "Language: hy\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Ստուգվում են կրկնօրինակները" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Բացվում է" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Տեղափոխվում է" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Պատճենվում է" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Ուղարկվում է Աղբարկղ" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Հեռացվում են վնասված շավիղները iTunes-ի Շտեմարանից" @@ -82,10 +62,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "iPhoto ծրագիրը չի գտնվել:" -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "Ֆայլերը ուղարկվում են Աղբարկղ" - #: qt/base/app.py:95 msgid "Quit" msgstr "Փակել" @@ -119,14 +95,6 @@ msgstr "Ստուգել թարմացումները" msgid "Open Debug Log" msgstr "Բացել Սխալների մատյանը" -#: qt/base/app.py:217 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:257 msgid "{} file (*.{})" msgstr "" @@ -859,9 +827,3 @@ msgstr "Չափը" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr "" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Վերաառաջնայնավորել արդյունքները" diff --git a/locale/it/LC_MESSAGES/core.po b/locale/it/LC_MESSAGES/core.po index d9715b24..a94f438b 100644 --- a/locale/it/LC_MESSAGES/core.po +++ b/locale/it/LC_MESSAGES/core.po @@ -9,55 +9,55 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Non sono stati trovati dei duplicati." -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "Tutti i file marcati sono stati copiati correttamente." -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "Tutti i file marcati sono stati spostati correttamente." -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "Tutti i file marcati sono stati inviati nel cestino." -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "'{}' è già nella lista." -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "'{}' non esiste." -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -65,45 +65,45 @@ msgstr "" "Tutti i %d elementi che coincidono verranno ignorati in tutte le scansioni " "successive. Continuare?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 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:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "Stai per rimuovere %d file dai risultati. Continuare?" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Raccolta file da scansionare" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "Le cartelle selezionate non contengono file da scansionare." -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d scartati)" @@ -213,3 +213,35 @@ msgstr "Verificate %d/%d somiglianze" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Scansione per i duplicati" + +#: core/app.py:59 +msgid "Loading" +msgstr "Caricamento" + +#: core/app.py:60 +msgid "Moving" +msgstr "Spostamento" + +#: core/app.py:61 +msgid "Copying" +msgstr "Copia in corso" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Spostamento nel cestino" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "Spostamento nel cestino" + +#: core/app.py:246 +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 "" +"Un'azione precedente è ancora in corso. Non puoi cominciarne una nuova. " +"Aspetta qualche secondo e quindi riprova." diff --git a/locale/it/LC_MESSAGES/ui.po b/locale/it/LC_MESSAGES/ui.po index ed40e565..a4be5877 100644 --- a/locale/it/LC_MESSAGES/ui.po +++ b/locale/it/LC_MESSAGES/ui.po @@ -9,26 +9,6 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Scansione per i duplicati" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Caricamento" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Spostamento" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Copia in corso" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Spostamento nel cestino" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Rimozione delle tracce insistenti dalla libreria di iTunes" @@ -82,10 +62,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "Non trovo l'applicazione iPhoto." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "" - #: qt/base/app.py:95 msgid "Quit" msgstr "" @@ -119,14 +95,6 @@ msgstr "" msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:217 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 "" -"Un'azione precedente è ancora in corso. Non puoi cominciarne una nuova. " -"Aspetta qualche secondo e quindi riprova." - #: qt/base/app.py:257 msgid "{} file (*.{})" msgstr "" @@ -408,7 +376,7 @@ msgstr "Rimuovi gli elementi marcati dai risultati" #: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0 msgid "Re-Prioritize Results..." -msgstr "" +msgstr "Cambia la priorità dei risultati..." #: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0 msgid "Remove Selected from Results" @@ -866,9 +834,3 @@ msgstr "Zoom" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr "" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Cambia la priorità dei risultati" diff --git a/locale/pt_BR/LC_MESSAGES/core.po b/locale/pt_BR/LC_MESSAGES/core.po index 785f70f2..2b2e49c6 100644 --- a/locale/pt_BR/LC_MESSAGES/core.po +++ b/locale/pt_BR/LC_MESSAGES/core.po @@ -13,15 +13,15 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "Não há duplicatas marcadas. Nada foi feito." -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "Não há duplicatas selecionadas. Nada foi feito." -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" @@ -29,27 +29,27 @@ msgstr "" "Você pretende abrir muitos arquivos de uma vez. Problemas podem surgir " "dependendo de qual app seja usado para abri-los. Continuar?" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "poderá apagar, mover ou copiar somente 10 duplicatas por vez" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Nenhuma duplicata encontrada." -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "Todos os arquivos marcados foram copiados com sucesso." -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "Todos os arquivos marcados foram relocados com sucesso." -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "Todos os arquivos marcados foram movidos para o Lixo com sucesso." -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." @@ -57,58 +57,58 @@ msgstr "" "Em modo demo, você não pode apagar, mover ou copiar mais do que 10 " "duplicatas por vez." -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "'{}' já está na lista." -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "'{}' não existe." -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" msgstr "Excluir %d duplicata(s) selecionada(s) de escaneamentos posteriores?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "copiar" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "mover" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "Selecione uma pasta para {} os arquivos marcados" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "Selecione uma pasta para o CSV exportado" -#: core/app.py:406 +#: core/app.py:428 msgid "You have no custom command set up. Set it up in your preferences." msgstr "" "Você não possui nenhum comando personalizado. Crie um nas preferências." -#: core/app.py:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "Remover %d arquivo(s) dos resultados?" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "{} grupos de duplicatas alterados ao re-priorizar." -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Juntando arquivos para escanear" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "As pastas selecionadas não contém arquivos escaneáveis." -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d rejeitado(s))" @@ -215,3 +215,35 @@ msgstr "%d/%d coincidentes verificados" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "EXIF de %d/%d fotos lidos" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Buscando por duplicatas" + +#: core/app.py:59 +msgid "Loading" +msgstr "Carregando" + +#: core/app.py:60 +msgid "Moving" +msgstr "Movendo" + +#: core/app.py:61 +msgid "Copying" +msgstr "Copiando" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Movendo para o Lixo" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "Enviando arquivos para o Lixo" + +#: core/app.py:246 +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 "" +"Ainda há uma ação em execução. Não é possível iniciar outra agora. Espere " +"alguns segundos e tente novamente." diff --git a/locale/pt_BR/LC_MESSAGES/ui.po b/locale/pt_BR/LC_MESSAGES/ui.po index 2062bee8..ad38ed7e 100644 --- a/locale/pt_BR/LC_MESSAGES/ui.po +++ b/locale/pt_BR/LC_MESSAGES/ui.po @@ -13,26 +13,6 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Buscando por duplicatas" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Carregando" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Movendo" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Copiando" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Movendo para o Lixo" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Removendo faixas sem referência da sua Biblioteca do iTunes" @@ -88,10 +68,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "O aplicativo iPhoto não foi encontrado." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "Enviando arquivos para o Lixo" - #: qt/base/app.py:95 msgid "Quit" msgstr "Encerrar" @@ -125,14 +101,6 @@ msgstr "Buscar Atualizaçõs" msgid "Open Debug Log" msgstr "Abrir Registro de Depuração" -#: qt/base/app.py:217 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 "" -"Ainda há uma ação em execução. Não é possível iniciar outra agora. Espere " -"alguns segundos e tente novamente." - #: qt/base/app.py:257 msgid "{} file (*.{})" msgstr "Arquivo {} (*.{})" @@ -872,9 +840,3 @@ msgstr "Reduzir/Ampliar" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr " (Mac OS X ou Linux somente)" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Re-Priorizar Resultados" diff --git a/locale/ru/LC_MESSAGES/core.po b/locale/ru/LC_MESSAGES/core.po index 793808e4..fd9fcd67 100644 --- a/locale/ru/LC_MESSAGES/core.po +++ b/locale/ru/LC_MESSAGES/core.po @@ -9,43 +9,43 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" "вы сможете удалить, переместить или скопировать только 10 дубликатов за один" " раз" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Дубликаты не найдены." -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "Все отмеченные файлы были скопированы успешно." -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "Все отмеченные файлы были перемещены успешно." -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "Все отмеченные файлы были успешно отправлены в Корзину." -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." @@ -53,15 +53,15 @@ msgstr "" "Вы не можете удалять, перемещать или копировать более 10 дубликатов за один " "раз в демонстрационном режиме." -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "" -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "" -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -69,43 +69,43 @@ msgstr "" "Все выбранные %d совпадений будут игнорироваться при всех последующих " "проверках. Продолжить?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "копирование" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "перемещение" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "Выберите каталог {} для отмеченных файлов" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 msgid "You have no custom command set up. Set it up in your preferences." msgstr "Вы не создали пользовательскую команду. Задайте её в настройках." -#: core/app.py:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "Вы собираетесь удалить %d файлов из результата поиска. Продолжить?" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Сбор файлов для сканирования" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "Выбранные каталоги не содержат файлов для сканирования." -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s. (%d отменено)" @@ -213,3 +213,35 @@ msgstr "Проверено %d/%d совпадений" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "Прочитана EXIF-информация %d/%d фотографий" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Проверка на наличие дубликатов" + +#: core/app.py:59 +msgid "Loading" +msgstr "Загрузка" + +#: core/app.py:60 +msgid "Moving" +msgstr "Перемещение" + +#: core/app.py:61 +msgid "Copying" +msgstr "Копирование" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Перемещение в Корзину" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "Перемещение файлов в Корзину" + +#: core/app.py:246 +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 "" +"Предыдущее действие до сих пор выполняется. Вы не можете начать новое. " +"Подождите несколько секунд, затем повторите попытку." diff --git a/locale/ru/LC_MESSAGES/ui.po b/locale/ru/LC_MESSAGES/ui.po index 9cb03434..2c89c505 100644 --- a/locale/ru/LC_MESSAGES/ui.po +++ b/locale/ru/LC_MESSAGES/ui.po @@ -9,26 +9,6 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Проверка на наличие дубликатов" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Загрузка" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Перемещение" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Копирование" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Перемещение в Корзину" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Удаление «мёртвых» треков из библиотеки iTunes" @@ -82,10 +62,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "Приложение iPhoto не найдено." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "Перемещение файлов в Корзину" - #: qt/base/app.py:95 msgid "Quit" msgstr "Выйти" @@ -119,14 +95,6 @@ msgstr "Проверить обновления" msgid "Open Debug Log" msgstr "Открыть журнал отладки" -#: qt/base/app.py:217 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:257 msgid "{} file (*.{})" msgstr "" @@ -863,9 +831,3 @@ msgstr "Увеличить" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr "" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Изменить приоритеты результатов" diff --git a/locale/ui.pot b/locale/ui.pot index 848d48e0..a9e527e6 100644 --- a/locale/ui.pot +++ b/locale/ui.pot @@ -4,26 +4,6 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: utf-8\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "" @@ -75,10 +55,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "" -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "" - #: qt/base/app.py:95 msgid "Quit" msgstr "" @@ -112,12 +88,6 @@ msgstr "" msgid "Open Debug Log" msgstr "" -#: qt/base/app.py:217 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:257 msgid "{} file (*.{})" msgstr "" diff --git a/locale/uk/LC_MESSAGES/core.po b/locale/uk/LC_MESSAGES/core.po index 3d89bb46..313c3f75 100755 --- a/locale/uk/LC_MESSAGES/core.po +++ b/locale/uk/LC_MESSAGES/core.po @@ -9,41 +9,41 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "Немає позначених дублікатів - нічого робити." -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "Немає обраних дублікатів - нічого робити." -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "може видаляти, переміщувати або копіювати лише 10 копій відразу" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "Не знайдено жодного дублікату." -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "Усі позначені файли були скопійовані успішно." -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "Усі позначені файли були переміщені успішно." -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "Усі позначені файли були успішно відправлені до кошика." -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." @@ -51,15 +51,15 @@ msgstr "" "Ви не можете видаляти, переміщати або копіювати більше 10 дублікатів відразу" " в демонстраційному режимі." -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "'{}' вже є в списку." -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "'{}' не існує." -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" @@ -67,43 +67,43 @@ msgstr "" "Усі обрані %d результатів будуть ігноруватися під час усіх наступних " "пошуків. Продовжити?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "копіювання" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "переміщення" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "Оберіть цільову папку для {} позначених файлів" -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 msgid "You have no custom command set up. Set it up in your preferences." msgstr "Власна команда не встановлена. Встановіть її у налаштуваннях." -#: core/app.py:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "Ви збираєтеся видалити %d файлів з результату пошуку. Продовжити?" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "Збір файлів для пошуку" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "Обрані папки не містять файлів придатних для пошуку." -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d відкинуто)" @@ -210,3 +210,35 @@ msgstr "Перевірено %d/%d результатів" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "Прочитано EXIF з %d/%d фотографій" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "Пошук дублікатів" + +#: core/app.py:59 +msgid "Loading" +msgstr "Завантаження" + +#: core/app.py:60 +msgid "Moving" +msgstr "Переміщення" + +#: core/app.py:61 +msgid "Copying" +msgstr "Копіювання" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "Відправка до кошику" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "Відправлення файлів до кошика" + +#: core/app.py:246 +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 "" +"Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте" +" кілька секунд, потім повторіть спробу." diff --git a/locale/uk/LC_MESSAGES/ui.po b/locale/uk/LC_MESSAGES/ui.po index baf6330f..f765fff7 100755 --- a/locale/uk/LC_MESSAGES/ui.po +++ b/locale/uk/LC_MESSAGES/ui.po @@ -9,26 +9,6 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "Пошук дублікатів" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "Завантаження" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "Переміщення" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "Копіювання" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "Відправка до кошику" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "Видалення мертвих треків з вашої бібліотеки iTunes " @@ -82,10 +62,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "Не вдалося знайти програму iPhoto." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "Відправлення файлів до кошика" - #: qt/base/app.py:95 msgid "Quit" msgstr "Вихід" @@ -119,14 +95,6 @@ msgstr "Перевірити оновлення" msgid "Open Debug Log" msgstr "Відкрити журнал налагодження" -#: qt/base/app.py:217 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:257 msgid "{} file (*.{})" msgstr "" @@ -861,9 +829,3 @@ msgstr "Збільшити" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr "" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Змінити пріоритети Результати" diff --git a/locale/zh_CN/LC_MESSAGES/core.po b/locale/zh_CN/LC_MESSAGES/core.po index 3a387e8c..ebf9ca5c 100644 --- a/locale/zh_CN/LC_MESSAGES/core.po +++ b/locale/zh_CN/LC_MESSAGES/core.po @@ -9,97 +9,97 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: core/app.py:37 +#: core/app.py:40 msgid "There are no marked duplicates. Nothing has been done." msgstr "" -#: core/app.py:38 +#: core/app.py:41 msgid "There are no selected duplicates. Nothing has been done." msgstr "" -#: core/app.py:39 +#: core/app.py:42 msgid "" "You're about to open many files at once. Depending on what those files are " "opened with, doing so can create quite a mess. Continue?" msgstr "" -#: core/app.py:98 +#: core/app.py:110 msgid "will only be able to delete, move or copy 10 duplicates at once" msgstr "" -#: core/app.py:232 +#: core/app.py:254 msgid "No duplicates found." msgstr "没有找到重复文件。" -#: core/app.py:245 +#: core/app.py:267 msgid "All marked files were copied successfully." msgstr "" -#: core/app.py:246 +#: core/app.py:268 msgid "All marked files were moved successfully." msgstr "" -#: core/app.py:247 +#: core/app.py:269 msgid "All marked files were successfully sent to Trash." msgstr "" -#: core/app.py:274 +#: core/app.py:296 msgid "" "You cannot delete, move or copy more than 10 duplicates at once in demo " "mode." msgstr "" -#: core/app.py:285 +#: core/app.py:307 msgid "'{}' already is in the list." msgstr "" -#: core/app.py:287 +#: core/app.py:309 msgid "'{}' does not exist." msgstr "" -#: core/app.py:294 +#: core/app.py:316 msgid "" "All selected %d matches are going to be ignored in all subsequent scans. " "Continue?" msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。继续吗?" -#: core/app.py:354 +#: core/app.py:376 msgid "copy" msgstr "复制" -#: core/app.py:354 +#: core/app.py:376 msgid "move" msgstr "移动" -#: core/app.py:355 +#: core/app.py:377 msgid "Select a directory to {} marked files to" msgstr "选择一个文件夹将标记的 {} 个文件进行..." -#: core/app.py:381 +#: core/app.py:403 msgid "Select a destination for your exported CSV" msgstr "" -#: core/app.py:406 +#: core/app.py:428 msgid "You have no custom command set up. Set it up in your preferences." msgstr "你没有设定自定义命令。请在首选项中进行设定。" -#: core/app.py:512 core/app.py:523 +#: core/app.py:535 core/app.py:546 msgid "You are about to remove %d files from results. Continue?" msgstr "你将从结果中移除 %d 个文件。继续吗?" -#: core/app.py:543 +#: core/app.py:566 msgid "{} duplicate groups were changed by the re-prioritization." msgstr "" -#: core/app.py:563 +#: core/app.py:586 msgid "Collecting files to scan" msgstr "收集文件以备扫描" -#: core/app.py:574 +#: core/app.py:597 msgid "The selected directories contain no scannable file." msgstr "所选文件夹中不包含可供扫描的文件。" -#: core/app.py:613 +#: core/app.py:636 msgid "%s (%d discarded)" msgstr "%s (%d 无效)" @@ -206,3 +206,33 @@ msgstr "验证 %d/%d 匹配项" #: core_pe/matchexif.py:18 msgid "Read EXIF of %d/%d pictures" msgstr "" + +#: core/app.py:58 +msgid "Scanning for duplicates" +msgstr "重复文件扫描中" + +#: core/app.py:59 +msgid "Loading" +msgstr "载入中" + +#: core/app.py:60 +msgid "Moving" +msgstr "移动中" + +#: core/app.py:61 +msgid "Copying" +msgstr "复制中" + +#: core/app.py:62 +msgid "Sending to Trash" +msgstr "移到垃圾桶" + +#: core/app.py:65 +msgid "Sending files to the recycle bin" +msgstr "将文件移到回收站" + +#: core/app.py:246 +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 "目前还有任务在执行,新任务无法开启。请等待几秒钟后再重新试一次。" diff --git a/locale/zh_CN/LC_MESSAGES/ui.po b/locale/zh_CN/LC_MESSAGES/ui.po index 71a92ed2..abe64965 100644 --- a/locale/zh_CN/LC_MESSAGES/ui.po +++ b/locale/zh_CN/LC_MESSAGES/ui.po @@ -9,26 +9,6 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: cocoa/inter/app.py:15 qt/base/app.py:38 -msgid "Scanning for duplicates" -msgstr "重复文件扫描中" - -#: cocoa/inter/app.py:16 qt/base/app.py:39 -msgid "Loading" -msgstr "载入中" - -#: cocoa/inter/app.py:17 qt/base/app.py:40 -msgid "Moving" -msgstr "移动中" - -#: cocoa/inter/app.py:18 qt/base/app.py:41 -msgid "Copying" -msgstr "复制中" - -#: cocoa/inter/app.py:19 -msgid "Sending to Trash" -msgstr "移到垃圾桶" - #: cocoa/inter/app_me.py:34 msgid "Removing dead tracks from your iTunes Library" msgstr "从你的iTunes库中移除无效的音轨" @@ -81,10 +61,6 @@ msgstr "" msgid "The iPhoto application couldn't be found." msgstr "The iPhoto application couldn't be found." -#: qt/base/app.py:42 -msgid "Sending files to the recycle bin" -msgstr "将文件移到回收站" - #: qt/base/app.py:95 msgid "Quit" msgstr "退出" @@ -118,12 +94,6 @@ msgstr "检查更新" msgid "Open Debug Log" msgstr "打开调试记录" -#: qt/base/app.py:217 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:257 msgid "{} file (*.{})" msgstr "" @@ -854,9 +824,3 @@ msgstr "Zoom" #: qt/base/deletion_options.py:46 msgid " (unsupported)" msgstr "" - -#~ msgid " (Mac OS X or Linux only)" -#~ msgstr "" - -#~ msgid "Re-Prioritize Results" -#~ msgstr "Re-Prioritize Results" diff --git a/qt/base/app.py b/qt/base/app.py index af5f28c2..01de41aa 100644 --- a/qt/base/app.py +++ b/qt/base/app.py @@ -13,17 +13,14 @@ import os.path as op from PyQt4.QtCore import QTimer, QObject, QCoreApplication, QUrl, QProcess, SIGNAL, pyqtSignal from PyQt4.QtGui import QDesktopServices, QFileDialog, QDialog, QMessageBox, QApplication -from jobprogress import job -from jobprogress.qt import Progress from hscommon.trans import trget from hscommon.plat import ISLINUX -from core.app import JobType - from qtlib.about_box import AboutBox from qtlib.recent import Recent from qtlib.reg import Registration from qtlib.util import createActions, getAppData +from qtlib.progress_window import ProgressWindow from . import platform from .result_window import ResultWindow @@ -34,14 +31,6 @@ from .deletion_options import DeletionOptions tr = trget('ui') -JOBID2TITLE = { - JobType.Scan: tr("Scanning for duplicates"), - JobType.Load: tr("Loading"), - JobType.Move: tr("Moving"), - JobType.Copy: tr("Copying"), - JobType.Delete: tr("Sending files to the recycle bin"), -} - class DupeGuru(QObject): MODELCLASS = None LOGO_NAME = '' @@ -68,7 +57,7 @@ class DupeGuru(QObject): self.recentResults = Recent(self, 'recentResults') self.recentResults.mustOpenItem.connect(self.model.load_from) self.resultWindow = self.RESULT_WINDOW_CLASS(self) - self._progress = Progress(self.resultWindow) + self.progress_window = ProgressWindow(self.resultWindow, self.model.progress_window) self.directories_dialog = DirectoriesDialog(self.resultWindow, self) self.details_dialog = self.DETAILS_DIALOG_CLASS(self.resultWindow, self) self.problemDialog = ProblemDialog(parent=self.resultWindow, model=self.model.problem_dialog) @@ -86,7 +75,6 @@ class DupeGuru(QObject): # that the application haven't launched. QTimer.singleShot(0, self.finishedLaunching) self.connect(QCoreApplication.instance(), SIGNAL('aboutToQuit()'), self.application_will_terminate) - self.connect(self._progress, SIGNAL('finished(QString)'), self.job_finished) def _setupActions(self): # Setup actions that are common to both the directory dialog and the results window. @@ -164,11 +152,6 @@ class DupeGuru(QObject): def ignoreListTriggered(self): self.model.ignore_list_dialog.show() - def job_finished(self, jobid): - result = self.model._job_completed(jobid, self._progress.last_error) - if not result: - self._progress.reraise_if_error() - def openDebugLogTriggered(self): debugLogPath = op.join(self.model.appdata, 'debug.log') self.open_path(debugLogPath) @@ -207,16 +190,6 @@ class DupeGuru(QObject): def reveal_path(path): DupeGuru.open_path(path[:-1]) - def start_job(self, jobid, func, args=()): - title = JOBID2TITLE[jobid] - try: - j = self._progress.create_job() - args = (j, ) + tuple(args) - self._progress.run(jobid, title, func, args=args) - except job.JobInProgressError: - msg = tr("A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.") - QMessageBox.information(self.resultWindow, 'Action in progress', msg) - def get_default(self, key): return self.prefs.get_value(key)