mirror of
https://github.com/arsenetar/dupeguru.git
synced 2024-11-19 05:19:03 +00:00
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:
parent
8e15d89a2e
commit
e5ce6680ca
8
build.py
8
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'])
|
||||
|
@ -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;
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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];
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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], [])
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
40
core/app.py
40
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)
|
||||
|
@ -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
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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."
|
||||
|
@ -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ů"
|
||||
|
@ -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."
|
||||
|
@ -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"
|
||||
|
@ -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."
|
||||
|
@ -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"
|
||||
|
@ -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 ""
|
||||
"Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: "
|
||||
"Սպասեք մի քանի վայրկյան և կրկին փորձեք:"
|
||||
|
@ -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 "Վերաառաջնայնավորել արդյունքները"
|
||||
|
@ -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."
|
||||
|
@ -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"
|
||||
|
@ -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."
|
||||
|
@ -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"
|
||||
|
@ -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 ""
|
||||
"Предыдущее действие до сих пор выполняется. Вы не можете начать новое. "
|
||||
"Подождите несколько секунд, затем повторите попытку."
|
||||
|
@ -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 "Изменить приоритеты результатов"
|
||||
|
@ -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 ""
|
||||
|
@ -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 ""
|
||||
"Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте"
|
||||
" кілька секунд, потім повторіть спробу."
|
||||
|
@ -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 "Змінити пріоритети Результати"
|
||||
|
@ -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 "目前还有任务在执行,新任务无法开启。请等待几秒钟后再重新试一次。"
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user