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".
This commit is contained in:
Virgil Dupras 2013-08-03 16:27:36 -04:00
parent 8e15d89a2e
commit e5ce6680ca
33 changed files with 615 additions and 727 deletions

View File

@ -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'])

View File

@ -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;

View File

@ -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];
}

View File

@ -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];

View File

@ -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

View File

@ -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)

View File

@ -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], [])

View File

@ -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)

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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 ""

View File

@ -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."

View File

@ -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ů"

View File

@ -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."

View File

@ -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"

View File

@ -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."

View File

@ -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"

View File

@ -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 ""
"Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: "
"Սպասեք մի քանի վայրկյան և կրկին փորձեք:"

View File

@ -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 "Վերաառաջնայնավորել արդյունքները"

View File

@ -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."

View File

@ -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"

View File

@ -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."

View File

@ -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"

View File

@ -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 ""
"Предыдущее действие до сих пор выполняется. Вы не можете начать новое. "
"Подождите несколько секунд, затем повторите попытку."

View File

@ -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 "Изменить приоритеты результатов"

View File

@ -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 ""

View File

@ -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 ""
"Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте"
" кілька секунд, потім повторіть спробу."

View File

@ -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 "Змінити пріоритети Результати"

View File

@ -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 "目前还有任务在执行,新任务无法开启。请等待几秒钟后再重新试一次。"

View File

@ -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"

View File

@ -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 = '<replace this>'
@ -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)