From e5ce6680ca9428388ebcdd1229787819060761be Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sat, 3 Aug 2013 16:27:36 -0400 Subject: [PATCH] Modernized progress window GUI Following the refactoring that has been initiated in pdfmasher's "vala" branch, I pushed more progress window logic into the core. The UI code is now a bit dumber than it used to be, and the core now directly decides when the progress window is shown and hidden. The "job finished" notification is also directly sent by the core. Job description update logic is handled by a core gui textfield. Job description contsants also moved to the core, triggering a localisation migration from "ui" to "core". --- build.py | 8 ++- cocoa/base/AppDelegateBase.h | 2 + cocoa/base/AppDelegateBase.m | 3 +- cocoa/base/ResultWindowBase.m | 19 ------- cocoa/inter/all.py | 1 + cocoa/inter/app.py | 61 ++------------------ cocoa/wscript | 3 +- cocoalib/cocoa/__init__.py | 28 ++++----- cocoalib/controllers/HSProgressWindow.h | 2 + cocoalib/controllers/HSProgressWindow.m | 13 ++++- core/app.py | 40 +++++++++---- hscommon/gui/progress_window.py | 1 + locale/core.pot | 72 ++++++++++++++++------- locale/cs/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/cs/LC_MESSAGES/ui.po | 40 +------------ locale/de/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/de/LC_MESSAGES/ui.po | 40 +------------ locale/fr/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/fr/LC_MESSAGES/ui.po | 38 ------------- locale/hy/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/hy/LC_MESSAGES/ui.po | 38 ------------- locale/it/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/it/LC_MESSAGES/ui.po | 40 +------------ locale/pt_BR/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/pt_BR/LC_MESSAGES/ui.po | 38 ------------- locale/ru/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/ru/LC_MESSAGES/ui.po | 38 ------------- locale/ui.pot | 30 ---------- locale/uk/LC_MESSAGES/core.po | 76 ++++++++++++++++++------- locale/uk/LC_MESSAGES/ui.po | 38 ------------- locale/zh_CN/LC_MESSAGES/core.po | 74 +++++++++++++++++------- locale/zh_CN/LC_MESSAGES/ui.po | 36 ------------ qt/base/app.py | 31 +--------- 33 files changed, 615 insertions(+), 727 deletions(-) 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)