1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-01-25 08:01:39 +00:00

Compare commits

...

33 Commits
4.0.0 ... 4.0.3

Author SHA1 Message Date
Virgil Dupras
6a28017c49 v4.0.3 2016-11-25 01:04:31 +00:00
Virgil Dupras
dc6933c90c Fix crash when cleaning picture cache 2016-11-25 00:59:51 +00:00
Virgil Dupras
e0281dd740 Fix previous commit
I forgot to remove a sparkle reference in the build script.
2016-11-23 20:25:32 -05:00
Virgil Dupras
79e99db1d3 cocoa: remove Sparkle
It's a deployment headache. Old sparkle versions generate runtime warnings about security and up to date version requires me to compile on 10.10, but after many tries, it seems that I absolutely need to build on my minimum requirements version which is 10.8. So screw Sparkle.
2016-11-23 19:51:55 -05:00
Virgil Dupras
76cc2000ab Add UI preference to picture cache type under Qt 2016-11-22 02:41:43 +00:00
Virgil Dupras
e4b6e12d4c Update tox warning exception
E305 somehow popped up as a default warning which I don't care about.
2016-11-22 02:39:51 +00:00
Virgil Dupras
c58a4817ca Add shelve-based picture cache implementation
Hopefully, this will fix #394 for real this time, that is, without the
need for a messy python executable ship in the app.
2016-11-15 19:58:18 -05:00
Virgil Dupras
f7adb5f11e Whitespace normalization 2016-11-15 19:57:30 -05:00
Virgil Dupras
c43044ea4c Remove unused imports 2016-11-15 19:56:19 -05:00
Virgil Dupras
cc01e8eb09 Move pe.cache.Cache into its own unit, cache_sqlite
This prepares us for an upcoming alternative cache implementation.
2016-11-13 17:01:20 -05:00
Virgil Dupras
1c20e5c770 v4.0.2 2016-10-09 12:32:04 -04:00
Virgil Dupras
edcff588e2 Update po from code 2016-08-25 21:43:51 -04:00
Virgil Dupras
26aad6e948 Add DESTDIR variable to makefile
That allows us to install in a sandbox.
2016-08-24 22:22:20 -04:00
Virgil Dupras
c303a490ef Make 'make env' a bit more solid
In some context, we don't end up with a bin/pip executable in our venv.
It's better to call pip as a module.
2016-08-24 22:04:58 -04:00
Virgil Dupras
6ed4499a97 v4.0.1 2016-08-24 20:31:58 -04:00
Virgil Dupras
aa7499aa12 Add make install and make uninstall 2016-08-23 23:02:38 -04:00
Virgil Dupras
63558d647a Add 'make srcpkg' 2016-08-23 19:10:03 -04:00
Virgil Dupras
eb3f7d65de Adjust requirements to pytest 3.0 release
pytest-monkeyplus isn't pytest 3.0 compatible yet, so we have to
explicitly forbid pytest 3.0+ in requirements.
2016-08-22 22:16:45 -04:00
Virgil Dupras
ac8a336c4a Fix picture mode's fuzzy block scanner threshold
It was always wrongly set to it's weirld old default 75 threshold.

fixes #387
2016-08-22 21:35:46 -04:00
Virgil Dupras
0206f2fd15 makefile: compile PE extensions without build.py 2016-08-16 22:03:43 -04:00
Virgil Dupras
b41d3f7efc Improve makefile's i18n target
It now uses proper dependencies and directly calls msgfmt.
2016-08-16 20:59:05 -04:00
Virgil Dupras
c43d37582e Fix syntax error in greek po file 2016-08-16 20:55:59 -04:00
Virgil Dupras
30a278719b Moved credits to the root folder
It was a real pain to edit credits files in all languages.
2016-08-16 20:18:49 -04:00
Virgil Dupras
87ef46ca15 Update hscommon and qtlib subrepos
They contain our new greek translation.
2016-08-16 20:01:25 -04:00
1kakarot
9f3ec065ed Added 'el' locale (#382) 2016-08-16 19:59:04 -04:00
Virgil Dupras
e19056048c Clarify the Windows situation in README 2016-08-16 19:33:39 -04:00
Virgil Dupras
76e5817ff3 Add Makefile
I finally took the time to properly learn how to write makefiles. This
was long overdue, but here we go.

Much of the makefile wraps `build.py`, but gradually, we'll extract
stuff from there until the makefile is the main container for build
logic.
2016-08-15 22:54:22 -04:00
Virgil Dupras
20dc2d63fd qt: save prefs on close more predictably
Ticket #379 reports crashes on quit due to `willSavePrefs` being called
when result and details dialogs are already freed. I can't reproduce the
crash, but it's still a bad idea to rely on the timing of
`aboutToQuit()` to launch this process.

This commits uses a more predictable place to emit `willSavePrefs` and
I'm pretty sure it will fix the crash at #379.
2016-08-14 21:11:24 -04:00
Virgil Dupras
28d2aa8197 cocoa: fix crash on load results
During createResultsWindow(), we would initialize the details panel too late.

fixes #380
2016-08-14 20:31:14 -04:00
Virgil Dupras
5be9d537a5 qt: fix broken load results dialog
`QFileDialog.getOpenFileName`, under pyqt5, returns a tuple, not only a
file path.
2016-08-14 20:01:46 -04:00
Virgil Dupras
b97e89d4d8 package.py: use proper prefix for submodules archive file 2016-08-13 20:37:08 -04:00
Virgil Dupras
0f4992de47 package.py: include submodules src in tar.gz
Otherwise, that results in an incomplete source package!
2016-08-13 20:30:24 -04:00
Virgil Dupras
55ad9ef33a Fix qt.platform.BASE_PATH location
It was wrong since it was moved from qt/base.

fixes #378
2016-07-21 20:39:15 -04:00
113 changed files with 8156 additions and 6592 deletions

3
.gitmodules vendored
View File

@@ -7,6 +7,3 @@
[submodule "cocoalib"]
path = cocoalib
url = https://github.com/hsoft/cocoalib.git
[submodule "cocoa/Sparkle"]
path = cocoa/Sparkle
url = https://github.com/sparkle-project/Sparkle.git

19
CREDITS Normal file
View File

@@ -0,0 +1,19 @@
To know who contributed to dupeGuru, you can look at the commit log, but not all contributions
result in a commit. This file lists contributors who don't necessarily appear in the commit log.
* Jérôme Cantin, Main icon
* Gregor Tätzner, German localization
* Frank Weber, German localization
* Eric Dee, Chinese localization
* Aleš Nehyba, Czech localization
* Paolo Rossi, Italian localization
* Hrant Ohanyan, Armenian localization
* Igor Pavlov, Russian localization
* Kyrill Detinov, Russian localization
* Yuri Petrashko, Ukrainian localization
* Nickolas Pohilets, Ukrainian localization
* Victor Figueiredo, Brazilian localization
* Phan Anh, Vietnamese localization
* Gabriel Koutilellis, Greek localization
Thanks!

111
Makefile Normal file
View File

@@ -0,0 +1,111 @@
PYTHON ?= python3
REQ_MINOR_VERSION = 4
PREFIX ?= /usr/local
# If you're installing into a path that is not going to be the final path prefix (such as a
# sandbox), set DESTDIR to that path.
# Our build scripts are not very "make like" yet and perform their task in a bundle. For now, we
# use one of each file to act as a representative, a target, of these groups.
submodules_target = hscommon/__init__.py
packages = hscommon qtlib core qt
localedirs = $(wildcard locale/*/LC_MESSAGES)
pofiles = $(wildcard locale/*/LC_MESSAGES/*.po)
mofiles = $(patsubst %.po,%.mo,$(pofiles))
vpath %.po $(localedirs)
vpath %.mo $(localedirs)
all : | run.py
@echo "Build complete! You can run dupeGuru with 'make run'"
run.py : | env i18n modules qt/dg_rc.py
cp qt/run_template.py run.py
run: | run.py
./env/bin/python run.py
pyc:
${PYTHON} -m compileall ${packages}
reqs :
@ret=`${PYTHON} -c "import sys; print(int(sys.version_info[:2] >= (3, ${REQ_MINOR_VERSION})))"`; \
if [ $${ret} -ne 1 ]; then \
echo "Python 3.${REQ_MINOR_VERSION}+ required. Aborting."; \
exit 1; \
fi
@${PYTHON} -m venv -h > /dev/null || \
echo "Creation of our virtualenv failed. If you're on Ubuntu, you probably need python3-venv."
@${PYTHON} -c 'import PyQt5' >/dev/null 2>&1 || \
{ echo "PyQt 5.4+ required. Install it and try again. Aborting"; exit 1; }
# Ensure that submodules are initialized
$(submodules_target) :
git submodule init
git submodule update
env : | $(submodules_target) reqs
@echo "Creating our virtualenv"
${PYTHON} -m venv env --system-site-packages
./env/bin/python -m pip install -r requirements.txt
build/help : | env
./env/bin/python build.py --doc
qt/dg_rc.py : qt/dg.qrc
pyrcc5 qt/dg.qrc > qt/dg_rc.py
i18n: $(mofiles)
%.mo : %.po
msgfmt -o $@ $<
core/pe/_block.*.so : core/pe/modules/block.c core/pe/modules/common.c | env
./env/bin/python hscommon/build_ext.py $^ _block
mv _block.*.so core/pe
core/pe/_cache.*.so : core/pe/modules/cache.c core/pe/modules/common.c | env
./env/bin/python hscommon/build_ext.py $^ _cache
mv _cache.*.so core/pe
qt/pe/_block_qt.*.so : qt/pe/modules/block.c | env
./env/bin/python hscommon/build_ext.py $^ _block_qt
mv _block_qt.*.so qt/pe
modules : core/pe/_block.*.so core/pe/_cache.*.so qt/pe/_block_qt.*.so
mergepot :
./env/bin/python build.py --mergepot
normpo :
./env/bin/python build.py --normpo
srcpkg :
./scripts/srcpkg.sh
install: build/help | all pyc
mkdir -p ${DESTDIR}${PREFIX}/share/dupeguru
cp -rf ${packages} locale build/help ${DESTDIR}${PREFIX}/share/dupeguru
cp -f run.py ${DESTDIR}${PREFIX}/share/dupeguru/run.py
chmod 755 ${DESTDIR}${PREFIX}/share/dupeguru/run.py
mkdir -p ${DESTDIR}${PREFIX}/bin
ln -sf ${PREFIX}/share/dupeguru/run.py ${DESTDIR}${PREFIX}/bin/dupeguru
mkdir -p ${DESTDIR}${PREFIX}/share/applications
cp -f pkg/dupeguru.desktop ${DESTDIR}${PREFIX}/share/applications
mkdir -p ${DESTDIR}${PREFIX}/share/pixmaps
cp -f images/dgse_logo_128.png ${DESTDIR}${PREFIX}/share/pixmaps/dupeguru.png
uninstall :
rm -rf "${DESTDIR}${PREFIX}/share/dupeguru"
rm -f "${DESTDIR}${PREFIX}/bin/dupeguru"
rm -f "${DESTDIR}${PREFIX}/share/applications/dupeguru.desktop"
rm -f "${DESTDIR}${PREFIX}/share/pixmaps/dupeguru.png"
clean:
-rm run.py
-rm -rf build
-rm locale/*/LC_MESSAGES/*.mo
-rm core/pe/*.so qt/pe/*.so
.PHONY : clean srcpkg normpo mergepot modules i18n reqs run pyc install uninstall all

View File

@@ -31,9 +31,10 @@ contribution opportunity.
### Windows maintainer wanted
As [described on my website][nowindows], v3.9.x/6.8.x/2.10.x series of dupeGuru are the last ones
to support Windows unless someone steps up to maintain it. If you're a Windows developer and are
interested in taking this task, [don't hesitate to let me know][contrib-issue].
As [described on my website][nowindows], dupeGuru v4.0 dropped Windows support
because there isn't anyone to bear the burden of Windows maintenance. If
you're a Windows developer and are interested in taking this task, [don't
hesitate to let me know][contrib-issue].
### OS X maintainer wanted
@@ -59,18 +60,32 @@ This folder contains the source for dupeGuru. Its documentation is in `help`, bu
There are also other sub-folder that comes from external repositories and are part of this repo as
git submodules:
* Sparkle: An auto-update library for the OS X version.
* hscommon: A collection of helpers used across HS applications.
* cocoalib: A collection of helpers used across Cocoa UI codebases of HS applications.
* qtlib: A collection of helpers used across Qt UI codebases of HS applications.
## How to build dupeGuru from source
### make
If you're on linux, you can build the ap for local development with `make`:
$ make
$ make run
The `Makefile` is a recent addition, however. You might have to fallback to the legacy build
scripts.
### Legacy build
If you're on OS X or that if the `make` method didn't work, you can build dupeGuru with the
legacy scripts.
There's a bootstrap script that will make building very easy. There might be some things that you
need to install manually on your system, but the bootstrap script will tell you when what you need
to install. You can run the bootstrap with:
./bootstrap.sh
$ ./bootstrap.sh
and follow instructions from the script.

View File

@@ -106,12 +106,6 @@ def build_xibless(dest='cocoa/autogen'):
)
def build_cocoa(dev):
sparkle_framework_path = op.join('cocoa', 'Sparkle', 'build', 'Release', 'Sparkle.framework')
if not op.exists(sparkle_framework_path):
print("Building Sparkle")
os.chdir(op.join('cocoa', 'Sparkle'))
print_and_do('make build')
os.chdir(op.join('..', '..'))
print("Creating OS X app structure")
app = cocoa_app()
app_version = get_module_version('core')
@@ -160,7 +154,7 @@ def build_cocoa(dev):
image_path = 'cocoa/dupeguru.icns'
resources = [image_path, 'cocoa/dsa_pub.pem', 'build/dg_cocoa.py', 'build/help']
app.copy_resources(*resources, use_symlinks=dev)
app.copy_frameworks('build/Python', sparkle_framework_path)
app.copy_frameworks('build/Python')
print("Creating the run.py file")
tmpl = open('cocoa/run_template.py', 'rt').read()
run_contents = tmpl.replace('{{app_path}}', app.dest)
@@ -210,7 +204,7 @@ def build_updatepot():
print("Updating Cocoa strings file.")
build_cocoalib_xibless('cocoalib/autogen')
loc.generate_cocoa_strings_from_code('cocoalib', 'cocoalib/en.lproj')
build_xibless('se', op.join('cocoa', 'autogen', 'se'))
build_xibless()
loc.generate_cocoa_strings_from_code('cocoa', 'cocoa/en.lproj')
print("Building .pot files from source files")
print("Building core.pot")

View File

@@ -7,7 +7,6 @@ http://www.gnu.org/licenses/gpl-3.0.html
*/
#import <Cocoa/Cocoa.h>
#import <Sparkle/SUUpdater.h>
#import "PyDupeGuru.h"
#import "ResultWindow.h"
#import "ResultTable.h"
@@ -24,7 +23,6 @@ http://www.gnu.org/licenses/gpl-3.0.html
{
NSMenu *recentResultsMenu;
NSMenu *columnsMenu;
SUUpdater *updater;
PyDupeGuru *model;
ResultWindow *_resultWindow;
@@ -41,7 +39,6 @@ http://www.gnu.org/licenses/gpl-3.0.html
@property (readwrite, retain) NSMenu *recentResultsMenu;
@property (readwrite, retain) NSMenu *columnsMenu;
@property (readwrite, retain) SUUpdater *updater;
/* Virtual */
+ (NSDictionary *)defaultPreferences;

View File

@@ -22,7 +22,6 @@ http://www.gnu.org/licenses/gpl-3.0.html
@synthesize recentResultsMenu;
@synthesize columnsMenu;
@synthesize updater;
+ (NSDictionary *)defaultPreferences
{
@@ -70,7 +69,6 @@ http://www.gnu.org/licenses/gpl-3.0.html
self = [super init];
model = [[PyDupeGuru alloc] init];
[model bindCallback:createCallback(@"DupeGuruView", self)];
[self setUpdater:[SUUpdater sharedUpdater]];
NSMutableIndexSet *contentsIndexes = [NSMutableIndexSet indexSet];
[contentsIndexes addIndex:1];
[contentsIndexes addIndex:2];
@@ -92,12 +90,6 @@ http://www.gnu.org/licenses/gpl-3.0.html
// We can only finalize initialization once the main menu has been created, which cannot happen
// before AppDelegate is created.
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
/* Because the pref pane is lazily loaded, we have to manually do the update check if the
preference is set.
*/
if ([ud boolForKey:@"SUEnableAutomaticChecks"]) {
[[SUUpdater sharedUpdater] checkForUpdatesInBackground];
}
_recentResults = [[HSRecentFiles alloc] initWithName:@"recentResults" menu:recentResultsMenu];
[_recentResults setDelegate:self];
_directoryPanel = [[DirectoryPanel alloc] initWithParentApp:self];
@@ -352,8 +344,12 @@ http://www.gnu.org/licenses/gpl-3.0.html
if (_detailsPanel != nil) {
[_detailsPanel release];
}
_resultWindow = [[ResultWindow alloc] initWithParentApp:self];
// Warning: creation order is important
// If the details panel is not created first and that there are some results in the model
// (happens if we load results), a dupe selection event triggers a details refresh in the
// core before we have the chance to initialize it, and then we crash.
_detailsPanel = [self createDetailsPanel];
_resultWindow = [[ResultWindow alloc] initWithParentApp:self];
}
- (void)showResultsWindow
{

Submodule cocoa/Sparkle deleted from 1c8d54166b

View File

@@ -3,18 +3,15 @@
"About dupeGuru" = "About dupeGuru";
"Action" = "Action";
"Actions" = "Actions";
"Add Aperture Library" = "Add Aperture Library";
"Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information." = "Add criteria to the right box and click OK to send the dupes that correspond the best to these criteria to their respective group's reference position. Read the help file for more information.";
"Add iPhoto Library" = "Add iPhoto Library";
"Add iTunes Library" = "Add iTunes Library";
"Add New Folder..." = "Add New Folder...";
"Add Selected to Ignore List" = "Add Selected to Ignore List";
"Advanced" = "Advanced";
"After having deleted a duplicate, place a link targeting the reference file to replace the deleted file." = "After having deleted a duplicate, place a link targeting the reference file to replace the deleted file.";
"Album" = "Album";
"Application Mode:" = "Application Mode:";
"Artist" = "Artist";
"Attribute" = "Attribute";
"Audio Content" = "Audio Content";
"Automatically check for updates" = "Automatically check for updates";
"Basic" = "Basic";
"Bring All to Front" = "Bring All to Front";
@@ -26,8 +23,6 @@
"Close" = "Close";
"Close Window" = "Close Window";
"Columns" = "Columns";
"Content" = "Content";
"Contents" = "Contents";
"Copy" = "Copy";
"Copy and Move:" = "Copy and Move:";
"Copy Marked to..." = "Copy Marked to...";
@@ -44,27 +39,20 @@
"Do you really want to remove all your cached picture analysis?" = "Do you really want to remove all your cached picture analysis?";
"dupeGuru" = "dupeGuru";
"dupeGuru Help" = "dupeGuru Help";
"dupeGuru ME Preferences" = "dupeGuru ME Preferences";
"dupeGuru PE Preferences" = "dupeGuru PE Preferences";
"dupeGuru Preferences" = "dupeGuru Preferences";
"dupeGuru Results" = "dupeGuru Results";
"dupeGuru Website" = "dupeGuru Website";
"Dupes Only" = "Dupes Only";
"Edit" = "Edit";
"Excluded" = "Excluded";
"EXIF Timestamp" = "EXIF Timestamp";
"Export Results to CSV" = "Export Results to CSV";
"Export Results to XHTML" = "Export Results to XHTML";
"Fewer results" = "Fewer results";
"File" = "File";
"Filename" = "Filename";
"Filename - Fields" = "Filename - Fields";
"Filename - Fields (No Order)" = "Filename - Fields (No Order)";
"Filter" = "Filter";
"Filter hardness:" = "Filter hardness:";
"Filter Results..." = "Filter Results...";
"Folder Selection Window" = "Folder Selection Window";
"Folders" = "Folders";
"Font Size:" = "Font Size:";
"Genre" = "Genre";
"Help" = "Help";
@@ -92,12 +80,14 @@
"Mode" = "Mode";
"More results" = "More results";
"Move Marked to..." = "Move Marked to...";
"Music" = "Music";
"Name" = "Name";
"Normal" = "Normal";
"Ok" = "Ok";
"Open Selected with Default Application" = "Open Selected with Default Application";
"Options" = "Options";
"Paste" = "Paste";
"Picture" = "Picture";
"Preferences..." = "Preferences...";
"Problems!" = "Problems!";
"Proceed" = "Proceed";
@@ -108,7 +98,6 @@
"Recreate absolute path" = "Recreate absolute path";
"Recreate relative path" = "Recreate relative path";
"Reference" = "Reference";
"Remove Dead Tracks in iTunes" = "Remove Dead Tracks in iTunes";
"Remove empty folders on delete or move" = "Remove empty folders on delete or move";
"Remove Marked from Results" = "Remove Marked from Results";
"Remove Selected" = "Remove Selected";
@@ -134,9 +123,9 @@
"Show All" = "Show All";
"Show Delta Values" = "Show Delta Values";
"Show Dupes Only" = "Show Dupes Only";
"Standard" = "Standard";
"Start Duplicate Scan" = "Start Duplicate Scan";
"State" = "State";
"Tags" = "Tags";
"Tags to scan:" = "Tags to scan:";
"The name '%@' already exists." = "The name '%@' already exists.";
"There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results." = "There were problems processing some (or all) of the files. The cause of these problems are described in the table below. Those files were not removed from your results.";

View File

@@ -1,7 +1,6 @@
import logging
from objp.util import pyref, dontwrap
from hscommon.path import Path, pathify
from cocoa import install_exception_hook, install_cocoa_logger, patch_threaded_job_performer
from cocoa.inter import PyBaseApp, BaseAppView
@@ -11,6 +10,8 @@ from .directories import Directories, Bundle
from .photo import Photo
class DupeGuru(DupeGuruBase):
PICTURE_CACHE_TYPE = 'shelve'
def __init__(self, view):
DupeGuruBase.__init__(self, view)
self.directories = Directories()

View File

@@ -12,7 +12,6 @@ windowMenu = result.addMenu("Window")
helpMenu = result.addMenu("Help")
appMenu.addItem("About dupeGuru", Action(owner, 'showAboutBox'))
appMenu.addItem("Check for update...", Action(owner.updater, 'checkForUpdates:'))
appMenu.addSeparator()
appMenu.addItem("Preferences...", Action(owner, 'showPreferencesPanel'), 'cmd+,')
appMenu.addSeparator()

View File

@@ -31,8 +31,6 @@ def configure(conf):
conf.env.FRAMEWORK_COCOA = 'Cocoa'
conf.env.ARCH_COCOA = ['x86_64']
conf.env.MACOSX_DEPLOYMENT_TARGET = '10.8'
conf.env.CFLAGS = ['-F'+op.abspath('Sparkle/build/Release')]
conf.env.LINKFLAGS = ['-F'+op.abspath('Sparkle/build/Release')]
def build(ctx):
# What do we compile?
@@ -62,7 +60,7 @@ def build(ctx):
# Because our python lib's install name is "@rpath/Python", we need to set the executable's
# rpath. Fortunately, WAF supports it and we just need to supply the "rpath" argument.
rpath = '@executable_path/../Frameworks',
framework = ['Sparkle', 'Quartz'],
framework = ['Quartz'],
)
from waflib import TaskGen

View File

@@ -1,3 +1,3 @@
__version__ = '4.0.0'
__version__ = '4.0.3'
__appname__ = 'dupeGuru'

View File

@@ -116,6 +116,8 @@ class DupeGuru(Broadcaster):
NAME = PROMPT_NAME = "dupeGuru"
PICTURE_CACHE_TYPE = 'sqlite' # set to 'shelve' for a ShelveCache
def __init__(self, view):
if view.get_default(DEBUG_MODE_PREFERENCE):
logging.getLogger().setLevel(logging.DEBUG)
@@ -138,7 +140,7 @@ class DupeGuru(Broadcaster):
'clean_empty_dirs': False,
'ignore_hardlink_matches': False,
'copymove_dest_type': DestType.Relative,
'cache_path': op.join(self.appdata, 'cached_pictures.db'),
'picture_cache_type': self.PICTURE_CACHE_TYPE
}
self.selected_dupes = []
self.details_panel = DetailsPanel(self)
@@ -166,6 +168,11 @@ class DupeGuru(Broadcaster):
self.result_table.connect()
self.view.create_results_window()
def _get_picture_cache_path(self):
cache_type = self.options['picture_cache_type']
cache_name = 'cached_pictures.shelve' if cache_type == 'shelve' else 'cached_pictures.db'
return op.join(self.appdata, cache_name)
def _get_dupe_sort_key(self, dupe, get_group, key, delta):
if self.app_mode in (AppMode.Music, AppMode.Picture):
if key == 'folder_path':
@@ -405,9 +412,10 @@ class DupeGuru(Broadcaster):
path = path.parent()
def clear_picture_cache(self):
cache = pe.cache.Cache(self.options['cache_path'])
cache.clear()
cache.close()
try:
os.remove(self._get_picture_cache_path())
except FileNotFoundError:
pass # we don't care
def copy_or_move(self, dupe, copy: bool, destination: str, dest_type: DestType):
source_path = dupe.path
@@ -754,6 +762,8 @@ class DupeGuru(Broadcaster):
for k, v in self.options.items():
if hasattr(scanner, k):
setattr(scanner, k, v)
if self.app_mode == AppMode.Picture:
scanner.cache_path = self._get_picture_cache_path()
self.results.groups = []
self._recreate_result_table()
self._results_changed()

View File

@@ -1,17 +1,10 @@
# Created By: Virgil Dupras
# Created On: 2006/09/14
# Copyright 2015 Hardcoded Software (http://www.hardcoded.net)
# Copyright 2016 Virgil Dupras
#
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
import os
import os.path as op
import logging
import sqlite3 as sqlite
from ._cache import string_to_colors
from ._cache import string_to_colors # noqa
def colors_to_string(colors):
"""Transform the 3 sized tuples 'colors' into a hex string.
@@ -19,7 +12,7 @@ def colors_to_string(colors):
[(0,100,255)] --> 0064ff
[(1,2,3),(4,5,6)] --> 010203040506
"""
return ''.join(['%02x%02x%02x' % (r, g, b) for r, g, b in colors])
return ''.join('%02x%02x%02x' % (r, g, b) for r, g, b in colors)
# This function is an important bottleneck of dupeGuru PE. It has been converted to C.
# def string_to_colors(s):
@@ -31,132 +24,3 @@ def colors_to_string(colors):
# result.append((number >> 16, (number >> 8) & 0xff, number & 0xff))
# return result
class Cache:
"""A class to cache picture blocks.
"""
def __init__(self, db=':memory:'):
self.dbname = db
self.con = None
self._create_con()
def __contains__(self, key):
sql = "select count(*) from pictures where path = ?"
result = self.con.execute(sql, [key]).fetchall()
return result[0][0] > 0
def __delitem__(self, key):
if key not in self:
raise KeyError(key)
sql = "delete from pictures where path = ?"
self.con.execute(sql, [key])
# Optimized
def __getitem__(self, key):
if isinstance(key, int):
sql = "select blocks from pictures where rowid = ?"
else:
sql = "select blocks from pictures where path = ?"
result = self.con.execute(sql, [key]).fetchone()
if result:
result = string_to_colors(result[0])
return result
else:
raise KeyError(key)
def __iter__(self):
sql = "select path from pictures"
result = self.con.execute(sql)
return (row[0] for row in result)
def __len__(self):
sql = "select count(*) from pictures"
result = self.con.execute(sql).fetchall()
return result[0][0]
def __setitem__(self, path_str, blocks):
blocks = colors_to_string(blocks)
if op.exists(path_str):
mtime = int(os.stat(path_str).st_mtime)
else:
mtime = 0
if path_str in self:
sql = "update pictures set blocks = ?, mtime = ? where path = ?"
else:
sql = "insert into pictures(blocks,mtime,path) values(?,?,?)"
try:
self.con.execute(sql, [blocks, mtime, path_str])
except sqlite.OperationalError:
logging.warning('Picture cache could not set value for key %r', path_str)
except sqlite.DatabaseError as e:
logging.warning('DatabaseError while setting value for key %r: %s', path_str, str(e))
def _create_con(self, second_try=False):
def create_tables():
logging.debug("Creating picture cache tables.")
self.con.execute("drop table if exists pictures")
self.con.execute("drop index if exists idx_path")
self.con.execute("create table pictures(path TEXT, mtime INTEGER, blocks TEXT)")
self.con.execute("create index idx_path on pictures (path)")
self.con = sqlite.connect(self.dbname, isolation_level=None)
try:
self.con.execute("select path, mtime, blocks from pictures where 1=2")
except sqlite.OperationalError: # new db
create_tables()
except sqlite.DatabaseError as e: # corrupted db
if second_try:
raise # Something really strange is happening
logging.warning('Could not create picture cache because of an error: %s', str(e))
self.con.close()
os.remove(self.dbname)
self._create_con(second_try=True)
def clear(self):
self.close()
if self.dbname != ':memory:':
os.remove(self.dbname)
self._create_con()
def close(self):
if self.con is not None:
self.con.close()
self.con = None
def filter(self, func):
to_delete = [key for key in self if not func(key)]
for key in to_delete:
del self[key]
def get_id(self, path):
sql = "select rowid from pictures where path = ?"
result = self.con.execute(sql, [path]).fetchone()
if result:
return result[0]
else:
raise ValueError(path)
def get_multiple(self, rowids):
sql = "select rowid, blocks from pictures where rowid in (%s)" % ','.join(map(str, rowids))
cur = self.con.execute(sql)
return ((rowid, string_to_colors(blocks)) for rowid, blocks in cur)
def purge_outdated(self):
"""Go through the cache and purge outdated records.
A record is outdated if the picture doesn't exist or if its mtime is greater than the one in
the db.
"""
todelete = []
sql = "select rowid, path, mtime from pictures"
cur = self.con.execute(sql)
for rowid, path_str, mtime in cur:
if mtime and op.exists(path_str):
picture_mtime = os.stat(path_str).st_mtime
if int(picture_mtime) <= mtime:
# not outdated
continue
todelete.append(rowid)
if todelete:
sql = "delete from pictures where rowid in (%s)" % ','.join(map(str, todelete))
self.con.execute(sql)

131
core/pe/cache_shelve.py Normal file
View File

@@ -0,0 +1,131 @@
# Copyright 2016 Virgil Dupras
#
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
import os
import os.path as op
import shelve
import tempfile
from collections import namedtuple
from .cache import string_to_colors, colors_to_string
def wrap_path(path):
return 'path:{}'.format(path)
def unwrap_path(key):
return key[5:]
def wrap_id(path):
return 'id:{}'.format(path)
def unwrap_id(key):
return int(key[3:])
CacheRow = namedtuple('CacheRow', 'id path blocks mtime')
class ShelveCache:
"""A class to cache picture blocks in a shelve backend.
"""
def __init__(self, db=None, readonly=False):
self.istmp = db is None
if self.istmp:
self.dtmp = tempfile.mkdtemp()
self.ftmp = db = op.join(self.dtmp, 'tmpdb')
flag = 'r' if readonly else 'c'
self.shelve = shelve.open(db, flag)
self.maxid = self._compute_maxid()
def __contains__(self, key):
return wrap_path(key) in self.shelve
def __delitem__(self, key):
row = self.shelve[wrap_path(key)]
del self.shelve[wrap_path(key)]
del self.shelve[wrap_id(row.id)]
def __getitem__(self, key):
if isinstance(key, int):
skey = self.shelve[wrap_id(key)]
else:
skey = wrap_path(key)
return string_to_colors(self.shelve[skey].blocks)
def __iter__(self):
return (unwrap_path(k) for k in self.shelve if k.startswith('path:'))
def __len__(self):
return sum(1 for k in self.shelve if k.startswith('path:'))
def __setitem__(self, path_str, blocks):
blocks = colors_to_string(blocks)
if op.exists(path_str):
mtime = int(os.stat(path_str).st_mtime)
else:
mtime = 0
if path_str in self:
rowid = self.shelve[wrap_path(path_str)].id
else:
rowid = self._get_new_id()
row = CacheRow(rowid, path_str, blocks, mtime)
self.shelve[wrap_path(path_str)] = row
self.shelve[wrap_id(rowid)] = wrap_path(path_str)
def _compute_maxid(self):
return max((unwrap_id(k) for k in self.shelve if k.startswith('id:')), default=1)
def _get_new_id(self):
self.maxid += 1
return self.maxid
def clear(self):
self.shelve.clear()
def close(self):
if self.shelve is not None:
self.shelve.close()
if self.istmp:
os.remove(self.ftmp)
os.rmdir(self.dtmp)
self.shelve = None
def filter(self, func):
to_delete = [key for key in self if not func(key)]
for key in to_delete:
del self[key]
def get_id(self, path):
if path in self:
return self.shelve[wrap_path(path)].id
else:
raise ValueError(path)
def get_multiple(self, rowids):
for rowid in rowids:
try:
skey = self.shelve[wrap_id(rowid)]
except KeyError:
continue
yield (rowid, string_to_colors(self.shelve[skey].blocks))
def purge_outdated(self):
"""Go through the cache and purge outdated records.
A record is outdated if the picture doesn't exist or if its mtime is greater than the one in
the db.
"""
todelete = []
for path in self:
row = self.shelve[wrap_path(path)]
if row.mtime and op.exists(path):
picture_mtime = os.stat(path).st_mtime
if int(picture_mtime) <= row.mtime:
# not outdated
continue
todelete.append(path)
for path in todelete:
del self[path]

143
core/pe/cache_sqlite.py Normal file
View File

@@ -0,0 +1,143 @@
# Copyright 2016 Virgil Dupras
#
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.gnu.org/licenses/gpl-3.0.html
import os
import os.path as op
import logging
import sqlite3 as sqlite
from .cache import string_to_colors, colors_to_string
class SqliteCache:
"""A class to cache picture blocks in a sqlite backend.
"""
def __init__(self, db=':memory:', readonly=False):
# readonly is not used in the sqlite version of the cache
self.dbname = db
self.con = None
self._create_con()
def __contains__(self, key):
sql = "select count(*) from pictures where path = ?"
result = self.con.execute(sql, [key]).fetchall()
return result[0][0] > 0
def __delitem__(self, key):
if key not in self:
raise KeyError(key)
sql = "delete from pictures where path = ?"
self.con.execute(sql, [key])
# Optimized
def __getitem__(self, key):
if isinstance(key, int):
sql = "select blocks from pictures where rowid = ?"
else:
sql = "select blocks from pictures where path = ?"
result = self.con.execute(sql, [key]).fetchone()
if result:
result = string_to_colors(result[0])
return result
else:
raise KeyError(key)
def __iter__(self):
sql = "select path from pictures"
result = self.con.execute(sql)
return (row[0] for row in result)
def __len__(self):
sql = "select count(*) from pictures"
result = self.con.execute(sql).fetchall()
return result[0][0]
def __setitem__(self, path_str, blocks):
blocks = colors_to_string(blocks)
if op.exists(path_str):
mtime = int(os.stat(path_str).st_mtime)
else:
mtime = 0
if path_str in self:
sql = "update pictures set blocks = ?, mtime = ? where path = ?"
else:
sql = "insert into pictures(blocks,mtime,path) values(?,?,?)"
try:
self.con.execute(sql, [blocks, mtime, path_str])
except sqlite.OperationalError:
logging.warning('Picture cache could not set value for key %r', path_str)
except sqlite.DatabaseError as e:
logging.warning('DatabaseError while setting value for key %r: %s', path_str, str(e))
def _create_con(self, second_try=False):
def create_tables():
logging.debug("Creating picture cache tables.")
self.con.execute("drop table if exists pictures")
self.con.execute("drop index if exists idx_path")
self.con.execute("create table pictures(path TEXT, mtime INTEGER, blocks TEXT)")
self.con.execute("create index idx_path on pictures (path)")
self.con = sqlite.connect(self.dbname, isolation_level=None)
try:
self.con.execute("select path, mtime, blocks from pictures where 1=2")
except sqlite.OperationalError: # new db
create_tables()
except sqlite.DatabaseError as e: # corrupted db
if second_try:
raise # Something really strange is happening
logging.warning('Could not create picture cache because of an error: %s', str(e))
self.con.close()
os.remove(self.dbname)
self._create_con(second_try=True)
def clear(self):
self.close()
if self.dbname != ':memory:':
os.remove(self.dbname)
self._create_con()
def close(self):
if self.con is not None:
self.con.close()
self.con = None
def filter(self, func):
to_delete = [key for key in self if not func(key)]
for key in to_delete:
del self[key]
def get_id(self, path):
sql = "select rowid from pictures where path = ?"
result = self.con.execute(sql, [path]).fetchone()
if result:
return result[0]
else:
raise ValueError(path)
def get_multiple(self, rowids):
sql = "select rowid, blocks from pictures where rowid in (%s)" % ','.join(map(str, rowids))
cur = self.con.execute(sql)
return ((rowid, string_to_colors(blocks)) for rowid, blocks in cur)
def purge_outdated(self):
"""Go through the cache and purge outdated records.
A record is outdated if the picture doesn't exist or if its mtime is greater than the one in
the db.
"""
todelete = []
sql = "select rowid, path, mtime from pictures"
cur = self.con.execute(sql)
for rowid, path_str, mtime in cur:
if mtime and op.exists(path_str):
picture_mtime = os.stat(path_str).st_mtime
if int(picture_mtime) <= mtime:
# not outdated
continue
todelete.append(rowid)
if todelete:
sql = "delete from pictures where rowid in (%s)" % ','.join(map(str, todelete))
self.con.execute(sql)

View File

@@ -16,7 +16,6 @@ from hscommon.jobprogress import job
from core.engine import Match
from .block import avgdiff, DifferentBlockCountError, NoBlocksError
from .cache import Cache
# OPTIMIZATION NOTES:
# The bottleneck of the matching phase is CPU, which is why we use multiprocessing. However, another
@@ -49,12 +48,20 @@ except Exception:
logging.warning("Had problems to determine cpu count on launch.")
RESULTS_QUEUE_LIMIT = 8
def get_cache(cache_path, readonly=False):
if cache_path.endswith('shelve'):
from .cache_shelve import ShelveCache
return ShelveCache(cache_path, readonly=readonly)
else:
from .cache_sqlite import SqliteCache
return SqliteCache(cache_path, readonly=readonly)
def prepare_pictures(pictures, cache_path, with_dimensions, j=job.nulljob):
# The MemoryError handlers in there use logging without first caring about whether or not
# there is enough memory left to carry on the operation because it is assumed that the
# MemoryError happens when trying to read an image file, which is freed from memory by the
# time that MemoryError is raised.
cache = Cache(cache_path)
cache = get_cache(cache_path)
cache.purge_outdated()
prepared = [] # only pictures for which there was no error getting blocks
try:
@@ -109,7 +116,7 @@ def async_compare(ref_ids, other_ids, dbname, threshold, picinfo):
# The list of ids in ref_ids have to be compared to the list of ids in other_ids. other_ids
# can be None. In this case, ref_ids has to be compared with itself
# picinfo is a dictionary {pic_id: (dimensions, is_ref)}
cache = Cache(dbname)
cache = get_cache(dbname, readonly=True)
limit = 100 - threshold
ref_pairs = list(cache.get_multiple(ref_ids))
if other_ids is not None:
@@ -135,7 +142,7 @@ def async_compare(ref_ids, other_ids, dbname, threshold, picinfo):
cache.close()
return results
def getmatches(pictures, cache_path, threshold=75, match_scaled=False, j=job.nulljob):
def getmatches(pictures, cache_path, threshold, match_scaled=False, j=job.nulljob):
def get_picinfo(p):
if match_scaled:
return (None, p.is_ref)
@@ -159,7 +166,7 @@ def getmatches(pictures, cache_path, threshold=75, match_scaled=False, j=job.nul
j = j.start_subjob([3, 7])
pictures = prepare_pictures(pictures, cache_path, with_dimensions=not match_scaled, j=j)
j = j.start_subjob([9, 1], tr("Preparing for matching"))
cache = Cache(cache_path)
cache = get_cache(cache_path)
id2picture = {}
for picture in pictures:
try:

View File

@@ -13,7 +13,6 @@ from . import matchblock, matchexif
class ScannerPE(Scanner):
cache_path = None
match_scaled = False
threshold = 75
@staticmethod
def get_scan_options():
@@ -24,7 +23,13 @@ class ScannerPE(Scanner):
def _getmatches(self, files, j):
if self.scan_type == ScanType.FuzzyBlock:
return matchblock.getmatches(files, self.cache_path, self.threshold, self.match_scaled, j)
return matchblock.getmatches(
files,
cache_path=self.cache_path,
threshold=self.min_match_percentage,
match_scaled=self.match_scaled,
j=j
)
elif self.scan_type == ScanType.ExifTimestamp:
return matchexif.getmatches(files, self.match_scaled, j)
else:

View File

@@ -1,4 +1,4 @@
# Copyright 2016 Hardcoded Software (http://www.hardcoded.net)
# Copyright 2016 Virgil Dupras
#
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
@@ -10,7 +10,9 @@ from pytest import raises, skip
from hscommon.testutil import eq_
try:
from ..pe.cache import Cache, colors_to_string, string_to_colors
from ..pe.cache import colors_to_string, string_to_colors
from ..pe.cache_sqlite import SqliteCache
from ..pe.cache_shelve import ShelveCache
except ImportError:
skip("Can't import the cache module, probably hasn't been compiled.")
@@ -44,21 +46,24 @@ class TestCasestring_to_colors:
eq_([], string_to_colors('102'))
class TestCaseCache:
class BaseTestCaseCache:
def get_cache(self, dbname=None):
raise NotImplementedError()
def test_empty(self):
c = Cache()
c = self.get_cache()
eq_(0, len(c))
with raises(KeyError):
c['foo']
def test_set_then_retrieve_blocks(self):
c = Cache()
c = self.get_cache()
b = [(0, 0, 0), (1, 2, 3)]
c['foo'] = b
eq_(b, c['foo'])
def test_delitem(self):
c = Cache()
c = self.get_cache()
c['foo'] = ''
del c['foo']
assert 'foo' not in c
@@ -67,14 +72,14 @@ class TestCaseCache:
def test_persistance(self, tmpdir):
DBNAME = tmpdir.join('hstest.db')
c = Cache(str(DBNAME))
c = self.get_cache(str(DBNAME))
c['foo'] = [(1, 2, 3)]
del c
c = Cache(str(DBNAME))
c = self.get_cache(str(DBNAME))
eq_([(1, 2, 3)], c['foo'])
def test_filter(self):
c = Cache()
c = self.get_cache()
c['foo'] = ''
c['bar'] = ''
c['baz'] = ''
@@ -85,7 +90,7 @@ class TestCaseCache:
assert 'bar' not in c
def test_clear(self):
c = Cache()
c = self.get_cache()
c['foo'] = ''
c['bar'] = ''
c['baz'] = ''
@@ -95,6 +100,22 @@ class TestCaseCache:
assert 'baz' not in c
assert 'bar' not in c
def test_by_id(self):
# it's possible to use the cache by referring to the files by their row_id
c = self.get_cache()
b = [(0, 0, 0), (1, 2, 3)]
c['foo'] = b
foo_id = c.get_id('foo')
eq_(c[foo_id], b)
class TestCaseSqliteCache(BaseTestCaseCache):
def get_cache(self, dbname=None):
if dbname:
return SqliteCache(dbname)
else:
return SqliteCache()
def test_corrupted_db(self, tmpdir, monkeypatch):
# If we don't do this monkeypatching, we get a weird exception about trying to flush a
# closed file. I've tried setting logging level and stuff, but nothing worked. So, there we
@@ -104,37 +125,37 @@ class TestCaseCache:
fp = open(dbname, 'w')
fp.write('invalid sqlite content')
fp.close()
c = Cache(dbname) # should not raise a DatabaseError
c = self.get_cache(dbname) # should not raise a DatabaseError
c['foo'] = [(1, 2, 3)]
del c
c = Cache(dbname)
c = self.get_cache(dbname)
eq_(c['foo'], [(1, 2, 3)])
def test_by_id(self):
# it's possible to use the cache by referring to the files by their row_id
c = Cache()
b = [(0, 0, 0), (1, 2, 3)]
c['foo'] = b
foo_id = c.get_id('foo')
eq_(c[foo_id], b)
class TestCaseShelveCache(BaseTestCaseCache):
def get_cache(self, dbname=None):
return ShelveCache(dbname)
class TestCaseCacheSQLEscape:
def get_cache(self):
return SqliteCache()
def test_contains(self):
c = Cache()
c = self.get_cache()
assert "foo'bar" not in c
def test_getitem(self):
c = Cache()
c = self.get_cache()
with raises(KeyError):
c["foo'bar"]
def test_setitem(self):
c = Cache()
c = self.get_cache()
c["foo'bar"] = []
def test_delitem(self):
c = Cache()
c = self.get_cache()
c["foo'bar"] = []
try:
del c["foo'bar"]

View File

@@ -1,3 +1,24 @@
=== 4.0.3 (2016-11-24)
* Add new picture cache backend: shelve
* Make shelve picture cache backend the active one on MacOS to fix #394 more
elegantly. [cocoa]
* Remove Sparkle (auto-updates) due to technical limitations. [cocoa]
=== 4.0.2 (2016-10-09)
* Fix systematic crash in Picture Mode under MacOS Sierra. (#394)
* No change for Linux. Just keeping version in sync.
=== 4.0.1 (2016-08-24)
* Add Greek localization, by Gabriel Koutilellis. (#382)
* Fix localization base path. [qt] (#378)
* Fix broken load results dialog. [qt]
* Fix crash on load results. [cocoa] (#380)
* Save preferences more predictably. [qt] (#379)
* Fix picture mode's fuzzy block scanner threshold. (#387)
=== 4.0.0 (2016-07-01)
* Merge Standard, Music and Picture editions in the same application!

View File

@@ -1,43 +0,0 @@
Credits
=======
Unten befindet sich die Liste aller Menschen, die direkt oder indirekt zu dupeGuru beigetragen haben.
| **Virgil Dupras, Developer** (`Website <http://www.hardcoded.net>`__)
| **Jérôme Cantin, Icon designer**
| Icons in dupeGuru are from him
| **Gregor Tätzner, deutsche Übersetzung**
| **Frank Weber, deutsche Übersetzung**
| **Eric Dee, chinesische Übersetzung**
| **Aleš Nehyba, Czech localization**
| **Paolo Rossi, Italian localization**
| **Igor Pavlov, Russian localization**
| **Kyrill Detinov, Russian localization**
| **Yuri Petrashko, Ukrainian localization**
| **Nickolas Pohilets, Ukrainian localization**
| **Victor Figueiredo, Brazilian localization**
| **Phan Anh, Vietnamese localization**
| **Python, Programming language** (`Website <http://www.python.org>`__)
| The bestest of the bests
| **PyQt, Python-to-Qt bridge** (`Website <http://www.riverbankcomputing.co.uk>`__)
| Used for the Windows version
| **Sparkle, Auto-update library** (`Website <http://andymatuschak.org/pages/sparkle>`__)
| Used for the Mac OS X version
| **You, dupeGuru user**
| You rock.

View File

@@ -37,4 +37,3 @@ Inhalte:
reprioritize
faq
changelog
credits

View File

@@ -1,33 +0,0 @@
Credits
=======
Below is the list of people who contributed, directly or indirectly to dupeGuru.
| **Virgil Dupras, Developer** (`Website <https://www.hardcoded.net>`__)
| **Jérôme Cantin, Main icon**
| **Gregor Tätzner, German localization**
| **Frank Weber, German localization**
| **Eric Dee, Chinese localization**
| **Aleš Nehyba, Czech localization**
| **Paolo Rossi, Italian localization**
| **Hrant Ohanyan, Armenian localization**
| **Igor Pavlov, Russian localization**
| **Kyrill Detinov, Russian localization**
| **Yuri Petrashko, Ukrainian localization**
| **Nickolas Pohilets, Ukrainian localization**
| **Victor Figueiredo, Brazilian localization**
| **Phan Anh, Vietnamese localization**

View File

@@ -35,7 +35,6 @@ Contents:
faq
developer/index
changelog
credits
Indices and tables
==================

View File

@@ -1,44 +0,0 @@
Crédits
=======
Voici la liste des contributeurs de dupeGuru. Merci!
| **Virgil Dupras, Dévelopeur** (`Website <http://www.hardcoded.net>`__)
| **Jérôme Cantin, Designer des icônes**
| **Gregor Tätzner, localisation allemande**
| **Frank Weber, localisation allemande**
| **Eric Dee, localisation choinoise**
| **Aleš Nehyba, localisation tchèque**
| **Paolo Rossi, localisation italienne**
| **Hrant Ohanyan, localisation arménienne**
| **Igor Pavlov, localisation russe**
| **Kyrill Detinov, localisation russe**
| **Yuri Petrashko, localisation ukrainienne**
| **Nickolas Pohilets, localisation ukrainienne**
| **Victor Figueiredo, localisation brésilienne**
| **Phan Anh, localisation vietnamienne**
| **Python, Langage de programmation** (`Website <http://www.python.org>`__)
| Le meilleur des meilleurs
| **PyQt, Pont Python/Qt** (`Website <http://www.riverbankcomputing.co.uk>`__)
| Pour les versions Windows et Linux
| **Sparkle, Librairie de mise-à-jour** (`Website <http://andymatuschak.org/pages/sparkle>`__)
| Pour la version Mac OS X
| **Vous, Utilisateur dupeGuru**
| Merci!

View File

@@ -37,4 +37,3 @@ Contents:
reprioritize
faq
changelog
credits

View File

@@ -1,45 +0,0 @@
Մասնակիցներ
===========
Ահա այն մարդկանց ցանկը, ովքեր ուղղակիորեն և անուղղակիորեն մասնակցել են dupeGuru-ի զարգացմանը:
| **Virgil Dupras, Զարգացնող** (`Վեբ կայքը <http://www.hardcoded.net>`__)
| **Jérôme Cantin, Պատկերակների հեղինակ**
| dupeGuru-ի պատկերակների հեղինակը
| **Gregor Tätzner, Գերմաներեն թարգմանիչը**
| **Frank Weber, Գերմաներեն թարգմանիչը**
| **Eric Dee, Չինարեն թարգմանիչը**
| **Aleš Nehyba, Չեխերեն թարգմանիչը**
| **Paolo Rossi, Իտալերեն թարգմանիչը**
| **Hrant Ohanyan, Հայերեն թարգմանիչը**
| **Igor Pavlov, Russian localization**
| **Kyrill Detinov, Russian localization**
| **Yuri Petrashko, Ukrainian localization**
| **Nickolas Pohilets, Ukrainian localization**
| **Victor Figueiredo, Brazilian localization**
| **Phan Anh, Vietnamese localization**
| **Python, Ծրագրավորման լեզուն** (`Վեբ կայքը <http://www.python.org>`__)
| Լավագույներից լավագույնը
| **PyQt, Python-ից Qt կամուրջ** (`Վեբ կայքը <http://www.riverbankcomputing.co.uk>`__)
| Օգտագործվում է Windows-ի տարբերակի
| **Sparkle, Ինքնաթարմացվող շտեմարան** (`Վեբ կայքը <http://andymatuschak.org/pages/sparkle>`__)
| Օգտագործվում է Mac OS X տարբերակի համար
| **Դուք, dupeGuru-ի օգտվողը**
| Ողջույն!

0
help/hy/faq.rst Executable file → Normal file
View File

0
help/hy/folders.rst Executable file → Normal file
View File

1
help/hy/index.rst Executable file → Normal file
View File

@@ -37,4 +37,3 @@
reprioritize
faq
changelog
credits

0
help/hy/preferences.rst Executable file → Normal file
View File

0
help/hy/quick_start.rst Executable file → Normal file
View File

0
help/hy/reprioritize.rst Executable file → Normal file
View File

0
help/hy/results.rst Executable file → Normal file
View File

View File

@@ -1,45 +0,0 @@
Благодарность
=============
Ниже приводится список людей, которые способствовали, прямо или косвенно dupeGuru.
| **Virgil Dupras, Разработчик** (`Веб сайт <http://www.hardcoded.net>`__)
| **Jérôme Cantin, Дизайнера Иконк**
| Иконы в dupeGuru от него
| **Gregor Tätzner, Немецкая локализация**
| **Frank Weber, Немецкая локализация**
| **Eric Dee, Китайская локализация**
| **Aleš Nehyba, Чешский локализации**
| **Paolo Rossi, Итальянская локализации**
| **Hrant Ohanyan, Armenian localization**
| **Igor Pavlov, Russian localization**
| **Kyrill Detinov, Russian localization**
| **Yuri Petrashko, Ukrainian localization**
| **Nickolas Pohilets, Ukrainian localization**
| **Victor Figueiredo, Brazilian localization**
| **Phan Anh, Vietnamese localization**
| **Python, Язык программирования** (`Веб сайт <http://www.python.org>`__)
| Самая лучшая
| **PyQt, Python-to-Qt bridge** (`Веб сайт <http://www.riverbankcomputing.co.uk>`__)
| Используется для версии для Windows
| **Sparkle, Auto-update library** (`Веб сайт <http://andymatuschak.org/pages/sparkle>`__)
| Используется для Mac OS X версии
| **Ты, ползиватель dupeGuru**
| Ты лучший.

0
help/ru/faq.rst Executable file → Normal file
View File

0
help/ru/folders.rst Executable file → Normal file
View File

1
help/ru/index.rst Executable file → Normal file
View File

@@ -36,4 +36,3 @@
reprioritize
faq
changelog
credits

0
help/ru/preferences.rst Executable file → Normal file
View File

0
help/ru/quick_start.rst Executable file → Normal file
View File

0
help/ru/reprioritize.rst Executable file → Normal file
View File

0
help/ru/results.rst Executable file → Normal file
View File

View File

@@ -1,45 +0,0 @@
Кредити
=======
Нижче наводиться список людей, які сприяли, прямо або побічно dupeGuru.
| **Virgil Dupras, Developer** (`Website <http://www.hardcoded.net>`__)
| **Jérôme Cantin, Іконка дизайнера**
| Ікони в dupeGuru які від нього
| **Gregor Tätzner, Німецька локалізація**
| **Frank Weber, Німецька локалізація**
| **Eric Dee, Китайська локалізація**
| **Aleš Nehyba, Чеський локалізації**
| **Paolo Rossi, Італійська локалізації**
| **Hrant Ohanyan, Armenian localization**
| **Igor Pavlov, Russian localization**
| **Kyrill Detinov, Russian localization**
| **Yuri Petrashko, Ukrainian localization**
| **Nickolas Pohilets, Ukrainian localization**
| **Victor Figueiredo, Brazilian localization**
| **Phan Anh, Vietnamese localization**
| **Python, Мова програмування** (`Веб-сайт <http://www.python.org>`__)
| Кращі рекорди
| **PyQt, Python-to-Qt bridge** (`Веб-сайт <http://www.riverbankcomputing.co.uk>`__)
| Використовується для версії для Windows
| **Sparkle, Auto-update library** (`Веб-сайт <http://andymatuschak.org/pages/sparkle>`__)
| Використовується для Mac OS X версії
| **Ви, dupeGuru користувача**
| Ви рока.

0
help/uk/faq.rst Executable file → Normal file
View File

0
help/uk/folders.rst Executable file → Normal file
View File

1
help/uk/index.rst Executable file → Normal file
View File

@@ -37,4 +37,3 @@ Contents:
reprioritize
faq
changelog
credits

0
help/uk/preferences.rst Executable file → Normal file
View File

0
help/uk/quick_start.rst Executable file → Normal file
View File

0
help/uk/reprioritize.rst Executable file → Normal file
View File

0
help/uk/results.rst Executable file → Normal file
View File

View File

@@ -13,105 +13,105 @@ msgstr ""
msgid "Error Message"
msgstr ""
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
msgid "Kind"
#: core/me/prioritize.py:18
msgid "Duration"
msgstr ""
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr ""
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr ""
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr ""
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr ""
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
msgid "Filename"
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr ""
#: core/me/result_table.py:21
msgid "Time"
msgstr ""
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr ""
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr ""
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr ""
#: core/me/result_table.py:26
msgid "Title"
msgstr ""
#: core/me/result_table.py:27
msgid "Artist"
msgstr ""
#: core/me/result_table.py:28
msgid "Album"
msgstr ""
#: core/me/result_table.py:29
msgid "Genre"
msgstr ""
#: core/me/result_table.py:30
msgid "Year"
msgstr ""
#: core/me/result_table.py:31
msgid "Track Number"
msgstr ""
#: core/me/result_table.py:32
msgid "Comment"
msgstr ""
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr ""
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr ""
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr ""
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr ""
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr ""
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr ""
#: core/prioritize.py:147
msgid "Size"
msgstr ""
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
msgid "Modification"
msgstr ""
#: core_me/prioritize.py:16
msgid "Duration"
msgstr ""
#: core_me/prioritize.py:22 core_me/result_table.py:22
msgid "Bitrate"
msgstr ""
#: core_me/prioritize.py:28
msgid "Samplerate"
msgstr ""
#: core_me/result_table.py:20
msgid "Size (MB)"
msgstr ""
#: core_me/result_table.py:21
msgid "Time"
msgstr ""
#: core_me/result_table.py:23
msgid "Sample Rate"
msgstr ""
#: core_me/result_table.py:26
msgid "Title"
msgstr ""
#: core_me/result_table.py:27
msgid "Artist"
msgstr ""
#: core_me/result_table.py:28
msgid "Album"
msgstr ""
#: core_me/result_table.py:29
msgid "Genre"
msgstr ""
#: core_me/result_table.py:30
msgid "Year"
msgstr ""
#: core_me/result_table.py:31
msgid "Track Number"
msgstr ""
#: core_me/result_table.py:32
msgid "Comment"
msgstr ""
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
msgid "Match %"
msgstr ""
#: core_me/result_table.py:34 core_se/result_table.py:24
msgid "Words Used"
msgstr ""
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
msgid "Dupe Count"
msgstr ""
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
msgid "Dimensions"
msgstr ""
#: core_pe/result_table.py:20 core_se/result_table.py:20
msgid "Size (KB)"
msgstr ""
#: core_pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr ""

View File

@@ -4,130 +4,126 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr ""
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr ""
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr ""
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr ""
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr ""
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr ""
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr ""
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr ""
#: core/app.py:290
#: core/app.py:279
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:297
#: core/app.py:289
msgid "No duplicates found."
msgstr ""
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr ""
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr ""
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr ""
#: core/app.py:349
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr ""
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr ""
#: core/app.py:360
#: core/app.py:379
msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?"
msgstr ""
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr ""
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr ""
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr ""
#: core/app.py:489
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr ""
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
msgid "Collecting files to scan"
msgstr ""
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr ""
#: core/app.py:768
#: core/app.py:762
msgid "Collecting files to scan"
msgstr ""
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr ""
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr ""
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr ""
#: core/engine.py:258 core/scanner.py:79
msgid "Read size of %d/%d files"
msgstr ""
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr ""
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
@@ -136,6 +132,50 @@ msgstr ""
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr ""
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr ""
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr ""
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr ""
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/prioritize.py:68
msgid "None"
msgstr ""
@@ -172,47 +212,27 @@ msgstr ""
msgid "Oldest"
msgstr ""
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr ""
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr ""
#: core/scanner.py:99
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr ""
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr ""
#: core/scanner.py:130
msgid "Removing false matches"
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr ""
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr ""
#: core_pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr ""
#: core_pe/matchblock.py:153
msgid "Performed %d/%d chunk matches"
msgstr ""
#: core_pe/matchblock.py:158
msgid "Preparing for matching"
msgstr ""
#: core_pe/matchblock.py:193
msgid "Verified %d/%d matches"
msgstr ""
#: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""

View File

@@ -19,18 +19,18 @@ msgstr "Cesta k souboru"
msgid "Error Message"
msgstr "Chybové hlášení"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Typ"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Složka"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Název souboru"
@@ -38,85 +38,85 @@ msgstr "Název souboru"
msgid "Size"
msgstr "Velikost"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Změna"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr ""
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Bitrate"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr ""
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Velikost (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Čas"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Vzorkovací frekvence"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Titul"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Umělec"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Album"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Žánr"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Rok"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Číslo stopy"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Komentář"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Shoda %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Slov"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Počet kopií"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Rozměry"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Velikost (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr ""

View File

@@ -10,45 +10,41 @@ msgstr ""
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr ""
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr ""
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Vyhledávám duplicity"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Nahrávám"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Přesouvám"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Kopíruji"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Vyhazuji do koše"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr ""
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -56,31 +52,31 @@ msgstr ""
"Předchozí akce stále nebyla ukončena. Novou zatím nemůžete spustit. Počkejte"
" pár sekund a zkuste to znovu."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Nebyli nalezeny žádné duplicity."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr ""
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr ""
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr ""
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr ""
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr ""
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -88,63 +84,59 @@ msgstr ""
"Všech %d vybraných shod bude v následujících hledáních ignorováno. "
"Pokračovat?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr ""
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr ""
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr ""
#: core/app.py:489
#: core/app.py:518
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:641 core/app.py:654
#: core/app.py:672 core/app.py:685
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:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Shromažďuji prohlížené soubory"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d vyřazeno)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "Nalezeno 0 shod"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "Nalezeno %d shod"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Read size of %d/%d files"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "Grouped %d/%d matches"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
@@ -189,46 +181,89 @@ msgstr "Nejnovější"
msgid "Oldest"
msgstr "Nejstarší"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicit označeno."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr " filtr: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Načtena metadata %d/%d souborů"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Odstraňuji falešné shody"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "Zpracováno %d/%d shod se seznamem výjimek"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Přiřazuji prioritu skupině"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Analyzováno %d/%d snímků"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Provedeno %d/%d porovnání bloků"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Připravuji porovnávání"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Ověřeno %d/%d shod"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr ""
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Grouped %d/%d matches"
#~ msgid "Removing false matches"
#~ msgstr "Odstraňuji falešné shody"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Zpracováno %d/%d shod se seznamem výjimek"
#~ msgid "Doing group prioritization"
#~ msgstr "Přiřazuji prioritu skupině"

File diff suppressed because it is too large Load Diff

View File

@@ -20,18 +20,18 @@ msgstr "Dateipfad"
msgid "Error Message"
msgstr "Fehlermeldung"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Typ"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Ordner"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Dateiname"
@@ -39,85 +39,85 @@ msgstr "Dateiname"
msgid "Size"
msgstr "Größe"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Geändert"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Dauer"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Bitrate"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Abtastrate"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Größe (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Zeit"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Abtastrate"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Titel"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Künstler"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Album"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Genre"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Jahr"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Titel Nummer"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Kommentar"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Übereinstimmung %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "genutzte Wörter"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Anzahl der Duplikate"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Auflösung"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Größe (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "EXIF Zeitstempel"

View File

@@ -12,15 +12,15 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "Keine markierten Duplikate, daher wurde nichts getan."
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Keine ausgewählten Duplikate, daher wurde nichts getan."
#: core/app.py:41
#: 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?"
@@ -28,31 +28,27 @@ msgstr ""
"Sie sind dabei, sehr viele Dateien gleichzeitig zu öffnen. Das kann zu "
"ziemlichem Durcheinander führen! Trotzdem fortfahren?"
#: core/app.py:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Suche nach Duplikaten"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Lade"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Verschiebe"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Kopiere"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Verschiebe in den Papierkorb"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Verschiebe Dateien in den Papierkorb"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -60,32 +56,32 @@ msgstr ""
"Eine vorherige Aktion ist noch in der Bearbeitung. Sie können noch keine "
"Neue starten. Warten Sie einige Sekunden und versuchen es erneut."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Keine Duplikate gefunden."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Alle markierten Dateien wurden erfolgreich kopiert."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Alle markierten Dateien wurden erfolgreich verschoben."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr ""
"Alle markierten Dateien wurden erfolgreich in den Papierkorb verschoben."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' ist bereits in der Liste."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' existiert nicht."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -93,64 +89,60 @@ msgstr ""
"Alle %d ausgewählten Dateien werden in zukünftigen Scans ignoriert. "
"Fortfahren?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "kopieren"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "verschieben"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Wählen Sie einen Ordner zum {} der ausgewählten Dateien."
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Zielverzeichnis für den CSV Export angeben"
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
"Sie haben noch keinen Befehl erstellt. Bitte dies in den Einstellungen vornehmen.\n"
"Bsp.: \"C:\\Program Files\\Diff\\Diff.exe\" \"%d\" \"%r\""
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} Duplikat-Gruppen wurden durch die Neu-Priorisierung geändert."
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Sammle zu scannende Dateien..."
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Ausgewählte Ordner enthalten keine scannbaren Dateien."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d verworfen)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 Übereinstimmungen gefunden"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d Übereinstimmungen gefunden"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Lese Größe von %d/%d Dateien"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "%d/%d Übereinstimmungen gruppiert"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Verschiebe {} Datei(en) in den Papierkorb."
@@ -195,46 +187,89 @@ msgstr "Neuste"
msgid "Oldest"
msgstr "Älterste"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) Duplikate markiert."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr " Filter: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Lese Metadaten von %d/%d Dateien"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Entferne falsche Übereinstimmungen"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "%d/%d Treffer mit der Ausnahmeliste abgeglichen"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Gruppenpriorisierung"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Analysiere Bild %d/%d"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "%d/%d Chunk-Matches ausgeführt"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Bereite Matching vor"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "%d/%d verifizierte Übereinstimmungen"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Lese EXIF von Bild %d/%d"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Verschiebe Dateien in den Papierkorb"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d/%d Übereinstimmungen gruppiert"
#~ msgid "Removing false matches"
#~ msgstr "Entferne falsche Übereinstimmungen"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "%d/%d Treffer mit der Ausnahmeliste abgeglichen"
#~ msgid "Doing group prioritization"
#~ msgstr "Gruppenpriorisierung"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,121 @@
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: dupeGuru\n"
"PO-Revision-Date: 2016-07-22 11:30+0000\n"
"Last-Translator: 1kakarot\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/gui/ignore_list_table.py:18 core/gui/ignore_list_table.py:19
#: core/gui/problem_table.py:17
msgid "File Path"
msgstr "Διαδρομή αρχείου"
#: core/gui/problem_table.py:18
msgid "Error Message"
msgstr "Μήνυμα σφάλματος"
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Τύπος"
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Φάκελος"
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Όνομα αρχείου"
#: core/prioritize.py:147
msgid "Size"
msgstr "Μέγεθος-Διαστάσεις?"
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Τροποποίηση"
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Διάρκεια"
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Bitrate"
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr ""
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Μέγεθος (MB)"
#: core/me/result_table.py:21
msgid "Time"
msgstr "Χρόνος"
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Ρυθμός δειγματοληψίας"
#: core/me/result_table.py:26
msgid "Title"
msgstr "Τίτλος"
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Καλλιτέχνης"
#: core/me/result_table.py:28
msgid "Album"
msgstr "Αλμπουμ"
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Είδος"
#: core/me/result_table.py:30
msgid "Year"
msgstr "Έτος"
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Αριθμός κομματιού"
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Σχόλιο"
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Ταύτιση %"
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Χρησιμοποιημένες λέξεις"
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Αριθμός διπλοτύπων"
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Διαστάσεις"
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Μέγεθος (KB)"
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "Χρονοσήμανση EXIF"

View File

@@ -0,0 +1,269 @@
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: dupeGuru\n"
"PO-Revision-Date: 2016-07-22 11:30+0000\n"
"Last-Translator: 1kakarot\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "Δεν υπάρχουν μαρκαρισμένα διπλότυπα. Δεν έγινε τίποτα."
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Δεν υπάρχουν επιλεγμένα διπλότυπα. Δεν έγινε τίποτα."
#: 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:65
msgid "Scanning for duplicates"
msgstr "Σάρωση για διπλότυπα"
#: core/app.py:66
msgid "Loading"
msgstr "Φόρτωση"
#: core/app.py:67
msgid "Moving"
msgstr "Μετακίνηση"
#: core/app.py:68
msgid "Copying"
msgstr "Αντιγραφή"
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Αποστολή στα σκουπίδια"
#: core/app.py:279
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:289
msgid "No duplicates found."
msgstr "Δεν βρέθηκαν διπλότυπα."
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Όλα τα επιλεγμένα αρχεία αντιγράφηκαν επιτυχώς."
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Όλα τα επιλεγμένα αρχεία μετακινήθηκαν επιτυχώς."
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Όλα τα επιλεγμένα αρχεία στάλθηκαν με επιτυχία στον κάδο."
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' υπάρχει ήδη στη λίστα."
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' δεν υπάρχει."
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr ""
"Όλα τα επιλεγμένα %d στοιχεία θα αγνοηθούν σε μελλοντικές σαρώσεις.Συνέχεια;"
#: core/app.py:450
msgid "copy"
msgstr "αντιγραφή"
#: core/app.py:450
msgid "move"
msgstr "μετακίνηση"
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Επιλέξτε ένα φάκελο {} για τα μαρκαρισμένα αρχεία"
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Επιλέξτε έναν προορισμό για το εξαγόμενο CSV σας"
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Δεν έχετε ορίσει ειδική εντολή. Ρυθμίστε τη στις προτιμήσεις σας. "
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Πρόκειται να αφαιρέσετε %d αρχεία από τα αποτελέσματα. Συνέχεια;"
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} ομάδες διπλοτύπων άλλαξαν από το επαναπροσδιορισμό."
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Συλλογή αρχείων για σάρωση"
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Οι επιλεγμένοι φάκελοι δεν περιέχουν σαρώσιμα αρχεία."
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d απορρίφθηκαν)"
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 διπλότυπα βρέθηκαν"
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "Βρέθηκαν %d διπλότυπα"
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Ανάγνωση μεγέθους %d/%d αρχείων"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Στέλνετε {} αρχεία στα σκουπίδια."
#: core/gui/ignore_list_dialog.py:24
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr "Θέλετε να αφαιρέσετε όλα τα %d στοιχεία από τη λίστα αγνόησης; "
#: core/prioritize.py:68
msgid "None"
msgstr "Καμμία"
#: core/prioritize.py:96
msgid "Ends with number"
msgstr "Λήγει με αριθμό"
#: core/prioritize.py:97
msgid "Doesn't end with number"
msgstr "Δεν λήγει με αριθμό"
#: core/prioritize.py:98
msgid "Longest"
msgstr "Μεγαλύτερο"
#: core/prioritize.py:99
msgid "Shortest"
msgstr "Μικρότερο"
#: core/prioritize.py:132
msgid "Highest"
msgstr "Υψηλότερη"
#: core/prioritize.py:132
msgid "Lowest"
msgstr "Χαμηλότερη"
#: core/prioritize.py:159
msgid "Newest"
msgstr "Νεώτερο"
#: core/prioritize.py:159
msgid "Oldest"
msgstr "Παλαιότερο"
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) επιλεγμένα διπλότυπα."
#: core/results.py:136
msgid " filter: %s"
msgstr " φίλτρο: %s"
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Ανάγνωση μεταδεδομένων των %d/%d αρχείων"
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Ανάλυση %d/%d εικόνων"
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Εκτέλεση %d/%d μερικής ταυτοποίησης"
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Προετοιμασία για σύγκριση"
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Πιστοποίηση %d/%d ταυτόσημων"
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Ανάγνωση EXIF %d/%d εικόνες"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Αποστολή στον κάδο ανακύκλωσης"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Ομαδοποιημένα %d/%d διπλότυπα"
#~ msgid "Removing false matches"
#~ msgstr "Αφαίρεση ψευδών διπλοτύπων"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Επεξεργάσία %d/%d διπλοτύπων σε σχέση με τη λίστα αγνόησης"
#~ msgid "Doing group prioritization"
#~ msgstr "Εργασία ομαδοποιημένης προτεραιότητας"

827
locale/el/LC_MESSAGES/ui.po Normal file
View File

@@ -0,0 +1,827 @@
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: dupeGuru\n"
"PO-Revision-Date: 2016-07-22 11:30+0000\n"
"Last-Translator: 1kakarot\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Λειτουργία εφαρμογής:"
#: qt/app.py:81
msgid "Quit"
msgstr "Έξοδος"
#: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List"
msgstr "Λίστα αγνόησης"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help"
msgstr "Βοήθεια για το dupeGuru"
#: qt/app.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "About dupeGuru"
msgstr "Σχετικά με το dupeGuru"
#: qt/app.py:87
msgid "Open Debug Log"
msgstr "Άνοιγμα αρχείου αποσφαλμάτωσης"
#: qt/app.py:251
msgid "{} file (*.{})"
msgstr "{} αρχείο (*.{})"
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options"
msgstr "Επιλογές διαγραφής"
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files"
msgstr "Σύνδεση διαγεγραμμένων αρχείων"
#: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file."
msgstr ""
"Μετά την αντιγραφή ενός διπλοτύπου, τοποθετήστε ένα σύνδεσμο που στοχεύει το"
" αρχείοαναφοράς για να αντικαταστήσετε το διαγεγραμμένο αρχείο."
#: qt/deletion_options.py:44
msgid "Hardlink"
msgstr ""
#: qt/deletion_options.py:44
msgid "Symlink"
msgstr ""
#: qt/deletion_options.py:48
msgid " (unsupported)"
msgstr " (δεν υποστηρίζεται)"
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
msgid "Directly delete files"
msgstr "Απευθείας διαγραφή αρχείων"
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Instead of sending files to trash, delete them directly. This option is "
"usually used as a workaround when the normal deletion method doesn't work."
msgstr ""
"Αντί για την αποστολή αρχείων στα σκουπίδια, να διαγραφούν άμεσα. Αυτή η "
"επιλογή είναι Συνήθως μια λύση, όταν η κανονική μέθοδο διαγραφής δεν "
"λειτουργεί."
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Proceed"
msgstr "Προχωρήστε"
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
msgid "Cancel"
msgstr "Ακύρωση"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Attribute"
msgstr "Χαρακτηριστικό"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Selected"
msgstr "Επιλεγμένα"
#: qt/details_table.py:16 qt/directories_model.py:24
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reference"
msgstr "Αναφορά"
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results..."
msgstr "Φόρτωση αποτελεσμάτων..."
#: qt/directories_dialog.py:65 cocoa/en.lproj/Localizable.strings:0
msgid "Results Window"
msgstr "Παράθυρο αποτελεσμάτων"
#: qt/directories_dialog.py:66
msgid "Add Folder..."
msgstr "Προσθήκη φακέλου..."
#: qt/directories_dialog.py:74 qt/result_window.py:100
#: cocoa/en.lproj/Localizable.strings:0
msgid "File"
msgstr "Αρχείο"
#: qt/directories_dialog.py:76 qt/result_window.py:108
msgid "View"
msgstr "Προβολή"
#: qt/directories_dialog.py:78 qt/result_window.py:110
#: cocoa/en.lproj/Localizable.strings:0
msgid "Help"
msgstr "Βοήθεια"
#: qt/directories_dialog.py:80 cocoa/en.lproj/Localizable.strings:0
msgid "Load Recent Results"
msgstr "Φόρτωση πρόσφατων αποτελεσμάτων"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"."
msgstr "Επιλέξτε τους φακέλους για να σαρώσετε και πατήστε το πλήκτρο \"Σάρωση\"."
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results"
msgstr "Φόρτωση αποτελεσμάτων"
#: qt/directories_dialog.py:166 cocoa/en.lproj/Localizable.strings:0
msgid "Scan"
msgstr "Σάρωση"
#: qt/directories_dialog.py:230
msgid "Unsaved results"
msgstr "Μη αποθηκευμένα αποτελέσματα"
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to quit?"
msgstr ""
"Έχετε μη αποθηκευμένα αποτελέσματα, θέλετε πραγματικά να κλείσετε το "
"πρόγραμμα;"
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
msgid "Select a folder to add to the scanning list"
msgstr "Επιλέξτε ένα φάκελο για να προσθέσετε στη λίστα σάρωσης"
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
msgid "Select a results file to load"
msgstr "Επιλέξτε αρχείο αποτελεσμάτων προς φόρτωση"
#: qt/directories_dialog.py:267
msgid "All Files (*.*)"
msgstr "Όλα τα αρχεία (*.*)"
#: qt/directories_dialog.py:267 qt/result_window.py:311
msgid "dupeGuru Results (*.dupeguru)"
msgstr "Αποτελέσματα dupeGuru (*.dupeguru)"
#: qt/directories_dialog.py:278
msgid "Start a new scan"
msgstr "Έναρξη νέας σάρωσης"
#: qt/directories_dialog.py:279 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to continue?"
msgstr "Έχετε μη αποθηκευμένα αποτελέσματα, θέλετε πραγματικά να συνεχίσετε;"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "Name"
msgstr "Όνομα"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "State"
msgstr "Κατάσταση"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Excluded"
msgstr "Εξαιρούμενο"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Normal"
msgstr "Κανονικό"
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected"
msgstr "Αφαίρεση επιλεγμένων"
#: qt/ignore_list_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Clear"
msgstr "Αφαίρεση"
#: qt/ignore_list_dialog.py:47 qt/problem_dialog.py:61
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close"
msgstr "Κλείσιμο"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Είδος σάρωσης"
#: qt/preferences_dialog.py:43
msgid "Filter Hardness:"
msgstr "Σκληρότητα φίλτρου"
#: qt/preferences_dialog.py:69
msgid "More Results"
msgstr "Περισσότερα αποτελέσματα"
#: qt/preferences_dialog.py:74
msgid "Fewer Results"
msgstr "Λιγότερα αποτελέσματα"
#: qt/preferences_dialog.py:81
msgid "Font size:"
msgstr "Μέγεθος γραμματοσειράς:"
#: qt/preferences_dialog.py:85
msgid "Language:"
msgstr "Γλώσσα:"
#: qt/preferences_dialog.py:91 cocoa/en.lproj/Localizable.strings:0
msgid "Copy and Move:"
msgstr "Αντιγραφή και μετακίνηση:"
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
msgid "Right in destination"
msgstr "Απευθείας στον προορισμό"
#: qt/preferences_dialog.py:95 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate relative path"
msgstr "Ανασύνθεση σχετικής διαδρομής"
#: qt/preferences_dialog.py:96 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate absolute path"
msgstr "Ανασύνθεση απόλυτης διαδρομής"
#: qt/preferences_dialog.py:99
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
msgstr ""
"Προσωποποιημένη εντολή (παράμετροι: %d για διπλότυπο, %r για αναφορά):"
#: qt/preferences_dialog.py:174
msgid "dupeGuru has to restart for language changes to take effect."
msgstr ""
"Πρέπει να γίνει επανεκκίνηση του dupeGuru για να ισχύσουν οι αλλαγές "
"γλώσσας."
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize duplicates"
msgstr "Επαναπροσδιορισμός προτεραιότητας διπλοτύπων"
#: qt/prioritize_dialog.py:79 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Add criteria to the right box and click OK to send the dupes that correspond"
" the best to these criteria to their respective group's reference position. "
"Read the help file for more information."
msgstr ""
"Προσθέστε κριτήρια στο πλαίσιο δεξιά και κάντε κλικ στο κουμπί OK για να "
"στείλετε τα διπλότυπα που αντιστοιχούν καλύτερα σε αυτά τα κριτήρια, στην "
"αντίστοιχη θέση αναφοράς των ομάδων τους. Διαβάστε το αρχείο βοήθειας για "
"περισσότερες πληροφορίες."
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
msgid "Problems!"
msgstr "Προβλήματα!"
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"There were problems processing some (or all) of the files. The cause of "
"these problems are described in the table below. Those files were not "
"removed from your results."
msgstr ""
"Υπήρχαν προβλήματα επεξεργασίας για κάποιο (ή όλα) από τα αρχεία. Η αιτία "
"τωνΠροβλημάτων περιγράφεται στον παρακάτω πίνακα. Τα εν λόγω αρχεία δεν "
"Αφαιρέθηκαν από τα αποτελέσματα σας."
#: qt/problem_dialog.py:56
msgid "Reveal Selected"
msgstr "Αποκάλυψη επιλεγμένων"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Λεπτομέρειες"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions"
msgstr "Ενέργειες"
#: qt/result_window.py:58 cocoa/en.lproj/Localizable.strings:0
msgid "Show Dupes Only"
msgstr "Προβολή μόνο διπλοτύπων"
#: qt/result_window.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Show Delta Values"
msgstr "Προβολή τιμών διαφοράς (Delta)"
#: qt/result_window.py:60
msgid "Send Marked to Recycle Bin..."
msgstr "Αποστολή των μαρκαρισμένων στον Κάδο Ανακύκλωσης..."
#: qt/result_window.py:61 cocoa/en.lproj/Localizable.strings:0
msgid "Move Marked to..."
msgstr "Μετακίνηση μαρκαρισμένων σε..."
#: qt/result_window.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Copy Marked to..."
msgstr "Αντιγραφή μαρκαρισμένων σε..."
#: qt/result_window.py:63 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Marked from Results"
msgstr "Αφαίρεση μαρκαρισμένων από τα αποτελέσματα"
#: qt/result_window.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..."
msgstr "Επαναπροσδιορισμός προτεραιότητας αποτελεσμάτων..."
#: qt/result_window.py:67 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results"
msgstr "Αφαίρεση επιλεγμένων από τα αποτελέσματα"
#: qt/result_window.py:71 cocoa/en.lproj/Localizable.strings:0
msgid "Add Selected to Ignore List"
msgstr "Προσθήκη επιλεγμένων στη λίστα αγνόησης"
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Make Selected into Reference"
msgstr "Μετατροπή επιλεγμένων σε αναφορά"
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
msgid "Open Selected with Default Application"
msgstr "Άνοιγμα επιλεγμένου/ων με Προεπιλεγμένη εφαρμογή"
#: qt/result_window.py:80
msgid "Open Containing Folder of Selected"
msgstr "Άνοιγμα φακέλου που περιέχει το/τα επιλεγμένο/α"
#: qt/result_window.py:82 cocoa/en.lproj/Localizable.strings:0
msgid "Rename Selected"
msgstr "Μετονομασία επιλεγμένου/ων"
#: qt/result_window.py:83 cocoa/en.lproj/Localizable.strings:0
msgid "Mark All"
msgstr "Μαρκάρισμα όλων"
#: qt/result_window.py:84 cocoa/en.lproj/Localizable.strings:0
msgid "Mark None"
msgstr "Ξεμαρκάρισμα όλων"
#: qt/result_window.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "Invert Marking"
msgstr "Αντιστροφή μαρκαρίσματος"
#: qt/result_window.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "Mark Selected"
msgstr "Μαρκάρισμα επιλεγμένου/ων"
#: qt/result_window.py:87
msgid "Export To HTML"
msgstr "Εξαγωγή σε HTML"
#: qt/result_window.py:88
msgid "Export To CSV"
msgstr "Εξαγωγή σε CSV"
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
msgid "Save Results..."
msgstr "Αποθήκευση αποτελεσμάτων..."
#: qt/result_window.py:90 cocoa/en.lproj/Localizable.strings:0
msgid "Invoke Custom Command"
msgstr "Εκτέλεση προσαρμοσμένης εντολής"
#: qt/result_window.py:102
msgid "Mark"
msgstr "Μαρκάρισμα"
#: qt/result_window.py:106 cocoa/en.lproj/Localizable.strings:0
msgid "Columns"
msgstr "Στήλες"
#: qt/result_window.py:163
msgid "Reset to Defaults"
msgstr "Επαναφορά προεπιλογών"
#: qt/result_window.py:185
msgid "{} Results"
msgstr "{} Αποτελέσματα"
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
msgid "Dupes Only"
msgstr "Μόνο διπλότυπα"
#: qt/result_window.py:194
msgid "Delta Values"
msgstr "Τιμές διαφοράς (Delta)"
#: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0
msgid "Select a file to save your results to"
msgstr "Επιλέξτε ένα αρχείο για να αποθηκεύσετε τα αποτελέσματα σας"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Ετικέτες προς σάρωση:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Κομμάτι"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Καλλιτέχνης"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Άλμπουμ"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Τίτλος"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Είδος"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Έτος"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Στάθμιση λέξης"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Ταίριασμα παρόμοιων λέξεων"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Να περιλαμβάνουν διαφορετικούς τύπους αρχείων"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Χρήση κανονικών εκφράσεων κατά το φιλτράρισμα"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Κατάργηση κενών φακέλων για διαγραφή ή μετακίνηση"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Αγνόηση διπλοτύπων με hardlinking στο ίδιο αρχείο"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Λειτουργία αποσφαλμάτωσης(απαιτείται επανεκκίνηση)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Ταίριασμα εικόνων διαφορετικών διαστάσεων"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Εκκαθάριση μνήμης cache εικόνων"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Θέλετε πραγματικά να αφαιρέσετε όλη την αποθηκευμένη ανάλυση εικόνων σας;"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Μνήμη cache εικόνων εκκαθαρίστηκε."
#: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than"
msgstr "Αγνόηση αρχείων μικρότερων από"
#: qt/se/preferences_dialog.py:52 cocoa/en.lproj/Localizable.strings:0
msgid "KB"
msgstr "KB"
#: cocoa/en.lproj/Localizable.strings:0
msgid "%@ Results"
msgstr "%@ Αποτελέσματα"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Action"
msgstr "Ενέργεια"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Add New Folder..."
msgstr "Προσθήκη νέου φακέλου..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Advanced"
msgstr "Προχωρημένες"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Automatically check for updates"
msgstr "Αυτόματος έλεγχος για ενημερώσεις"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Basic"
msgstr "Βασική"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Bring All to Front"
msgstr "Μεταφορά όλων στο προσκήνιο"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Check for update..."
msgstr "Έλεγχος για αναβάθμιση..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close Window"
msgstr "Κλείσιμο παραθύρου"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Copy"
msgstr "Αντιγραφή"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Custom command (arguments: %d for dupe, %r for ref):"
msgstr ""
"Προσωποποιημένη εντολή (παράμετροι: %d για διπλότυπο, %r για αναφορά):"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Cut"
msgstr "Αποκοπή"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Delta"
msgstr "Delta"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details of Selected File"
msgstr "Λεπτομέρειες επιλεγμένου αρχείου"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details Panel"
msgstr "Πίνακας λεπτομερειών"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Directories"
msgstr "Φάκελοι"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru"
msgstr ""
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Preferences"
msgstr "Προτιμήσεις dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Results"
msgstr "Αποτελέσματα dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Website"
msgstr "Ιστότοπος dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Edit"
msgstr "Επεξεργασία"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to CSV"
msgstr "Εξαγωγή αποτελεσμάτων σε CSV"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to XHTML"
msgstr "Εξαγωγή αποτελεσμάτων σε XHTML"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Fewer results"
msgstr "Λιγότερα αποτελέσματα"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter"
msgstr "Φίλτρο"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter hardness:"
msgstr "Σκληρότητα φίλτρου:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter Results..."
msgstr "Φίλτρο αποτελεσμάτων..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Folder Selection Window"
msgstr "Παράθυρο επιλογής φακέλου"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Font Size:"
msgstr "Μέγεθος γραμματοσειράς:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide dupeGuru"
msgstr "Απόκρυψη dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide Others"
msgstr "Απόκρυψη υπολοίπων"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore files smaller than:"
msgstr "Αγνόηση αρχείων μικρότερων από:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Load from file..."
msgstr "Φόρτωση από αρχείο..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Minimize"
msgstr "Ελαχιστοποίηση"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Mode"
msgstr "Λειτουργία"
#: cocoa/en.lproj/Localizable.strings:0
msgid "More results"
msgstr "Περισσότερα αποτελέσματα"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ok"
msgstr "Ok"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Επιλογές"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Paste"
msgstr "Επικόλληση"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Preferences..."
msgstr "Προτιμήσεις..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quick Look"
msgstr "Γρήγηορη προβολή"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quit dupeGuru"
msgstr "Κλείσιμο dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset to Default"
msgstr "Επαναφορά προεπιλογής"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset To Defaults"
msgstr "Επαναφορά προεπιλογών"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal"
msgstr "Εμφάνιση"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal Selected in Finder"
msgstr "Εμφάνιση επιλεγμένων στην Εύρεση"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Select All"
msgstr "Επιλογή όλων"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Send Marked to Trash..."
msgstr "Αποστολή μαρκαρισμένων στα Σκουπίδια..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Services"
msgstr "Υπηρεσίες"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Show All"
msgstr "Εμφάνιση όλων"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Start Duplicate Scan"
msgstr "Έναρξη σάρωσης διπλοτύπων"
#: cocoa/en.lproj/Localizable.strings:0
msgid "The name '%@' already exists."
msgstr "Το όνομα'%@' υπάρχει ήδη."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Window"
msgstr "Παράθυρο"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Zoom"
msgstr "Ζουμ"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr ""
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr ""
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr ""
#~ msgid "Removing dead tracks from your iTunes Library"
#~ msgstr "Αφαίρεση νεκρών κομματιών από την βιβλιοθήκη σας iTunes"
#~ msgid "Scanning the iTunes Library"
#~ msgstr "Σάρωση της βιβλιοθήκης σας iTunes"
#~ msgid "Sending dupes to the Trash"
#~ msgstr "Αποστολή διπλοτύπων στα Σκουπίδια"
#~ msgid "Talking to iTunes. Don't touch it!"
#~ msgstr "Μιλώντας στο iTunes. Μην το αγγίζετε!"
#~ msgid ""
#~ "Your iTunes Library contains %d dead tracks ready to be removed. Continue?"
#~ msgstr ""
#~ "Η βιβλιοθήκη σας iTunes περιέχει %d νεκρά κομμάτια έτοιμα να αφαιρεθούν. "
#~ "Συνέχεια;"
#~ msgid "You have no dead tracks in your iTunes Library"
#~ msgstr "Η βιβλιοθήκη σας iTunes δεν περιέχει νεκρά κομμάτια"
#~ msgid "The iTunes application couldn't be found."
#~ msgstr "Η εφαρμογή iTunes δεν βρέθηκε."
#~ msgid "Talking to iPhoto. Don't touch it!"
#~ msgstr "Μιλώντας στο iPhoto. Μην το αγγίζετε!"
#~ msgid "Talking to Aperture. Don't touch it!"
#~ msgstr "Μιλώντας στο Aperture. Μην το αγγίζετε!"
#~ msgid "Deleted Aperture photos were sent to a project called \"dupeGuru Trash\"."
#~ msgstr ""
#~ "Οι διαγεγραμμένες φωτογραφίες από το Aperture στάλθηκαν σε ένα έργο που "
#~ "ονομάζεται \"dupeGuru Trash\"."
#~ msgid "The iPhoto application couldn't be found."
#~ msgstr "Η εφαρμογή iPhoto δεν βρέθηκε."
#~ msgid "Preferences"
#~ msgstr "Προτιμήσεις"
#~ msgid "Check for Update"
#~ msgstr "Έλεγχος για αναβάθμιση"
#~ msgid "Filename"
#~ msgstr "Όνομα αρχείου"
#~ msgid "Filename - Fields"
#~ msgstr "Όνομα αρχείου - Πεδία"
#~ msgid "Filename - Fields (No Order)"
#~ msgstr "Όνομα αρχείου - Πεδία (Αταξινόμητα)"
#~ msgid "Tags"
#~ msgstr "Ετικέτες"
#~ msgid "Contents"
#~ msgstr "Περιεχόμενα"
#~ msgid "Audio Contents"
#~ msgstr "Μουσικά περιεχόμενα"
#~ msgid "EXIF Timestamp"
#~ msgstr "Χρονοσήμανση EXIF"
#~ msgid "Folders"
#~ msgstr "Φάκελοι"
#~ msgid "Προσθήκη βιβλιοθήκης Aperture"
#~ msgstr ""
#~ msgid "Add iPhoto Library"
#~ msgstr "Προσθήκη βιβλιοθήκης iPhoto"
#~ msgid "Add iTunes Library"
#~ msgstr "Προσθήκη βιβλιοθήκης iTunes"
#~ msgid "Audio Content"
#~ msgstr "Μουσικό περιεχόμενο"
#~ msgid "Content"
#~ msgstr "Περιεχόμενο"
#~ msgid "dupeGuru ME Preferences"
#~ msgstr "Προτιμήσεις dupeGuru ME"
#~ msgid "dupeGuru PE Preferences"
#~ msgstr "Προτιμήσεις dupeGuru PE"
#~ msgid "Remove Dead Tracks in iTunes"
#~ msgstr "Αφαίρεση νεκρών κομματιών από το iTunes"

View File

@@ -20,18 +20,18 @@ msgstr "Ruta de Fichero"
msgid "Error Message"
msgstr "Mensaje de error"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Clase"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Carpeta"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nombre de fichero"
@@ -39,85 +39,85 @@ msgstr "Nombre de fichero"
msgid "Size"
msgstr "Tamaño"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modificación"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Duración"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Tasa de bits"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Tasa de Muestreo"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Tamaño (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Hora"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Tasa de Muestreo"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Título"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Artista"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Álbum"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Género"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Año"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Pista Número"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Comentario"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Coincidencia %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Palabras Empleadas"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Duplicado Número"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Dimensiones"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Tamaño (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "Marca horaria EXIF"

View File

@@ -11,15 +11,15 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "No hay duplicados marcados. No se ha hecho nada."
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "No hay duplicados seleccionados. No se ha hecho nada."
#: core/app.py:41
#: 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,31 +27,27 @@ msgstr ""
"Está a punto de abrir muchas imágenes. Dependiendo de los ficheros que se "
"abran, abrirlos puede colgar la máquina. ¿Continuar?"
#: core/app.py:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Buscando duplicados"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Cargando"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Moviendo"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Copiando"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Enviando a la Papelera"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Enviando ficheros a la papelera de reciclaje"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -59,32 +55,32 @@ msgstr ""
"Una acción previa sigue ejecutándose. No puede abrir una nueva todavía. "
"Espere unos segundos y vuelva a intentarlo."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "No se han encontrado duplicados."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr ""
"Todos los ficheros seleccionados han sido copiados satisfactoriamente."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Todos los ficheros seleccionados se han movidos satisfactoriamente."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Todo los ficheros marcados se han enviado a la papelera exitosamente."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' ya está en la lista."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' no existe."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -92,62 +88,58 @@ msgstr ""
"Todas las %d coincidencias seleccionadas van a ser ignoradas en las "
"subsiguientes exploraciones. ¿Continuar?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "copiar"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "mover"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Seleccionar un directorio al que {} enviar los ficheros seleccionados"
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Seleccionar un destino para el CSV seleccionado"
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "No hay comandos configurados. Establézcalos en sus preferencias."
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Está a punto de eliminar %d ficheros de resultados. ¿Continuar?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} grupos de duplicados han sido cambiados por la re-priorización"
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Recopilando ficheros a explorar"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Las carpetas seleccionadas no contienen ficheros para explorar."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d descartados)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 coincidencias"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d coincidencias encontradas"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Tamaño de lectura de %d/%d ficheros"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "Coincidencias %d/%d agrupadas"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Enviando {} fichero(s) a la Papelera"
@@ -193,46 +185,89 @@ msgstr "El más nuevo"
msgid "Oldest"
msgstr "El más antiguo"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicados marcados."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr "filtro: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Leyendo metadatos de %d/%d ficheros"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Descartando falsas coincidencias"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "Procesadas %d/%d coincidencias de la lista de exclusión"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Ejecutando priorización de grupo"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Analizadas %d/%d imágenes"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Realizado %d/%d trozos coincidentes"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Preparando para coincidencias"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Verificadas %d/%d coincidencias"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Leído EXIF de %d/%d imágenes"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Enviando ficheros a la papelera de reciclaje"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Coincidencias %d/%d agrupadas"
#~ msgid "Removing false matches"
#~ msgstr "Descartando falsas coincidencias"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Procesadas %d/%d coincidencias de la lista de exclusión"
#~ msgid "Doing group prioritization"
#~ msgstr "Ejecutando priorización de grupo"

File diff suppressed because it is too large Load Diff

View File

@@ -21,18 +21,18 @@ msgstr "Chemin du fichier"
msgid "Error Message"
msgstr "Message d'erreur"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Type"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Dossier"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nom de fichier"
@@ -40,85 +40,85 @@ msgstr "Nom de fichier"
msgid "Size"
msgstr "Taille"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modification"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Durée"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Bitrate"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Échantillonnage"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Taille (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Temps"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Sample Rate"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Titre"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Artiste"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Album"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Genre"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Année"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Track"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Commentaire"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Match %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Mots"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "# Doublons"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Dimensions"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Taille (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "Date EXIF"

View File

@@ -12,15 +12,15 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "Aucun doublon marqué. Rien à faire."
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Aucun doublon sélectionné. Rien à faire."
#: core/app.py:41
#: 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?"
@@ -28,31 +28,27 @@ msgstr ""
"Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement "
"encombrer votre système. Continuer?"
#: core/app.py:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Scan de doublons en cours"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Chargement en cours"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Déplacement en cours"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Copie en cours"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Envoi de fichiers à la corbeille"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Envoi de fichiers à la corbeille"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -60,94 +56,90 @@ msgstr ""
"Une action précédente est encore en cours. Attendez quelques secondes avant "
"d'en repartir une nouvelle."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Aucun doublon trouvé."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Tous les fichiers marqués ont été copiés correctement."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Tous les fichiers marqués ont été déplacés correctement."
#: core/app.py:312
#: core/app.py:306
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:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' est déjà dans la liste."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' n'existe pas."
#: core/app.py:360
#: core/app.py:379
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:426
#: core/app.py:450
msgid "copy"
msgstr "copier"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "déplacer"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Sélectionnez un dossier vers lequel {} les fichiers marqués."
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Choisissez une destination pour votre exportation CSV"
#: core/app.py:489
#: core/app.py:518
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:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "%d fichiers seront retirés des résultats. Continuer?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation."
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Collecte des fichiers à scanner"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d hors-groupe)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 paires trouvées"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d paires trouvées"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Lu la taille de %d/%d fichiers"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "%d/%d paires groupées"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Vous envoyez {} fichier(s) à la corbeille."
@@ -194,46 +186,89 @@ msgstr "Plus récent"
msgid "Oldest"
msgstr "Moins récent"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) doublons marqués."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr " filtre: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Lu les métadonnées de %d/%d fichiers"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Retrait des paires invalides"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "Vérification de %d/%d paires dans la ignore list"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Prioritization des groupes"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Analyzé %d/%d images"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "%d/%d blocs d'images comparés"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Préparation pour la comparaison"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Vérifié %d/%d paires"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Lu l'EXIF de %d/%d images"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Envoi de fichiers à la corbeille"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d/%d paires groupées"
#~ msgid "Removing false matches"
#~ msgstr "Retrait des paires invalides"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Vérification de %d/%d paires dans la ignore list"
#~ msgid "Doing group prioritization"
#~ msgstr "Prioritization des groupes"

File diff suppressed because it is too large Load Diff

View File

@@ -19,18 +19,18 @@ msgstr "Ֆայլի ճ-ը"
msgid "Error Message"
msgstr "Սխալի գրությունը"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Տեսակ"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Թղթապանակ"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Ֆայլի անունը"
@@ -38,85 +38,85 @@ msgstr "Ֆայլի անունը"
msgid "Size"
msgstr "Չափը"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Փոփոխությունը"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Տևողությունը"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Բիթրեյթը"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Սիմպլրեյթը"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Չափը (ՄԲ)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Ժամանակը"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Սեմփլրեյթը"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Անունը"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Կատարողը"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Ալբոմը"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Ժանրը"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Տարին"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Շավիղի համարը"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Մեկնաբանություն"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Համընկնում %-ին"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Բառ է օգտ."
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Խաբկանքի ք-ը"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Չափերը"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Չափը (ԿԲ)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr ""

View File

@@ -10,45 +10,41 @@ msgstr ""
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr ""
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr ""
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Ստուգվում են կրկնօրինակները"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Բացվում է"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Տեղափոխվում է"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Պատճենվում է"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Ուղարկվում է Աղբարկղ"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Ֆայլերը ուղարկվում են Աղբարկղ"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -56,93 +52,89 @@ msgstr ""
"Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: "
"Սպասեք մի քանի վայրկյան և կրկին փորձեք:"
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Կրկնօրինակներ չկան:"
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ պատճենվել են:"
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ տեղափոխվել են:"
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ Ջնջվել են:"
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}'-ը արդեն առկա է ցանկում:"
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}'-ը գոյություն չունի:"
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr ""
"Ընտրված %d համընկնումները կանտեսվեն հետագա բոլոր ստուգումներից: Շարունակե՞լ:"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "պատճենել"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "տեղափոխել"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Ընտրել թղթապանակ՝ {} նշված ֆայլերի համար"
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr ""
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:"
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:"
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d անպիտան)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 համընկնում է գտնվել"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d համընկնում է գտնվել"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Կարդալ %d/%d ֆայլերի չափը"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "Խմբավորվել է %d/%d համընկնում"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
@@ -187,46 +179,89 @@ msgstr "Նորագույնը"
msgid "Oldest"
msgstr "Ամենահինը"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) նշված կրկնօրինակներ:"
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr "ֆիլտր. %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Կարդալ %d/%d ֆայլերի մետատվյալները"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Սխալ համընկնումների հեռացում"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "Ընթացքում է %d/%d համընկնումները ընդդեմ անտեսվող ցանկի"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Խմբի առաջնայնացում"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Ստուգվում է %d/%d նկարները"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Կատարվում է %d/%d տվյալի համընկնում"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Նախապատրաստեցվում է համընկնումը"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Ստուգում է %d/%d համընկնումները"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Կարդալ EXIF-ը d/%d նկարներից"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Ֆայլերը ուղարկվում են Աղբարկղ"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Խմբավորվել է %d/%d համընկնում"
#~ msgid "Removing false matches"
#~ msgstr "Սխալ համընկնումների հեռացում"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Ընթացքում է %d/%d համընկնումները ընդդեմ անտեսվող ցանկի"
#~ msgid "Doing group prioritization"
#~ msgstr "Խմբի առաջնայնացում"

File diff suppressed because it is too large Load Diff

View File

@@ -19,18 +19,18 @@ msgstr "Percorso del file"
msgid "Error Message"
msgstr "Messaggio di errore"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Tipo"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Cartella"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nome del file"
@@ -38,85 +38,85 @@ msgstr "Nome del file"
msgid "Size"
msgstr "Dimensione"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modificato"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr ""
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Bitrate"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr ""
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Dimensione (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Tempo"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Campionamento"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Titolo"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Artista"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Album"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Genere"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Anno"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Numero traccia"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Commento"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Somiglianza %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Parole usate"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Conteggio duplicati"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Dimensioni"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Dimensione (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr ""

View File

@@ -10,45 +10,41 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr ""
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr ""
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Scansione per i duplicati"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Caricamento"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Spostamento"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Copia in corso"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Spostamento nel cestino"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Spostamento nel cestino"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -56,31 +52,31 @@ msgstr ""
"Un'azione precedente è ancora in corso. Non puoi cominciarne una nuova. "
"Aspetta qualche secondo e quindi riprova."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Non sono stati trovati dei duplicati."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Tutti i file marcati sono stati copiati correttamente."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Tutti i file marcati sono stati spostati correttamente."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Tutti i file marcati sono stati inviati nel cestino."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' è già nella lista."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' non esiste."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -88,64 +84,60 @@ msgstr ""
"Tutti i %d elementi che coincidono verranno ignorati in tutte le scansioni "
"successive. Continuare?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr ""
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr ""
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr ""
#: core/app.py:489
#: core/app.py:518
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:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Stai per rimuovere %d file dai risultati. Continuare?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Raccolta file da scansionare"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Le cartelle selezionate non contengono file da scansionare."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d scartati)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "Nessun duplicato trovato"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "Trovato/i %d duplicato/i"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Lettura dimensione di %d/%d file"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "Raggruppati %d/%d duplicati"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
@@ -192,47 +184,90 @@ msgstr "Il più nuovo"
msgid "Oldest"
msgstr "Il più vecchio"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicati marcati."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr " filtro: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Lettura metadata di %d/%d files"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Rimozione dei falsi positivi"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr ""
"Processati %d/%d duplicati applicando le regole della lista da ignorare"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Applicazione delle priorità di gruppo"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Analizzate %d/%d immagini"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Effettuate %d/%d comparazioni sui sottogruppi di immagini"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Preparazione per la comparazione"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Verificate %d/%d somiglianze"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Spostamento nel cestino"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Raggruppati %d/%d duplicati"
#~ msgid "Removing false matches"
#~ msgstr "Rimozione dei falsi positivi"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr ""
#~ "Processati %d/%d duplicati applicando le regole della lista da ignorare"
#~ msgid "Doing group prioritization"
#~ msgstr "Applicazione delle priorità di gruppo"

File diff suppressed because it is too large Load Diff

View File

@@ -20,18 +20,18 @@ msgstr "파일 경로"
msgid "Error Message"
msgstr "에러 메시지"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "종류"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "폴더"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "폴더명"
@@ -39,85 +39,85 @@ msgstr "폴더명"
msgid "Size"
msgstr "크기"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "수정날짜"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "길이"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "비트레이트"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "샘플레이트"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "크기 (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "시간"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "샘플레이트"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "곡명"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "아티스트"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "앨범"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "장르"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "년도"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "트랙 번호"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "주석"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "일치정도"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "사용된 단어수"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "중복파일 갯수"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "치수"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "크기 (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "EXIF 타임스태프"

View File

@@ -11,136 +11,128 @@ msgstr ""
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr ""
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr ""
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr ""
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "불러오는중"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "이동중"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "복사중"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "휴지통으로 보내기"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "휴지통으로 보내기"
#: core/app.py:290
#: core/app.py:279
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:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "중복 파일이 없습니다."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr ""
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr ""
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr ""
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' 는 이미 목록에 있습니다."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' 가 존재하지 않습니다."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr ""
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "복사"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "이동"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr ""
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr ""
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr ""
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr ""
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr ""
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr ""
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr ""
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr ""
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr ""
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
@@ -185,46 +177,89 @@ msgstr ""
msgid "Oldest"
msgstr ""
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr ""
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr ""
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr ""
#: core/scanner.py:130
msgid "Removing false matches"
msgstr ""
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr ""
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr ""
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr ""
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr ""
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr ""
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr ""
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "휴지통으로 보내기"
#~ msgid "Grouped %d/%d matches"
#~ msgstr ""
#~ msgid "Removing false matches"
#~ msgstr ""
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr ""
#~ msgid "Doing group prioritization"
#~ msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -20,18 +20,18 @@ msgstr "Bestand locatie"
msgid "Error Message"
msgstr "Fout Melding"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Kind"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Folder"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Bestandsnaam"
@@ -39,85 +39,85 @@ msgstr "Bestandsnaam"
msgid "Size"
msgstr "Grote"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Aanpassing"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Tijdsduur"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Bitrate"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Sample frequentie"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Grote (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Tijd"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Sample Frequentie"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Titel"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Artiest"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Album"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Genre"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Jaar"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Track nummer"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Commentaar"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Zekerheid %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Woorden gebruikt"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Dubbel telling"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Afmetingen"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Grote (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "EXIF Tijdstip"

View File

@@ -11,15 +11,15 @@ msgstr ""
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "Er zijn geen gemarkeerde dubbelingen. Er is niks gedaam"
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Er zijn geen dubelingen geselecteerd. Er is niks gedaan"
#: core/app.py:41
#: 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?"
@@ -28,31 +28,27 @@ msgstr ""
"Afhankelijk met welke applicaties die bestanden worden geopened kan het best"
" een rommeltje worden. Doorgaan?"
#: core/app.py:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Dubbelingen aan het opsporen"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Laden"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Verplaatsen"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Kopieeren"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Naar de prullebak verplaatsen"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Bestanden naar de prullebak aan het verplaatsen"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -60,31 +56,31 @@ msgstr ""
"Er is nog een vorige actie bezig. Je kan nu nog geen nieuwe actie starten. "
"Wacht een paar seconden en probeer het opnieuw"
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Geen dubbelingen gevonden"
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Alle gemarkeerde bestanden zijn succesvol gekopieerd."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Alle gemarkeerde bestanden zijn succesvol verplaatst."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Alle gemarkeerde bestanden zijn met succes in de prullenbak gedaan."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}'staat al in de lijst."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' bestaat niet."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -92,69 +88,65 @@ msgstr ""
"Alle geselecteerde %d overeenkomsten zullen in toekomstige onderzoeken "
"worden overgslagen. Doorgaan?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "kopieer"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "verplaats"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr ""
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Selecteer een locatie voor de CSV export"
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
"Er is nog geen \"aangepaste opdracht\" ingericht. Je kan dit doen bij de "
"voorkeuren."
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr ""
"Je staat op het punt om %d bestanden te verwijderen uit de resultaten. "
"Doorgaan?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
"{} dubbelingen groepen waren veranderd door de prioriteits verschuiving."
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Bestanden aan het verzamelen om te onderzoeken"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr ""
"De geselecteerde folders bevatten geen bestanden die onderzocht kunnen "
"worden."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d weggelaten)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 overeenkomsten gevonden"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d overeenkomsten gevonden"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Bestands grote van %d/%d bestanden aan het lezen."
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "%d van %d overeenkomsten gegroepeerd"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Je verplaatst {} bestanden naar de prullenbak"
@@ -200,46 +192,89 @@ msgstr "nieuwste"
msgid "Oldest"
msgstr "oudste"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s /%s) dubbelingen gemarkeerd"
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr "filter: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Metadata van %d/%d bestanden gelezen"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Verkeerde overeenkomsten aan het verwijderen"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "% d van de %d overeenkomsten vergeleken met de overslaan lijst"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Groepen aan het priotiriseren"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "%d van de %d afbeeldingen aan het analyseren"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "%d van de %d bulk overeenkomsten uitgevoerd"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Voorbereiden voor dubbelingen bepaling"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "%d van de %d overeenkomsten nagekeken"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "EXIF informatie van %d van de %d afbeeldingen gelezen"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Bestanden naar de prullebak aan het verplaatsen"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d van %d overeenkomsten gegroepeerd"
#~ msgid "Removing false matches"
#~ msgstr "Verkeerde overeenkomsten aan het verwijderen"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "% d van de %d overeenkomsten vergeleken met de overslaan lijst"
#~ msgid "Doing group prioritization"
#~ msgstr "Groepen aan het priotiriseren"

File diff suppressed because it is too large Load Diff

View File

@@ -18,18 +18,18 @@ msgstr ""
msgid "Error Message"
msgstr ""
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr ""
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr ""
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr ""
@@ -37,85 +37,85 @@ msgstr ""
msgid "Size"
msgstr ""
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr ""
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr ""
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr ""
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr ""
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr ""
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr ""
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr ""
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr ""
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr ""
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr ""
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr ""
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr ""
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr ""
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr ""
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr ""
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr ""
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr ""
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr ""
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr ""
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr ""

View File

@@ -11,75 +11,71 @@ msgstr ""
"Language: pl_PL\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "Brak wykrytych duplikatów. Nic nie zrobiono."
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Brak wybranych duplikatów. Nic nie zrobiono."
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr ""
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr ""
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr ""
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr ""
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr ""
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr ""
#: core/app.py:290
#: core/app.py:279
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:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Nie znaleziono duplikatów."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr ""
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr ""
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr ""
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' jest już na liście."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' nie istnieje."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -87,62 +83,58 @@ msgstr ""
"Wszystkie zaznaczone %d duplikaty będą ignorowane w kolejnych skanach. "
"Kontynuować?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "kopiuj"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "przenieś"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Wybierz katalog do {} duplikatów"
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr ""
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr ""
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr ""
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr ""
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr ""
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr ""
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr ""
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr ""
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr ""
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
@@ -187,46 +179,89 @@ msgstr ""
msgid "Oldest"
msgstr ""
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr ""
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr ""
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr ""
#: core/scanner.py:130
msgid "Removing false matches"
msgstr ""
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr ""
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr ""
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr ""
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr ""
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr ""
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr ""
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr ""
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr ""
#~ msgid "Grouped %d/%d matches"
#~ msgstr ""
#~ msgid "Removing false matches"
#~ msgstr ""
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr ""
#~ msgid "Doing group prioritization"
#~ msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -22,18 +22,18 @@ msgstr "Caminho"
msgid "Error Message"
msgstr "Mensagem de Erro"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Tipo"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Pasta"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Nome do Arquivo"
@@ -41,85 +41,85 @@ msgstr "Nome do Arquivo"
msgid "Size"
msgstr "Tamanho"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Modificado"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Duração"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Taxa de Bits"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Amostragem"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Tamanho"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Duração"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Tamanho da Amostra"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Nome"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Artista"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Álbum"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Gênero"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Ano"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Número da Faixa"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Comentário"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "% Precisão"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Palavras Usadas"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Duplicatas"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Dimensões"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Tamanho"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "Timestamp EXIF"

View File

@@ -14,15 +14,15 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/app.py:39
#: 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:40
#: 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:41
#: 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?"
@@ -30,31 +30,27 @@ msgstr ""
"Você está prestes a abrir muitos arquivos de uma vez. Problemas podem surgir"
" dependendo de qual app seja usado para abri-los. Deseja continuar?"
#: core/app.py:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Buscando por duplicatas"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Carregando"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Movendo"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Copiando"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Movendo para o Lixo"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Movendo arquivos para o Lixo"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -62,93 +58,89 @@ msgstr ""
"Ainda há uma ação em andamento. Não é possível iniciar outra agora. Espere "
"alguns segundos e tente novamente."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Nenhuma duplicata encontrada."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Todos os arquivos marcados foram copiados corretamente."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Todos os arquivos marcados foram relocados corretamente."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Todos os arquivos marcados foram movidos para o Lixo corretamente."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "{} já está na lista."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "{} não existe."
#: core/app.py:360
#: core/app.py:379
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:426
#: core/app.py:450
msgid "copy"
msgstr "copiar"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "mover"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Selecione uma pasta para {} os arquivos marcados"
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Selecione uma pasta para o CSV exportado"
#: core/app.py:489
#: core/app.py:518
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:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Remover %d arquivo(s) dos resultados?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} grupos de duplicatas alterados ao repriorizar."
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Juntando arquivos para escanear"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "As pastas selecionadas não contém arquivos escaneáveis."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d rejeitado(s))"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 resultados encontrados"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d resultados encontrados"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Tamanho lido em %d/%d arquivos"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "%d/%d resultados agrupados"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Você está movendo {} arquivo(s) para o Lixo."
@@ -193,46 +185,89 @@ msgstr "Mais recente"
msgid "Oldest"
msgstr "Mais antigo"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) duplicatas marcadas."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr " filtro: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Metadados lidos em %d/%d arquivos"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Removendo resultados falsos"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "%d/%d resultados processados em oposição à lista Ignorar"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Executando priorização de grupo"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "%d/%d fotos analizadas"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "%d/%d resultados em blocos executados"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Preparando para comparação"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "%d/%d resultados verificados"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "EXIF lido em %d/%d fotos"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Movendo arquivos para o Lixo"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d/%d resultados agrupados"
#~ msgid "Removing false matches"
#~ msgstr "Removendo resultados falsos"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "%d/%d resultados processados em oposição à lista Ignorar"
#~ msgid "Doing group prioritization"
#~ msgstr "Executando priorização de grupo"

File diff suppressed because it is too large Load Diff

View File

@@ -20,18 +20,18 @@ msgstr "Путь к файлу"
msgid "Error Message"
msgstr "Сообщение об ошибке"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Тип"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Каталог"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Имя файла"
@@ -39,85 +39,85 @@ msgstr "Имя файла"
msgid "Size"
msgstr "Размер"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Время изменения"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Продолжительность"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Битрейт"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Частота оцифровки"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Размер (МБ)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Время"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Частота"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Название"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Исполнитель"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Альбом"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Жанр"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Год"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Номер дорожки"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Комментарий"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Совпадение %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Использованные слова"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Количество дубликатов"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Размеры"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Размер (КБ)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "Временная отметка EXIF"

View File

@@ -11,15 +11,15 @@ 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:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "Дубликаты не отмечены. Нечего выполнять."
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Дубликаты не выбраны. Нечего выполнять."
#: core/app.py:41
#: 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?"
@@ -28,31 +28,27 @@ msgstr ""
"файлы будут открыты, это действие может создать настоящий беспорядок. "
"Продолжать?"
#: core/app.py:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Проверка на наличие дубликатов"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Загрузка"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Перемещение"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Копирование"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Перемещение в Корзину"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Перемещение файлов в Корзину"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -60,31 +56,31 @@ msgstr ""
"Предыдущее действие до сих пор выполняется. Вы не можете начать новое. "
"Подождите несколько секунд, затем повторите попытку."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Дубликаты не найдены."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Все отмеченные файлы были скопированы успешно."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Все отмеченные файлы были перемещены успешно."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Все отмеченные файлы были успешно отправлены в Корзину."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' уже присутствует в списке."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' не существует."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -92,62 +88,58 @@ msgstr ""
"Все выбранные %d совпадений будут игнорироваться при всех последующих "
"проверках. Продолжить?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "копирование"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "перемещение"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Выберите каталог {} для отмеченных файлов"
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Выберите назначение для экспортируемого "
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Вы не создали пользовательскую команду. Задайте её в настройках."
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Вы собираетесь удалить %d файлов из результата поиска. Продолжить?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} групп дубликатов было изменено при реприоритезации."
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Сбор файлов для сканирования"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Выбранные каталоги не содержат файлов для сканирования."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s. (%d отменено)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 совпадений найдено"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d совпадений найдено"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Подсчитан размер %d/%d файлов"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "Группировка %d/%d совпадений"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Вы перемещаете {} файлов в Корзину."
@@ -193,46 +185,89 @@ msgstr "Новейший"
msgid "Oldest"
msgstr "Старейшие"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) дубликатов отмечено."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr "фильтр: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Прочитаны метаданные %d/%d файлов"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Удаление ложных совпадений"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "Обработано %d/%d совпадений используя список игнорирования"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Выполняется приоритезация групп"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Анализируется %d/%d изображений"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Выполнено %d/%d совпадений блоков"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Подготовка для сравнения"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Проверено %d/%d совпадений"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Прочитана EXIF-информация %d/%d фотографий"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Перемещение файлов в Корзину"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Группировка %d/%d совпадений"
#~ msgid "Removing false matches"
#~ msgstr "Удаление ложных совпадений"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Обработано %d/%d совпадений используя список игнорирования"
#~ msgid "Doing group prioritization"
#~ msgstr "Выполняется приоритезация групп"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -19,18 +19,18 @@ msgstr "Шлях до файлу"
msgid "Error Message"
msgstr "Повідомлення про помилку"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Тип"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Папка"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Ім’я файлу"
@@ -38,85 +38,85 @@ msgstr "Ім’я файлу"
msgid "Size"
msgstr "Розмір"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Дата модифікації"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Тривалість"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Якість звуку"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Частота оцифровки"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Розмір (Мб)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Час"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Частота дискретизації"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Назва"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Виконавець"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Альбом"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Жанр"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Рік"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Номер доріжки"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Коментар"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Збіг (%)"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Використані слова"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Кількість дублікатів"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Виміри"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Розмір (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr ""

View File

@@ -10,45 +10,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:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "Немає позначених дублікатів - нічого робити."
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Немає обраних дублікатів - нічого робити."
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Пошук дублікатів"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Завантаження"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Переміщення"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Копіювання"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Відправка до кошику"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Відправлення файлів до кошика"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -56,31 +52,31 @@ msgstr ""
"Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте"
" кілька секунд, потім повторіть спробу."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Не знайдено жодного дублікату."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Усі позначені файли були скопійовані успішно."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Усі позначені файли були переміщені успішно."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "Усі позначені файли були успішно відправлені до кошика."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' вже є в списку."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' не існує."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -88,62 +84,58 @@ msgstr ""
"Усі обрані %d результатів будуть ігноруватися під час усіх наступних "
"пошуків. Продовжити?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "копіювання"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "переміщення"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Оберіть цільову папку для {} позначених файлів"
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr ""
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Власна команда не встановлена. Встановіть її у налаштуваннях."
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Ви збираєтеся видалити %d файлів з результату пошуку. Продовжити?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Збір файлів для пошуку"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Обрані папки не містять файлів придатних для пошуку."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d відкинуто)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "0 результатів знайдено"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "%d результатів знайдено"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Прочитано розмір %d/%d файлів"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "Згруповано %d/%d результатів"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr ""
@@ -188,46 +180,89 @@ msgstr ""
msgid "Oldest"
msgstr ""
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) дублікатів позначено."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr "фільтр: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Прочитано метаданих з %d/%d файлів"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Видалення помилкових результатів"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "Порівняно %d/%d результатів з чорним списком"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Виконується пріорітизація груп"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Проаналізовано %d/%d фотографій"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Виконано %d/%d порівнянь шматків"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Підготовка до порівняння"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Перевірено %d/%d результатів"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Прочитано EXIF з %d/%d фотографій"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Відправлення файлів до кошика"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Згруповано %d/%d результатів"
#~ msgid "Removing false matches"
#~ msgstr "Видалення помилкових результатів"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Порівняно %d/%d результатів з чорним списком"
#~ msgid "Doing group prioritization"
#~ msgstr "Виконується пріорітизація груп"

File diff suppressed because it is too large Load Diff

View File

@@ -20,18 +20,18 @@ msgstr "Đường dẫn tập tin"
msgid "Error Message"
msgstr "Thông báo lỗi"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "Loại"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "Thư mục"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "Tên tập tin"
@@ -39,85 +39,85 @@ msgstr "Tên tập tin"
msgid "Size"
msgstr "Kích thước"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "Chỉnh sửa"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "Độ dài"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "Bitrate"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "Samplerate"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "Kích thước (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "Thời gian"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "Sample Rate"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "Tiêu đề"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "Nghệ sĩ"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "Album"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "Loại nhạc"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "Năm"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "Số track"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "Bình luận"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "Tỉ lệ khớp %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "Từ được dùng"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "Số lần bị lừa"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "Chiều"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "Kích thước (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "EXIF Timestamp"

View File

@@ -11,17 +11,17 @@ msgstr ""
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr ""
"Không có phần đánh dấu nào trùng nhau. Vẫn chưa thực hiện thao tác nào."
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr ""
"Không có phần đánh dấu nào trùng nhau. Vẫn chưa thực hiện thao tác nào."
#: core/app.py:41
#: 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,31 +29,27 @@ msgstr ""
"Bạn chuẩn bị mở nhiều tập tin cùng lúc. Dựa trên chương trình các tập tin "
"được mở, thao tác này có thể gây ra trạng thái lộn xộn. Vẫn muốn tiếp tục?"
#: core/app.py:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "Quét các phần trùng nhau"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "Đang tải"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "Đang di chuyển"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "Đang sao chép"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "Đang gửi vào thùng rác"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "Đang chuyển các tập tin vào thùng rác trong Windows"
#: core/app.py:290
#: core/app.py:279
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
@@ -61,32 +57,32 @@ msgstr ""
"Hiện đã có một tiến trình đang được tiến hành. Bạn không thể bắt đầu một "
"phần khác. Hãy đợi trong vài giây, và sau đó thử lại lần nữa."
#: core/app.py:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "Không tìm thấy thành phần trùng nhau."
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "Tất cả tập tin được đánh dấu đã được sao chép thành công."
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "Tất cả các tập tin được đánh dấu đã được di chuyển thành công."
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr ""
"Tất cả các tập tin được đánh dấu đã được gửi đến Thùng Rác thành công."
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' đã tồn tại trong danh sách."
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' không tồn tại."
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
@@ -94,64 +90,60 @@ msgstr ""
"Các phần được chọn %d khớp với nhau sẽ được bỏ qua trong các lần quét sau. "
"Tiếp tục?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "sao chép"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "di chuyển"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "Chọn một thư mục để {} các tập tin được đánh dấu đến"
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "Chọn một điểm xuất dữ liệu dạng CSV"
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr ""
"Bạn vẫn chưa chỉnh sửa phần thiết lập dòng lệnh. Hãy sử dụng tính năng này "
"trong phần tùy biến của bạn."
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "Bạn chuẩn bị loại bỏ %d tập tin từ phần kết quả. Tiếp tục?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} các nhóm trùng nhau đã được thay đổi bởi thứ tự-tái ưu tiên."
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "Đang thu thập các tập tin để quét"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "Các thứ mục được chọn chứa các tập tin không thể quét được."
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d bị bỏ qua)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "đã tìm thấy 0 phần khớp nhau"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "đã tìm thấy %d phần khớp nhau"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "Đọc kích thước của các tập tin %d/%d"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "Đã nhóm %d/%d phần khớp nhau"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "Bạn sắp sửa gửi {} (các)tập tin đến Thùng Rác."
@@ -196,46 +188,89 @@ msgstr "Mới nhất"
msgid "Oldest"
msgstr "Cũ nhất"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d / %d (%s / %s) phần trùng nhau đã được đánh dấu."
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr " bộ lọc: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "Đọc thông tin chi tiết của %d/%d tập tin"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "Đang loại bỏ các phần khớp nhau bị sai"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "Đã xử lý %d/%d phần khớp nhau khỏi danh sách bỏ qua"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "Đang thực hiện chế độ gom nhóm ưu tiên"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "Đã phân tích %d/%d hình ảnh"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "Đã thể thiện %d/%d các phần khớp nhau"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "Đang chuẩn bị phần khớp nhau"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "Đã xác nhận %d/%d phần khớp nhau"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "Đọc thông tin EXIF của %d/%d hình ảnh"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "Đang chuyển các tập tin vào thùng rác trong Windows"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "Đã nhóm %d/%d phần khớp nhau"
#~ msgid "Removing false matches"
#~ msgstr "Đang loại bỏ các phần khớp nhau bị sai"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "Đã xử lý %d/%d phần khớp nhau khỏi danh sách bỏ qua"
#~ msgid "Doing group prioritization"
#~ msgstr "Đang thực hiện chế độ gom nhóm ưu tiên"

File diff suppressed because it is too large Load Diff

View File

@@ -20,18 +20,18 @@ msgstr "文件路径"
msgid "Error Message"
msgstr "错误信息"
#: core/prioritize.py:63 core_me/result_table.py:24 core_pe/result_table.py:21
#: core_se/result_table.py:21
#: core/me/result_table.py:24 core/pe/result_table.py:21 core/prioritize.py:63
#: core/se/result_table.py:21
msgid "Kind"
msgstr "类型"
#: core/prioritize.py:72 core_me/result_table.py:19 core_pe/result_table.py:19
#: core_se/result_table.py:19
#: core/me/result_table.py:19 core/pe/result_table.py:19 core/prioritize.py:72
#: core/se/result_table.py:19
msgid "Folder"
msgstr "文件夹"
#: core/prioritize.py:88 core_me/result_table.py:18 core_pe/result_table.py:18
#: core_se/result_table.py:18
#: core/me/result_table.py:18 core/pe/result_table.py:18 core/prioritize.py:88
#: core/se/result_table.py:18
msgid "Filename"
msgstr "文件名称"
@@ -39,85 +39,85 @@ msgstr "文件名称"
msgid "Size"
msgstr "大小"
#: core/prioritize.py:153 core_me/result_table.py:25
#: core_pe/result_table.py:24 core_se/result_table.py:22
#: core/me/result_table.py:25 core/pe/result_table.py:24
#: core/prioritize.py:153 core/se/result_table.py:22
msgid "Modification"
msgstr "编辑日期"
#: core_me/prioritize.py:16
#: core/me/prioritize.py:18
msgid "Duration"
msgstr "持续时间"
#: core_me/prioritize.py:22 core_me/result_table.py:22
#: core/me/prioritize.py:24 core/me/result_table.py:22
msgid "Bitrate"
msgstr "比特率"
#: core_me/prioritize.py:28
#: core/me/prioritize.py:30
msgid "Samplerate"
msgstr "采样率"
#: core_me/result_table.py:20
#: core/me/result_table.py:20
msgid "Size (MB)"
msgstr "大小 (MB)"
#: core_me/result_table.py:21
#: core/me/result_table.py:21
msgid "Time"
msgstr "时间"
#: core_me/result_table.py:23
#: core/me/result_table.py:23
msgid "Sample Rate"
msgstr "采样率"
#: core_me/result_table.py:26
#: core/me/result_table.py:26
msgid "Title"
msgstr "歌曲名"
#: core_me/result_table.py:27
#: core/me/result_table.py:27
msgid "Artist"
msgstr "演唱者"
#: core_me/result_table.py:28
#: core/me/result_table.py:28
msgid "Album"
msgstr "专辑"
#: core_me/result_table.py:29
#: core/me/result_table.py:29
msgid "Genre"
msgstr "音乐类型"
#: core_me/result_table.py:30
#: core/me/result_table.py:30
msgid "Year"
msgstr "年"
#: core_me/result_table.py:31
#: core/me/result_table.py:31
msgid "Track Number"
msgstr "音轨号"
#: core_me/result_table.py:32
#: core/me/result_table.py:32
msgid "Comment"
msgstr "注释"
#: core_me/result_table.py:33 core_pe/result_table.py:25
#: core_se/result_table.py:23
#: core/me/result_table.py:33 core/pe/result_table.py:25
#: core/se/result_table.py:23
msgid "Match %"
msgstr "匹配度 %"
#: core_me/result_table.py:34 core_se/result_table.py:24
#: core/me/result_table.py:34 core/se/result_table.py:24
msgid "Words Used"
msgstr "使用过的词语"
#: core_me/result_table.py:35 core_pe/result_table.py:26
#: core_se/result_table.py:25
#: core/me/result_table.py:35 core/pe/result_table.py:26
#: core/se/result_table.py:25
msgid "Dupe Count"
msgstr "重复文件数"
#: core_pe/prioritize.py:16 core_pe/result_table.py:22
#: core/pe/prioritize.py:18 core/pe/result_table.py:22
msgid "Dimensions"
msgstr "规格"
#: core_pe/result_table.py:20 core_se/result_table.py:20
#: core/pe/result_table.py:20 core/se/result_table.py:20
msgid "Size (KB)"
msgstr "大小 (KB)"
#: core_pe/result_table.py:23
#: core/pe/result_table.py:23
msgid "EXIF Timestamp"
msgstr "EXIF 时间戳"

View File

@@ -11,136 +11,128 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: core/app.py:39
#: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done."
msgstr "没有已标记的重复项。没有需要处理的。"
#: core/app.py:40
#: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done."
msgstr "没有已选定的重复项。没有需要处理的。"
#: core/app.py:41
#: 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:57
#: core/app.py:65
msgid "Scanning for duplicates"
msgstr "正在扫描重复内容"
#: core/app.py:58
#: core/app.py:66
msgid "Loading"
msgstr "载入中"
#: core/app.py:59
#: core/app.py:67
msgid "Moving"
msgstr "移动中"
#: core/app.py:60
#: core/app.py:68
msgid "Copying"
msgstr "复制中"
#: core/app.py:61
#: core/app.py:69
msgid "Sending to Trash"
msgstr "正在移到垃圾桶"
#: core/app.py:64
msgid "Sending files to the recycle bin"
msgstr "将文件移到回收站"
#: core/app.py:290
#: core/app.py:279
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:297
#: core/app.py:289
msgid "No duplicates found."
msgstr "没有找到重复文件。"
#: core/app.py:310
#: core/app.py:304
msgid "All marked files were copied successfully."
msgstr "所有已标记的文件已复制成功。"
#: core/app.py:311
#: core/app.py:305
msgid "All marked files were moved successfully."
msgstr "所有已标记的文件已移动成功。"
#: core/app.py:312
#: core/app.py:306
msgid "All marked files were successfully sent to Trash."
msgstr "所有已标记的文件已成功发送到垃圾桶。"
#: core/app.py:349
#: core/app.py:368
msgid "'{}' already is in the list."
msgstr "'{}' 已在列表中。"
#: core/app.py:351
#: core/app.py:370
msgid "'{}' does not exist."
msgstr "'{}' 不存在。"
#: core/app.py:360
#: core/app.py:379
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。是否继续?"
#: core/app.py:426
#: core/app.py:450
msgid "copy"
msgstr "复制"
#: core/app.py:426
#: core/app.py:450
msgid "move"
msgstr "移动"
#: core/app.py:427
#: core/app.py:451
msgid "Select a directory to {} marked files to"
msgstr "选择一个文件夹将标记的 {} 个文件进行..."
#: core/app.py:464
#: core/app.py:490
msgid "Select a destination for your exported CSV"
msgstr "选择您导出 CSV 的目标"
#: core/app.py:489
#: core/app.py:518
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "你没有设定自定义命令。请在首选项中进行设定。"
#: core/app.py:641 core/app.py:654
#: core/app.py:672 core/app.py:685
msgid "You are about to remove %d files from results. Continue?"
msgstr "你将从结果中移除 %d 个文件。继续吗?"
#: core/app.py:688
#: core/app.py:719
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr ""
#: core/app.py:716
#: core/app.py:762
msgid "Collecting files to scan"
msgstr "收集文件以备扫描"
#: core/app.py:727
#: core/app.py:751
msgid "The selected directories contain no scannable file."
msgstr "所选文件夹中不包含可供扫描的文件。"
#: core/app.py:768
#: core/app.py:810
msgid "%s (%d discarded)"
msgstr "%s (%d 项已丢弃)"
#: core/engine.py:220 core/engine.py:265
#: core/engine.py:222 core/engine.py:262
msgid "0 matches found"
msgstr "未找到匹配项"
#: core/engine.py:238 core/engine.py:273
#: core/engine.py:240 core/engine.py:270
msgid "%d matches found"
msgstr "找到 %d 个匹配项"
#: core/engine.py:258 core/scanner.py:79
#: core/scanner.py:77
msgid "Read size of %d/%d files"
msgstr "读取 %d/%d 文件大小"
#: core/engine.py:464
msgid "Grouped %d/%d matches"
msgstr "%d/%d 匹配项组合在一起"
#: core/gui/deletion_options.py:69
msgid "You are sending {} file(s) to the Trash."
msgstr "您正在发送 {} 个文件到垃圾桶。"
@@ -185,46 +177,89 @@ msgstr "最新"
msgid "Oldest"
msgstr "最旧"
#: core/results.py:126
#: core/results.py:129
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "已标记 %d / %d (%s / %s) 个重复项。"
#: core/results.py:133
#: core/results.py:136
msgid " filter: %s"
msgstr " 筛选: %s"
#: core/scanner.py:99
#: core/scanner.py:101
msgid "Read metadata of %d/%d files"
msgstr "读取 %d/%d 文件元数据"
#: core/scanner.py:130
msgid "Removing false matches"
msgstr "移除错误匹配项"
#: core/scanner.py:154
msgid "Processed %d/%d matches against the ignore list"
msgstr "在忽略列表之外已处理 %d/%d 匹配项"
#: core/scanner.py:176
msgid "Doing group prioritization"
msgstr "优化分组"
#: core_pe/matchblock.py:61
#: core/pe/matchblock.py:61
msgid "Analyzed %d/%d pictures"
msgstr "分析 %d/%d 图像"
#: core_pe/matchblock.py:153
#: core/pe/matchblock.py:156
msgid "Performed %d/%d chunk matches"
msgstr "已执行 %d/%d 个区块匹配"
#: core_pe/matchblock.py:158
#: core/pe/matchblock.py:161
msgid "Preparing for matching"
msgstr "准备进行匹配"
#: core_pe/matchblock.py:193
#: core/pe/matchblock.py:206
msgid "Verified %d/%d matches"
msgstr "验证 %d/%d 匹配项"
#: core_pe/matchexif.py:18
#: core/pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures"
msgstr "读取 %d/%d 张图片的 EXIF"
#: core/app.py:312
msgid "Could not load file: {}"
msgstr ""
#: core/app.py:496 core/app.py:742
msgid "Couldn't write to file: {}"
msgstr ""
#: core/me/scanner.py:19 core/se/scanner.py:15
msgid "Filename"
msgstr ""
#: core/me/scanner.py:20
msgid "Filename - Fields"
msgstr ""
#: core/me/scanner.py:21
msgid "Filename - Fields (No Order)"
msgstr ""
#: core/me/scanner.py:22
msgid "Tags"
msgstr ""
#: core/me/scanner.py:23 core/pe/scanner.py:20 core/se/scanner.py:16
msgid "Contents"
msgstr ""
#: core/pe/scanner.py:21
msgid "EXIF Timestamp"
msgstr ""
#: core/scanner.py:139
msgid "Almost done! Fiddling with results..."
msgstr ""
#: core/se/scanner.py:17
msgid "Folders"
msgstr ""
#~ msgid "Sending files to the recycle bin"
#~ msgstr "将文件移到回收站"
#~ msgid "Grouped %d/%d matches"
#~ msgstr "%d/%d 匹配项组合在一起"
#~ msgid "Removing false matches"
#~ msgstr "移除错误匹配项"
#~ msgid "Processed %d/%d matches against the ignore list"
#~ msgstr "在忽略列表之外已处理 %d/%d 匹配项"
#~ msgid "Doing group prioritization"
#~ msgstr "优化分组"

Some files were not shown because too many files have changed in this diff Show More