mirror of
https://github.com/arsenetar/dupeguru.git
synced 2024-10-31 22:05:58 +00:00
Compare commits
No commits in common. "master" and "4.3.1" have entirely different histories.
75
.github/workflows/default.yml
vendored
75
.github/workflows/default.yml
vendored
@ -4,42 +4,71 @@ name: Default CI/CD
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
branches: [master]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [master]
|
branches: [master]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pre-commit:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
- name: Set up Python 3.12
|
- name: Set up Python 3.10
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.10"
|
||||||
- uses: pre-commit/action@v3.0.1
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt -r requirements-extra.txt
|
||||||
|
- name: Lint with flake8
|
||||||
|
run: |
|
||||||
|
flake8 .
|
||||||
|
format:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python 3.10
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: "3.10"
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt -r requirements-extra.txt
|
||||||
|
- name: Check format with black
|
||||||
|
run: |
|
||||||
|
black .
|
||||||
test:
|
test:
|
||||||
needs: [pre-commit]
|
needs: [lint, format]
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
python-version: [3.7, 3.8, 3.9, "3.10", "3.11", "3.12"]
|
python-version: [3.7, 3.8, 3.9, "3.10"]
|
||||||
include:
|
exclude:
|
||||||
- os: windows-latest
|
|
||||||
python-version: "3.12"
|
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
python-version: "3.12"
|
python-version: 3.7
|
||||||
|
- os: macos-latest
|
||||||
|
python-version: 3.8
|
||||||
|
- os: macos-latest
|
||||||
|
python-version: 3.9
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: 3.7
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: 3.8
|
||||||
|
- os: windows-latest
|
||||||
|
python-version: 3.9
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install setuptools
|
|
||||||
pip install -r requirements.txt -r requirements-extra.txt
|
pip install -r requirements.txt -r requirements-extra.txt
|
||||||
- name: Build python modules
|
- name: Build python modules
|
||||||
run: |
|
run: |
|
||||||
@ -49,17 +78,7 @@ jobs:
|
|||||||
pytest core hscommon
|
pytest core hscommon
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
if: matrix.os == 'ubuntu-latest'
|
if: matrix.os == 'ubuntu-latest'
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: modules ${{ matrix.python-version }}
|
name: modules ${{ matrix.python-version }}
|
||||||
path: build/**/*.so
|
path: ${{ github.workspace }}/**/*.so
|
||||||
merge-artifacts:
|
|
||||||
needs: [test]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Merge Artifacts
|
|
||||||
uses: actions/upload-artifact/merge@v4
|
|
||||||
with:
|
|
||||||
name: modules
|
|
||||||
pattern: modules*
|
|
||||||
delete-merged: true
|
|
||||||
|
26
.github/workflows/tx-push.yml
vendored
26
.github/workflows/tx-push.yml
vendored
@ -1,26 +0,0 @@
|
|||||||
# Push translation source to Transifex
|
|
||||||
name: Transifex Sync
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
paths:
|
|
||||||
- locale/*.pot
|
|
||||||
|
|
||||||
env:
|
|
||||||
TX_VERSION: "v1.6.10"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
push-source:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Get Transifex Client
|
|
||||||
run: |
|
|
||||||
curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash -s -- $TX_VERSION
|
|
||||||
- name: Update & Push Translation Sources
|
|
||||||
env:
|
|
||||||
TX_TOKEN: ${{ secrets.TX_TOKEN }}
|
|
||||||
run: |
|
|
||||||
./tx push -s --use-git-timestamps
|
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -87,8 +87,8 @@ cython_debug/
|
|||||||
# Visual Studio Code
|
# Visual Studio Code
|
||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/settings.json
|
!.vscode/settings.json
|
||||||
!.vscode/tasks.json
|
#!.vscode/tasks.json
|
||||||
!.vscode/launch.json
|
#!.vscode/launch.json
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
!.vscode/*.code-snippets
|
!.vscode/*.code-snippets
|
||||||
|
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
repos:
|
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
||||||
rev: v4.5.0
|
|
||||||
hooks:
|
|
||||||
- id: check-yaml
|
|
||||||
- id: check-toml
|
|
||||||
- id: end-of-file-fixer
|
|
||||||
exclude: ".*.json"
|
|
||||||
- id: trailing-whitespace
|
|
||||||
- repo: https://github.com/psf/black
|
|
||||||
rev: 24.2.0
|
|
||||||
hooks:
|
|
||||||
- id: black
|
|
||||||
- repo: https://github.com/PyCQA/flake8
|
|
||||||
rev: 7.0.0
|
|
||||||
hooks:
|
|
||||||
- id: flake8
|
|
||||||
exclude: ^(.tox|env|build|dist|help|qt/dg_rc.py|pkg).*
|
|
||||||
- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook
|
|
||||||
rev: v9.11.0
|
|
||||||
hooks:
|
|
||||||
- id: commitlint
|
|
||||||
stages: [commit-msg]
|
|
||||||
additional_dependencies: ["@commitlint/config-conventional"]
|
|
@ -1 +1 @@
|
|||||||
sonar.python.version=3.7, 3.8, 3.9, 3.10, 3.11
|
sonar.python.version=3.7, 3.8, 3.9, 3.10
|
@ -18,3 +18,4 @@ file_filter = locale/<lang>/LC_MESSAGES/ui.po
|
|||||||
source_file = locale/ui.pot
|
source_file = locale/ui.pot
|
||||||
source_lang = en
|
source_lang = en
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
|
6
.vscode/extensions.json
vendored
6
.vscode/extensions.json
vendored
@ -3,10 +3,8 @@
|
|||||||
"recommendations": [
|
"recommendations": [
|
||||||
"redhat.vscode-yaml",
|
"redhat.vscode-yaml",
|
||||||
"ms-python.vscode-pylance",
|
"ms-python.vscode-pylance",
|
||||||
"ms-python.python",
|
"ms-python.python"
|
||||||
"ms-python.black-formatter",
|
|
||||||
],
|
],
|
||||||
// List of extensions recommended by VS Code that should not be recommended for
|
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
|
||||||
// users of this workspace.
|
|
||||||
"unwantedRecommendations": []
|
"unwantedRecommendations": []
|
||||||
}
|
}
|
17
.vscode/launch.json
vendored
17
.vscode/launch.json
vendored
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
// Use IntelliSense to learn about possible attributes.
|
|
||||||
// Hover to view descriptions of existing attributes.
|
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "DupuGuru",
|
|
||||||
"type": "debugpy",
|
|
||||||
"request": "launch",
|
|
||||||
"program": "run.py",
|
|
||||||
"console": "integratedTerminal",
|
|
||||||
"subProcess": true,
|
|
||||||
"justMyCode": false
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
13
.vscode/settings.json
vendored
13
.vscode/settings.json
vendored
@ -1,17 +1,12 @@
|
|||||||
{
|
{
|
||||||
|
"python.formatting.provider": "black",
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
"Dupras",
|
"Dupras",
|
||||||
"hscommon"
|
"hscommon"
|
||||||
],
|
],
|
||||||
"editor.rulers": [
|
|
||||||
88,
|
|
||||||
120
|
|
||||||
],
|
|
||||||
"python.languageServer": "Pylance",
|
"python.languageServer": "Pylance",
|
||||||
"yaml.schemaStore.enable": true,
|
"yaml.schemaStore.enable": true,
|
||||||
"[python]": {
|
"yaml.schemas": {
|
||||||
"editor.formatOnSave": true,
|
"https://json.schemastore.org/github-workflow.json": ".github/workflows/*.yml"
|
||||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
}
|
||||||
},
|
|
||||||
"python.testing.pytestEnabled": true
|
|
||||||
}
|
}
|
1
LICENSE
1
LICENSE
@ -619,3 +619,4 @@ Program, unless a warranty or assumption of liability accompanies a
|
|||||||
copy of the Program in return for a fee.
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
1
build.py
1
build.py
@ -129,7 +129,6 @@ def build_normal():
|
|||||||
print("Building localizations")
|
print("Building localizations")
|
||||||
build_localizations()
|
build_localizations()
|
||||||
print("Building Qt stuff")
|
print("Building Qt stuff")
|
||||||
Path("qt", "dg_rc.py").unlink(missing_ok=True)
|
|
||||||
print_and_do("pyrcc5 {} > {}".format(Path("qt", "dg.qrc"), Path("qt", "dg_rc.py")))
|
print_and_do("pyrcc5 {} > {}".format(Path("qt", "dg.qrc"), Path("qt", "dg_rc.py")))
|
||||||
fix_qt_resource_file(Path("qt", "dg_rc.py"))
|
fix_qt_resource_file(Path("qt", "dg_rc.py"))
|
||||||
build_help()
|
build_help()
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
const Configuration = {
|
|
||||||
/*
|
|
||||||
* Resolve and load @commitlint/config-conventional from node_modules.
|
|
||||||
* Referenced packages must be installed
|
|
||||||
*/
|
|
||||||
extends: ['@commitlint/config-conventional'],
|
|
||||||
/*
|
|
||||||
* Any rules defined here will override rules from @commitlint/config-conventional
|
|
||||||
*/
|
|
||||||
rules: {
|
|
||||||
'header-max-length': [2, 'always', 72],
|
|
||||||
'subject-case': [2, 'always', 'sentence-case'],
|
|
||||||
'scope-enum': [2, 'always'],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = Configuration;
|
|
13
core/app.py
13
core/app.py
@ -126,6 +126,8 @@ class DupeGuru(Broadcaster):
|
|||||||
|
|
||||||
NAME = PROMPT_NAME = "dupeGuru"
|
NAME = PROMPT_NAME = "dupeGuru"
|
||||||
|
|
||||||
|
PICTURE_CACHE_TYPE = "sqlite" # set to 'shelve' for a ShelveCache
|
||||||
|
|
||||||
def __init__(self, view, portable=False):
|
def __init__(self, view, portable=False):
|
||||||
if view.get_default(DEBUG_MODE_PREFERENCE):
|
if view.get_default(DEBUG_MODE_PREFERENCE):
|
||||||
logging.getLogger().setLevel(logging.DEBUG)
|
logging.getLogger().setLevel(logging.DEBUG)
|
||||||
@ -151,8 +153,7 @@ class DupeGuru(Broadcaster):
|
|||||||
"clean_empty_dirs": False,
|
"clean_empty_dirs": False,
|
||||||
"ignore_hardlink_matches": False,
|
"ignore_hardlink_matches": False,
|
||||||
"copymove_dest_type": DestType.RELATIVE,
|
"copymove_dest_type": DestType.RELATIVE,
|
||||||
"include_exists_check": True,
|
"picture_cache_type": self.PICTURE_CACHE_TYPE,
|
||||||
"rehash_ignore_mtime": False,
|
|
||||||
}
|
}
|
||||||
self.selected_dupes = []
|
self.selected_dupes = []
|
||||||
self.details_panel = DetailsPanel(self)
|
self.details_panel = DetailsPanel(self)
|
||||||
@ -182,7 +183,8 @@ class DupeGuru(Broadcaster):
|
|||||||
self.view.create_results_window()
|
self.view.create_results_window()
|
||||||
|
|
||||||
def _get_picture_cache_path(self):
|
def _get_picture_cache_path(self):
|
||||||
cache_name = "cached_pictures.db"
|
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)
|
return op.join(self.appdata, cache_name)
|
||||||
|
|
||||||
def _get_dupe_sort_key(self, dupe, get_group, key, delta):
|
def _get_dupe_sort_key(self, dupe, get_group, key, delta):
|
||||||
@ -553,9 +555,7 @@ class DupeGuru(Broadcaster):
|
|||||||
# a workaround to make the damn thing work.
|
# a workaround to make the damn thing work.
|
||||||
exepath, args = match.groups()
|
exepath, args = match.groups()
|
||||||
path, exename = op.split(exepath)
|
path, exename = op.split(exepath)
|
||||||
p = subprocess.Popen(
|
p = subprocess.Popen(exename + args, shell=True, cwd=path, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||||
exename + args, shell=True, cwd=path, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
|
|
||||||
)
|
|
||||||
output = p.stdout.read()
|
output = p.stdout.read()
|
||||||
logging.info("Custom command %s %s: %s", exename, args, output)
|
logging.info("Custom command %s %s: %s", exename, args, output)
|
||||||
else:
|
else:
|
||||||
@ -792,7 +792,6 @@ class DupeGuru(Broadcaster):
|
|||||||
Scans folders selected in :attr:`directories` and put the results in :attr:`results`
|
Scans folders selected in :attr:`directories` and put the results in :attr:`results`
|
||||||
"""
|
"""
|
||||||
scanner = self.SCANNER_CLASS()
|
scanner = self.SCANNER_CLASS()
|
||||||
fs.filesdb.ignore_mtime = self.options["rehash_ignore_mtime"] is True
|
|
||||||
if not self.directories.has_any_file():
|
if not self.directories.has_any_file():
|
||||||
self.view.show_message(tr("The selected directories contain no scannable file."))
|
self.view.show_message(tr("The selected directories contain no scannable file."))
|
||||||
return
|
return
|
||||||
|
@ -84,11 +84,10 @@ class Directories:
|
|||||||
for denied_path_re in self._exclude_list.compiled:
|
for denied_path_re in self._exclude_list.compiled:
|
||||||
if denied_path_re.match(str(path.name)):
|
if denied_path_re.match(str(path.name)):
|
||||||
return DirectoryState.EXCLUDED
|
return DirectoryState.EXCLUDED
|
||||||
return DirectoryState.NORMAL
|
# return # We still use the old logic to force state on hidden dirs
|
||||||
# Override this in subclasses to specify the state of some special folders.
|
# Override this in subclasses to specify the state of some special folders.
|
||||||
if path.name.startswith("."):
|
if path.name.startswith("."):
|
||||||
return DirectoryState.EXCLUDED
|
return DirectoryState.EXCLUDED
|
||||||
return DirectoryState.NORMAL
|
|
||||||
|
|
||||||
def _get_files(self, from_path, fileclasses, j):
|
def _get_files(self, from_path, fileclasses, j):
|
||||||
try:
|
try:
|
||||||
@ -187,7 +186,7 @@ class Directories:
|
|||||||
for path in self._dirs:
|
for path in self._dirs:
|
||||||
for file in self._get_files(path, fileclasses=fileclasses, j=j):
|
for file in self._get_files(path, fileclasses=fileclasses, j=j):
|
||||||
file_count += 1
|
file_count += 1
|
||||||
if not isinstance(j, job.NullJob):
|
if type(j) != job.NullJob:
|
||||||
j.set_progress(-1, tr("Collected {} files to scan").format(file_count))
|
j.set_progress(-1, tr("Collected {} files to scan").format(file_count))
|
||||||
yield file
|
yield file
|
||||||
|
|
||||||
@ -203,7 +202,7 @@ class Directories:
|
|||||||
from_folder = folderclass(path)
|
from_folder = folderclass(path)
|
||||||
for folder in self._get_folders(from_folder, j):
|
for folder in self._get_folders(from_folder, j):
|
||||||
folder_count += 1
|
folder_count += 1
|
||||||
if not isinstance(j, job.NullJob):
|
if type(j) != job.NullJob:
|
||||||
j.set_progress(-1, tr("Collected {} folders to scan").format(folder_count))
|
j.set_progress(-1, tr("Collected {} folders to scan").format(folder_count))
|
||||||
yield folder
|
yield folder
|
||||||
|
|
||||||
@ -215,7 +214,7 @@ class Directories:
|
|||||||
# direct match? easy result.
|
# direct match? easy result.
|
||||||
if path in self.states:
|
if path in self.states:
|
||||||
return self.states[path]
|
return self.states[path]
|
||||||
state = self._default_state_for_path(path)
|
state = self._default_state_for_path(path) or DirectoryState.NORMAL
|
||||||
# Save non-default states in cache, necessary for _get_files()
|
# Save non-default states in cache, necessary for _get_files()
|
||||||
if state != DirectoryState.NORMAL:
|
if state != DirectoryState.NORMAL:
|
||||||
self.states[path] = state
|
self.states[path] = state
|
||||||
|
@ -304,12 +304,12 @@ def getmatches_by_contents(files, bigsize=0, j=job.nulljob):
|
|||||||
result.append(Match(first, second, 100))
|
result.append(Match(first, second, 100))
|
||||||
continue
|
continue
|
||||||
# if digests are the same (and not None) then files match
|
# if digests are the same (and not None) then files match
|
||||||
if first.digest_partial is not None and first.digest_partial == second.digest_partial:
|
if first.digest_partial == second.digest_partial and first.digest_partial is not None:
|
||||||
if bigsize > 0 and first.size > bigsize:
|
if bigsize > 0 and first.size > bigsize:
|
||||||
if first.digest_samples is not None and first.digest_samples == second.digest_samples:
|
if first.digest_samples == second.digest_samples and first.digest_samples is not None:
|
||||||
result.append(Match(first, second, 100))
|
result.append(Match(first, second, 100))
|
||||||
else:
|
else:
|
||||||
if first.digest is not None and first.digest == second.digest:
|
if first.digest == second.digest and first.digest is not None:
|
||||||
result.append(Match(first, second, 100))
|
result.append(Match(first, second, 100))
|
||||||
group_count += 1
|
group_count += 1
|
||||||
j.add_progress(desc=PROGRESS_MESSAGE % (len(result), group_count))
|
j.add_progress(desc=PROGRESS_MESSAGE % (len(result), group_count))
|
||||||
|
86
core/fs.py
86
core/fs.py
@ -16,7 +16,6 @@ import os
|
|||||||
from math import floor
|
from math import floor
|
||||||
import logging
|
import logging
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from sys import platform
|
|
||||||
from threading import Lock
|
from threading import Lock
|
||||||
from typing import Any, AnyStr, Union, Callable
|
from typing import Any, AnyStr, Union, Callable
|
||||||
|
|
||||||
@ -55,9 +54,6 @@ CHUNK_SIZE = 1024 * 1024 # 1 MiB
|
|||||||
# Minimum size below which partial hashing is not used
|
# Minimum size below which partial hashing is not used
|
||||||
MIN_FILE_SIZE = 3 * CHUNK_SIZE # 3MiB, because we take 3 samples
|
MIN_FILE_SIZE = 3 * CHUNK_SIZE # 3MiB, because we take 3 samples
|
||||||
|
|
||||||
# Partial hashing offset and size
|
|
||||||
PARTIAL_OFFSET_SIZE = (0x4000, 0x4000)
|
|
||||||
|
|
||||||
|
|
||||||
class FSError(Exception):
|
class FSError(Exception):
|
||||||
cls_message = "An error has occured on '{name}' in '{parent}'"
|
cls_message = "An error has occured on '{name}' in '{parent}'"
|
||||||
@ -101,71 +97,59 @@ class FilesDB:
|
|||||||
schema_version = 1
|
schema_version = 1
|
||||||
schema_version_description = "Changed from md5 to xxhash if available."
|
schema_version_description = "Changed from md5 to xxhash if available."
|
||||||
|
|
||||||
create_table_query = """CREATE TABLE IF NOT EXISTS files (path TEXT PRIMARY KEY, size INTEGER, mtime_ns INTEGER,
|
create_table_query = "CREATE TABLE IF NOT EXISTS files (path TEXT PRIMARY KEY, size INTEGER, mtime_ns INTEGER, entry_dt DATETIME, digest BLOB, digest_partial BLOB, digest_samples BLOB)"
|
||||||
entry_dt DATETIME, digest BLOB, digest_partial BLOB, digest_samples BLOB)"""
|
|
||||||
drop_table_query = "DROP TABLE IF EXISTS files;"
|
drop_table_query = "DROP TABLE IF EXISTS files;"
|
||||||
select_query = "SELECT {key} FROM files WHERE path=:path AND size=:size and mtime_ns=:mtime_ns"
|
select_query = "SELECT {key} FROM files WHERE path=:path AND size=:size and mtime_ns=:mtime_ns"
|
||||||
select_query_ignore_mtime = "SELECT {key} FROM files WHERE path=:path AND size=:size"
|
|
||||||
insert_query = """
|
insert_query = """
|
||||||
INSERT INTO files (path, size, mtime_ns, entry_dt, {key})
|
INSERT INTO files (path, size, mtime_ns, entry_dt, {key}) VALUES (:path, :size, :mtime_ns, datetime('now'), :value)
|
||||||
VALUES (:path, :size, :mtime_ns, datetime('now'), :value)
|
|
||||||
ON CONFLICT(path) DO UPDATE SET size=:size, mtime_ns=:mtime_ns, entry_dt=datetime('now'), {key}=:value;
|
ON CONFLICT(path) DO UPDATE SET size=:size, mtime_ns=:mtime_ns, entry_dt=datetime('now'), {key}=:value;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ignore_mtime = False
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.conn = None
|
self.conn = None
|
||||||
|
self.cur = None
|
||||||
self.lock = None
|
self.lock = None
|
||||||
|
|
||||||
def connect(self, path: Union[AnyStr, os.PathLike]) -> None:
|
def connect(self, path: Union[AnyStr, os.PathLike]) -> None:
|
||||||
if platform.startswith("gnu0"):
|
|
||||||
self.conn = sqlite3.connect(path, check_same_thread=False, isolation_level=None)
|
|
||||||
else:
|
|
||||||
self.conn = sqlite3.connect(path, check_same_thread=False)
|
self.conn = sqlite3.connect(path, check_same_thread=False)
|
||||||
|
self.cur = self.conn.cursor()
|
||||||
self.lock = Lock()
|
self.lock = Lock()
|
||||||
self._check_upgrade()
|
self._check_upgrade()
|
||||||
|
|
||||||
def _check_upgrade(self) -> None:
|
def _check_upgrade(self) -> None:
|
||||||
with self.lock, self.conn as conn:
|
with self.lock:
|
||||||
has_schema = conn.execute(
|
has_schema = self.cur.execute(
|
||||||
"SELECT NAME FROM sqlite_master WHERE type='table' AND name='schema_version'"
|
"SELECT NAME FROM sqlite_master WHERE type='table' AND name='schema_version'"
|
||||||
).fetchall()
|
).fetchall()
|
||||||
version = None
|
version = None
|
||||||
if has_schema:
|
if has_schema:
|
||||||
version = conn.execute("SELECT version FROM schema_version ORDER BY version DESC").fetchone()[0]
|
version = self.cur.execute("SELECT version FROM schema_version ORDER BY version DESC").fetchone()[0]
|
||||||
else:
|
else:
|
||||||
conn.execute("CREATE TABLE schema_version (version int PRIMARY KEY, description TEXT)")
|
self.cur.execute("CREATE TABLE schema_version (version int PRIMARY KEY, description TEXT)")
|
||||||
if version != self.schema_version:
|
if version != self.schema_version:
|
||||||
conn.execute(self.drop_table_query)
|
self.cur.execute(self.drop_table_query)
|
||||||
conn.execute(
|
self.cur.execute(
|
||||||
"INSERT OR REPLACE INTO schema_version VALUES (:version, :description)",
|
"INSERT OR REPLACE INTO schema_version VALUES (:version, :description)",
|
||||||
{"version": self.schema_version, "description": self.schema_version_description},
|
{"version": self.schema_version, "description": self.schema_version_description},
|
||||||
)
|
)
|
||||||
conn.execute(self.create_table_query)
|
self.cur.execute(self.create_table_query)
|
||||||
|
self.conn.commit()
|
||||||
|
|
||||||
def clear(self) -> None:
|
def clear(self) -> None:
|
||||||
with self.lock, self.conn as conn:
|
with self.lock:
|
||||||
conn.execute(self.drop_table_query)
|
self.cur.execute(self.drop_table_query)
|
||||||
conn.execute(self.create_table_query)
|
self.cur.execute(self.create_table_query)
|
||||||
|
|
||||||
def get(self, path: Path, key: str) -> Union[bytes, None]:
|
def get(self, path: Path, key: str) -> Union[bytes, None]:
|
||||||
stat = path.stat()
|
stat = path.stat()
|
||||||
size = stat.st_size
|
size = stat.st_size
|
||||||
mtime_ns = stat.st_mtime_ns
|
mtime_ns = stat.st_mtime_ns
|
||||||
try:
|
try:
|
||||||
with self.conn as conn:
|
with self.lock:
|
||||||
if self.ignore_mtime:
|
self.cur.execute(
|
||||||
cursor = conn.execute(
|
self.select_query.format(key=key), {"path": str(path), "size": size, "mtime_ns": mtime_ns}
|
||||||
self.select_query_ignore_mtime.format(key=key), {"path": str(path), "size": size}
|
|
||||||
)
|
)
|
||||||
else:
|
result = self.cur.fetchone()
|
||||||
cursor = conn.execute(
|
|
||||||
self.select_query.format(key=key),
|
|
||||||
{"path": str(path), "size": size, "mtime_ns": mtime_ns},
|
|
||||||
)
|
|
||||||
result = cursor.fetchone()
|
|
||||||
cursor.close()
|
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result[0]
|
return result[0]
|
||||||
@ -179,8 +163,8 @@ class FilesDB:
|
|||||||
size = stat.st_size
|
size = stat.st_size
|
||||||
mtime_ns = stat.st_mtime_ns
|
mtime_ns = stat.st_mtime_ns
|
||||||
try:
|
try:
|
||||||
with self.lock, self.conn as conn:
|
with self.lock:
|
||||||
conn.execute(
|
self.cur.execute(
|
||||||
self.insert_query.format(key=key),
|
self.insert_query.format(key=key),
|
||||||
{"path": str(path), "size": size, "mtime_ns": mtime_ns, "value": value},
|
{"path": str(path), "size": size, "mtime_ns": mtime_ns, "value": value},
|
||||||
)
|
)
|
||||||
@ -193,6 +177,7 @@ class FilesDB:
|
|||||||
|
|
||||||
def close(self) -> None:
|
def close(self) -> None:
|
||||||
with self.lock:
|
with self.lock:
|
||||||
|
self.cur.close()
|
||||||
self.conn.close()
|
self.conn.close()
|
||||||
|
|
||||||
|
|
||||||
@ -206,7 +191,7 @@ class File:
|
|||||||
# Slots for File make us save quite a bit of memory. In a memory test I've made with a lot of
|
# Slots for File make us save quite a bit of memory. In a memory test I've made with a lot of
|
||||||
# files, I saved 35% memory usage with "unread" files (no _read_info() call) and gains become
|
# files, I saved 35% memory usage with "unread" files (no _read_info() call) and gains become
|
||||||
# even greater when we take into account read attributes (70%!). Yeah, it's worth it.
|
# even greater when we take into account read attributes (70%!). Yeah, it's worth it.
|
||||||
__slots__ = ("path", "unicode_path", "is_ref", "words") + tuple(INITIAL_INFO.keys())
|
__slots__ = ("path", "is_ref", "words") + tuple(INITIAL_INFO.keys())
|
||||||
|
|
||||||
def __init__(self, path):
|
def __init__(self, path):
|
||||||
for attrname in self.INITIAL_INFO:
|
for attrname in self.INITIAL_INFO:
|
||||||
@ -217,8 +202,6 @@ class File:
|
|||||||
self.mtime = nonone(path.stat().st_mtime, 0)
|
self.mtime = nonone(path.stat().st_mtime, 0)
|
||||||
else:
|
else:
|
||||||
self.path = path
|
self.path = path
|
||||||
if self.path:
|
|
||||||
self.unicode_path = str(self.path)
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<{self.__class__.__name__} {str(self.path)}>"
|
return f"<{self.__class__.__name__} {str(self.path)}>"
|
||||||
@ -252,9 +235,14 @@ class File:
|
|||||||
|
|
||||||
def _calc_digest_partial(self):
|
def _calc_digest_partial(self):
|
||||||
# type: () -> bytes
|
# type: () -> bytes
|
||||||
|
|
||||||
|
# This offset is where we should start reading the file to get a partial hash
|
||||||
|
# For audio file, it should be where audio data starts
|
||||||
|
offset, size = (0x4000, 0x4000)
|
||||||
|
|
||||||
with self.path.open("rb") as fp:
|
with self.path.open("rb") as fp:
|
||||||
fp.seek(PARTIAL_OFFSET_SIZE[0])
|
fp.seek(offset)
|
||||||
partial_data = fp.read(PARTIAL_OFFSET_SIZE[1])
|
partial_data = fp.read(size)
|
||||||
return hasher(partial_data).digest()
|
return hasher(partial_data).digest()
|
||||||
|
|
||||||
def _calc_digest_samples(self) -> bytes:
|
def _calc_digest_samples(self) -> bytes:
|
||||||
@ -285,10 +273,6 @@ class File:
|
|||||||
elif field == "digest_partial":
|
elif field == "digest_partial":
|
||||||
self.digest_partial = filesdb.get(self.path, "digest_partial")
|
self.digest_partial = filesdb.get(self.path, "digest_partial")
|
||||||
if self.digest_partial is None:
|
if self.digest_partial is None:
|
||||||
# If file is smaller than partial requirements just use the full digest
|
|
||||||
if self.size < PARTIAL_OFFSET_SIZE[0] + PARTIAL_OFFSET_SIZE[1]:
|
|
||||||
self.digest_partial = self.digest
|
|
||||||
else:
|
|
||||||
self.digest_partial = self._calc_digest_partial()
|
self.digest_partial = self._calc_digest_partial()
|
||||||
filesdb.put(self.path, "digest_partial", self.digest_partial)
|
filesdb.put(self.path, "digest_partial", self.digest_partial)
|
||||||
elif field == "digest":
|
elif field == "digest":
|
||||||
@ -300,7 +284,7 @@ class File:
|
|||||||
size = self.size
|
size = self.size
|
||||||
# Might as well hash such small files entirely.
|
# Might as well hash such small files entirely.
|
||||||
if size <= MIN_FILE_SIZE:
|
if size <= MIN_FILE_SIZE:
|
||||||
self.digest_samples = self.digest
|
setattr(self, field, self.digest)
|
||||||
return
|
return
|
||||||
self.digest_samples = filesdb.get(self.path, "digest_samples")
|
self.digest_samples = filesdb.get(self.path, "digest_samples")
|
||||||
if self.digest_samples is None:
|
if self.digest_samples is None:
|
||||||
@ -323,14 +307,6 @@ class File:
|
|||||||
"""Returns whether this file wrapper class can handle ``path``."""
|
"""Returns whether this file wrapper class can handle ``path``."""
|
||||||
return not path.is_symlink() and path.is_file()
|
return not path.is_symlink() and path.is_file()
|
||||||
|
|
||||||
def exists(self) -> bool:
|
|
||||||
"""Safely check if the underlying file exists, treat error as non-existent"""
|
|
||||||
try:
|
|
||||||
return self.path.exists()
|
|
||||||
except OSError as ex:
|
|
||||||
logging.warning(f"Checking {self.path} raised: {ex}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
def rename(self, newname):
|
def rename(self, newname):
|
||||||
if newname == self.name:
|
if newname == self.name:
|
||||||
return
|
return
|
||||||
|
@ -4,13 +4,24 @@
|
|||||||
# which should be included with this package. The terms are also available at
|
# which should be included with this package. The terms are also available at
|
||||||
# http://www.gnu.org/licenses/gpl-3.0.html
|
# http://www.gnu.org/licenses/gpl-3.0.html
|
||||||
|
|
||||||
from core.pe._cache import bytes_to_colors # noqa
|
from core.pe._cache import string_to_colors # noqa
|
||||||
|
|
||||||
|
|
||||||
def colors_to_bytes(colors):
|
def colors_to_string(colors):
|
||||||
"""Transform the 3 sized tuples 'colors' into a bytes string.
|
"""Transform the 3 sized tuples 'colors' into a hex string.
|
||||||
|
|
||||||
[(0,100,255)] --> b'\x00d\xff'
|
[(0,100,255)] --> 0064ff
|
||||||
[(1,2,3),(4,5,6)] --> b'\x01\x02\x03\x04\x05\x06'
|
[(1,2,3),(4,5,6)] --> 010203040506
|
||||||
"""
|
"""
|
||||||
return b"".join(map(bytes, colors))
|
return "".join("{:02x}{:02x}{:02x}".format(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):
|
||||||
|
# """Transform the string 's' in a list of 3 sized tuples.
|
||||||
|
# """
|
||||||
|
# result = []
|
||||||
|
# for i in xrange(0, len(s), 6):
|
||||||
|
# number = int(s[i:i+6], 16)
|
||||||
|
# result.append((number >> 16, (number >> 8) & 0xff, number & 0xff))
|
||||||
|
# return result
|
||||||
|
@ -2,5 +2,5 @@ from typing import Union, Tuple, List
|
|||||||
|
|
||||||
_block = Tuple[int, int, int]
|
_block = Tuple[int, int, int]
|
||||||
|
|
||||||
def colors_to_bytes(colors: List[_block]) -> bytes: ... # noqa: E302
|
def colors_to_string(colors: List[_block]) -> str: ... # noqa: E302
|
||||||
def bytes_to_colors(s: bytes) -> Union[List[_block], None]: ...
|
def string_to_colors(s: str) -> Union[List[_block], None]: ...
|
||||||
|
141
core/pe/cache_shelve.py
Normal file
141
core/pe/cache_shelve.py
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
# 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 core.pe.cache import string_to_colors, colors_to_string
|
||||||
|
|
||||||
|
|
||||||
|
def wrap_path(path):
|
||||||
|
return f"path:{path}"
|
||||||
|
|
||||||
|
|
||||||
|
def unwrap_path(key):
|
||||||
|
return key[5:]
|
||||||
|
|
||||||
|
|
||||||
|
def wrap_id(path):
|
||||||
|
return f"id:{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:
|
||||||
|
try:
|
||||||
|
del self[path]
|
||||||
|
except KeyError:
|
||||||
|
# I have no idea why a KeyError sometimes happen, but it does, as we can see in
|
||||||
|
# #402 and #439. I don't think it hurts to silently ignore the error, so that's
|
||||||
|
# what we do
|
||||||
|
pass
|
@ -9,24 +9,12 @@ import os.path as op
|
|||||||
import logging
|
import logging
|
||||||
import sqlite3 as sqlite
|
import sqlite3 as sqlite
|
||||||
|
|
||||||
from core.pe.cache import bytes_to_colors, colors_to_bytes
|
from core.pe.cache import string_to_colors, colors_to_string
|
||||||
|
|
||||||
|
|
||||||
class SqliteCache:
|
class SqliteCache:
|
||||||
"""A class to cache picture blocks in a sqlite backend."""
|
"""A class to cache picture blocks in a sqlite backend."""
|
||||||
|
|
||||||
schema_version = 2
|
|
||||||
schema_version_description = "Added blocks for all 8 orientations."
|
|
||||||
|
|
||||||
create_table_query = (
|
|
||||||
"CREATE TABLE IF NOT EXISTS "
|
|
||||||
"pictures(path TEXT, mtime_ns INTEGER, blocks BLOB, blocks2 BLOB, blocks3 BLOB, "
|
|
||||||
"blocks4 BLOB, blocks5 BLOB, blocks6 BLOB, blocks7 BLOB, blocks8 BLOB)"
|
|
||||||
)
|
|
||||||
create_index_query = "CREATE INDEX IF NOT EXISTS idx_path on pictures (path)"
|
|
||||||
drop_table_query = "DROP TABLE IF EXISTS pictures"
|
|
||||||
drop_index_query = "DROP INDEX IF EXISTS idx_path"
|
|
||||||
|
|
||||||
def __init__(self, db=":memory:", readonly=False):
|
def __init__(self, db=":memory:", readonly=False):
|
||||||
# readonly is not used in the sqlite version of the cache
|
# readonly is not used in the sqlite version of the cache
|
||||||
self.dbname = db
|
self.dbname = db
|
||||||
@ -47,20 +35,12 @@ class SqliteCache:
|
|||||||
# Optimized
|
# Optimized
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
if isinstance(key, int):
|
if isinstance(key, int):
|
||||||
sql = (
|
sql = "select blocks from pictures where rowid = ?"
|
||||||
"select blocks, blocks2, blocks3, blocks4, blocks5, blocks6, blocks7, blocks8 "
|
|
||||||
"from pictures "
|
|
||||||
"where rowid = ?"
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
sql = (
|
sql = "select blocks from pictures where path = ?"
|
||||||
"select blocks, blocks2, blocks3, blocks4, blocks5, blocks6, blocks7, blocks8 "
|
result = self.con.execute(sql, [key]).fetchone()
|
||||||
"from pictures "
|
if result:
|
||||||
"where path = ?"
|
result = string_to_colors(result[0])
|
||||||
)
|
|
||||||
blocks = self.con.execute(sql, [key]).fetchone()
|
|
||||||
if blocks:
|
|
||||||
result = [bytes_to_colors(block) for block in blocks]
|
|
||||||
return result
|
return result
|
||||||
else:
|
else:
|
||||||
raise KeyError(key)
|
raise KeyError(key)
|
||||||
@ -76,33 +56,35 @@ class SqliteCache:
|
|||||||
return result[0][0]
|
return result[0][0]
|
||||||
|
|
||||||
def __setitem__(self, path_str, blocks):
|
def __setitem__(self, path_str, blocks):
|
||||||
blocks = [colors_to_bytes(block) for block in blocks]
|
blocks = colors_to_string(blocks)
|
||||||
if op.exists(path_str):
|
if op.exists(path_str):
|
||||||
mtime = int(os.stat(path_str).st_mtime)
|
mtime = int(os.stat(path_str).st_mtime)
|
||||||
else:
|
else:
|
||||||
mtime = 0
|
mtime = 0
|
||||||
if path_str in self:
|
if path_str in self:
|
||||||
sql = (
|
sql = "update pictures set blocks = ?, mtime = ? where path = ?"
|
||||||
"update pictures set blocks = ?, blocks2 = ?, blocks3 = ?, blocks4 = ?, blocks5 = ?, blocks6 = ?, "
|
|
||||||
"blocks7 = ?, blocks8 = ?, mtime_ns = ?"
|
|
||||||
"where path = ?"
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
sql = (
|
sql = "insert into pictures(blocks,mtime,path) values(?,?,?)"
|
||||||
"insert into pictures(blocks,blocks2,blocks3,blocks4,blocks5,blocks6,blocks7,blocks8,mtime_ns,path) "
|
|
||||||
"values(?,?,?,?,?,?,?,?,?,?)"
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
self.con.execute(sql, blocks + [mtime, path_str])
|
self.con.execute(sql, [blocks, mtime, path_str])
|
||||||
except sqlite.OperationalError:
|
except sqlite.OperationalError:
|
||||||
logging.warning("Picture cache could not set value for key %r", path_str)
|
logging.warning("Picture cache could not set value for key %r", path_str)
|
||||||
except sqlite.DatabaseError as e:
|
except sqlite.DatabaseError as e:
|
||||||
logging.warning("DatabaseError while setting value for key %r: %s", path_str, str(e))
|
logging.warning("DatabaseError while setting value for key %r: %s", path_str, str(e))
|
||||||
|
|
||||||
def _create_con(self, second_try=False):
|
def _create_con(self, second_try=False):
|
||||||
try:
|
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)
|
self.con = sqlite.connect(self.dbname, isolation_level=None)
|
||||||
self._check_upgrade()
|
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
|
except sqlite.DatabaseError as e: # corrupted db
|
||||||
if second_try:
|
if second_try:
|
||||||
raise # Something really strange is happening
|
raise # Something really strange is happening
|
||||||
@ -111,25 +93,6 @@ class SqliteCache:
|
|||||||
os.remove(self.dbname)
|
os.remove(self.dbname)
|
||||||
self._create_con(second_try=True)
|
self._create_con(second_try=True)
|
||||||
|
|
||||||
def _check_upgrade(self) -> None:
|
|
||||||
with self.con as conn:
|
|
||||||
has_schema = conn.execute(
|
|
||||||
"SELECT NAME FROM sqlite_master WHERE type='table' AND name='schema_version'"
|
|
||||||
).fetchall()
|
|
||||||
version = None
|
|
||||||
if has_schema:
|
|
||||||
version = conn.execute("SELECT version FROM schema_version ORDER BY version DESC").fetchone()[0]
|
|
||||||
else:
|
|
||||||
conn.execute("CREATE TABLE schema_version (version int PRIMARY KEY, description TEXT)")
|
|
||||||
if version != self.schema_version:
|
|
||||||
conn.execute(self.drop_table_query)
|
|
||||||
conn.execute(
|
|
||||||
"INSERT OR REPLACE INTO schema_version VALUES (:version, :description)",
|
|
||||||
{"version": self.schema_version, "description": self.schema_version_description},
|
|
||||||
)
|
|
||||||
conn.execute(self.create_table_query)
|
|
||||||
conn.execute(self.create_index_query)
|
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
self.close()
|
self.close()
|
||||||
if self.dbname != ":memory:":
|
if self.dbname != ":memory:":
|
||||||
@ -155,28 +118,9 @@ class SqliteCache:
|
|||||||
raise ValueError(path)
|
raise ValueError(path)
|
||||||
|
|
||||||
def get_multiple(self, rowids):
|
def get_multiple(self, rowids):
|
||||||
ids = ",".join(map(str, rowids))
|
sql = "select rowid, blocks from pictures where rowid in (%s)" % ",".join(map(str, rowids))
|
||||||
sql = (
|
|
||||||
"select rowid, blocks, blocks2, blocks3, blocks4, blocks5, blocks6, blocks7, blocks8 "
|
|
||||||
f"from pictures where rowid in ({ids})"
|
|
||||||
)
|
|
||||||
cur = self.con.execute(sql)
|
cur = self.con.execute(sql)
|
||||||
return (
|
return ((rowid, string_to_colors(blocks)) for rowid, blocks in cur)
|
||||||
(
|
|
||||||
rowid,
|
|
||||||
[
|
|
||||||
bytes_to_colors(blocks),
|
|
||||||
bytes_to_colors(blocks2),
|
|
||||||
bytes_to_colors(blocks3),
|
|
||||||
bytes_to_colors(blocks4),
|
|
||||||
bytes_to_colors(blocks5),
|
|
||||||
bytes_to_colors(blocks6),
|
|
||||||
bytes_to_colors(blocks7),
|
|
||||||
bytes_to_colors(blocks8),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
for rowid, blocks, blocks2, blocks3, blocks4, blocks5, blocks6, blocks7, blocks8 in cur
|
|
||||||
)
|
|
||||||
|
|
||||||
def purge_outdated(self):
|
def purge_outdated(self):
|
||||||
"""Go through the cache and purge outdated records.
|
"""Go through the cache and purge outdated records.
|
||||||
@ -185,12 +129,12 @@ class SqliteCache:
|
|||||||
the db.
|
the db.
|
||||||
"""
|
"""
|
||||||
todelete = []
|
todelete = []
|
||||||
sql = "select rowid, path, mtime_ns from pictures"
|
sql = "select rowid, path, mtime from pictures"
|
||||||
cur = self.con.execute(sql)
|
cur = self.con.execute(sql)
|
||||||
for rowid, path_str, mtime_ns in cur:
|
for rowid, path_str, mtime in cur:
|
||||||
if mtime_ns and op.exists(path_str):
|
if mtime and op.exists(path_str):
|
||||||
picture_mtime = os.stat(path_str).st_mtime
|
picture_mtime = os.stat(path_str).st_mtime
|
||||||
if int(picture_mtime) <= mtime_ns:
|
if int(picture_mtime) <= mtime:
|
||||||
# not outdated
|
# not outdated
|
||||||
continue
|
continue
|
||||||
todelete.append(rowid)
|
todelete.append(rowid)
|
||||||
|
@ -16,7 +16,6 @@ from hscommon.jobprogress import job
|
|||||||
|
|
||||||
from core.engine import Match
|
from core.engine import Match
|
||||||
from core.pe.block import avgdiff, DifferentBlockCountError, NoBlocksError
|
from core.pe.block import avgdiff, DifferentBlockCountError, NoBlocksError
|
||||||
from core.pe.cache_sqlite import SqliteCache
|
|
||||||
|
|
||||||
# OPTIMIZATION NOTES:
|
# OPTIMIZATION NOTES:
|
||||||
# The bottleneck of the matching phase is CPU, which is why we use multiprocessing. However, another
|
# The bottleneck of the matching phase is CPU, which is why we use multiprocessing. However, another
|
||||||
@ -28,7 +27,7 @@ from core.pe.cache_sqlite import SqliteCache
|
|||||||
# to files in other chunks. So chunkifying doesn't save us any actual comparison, but the advantage
|
# to files in other chunks. So chunkifying doesn't save us any actual comparison, but the advantage
|
||||||
# is that instead of reading blocks from disk number_of_files**2 times, we read it
|
# is that instead of reading blocks from disk number_of_files**2 times, we read it
|
||||||
# number_of_files*number_of_chunks times.
|
# number_of_files*number_of_chunks times.
|
||||||
# Determining the right chunk size is tricky, because if it's too big, too many blocks will be in
|
# Determining the right chunk size is tricky, bceause if it's too big, too many blocks will be in
|
||||||
# memory at the same time and we might end up with memory trashing, which is awfully slow. So,
|
# memory at the same time and we might end up with memory trashing, which is awfully slow. So,
|
||||||
# because our *real* bottleneck is CPU, the chunk size must simply be enough so that the CPU isn't
|
# because our *real* bottleneck is CPU, the chunk size must simply be enough so that the CPU isn't
|
||||||
# starved by Disk IOs.
|
# starved by Disk IOs.
|
||||||
@ -51,10 +50,17 @@ except Exception:
|
|||||||
|
|
||||||
|
|
||||||
def get_cache(cache_path, readonly=False):
|
def get_cache(cache_path, readonly=False):
|
||||||
|
if cache_path.endswith("shelve"):
|
||||||
|
from core.pe.cache_shelve import ShelveCache
|
||||||
|
|
||||||
|
return ShelveCache(cache_path, readonly=readonly)
|
||||||
|
else:
|
||||||
|
from core.pe.cache_sqlite import SqliteCache
|
||||||
|
|
||||||
return SqliteCache(cache_path, readonly=readonly)
|
return SqliteCache(cache_path, readonly=readonly)
|
||||||
|
|
||||||
|
|
||||||
def prepare_pictures(pictures, cache_path, with_dimensions, match_rotated, j=job.nulljob):
|
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
|
# 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
|
# 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
|
# MemoryError happens when trying to read an image file, which is freed from memory by the
|
||||||
@ -72,18 +78,13 @@ def prepare_pictures(pictures, cache_path, with_dimensions, match_rotated, j=job
|
|||||||
# entry in iPhoto library.
|
# entry in iPhoto library.
|
||||||
logging.warning("We have a picture with a null path here")
|
logging.warning("We have a picture with a null path here")
|
||||||
continue
|
continue
|
||||||
|
picture.unicode_path = str(picture.path)
|
||||||
logging.debug("Analyzing picture at %s", picture.unicode_path)
|
logging.debug("Analyzing picture at %s", picture.unicode_path)
|
||||||
if with_dimensions:
|
if with_dimensions:
|
||||||
picture.dimensions # pre-read dimensions
|
picture.dimensions # pre-read dimensions
|
||||||
try:
|
try:
|
||||||
if picture.unicode_path not in cache or (
|
if picture.unicode_path not in cache:
|
||||||
match_rotated and any(block == [] for block in cache[picture.unicode_path])
|
blocks = picture.get_blocks(BLOCK_COUNT_PER_SIDE)
|
||||||
):
|
|
||||||
if match_rotated:
|
|
||||||
blocks = [picture.get_blocks(BLOCK_COUNT_PER_SIDE, orientation) for orientation in range(1, 9)]
|
|
||||||
else:
|
|
||||||
blocks = [[]] * 8
|
|
||||||
blocks[max(picture.get_orientation() - 1, 0)] = picture.get_blocks(BLOCK_COUNT_PER_SIDE)
|
|
||||||
cache[picture.unicode_path] = blocks
|
cache[picture.unicode_path] = blocks
|
||||||
prepared.append(picture)
|
prepared.append(picture)
|
||||||
except (OSError, ValueError) as e:
|
except (OSError, ValueError) as e:
|
||||||
@ -124,13 +125,13 @@ def get_match(first, second, percentage):
|
|||||||
return Match(first, second, percentage)
|
return Match(first, second, percentage)
|
||||||
|
|
||||||
|
|
||||||
def async_compare(ref_ids, other_ids, dbname, threshold, picinfo, match_rotated=False):
|
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
|
# 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
|
# can be None. In this case, ref_ids has to be compared with itself
|
||||||
# picinfo is a dictionary {pic_id: (dimensions, is_ref)}
|
# picinfo is a dictionary {pic_id: (dimensions, is_ref)}
|
||||||
cache = get_cache(dbname, readonly=True)
|
cache = get_cache(dbname, readonly=True)
|
||||||
limit = 100 - threshold
|
limit = 100 - threshold
|
||||||
ref_pairs = list(cache.get_multiple(ref_ids)) # (rowid, [b, b2, ..., b8])
|
ref_pairs = list(cache.get_multiple(ref_ids))
|
||||||
if other_ids is not None:
|
if other_ids is not None:
|
||||||
other_pairs = list(cache.get_multiple(other_ids))
|
other_pairs = list(cache.get_multiple(other_ids))
|
||||||
comparisons_to_do = [(r, o) for r in ref_pairs for o in other_pairs]
|
comparisons_to_do = [(r, o) for r in ref_pairs for o in other_pairs]
|
||||||
@ -143,35 +144,22 @@ def async_compare(ref_ids, other_ids, dbname, threshold, picinfo, match_rotated=
|
|||||||
if ref_is_ref and other_is_ref:
|
if ref_is_ref and other_is_ref:
|
||||||
continue
|
continue
|
||||||
if ref_dimensions != other_dimensions:
|
if ref_dimensions != other_dimensions:
|
||||||
if match_rotated:
|
|
||||||
rotated_ref_dimensions = (ref_dimensions[1], ref_dimensions[0])
|
|
||||||
if rotated_ref_dimensions != other_dimensions:
|
|
||||||
continue
|
continue
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
orientation_range = 1
|
|
||||||
if match_rotated:
|
|
||||||
orientation_range = 8
|
|
||||||
|
|
||||||
for orientation_ref in range(orientation_range):
|
|
||||||
try:
|
try:
|
||||||
diff = avgdiff(ref_blocks[orientation_ref], other_blocks[0], limit, MIN_ITERATIONS)
|
diff = avgdiff(ref_blocks, other_blocks, limit, MIN_ITERATIONS)
|
||||||
percentage = 100 - diff
|
percentage = 100 - diff
|
||||||
except (DifferentBlockCountError, NoBlocksError):
|
except (DifferentBlockCountError, NoBlocksError):
|
||||||
percentage = 0
|
percentage = 0
|
||||||
if percentage >= threshold:
|
if percentage >= threshold:
|
||||||
results.append((ref_id, other_id, percentage))
|
results.append((ref_id, other_id, percentage))
|
||||||
break
|
|
||||||
|
|
||||||
cache.close()
|
cache.close()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
||||||
def getmatches(pictures, cache_path, threshold, match_scaled=False, match_rotated=False, j=job.nulljob):
|
def getmatches(pictures, cache_path, threshold, match_scaled=False, j=job.nulljob):
|
||||||
def get_picinfo(p):
|
def get_picinfo(p):
|
||||||
if match_scaled:
|
if match_scaled:
|
||||||
return ((None, None), p.is_ref)
|
return (None, p.is_ref)
|
||||||
else:
|
else:
|
||||||
return (p.dimensions, p.is_ref)
|
return (p.dimensions, p.is_ref)
|
||||||
|
|
||||||
@ -193,7 +181,7 @@ def getmatches(pictures, cache_path, threshold, match_scaled=False, match_rotate
|
|||||||
j.set_progress(comparison_count, progress_msg)
|
j.set_progress(comparison_count, progress_msg)
|
||||||
|
|
||||||
j = j.start_subjob([3, 7])
|
j = j.start_subjob([3, 7])
|
||||||
pictures = prepare_pictures(pictures, cache_path, not match_scaled, match_rotated, j=j)
|
pictures = prepare_pictures(pictures, cache_path, with_dimensions=not match_scaled, j=j)
|
||||||
j = j.start_subjob([9, 1], tr("Preparing for matching"))
|
j = j.start_subjob([9, 1], tr("Preparing for matching"))
|
||||||
cache = get_cache(cache_path)
|
cache = get_cache(cache_path)
|
||||||
id2picture = {}
|
id2picture = {}
|
||||||
@ -223,7 +211,7 @@ def getmatches(pictures, cache_path, threshold, match_scaled=False, match_rotate
|
|||||||
picinfo.update({p.cache_id: get_picinfo(p) for p in other_chunk})
|
picinfo.update({p.cache_id: get_picinfo(p) for p in other_chunk})
|
||||||
else:
|
else:
|
||||||
other_ids = None
|
other_ids = None
|
||||||
args = (ref_ids, other_ids, cache_path, threshold, picinfo, match_rotated)
|
args = (ref_ids, other_ids, cache_path, threshold, picinfo)
|
||||||
async_results.append(pool.apply_async(async_compare, args))
|
async_results.append(pool.apply_async(async_compare, args))
|
||||||
collect_results()
|
collect_results()
|
||||||
collect_results(collect_all=True)
|
collect_results(collect_all=True)
|
||||||
|
@ -2,36 +2,58 @@
|
|||||||
* Created On: 2010-01-30
|
* Created On: 2010-01-30
|
||||||
* Copyright 2014 Hardcoded Software (http://www.hardcoded.net)
|
* Copyright 2014 Hardcoded Software (http://www.hardcoded.net)
|
||||||
*
|
*
|
||||||
* This software is licensed under the "BSD" License as described in the
|
* This software is licensed under the "BSD" License as described in the "LICENSE" file,
|
||||||
* "LICENSE" file, which should be included with this package. The terms are
|
* which should be included with this package. The terms are also available at
|
||||||
* also available at http://www.hardcoded.net/licenses/bsd_license
|
* http://www.hardcoded.net/licenses/bsd_license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
static PyObject *cache_bytes_to_colors(PyObject *self, PyObject *args) {
|
/* I know that there strtol out there, but it requires a pointer to
|
||||||
char *y;
|
* a char, which would in turn require me to buffer my chars around,
|
||||||
Py_ssize_t char_count, i, color_count;
|
* making the whole process slower.
|
||||||
PyObject *result;
|
*/
|
||||||
unsigned long r, g, b;
|
static long
|
||||||
Py_ssize_t ci;
|
xchar_to_long(char c)
|
||||||
PyObject *color_tuple;
|
{
|
||||||
|
if ((c >= 48) && (c <= 57)) { /* 0-9 */
|
||||||
|
return c - 48;
|
||||||
|
}
|
||||||
|
else if ((c >= 65) && (c <= 70)) { /* A-F */
|
||||||
|
return c - 55;
|
||||||
|
}
|
||||||
|
else if ((c >= 97) && (c <= 102)) { /* a-f */
|
||||||
|
return c - 87;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "y#", &y, &char_count)) {
|
static PyObject*
|
||||||
|
cache_string_to_colors(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
Py_ssize_t char_count, color_count, i;
|
||||||
|
PyObject *result;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "s#", &s, &char_count)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
color_count = char_count / 3;
|
color_count = (char_count / 6);
|
||||||
result = PyList_New(color_count);
|
result = PyList_New(color_count);
|
||||||
if (result == NULL) {
|
if (result == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<color_count; i++) {
|
for (i=0; i<color_count; i++) {
|
||||||
ci = i * 3;
|
long r, g, b;
|
||||||
r = (unsigned char)y[ci];
|
Py_ssize_t ci;
|
||||||
g = (unsigned char)y[ci + 1];
|
PyObject *color_tuple;
|
||||||
b = (unsigned char)y[ci + 2];
|
|
||||||
|
ci = i * 6;
|
||||||
|
r = (xchar_to_long(s[ci]) << 4) + xchar_to_long(s[ci+1]);
|
||||||
|
g = (xchar_to_long(s[ci+2]) << 4) + xchar_to_long(s[ci+3]);
|
||||||
|
b = (xchar_to_long(s[ci+4]) << 4) + xchar_to_long(s[ci+5]);
|
||||||
|
|
||||||
color_tuple = inttuple(3, r, g, b);
|
color_tuple = inttuple(3, r, g, b);
|
||||||
if (color_tuple == NULL) {
|
if (color_tuple == NULL) {
|
||||||
@ -45,12 +67,13 @@ static PyObject *cache_bytes_to_colors(PyObject *self, PyObject *args) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static PyMethodDef CacheMethods[] = {
|
static PyMethodDef CacheMethods[] = {
|
||||||
{"bytes_to_colors", cache_bytes_to_colors, METH_VARARGS,
|
{"string_to_colors", cache_string_to_colors, METH_VARARGS,
|
||||||
"Transform the bytes 's' into a list of 3 sized tuples."},
|
"Transform the string 's' in a list of 3 sized tuples."},
|
||||||
{NULL, NULL, 0, NULL} /* Sentinel */
|
{NULL, NULL, 0, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct PyModuleDef CacheDef = {PyModuleDef_HEAD_INIT,
|
static struct PyModuleDef CacheDef = {
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
"_cache",
|
"_cache",
|
||||||
NULL,
|
NULL,
|
||||||
-1,
|
-1,
|
||||||
@ -58,9 +81,12 @@ static struct PyModuleDef CacheDef = {PyModuleDef_HEAD_INIT,
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL};
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
PyObject *PyInit__cache(void) {
|
PyObject *
|
||||||
|
PyInit__cache(void)
|
||||||
|
{
|
||||||
PyObject *m = PyModule_Create(&CacheDef);
|
PyObject *m = PyModule_Create(&CacheDef);
|
||||||
if (m == NULL) {
|
if (m == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -32,7 +32,7 @@ PyObject* inttuple(int n, ...)
|
|||||||
result = PyTuple_New(n);
|
result = PyTuple_New(n);
|
||||||
|
|
||||||
for (i=0; i<n; i++) {
|
for (i=0; i<n; i++) {
|
||||||
pnumber = PyLong_FromUnsignedLong(va_arg(numbers, long));
|
pnumber = PyLong_FromLong(va_arg(numbers, long));
|
||||||
if (pnumber == NULL) {
|
if (pnumber == NULL) {
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -29,7 +29,7 @@ class Photo(fs.File):
|
|||||||
__slots__ = fs.File.__slots__ + tuple(INITIAL_INFO.keys())
|
__slots__ = fs.File.__slots__ + tuple(INITIAL_INFO.keys())
|
||||||
|
|
||||||
# These extensions are supported on all platforms
|
# These extensions are supported on all platforms
|
||||||
HANDLED_EXTS = {"png", "jpg", "jpeg", "gif", "bmp", "tiff", "tif", "webp"}
|
HANDLED_EXTS = {"png", "jpg", "jpeg", "gif", "bmp", "tiff", "tif"}
|
||||||
|
|
||||||
def _plat_get_dimensions(self):
|
def _plat_get_dimensions(self):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
@ -37,7 +37,7 @@ class Photo(fs.File):
|
|||||||
def _plat_get_blocks(self, block_count_per_side, orientation):
|
def _plat_get_blocks(self, block_count_per_side, orientation):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def get_orientation(self):
|
def _get_orientation(self):
|
||||||
if not hasattr(self, "_cached_orientation"):
|
if not hasattr(self, "_cached_orientation"):
|
||||||
try:
|
try:
|
||||||
with self.path.open("rb") as fp:
|
with self.path.open("rb") as fp:
|
||||||
@ -95,13 +95,10 @@ class Photo(fs.File):
|
|||||||
fs.File._read_info(self, field)
|
fs.File._read_info(self, field)
|
||||||
if field == "dimensions":
|
if field == "dimensions":
|
||||||
self.dimensions = self._plat_get_dimensions()
|
self.dimensions = self._plat_get_dimensions()
|
||||||
if self.get_orientation() in {5, 6, 7, 8}:
|
if self._get_orientation() in {5, 6, 7, 8}:
|
||||||
self.dimensions = (self.dimensions[1], self.dimensions[0])
|
self.dimensions = (self.dimensions[1], self.dimensions[0])
|
||||||
elif field == "exif_timestamp":
|
elif field == "exif_timestamp":
|
||||||
self.exif_timestamp = self._get_exif_timestamp()
|
self.exif_timestamp = self._get_exif_timestamp()
|
||||||
|
|
||||||
def get_blocks(self, block_count_per_side, orientation: int = None):
|
def get_blocks(self, block_count_per_side):
|
||||||
if orientation is None:
|
return self._plat_get_blocks(block_count_per_side, self._get_orientation())
|
||||||
return self._plat_get_blocks(block_count_per_side, self.get_orientation())
|
|
||||||
else:
|
|
||||||
return self._plat_get_blocks(block_count_per_side, orientation)
|
|
||||||
|
@ -14,7 +14,6 @@ from core.pe import matchblock, matchexif
|
|||||||
class ScannerPE(Scanner):
|
class ScannerPE(Scanner):
|
||||||
cache_path = None
|
cache_path = None
|
||||||
match_scaled = False
|
match_scaled = False
|
||||||
match_rotated = False
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_scan_options():
|
def get_scan_options():
|
||||||
@ -30,7 +29,6 @@ class ScannerPE(Scanner):
|
|||||||
cache_path=self.cache_path,
|
cache_path=self.cache_path,
|
||||||
threshold=self.min_match_percentage,
|
threshold=self.min_match_percentage,
|
||||||
match_scaled=self.match_scaled,
|
match_scaled=self.match_scaled,
|
||||||
match_rotated=self.match_rotated,
|
|
||||||
j=j,
|
j=j,
|
||||||
)
|
)
|
||||||
elif self.scan_type == ScanType.EXIFTIMESTAMP:
|
elif self.scan_type == ScanType.EXIFTIMESTAMP:
|
||||||
|
@ -96,8 +96,6 @@ class FilenameCategory(CriterionCategory):
|
|||||||
DOESNT_END_WITH_NUMBER = 1
|
DOESNT_END_WITH_NUMBER = 1
|
||||||
LONGEST = 2
|
LONGEST = 2
|
||||||
SHORTEST = 3
|
SHORTEST = 3
|
||||||
LONGEST_PATH = 4
|
|
||||||
SHORTEST_PATH = 5
|
|
||||||
|
|
||||||
def format_criterion_value(self, value):
|
def format_criterion_value(self, value):
|
||||||
return {
|
return {
|
||||||
@ -105,8 +103,6 @@ class FilenameCategory(CriterionCategory):
|
|||||||
self.DOESNT_END_WITH_NUMBER: tr("Doesn't end with number"),
|
self.DOESNT_END_WITH_NUMBER: tr("Doesn't end with number"),
|
||||||
self.LONGEST: tr("Longest"),
|
self.LONGEST: tr("Longest"),
|
||||||
self.SHORTEST: tr("Shortest"),
|
self.SHORTEST: tr("Shortest"),
|
||||||
self.LONGEST_PATH: tr("Longest Path"),
|
|
||||||
self.SHORTEST_PATH: tr("Shortest Path"),
|
|
||||||
}[value]
|
}[value]
|
||||||
|
|
||||||
def extract_value(self, dupe):
|
def extract_value(self, dupe):
|
||||||
@ -120,10 +116,6 @@ class FilenameCategory(CriterionCategory):
|
|||||||
return 0 if ends_with_digit else 1
|
return 0 if ends_with_digit else 1
|
||||||
else:
|
else:
|
||||||
return 1 if ends_with_digit else 0
|
return 1 if ends_with_digit else 0
|
||||||
elif crit_value == self.LONGEST_PATH:
|
|
||||||
return len(str(dupe.folder_path)) * -1
|
|
||||||
elif crit_value == self.SHORTEST_PATH:
|
|
||||||
return len(str(dupe.folder_path))
|
|
||||||
else:
|
else:
|
||||||
value = len(value)
|
value = len(value)
|
||||||
if crit_value == self.LONGEST:
|
if crit_value == self.LONGEST:
|
||||||
@ -138,8 +130,6 @@ class FilenameCategory(CriterionCategory):
|
|||||||
self.DOESNT_END_WITH_NUMBER,
|
self.DOESNT_END_WITH_NUMBER,
|
||||||
self.LONGEST,
|
self.LONGEST,
|
||||||
self.SHORTEST,
|
self.SHORTEST,
|
||||||
self.LONGEST_PATH,
|
|
||||||
self.SHORTEST_PATH,
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ import logging
|
|||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
import os.path as op
|
import os.path as op
|
||||||
from errno import EISDIR, EACCES
|
|
||||||
from xml.etree import ElementTree as ET
|
from xml.etree import ElementTree as ET
|
||||||
|
|
||||||
from hscommon.jobprogress.job import nulljob
|
from hscommon.jobprogress.job import nulljob
|
||||||
@ -377,8 +376,8 @@ class Results(Markable):
|
|||||||
do_write(outfile)
|
do_write(outfile)
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
# If our OSError is because dest is already a directory, we want to handle that. 21 is
|
# If our OSError is because dest is already a directory, we want to handle that. 21 is
|
||||||
# the code we get on OS X and Linux (EISDIR), 13 is what we get on Windows (EACCES).
|
# the code we get on OS X and Linux, 13 is what we get on Windows.
|
||||||
if e.errno in (EISDIR, EACCES):
|
if e.errno in {21, 13}:
|
||||||
p = str(outfile)
|
p = str(outfile)
|
||||||
dirname, basename = op.split(p)
|
dirname, basename = op.split(p)
|
||||||
otherfiles = os.listdir(dirname)
|
otherfiles = os.listdir(dirname)
|
||||||
|
@ -87,6 +87,8 @@ class Scanner:
|
|||||||
}
|
}
|
||||||
):
|
):
|
||||||
j = j.start_subjob([2, 8])
|
j = j.start_subjob([2, 8])
|
||||||
|
for f in j.iter_with_progress(files, tr("Read size of %d/%d files")):
|
||||||
|
f.size # pre-read, makes a smoother progress if read here (especially for bundles)
|
||||||
if self.size_threshold:
|
if self.size_threshold:
|
||||||
files = [f for f in files if f.size >= self.size_threshold]
|
files = [f for f in files if f.size >= self.size_threshold]
|
||||||
if self.large_size_threshold:
|
if self.large_size_threshold:
|
||||||
@ -169,10 +171,7 @@ class Scanner:
|
|||||||
matches = [m for m in matches if m.first.path not in toremove or m.second.path not in toremove]
|
matches = [m for m in matches if m.first.path not in toremove or m.second.path not in toremove]
|
||||||
if not self.mix_file_kind:
|
if not self.mix_file_kind:
|
||||||
matches = [m for m in matches if get_file_ext(m.first.name) == get_file_ext(m.second.name)]
|
matches = [m for m in matches if get_file_ext(m.first.name) == get_file_ext(m.second.name)]
|
||||||
if self.include_exists_check:
|
matches = [m for m in matches if m.first.path.exists() and m.second.path.exists()]
|
||||||
matches = [m for m in matches if m.first.exists() and m.second.exists()]
|
|
||||||
# Contents already handles ref checks, other scan types might not catch during scan
|
|
||||||
if self.scan_type != ScanType.CONTENTS:
|
|
||||||
matches = [m for m in matches if not (m.first.is_ref and m.second.is_ref)]
|
matches = [m for m in matches if not (m.first.is_ref and m.second.is_ref)]
|
||||||
if ignore_list:
|
if ignore_list:
|
||||||
matches = [m for m in matches if not ignore_list.are_ignored(str(m.first.path), str(m.second.path))]
|
matches = [m for m in matches if not ignore_list.are_ignored(str(m.first.path), str(m.second.path))]
|
||||||
@ -213,4 +212,3 @@ class Scanner:
|
|||||||
large_size_threshold = 0
|
large_size_threshold = 0
|
||||||
big_file_size_threshold = 0
|
big_file_size_threshold = 0
|
||||||
word_weighting = False
|
word_weighting = False
|
||||||
include_exists_check = True
|
|
||||||
|
@ -10,41 +10,41 @@ from pytest import raises, skip
|
|||||||
from hscommon.testutil import eq_
|
from hscommon.testutil import eq_
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from core.pe.cache import colors_to_bytes, bytes_to_colors
|
from core.pe.cache import colors_to_string, string_to_colors
|
||||||
from core.pe.cache_sqlite import SqliteCache
|
from core.pe.cache_sqlite import SqliteCache
|
||||||
|
from core.pe.cache_shelve import ShelveCache
|
||||||
except ImportError:
|
except ImportError:
|
||||||
skip("Can't import the cache module, probably hasn't been compiled.")
|
skip("Can't import the cache module, probably hasn't been compiled.")
|
||||||
|
|
||||||
|
|
||||||
class TestCaseColorsToString:
|
class TestCaseColorsToString:
|
||||||
def test_no_color(self):
|
def test_no_color(self):
|
||||||
eq_(b"", colors_to_bytes([]))
|
eq_("", colors_to_string([]))
|
||||||
|
|
||||||
def test_single_color(self):
|
def test_single_color(self):
|
||||||
eq_(b"\x00\x00\x00", colors_to_bytes([(0, 0, 0)]))
|
eq_("000000", colors_to_string([(0, 0, 0)]))
|
||||||
eq_(b"\x01\x01\x01", colors_to_bytes([(1, 1, 1)]))
|
eq_("010101", colors_to_string([(1, 1, 1)]))
|
||||||
eq_(b"\x0a\x14\x1e", colors_to_bytes([(10, 20, 30)]))
|
eq_("0a141e", colors_to_string([(10, 20, 30)]))
|
||||||
|
|
||||||
def test_two_colors(self):
|
def test_two_colors(self):
|
||||||
eq_(b"\x00\x01\x02\x03\x04\x05", colors_to_bytes([(0, 1, 2), (3, 4, 5)]))
|
eq_("000102030405", colors_to_string([(0, 1, 2), (3, 4, 5)]))
|
||||||
|
|
||||||
|
|
||||||
class TestCaseStringToColors:
|
class TestCaseStringToColors:
|
||||||
def test_empty(self):
|
def test_empty(self):
|
||||||
eq_([], bytes_to_colors(b""))
|
eq_([], string_to_colors(""))
|
||||||
|
|
||||||
def test_single_color(self):
|
def test_single_color(self):
|
||||||
eq_([(0, 0, 0)], bytes_to_colors(b"\x00\x00\x00"))
|
eq_([(0, 0, 0)], string_to_colors("000000"))
|
||||||
eq_([(2, 3, 4)], bytes_to_colors(b"\x02\x03\x04"))
|
eq_([(2, 3, 4)], string_to_colors("020304"))
|
||||||
eq_([(10, 20, 30)], bytes_to_colors(b"\x0a\x14\x1e"))
|
eq_([(10, 20, 30)], string_to_colors("0a141e"))
|
||||||
|
|
||||||
def test_two_colors(self):
|
def test_two_colors(self):
|
||||||
eq_([(10, 20, 30), (40, 50, 60)], bytes_to_colors(b"\x0a\x14\x1e\x28\x32\x3c"))
|
eq_([(10, 20, 30), (40, 50, 60)], string_to_colors("0a141e28323c"))
|
||||||
|
|
||||||
def test_incomplete_color(self):
|
def test_incomplete_color(self):
|
||||||
# don't return anything if it's not a complete color
|
# don't return anything if it's not a complete color
|
||||||
eq_([], bytes_to_colors(b"\x01"))
|
eq_([], string_to_colors("102"))
|
||||||
eq_([(1, 2, 3)], bytes_to_colors(b"\x01\x02\x03\x04"))
|
|
||||||
|
|
||||||
|
|
||||||
class BaseTestCaseCache:
|
class BaseTestCaseCache:
|
||||||
@ -59,13 +59,13 @@ class BaseTestCaseCache:
|
|||||||
|
|
||||||
def test_set_then_retrieve_blocks(self):
|
def test_set_then_retrieve_blocks(self):
|
||||||
c = self.get_cache()
|
c = self.get_cache()
|
||||||
b = [[(0, 0, 0), (1, 2, 3)]] * 8
|
b = [(0, 0, 0), (1, 2, 3)]
|
||||||
c["foo"] = b
|
c["foo"] = b
|
||||||
eq_(b, c["foo"])
|
eq_(b, c["foo"])
|
||||||
|
|
||||||
def test_delitem(self):
|
def test_delitem(self):
|
||||||
c = self.get_cache()
|
c = self.get_cache()
|
||||||
c["foo"] = [[]] * 8
|
c["foo"] = ""
|
||||||
del c["foo"]
|
del c["foo"]
|
||||||
assert "foo" not in c
|
assert "foo" not in c
|
||||||
with raises(KeyError):
|
with raises(KeyError):
|
||||||
@ -74,16 +74,16 @@ class BaseTestCaseCache:
|
|||||||
def test_persistance(self, tmpdir):
|
def test_persistance(self, tmpdir):
|
||||||
DBNAME = tmpdir.join("hstest.db")
|
DBNAME = tmpdir.join("hstest.db")
|
||||||
c = self.get_cache(str(DBNAME))
|
c = self.get_cache(str(DBNAME))
|
||||||
c["foo"] = [[(1, 2, 3)]] * 8
|
c["foo"] = [(1, 2, 3)]
|
||||||
del c
|
del c
|
||||||
c = self.get_cache(str(DBNAME))
|
c = self.get_cache(str(DBNAME))
|
||||||
eq_([[(1, 2, 3)]] * 8, c["foo"])
|
eq_([(1, 2, 3)], c["foo"])
|
||||||
|
|
||||||
def test_filter(self):
|
def test_filter(self):
|
||||||
c = self.get_cache()
|
c = self.get_cache()
|
||||||
c["foo"] = [[]] * 8
|
c["foo"] = ""
|
||||||
c["bar"] = [[]] * 8
|
c["bar"] = ""
|
||||||
c["baz"] = [[]] * 8
|
c["baz"] = ""
|
||||||
c.filter(lambda p: p != "bar") # only 'bar' is removed
|
c.filter(lambda p: p != "bar") # only 'bar' is removed
|
||||||
eq_(2, len(c))
|
eq_(2, len(c))
|
||||||
assert "foo" in c
|
assert "foo" in c
|
||||||
@ -92,9 +92,9 @@ class BaseTestCaseCache:
|
|||||||
|
|
||||||
def test_clear(self):
|
def test_clear(self):
|
||||||
c = self.get_cache()
|
c = self.get_cache()
|
||||||
c["foo"] = [[]] * 8
|
c["foo"] = ""
|
||||||
c["bar"] = [[]] * 8
|
c["bar"] = ""
|
||||||
c["baz"] = [[]] * 8
|
c["baz"] = ""
|
||||||
c.clear()
|
c.clear()
|
||||||
eq_(0, len(c))
|
eq_(0, len(c))
|
||||||
assert "foo" not in c
|
assert "foo" not in c
|
||||||
@ -104,7 +104,7 @@ class BaseTestCaseCache:
|
|||||||
def test_by_id(self):
|
def test_by_id(self):
|
||||||
# it's possible to use the cache by referring to the files by their row_id
|
# it's possible to use the cache by referring to the files by their row_id
|
||||||
c = self.get_cache()
|
c = self.get_cache()
|
||||||
b = [[(0, 0, 0), (1, 2, 3)]] * 8
|
b = [(0, 0, 0), (1, 2, 3)]
|
||||||
c["foo"] = b
|
c["foo"] = b
|
||||||
foo_id = c.get_id("foo")
|
foo_id = c.get_id("foo")
|
||||||
eq_(c[foo_id], b)
|
eq_(c[foo_id], b)
|
||||||
@ -127,10 +127,15 @@ class TestCaseSqliteCache(BaseTestCaseCache):
|
|||||||
fp.write("invalid sqlite content")
|
fp.write("invalid sqlite content")
|
||||||
fp.close()
|
fp.close()
|
||||||
c = self.get_cache(dbname) # should not raise a DatabaseError
|
c = self.get_cache(dbname) # should not raise a DatabaseError
|
||||||
c["foo"] = [[(1, 2, 3)]] * 8
|
c["foo"] = [(1, 2, 3)]
|
||||||
del c
|
del c
|
||||||
c = self.get_cache(dbname)
|
c = self.get_cache(dbname)
|
||||||
eq_(c["foo"], [[(1, 2, 3)]] * 8)
|
eq_(c["foo"], [(1, 2, 3)])
|
||||||
|
|
||||||
|
|
||||||
|
class TestCaseShelveCache(BaseTestCaseCache):
|
||||||
|
def get_cache(self, dbname=None):
|
||||||
|
return ShelveCache(dbname)
|
||||||
|
|
||||||
|
|
||||||
class TestCaseCacheSQLEscape:
|
class TestCaseCacheSQLEscape:
|
||||||
@ -152,7 +157,7 @@ class TestCaseCacheSQLEscape:
|
|||||||
|
|
||||||
def test_delitem(self):
|
def test_delitem(self):
|
||||||
c = self.get_cache()
|
c = self.get_cache()
|
||||||
c["foo'bar"] = [[]] * 8
|
c["foo'bar"] = []
|
||||||
try:
|
try:
|
||||||
del c["foo'bar"]
|
del c["foo'bar"]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -326,7 +326,6 @@ def test_default_path_state_override(tmpdir):
|
|||||||
def _default_state_for_path(self, path):
|
def _default_state_for_path(self, path):
|
||||||
if "foobar" in path.parts:
|
if "foobar" in path.parts:
|
||||||
return DirectoryState.EXCLUDED
|
return DirectoryState.EXCLUDED
|
||||||
return DirectoryState.NORMAL
|
|
||||||
|
|
||||||
d = MyDirectories()
|
d = MyDirectories()
|
||||||
p1 = Path(str(tmpdir))
|
p1 = Path(str(tmpdir))
|
||||||
|
@ -71,10 +71,7 @@ class TestCasegetwords:
|
|||||||
|
|
||||||
def test_unicode(self):
|
def test_unicode(self):
|
||||||
eq_(["e", "c", "0", "a", "o", "u", "e", "u"], getwords("é ç 0 à ö û è ¤ ù"))
|
eq_(["e", "c", "0", "a", "o", "u", "e", "u"], getwords("é ç 0 à ö û è ¤ ù"))
|
||||||
eq_(
|
eq_(["02", "君のこころは輝いてるかい?", "国木田花丸", "solo", "ver"], getwords("02 君のこころは輝いてるかい? 国木田花丸 Solo Ver"))
|
||||||
["02", "君のこころは輝いてるかい?", "国木田花丸", "solo", "ver"],
|
|
||||||
getwords("02 君のこころは輝いてるかい? 国木田花丸 Solo Ver"),
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_splitter_chars(self):
|
def test_splitter_chars(self):
|
||||||
eq_(
|
eq_(
|
||||||
|
@ -17,7 +17,6 @@ from core.scanner import Scanner, ScanType
|
|||||||
from core.me.scanner import ScannerME
|
from core.me.scanner import ScannerME
|
||||||
|
|
||||||
|
|
||||||
# TODO update this to be able to inherit from fs.File
|
|
||||||
class NamedObject:
|
class NamedObject:
|
||||||
def __init__(self, name="foobar", size=1, path=None):
|
def __init__(self, name="foobar", size=1, path=None):
|
||||||
if path is None:
|
if path is None:
|
||||||
@ -32,9 +31,6 @@ class NamedObject:
|
|||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<NamedObject {!r} {!r}>".format(self.name, self.path)
|
return "<NamedObject {!r} {!r}>".format(self.name, self.path)
|
||||||
|
|
||||||
def exists(self):
|
|
||||||
return self.path.exists()
|
|
||||||
|
|
||||||
|
|
||||||
no = NamedObject
|
no = NamedObject
|
||||||
|
|
||||||
@ -242,12 +238,12 @@ def test_content_scan_doesnt_put_digest_in_words_at_the_end(fake_fileexists):
|
|||||||
s = Scanner()
|
s = Scanner()
|
||||||
s.scan_type = ScanType.CONTENTS
|
s.scan_type = ScanType.CONTENTS
|
||||||
f = [no("foo"), no("bar")]
|
f = [no("foo"), no("bar")]
|
||||||
f[0].digest = f[0].digest_partial = f[0].digest_samples = (
|
f[0].digest = f[0].digest_partial = f[
|
||||||
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
|
0
|
||||||
)
|
].digest_samples = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
|
||||||
f[1].digest = f[1].digest_partial = f[1].digest_samples = (
|
f[1].digest = f[1].digest_partial = f[
|
||||||
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
|
1
|
||||||
)
|
].digest_samples = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
|
||||||
r = s.get_dupe_groups(f)
|
r = s.get_dupe_groups(f)
|
||||||
# FIXME looks like we are missing something here?
|
# FIXME looks like we are missing something here?
|
||||||
r[0]
|
r[0]
|
||||||
|
@ -24,7 +24,7 @@ Development process
|
|||||||
* `Issue Tracker`_
|
* `Issue Tracker`_
|
||||||
* `Issue labels meaning`_
|
* `Issue labels meaning`_
|
||||||
|
|
||||||
dupeGuru's source code is on GitHub and thus managed in a Git repository. At all times, you should
|
dupeGuru's source code is on Github and thus managed in a Git repository. At all times, you should
|
||||||
be able to build from source a fresh checkout of the ``master`` branch using instructions from the
|
be able to build from source a fresh checkout of the ``master`` branch using instructions from the
|
||||||
``README.md`` file at the root of this project. If you can't, it's a bug. Please report it.
|
``README.md`` file at the root of this project. If you can't, it's a bug. Please report it.
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ It's the same thing with feature requests. Description of a feature request, whe
|
|||||||
already been given to how such a feature would fit in the current design, are precious to developers
|
already been given to how such a feature would fit in the current design, are precious to developers
|
||||||
and help them figure out a clear roadmap for the project.
|
and help them figure out a clear roadmap for the project.
|
||||||
|
|
||||||
So, even if you're not a developer, you can always open a GitHub account and create/comment issues.
|
So, even if you're not a developer, you can always open a Github account and create/comment issues.
|
||||||
Your contribution will be much appreciated.
|
Your contribution will be much appreciated.
|
||||||
|
|
||||||
**Documentation**. This is a bit trickier because dupeGuru's documentation is written with a rather
|
**Documentation**. This is a bit trickier because dupeGuru's documentation is written with a rather
|
||||||
|
@ -15,3 +15,4 @@ hscommon.gui.progress_window
|
|||||||
.. autoclass:: ProgressWindowView
|
.. autoclass:: ProgressWindowView
|
||||||
:members:
|
:members:
|
||||||
:private-members:
|
:private-members:
|
||||||
|
|
||||||
|
@ -15,3 +15,4 @@ hscommon.gui.tree
|
|||||||
.. autoclass:: Node
|
.. autoclass:: Node
|
||||||
:members:
|
:members:
|
||||||
:private-members:
|
:private-members:
|
||||||
|
|
||||||
|
@ -13,3 +13,4 @@ hscommon
|
|||||||
util
|
util
|
||||||
jobprogress/*
|
jobprogress/*
|
||||||
gui/*
|
gui/*
|
||||||
|
|
||||||
|
@ -14,3 +14,4 @@ hscommon.jobprogress.job
|
|||||||
|
|
||||||
.. autoclass:: NullJob
|
.. autoclass:: NullJob
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
@ -9,3 +9,4 @@ hscommon.jobprogress.performer
|
|||||||
|
|
||||||
.. autoclass:: ThreadedJobPerformer
|
.. autoclass:: ThreadedJobPerformer
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@ that makes sure that you will **always** keep at least one member of the duplica
|
|||||||
How can I report a bug a suggest a feature?
|
How can I report a bug a suggest a feature?
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
dupeGuru is hosted on `GitHub`_ and it's also where issues are tracked. The best way to report a
|
dupeGuru is hosted on `Github`_ and it's also where issues are tracked. The best way to report a
|
||||||
bug or suggest a feature is to sign up on GitHub and `open an issue`_.
|
bug or suggest a feature is to sign up on Github and `open an issue`_.
|
||||||
|
|
||||||
The mark box of a file I want to delete is disabled. What must I do?
|
The mark box of a file I want to delete is disabled. What must I do?
|
||||||
--------------------------------------------------------------------
|
--------------------------------------------------------------------
|
||||||
@ -176,5 +176,6 @@ Preferences are stored elsewhere:
|
|||||||
* Linux: ``~/.config/Hardcoded Software/dupeGuru.conf``
|
* Linux: ``~/.config/Hardcoded Software/dupeGuru.conf``
|
||||||
* Mac OS X: In the built-in ``defaults`` system, as ``com.hardcoded-software.dupeguru``
|
* Mac OS X: In the built-in ``defaults`` system, as ``com.hardcoded-software.dupeguru``
|
||||||
|
|
||||||
.. _GitHub: https://github.com/arsenetar/dupeguru
|
.. _Github: https://github.com/arsenetar/dupeguru
|
||||||
.. _open an issue: https://github.com/arsenetar/dupeguru/wiki/issue-labels
|
.. _open an issue: https://github.com/arsenetar/dupeguru/wiki/issue-labels
|
||||||
|
|
||||||
|
@ -14,10 +14,6 @@ Preferences
|
|||||||
If you check this box, pictures of different dimensions will be allowed in the same
|
If you check this box, pictures of different dimensions will be allowed in the same
|
||||||
duplicate group.
|
duplicate group.
|
||||||
|
|
||||||
**Match pictures of different rotations:**
|
|
||||||
If you check this box, pictures of different rotations will be allowed in the same
|
|
||||||
duplicate group.
|
|
||||||
|
|
||||||
.. _filter-hardness:
|
.. _filter-hardness:
|
||||||
|
|
||||||
**Filter Hardness:**
|
**Filter Hardness:**
|
||||||
|
@ -12,3 +12,4 @@
|
|||||||
* Եթե համոզված եք, որ կրկնօրինակը արդյունքներում կա, ապա սեղմեք **Խմբագրել-->Նշել բոլորը**, և ապա **Գործողություններ-->Ուղարկել Նշվածը Աղբարկղ**:
|
* Եթե համոզված եք, որ կրկնօրինակը արդյունքներում կա, ապա սեղմեք **Խմբագրել-->Նշել բոլորը**, և ապա **Գործողություններ-->Ուղարկել Նշվածը Աղբարկղ**:
|
||||||
|
|
||||||
Սա միայն բազային ստուգում է: Կան բազմաթիվ կարգավորումներ, որոնք հնարավորություն են տալիս նշելու տարբեր արդյունքներ և մի քանի եղանակներ արդյունքների փոփոխման: Մանրամասների համար կարդացեք Օգնության ֆայլը:
|
Սա միայն բազային ստուգում է: Կան բազմաթիվ կարգավորումներ, որոնք հնարավորություն են տալիս նշելու տարբեր արդյունքներ և մի քանի եղանակներ արդյունքների փոփոխման: Մանրամասների համար կարդացեք Օգնության ֆայլը:
|
||||||
|
|
||||||
|
@ -23,3 +23,4 @@ dupeGuru-ը փորձում է որոշել, թե որ կրկնօրինակներ
|
|||||||
մեծագույն ֆայլը և եթե երկու կամ ավելի ֆայլեր ունեն նույն չափը, ապա մեկը ունի ֆայլի անուն, որը
|
մեծագույն ֆայլը և եթե երկու կամ ավելի ֆայլեր ունեն նույն չափը, ապա մեկը ունի ֆայլի անուն, որը
|
||||||
չի ավարտվում թվով, կօգտագործվի: Երբ փաստարկի արդյունքը կապված է, կարգը, որի սխալները
|
չի ավարտվում թվով, կօգտագործվի: Երբ փաստարկի արդյունքը կապված է, կարգը, որի սխալները
|
||||||
նախկինում էին, խումբը պետք է օգտագործվի:
|
նախկինում էին, խումբը պետք է օգտագործվի:
|
||||||
|
|
||||||
|
@ -114,3 +114,4 @@
|
|||||||
Якщо все це не так, `контакт УГ підтримки <http://www.hardcoded.net/support>`_, ми зрозуміти це.
|
Якщо все це не так, `контакт УГ підтримки <http://www.hardcoded.net/support>`_, ми зрозуміти це.
|
||||||
|
|
||||||
.. todo:: This FAQ qestion is outdated, see english version.
|
.. todo:: This FAQ qestion is outdated, see english version.
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ import re
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from errno import EISDIR, EACCES
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Callable, List
|
from typing import Callable, List
|
||||||
|
|
||||||
@ -76,8 +75,10 @@ def smart_copy(source_path: Path, dest_path: Path) -> None:
|
|||||||
try:
|
try:
|
||||||
_smart_move_or_copy(shutil.copy, source_path, dest_path)
|
_smart_move_or_copy(shutil.copy, source_path, dest_path)
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
# It's a directory, code is 21 on OS X / Linux (EISDIR) and 13 on Windows (EACCES)
|
if e.errno in {
|
||||||
if e.errno in (EISDIR, EACCES):
|
21,
|
||||||
|
13,
|
||||||
|
}: # it's a directory, code is 21 on OS X / Linux and 13 on Windows
|
||||||
_smart_move_or_copy(shutil.copytree, source_path, dest_path)
|
_smart_move_or_copy(shutil.copytree, source_path, dest_path)
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
# http://www.gnu.org/licenses/gpl-3.0.html
|
# http://www.gnu.org/licenses/gpl-3.0.html
|
||||||
|
|
||||||
|
|
||||||
from typing import Any, Callable, Generator, List, Union
|
from typing import Any, Callable, Generator, Iterator, List, Union
|
||||||
|
|
||||||
|
|
||||||
class JobCancelled(Exception):
|
class JobCancelled(Exception):
|
||||||
@ -148,7 +148,7 @@ class Job:
|
|||||||
self._do_update(desc)
|
self._do_update(desc)
|
||||||
|
|
||||||
|
|
||||||
class NullJob(Job):
|
class NullJob:
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args, **kwargs) -> None:
|
||||||
# Null job does nothing
|
# Null job does nothing
|
||||||
pass
|
pass
|
||||||
@ -161,6 +161,9 @@ class NullJob(Job):
|
|||||||
# Null job does nothing
|
# Null job does nothing
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def iter_with_progress(self, sequence, *args, **kwargs) -> Iterator:
|
||||||
|
return iter(sequence)
|
||||||
|
|
||||||
def start_job(self, *args, **kwargs) -> None:
|
def start_job(self, *args, **kwargs) -> None:
|
||||||
# Null job does nothing
|
# Null job does nothing
|
||||||
pass
|
pass
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import importlib.machinery
|
import imp
|
||||||
import importlib.util
|
|
||||||
import sys
|
import sys
|
||||||
import glob
|
import glob
|
||||||
import token
|
import token
|
||||||
@ -111,7 +110,7 @@ def _visit_pyfiles(list, dirname, names):
|
|||||||
# get extension for python source files
|
# get extension for python source files
|
||||||
if "_py_ext" not in globals():
|
if "_py_ext" not in globals():
|
||||||
global _py_ext
|
global _py_ext
|
||||||
_py_ext = importlib.machinery.SOURCE_SUFFIXES[0]
|
_py_ext = [triple[0] for triple in imp.get_suffixes() if triple[2] == imp.PY_SOURCE][0]
|
||||||
|
|
||||||
# don't recurse into CVS directories
|
# don't recurse into CVS directories
|
||||||
if "CVS" in names:
|
if "CVS" in names:
|
||||||
@ -121,6 +120,45 @@ def _visit_pyfiles(list, dirname, names):
|
|||||||
list.extend([os.path.join(dirname, file) for file in names if os.path.splitext(file)[1] == _py_ext])
|
list.extend([os.path.join(dirname, file) for file in names if os.path.splitext(file)[1] == _py_ext])
|
||||||
|
|
||||||
|
|
||||||
|
def _get_modpkg_path(dotted_name, pathlist=None):
|
||||||
|
"""Get the filesystem path for a module or a package.
|
||||||
|
|
||||||
|
Return the file system path to a file for a module, and to a directory for
|
||||||
|
a package. Return None if the name is not found, or is a builtin or
|
||||||
|
extension module.
|
||||||
|
"""
|
||||||
|
# split off top-most name
|
||||||
|
parts = dotted_name.split(".", 1)
|
||||||
|
|
||||||
|
if len(parts) > 1:
|
||||||
|
# we have a dotted path, import top-level package
|
||||||
|
try:
|
||||||
|
file, pathname, description = imp.find_module(parts[0], pathlist)
|
||||||
|
if file:
|
||||||
|
file.close()
|
||||||
|
except ImportError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# check if it's indeed a package
|
||||||
|
if description[2] == imp.PKG_DIRECTORY:
|
||||||
|
# recursively handle the remaining name parts
|
||||||
|
pathname = _get_modpkg_path(parts[1], [pathname])
|
||||||
|
else:
|
||||||
|
pathname = None
|
||||||
|
else:
|
||||||
|
# plain name
|
||||||
|
try:
|
||||||
|
file, pathname, description = imp.find_module(dotted_name, pathlist)
|
||||||
|
if file:
|
||||||
|
file.close()
|
||||||
|
if description[2] not in [imp.PY_SOURCE, imp.PKG_DIRECTORY]:
|
||||||
|
pathname = None
|
||||||
|
except ImportError:
|
||||||
|
pathname = None
|
||||||
|
|
||||||
|
return pathname
|
||||||
|
|
||||||
|
|
||||||
def getFilesForName(name):
|
def getFilesForName(name):
|
||||||
"""Get a list of module files for a filename, a module or package name,
|
"""Get a list of module files for a filename, a module or package name,
|
||||||
or a directory.
|
or a directory.
|
||||||
@ -135,11 +173,7 @@ def getFilesForName(name):
|
|||||||
return file_list
|
return file_list
|
||||||
|
|
||||||
# try to find module or package
|
# try to find module or package
|
||||||
try:
|
name = _get_modpkg_path(name)
|
||||||
spec = importlib.util.find_spec(name)
|
|
||||||
name = spec.origin
|
|
||||||
except ImportError:
|
|
||||||
name = None
|
|
||||||
if not name:
|
if not name:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -41,8 +41,7 @@ def trget(domain: str) -> Callable[[str], str]:
|
|||||||
|
|
||||||
|
|
||||||
def set_tr(
|
def set_tr(
|
||||||
new_tr: Callable[[str, Union[str, None]], str],
|
new_tr: Callable[[str, Union[str, None]], str], new_trget: Union[Callable[[str], Callable[[str], str]], None] = None
|
||||||
new_trget: Union[Callable[[str], Callable[[str], str]], None] = None,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
global _trfunc, _trget
|
global _trfunc, _trget
|
||||||
_trfunc = new_tr
|
_trfunc = new_tr
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
# Translators:
|
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
"Language-Team: Arabic (https://www.transifex.com/voltaicideas/teams/116153/ar/)\n"
|
||||||
"Language-Team: Arabic (https://app.transifex.com/voltaicideas/teams/116153/ar/)\n"
|
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -13,110 +10,110 @@ msgstr ""
|
|||||||
#: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
|
#: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
|
||||||
#: core\gui\problem_table.py:18
|
#: core\gui\problem_table.py:18
|
||||||
msgid "File Path"
|
msgid "File Path"
|
||||||
msgstr "مسار الملف"
|
msgstr ""
|
||||||
|
|
||||||
#: core\gui\problem_table.py:19
|
#: core\gui\problem_table.py:19
|
||||||
msgid "Error Message"
|
msgid "Error Message"
|
||||||
msgstr "رسالة خطأ"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\prioritize.py:23
|
#: core\me\prioritize.py:23
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
msgstr "مدة"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\prioritize.py:30 core\me\result_table.py:23
|
#: core\me\prioritize.py:30 core\me\result_table.py:23
|
||||||
msgid "Bitrate"
|
msgid "Bitrate"
|
||||||
msgstr "معدل البت"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\prioritize.py:37
|
#: core\me\prioritize.py:37
|
||||||
msgid "Samplerate"
|
msgid "Samplerate"
|
||||||
msgstr "معدل العينة"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:94
|
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
|
||||||
#: core\se\result_table.py:19
|
#: core\se\result_table.py:19
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
msgstr "اسم الملف"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
|
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
|
||||||
#: core\se\result_table.py:20
|
#: core\se\result_table.py:20
|
||||||
msgid "Folder"
|
msgid "Folder"
|
||||||
msgstr "مجلد"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:21
|
#: core\me\result_table.py:21
|
||||||
msgid "Size (MB)"
|
msgid "Size (MB)"
|
||||||
msgstr "الحجم (ميغا بايت)"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:22
|
#: core\me\result_table.py:22
|
||||||
msgid "Time"
|
msgid "Time"
|
||||||
msgstr "زمن"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:24
|
#: core\me\result_table.py:24
|
||||||
msgid "Sample Rate"
|
msgid "Sample Rate"
|
||||||
msgstr "معدل العينة"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
|
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
|
||||||
#: core\se\result_table.py:22
|
#: core\se\result_table.py:22
|
||||||
msgid "Kind"
|
msgid "Kind"
|
||||||
msgstr "طيب القلب"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:26 core\pe\result_table.py:25
|
#: core\me\result_table.py:26 core\pe\result_table.py:25
|
||||||
#: core\prioritize.py:165 core\se\result_table.py:23
|
#: core\prioritize.py:163 core\se\result_table.py:23
|
||||||
msgid "Modification"
|
msgid "Modification"
|
||||||
msgstr "تعديل"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:27
|
#: core\me\result_table.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "عنوان"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:28
|
#: core\me\result_table.py:28
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr "فنان"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:29
|
#: core\me\result_table.py:29
|
||||||
msgid "Album"
|
msgid "Album"
|
||||||
msgstr "البوم"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:30
|
#: core\me\result_table.py:30
|
||||||
msgid "Genre"
|
msgid "Genre"
|
||||||
msgstr "النوع"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:31
|
#: core\me\result_table.py:31
|
||||||
msgid "Year"
|
msgid "Year"
|
||||||
msgstr "سنة"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:32
|
#: core\me\result_table.py:32
|
||||||
msgid "Track Number"
|
msgid "Track Number"
|
||||||
msgstr "رقم الشاحنة"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:33
|
#: core\me\result_table.py:33
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "تعليق"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:34 core\pe\result_table.py:26
|
#: core\me\result_table.py:34 core\pe\result_table.py:26
|
||||||
#: core\se\result_table.py:24
|
#: core\se\result_table.py:24
|
||||||
msgid "Match %"
|
msgid "Match %"
|
||||||
msgstr "مباراة ٪"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:35 core\se\result_table.py:25
|
#: core\me\result_table.py:35 core\se\result_table.py:25
|
||||||
msgid "Words Used"
|
msgid "Words Used"
|
||||||
msgstr "الكلمات المستخدمة"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\result_table.py:36 core\pe\result_table.py:27
|
#: core\me\result_table.py:36 core\pe\result_table.py:27
|
||||||
#: core\se\result_table.py:26
|
#: core\se\result_table.py:26
|
||||||
msgid "Dupe Count"
|
msgid "Dupe Count"
|
||||||
msgstr "عدد المخادعين"
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
|
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
|
||||||
msgid "Dimensions"
|
msgid "Dimensions"
|
||||||
msgstr "أبعاد"
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\result_table.py:21 core\se\result_table.py:21
|
#: core\pe\result_table.py:21 core\se\result_table.py:21
|
||||||
msgid "Size (KB)"
|
msgid "Size (KB)"
|
||||||
msgstr "الحجم (كيلو بايت)"
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\result_table.py:24
|
#: core\pe\result_table.py:24
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "الطابع الزمني EXIF"
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:158
|
#: core\prioritize.py:156
|
||||||
msgid "Size"
|
msgid "Size"
|
||||||
msgstr "بحجم"
|
msgstr ""
|
||||||
|
@ -1,150 +1,139 @@
|
|||||||
# Translators:
|
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
"Language-Team: Arabic (https://www.transifex.com/voltaicideas/teams/116153/ar/)\n"
|
||||||
"Language-Team: Arabic (https://app.transifex.com/voltaicideas/teams/116153/ar/)\n"
|
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:293
|
#: core\app.py:308
|
||||||
msgid ""
|
msgid ""
|
||||||
"A previous action is still hanging in there. You can't start a new one yet. "
|
"A previous action is still hanging in there. You can't start a new one yet. "
|
||||||
"Wait a few seconds, then try again."
|
"Wait a few seconds, then try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:304
|
#: core\app.py:318
|
||||||
msgid "No duplicates found."
|
msgid "No duplicates found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:319
|
#: core\app.py:333
|
||||||
msgid "All marked files were copied successfully."
|
msgid "All marked files were copied successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:321
|
#: core\app.py:334
|
||||||
msgid "All marked files were moved successfully."
|
msgid "All marked files were moved successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:323
|
#: core\app.py:335
|
||||||
msgid "All marked files were deleted successfully."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core\app.py:325
|
|
||||||
msgid "All marked files were successfully sent to Trash."
|
msgid "All marked files were successfully sent to Trash."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:330
|
#: core\app.py:343
|
||||||
msgid "Could not load file: {}"
|
msgid "Could not load file: {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:386
|
#: core\app.py:399
|
||||||
msgid "'{}' already is in the list."
|
msgid "'{}' already is in the list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:388
|
#: core\app.py:401
|
||||||
msgid "'{}' does not exist."
|
msgid "'{}' does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:396
|
#: core\app.py:410
|
||||||
msgid ""
|
msgid ""
|
||||||
"All selected %d matches are going to be ignored in all subsequent scans. "
|
"All selected %d matches are going to be ignored in all subsequent scans. "
|
||||||
"Continue?"
|
"Continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:473
|
#: core\app.py:486
|
||||||
msgid "Select a directory to copy marked files to"
|
msgid "Select a directory to copy marked files to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:475
|
#: core\app.py:487
|
||||||
msgid "Select a directory to move marked files to"
|
msgid "Select a directory to move marked files to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:514
|
#: core\app.py:527
|
||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:520 core\app.py:781 core\app.py:791
|
#: core\app.py:534 core\app.py:801 core\app.py:811
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:543
|
#: core\app.py:559
|
||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:705 core\app.py:717
|
#: core\app.py:727 core\app.py:740
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:753
|
#: core\app.py:774
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:801
|
#: core\app.py:821
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:817
|
#: core\app.py:835
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:867
|
#: core\app.py:891
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\directories.py:190
|
#: core\engine.py:244 core\engine.py:288
|
||||||
msgid "Collected {} files to scan"
|
msgid "0 matches found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\directories.py:206
|
#: core\engine.py:262 core\engine.py:296
|
||||||
msgid "Collected {} folders to scan"
|
msgid "%d matches found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\engine.py:27
|
#: core\gui\deletion_options.py:73
|
||||||
msgid "%d matches found from %d groups"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: core\gui\deletion_options.py:71
|
|
||||||
msgid "You are sending {} file(s) to the Trash."
|
msgid "You are sending {} file(s) to the Trash."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\gui\exclude_list_table.py:14
|
#: core\gui\exclude_list_table.py:15
|
||||||
msgid "Regular Expressions"
|
msgid "Regular Expressions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -154,7 +143,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: core\me\scanner.py:20 core\se\scanner.py:16
|
#: core\me\scanner.py:20 core\se\scanner.py:16
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
msgstr "اسم الملف"
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\scanner.py:21
|
#: core\me\scanner.py:21
|
||||||
msgid "Filename - Fields"
|
msgid "Filename - Fields"
|
||||||
@ -176,15 +165,15 @@ msgstr ""
|
|||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\matchblock.py:177
|
#: core\pe\matchblock.py:181
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\matchblock.py:185
|
#: core\pe\matchblock.py:191
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\matchblock.py:234
|
#: core\pe\matchblock.py:244
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -194,61 +183,61 @@ msgstr ""
|
|||||||
|
|
||||||
#: core\pe\scanner.py:22
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "الطابع الزمني EXIF"
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:70
|
#: core\prioritize.py:70
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\results.py:134
|
#: core\results.py:142
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\results.py:141
|
#: core\results.py:149
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\scanner.py:90
|
#: core\scanner.py:85
|
||||||
msgid "Read size of %d/%d files"
|
msgid "Read size of %d/%d files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\scanner.py:116
|
#: core\scanner.py:109
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\scanner.py:154
|
#: core\scanner.py:147
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
# Translators:
|
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
"Language-Team: Arabic (https://www.transifex.com/voltaicideas/teams/116153/ar/)\n"
|
||||||
"Language-Team: Arabic (https://app.transifex.com/voltaicideas/teams/116153/ar/)\n"
|
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -252,23 +249,23 @@ msgstr ""
|
|||||||
|
|
||||||
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr "فنان"
|
msgstr ""
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Album"
|
msgid "Album"
|
||||||
msgstr "البوم"
|
msgstr ""
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "عنوان"
|
msgstr ""
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Genre"
|
msgid "Genre"
|
||||||
msgstr "النوع"
|
msgstr ""
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Year"
|
msgid "Year"
|
||||||
msgstr "سنة"
|
msgstr ""
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
|
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
@ -911,204 +908,3 @@ msgstr ""
|
|||||||
#: qt\preferences_dialog.py:286
|
#: qt\preferences_dialog.py:286
|
||||||
msgid "Display"
|
msgid "Display"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:70
|
|
||||||
msgid "Partially hash files bigger than"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:80
|
|
||||||
msgid "MB"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:163
|
|
||||||
msgid "Use native OS dialogs"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:166
|
|
||||||
msgid ""
|
|
||||||
"For actions such as file/folder selection use the OS native dialogs.\n"
|
|
||||||
"Some native dialogs have limited functionality."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:68
|
|
||||||
msgid "Ignore files larger than"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\app.py:135 qt\app.py:293
|
|
||||||
msgid "Clear Cache"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\app.py:294
|
|
||||||
msgid ""
|
|
||||||
"Do you really want to clear the cache? This will remove all cached file "
|
|
||||||
"hashes and picture analysis."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\app.py:299
|
|
||||||
msgid "Cache cleared."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:173
|
|
||||||
msgid "Use dark style"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:241
|
|
||||||
msgid "Profile scan operation"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:242
|
|
||||||
msgid "Profile the scan operation and save logs for optimization."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:246
|
|
||||||
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:291
|
|
||||||
msgid "Debug"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\about_box.py:31
|
|
||||||
msgid "About {}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\about_box.py:47
|
|
||||||
msgid "Version {}"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\about_box.py:49 qt\about_box.py:75
|
|
||||||
msgid "Checking for updates..."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\about_box.py:54
|
|
||||||
msgid "Licensed under GPLv3"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\about_box.py:68
|
|
||||||
msgid "No update available."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\about_box.py:71
|
|
||||||
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:50
|
|
||||||
msgid "Error Report"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:54
|
|
||||||
msgid "Something went wrong. How about reporting the error?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
|
||||||
msgid ""
|
|
||||||
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
|
||||||
"\n"
|
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
|
||||||
"\n"
|
|
||||||
"What usually really helps is if you add a description of how you got the error. Thanks!\n"
|
|
||||||
"\n"
|
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
|
||||||
msgid "Go to Github"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
|
||||||
msgid "Czech"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:25
|
|
||||||
msgid "German"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:26
|
|
||||||
msgid "Greek"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:27
|
|
||||||
msgid "English"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:28
|
|
||||||
msgid "Spanish"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:29
|
|
||||||
msgid "French"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:30
|
|
||||||
msgid "Armenian"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:31
|
|
||||||
msgid "Italian"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:32
|
|
||||||
msgid "Japanese"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:33
|
|
||||||
msgid "Korean"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:34
|
|
||||||
msgid "Malay"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:35
|
|
||||||
msgid "Dutch"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:36
|
|
||||||
msgid "Polish"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:37
|
|
||||||
msgid "Brazilian"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:38
|
|
||||||
msgid "Russian"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:39
|
|
||||||
msgid "Turkish"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:40
|
|
||||||
msgid "Ukrainian"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:41
|
|
||||||
msgid "Vietnamese"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences.py:42
|
|
||||||
msgid "Chinese (Simplified)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\recent.py:54
|
|
||||||
msgid "Clear List"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\search_edit.py:78
|
|
||||||
msgid "Search..."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -114,3 +114,4 @@ msgstr ""
|
|||||||
#: core\prioritize.py:158
|
#: core\prioritize.py:158
|
||||||
msgid "Size"
|
msgid "Size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -36,91 +36,91 @@ msgstr ""
|
|||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:289
|
#: core\app.py:291
|
||||||
msgid "A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again."
|
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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:300
|
#: core\app.py:302
|
||||||
msgid "No duplicates found."
|
msgid "No duplicates found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:315
|
#: core\app.py:317
|
||||||
msgid "All marked files were copied successfully."
|
msgid "All marked files were copied successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:317
|
#: core\app.py:319
|
||||||
msgid "All marked files were moved successfully."
|
msgid "All marked files were moved successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:319
|
#: core\app.py:321
|
||||||
msgid "All marked files were deleted successfully."
|
msgid "All marked files were deleted successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:321
|
#: core\app.py:323
|
||||||
msgid "All marked files were successfully sent to Trash."
|
msgid "All marked files were successfully sent to Trash."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:326
|
#: core\app.py:328
|
||||||
msgid "Could not load file: {}"
|
msgid "Could not load file: {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:382
|
#: core\app.py:384
|
||||||
msgid "'{}' already is in the list."
|
msgid "'{}' already is in the list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:384
|
#: core\app.py:386
|
||||||
msgid "'{}' does not exist."
|
msgid "'{}' does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:392
|
#: core\app.py:394
|
||||||
msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?"
|
msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:469
|
#: core\app.py:471
|
||||||
msgid "Select a directory to copy marked files to"
|
msgid "Select a directory to copy marked files to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:471
|
#: core\app.py:473
|
||||||
msgid "Select a directory to move marked files to"
|
msgid "Select a directory to move marked files to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:510
|
#: core\app.py:512
|
||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:518 core\app.py:773 core\app.py:783
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:539
|
#: core\app.py:541
|
||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:697 core\app.py:709
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:745
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:792
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:808
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:858
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\directories.py:191
|
#: core\directories.py:190
|
||||||
msgid "Collected {} files to scan"
|
msgid "Collected {} files to scan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\directories.py:207
|
#: core\directories.py:206
|
||||||
msgid "Collected {} folders to scan"
|
msgid "Collected {} folders to scan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -156,23 +156,23 @@ msgstr ""
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -180,7 +180,7 @@ msgstr ""
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -220,22 +220,27 @@ msgstr ""
|
|||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\se\scanner.py:18
|
#: core\se\scanner.py:18
|
||||||
msgid "Folders"
|
msgid "Folders"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Czech (https://app.transifex.com/voltaicideas/teams/116153/cs/)\n"
|
"Language-Team: Czech (https://www.transifex.com/voltaicideas/teams/116153/cs/)\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Neexistují žádné označené duplikáty. Nic se nestalo."
|
msgstr "Neexistují žádné označené duplikáty. Nic se nestalo."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Nejsou k dispozici žádné vybrané duplikáty. Nic se nestalo."
|
msgstr "Nejsou k dispozici žádné vybrané duplikáty. Nic se nestalo."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -27,23 +27,23 @@ msgstr ""
|
|||||||
"Chystáte se otevřít více souborů najednou. V závislosti na tom, s čím jsou "
|
"Chystáte se otevřít více souborů najednou. V závislosti na tom, s čím jsou "
|
||||||
"tyto soubory otevřeny, to může způsobit docela nepořádek. Pokračovat?"
|
"tyto soubory otevřeny, to může způsobit docela nepořádek. Pokračovat?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Vyhledávám duplicity"
|
msgstr "Vyhledávám duplicity"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Nahrávám"
|
msgstr "Nahrávám"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Přesouvám"
|
msgstr "Přesouvám"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Kopíruji"
|
msgstr "Kopíruji"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Vyhazuji do koše"
|
msgstr "Vyhazuji do koše"
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ msgstr "Vyberte adresář, kam chcete přesunout označené soubory"
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Vyberte cíl pro exportovaný soubor CSV"
|
msgstr "Vyberte cíl pro exportovaný soubor CSV"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Nelze zapisovat do souboru: {}"
|
msgstr "Nelze zapisovat do souboru: {}"
|
||||||
|
|
||||||
@ -116,23 +116,23 @@ msgid "You have no custom command set up. Set it up in your preferences."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách."
|
"Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?"
|
msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} duplicitní skupiny byly změněny změně priorit."
|
msgstr "{} duplicitní skupiny byly změněny změně priorit."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání."
|
msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Shromažďuji prohlížené soubory"
|
msgstr "Shromažďuji prohlížené soubory"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d vyřazeno)"
|
msgstr "%s (%d vyřazeno)"
|
||||||
|
|
||||||
@ -176,23 +176,23 @@ msgstr "Název souboru - pole (bez objednávky)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tagy"
|
msgstr "Tagy"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Obsah"
|
msgstr "Obsah"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Analyzováno %d/%d snímků"
|
msgstr "Analyzováno %d/%d snímků"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Provedeno %d/%d porovnání bloků"
|
msgstr "Provedeno %d/%d porovnání bloků"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Připravuji porovnávání"
|
msgstr "Připravuji porovnávání"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Ověřeno %d/%d shod"
|
msgstr "Ověřeno %d/%d shod"
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ msgstr "Ověřeno %d/%d shod"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Přečetl EXIF %d/%d obrázků"
|
msgstr "Přečetl EXIF %d/%d obrázků"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Časové razítko EXIF"
|
msgstr "Časové razítko EXIF"
|
||||||
|
|
||||||
@ -208,51 +208,55 @@ msgstr "Časové razítko EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Zádný"
|
msgstr "Zádný"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Končí číslem"
|
msgstr "Končí číslem"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Nekončí číslem"
|
msgstr "Nekončí číslem"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Nejdelší"
|
msgstr "Nejdelší"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Nejkratší"
|
msgstr "Nejkratší"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Nejvyšší"
|
msgstr "Nejvyšší"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Nejnižší"
|
msgstr "Nejnižší"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Nejnovější"
|
msgstr "Nejnovější"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Nejstarší"
|
msgstr "Nejstarší"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) duplicit označeno."
|
msgstr "%d / %d (%s / %s) duplicit označeno."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " filtr: %s"
|
msgstr " filtr: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Read size of %d/%d files"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Načtena metadata %d/%d souborů"
|
msgstr "Načtena metadata %d/%d souborů"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Skoro hotovo! Fidlování s výsledky..."
|
msgstr "Skoro hotovo! Fidlování s výsledky..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Czech (https://app.transifex.com/voltaicideas/teams/116153/cs/)\n"
|
"Language-Team: Czech (https://www.transifex.com/voltaicideas/teams/116153/cs/)\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1028,7 +1028,7 @@ msgstr "Něco se pokazilo. Co takhle nahlásit chybu?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1045,8 +1045,8 @@ msgstr ""
|
|||||||
"Přestože by aplikace měla po této chybě pokračovat, může být v nestabilním stavu, proto se doporučuje aplikaci restartovat."
|
"Přestože by aplikace měla po této chybě pokračovat, může být v nestabilním stavu, proto se doporučuje aplikaci restartovat."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Přejít na GitHub"
|
msgstr "Přejít na Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1131,36 +1131,3 @@ msgstr "Vymazání seznamu"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Hledat..."
|
msgstr "Hledat..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -6,21 +6,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Robert M, 2021\n"
|
"Last-Translator: Robert M, 2021\n"
|
||||||
"Language-Team: German (https://app.transifex.com/voltaicideas/teams/116153/de/)\n"
|
"Language-Team: German (https://www.transifex.com/voltaicideas/teams/116153/de/)\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Keine markierten Duplikate, daher wurde nichts getan."
|
msgstr "Keine markierten Duplikate, daher wurde nichts getan."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Keine ausgewählten Duplikate, daher wurde nichts getan."
|
msgstr "Keine ausgewählten Duplikate, daher wurde nichts getan."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -28,23 +28,23 @@ msgstr ""
|
|||||||
"Sie sind dabei, sehr viele Dateien gleichzeitig zu öffnen. Das kann zu "
|
"Sie sind dabei, sehr viele Dateien gleichzeitig zu öffnen. Das kann zu "
|
||||||
"ziemlichem Durcheinander führen! Trotzdem fortfahren?"
|
"ziemlichem Durcheinander führen! Trotzdem fortfahren?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Suche nach Duplikaten"
|
msgstr "Suche nach Duplikaten"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Lade"
|
msgstr "Lade"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Verschiebe"
|
msgstr "Verschiebe"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Kopiere"
|
msgstr "Kopiere"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Verschiebe in den Papierkorb"
|
msgstr "Verschiebe in den Papierkorb"
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ msgstr ""
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Zielverzeichnis für den CSV Export angeben"
|
msgstr "Zielverzeichnis für den CSV Export angeben"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Konnte Datei {} nicht schreiben."
|
msgstr "Konnte Datei {} nicht schreiben."
|
||||||
|
|
||||||
@ -123,23 +123,23 @@ msgstr ""
|
|||||||
"Sie haben noch keinen Befehl erstellt. Bitte dies in den Einstellungen vornehmen.\n"
|
"Sie haben noch keinen Befehl erstellt. Bitte dies in den Einstellungen vornehmen.\n"
|
||||||
"Bsp.: \"C:\\Program Files\\Diff\\Diff.exe\" \"%d\" \"%r\""
|
"Bsp.: \"C:\\Program Files\\Diff\\Diff.exe\" \"%d\" \"%r\""
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?"
|
msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} Duplikat-Gruppen wurden durch die Neu-Priorisierung geändert."
|
msgstr "{} Duplikat-Gruppen wurden durch die Neu-Priorisierung geändert."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Ausgewählte Ordner enthalten keine scannbaren Dateien."
|
msgstr "Ausgewählte Ordner enthalten keine scannbaren Dateien."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Sammle zu scannende Dateien..."
|
msgstr "Sammle zu scannende Dateien..."
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d verworfen)"
|
msgstr "%s (%d verworfen)"
|
||||||
|
|
||||||
@ -183,23 +183,23 @@ msgstr "Dateiname - Bereiche (ohne Reihenfolge)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Inhalt"
|
msgstr "Inhalt"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Analysiere Bild %d/%d"
|
msgstr "Analysiere Bild %d/%d"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "%d/%d Chunk-Matches ausgeführt"
|
msgstr "%d/%d Chunk-Matches ausgeführt"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Bereite Matching vor"
|
msgstr "Bereite Matching vor"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "%d/%d verifizierte Übereinstimmungen"
|
msgstr "%d/%d verifizierte Übereinstimmungen"
|
||||||
|
|
||||||
@ -207,7 +207,7 @@ msgstr "%d/%d verifizierte Übereinstimmungen"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Lese EXIF von Bild %d/%d"
|
msgstr "Lese EXIF von Bild %d/%d"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIF Zeitstempel"
|
msgstr "EXIF Zeitstempel"
|
||||||
|
|
||||||
@ -215,51 +215,55 @@ msgstr "EXIF Zeitstempel"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nichts"
|
msgstr "Nichts"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Endet mit Zahl"
|
msgstr "Endet mit Zahl"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Endet nicht mit Zahl"
|
msgstr "Endet nicht mit Zahl"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Längste"
|
msgstr "Längste"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Kürzeste"
|
msgstr "Kürzeste"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Höchste"
|
msgstr "Höchste"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Niedrigste"
|
msgstr "Niedrigste"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Neuste"
|
msgstr "Neuste"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Älterste"
|
msgstr "Älterste"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) Duplikate markiert."
|
msgstr "%d / %d (%s / %s) Duplikate markiert."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " Filter: %s"
|
msgstr " Filter: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Lese Größe von %d/%d Dateien"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Lese Metadaten von %d/%d Dateien"
|
msgstr "Lese Metadaten von %d/%d Dateien"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Fast fertig! Arrangiere Ergebnisse..."
|
msgstr "Fast fertig! Arrangiere Ergebnisse..."
|
||||||
|
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Robert M, 2022
|
# Robert M, 2022
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Frederik Gschaider <frederik.gschaider@gmail.com>, 2022
|
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: German (https://app.transifex.com/voltaicideas/teams/116153/de/)\n"
|
"Language-Team: German (https://www.transifex.com/voltaicideas/teams/116153/de/)\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -975,41 +974,37 @@ msgstr "Ignoriere Dateien größer als"
|
|||||||
|
|
||||||
#: qt\app.py:135 qt\app.py:293
|
#: qt\app.py:135 qt\app.py:293
|
||||||
msgid "Clear Cache"
|
msgid "Clear Cache"
|
||||||
msgstr "Zwischenspeicher leeren"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:294
|
#: qt\app.py:294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Do you really want to clear the cache? This will remove all cached file "
|
"Do you really want to clear the cache? This will remove all cached file "
|
||||||
"hashes and picture analysis."
|
"hashes and picture analysis."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Möchten Sie den Zwischenspeicher wirklich löschen? Dadurch werden alle "
|
|
||||||
"zwischengespeicherten Datei-Prüfsummen und Bildanalysen entfernt."
|
|
||||||
|
|
||||||
#: qt\app.py:299
|
#: qt\app.py:299
|
||||||
msgid "Cache cleared."
|
msgid "Cache cleared."
|
||||||
msgstr "Zwischenspeicher geleert."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:173
|
#: qt\preferences_dialog.py:173
|
||||||
msgid "Use dark style"
|
msgid "Use dark style"
|
||||||
msgstr "Dunklen Stil anwenden"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:241
|
#: qt\preferences_dialog.py:241
|
||||||
msgid "Profile scan operation"
|
msgid "Profile scan operation"
|
||||||
msgstr "Profil-Scanvorgang"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:242
|
#: qt\preferences_dialog.py:242
|
||||||
msgid "Profile the scan operation and save logs for optimization."
|
msgid "Profile the scan operation and save logs for optimization."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Erstellen Sie ein Profil des Scanvorgangs und speichern Sie die Protokolle "
|
|
||||||
"zur Optimierung."
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:246
|
#: qt\preferences_dialog.py:246
|
||||||
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
||||||
msgstr "Die Protokolle befinden sich in: <a href=\"{}\">{}</a>"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:291
|
#: qt\preferences_dialog.py:291
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
msgstr "Fehlerbehebung"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:31
|
#: qt\about_box.py:31
|
||||||
msgid "About {}"
|
msgid "About {}"
|
||||||
@ -1021,7 +1016,7 @@ msgstr "Version {}"
|
|||||||
|
|
||||||
#: qt\about_box.py:49 qt\about_box.py:75
|
#: qt\about_box.py:49 qt\about_box.py:75
|
||||||
msgid "Checking for updates..."
|
msgid "Checking for updates..."
|
||||||
msgstr "Nach Aktualisierungen suchen..."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:54
|
#: qt\about_box.py:54
|
||||||
msgid "Licensed under GPLv3"
|
msgid "Licensed under GPLv3"
|
||||||
@ -1029,11 +1024,11 @@ msgstr "Lizenziert unter GPLv3"
|
|||||||
|
|
||||||
#: qt\about_box.py:68
|
#: qt\about_box.py:68
|
||||||
msgid "No update available."
|
msgid "No update available."
|
||||||
msgstr "Keine Aktualisierung verfügbar."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:71
|
#: qt\about_box.py:71
|
||||||
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
||||||
msgstr "Neue Version {} verfügbar, <a href=\"{}\">hier</a> herunterladen."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:50
|
#: qt\error_report_dialog.py:50
|
||||||
msgid "Error Report"
|
msgid "Error Report"
|
||||||
@ -1045,7 +1040,7 @@ msgstr "Etwas ist schief gelaufen. Wie wäre es, den Fehler zu melden?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1053,7 +1048,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Fehlerberichte sollten als GitHub-Probleme gemeldet werden. Sie können den obigen Fehler-Traceback kopieren und in eine neue Ausgabe einfügen.\n"
|
"Fehlerberichte sollten als Github-Probleme gemeldet werden. Sie können den obigen Fehler-Traceback kopieren und in eine neue Ausgabe einfügen.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Bitte stellen Sie sicher, dass Sie vorher nach bereits vorhandenen Problemen suchen. Stellen Sie außerdem sicher, dass Sie die neueste Version testen, die im Repository verfügbar ist, da der aufgetretene Fehler möglicherweise bereits behoben wurde.\n"
|
"Bitte stellen Sie sicher, dass Sie vorher nach bereits vorhandenen Problemen suchen. Stellen Sie außerdem sicher, dass Sie die neueste Version testen, die im Repository verfügbar ist, da der aufgetretene Fehler möglicherweise bereits behoben wurde.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1062,8 +1057,8 @@ msgstr ""
|
|||||||
"Obwohl die Anwendung nach diesem Fehler weiterhin ausgeführt werden sollte, befindet sie sich möglicherweise in einem instabilen Zustand. Es wird daher empfohlen, die Anwendung neu zu starten."
|
"Obwohl die Anwendung nach diesem Fehler weiterhin ausgeführt werden sollte, befindet sie sich möglicherweise in einem instabilen Zustand. Es wird daher empfohlen, die Anwendung neu zu starten."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Geh zu GitHub"
|
msgstr "Geh zu Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1148,36 +1143,3 @@ msgstr "Liste löschen"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Suche..."
|
msgstr "Suche..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Greek (https://app.transifex.com/voltaicideas/teams/116153/el/)\n"
|
"Language-Team: Greek (https://www.transifex.com/voltaicideas/teams/116153/el/)\n"
|
||||||
"Language: el\n"
|
"Language: el\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Δεν υπάρχουν μαρκαρισμένα διπλότυπα. Δεν έγινε τίποτα."
|
msgstr "Δεν υπάρχουν μαρκαρισμένα διπλότυπα. Δεν έγινε τίποτα."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Δεν υπάρχουν επιλεγμένα διπλότυπα. Δεν έγινε τίποτα."
|
msgstr "Δεν υπάρχουν επιλεγμένα διπλότυπα. Δεν έγινε τίποτα."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -28,23 +28,23 @@ msgstr ""
|
|||||||
"ανοίγουν αυτάτα αρχεία, κάτι τέτοιο μπορεί να προκαλέσει ένα μικρό χάος. "
|
"ανοίγουν αυτάτα αρχεία, κάτι τέτοιο μπορεί να προκαλέσει ένα μικρό χάος. "
|
||||||
"Συνέχεια;"
|
"Συνέχεια;"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Σάρωση για διπλότυπα"
|
msgstr "Σάρωση για διπλότυπα"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Φόρτωση"
|
msgstr "Φόρτωση"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Μετακίνηση"
|
msgstr "Μετακίνηση"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Αντιγραφή"
|
msgstr "Αντιγραφή"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Αποστολή στα σκουπίδια"
|
msgstr "Αποστολή στα σκουπίδια"
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ msgstr "Επιλέξτε έναν κατάλογο για να μετακινή
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Επιλέξτε έναν προορισμό για το εξαγόμενο CSV σας"
|
msgstr "Επιλέξτε έναν προορισμό για το εξαγόμενο CSV σας"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Δεν ήταν δυνατή η εγγραφή στο αρχείο: {}"
|
msgstr "Δεν ήταν δυνατή η εγγραφή στο αρχείο: {}"
|
||||||
|
|
||||||
@ -115,23 +115,23 @@ msgstr "Δεν ήταν δυνατή η εγγραφή στο αρχείο: {}"
|
|||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "Δεν έχετε ορίσει ειδική εντολή. Ρυθμίστε τη στις προτιμήσεις σας. "
|
msgstr "Δεν έχετε ορίσει ειδική εντολή. Ρυθμίστε τη στις προτιμήσεις σας. "
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Πρόκειται να αφαιρέσετε %d αρχεία από τα αποτελέσματα. Συνέχεια;"
|
msgstr "Πρόκειται να αφαιρέσετε %d αρχεία από τα αποτελέσματα. Συνέχεια;"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} ομάδες διπλοτύπων άλλαξαν από το επαναπροσδιορισμό."
|
msgstr "{} ομάδες διπλοτύπων άλλαξαν από το επαναπροσδιορισμό."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Οι επιλεγμένοι φάκελοι δεν περιέχουν σαρώσιμα αρχεία."
|
msgstr "Οι επιλεγμένοι φάκελοι δεν περιέχουν σαρώσιμα αρχεία."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Συλλογή αρχείων για σάρωση"
|
msgstr "Συλλογή αρχείων για σάρωση"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d απορρίφθηκαν)"
|
msgstr "%s (%d απορρίφθηκαν)"
|
||||||
|
|
||||||
@ -175,23 +175,23 @@ msgstr "Όνομα αρχείου - Πεδία (Χωρίς παραγγελία)
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "ετικέτα"
|
msgstr "ετικέτα"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Περιεχόμενα"
|
msgstr "Περιεχόμενα"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Ανάλυση %d/%d εικόνων"
|
msgstr "Ανάλυση %d/%d εικόνων"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Εκτέλεση %d/%d μερικής ταυτοποίησης"
|
msgstr "Εκτέλεση %d/%d μερικής ταυτοποίησης"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Προετοιμασία για σύγκριση"
|
msgstr "Προετοιμασία για σύγκριση"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Πιστοποίηση %d/%d ταυτόσημων"
|
msgstr "Πιστοποίηση %d/%d ταυτόσημων"
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ msgstr "Πιστοποίηση %d/%d ταυτόσημων"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Ανάγνωση EXIF %d/%d εικόνες"
|
msgstr "Ανάγνωση EXIF %d/%d εικόνες"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Χρονική σήμανση EXIF"
|
msgstr "Χρονική σήμανση EXIF"
|
||||||
|
|
||||||
@ -207,51 +207,55 @@ msgstr "Χρονική σήμανση EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Καμμία"
|
msgstr "Καμμία"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Λήγει με αριθμό"
|
msgstr "Λήγει με αριθμό"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Δεν λήγει με αριθμό"
|
msgstr "Δεν λήγει με αριθμό"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Μεγαλύτερο"
|
msgstr "Μεγαλύτερο"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Μικρότερο"
|
msgstr "Μικρότερο"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Υψηλότερη"
|
msgstr "Υψηλότερη"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Χαμηλότερη"
|
msgstr "Χαμηλότερη"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Νεώτερο"
|
msgstr "Νεώτερο"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Παλαιότερο"
|
msgstr "Παλαιότερο"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) επιλεγμένα διπλότυπα."
|
msgstr "%d / %d (%s / %s) επιλεγμένα διπλότυπα."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " φίλτρο: %s"
|
msgstr " φίλτρο: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Ανάγνωση μεγέθους %d/%d αρχείων"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Ανάγνωση μεταδεδομένων των %d/%d αρχείων"
|
msgstr "Ανάγνωση μεταδεδομένων των %d/%d αρχείων"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Σχεδόν τελείωσα! Παιχνίδι με αποτελέσματα ..."
|
msgstr "Σχεδόν τελείωσα! Παιχνίδι με αποτελέσματα ..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
||||||
"Language-Team: Greek (https://app.transifex.com/voltaicideas/teams/116153/el/)\n"
|
"Language-Team: Greek (https://www.transifex.com/voltaicideas/teams/116153/el/)\n"
|
||||||
"Language: el\n"
|
"Language: el\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1045,7 +1045,7 @@ msgstr "Κάτι πήγε στραβά. Μήπως να αναφερθεί το
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1053,7 +1053,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Οι αναφορές σφαλμάτων πρέπει να αναφέρονται ως ζητήματα GitHub. Μπορείτε να αντιγράψετε την ανίχνευση σφαλμάτων παραπάνω και να την επικολλήσετε σε ένα νέο ζήτημα.\n"
|
"Οι αναφορές σφαλμάτων πρέπει να αναφέρονται ως ζητήματα Github. Μπορείτε να αντιγράψετε την ανίχνευση σφαλμάτων παραπάνω και να την επικολλήσετε σε ένα νέο ζήτημα.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Βεβαιωθείτε ότι έχετε πραγματοποιήσει αναζήτηση για τυχόν υπάρχοντα ζητήματα εκ των προτέρων. Επίσης, φροντίστε να δοκιμάσετε την πιο πρόσφατη διαθέσιμη έκδοση από το αποθετήριο, καθώς το σφάλμα που αντιμετωπίζετε ενδέχεται να έχει ήδη διορθωθεί.\n"
|
"Βεβαιωθείτε ότι έχετε πραγματοποιήσει αναζήτηση για τυχόν υπάρχοντα ζητήματα εκ των προτέρων. Επίσης, φροντίστε να δοκιμάσετε την πιο πρόσφατη διαθέσιμη έκδοση από το αποθετήριο, καθώς το σφάλμα που αντιμετωπίζετε ενδέχεται να έχει ήδη διορθωθεί.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1062,8 +1062,8 @@ msgstr ""
|
|||||||
"Παρόλο που η εφαρμογή θα πρέπει να συνεχίσει να εκτελείται μετά από αυτό το σφάλμα, ενδέχεται να βρίσκεται σε ασταθή κατάσταση, επομένως συνιστάται να κάνετε επανεκκίνηση της εφαρμογής."
|
"Παρόλο που η εφαρμογή θα πρέπει να συνεχίσει να εκτελείται μετά από αυτό το σφάλμα, ενδέχεται να βρίσκεται σε ασταθή κατάσταση, επομένως συνιστάται να κάνετε επανεκκίνηση της εφαρμογής."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Επίσκεψη GitHub"
|
msgstr "Επίσκεψη Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1148,36 +1148,3 @@ msgstr "Εκκαθάριση λίστας"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Αναζήτηση..."
|
msgstr "Αναζήτηση..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -307,10 +307,6 @@ msgstr "Debug mode (restart required)"
|
|||||||
msgid "Match pictures of different dimensions"
|
msgid "Match pictures of different dimensions"
|
||||||
msgstr "Match pictures of different dimensions"
|
msgstr "Match pictures of different dimensions"
|
||||||
|
|
||||||
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr "Match pictures of different rotations"
|
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:43
|
#: qt/preferences_dialog.py:43
|
||||||
msgid "Filter Hardness:"
|
msgid "Filter Hardness:"
|
||||||
msgstr "Filter Hardness:"
|
msgstr "Filter Hardness:"
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: IlluminatiWave, 2022\n"
|
"Last-Translator: IlluminatiWave, 2022\n"
|
||||||
"Language-Team: Spanish (https://app.transifex.com/voltaicideas/teams/116153/es/)\n"
|
"Language-Team: Spanish (https://www.transifex.com/voltaicideas/teams/116153/es/)\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:44
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
@ -48,7 +48,7 @@ msgstr "Copiando"
|
|||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Enviando a la Papelera"
|
msgstr "Enviando a la Papelera"
|
||||||
|
|
||||||
#: core\app.py:289
|
#: core\app.py:291
|
||||||
msgid ""
|
msgid ""
|
||||||
"A previous action is still hanging in there. You can't start a new one yet. "
|
"A previous action is still hanging in there. You can't start a new one yet. "
|
||||||
"Wait a few seconds, then try again."
|
"Wait a few seconds, then try again."
|
||||||
@ -56,40 +56,40 @@ msgstr ""
|
|||||||
"Una acción previa sigue ejecutándose. No puede abrir una nueva todavía. "
|
"Una acción previa sigue ejecutándose. No puede abrir una nueva todavía. "
|
||||||
"Espere unos segundos y vuelva a intentarlo."
|
"Espere unos segundos y vuelva a intentarlo."
|
||||||
|
|
||||||
#: core\app.py:300
|
#: core\app.py:302
|
||||||
msgid "No duplicates found."
|
msgid "No duplicates found."
|
||||||
msgstr "No se han encontrado duplicados."
|
msgstr "No se han encontrado duplicados."
|
||||||
|
|
||||||
#: core\app.py:315
|
#: core\app.py:317
|
||||||
msgid "All marked files were copied successfully."
|
msgid "All marked files were copied successfully."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Todos los ficheros seleccionados han sido copiados satisfactoriamente."
|
"Todos los ficheros seleccionados han sido copiados satisfactoriamente."
|
||||||
|
|
||||||
#: core\app.py:317
|
#: core\app.py:319
|
||||||
msgid "All marked files were moved successfully."
|
msgid "All marked files were moved successfully."
|
||||||
msgstr "Todos los ficheros seleccionados se han movidos satisfactoriamente."
|
msgstr "Todos los ficheros seleccionados se han movidos satisfactoriamente."
|
||||||
|
|
||||||
#: core\app.py:319
|
#: core\app.py:321
|
||||||
msgid "All marked files were deleted successfully."
|
msgid "All marked files were deleted successfully."
|
||||||
msgstr "Todos los ficheros seleccionados se han eliminado satisfactoriamente."
|
msgstr "Todos los ficheros seleccionados se han eliminado satisfactoriamente."
|
||||||
|
|
||||||
#: core\app.py:321
|
#: core\app.py:323
|
||||||
msgid "All marked files were successfully sent to Trash."
|
msgid "All marked files were successfully sent to Trash."
|
||||||
msgstr "Todo los ficheros marcados se han enviado a la papelera exitosamente."
|
msgstr "Todo los ficheros marcados se han enviado a la papelera exitosamente."
|
||||||
|
|
||||||
#: core\app.py:326
|
#: core\app.py:328
|
||||||
msgid "Could not load file: {}"
|
msgid "Could not load file: {}"
|
||||||
msgstr "No se pudo cargar el archivo: {}"
|
msgstr "No se pudo cargar el archivo: {}"
|
||||||
|
|
||||||
#: core\app.py:382
|
#: core\app.py:384
|
||||||
msgid "'{}' already is in the list."
|
msgid "'{}' already is in the list."
|
||||||
msgstr "'{}' ya está en la lista."
|
msgstr "'{}' ya está en la lista."
|
||||||
|
|
||||||
#: core\app.py:384
|
#: core\app.py:386
|
||||||
msgid "'{}' does not exist."
|
msgid "'{}' does not exist."
|
||||||
msgstr "'{}' no existe."
|
msgstr "'{}' no existe."
|
||||||
|
|
||||||
#: core\app.py:392
|
#: core\app.py:394
|
||||||
msgid ""
|
msgid ""
|
||||||
"All selected %d matches are going to be ignored in all subsequent scans. "
|
"All selected %d matches are going to be ignored in all subsequent scans. "
|
||||||
"Continue?"
|
"Continue?"
|
||||||
@ -97,51 +97,51 @@ msgstr ""
|
|||||||
"Todas las %d coincidencias seleccionadas van a ser ignoradas en las "
|
"Todas las %d coincidencias seleccionadas van a ser ignoradas en las "
|
||||||
"subsiguientes exploraciones. ¿Continuar?"
|
"subsiguientes exploraciones. ¿Continuar?"
|
||||||
|
|
||||||
#: core\app.py:469
|
#: core\app.py:471
|
||||||
msgid "Select a directory to copy marked files to"
|
msgid "Select a directory to copy marked files to"
|
||||||
msgstr "Seleccione un directorio donde desee copiar los archivos marcados"
|
msgstr "Seleccione un directorio donde desee copiar los archivos marcados"
|
||||||
|
|
||||||
#: core\app.py:471
|
#: core\app.py:473
|
||||||
msgid "Select a directory to move marked files to"
|
msgid "Select a directory to move marked files to"
|
||||||
msgstr "Seleccione un directorio al que desee mover los archivos marcados"
|
msgstr "Seleccione un directorio al que desee mover los archivos marcados"
|
||||||
|
|
||||||
#: core\app.py:510
|
#: core\app.py:512
|
||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Seleccionar un destino para el CSV seleccionado"
|
msgstr "Seleccionar un destino para el CSV seleccionado"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:518 core\app.py:773 core\app.py:783
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "No se pudo escribir en el archivo: {}"
|
msgstr "No se pudo escribir en el archivo: {}"
|
||||||
|
|
||||||
#: core\app.py:539
|
#: core\app.py:541
|
||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "No hay comandos configurados. Establézcalos en sus preferencias."
|
msgstr "No hay comandos configurados. Establézcalos en sus preferencias."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:697 core\app.py:709
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Está a punto de eliminar %d ficheros de resultados. ¿Continuar?"
|
msgstr "Está a punto de eliminar %d ficheros de resultados. ¿Continuar?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:745
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} grupos de duplicados han sido cambiados por la re-priorización."
|
msgstr "{} grupos de duplicados han sido cambiados por la re-priorización."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:792
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Las carpetas seleccionadas no contienen ficheros para explorar."
|
msgstr "Las carpetas seleccionadas no contienen ficheros para explorar."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:808
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Recopilando ficheros a explorar"
|
msgstr "Recopilando ficheros a explorar"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:858
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d descartados)"
|
msgstr "%s (%d descartados)"
|
||||||
|
|
||||||
#: core\directories.py:191
|
#: core\directories.py:190
|
||||||
msgid "Collected {} files to scan"
|
msgid "Collected {} files to scan"
|
||||||
msgstr "{} ficheros recopilados para explorar"
|
msgstr "{} ficheros recopilados para explorar"
|
||||||
|
|
||||||
#: core\directories.py:207
|
#: core\directories.py:206
|
||||||
msgid "Collected {} folders to scan"
|
msgid "Collected {} folders to scan"
|
||||||
msgstr "{} carpetas recopiladas para explorar"
|
msgstr "{} carpetas recopiladas para explorar"
|
||||||
|
|
||||||
@ -178,23 +178,23 @@ msgstr "Nombre de archivo - Campos (sin orden)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Etiquetas"
|
msgstr "Etiquetas"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Contenido"
|
msgstr "Contenido"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Analizadas %d/%d imágenes"
|
msgstr "Analizadas %d/%d imágenes"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Realizado %d/%d trozos coincidentes"
|
msgstr "Realizado %d/%d trozos coincidentes"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Preparando para coincidencias"
|
msgstr "Preparando para coincidencias"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Verificadas %d/%d coincidencias"
|
msgstr "Verificadas %d/%d coincidencias"
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ msgstr "Verificadas %d/%d coincidencias"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Leído EXIF de %d/%d imágenes"
|
msgstr "Leído EXIF de %d/%d imágenes"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Marca horaria EXIF"
|
msgstr "Marca horaria EXIF"
|
||||||
|
|
||||||
@ -242,19 +242,23 @@ msgstr "El más nuevo"
|
|||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "El más antiguo"
|
msgstr "El más antiguo"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) duplicados marcados."
|
msgstr "%d / %d (%s / %s) duplicados marcados."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "filtro: %s"
|
msgstr "filtro: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Tamaño de lectura de %d/%d ficheros"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Leyendo metadatos de %d/%d ficheros"
|
msgstr "Leyendo metadatos de %d/%d ficheros"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "¡Casi termino! Jugando con los resultados..."
|
msgstr "¡Casi termino! Jugando con los resultados..."
|
||||||
|
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: IlluminatiWave, 2022\n"
|
"Last-Translator: IlluminatiWave, 2022\n"
|
||||||
"Language-Team: Spanish (https://app.transifex.com/voltaicideas/teams/116153/es/)\n"
|
"Language-Team: Spanish (https://www.transifex.com/voltaicideas/teams/116153/es/)\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: qt/app.py:81
|
#: qt/app.py:81
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
@ -316,10 +316,6 @@ msgstr "Mode de depuración (se requiere reinicio)"
|
|||||||
msgid "Match pictures of different dimensions"
|
msgid "Match pictures of different dimensions"
|
||||||
msgstr "Coincidencia de imágenes de distintas dimensiones"
|
msgstr "Coincidencia de imágenes de distintas dimensiones"
|
||||||
|
|
||||||
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr "Coincidencia de imágenes de distintas rotaciones"
|
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:43
|
#: qt/preferences_dialog.py:43
|
||||||
msgid "Filter Hardness:"
|
msgid "Filter Hardness:"
|
||||||
msgstr "Dureza del Filtro:"
|
msgstr "Dureza del Filtro:"
|
||||||
@ -1049,7 +1045,7 @@ msgstr "Algo salió mal. ¿Qué tal informar el error?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1057,7 +1053,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Los informes de errores deben notificarse en Problemas de GitHub. Puede copiar el seguimiento del error anterior y pegarlo en un nuevo número.\n"
|
"Los informes de errores deben notificarse en Problemas de Github. Puede copiar el seguimiento del error anterior y pegarlo en un nuevo número.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Asegúrese de realizar una búsqueda de los problemas ya existentes de antemano. También asegúrese de probar la última versión disponible en el repositorio, ya que es posible que el error que está experimentando ya se haya corregido.\n"
|
"Asegúrese de realizar una búsqueda de los problemas ya existentes de antemano. También asegúrese de probar la última versión disponible en el repositorio, ya que es posible que el error que está experimentando ya se haya corregido.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1066,8 +1062,8 @@ msgstr ""
|
|||||||
"Aunque la aplicación debería continuar ejecutándose después de este error, puede estar en un estado inestable, por lo que se recomienda que reinicie la aplicación."
|
"Aunque la aplicación debería continuar ejecutándose después de este error, puede estar en un estado inestable, por lo que se recomienda que reinicie la aplicación."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Ir a GitHub"
|
msgstr "Ir a Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1152,32 +1148,3 @@ msgstr "Limpiar lista"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Búsqueda..."
|
msgstr "Búsqueda..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: French (https://app.transifex.com/voltaicideas/teams/116153/fr/)\n"
|
"Language-Team: French (https://www.transifex.com/voltaicideas/teams/116153/fr/)\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Aucun doublon marqué. Rien à faire."
|
msgstr "Aucun doublon marqué. Rien à faire."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Aucun doublon sélectionné. Rien à faire."
|
msgstr "Aucun doublon sélectionné. Rien à faire."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -27,23 +27,23 @@ msgstr ""
|
|||||||
"Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement "
|
"Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement "
|
||||||
"encombrer votre système. Continuer?"
|
"encombrer votre système. Continuer?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Scan de doublons en cours"
|
msgstr "Scan de doublons en cours"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Chargement en cours"
|
msgstr "Chargement en cours"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Déplacement en cours"
|
msgstr "Déplacement en cours"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Copie en cours"
|
msgstr "Copie en cours"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Envoi de fichiers à la corbeille"
|
msgstr "Envoi de fichiers à la corbeille"
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ msgstr "Sélectionnez un dossier vers lequel déplacer les fichiers marqués."
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Choisissez une destination pour votre exportation CSV"
|
msgstr "Choisissez une destination pour votre exportation CSV"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Impossible d'écrire le fichier: {}"
|
msgstr "Impossible d'écrire le fichier: {}"
|
||||||
|
|
||||||
@ -115,23 +115,23 @@ msgid "You have no custom command set up. Set it up in your preferences."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences."
|
"Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "%d fichiers seront retirés des résultats. Continuer?"
|
msgstr "%d fichiers seront retirés des résultats. Continuer?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation."
|
msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides."
|
msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Collecte des fichiers à scanner"
|
msgstr "Collecte des fichiers à scanner"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d hors-groupe)"
|
msgstr "%s (%d hors-groupe)"
|
||||||
|
|
||||||
@ -177,23 +177,23 @@ msgstr "Nom de fichier - Champs (sans ordre)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Contenu"
|
msgstr "Contenu"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Analyzé %d/%d images"
|
msgstr "Analyzé %d/%d images"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "%d/%d blocs d'images comparés"
|
msgstr "%d/%d blocs d'images comparés"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Préparation pour la comparaison"
|
msgstr "Préparation pour la comparaison"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Vérifié %d/%d paires"
|
msgstr "Vérifié %d/%d paires"
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ msgstr "Vérifié %d/%d paires"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Lu l'EXIF de %d/%d images"
|
msgstr "Lu l'EXIF de %d/%d images"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Date EXIF"
|
msgstr "Date EXIF"
|
||||||
|
|
||||||
@ -209,51 +209,55 @@ msgstr "Date EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Aucune"
|
msgstr "Aucune"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Chiffres à la fin"
|
msgstr "Chiffres à la fin"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Pas de chiffres à la finr"
|
msgstr "Pas de chiffres à la finr"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Le plus long"
|
msgstr "Le plus long"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Le plus court"
|
msgstr "Le plus court"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Plus grand"
|
msgstr "Plus grand"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Moins grand"
|
msgstr "Moins grand"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Plus récent"
|
msgstr "Plus récent"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Moins récent"
|
msgstr "Moins récent"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) doublons marqués."
|
msgstr "%d / %d (%s / %s) doublons marqués."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " filtre: %s"
|
msgstr " filtre: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Lu la taille de %d/%d fichiers"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Lu les métadonnées de %d/%d fichiers"
|
msgstr "Lu les métadonnées de %d/%d fichiers"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Bientôt terminé! Bidouille des résultats..."
|
msgstr "Bientôt terminé! Bidouille des résultats..."
|
||||||
|
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: French (https://app.transifex.com/voltaicideas/teams/116153/fr/)\n"
|
"Language-Team: French (https://www.transifex.com/voltaicideas/teams/116153/fr/)\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: qt/app.py:81
|
#: qt/app.py:81
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
@ -1033,7 +1033,7 @@ msgstr "Un problème est survenu. Rapporter l'erreur?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1041,7 +1041,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Les rapports d'erreur doivent être envoyé via les tickets GitHub. Vous pouvez copier l'historique d'erreur ci-dessus et le coller dans un nouveau ticket.\n"
|
"Les rapports d'erreur doivent être envoyé via les tickets Github. Vous pouvez copier l'historique d'erreur ci-dessus et le coller dans un nouveau ticket.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Veuillez vous assurer auparavant d'avoir fait une recherche pour un ticket similaire. Assurez-vous aussi d'avoir testé la toute dernière version disponible depuis le dépôt car le bug que vous avez rencontré a peut-être déjà été corrigé. \n"
|
"Veuillez vous assurer auparavant d'avoir fait une recherche pour un ticket similaire. Assurez-vous aussi d'avoir testé la toute dernière version disponible depuis le dépôt car le bug que vous avez rencontré a peut-être déjà été corrigé. \n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1050,8 +1050,8 @@ msgstr ""
|
|||||||
" Même si cette application continue de fonctionner après cette erreur, elle peut être dans un état instable, et il est donc recommandé de relancer l'application."
|
" Même si cette application continue de fonctionner après cette erreur, elle peut être dans un état instable, et il est donc recommandé de relancer l'application."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Aller sur GitHub"
|
msgstr "Aller sur Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1136,36 +1136,3 @@ msgstr "Vider la liste"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Recherche..."
|
msgstr "Recherche..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Armenian (https://app.transifex.com/voltaicideas/teams/116153/hy/)\n"
|
"Language-Team: Armenian (https://www.transifex.com/voltaicideas/teams/116153/hy/)\n"
|
||||||
"Language: hy\n"
|
"Language: hy\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Նշված կրկնօրինակներ չկան: Ոչինչ չի արվել."
|
msgstr "Նշված կրկնօրինակներ չկան: Ոչինչ չի արվել."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Ընտրված կրկնօրինակներ չկան: Ոչինչ չի արվել."
|
msgstr "Ընտրված կրկնօրինակներ չկան: Ոչինչ չի արվել."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -28,23 +28,23 @@ msgstr ""
|
|||||||
"են բացվում այդ ֆայլերը, դա անելը կարող է բավականին խառնաշփոթ ստեղծել: "
|
"են բացվում այդ ֆայլերը, դա անելը կարող է բավականին խառնաշփոթ ստեղծել: "
|
||||||
"Շարունակել?"
|
"Շարունակել?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Ստուգվում են կրկնօրինակները"
|
msgstr "Ստուգվում են կրկնօրինակները"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Բացվում է"
|
msgstr "Բացվում է"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Տեղափոխվում է"
|
msgstr "Տեղափոխվում է"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Պատճենվում է"
|
msgstr "Պատճենվում է"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Ուղարկվում է Աղբարկղ"
|
msgstr "Ուղարկվում է Աղբարկղ"
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ msgstr ""
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Ընտրեք նպատակակետ ձեր արտահանված CSV- ի համար"
|
msgstr "Ընտրեք նպատակակետ ձեր արտահանված CSV- ի համար"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Չէր կարող գրել է ֆայլը: {}"
|
msgstr "Չէր կարող գրել է ֆայլը: {}"
|
||||||
|
|
||||||
@ -116,23 +116,23 @@ msgstr "Չէր կարող գրել է ֆայլը: {}"
|
|||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:"
|
msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:"
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:"
|
msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} կրկնօրինակ խմբերը փոխվել են առաջնահերթության կարգով:"
|
msgstr "{} կրկնօրինակ խմբերը փոխվել են առաջնահերթության կարգով:"
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:"
|
msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:"
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար"
|
msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d անպիտան)"
|
msgstr "%s (%d անպիտան)"
|
||||||
|
|
||||||
@ -176,23 +176,23 @@ msgstr "Ֆայլի անուն - դաշտեր (պատվեր չկա)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Բովանդակություն"
|
msgstr "Բովանդակություն"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Ստուգվում է %d/%d նկարները"
|
msgstr "Ստուգվում է %d/%d նկարները"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Կատարվում է %d/%d տվյալի համընկնում"
|
msgstr "Կատարվում է %d/%d տվյալի համընկնում"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Նախապատրաստեցվում է համընկնումը"
|
msgstr "Նախապատրաստեցվում է համընկնումը"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Ստուգում է %d/%d համընկնումները"
|
msgstr "Ստուգում է %d/%d համընկնումները"
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ msgstr "Ստուգում է %d/%d համընկնումները"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Կարդալ EXIF-ը d/%d նկարներից"
|
msgstr "Կարդալ EXIF-ը d/%d նկարներից"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIF Timestamp"
|
msgstr "EXIF Timestamp"
|
||||||
|
|
||||||
@ -208,51 +208,55 @@ msgstr "EXIF Timestamp"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Ոչինչ"
|
msgstr "Ոչինչ"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Ավարտվում է թվով"
|
msgstr "Ավարտվում է թվով"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Չի ավարտվում է թվով"
|
msgstr "Չի ավարտվում է թվով"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Ամենաերկար"
|
msgstr "Ամենաերկար"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Ամենակարճը"
|
msgstr "Ամենակարճը"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Ամենաբարձրը"
|
msgstr "Ամենաբարձրը"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Ամենացածրը"
|
msgstr "Ամենացածրը"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Նորագույնը"
|
msgstr "Նորագույնը"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Ամենահինը"
|
msgstr "Ամենահինը"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) նշված կրկնօրինակներ:"
|
msgstr "%d / %d (%s / %s) նշված կրկնօրինակներ:"
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "ֆիլտր. %s"
|
msgstr "ֆիլտր. %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Կարդալ %d/%d ֆայլերի չափը"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Կարդալ %d/%d ֆայլերի մետատվյալները"
|
msgstr "Կարդալ %d/%d ֆայլերի մետատվյալները"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Գրեթե արված է! Արդյունքների կազմակերպում..."
|
msgstr "Գրեթե արված է! Արդյունքների կազմակերպում..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Armenian (https://app.transifex.com/voltaicideas/teams/116153/hy/)\n"
|
"Language-Team: Armenian (https://www.transifex.com/voltaicideas/teams/116153/hy/)\n"
|
||||||
"Language: hy\n"
|
"Language: hy\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1013,7 +1013,7 @@ msgstr "Ինչ որ բան այնպես չգնաց. Հաղորդել սխալը?
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1021,7 +1021,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Error հաշվետվությունները պետք է հրապարակվեն որպես GitHub հարցերի շուրջ: Կարող եք վերևում պատճենել սխալի հետևումը և տեղադրել այն նոր համարում:\n"
|
"Error հաշվետվությունները պետք է հրապարակվեն որպես Github հարցերի շուրջ: Կարող եք վերևում պատճենել սխալի հետևումը և տեղադրել այն նոր համարում:\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Խնդրում ենք համոզվեք, որ նախապես փնտրեք արդեն գոյություն ունեցող ցանկացած խնդիր: Նաեւ համոզվեք, որ ստուգել են հենց վերջին տարբերակը մատչելի շտեմարան, քանի որ Bug դուք ապրում գուցե արդեն patched.\n"
|
"Խնդրում ենք համոզվեք, որ նախապես փնտրեք արդեն գոյություն ունեցող ցանկացած խնդիր: Նաեւ համոզվեք, որ ստուգել են հենց վերջին տարբերակը մատչելի շտեմարան, քանի որ Bug դուք ապրում գուցե արդեն patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1030,7 +1030,7 @@ msgstr ""
|
|||||||
"Չնայած այս սխալից հետո ծրագիրը պետք է շարունակի գործել, այն կարող է լինել անկայուն վիճակում, ուստի խորհուրդ է տրվում վերագործարկել ծրագիրը:"
|
"Չնայած այս սխալից հետո ծրագիրը պետք է շարունակի գործել, այն կարող է լինել անկայուն վիճակում, ուստի խորհուրդ է տրվում վերագործարկել ծրագիրը:"
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Գնացեք Գիթուբ"
|
msgstr "Գնացեք Գիթուբ"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
@ -1116,36 +1116,3 @@ msgstr "Մաքրել ցանկը"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Որոնել..."
|
msgstr "Որոնել..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -1,27 +1,27 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2021
|
||||||
# Fuan <jcfrt@posteo.net>, 2021
|
# Fuan <jcfrt@posteo.net>, 2021
|
||||||
# Emanuele, 2021
|
# Emanuele, 2021
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
"Last-Translator: Emanuele, 2021\n"
|
||||||
"Language-Team: Italian (https://app.transifex.com/voltaicideas/teams/116153/it/)\n"
|
"Language-Team: Italian (https://www.transifex.com/voltaicideas/teams/116153/it/)\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Non ci sono duplicati marcati. Nessuna operazione è stata completata."
|
msgstr "Non ci sono duplicati marcati. Nessuna operazione è stata completata."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Non ci sono duplicati selezionati. Nessuna operazione è stata completata."
|
"Non ci sono duplicati selezionati. Nessuna operazione è stata completata."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -29,23 +29,23 @@ msgstr ""
|
|||||||
"Stai per aprire molti file contemporaneamente. A seconda di quale programma "
|
"Stai per aprire molti file contemporaneamente. A seconda di quale programma "
|
||||||
"li aprirà, potrebbe crearsi un bel casino. Vuoi continuare?"
|
"li aprirà, potrebbe crearsi un bel casino. Vuoi continuare?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Scansione per i duplicati"
|
msgstr "Scansione per i duplicati"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Caricamento"
|
msgstr "Caricamento"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Spostamento"
|
msgstr "Spostamento"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Copia in corso"
|
msgstr "Copia in corso"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Spostamento nel cestino"
|
msgstr "Spostamento nel cestino"
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ msgstr ""
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Seleziona una destinazione per il file CSV"
|
msgstr "Seleziona una destinazione per il file CSV"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Impossibile modificare il file: {}"
|
msgstr "Impossibile modificare il file: {}"
|
||||||
|
|
||||||
@ -120,23 +120,23 @@ msgstr ""
|
|||||||
"Non hai impostato nessun comando personalizzato. Impostalo nelle tue "
|
"Non hai impostato nessun comando personalizzato. Impostalo nelle tue "
|
||||||
"preferenze."
|
"preferenze."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Stai per rimuovere %d file dai risultati. Continuare?"
|
msgstr "Stai per rimuovere %d file dai risultati. Continuare?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} gruppi duplicati sono stati cambiati dalla nuova priorirità"
|
msgstr "{} gruppi duplicati sono stati cambiati dalla nuova priorirità"
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Le cartelle selezionate non contengono file da scansionare."
|
msgstr "Le cartelle selezionate non contengono file da scansionare."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Raccolta file da scansionare"
|
msgstr "Raccolta file da scansionare"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d scartati)"
|
msgstr "%s (%d scartati)"
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ msgstr "Raccolte {} cartelle da scansionare"
|
|||||||
|
|
||||||
#: core\engine.py:27
|
#: core\engine.py:27
|
||||||
msgid "%d matches found from %d groups"
|
msgid "%d matches found from %d groups"
|
||||||
msgstr "%d corrispondenze trovate da %d gruppi"
|
msgstr "%d corrispondeze trovate da %d gruppi"
|
||||||
|
|
||||||
#: core\gui\deletion_options.py:71
|
#: core\gui\deletion_options.py:71
|
||||||
msgid "You are sending {} file(s) to the Trash."
|
msgid "You are sending {} file(s) to the Trash."
|
||||||
@ -182,23 +182,23 @@ msgstr "Nome file - Campi (Nessun Ordine)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tag"
|
msgstr "Tag"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Contenuti"
|
msgstr "Contenuti"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Analizzate %d/%d immagini"
|
msgstr "Analizzate %d/%d immagini"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Effettuate %d/%d comparazioni sui sottogruppi di immagini"
|
msgstr "Effettuate %d/%d comparazioni sui sottogruppi di immagini"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Preparazione per la comparazione"
|
msgstr "Preparazione per la comparazione"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Verificate %d/%d somiglianze"
|
msgstr "Verificate %d/%d somiglianze"
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ msgstr "Verificate %d/%d somiglianze"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Leggi dati EXIF da %d/%d immagini"
|
msgstr "Leggi dati EXIF da %d/%d immagini"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Timestamp EXIF"
|
msgstr "Timestamp EXIF"
|
||||||
|
|
||||||
@ -214,51 +214,55 @@ msgstr "Timestamp EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nessuno"
|
msgstr "Nessuno"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Termina con un numero"
|
msgstr "Termina con un numero"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Non termina con un numero"
|
msgstr "Non termina con un numero"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Più lungo"
|
msgstr "Più lungo"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Più corto"
|
msgstr "Più corto"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Il più alto"
|
msgstr "Il più alto"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Il più basso"
|
msgstr "Il più basso"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Il più nuovo"
|
msgstr "Il più nuovo"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Il più vecchio"
|
msgstr "Il più vecchio"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) duplicati marcati."
|
msgstr "%d / %d (%s / %s) duplicati marcati."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " filtro: %s"
|
msgstr " filtro: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Lettura dimensione di %d/%d file"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Lettura metadata di %d/%d files"
|
msgstr "Lettura metadata di %d/%d files"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Quasi finito! Sto organizzando i risultati..."
|
msgstr "Quasi finito! Sto organizzando i risultati..."
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Emanuele, 2022
|
# Emanuele, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Giovanni Donisi, 2022
|
# Giovanni, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Giovanni, 2022\n"
|
||||||
"Language-Team: Italian (https://app.transifex.com/voltaicideas/teams/116153/it/)\n"
|
"Language-Team: Italian (https://www.transifex.com/voltaicideas/teams/116153/it/)\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1049,7 +1049,7 @@ msgstr "Qualcosa è andato storto. Che ne dici di segnalare l'errore?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1057,7 +1057,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"I rapporti di errore dovrebbero essere segnalati come problemi di GitHub. Puoi copiare il traceback degli errori sopra e incollarlo in un nuovo numero.\n"
|
"I rapporti di errore dovrebbero essere segnalati come problemi di Github. Puoi copiare il traceback degli errori sopra e incollarlo in un nuovo numero.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Assicurati di eseguire prima una ricerca per eventuali problemi già esistenti. Assicurati anche di testare l'ultima versione disponibile dal repository, poiché il bug che stai riscontrando potrebbe essere già stato corretto.\n"
|
"Assicurati di eseguire prima una ricerca per eventuali problemi già esistenti. Assicurati anche di testare l'ultima versione disponibile dal repository, poiché il bug che stai riscontrando potrebbe essere già stato corretto.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1066,8 +1066,8 @@ msgstr ""
|
|||||||
"Sebbene l'applicazione debba continuare a essere eseguita dopo questo errore, potrebbe essere in uno stato instabile, quindi si consiglia di riavviare l'applicazione."
|
"Sebbene l'applicazione debba continuare a essere eseguita dopo questo errore, potrebbe essere in uno stato instabile, quindi si consiglia di riavviare l'applicazione."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Apri in GitHub"
|
msgstr "Apri in Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1152,36 +1152,3 @@ msgstr "Cancellare l'elenco"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Ricerca..."
|
msgstr "Ricerca..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Japanese (https://app.transifex.com/voltaicideas/teams/116153/ja/)\n"
|
"Language-Team: Japanese (https://www.transifex.com/voltaicideas/teams/116153/ja/)\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -45,95 +45,95 @@ msgstr "コピー中"
|
|||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "ごみ箱に送信します"
|
msgstr "ごみ箱に送信します"
|
||||||
|
|
||||||
#: core\app.py:289
|
#: core\app.py:291
|
||||||
msgid ""
|
msgid ""
|
||||||
"A previous action is still hanging in there. You can't start a new one yet. "
|
"A previous action is still hanging in there. You can't start a new one yet. "
|
||||||
"Wait a few seconds, then try again."
|
"Wait a few seconds, then try again."
|
||||||
msgstr "前のアクションはまだそこにぶら下がっています。 まだ新しいものを始めることはできません。 数秒待ってから、再試行してください。"
|
msgstr "前のアクションはまだそこにぶら下がっています。 まだ新しいものを始めることはできません。 数秒待ってから、再試行してください。"
|
||||||
|
|
||||||
#: core\app.py:300
|
#: core\app.py:302
|
||||||
msgid "No duplicates found."
|
msgid "No duplicates found."
|
||||||
msgstr "重複は見つかりませんでした。"
|
msgstr "重複は見つかりませんでした。"
|
||||||
|
|
||||||
#: core\app.py:315
|
#: core\app.py:317
|
||||||
msgid "All marked files were copied successfully."
|
msgid "All marked files were copied successfully."
|
||||||
msgstr "チェックを入れたファイルをすべてコピーしました。"
|
msgstr "チェックを入れたファイルをすべてコピーしました。"
|
||||||
|
|
||||||
#: core\app.py:317
|
#: core\app.py:319
|
||||||
msgid "All marked files were moved successfully."
|
msgid "All marked files were moved successfully."
|
||||||
msgstr "チェックを入れたファイルをすべて移動しました。"
|
msgstr "チェックを入れたファイルをすべて移動しました。"
|
||||||
|
|
||||||
#: core\app.py:319
|
#: core\app.py:321
|
||||||
msgid "All marked files were deleted successfully."
|
msgid "All marked files were deleted successfully."
|
||||||
msgstr "チェックを入れたファイルをすべて削除しました。"
|
msgstr "チェックを入れたファイルをすべて削除しました。"
|
||||||
|
|
||||||
#: core\app.py:321
|
#: core\app.py:323
|
||||||
msgid "All marked files were successfully sent to Trash."
|
msgid "All marked files were successfully sent to Trash."
|
||||||
msgstr "チェックを入れたファイルをすべてごみ箱に移動しました。"
|
msgstr "チェックを入れたファイルをすべてごみ箱に移動しました。"
|
||||||
|
|
||||||
#: core\app.py:326
|
#: core\app.py:328
|
||||||
msgid "Could not load file: {}"
|
msgid "Could not load file: {}"
|
||||||
msgstr "ファイルを読み込めませんでした:{}"
|
msgstr "ファイルを読み込めませんでした:{}"
|
||||||
|
|
||||||
#: core\app.py:382
|
#: core\app.py:384
|
||||||
msgid "'{}' already is in the list."
|
msgid "'{}' already is in the list."
|
||||||
msgstr "「{}」既にリストに含まれています。"
|
msgstr "「{}」既にリストに含まれています。"
|
||||||
|
|
||||||
#: core\app.py:384
|
#: core\app.py:386
|
||||||
msgid "'{}' does not exist."
|
msgid "'{}' does not exist."
|
||||||
msgstr "'{}' 存在しません。"
|
msgstr "'{}' 存在しません。"
|
||||||
|
|
||||||
#: core\app.py:392
|
#: core\app.py:394
|
||||||
msgid ""
|
msgid ""
|
||||||
"All selected %d matches are going to be ignored in all subsequent scans. "
|
"All selected %d matches are going to be ignored in all subsequent scans. "
|
||||||
"Continue?"
|
"Continue?"
|
||||||
msgstr "選択した%d個の一致は、以降のすべてのスキャンで無視されます。 継続する?"
|
msgstr "選択した%d個の一致は、以降のすべてのスキャンで無視されます。 継続する?"
|
||||||
|
|
||||||
#: core\app.py:469
|
#: core\app.py:471
|
||||||
msgid "Select a directory to copy marked files to"
|
msgid "Select a directory to copy marked files to"
|
||||||
msgstr "マークされたファイルをコピーするディレクトリを選択してください"
|
msgstr "マークされたファイルをコピーするディレクトリを選択してください"
|
||||||
|
|
||||||
#: core\app.py:471
|
#: core\app.py:473
|
||||||
msgid "Select a directory to move marked files to"
|
msgid "Select a directory to move marked files to"
|
||||||
msgstr "マークされたファイルを移動するディレクトリを選択してください"
|
msgstr "マークされたファイルを移動するディレクトリを選択してください"
|
||||||
|
|
||||||
#: core\app.py:510
|
#: core\app.py:512
|
||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "エクスポートしたCSVの宛先を選択します。"
|
msgstr "エクスポートしたCSVの宛先を選択します。"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:518 core\app.py:773 core\app.py:783
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "ファイルに書き込めませんでした:{}"
|
msgstr "ファイルに書き込めませんでした:{}"
|
||||||
|
|
||||||
#: core\app.py:539
|
#: core\app.py:541
|
||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "カスタムコマンドは設定されていません。 お好みで設定してください。"
|
msgstr "カスタムコマンドは設定されていません。 お好みで設定してください。"
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:697 core\app.py:709
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "結果から%d個のファイルを削除しようとしています。 継続する?"
|
msgstr "結果から%d個のファイルを削除しようとしています。 継続する?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:745
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{}重複するグループは、再優先順位付けによって変更されました。"
|
msgstr "{}重複するグループは、再優先順位付けによって変更されました。"
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:792
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "選択したディレクトリにはスキャン可能なファイルが含まれていません。"
|
msgstr "選択したディレクトリにはスキャン可能なファイルが含まれていません。"
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:808
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "スキャンするファイルを収集しています"
|
msgstr "スキャンするファイルを収集しています"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:858
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d 廃棄)"
|
msgstr "%s (%d 廃棄)"
|
||||||
|
|
||||||
#: core\directories.py:191
|
#: core\directories.py:190
|
||||||
msgid "Collected {} files to scan"
|
msgid "Collected {} files to scan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: core\directories.py:207
|
#: core\directories.py:206
|
||||||
msgid "Collected {} folders to scan"
|
msgid "Collected {} folders to scan"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -169,23 +169,23 @@ msgstr "ファイル名 - フィールド(順序なし)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "タグ"
|
msgstr "タグ"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "内容"
|
msgstr "内容"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "%d/%d 枚の写真を分析しました"
|
msgstr "%d/%d 枚の写真を分析しました"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "チャンクマッチを%d/%d回実行しました"
|
msgstr "チャンクマッチを%d/%d回実行しました"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "マッチングの準備"
|
msgstr "マッチングの準備"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "%d/%d件の一致を確認"
|
msgstr "%d/%d件の一致を確認"
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ msgstr "%d/%d件の一致を確認"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "%d/%d枚の写真のEXIFを読みました"
|
msgstr "%d/%d枚の写真のEXIFを読みました"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIFタイムスタンプ"
|
msgstr "EXIFタイムスタンプ"
|
||||||
|
|
||||||
@ -233,19 +233,23 @@ msgstr "最新"
|
|||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "最古"
|
msgstr "最古"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s)マークされた重複。"
|
msgstr "%d / %d (%s / %s)マークされた重複。"
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "フィルタ: %s"
|
msgstr "フィルタ: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "%d/%dファイルのサイズを読み取った"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "%d/%dファイルのメタデータを読み取った"
|
msgstr "%d/%dファイルのメタデータを読み取った"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "ほぼ完了しました! 結果をいじっています..."
|
msgstr "ほぼ完了しました! 結果をいじっています..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Japanese (https://app.transifex.com/voltaicideas/teams/116153/ja/)\n"
|
"Language-Team: Japanese (https://www.transifex.com/voltaicideas/teams/116153/ja/)\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1017,7 +1017,7 @@ msgstr "不明な理由により失敗しました。問題を報告しません
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1025,7 +1025,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"エラーレポートはGitHubの問題として報告する必要があります。 上記のエラートレースバックをコピーして、新しい問題に貼り付けることができます。\n"
|
"エラーレポートはGithubの問題として報告する必要があります。 上記のエラートレースバックをコピーして、新しい問題に貼り付けることができます。\n"
|
||||||
"\n"
|
"\n"
|
||||||
"事前に既存の問題を検索してください。 また、発生しているバグにはすでにパッチが適用されている可能性があるため、リポジトリから入手できる最新バージョンをテストしてください。\n"
|
"事前に既存の問題を検索してください。 また、発生しているバグにはすでにパッチが適用されている可能性があるため、リポジトリから入手できる最新バージョンをテストしてください。\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1034,8 +1034,8 @@ msgstr ""
|
|||||||
"このエラーの後もアプリケーションは実行を継続するはずですが、不安定な状態になっている可能性があるため、アプリケーションを再起動することをお勧めします。"
|
"このエラーの後もアプリケーションは実行を継続するはずですが、不安定な状態になっている可能性があるため、アプリケーションを再起動することをお勧めします。"
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "GitHubに移動"
|
msgstr "Githubに移動"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1120,36 +1120,3 @@ msgstr "リストをクリア"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "探索..."
|
msgstr "探索..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2021
|
||||||
# Sangdon Lim, 2022
|
# Sangdon Lim, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Sangdon Lim, 2022\n"
|
||||||
"Language-Team: Korean (https://app.transifex.com/voltaicideas/teams/116153/ko/)\n"
|
"Language-Team: Korean (https://www.transifex.com/voltaicideas/teams/116153/ko/)\n"
|
||||||
"Language: ko\n"
|
"Language: ko\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -18,7 +18,7 @@ msgstr "파일 경로"
|
|||||||
|
|
||||||
#: core\gui\problem_table.py:19
|
#: core\gui\problem_table.py:19
|
||||||
msgid "Error Message"
|
msgid "Error Message"
|
||||||
msgstr "오류 메시지"
|
msgstr "에러 메시지"
|
||||||
|
|
||||||
#: core\me\prioritize.py:23
|
#: core\me\prioritize.py:23
|
||||||
msgid "Duration"
|
msgid "Duration"
|
||||||
@ -26,16 +26,16 @@ msgstr "길이"
|
|||||||
|
|
||||||
#: core\me\prioritize.py:30 core\me\result_table.py:23
|
#: core\me\prioritize.py:30 core\me\result_table.py:23
|
||||||
msgid "Bitrate"
|
msgid "Bitrate"
|
||||||
msgstr "비트전송률"
|
msgstr "비트레이트"
|
||||||
|
|
||||||
#: core\me\prioritize.py:37
|
#: core\me\prioritize.py:37
|
||||||
msgid "Samplerate"
|
msgid "Samplerate"
|
||||||
msgstr "샘플전송률"
|
msgstr "샘플레이트"
|
||||||
|
|
||||||
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:94
|
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:94
|
||||||
#: core\se\result_table.py:19
|
#: core\se\result_table.py:19
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
msgstr "파일 이름"
|
msgstr "폴더명"
|
||||||
|
|
||||||
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
|
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
|
||||||
#: core\se\result_table.py:20
|
#: core\se\result_table.py:20
|
||||||
@ -52,7 +52,7 @@ msgstr "시간"
|
|||||||
|
|
||||||
#: core\me\result_table.py:24
|
#: core\me\result_table.py:24
|
||||||
msgid "Sample Rate"
|
msgid "Sample Rate"
|
||||||
msgstr "샘플전송률"
|
msgstr "샘플레이트"
|
||||||
|
|
||||||
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
|
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
|
||||||
#: core\se\result_table.py:22
|
#: core\se\result_table.py:22
|
||||||
@ -95,11 +95,11 @@ msgstr "주석"
|
|||||||
#: core\me\result_table.py:34 core\pe\result_table.py:26
|
#: core\me\result_table.py:34 core\pe\result_table.py:26
|
||||||
#: core\se\result_table.py:24
|
#: core\se\result_table.py:24
|
||||||
msgid "Match %"
|
msgid "Match %"
|
||||||
msgstr "일치율%"
|
msgstr "일치정도"
|
||||||
|
|
||||||
#: core\me\result_table.py:35 core\se\result_table.py:25
|
#: core\me\result_table.py:35 core\se\result_table.py:25
|
||||||
msgid "Words Used"
|
msgid "Words Used"
|
||||||
msgstr "단어 목록"
|
msgstr "사용된 단어수"
|
||||||
|
|
||||||
#: core\me\result_table.py:36 core\pe\result_table.py:27
|
#: core\me\result_table.py:36 core\pe\result_table.py:27
|
||||||
#: core\se\result_table.py:26
|
#: core\se\result_table.py:26
|
||||||
@ -108,7 +108,7 @@ msgstr "중복파일 갯수"
|
|||||||
|
|
||||||
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
|
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
|
||||||
msgid "Dimensions"
|
msgid "Dimensions"
|
||||||
msgstr "가로세로 크기"
|
msgstr "치수"
|
||||||
|
|
||||||
#: core\pe\result_table.py:21 core\se\result_table.py:21
|
#: core\pe\result_table.py:21 core\se\result_table.py:21
|
||||||
msgid "Size (KB)"
|
msgid "Size (KB)"
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2021
|
||||||
# Fuan <jcfrt@posteo.net>, 2021
|
# Fuan <jcfrt@posteo.net>, 2021
|
||||||
# Sangdon Lim, 2022
|
# Sangdon Lim, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Sangdon Lim, 2022\n"
|
||||||
"Language-Team: Korean (https://app.transifex.com/voltaicideas/teams/116153/ko/)\n"
|
"Language-Team: Korean (https://www.transifex.com/voltaicideas/teams/116153/ko/)\n"
|
||||||
"Language: ko\n"
|
"Language: ko\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -14,11 +14,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:44
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "아무 파일도 마크되지 않아 작업을 수행하지 않았습니다."
|
msgstr "표시된 중복 항목이 없습니다. 아무것도하지 않았습니다."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:45
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "아무 파일도 선택되지 않아 작업을 수행하지 않았습니다."
|
msgstr "선택한 중복 항목이 없습니다. 아무것도하지 않았습니다."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:46
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -28,7 +28,7 @@ msgstr "한 번에 많은 파일을 열려고 합니다. 시스템 설정에 따
|
|||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:73
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "중복 파일 검색 중"
|
msgstr "중복 검색"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:74
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
@ -46,95 +46,95 @@ msgstr "복사중"
|
|||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "휴지통으로 보내기"
|
msgstr "휴지통으로 보내기"
|
||||||
|
|
||||||
#: core\app.py:289
|
#: core\app.py:291
|
||||||
msgid ""
|
msgid ""
|
||||||
"A previous action is still hanging in there. You can't start a new one yet. "
|
"A previous action is still hanging in there. You can't start a new one yet. "
|
||||||
"Wait a few seconds, then try again."
|
"Wait a few seconds, then try again."
|
||||||
msgstr "이전 작업이 아직 진행 중이어서 새 작업을 시작할 수 없습니다. 몇 초 후에 다시 시도해 보세요."
|
msgstr "이전 작업이 아직 진행 중이어서 새 작업을 시작할 수 없습니다. 몇 초 후에 다시 시도해 보세요."
|
||||||
|
|
||||||
#: core\app.py:300
|
#: core\app.py:302
|
||||||
msgid "No duplicates found."
|
msgid "No duplicates found."
|
||||||
msgstr "중복 파일이 없습니다."
|
msgstr "중복 파일이 없습니다."
|
||||||
|
|
||||||
#: core\app.py:315
|
|
||||||
msgid "All marked files were copied successfully."
|
|
||||||
msgstr "마크된 모든 파일이 성공적으로 복사되었습니다."
|
|
||||||
|
|
||||||
#: core\app.py:317
|
#: core\app.py:317
|
||||||
msgid "All marked files were moved successfully."
|
msgid "All marked files were copied successfully."
|
||||||
msgstr "마크된 모든 파일이 성공적으로 이동되었습니다."
|
msgstr "표시된 모든 파일이 성공적으로 복사되었습니다."
|
||||||
|
|
||||||
#: core\app.py:319
|
#: core\app.py:319
|
||||||
msgid "All marked files were deleted successfully."
|
msgid "All marked files were moved successfully."
|
||||||
msgstr "마크된 모든 파일이 성공적으로 삭제되었습니다."
|
msgstr "표시된 모든 파일이 성공적으로 이동되었습니다."
|
||||||
|
|
||||||
#: core\app.py:321
|
#: core\app.py:321
|
||||||
|
msgid "All marked files were deleted successfully."
|
||||||
|
msgstr "표시된 모든 파일이 성공적으로 제거되었습니다."
|
||||||
|
|
||||||
|
#: core\app.py:323
|
||||||
msgid "All marked files were successfully sent to Trash."
|
msgid "All marked files were successfully sent to Trash."
|
||||||
msgstr "마크된 모든 파일을 휴지통으로 보냈습니다."
|
msgstr "표시된 모든 파일이 성공적으로 휴지통으로 전송되었습니다."
|
||||||
|
|
||||||
#: core\app.py:326
|
#: core\app.py:328
|
||||||
msgid "Could not load file: {}"
|
msgid "Could not load file: {}"
|
||||||
msgstr "파일을 불러올 수 없습니다: {}"
|
msgstr "파일을로드 할 수 없습니다 : {}"
|
||||||
|
|
||||||
#: core\app.py:382
|
#: core\app.py:384
|
||||||
msgid "'{}' already is in the list."
|
msgid "'{}' already is in the list."
|
||||||
msgstr "'{}' 는 이미 목록에 있습니다."
|
msgstr "'{}' 는 이미 목록에 있습니다."
|
||||||
|
|
||||||
#: core\app.py:384
|
#: core\app.py:386
|
||||||
msgid "'{}' does not exist."
|
msgid "'{}' does not exist."
|
||||||
msgstr "'{}' 가 존재하지 않습니다."
|
msgstr "'{}' 가 존재하지 않습니다."
|
||||||
|
|
||||||
#: core\app.py:392
|
#: core\app.py:394
|
||||||
msgid ""
|
msgid ""
|
||||||
"All selected %d matches are going to be ignored in all subsequent scans. "
|
"All selected %d matches are going to be ignored in all subsequent scans. "
|
||||||
"Continue?"
|
"Continue?"
|
||||||
msgstr "선택한 %d개 항목을 검색에서 무시합니다. 진행하시겠습니까?"
|
msgstr "선택된 %d개의 일치 항목은 모든 후속 검색에서 무시됩니다. 계속하다?"
|
||||||
|
|
||||||
#: core\app.py:469
|
|
||||||
msgid "Select a directory to copy marked files to"
|
|
||||||
msgstr "마크하신 파일을 복사할 경로를 선택하세요:"
|
|
||||||
|
|
||||||
#: core\app.py:471
|
#: core\app.py:471
|
||||||
|
msgid "Select a directory to copy marked files to"
|
||||||
|
msgstr "표시된 파일을 복사 할 디렉토리를 선택하십시오"
|
||||||
|
|
||||||
|
#: core\app.py:473
|
||||||
msgid "Select a directory to move marked files to"
|
msgid "Select a directory to move marked files to"
|
||||||
msgstr "마크하신 파일을 이동할 경로를 선택하세요:"
|
msgstr "표시된 파일을 이동할 디렉토리를 선택하십시오"
|
||||||
|
|
||||||
#: core\app.py:510
|
#: core\app.py:512
|
||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "CSV 파일의 저장 경로를 지정해주세요"
|
msgstr "내 보낸 CSV의 대상을 선택하십시오"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:518 core\app.py:773 core\app.py:783
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "파일에 쓸 수 없습니다 : {}"
|
msgstr "파일에 쓸 수 없습니다 : {}"
|
||||||
|
|
||||||
#: core\app.py:539
|
#: core\app.py:541
|
||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "사용자 지정 명령을 설정하지 않았습니다. 기본 설정에서 설정하십시오."
|
msgstr "사용자 지정 명령을 설정하지 않았습니다. 기본 설정에서 설정하십시오."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:697 core\app.py:709
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "결과에서 %d 개의 파일을 제거하려고합니다. 실행하시겠습니까?"
|
msgstr "결과에서 %d 개의 파일을 제거하려고합니다. 실행할까요?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:745
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} 개의 중복 그룹이 우선 순위 재 지정으로 변경되었습니다."
|
msgstr "{} 개의 중복 그룹이 우선 순위 재 지정으로 변경되었습니다."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:792
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "선택한 경로에 스캔 가능한 파일이 없습니다."
|
msgstr "선택한 디렉토리에 스캔 가능한 파일이 없습니다."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:808
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "스캔 가능 파일 수집중"
|
msgstr "스캔 할 파일 수집"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:858
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d 폐기)"
|
msgstr "%s (%d 폐기)"
|
||||||
|
|
||||||
#: core\directories.py:191
|
#: core\directories.py:190
|
||||||
msgid "Collected {} files to scan"
|
msgid "Collected {} files to scan"
|
||||||
msgstr "파일 목록 생성 중: {}개 파일"
|
msgstr "파일 목록 생성 중: {}개 파일"
|
||||||
|
|
||||||
#: core\directories.py:207
|
#: core\directories.py:206
|
||||||
msgid "Collected {} folders to scan"
|
msgid "Collected {} folders to scan"
|
||||||
msgstr "폴더 목록 생성 중: {}개 폴더"
|
msgstr "폴더 목록 생성 중: {}개 폴더"
|
||||||
|
|
||||||
@ -170,23 +170,23 @@ msgstr "파일 이름 - 필드 (순서 없음)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "태그"
|
msgstr "태그"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "내용"
|
msgstr "내용"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "사진 %d/%d 개 분석됨"
|
msgstr "%d/%d 사진 분석"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "%d/%d 청크 매치 수행"
|
msgstr "%d/%d 청크 매치 수행"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "매칭 준비"
|
msgstr "매칭 준비"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "%d/%d 일치 확인"
|
msgstr "%d/%d 일치 확인"
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ msgstr "%d/%d 일치 확인"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "사진 EXIF 읽는 중: %d/%d"
|
msgstr "사진 EXIF 읽는 중: %d/%d"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIF 타임 스탬프"
|
msgstr "EXIF 타임 스탬프"
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ msgstr "최단"
|
|||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:142
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "최고"
|
msgstr "제일 높은"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:142
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
@ -234,19 +234,23 @@ msgstr "최신"
|
|||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "가장 오래된"
|
msgstr "가장 오래된"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) 개의 중복 파일을 마크했습니다."
|
msgstr "%d / %d (%s / %s) 개의 중복이 표시되었습니다."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "필터: %s"
|
msgstr "필터: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "파일 크기 읽는 중: %d/%d"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "파일 메타데이터 읽는 중: %d/%d"
|
msgstr "파일 메타데이터 읽는 중: %d/%d"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "거의 완료되었습니다! 결과를 취합하고 있습니다."
|
msgstr "거의 완료되었습니다! 결과를 취합하고 있습니다."
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Sangdon Lim, 2022
|
# Sangdon Lim, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Sangdon Lim, 2022\n"
|
||||||
"Language-Team: Korean (https://app.transifex.com/voltaicideas/teams/116153/ko/)\n"
|
"Language-Team: Korean (https://www.transifex.com/voltaicideas/teams/116153/ko/)\n"
|
||||||
"Language: ko\n"
|
"Language: ko\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -19,7 +19,7 @@ msgstr "나가기"
|
|||||||
#: qt/app.py:82 qt/preferences_dialog.py:116
|
#: qt/app.py:82 qt/preferences_dialog.py:116
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr "설정"
|
msgstr "옵션"
|
||||||
|
|
||||||
#: qt/app.py:83 qt/ignore_list_dialog.py:32
|
#: qt/app.py:83 qt/ignore_list_dialog.py:32
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
@ -82,7 +82,7 @@ msgstr "(미지원)"
|
|||||||
|
|
||||||
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
|
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Directly delete files"
|
msgid "Directly delete files"
|
||||||
msgstr "파일 직접삭제"
|
msgstr "즉시 삭제"
|
||||||
|
|
||||||
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
|
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -104,12 +104,12 @@ msgstr "속성"
|
|||||||
|
|
||||||
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
|
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Selected"
|
msgid "Selected"
|
||||||
msgstr "선택한 파일"
|
msgstr "선택됨"
|
||||||
|
|
||||||
#: qt/details_table.py:16 qt/directories_model.py:24
|
#: qt/details_table.py:16 qt/directories_model.py:24
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Reference"
|
msgid "Reference"
|
||||||
msgstr "기준 파일"
|
msgstr "참조"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Load Results..."
|
msgid "Load Results..."
|
||||||
@ -159,15 +159,15 @@ msgstr "표준"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Scan Type:"
|
msgid "Scan Type:"
|
||||||
msgstr "스캔 방식:"
|
msgstr "스캔 유형 :"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:135
|
#: qt/directories_dialog.py:135
|
||||||
msgid "More Options"
|
msgid "More Options"
|
||||||
msgstr "설정"
|
msgstr "더 많은 옵션"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Select folders to scan and press \"Scan\"."
|
msgid "Select folders to scan and press \"Scan\"."
|
||||||
msgstr "스캔할 폴더들을 목록에 추가하고 오른쪽 아래의 \"스캔\" 버튼을 누르십시오."
|
msgstr "스캔 할 폴더를 선택하고 \"스캔\"을 누르십시오."
|
||||||
|
|
||||||
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Load Results"
|
msgid "Load Results"
|
||||||
@ -183,7 +183,7 @@ msgstr "저장되지 않은 결과"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "You have unsaved results, do you really want to quit?"
|
msgid "You have unsaved results, do you really want to quit?"
|
||||||
msgstr "결과를 저장하지않고 종료하시겠습니까?"
|
msgstr "저장되지 않은 결과가 있습니다. 종료하시겠습니까?"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Select a folder to add to the scanning list"
|
msgid "Select a folder to add to the scanning list"
|
||||||
@ -191,7 +191,7 @@ msgstr "스캔 목록에 추가 할 폴더를 선택하십시오"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Select a results file to load"
|
msgid "Select a results file to load"
|
||||||
msgstr "불러올 결과 파일을 선택하십시오"
|
msgstr "로드 할 결과 파일을 선택하십시오"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:267
|
#: qt/directories_dialog.py:267
|
||||||
msgid "All Files (*.*)"
|
msgid "All Files (*.*)"
|
||||||
@ -207,7 +207,7 @@ msgstr "새 스캔 시작"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:279 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:279 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "You have unsaved results, do you really want to continue?"
|
msgid "You have unsaved results, do you really want to continue?"
|
||||||
msgstr "결과를 저장하지않고 진행하시겠습니까?"
|
msgstr "저장되지 않은 결과가 있습니다. 계속 하시겠습니까?"
|
||||||
|
|
||||||
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
@ -219,7 +219,7 @@ msgstr "상태"
|
|||||||
|
|
||||||
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Excluded"
|
msgid "Excluded"
|
||||||
msgstr "제외"
|
msgstr "제외된"
|
||||||
|
|
||||||
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Normal"
|
msgid "Normal"
|
||||||
@ -242,11 +242,11 @@ msgstr "닫기"
|
|||||||
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
|
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Details"
|
msgid "Details"
|
||||||
msgstr "파일 속성"
|
msgstr "세부사항"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Tags to scan:"
|
msgid "Tags to scan:"
|
||||||
msgstr "스캔 태그 :"
|
msgstr "스캔 할 태그 :"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Track"
|
msgid "Track"
|
||||||
@ -275,17 +275,17 @@ msgstr "년"
|
|||||||
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
|
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Word weighting"
|
msgid "Word weighting"
|
||||||
msgstr "파일 이름 중 긴 단어에 가중치 적용"
|
msgstr "단어 가중치"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
|
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Match similar words"
|
msgid "Match similar words"
|
||||||
msgstr "파일 이름 중 비슷한 단어도 중복으로 허용"
|
msgstr "유사한 단어와 일치"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
|
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
|
||||||
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Can mix file kind"
|
msgid "Can mix file kind"
|
||||||
msgstr "확장자가 다른 파일도 중복 여부 확인"
|
msgstr "다른 확장자의 파일도 비교에 포함"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
|
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
|
||||||
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
||||||
@ -295,7 +295,7 @@ msgstr "필터링 할 때 정규식 사용"
|
|||||||
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
|
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
|
||||||
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Remove empty folders on delete or move"
|
msgid "Remove empty folders on delete or move"
|
||||||
msgstr "삭제 또는 이동 후 폴더가 빈 폴더가 되면 폴더 삭제"
|
msgstr "삭제 또는 이동시 빈 폴더 제거"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
|
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
|
||||||
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
|
||||||
@ -309,19 +309,19 @@ msgstr "디버그 모드 (다시 시작 필요)"
|
|||||||
|
|
||||||
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Match pictures of different dimensions"
|
msgid "Match pictures of different dimensions"
|
||||||
msgstr "가로세로 크기가 다른 이미지도 중복 여부 확인"
|
msgstr "가로세로 크기가 다른 이미지도 비교"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:43
|
#: qt/preferences_dialog.py:43
|
||||||
msgid "Filter Hardness:"
|
msgid "Filter Hardness:"
|
||||||
msgstr "필터 민감도:"
|
msgstr "필터 경도 :"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:69
|
#: qt/preferences_dialog.py:69
|
||||||
msgid "More Results"
|
msgid "More Results"
|
||||||
msgstr "결과 더보기"
|
msgstr "더 많은 결과"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:74
|
#: qt/preferences_dialog.py:74
|
||||||
msgid "Fewer Results"
|
msgid "Fewer Results"
|
||||||
msgstr "결과 줄이기"
|
msgstr "더 적은 결과"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:81
|
#: qt/preferences_dialog.py:81
|
||||||
msgid "Font size:"
|
msgid "Font size:"
|
||||||
@ -337,15 +337,15 @@ msgstr "복사 및 이동 :"
|
|||||||
|
|
||||||
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
|
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Right in destination"
|
msgid "Right in destination"
|
||||||
msgstr "대상 폴더에"
|
msgstr "목적지에 직접"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:95 cocoa/en.lproj/Localizable.strings:0
|
#: qt/preferences_dialog.py:95 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Recreate relative path"
|
msgid "Recreate relative path"
|
||||||
msgstr "대상 폴더를 시작으로 상대 경로를 재생성"
|
msgstr "상대 경로 재생성"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:96 cocoa/en.lproj/Localizable.strings:0
|
#: qt/preferences_dialog.py:96 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Recreate absolute path"
|
msgid "Recreate absolute path"
|
||||||
msgstr "대상 폴더를 시작으로 절대 경로를 재생성"
|
msgstr "절대 경로 재생성"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:99
|
#: qt/preferences_dialog.py:99
|
||||||
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
|
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
|
||||||
@ -353,7 +353,7 @@ msgstr "사용자 지정 명령 (인수: %d 은 중복, %r 은 참조):"
|
|||||||
|
|
||||||
#: qt/preferences_dialog.py:174
|
#: qt/preferences_dialog.py:174
|
||||||
msgid "dupeGuru has to restart for language changes to take effect."
|
msgid "dupeGuru has to restart for language changes to take effect."
|
||||||
msgstr "언어 변경은 dupeGuru의 재시작이 필요합니다."
|
msgstr "언어 변경 사항을 적용하려면 dupeGuru를 다시 시작해야합니다."
|
||||||
|
|
||||||
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
|
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Re-Prioritize duplicates"
|
msgid "Re-Prioritize duplicates"
|
||||||
@ -365,12 +365,12 @@ msgid ""
|
|||||||
" the best to these criteria to their respective group's reference position. "
|
" the best to these criteria to their respective group's reference position. "
|
||||||
"Read the help file for more information."
|
"Read the help file for more information."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"오른쪽 박스에 기준을 추가하고 확인을 눌러 가장 기준에 해당되는 복제를 해당 그룹의 참조 위치로 보냅니다. 상세한 정보는 도움말에 "
|
"오른쪽 상자에 기준을 추가하고 확인을 클릭하여 이러한 기준에 가장 적합한 복제를 해당 그룹의 참조 위치로 보냅니다. 자세한 정보는 도움말"
|
||||||
"있습니다"
|
" 파일을 읽으십시오."
|
||||||
|
|
||||||
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
|
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Problems!"
|
msgid "Problems!"
|
||||||
msgstr "문제 발생!"
|
msgstr "문제!"
|
||||||
|
|
||||||
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
|
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -378,17 +378,17 @@ msgid ""
|
|||||||
"these problems are described in the table below. Those files were not "
|
"these problems are described in the table below. Those files were not "
|
||||||
"removed from your results."
|
"removed from your results."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"일부 (또는 전체) 파일을 처리하는 데 문제가 있었습니다. 문제의 원인은 아래 표에 표시 되있습니다. 문제되는 파일들은 결과에서 제거되지"
|
"일부 (또는 전체) 파일을 처리하는 데 문제가 있습니다. 이러한 문제의 원인은 아래 표에 설명되어 있습니다. 해당 파일은 결과에서 "
|
||||||
" 않았습니다."
|
"제거되지 않았습니다."
|
||||||
|
|
||||||
#: qt/problem_dialog.py:56
|
#: qt/problem_dialog.py:56
|
||||||
msgid "Reveal Selected"
|
msgid "Reveal Selected"
|
||||||
msgstr "선택 항목 표시"
|
msgstr "선택한 항목 표시"
|
||||||
|
|
||||||
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
|
#: 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
|
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Actions"
|
msgid "Actions"
|
||||||
msgstr "작업"
|
msgstr "행위"
|
||||||
|
|
||||||
#: qt/result_window.py:58 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:58 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Show Dupes Only"
|
msgid "Show Dupes Only"
|
||||||
@ -396,31 +396,31 @@ msgstr "중복파일만 보기"
|
|||||||
|
|
||||||
#: qt/result_window.py:59 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:59 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Show Delta Values"
|
msgid "Show Delta Values"
|
||||||
msgstr "델타 값 표시"
|
msgstr "델타 값만 보기"
|
||||||
|
|
||||||
#: qt/result_window.py:60
|
#: qt/result_window.py:60
|
||||||
msgid "Send Marked to Recycle Bin..."
|
msgid "Send Marked to Recycle Bin..."
|
||||||
msgstr "마크된 모든 파일을 휴지통으로 보내기"
|
msgstr "선택 항목을 휴지통으로 보내기..."
|
||||||
|
|
||||||
#: qt/result_window.py:61 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:61 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Move Marked to..."
|
msgid "Move Marked to..."
|
||||||
msgstr "마크된 모든 파일을 이동..."
|
msgstr "선택항목을 이동..."
|
||||||
|
|
||||||
#: qt/result_window.py:62 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:62 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Copy Marked to..."
|
msgid "Copy Marked to..."
|
||||||
msgstr "마크된 모든 파일을 복사..."
|
msgstr "선택항목을 복사..."
|
||||||
|
|
||||||
#: qt/result_window.py:63 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:63 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Remove Marked from Results"
|
msgid "Remove Marked from Results"
|
||||||
msgstr "결과 목록에서 마크된 모든 파일을 제외"
|
msgstr "결과에서 표시된 항목을 제거하다."
|
||||||
|
|
||||||
#: qt/result_window.py:64 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:64 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Re-Prioritize Results..."
|
msgid "Re-Prioritize Results..."
|
||||||
msgstr "기준 파일 규칙 재설정"
|
msgstr "결과 우선 순위 재 지정..."
|
||||||
|
|
||||||
#: qt/result_window.py:67 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:67 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Remove Selected from Results"
|
msgid "Remove Selected from Results"
|
||||||
msgstr "결과 목록에서 선택한 파일을 제외"
|
msgstr "결과에서 선택한 항목 제거"
|
||||||
|
|
||||||
#: qt/result_window.py:71 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:71 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Add Selected to Ignore List"
|
msgid "Add Selected to Ignore List"
|
||||||
@ -428,35 +428,35 @@ msgstr "무시 목록에 선택 항목 추가"
|
|||||||
|
|
||||||
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Make Selected into Reference"
|
msgid "Make Selected into Reference"
|
||||||
msgstr "선택한 파일을 기준 파일로 설정"
|
msgstr "선택한 항목을 참조 항목으로 만들기"
|
||||||
|
|
||||||
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Open Selected with Default Application"
|
msgid "Open Selected with Default Application"
|
||||||
msgstr "선택한 파일을 기본 앱으로 열기"
|
msgstr "기본 응용 프로그램으로 선택한 항목 열기"
|
||||||
|
|
||||||
#: qt/result_window.py:80
|
#: qt/result_window.py:80
|
||||||
msgid "Open Containing Folder of Selected"
|
msgid "Open Containing Folder of Selected"
|
||||||
msgstr "선택한 파일의 폴더 열기"
|
msgstr "선택한 항목의 포함 폴더 열기"
|
||||||
|
|
||||||
#: qt/result_window.py:82 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:82 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Rename Selected"
|
msgid "Rename Selected"
|
||||||
msgstr "선택한 파일의 이름 변경"
|
msgstr "선택한 이름 변경"
|
||||||
|
|
||||||
#: qt/result_window.py:83 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:83 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Mark All"
|
msgid "Mark All"
|
||||||
msgstr "모든 파일 마크"
|
msgstr "모두 표시"
|
||||||
|
|
||||||
#: qt/result_window.py:84 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:84 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Mark None"
|
msgid "Mark None"
|
||||||
msgstr "모든 파일의 마크 해제"
|
msgstr "없음으로 표시"
|
||||||
|
|
||||||
#: qt/result_window.py:85 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:85 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Invert Marking"
|
msgid "Invert Marking"
|
||||||
msgstr "마크 목록 반전"
|
msgstr "마킹 반전"
|
||||||
|
|
||||||
#: qt/result_window.py:86 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:86 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Mark Selected"
|
msgid "Mark Selected"
|
||||||
msgstr "선택한 파일 마크"
|
msgstr "선택한 항목 표시"
|
||||||
|
|
||||||
#: qt/result_window.py:87
|
#: qt/result_window.py:87
|
||||||
msgid "Export To HTML"
|
msgid "Export To HTML"
|
||||||
@ -476,7 +476,7 @@ msgstr "사용자 지정 명령 호출"
|
|||||||
|
|
||||||
#: qt/result_window.py:102
|
#: qt/result_window.py:102
|
||||||
msgid "Mark"
|
msgid "Mark"
|
||||||
msgstr "마크"
|
msgstr "표시"
|
||||||
|
|
||||||
#: qt/result_window.py:106 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:106 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Columns"
|
msgid "Columns"
|
||||||
@ -492,7 +492,7 @@ msgstr "{} 결과"
|
|||||||
|
|
||||||
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Dupes Only"
|
msgid "Dupes Only"
|
||||||
msgstr "기준 파일 숨기기"
|
msgstr "복제 만"
|
||||||
|
|
||||||
#: qt/result_window.py:194
|
#: qt/result_window.py:194
|
||||||
msgid "Delta Values"
|
msgid "Delta Values"
|
||||||
@ -516,7 +516,7 @@ msgstr "%@ 결과"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Action"
|
msgid "Action"
|
||||||
msgstr "동작"
|
msgstr "행위"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Add New Folder..."
|
msgid "Add New Folder..."
|
||||||
@ -564,7 +564,7 @@ msgstr "델타"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Details of Selected File"
|
msgid "Details of Selected File"
|
||||||
msgstr "선택 파일 세부 정보"
|
msgstr "선택한 파일의 세부 정보"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Details Panel"
|
msgid "Details Panel"
|
||||||
@ -572,7 +572,7 @@ msgstr "세부 정보 패널"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Directories"
|
msgid "Directories"
|
||||||
msgstr "경로"
|
msgstr "디렉토리"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "dupeGuru"
|
msgid "dupeGuru"
|
||||||
@ -588,7 +588,7 @@ msgstr "dupeGuru 결과"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "dupeGuru Website"
|
msgid "dupeGuru Website"
|
||||||
msgstr "dupeGuru 홈페이지"
|
msgstr "dupeGuru 웹 사이트"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
@ -604,7 +604,7 @@ msgstr "XHTML로 결과 내보내기"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Fewer results"
|
msgid "Fewer results"
|
||||||
msgstr "결과 축소"
|
msgstr "더 적은 결과"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Filter"
|
msgid "Filter"
|
||||||
@ -640,7 +640,7 @@ msgstr "이보다 작은 파일 무시 :"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Load from file..."
|
msgid "Load from file..."
|
||||||
msgstr "파일에서 불러오기..."
|
msgstr "파일에서로드..."
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
@ -652,7 +652,7 @@ msgstr "모드"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "More results"
|
msgid "More results"
|
||||||
msgstr "결과 더보기"
|
msgstr "더 많은 결과"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Ok"
|
msgid "Ok"
|
||||||
@ -660,7 +660,7 @@ msgstr "확인"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Paste"
|
msgid "Paste"
|
||||||
msgstr "붙여넣기"
|
msgstr "붙여 넣다"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Preferences..."
|
msgid "Preferences..."
|
||||||
@ -668,7 +668,7 @@ msgstr "환경 설정..."
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Quick Look"
|
msgid "Quick Look"
|
||||||
msgstr "빠른보기"
|
msgstr "한눈에"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Quit dupeGuru"
|
msgid "Quit dupeGuru"
|
||||||
@ -696,7 +696,7 @@ msgstr "모두 선택"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Send Marked to Trash..."
|
msgid "Send Marked to Trash..."
|
||||||
msgstr "마크된 파일을 휴지통으로 보내기"
|
msgstr "표시된 항목을 휴지통으로 보내기 ..."
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Services"
|
msgid "Services"
|
||||||
@ -712,7 +712,7 @@ msgstr "중복 스캔 시작"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "The name '%@' already exists."
|
msgid "The name '%@' already exists."
|
||||||
msgstr "'%@' 의 이름이 이미 존재합니다."
|
msgstr "'%@' 이름이 이미 존재합니다."
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Window"
|
msgid "Window"
|
||||||
@ -720,7 +720,7 @@ msgstr "창"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "확대"
|
msgstr "줌"
|
||||||
|
|
||||||
#: qt\app.py:158
|
#: qt\app.py:158
|
||||||
msgid "Exclusion Filters"
|
msgid "Exclusion Filters"
|
||||||
@ -732,27 +732,27 @@ msgstr "스캔 결과"
|
|||||||
|
|
||||||
#: qt\directories_dialog.py:95
|
#: qt\directories_dialog.py:95
|
||||||
msgid "Load Directories..."
|
msgid "Load Directories..."
|
||||||
msgstr "경로 불러오는중 ..."
|
msgstr "디렉토리로드 ..."
|
||||||
|
|
||||||
#: qt\directories_dialog.py:96
|
#: qt\directories_dialog.py:96
|
||||||
msgid "Save Directories..."
|
msgid "Save Directories..."
|
||||||
msgstr "경로 저장중 ..."
|
msgstr "디렉토리 저장 ..."
|
||||||
|
|
||||||
#: qt\directories_dialog.py:337
|
#: qt\directories_dialog.py:337
|
||||||
msgid "Select a directories file to load"
|
msgid "Select a directories file to load"
|
||||||
msgstr "불러올 경로를 선택하십시오"
|
msgstr "로드 할 디렉토리 파일을 선택하십시오"
|
||||||
|
|
||||||
#: qt\directories_dialog.py:338
|
#: qt\directories_dialog.py:338
|
||||||
msgid "dupeGuru Results (*.dupegurudirs)"
|
msgid "dupeGuru Results (*.dupegurudirs)"
|
||||||
msgstr "dupeguru 경로 파일 (*.dupegurudirs)"
|
msgstr "dupeguru 디렉토리 파일 (*.dupegurudirs)"
|
||||||
|
|
||||||
#: qt\directories_dialog.py:347
|
#: qt\directories_dialog.py:347
|
||||||
msgid "Select a file to save your directories to"
|
msgid "Select a file to save your directories to"
|
||||||
msgstr "경로를 저장할 파일을 선택하십시오"
|
msgstr "디렉토리를 저장할 파일을 선택하십시오"
|
||||||
|
|
||||||
#: qt\directories_dialog.py:348
|
#: qt\directories_dialog.py:348
|
||||||
msgid "dupeGuru Directories (*.dupegurudirs)"
|
msgid "dupeGuru Directories (*.dupegurudirs)"
|
||||||
msgstr "dupeguru 경로 파일 (*.dupegurudirs)"
|
msgstr "dupeguru 디렉토리 파일 (*.dupegurudirs)"
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:44
|
#: qt\exclude_list_dialog.py:44
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
@ -768,11 +768,11 @@ msgstr "테스트 문자열"
|
|||||||
|
|
||||||
#: qt\exclude_list_dialog.py:83
|
#: qt\exclude_list_dialog.py:83
|
||||||
msgid "Type a python regular expression here..."
|
msgid "Type a python regular expression here..."
|
||||||
msgstr "여기에 파이썬 정규식을 입력해주세요 ..."
|
msgstr "여기에 파이썬 정규식을 입력하십시오 ..."
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:85
|
#: qt\exclude_list_dialog.py:85
|
||||||
msgid "Type a file system path or filename here..."
|
msgid "Type a file system path or filename here..."
|
||||||
msgstr "여기에 파일 시스템 경로 또는 파일 이름을 입력해주세요 ..."
|
msgstr "여기에 파일 시스템 경로 또는 파일 이름을 입력하십시오 ..."
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:152
|
#: qt\exclude_list_dialog.py:152
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -792,11 +792,11 @@ msgstr "컴파일 오류 :"
|
|||||||
|
|
||||||
#: qt\pe\image_viewer.py:56
|
#: qt\pe\image_viewer.py:56
|
||||||
msgid "Increase zoom"
|
msgid "Increase zoom"
|
||||||
msgstr "확대 증가"
|
msgstr "줌을 증가"
|
||||||
|
|
||||||
#: qt\pe\image_viewer.py:66
|
#: qt\pe\image_viewer.py:66
|
||||||
msgid "Decrease zoom"
|
msgid "Decrease zoom"
|
||||||
msgstr "확대 감소"
|
msgstr "줌을 감소"
|
||||||
|
|
||||||
#: qt\pe\image_viewer.py:71
|
#: qt\pe\image_viewer.py:71
|
||||||
msgid "Ctrl+/"
|
msgid "Ctrl+/"
|
||||||
@ -812,7 +812,7 @@ msgstr "Ctrl+*"
|
|||||||
|
|
||||||
#: qt\pe\image_viewer.py:86
|
#: qt\pe\image_viewer.py:86
|
||||||
msgid "Best fit"
|
msgid "Best fit"
|
||||||
msgstr "최고 일치"
|
msgstr "최고로 잘 맞는"
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:49
|
#: qt\pe\preferences_dialog.py:49
|
||||||
msgid "Picture cache mode:"
|
msgid "Picture cache mode:"
|
||||||
@ -851,15 +851,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:172
|
#: qt\preferences_dialog.py:172
|
||||||
msgid "Use bold font for references"
|
msgid "Use bold font for references"
|
||||||
msgstr "기준 파일을 굵게 표시"
|
msgstr "참조 용으로 굵은 글꼴 사용"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:176
|
#: qt\preferences_dialog.py:176
|
||||||
msgid "Reference foreground color:"
|
msgid "Reference foreground color:"
|
||||||
msgstr "기준 파일 이름의 색:"
|
msgstr "참조 전경색 :"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:179
|
#: qt\preferences_dialog.py:179
|
||||||
msgid "Reference background color:"
|
msgid "Reference background color:"
|
||||||
msgstr "기준 파일 이름의 배경색:"
|
msgstr "참조 배경색 :"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
|
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
|
||||||
msgid "Delta foreground color:"
|
msgid "Delta foreground color:"
|
||||||
@ -914,7 +914,7 @@ msgstr "일반 인터페이스"
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:176
|
#: qt\preferences_dialog.py:176
|
||||||
msgid "Result Table"
|
msgid "Result Table"
|
||||||
msgstr "검색 결과"
|
msgstr "결과표"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:205
|
#: qt\preferences_dialog.py:205
|
||||||
msgid "Details Window"
|
msgid "Details Window"
|
||||||
@ -958,7 +958,7 @@ msgstr "캐시 제거"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Do you really want to clear the cache? This will remove all cached file "
|
"Do you really want to clear the cache? This will remove all cached file "
|
||||||
"hashes and picture analysis."
|
"hashes and picture analysis."
|
||||||
msgstr "캐시를 제거하시겠습니까? 캐시에는 파일 해시 및 이미지 분석 결과가 포함되어 있습니다."
|
msgstr "캐시를 제거할까요? 캐시에는 파일 해시 및 이미지 분석 결과가 포함되어 있습니다."
|
||||||
|
|
||||||
#: qt\app.py:299
|
#: qt\app.py:299
|
||||||
msgid "Cache cleared."
|
msgid "Cache cleared."
|
||||||
@ -970,15 +970,15 @@ msgstr "다크 모드 사용"
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:241
|
#: qt\preferences_dialog.py:241
|
||||||
msgid "Profile scan operation"
|
msgid "Profile scan operation"
|
||||||
msgstr "프로파일 스캔 작업"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:242
|
#: qt\preferences_dialog.py:242
|
||||||
msgid "Profile the scan operation and save logs for optimization."
|
msgid "Profile the scan operation and save logs for optimization."
|
||||||
msgstr "최적화를 위해 스캔 프로파일 작업과 로그를 저장합니다."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:246
|
#: qt\preferences_dialog.py:246
|
||||||
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
||||||
msgstr "로그 저장 경로: <a href=\"{}\">{}</a>"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:291
|
#: qt\preferences_dialog.py:291
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
@ -1014,11 +1014,11 @@ msgstr "오류보고"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:54
|
#: qt\error_report_dialog.py:54
|
||||||
msgid "Something went wrong. How about reporting the error?"
|
msgid "Something went wrong. How about reporting the error?"
|
||||||
msgstr "예상치 못한 문제가 발생했습니다. 오류 보고를 추천드립니다."
|
msgstr "문제가 발생했습니다. 오류를보고하는 것은 어떻습니까?"
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1026,7 +1026,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"오류 보고서는 GitHub 문제로보고해야합니다. 위의 오류 추적을 복사하여 새 문제에 붙여 넣을 수 있습니다.\n"
|
"오류 보고서는 Github 문제로보고해야합니다. 위의 오류 추적을 복사하여 새 문제에 붙여 넣을 수 있습니다.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"이미 존재하는 문제에 대해 사전에 검색을 실행하십시오. 또한 경험하고있는 버그가 이미 패치되었을 수 있으므로 저장소에서 사용 가능한 최신 버전을 테스트해야합니다.\n"
|
"이미 존재하는 문제에 대해 사전에 검색을 실행하십시오. 또한 경험하고있는 버그가 이미 패치되었을 수 있으므로 저장소에서 사용 가능한 최신 버전을 테스트해야합니다.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1035,8 +1035,8 @@ msgstr ""
|
|||||||
"이 오류 후에도 응용 프로그램이 계속 실행되어야하지만 불안정한 상태 일 수 있으므로 응용 프로그램을 다시 시작하는 것이 좋습니다."
|
"이 오류 후에도 응용 프로그램이 계속 실행되어야하지만 불안정한 상태 일 수 있으므로 응용 프로그램을 다시 시작하는 것이 좋습니다."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "GitHub로 이동"
|
msgstr "Github로 이동"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1121,36 +1121,3 @@ msgstr "목록 지우기"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "검색.."
|
msgstr "검색.."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -4,21 +4,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2021\n"
|
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2021\n"
|
||||||
"Language-Team: Malay (https://app.transifex.com/voltaicideas/teams/116153/ms/)\n"
|
"Language-Team: Malay (https://www.transifex.com/voltaicideas/teams/116153/ms/)\n"
|
||||||
"Language: ms\n"
|
"Language: ms\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Tiada duplikasi yang ditandai. Tiada apa yang dilakukan."
|
msgstr "Tiada duplikasi yang ditandai. Tiada apa yang dilakukan."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Tiada duplikasi yang dipilih. Tiada apa yang dilakukan."
|
msgstr "Tiada duplikasi yang dipilih. Tiada apa yang dilakukan."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -27,23 +27,23 @@ msgstr ""
|
|||||||
"digunakan untuk membuka fail tersebut, ia mungkin menyebabkan sepah. Ingin "
|
"digunakan untuk membuka fail tersebut, ia mungkin menyebabkan sepah. Ingin "
|
||||||
"teruskan?"
|
"teruskan?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Mengimbas untuk duplikasi"
|
msgstr "Mengimbas untuk duplikasi"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Memuatkan"
|
msgstr "Memuatkan"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Memindahkan"
|
msgstr "Memindahkan"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Menyalinkan"
|
msgstr "Menyalinkan"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Menghantarkan ke Tong Sampah"
|
msgstr "Menghantarkan ke Tong Sampah"
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ msgstr "Pilih direktori dituju untuk pindah fail yang ditandai"
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Pilih tempat tujuan untuk eksport CSV anda"
|
msgstr "Pilih tempat tujuan untuk eksport CSV anda"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Tidak mampu menulis ke fail: {}"
|
msgstr "Tidak mampu menulis ke fail: {}"
|
||||||
|
|
||||||
@ -117,23 +117,23 @@ msgstr ""
|
|||||||
"Anda tidak ada perintah tersuai ditetapkan. Tetapkannya melalui menu "
|
"Anda tidak ada perintah tersuai ditetapkan. Tetapkannya melalui menu "
|
||||||
"keutamaan anda."
|
"keutamaan anda."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Anda bakal mengalih keluar %d fail dari keputusan. Ingin teruskan?"
|
msgstr "Anda bakal mengalih keluar %d fail dari keputusan. Ingin teruskan?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} kumpulan duplikasi telah diubah oleh pengutamaan semula."
|
msgstr "{} kumpulan duplikasi telah diubah oleh pengutamaan semula."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Direktori yang dipilih tidak mempunyai fail yang boleh diimbas."
|
msgstr "Direktori yang dipilih tidak mempunyai fail yang boleh diimbas."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Mengumpulkan fail untuk diimbas"
|
msgstr "Mengumpulkan fail untuk diimbas"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d dibuang)"
|
msgstr "%s (%d dibuang)"
|
||||||
|
|
||||||
@ -178,23 +178,23 @@ msgstr "Nama Fail - Medan (Tiada Tertib)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tag"
|
msgstr "Tag"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Kandungan"
|
msgstr "Kandungan"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "%d / %d gambar dianalisis"
|
msgstr "%d / %d gambar dianalisis"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "%d / %d padanan ketulan dilaksanakan"
|
msgstr "%d / %d padanan ketulan dilaksanakan"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Membuat persediaan untuk pemadanan"
|
msgstr "Membuat persediaan untuk pemadanan"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "%d / %d padanan disahkan"
|
msgstr "%d / %d padanan disahkan"
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ msgstr "%d / %d padanan disahkan"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "EXIF bagi %d / %d gambar dibaca"
|
msgstr "EXIF bagi %d / %d gambar dibaca"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Cap masa EXIF"
|
msgstr "Cap masa EXIF"
|
||||||
|
|
||||||
@ -210,51 +210,55 @@ msgstr "Cap masa EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Tiada"
|
msgstr "Tiada"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Tamat dengan nombor"
|
msgstr "Tamat dengan nombor"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Tidak tamat dengan nombor"
|
msgstr "Tidak tamat dengan nombor"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Terpanjang"
|
msgstr "Terpanjang"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Terpendek"
|
msgstr "Terpendek"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Tertinggi"
|
msgstr "Tertinggi"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Terendah"
|
msgstr "Terendah"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Terbaru"
|
msgstr "Terbaru"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Terlama"
|
msgstr "Terlama"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) duplikasi ditandai."
|
msgstr "%d / %d (%s / %s) duplikasi ditandai."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "penapis: %s"
|
msgstr "penapis: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Saiz bagi %d / %d gambar dibaca"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Metadata bagi %d / %d gambar dibaca"
|
msgstr "Metadata bagi %d / %d gambar dibaca"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Hampir selesai! Menyusun keputusan..."
|
msgstr "Hampir selesai! Menyusun keputusan..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2023
|
# Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2022
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2023\n"
|
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2022\n"
|
||||||
"Language-Team: Malay (https://app.transifex.com/voltaicideas/teams/116153/ms/)\n"
|
"Language-Team: Malay (https://www.transifex.com/voltaicideas/teams/116153/ms/)\n"
|
||||||
"Language: ms\n"
|
"Language: ms\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1040,7 +1040,7 @@ msgstr "Terdapat kesulitan yang terjadi. Apa kata laporkan ralat tersebut?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1048,7 +1048,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Laporan ralat patut dilaporkan sebagai isu GitHub. Anda boleh salin runut balik ralat di atas dan tampal dalam isu baharu.\n"
|
"Laporan ralat patut dilaporkan sebagai isu Github. Anda boleh salin runut balik ralat di atas dan tampal dalam isu baharu.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Sila pastikan anda menggelintar dahulu kalau-kalau isu sudah wujud. Juga pastikan untuk cuba versi paling terbaharu yang disediakan dari repositori, kerana pepijat yang anda alami mungkin sudah ditampung.\n"
|
"Sila pastikan anda menggelintar dahulu kalau-kalau isu sudah wujud. Juga pastikan untuk cuba versi paling terbaharu yang disediakan dari repositori, kerana pepijat yang anda alami mungkin sudah ditampung.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1057,8 +1057,8 @@ msgstr ""
|
|||||||
"Walaupun aplikasi sepatutnya masih boleh digunakan selepas ralat ini, ia mungkin berada dalam keadaan tidak stabil, jadi anda digalakkan untuk memulakan semula aplikasi ini."
|
"Walaupun aplikasi sepatutnya masih boleh digunakan selepas ralat ini, ia mungkin berada dalam keadaan tidak stabil, jadi anda digalakkan untuk memulakan semula aplikasi ini."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Pergi ke GitHub"
|
msgstr "Pergi ke Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1143,37 +1143,3 @@ msgstr "Kosongkan Senarai"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Cari..."
|
msgstr "Cari..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
"Pilihan ini adalah untuk pengguna lanjutan atau untuk keadaan khas tertentu,"
|
|
||||||
" kebanyakan pengguna tidak perlu mengubahsuai pilihan ini."
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr "Sertakan pemeriksaan kewujudan selepas selesai imbasan"
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr "Abaikan perbezaan dalam masa ubahsuai ketika memuatkan cerna tercache"
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr "Batal?"
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr "Adakah anda pasti anda ingin batalkan? Semua kemajuan akan hilang."
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
"Ungkapan nalar python (sensitif huruf) ini akan menapis keluar fail ketika imbasan.<br>Direktori juga akan ada <strong>keadaan lalai</strong> sendiri ditetapkan kepada Dikecualikan dalam tab Direktori jika nama tersebut sepadan dengan salah satu daripada ungkapan nalar yang dipilih.<br>Untuk setiap fail yang terhimpun, dua percubaan akan dilaksanakan untuk menentukan sama ada fail tersebut perlu diabaikan sepenuhnya:<br><li>1. Ungkapan nalar tanpa pemisah laluan di dalamnya akan dibandingkan dengan nama fail sahaja.</li>\n"
|
|
||||||
"<li>2. Ungkapan nalar dengan sekurang-kurangnya satu pemisah laluan di dalamnya akan dibandingkan dengan laluan penuh ke fail.</li><br>Contoh: jika anda ingin tapis keluar fail .PNG dari direktori \"My Pictures\" sahaja:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>Anda boleh cuba ungkapan nalar dengan butang \"cuba rentetan\" selepas menampal laluan palsu dalam medan percubaan:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Ungkapan nalar yang terpadan akan ditonjolkan.<br>Sekiranya ada sekurang-kurangnya satu tonjolan, laluan atau nama fail yang dicuba akan diabaikan ketika imbasan.<br><br>Direktori dan fail yang bermula dengan tanda titik '.' ditapis keluar secara lalainya.<br><br>"
|
|
||||||
|
@ -6,21 +6,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Bas <duvel3@gmail.com>, 2021\n"
|
"Last-Translator: Bas <duvel3@gmail.com>, 2021\n"
|
||||||
"Language-Team: Dutch (https://app.transifex.com/voltaicideas/teams/116153/nl/)\n"
|
"Language-Team: Dutch (https://www.transifex.com/voltaicideas/teams/116153/nl/)\n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Er zijn geen gemarkeerde dubbelingen. Er is niks gedaam"
|
msgstr "Er zijn geen gemarkeerde dubbelingen. Er is niks gedaam"
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Er zijn geen dubelingen geselecteerd. Er is niks gedaan"
|
msgstr "Er zijn geen dubelingen geselecteerd. Er is niks gedaan"
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -29,23 +29,23 @@ msgstr ""
|
|||||||
"Afhankelijk met welke applicaties die bestanden worden geopened kan het best"
|
"Afhankelijk met welke applicaties die bestanden worden geopened kan het best"
|
||||||
" een rommeltje worden. Doorgaan?"
|
" een rommeltje worden. Doorgaan?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Dubbelingen aan het opsporen"
|
msgstr "Dubbelingen aan het opsporen"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Laden"
|
msgstr "Laden"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Verplaatsen"
|
msgstr "Verplaatsen"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Kopiëren"
|
msgstr "Kopiëren"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Naar de prullebak verplaatsen"
|
msgstr "Naar de prullebak verplaatsen"
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ msgstr ""
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Selecteer een locatie voor de CSV export"
|
msgstr "Selecteer een locatie voor de CSV export"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Kan niet schrijven naar bestand: {}"
|
msgstr "Kan niet schrijven naar bestand: {}"
|
||||||
|
|
||||||
@ -121,28 +121,28 @@ msgstr ""
|
|||||||
"Er is nog geen \"aangepaste opdracht\" ingericht. Je kan dit doen bij de "
|
"Er is nog geen \"aangepaste opdracht\" ingericht. Je kan dit doen bij de "
|
||||||
"voorkeuren."
|
"voorkeuren."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Je staat op het punt om %d bestanden te verwijderen uit de resultaten. "
|
"Je staat op het punt om %d bestanden te verwijderen uit de resultaten. "
|
||||||
"Doorgaan?"
|
"Doorgaan?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{} dubbelingen groepen waren veranderd door de prioriteits verschuiving."
|
"{} dubbelingen groepen waren veranderd door de prioriteits verschuiving."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"De geselecteerde folders bevatten geen bestanden die onderzocht kunnen "
|
"De geselecteerde folders bevatten geen bestanden die onderzocht kunnen "
|
||||||
"worden."
|
"worden."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Bestanden aan het verzamelen om te onderzoeken"
|
msgstr "Bestanden aan het verzamelen om te onderzoeken"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d weggelaten)"
|
msgstr "%s (%d weggelaten)"
|
||||||
|
|
||||||
@ -187,23 +187,23 @@ msgstr "Bestandsnaam - Velden (geen volgorde)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Inhoud"
|
msgstr "Inhoud"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "%d van de %d afbeeldingen aan het analyseren"
|
msgstr "%d van de %d afbeeldingen aan het analyseren"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "%d van de %d bulk overeenkomsten uitgevoerd"
|
msgstr "%d van de %d bulk overeenkomsten uitgevoerd"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Voorbereiden voor dubbelingen bepaling"
|
msgstr "Voorbereiden voor dubbelingen bepaling"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "%d van de %d overeenkomsten nagekeken"
|
msgstr "%d van de %d overeenkomsten nagekeken"
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ msgstr "%d van de %d overeenkomsten nagekeken"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "EXIF informatie van %d van de %d afbeeldingen gelezen"
|
msgstr "EXIF informatie van %d van de %d afbeeldingen gelezen"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIF-tijdstempel"
|
msgstr "EXIF-tijdstempel"
|
||||||
|
|
||||||
@ -219,51 +219,55 @@ msgstr "EXIF-tijdstempel"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Geen"
|
msgstr "Geen"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Eindigt met nummer"
|
msgstr "Eindigt met nummer"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Eindigt niet met een nummer"
|
msgstr "Eindigt niet met een nummer"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "langste"
|
msgstr "langste"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "kortste"
|
msgstr "kortste"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "hoogste"
|
msgstr "hoogste"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "laagste"
|
msgstr "laagste"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "nieuwste"
|
msgstr "nieuwste"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "oudste"
|
msgstr "oudste"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s /%s) dubbelingen gemarkeerd"
|
msgstr "%d / %d (%s /%s) dubbelingen gemarkeerd"
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "filter: %s"
|
msgstr "filter: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Bestandsgrootte van %d/%d bestanden aan het lezen."
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Metadata van %d/%d bestanden gelezen"
|
msgstr "Metadata van %d/%d bestanden gelezen"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Bijna klaar! Gehannes met resultaten..."
|
msgstr "Bijna klaar! Gehannes met resultaten..."
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Bas <duvel3@gmail.com>, 2022
|
# Bas <duvel3@gmail.com>, 2022
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Dutch (https://app.transifex.com/voltaicideas/teams/116153/nl/)\n"
|
"Language-Team: Dutch (https://www.transifex.com/voltaicideas/teams/116153/nl/)\n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1036,7 +1036,7 @@ msgstr "Er is iets fout gegaan. Hoe zit het met het melden van de fout?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1044,7 +1044,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Foutrapporten moeten worden gerapporteerd als GitHub-problemen. U kunt de bovenstaande foutopsporing kopiëren en in een nieuwe uitgave plakken.\n"
|
"Foutrapporten moeten worden gerapporteerd als Github-problemen. U kunt de bovenstaande foutopsporing kopiëren en in een nieuwe uitgave plakken.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Zorg ervoor dat u van tevoren een zoekopdracht uitvoert naar reeds bestaande problemen. Zorg er ook voor dat u de allernieuwste versie uit de repository test, aangezien de bug die u ondervindt mogelijk al gepatcht is.\n"
|
"Zorg ervoor dat u van tevoren een zoekopdracht uitvoert naar reeds bestaande problemen. Zorg er ook voor dat u de allernieuwste versie uit de repository test, aangezien de bug die u ondervindt mogelijk al gepatcht is.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1053,8 +1053,8 @@ msgstr ""
|
|||||||
"Hoewel de toepassing na deze fout zou moeten blijven werken, kan deze in een onstabiele toestand verkeren, dus het wordt aanbevolen de toepassing opnieuw te starten."
|
"Hoewel de toepassing na deze fout zou moeten blijven werken, kan deze in een onstabiele toestand verkeren, dus het wordt aanbevolen de toepassing opnieuw te starten."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Ga naar GitHub"
|
msgstr "Ga naar Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1139,36 +1139,3 @@ msgstr "Lijst leegmaken"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Zoeken..."
|
msgstr "Zoeken..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Polish (Poland) (https://app.transifex.com/voltaicideas/teams/116153/pl_PL/)\n"
|
"Language-Team: Polish (Poland) (https://www.transifex.com/voltaicideas/teams/116153/pl_PL/)\n"
|
||||||
"Language: pl_PL\n"
|
"Language: pl_PL\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Brak wykrytych duplikatów. Nic nie zrobiono."
|
msgstr "Brak wykrytych duplikatów. Nic nie zrobiono."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Brak wybranych duplikatów. Nic nie zrobiono."
|
msgstr "Brak wybranych duplikatów. Nic nie zrobiono."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -28,23 +28,23 @@ msgstr ""
|
|||||||
"pomocą czego te pliki są otwierane, może to spowodować spory bałagan. "
|
"pomocą czego te pliki są otwierane, może to spowodować spory bałagan. "
|
||||||
"Kontyntynuj?"
|
"Kontyntynuj?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Wyszukiwanie duplikatów"
|
msgstr "Wyszukiwanie duplikatów"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Ładuję"
|
msgstr "Ładuję"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Przenoszę"
|
msgstr "Przenoszę"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Kopiowanie"
|
msgstr "Kopiowanie"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Wysyłam do kosza"
|
msgstr "Wysyłam do kosza"
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ msgstr "Wybierz katalog, do którego chcesz przenieść zaznaczone pliki"
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Wybierz miejsce docelowe dla eksportowanego pliku CSV"
|
msgstr "Wybierz miejsce docelowe dla eksportowanego pliku CSV"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Nie udało się zapisać do pliku: {}"
|
msgstr "Nie udało się zapisać do pliku: {}"
|
||||||
|
|
||||||
@ -118,23 +118,23 @@ msgstr ""
|
|||||||
"Nie masz skonfigurowanego polecenia niestandardowego. Ustaw to w swoich "
|
"Nie masz skonfigurowanego polecenia niestandardowego. Ustaw to w swoich "
|
||||||
"preferencjach."
|
"preferencjach."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Zamierzasz usunąć %d plików z wyników. Kontyntynuj?"
|
msgstr "Zamierzasz usunąć %d plików z wyników. Kontyntynuj?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} zduplikowanych grup zmieniono przez ponowne ustalenie priorytetów."
|
msgstr "{} zduplikowanych grup zmieniono przez ponowne ustalenie priorytetów."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Wybrane katalogi nie zawierają plik skanowalną."
|
msgstr "Wybrane katalogi nie zawierają plik skanowalną."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Zbieranie plików do skanowania"
|
msgstr "Zbieranie plików do skanowania"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s(%d odrzucone)"
|
msgstr "%s(%d odrzucone)"
|
||||||
|
|
||||||
@ -178,23 +178,23 @@ msgstr "Nazwa pliku - pola (bez kolejności)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tagi"
|
msgstr "Tagi"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Treść"
|
msgstr "Treść"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Analizowane %d/%d zdjęć"
|
msgstr "Analizowane %d/%d zdjęć"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Wykonano %d/%d dopasowań fragmentów"
|
msgstr "Wykonano %d/%d dopasowań fragmentów"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Przygotowanie do dopasowania"
|
msgstr "Przygotowanie do dopasowania"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Zweryfikowane %d/%d meczów"
|
msgstr "Zweryfikowane %d/%d meczów"
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ msgstr "Zweryfikowane %d/%d meczów"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Przeczytaj EXIF z %d/%d zdjęć"
|
msgstr "Przeczytaj EXIF z %d/%d zdjęć"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Sygnatura czasowa EXIF"
|
msgstr "Sygnatura czasowa EXIF"
|
||||||
|
|
||||||
@ -210,51 +210,55 @@ msgstr "Sygnatura czasowa EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nie"
|
msgstr "Nie"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Kończy się numerem"
|
msgstr "Kończy się numerem"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Nie kończy się liczbą"
|
msgstr "Nie kończy się liczbą"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Najdłużej"
|
msgstr "Najdłużej"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Najkrótsza"
|
msgstr "Najkrótsza"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Najwyższa"
|
msgstr "Najwyższa"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Najniższa"
|
msgstr "Najniższa"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Najnowsza"
|
msgstr "Najnowsza"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Najstarszy"
|
msgstr "Najstarszy"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) duplikaty oznakowane."
|
msgstr "%d / %d (%s / %s) duplikaty oznakowane."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " filtr: %s"
|
msgstr " filtr: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Odczytaj rozmiar %d/%d plików"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Przeczytaj metadane %d/%d plików"
|
msgstr "Przeczytaj metadane %d/%d plików"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Prawie skończone! Porządkowanie wyników..."
|
msgstr "Prawie skończone! Porządkowanie wyników..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Polish (Poland) (https://app.transifex.com/voltaicideas/teams/116153/pl_PL/)\n"
|
"Language-Team: Polish (Poland) (https://www.transifex.com/voltaicideas/teams/116153/pl_PL/)\n"
|
||||||
"Language: pl_PL\n"
|
"Language: pl_PL\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1034,7 +1034,7 @@ msgstr "Coś poszło nie tak. Co powiesz na zgłoszenie błędu?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1042,7 +1042,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Raporty o błędach powinny być zgłaszane jako problemy z GitHub. Możesz skopiować powyższy opis błędu i wkleić go w nowym zgłoszeniu.\n"
|
"Raporty o błędach powinny być zgłaszane jako problemy z Github. Możesz skopiować powyższy opis błędu i wkleić go w nowym zgłoszeniu.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Upewnij się, że wcześniej wyszukałeś już istniejący bilet. Upewnij się również, że przetestowałeś najnowszą wersję dostępną w repozytorium, ponieważ napotkany błąd mógł już zostać załatany.\n"
|
"Upewnij się, że wcześniej wyszukałeś już istniejący bilet. Upewnij się również, że przetestowałeś najnowszą wersję dostępną w repozytorium, ponieważ napotkany błąd mógł już zostać załatany.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1051,8 +1051,8 @@ msgstr ""
|
|||||||
"Chociaż aplikacja powinna nadal działać po tym błędzie, może być w stanie niestabilnym, dlatego zaleca się ponowne uruchomienie aplikacji."
|
"Chociaż aplikacja powinna nadal działać po tym błędzie, może być w stanie niestabilnym, dlatego zaleca się ponowne uruchomienie aplikacji."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Przejdź do GitHub"
|
msgstr "Przejdź do Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1137,36 +1137,3 @@ msgstr "Wyczyść listę"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Szukaj..."
|
msgstr "Szukaj..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/voltaicideas/teams/116153/pt_BR/)\n"
|
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/voltaicideas/teams/116153/pt_BR/)\n"
|
||||||
"Language: pt_BR\n"
|
"Language: pt_BR\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Não há duplicatas marcadas. Nada foi feito."
|
msgstr "Não há duplicatas marcadas. Nada foi feito."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Não há duplicatas selecionadas. Nada foi feito."
|
msgstr "Não há duplicatas selecionadas. Nada foi feito."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -27,23 +27,23 @@ msgstr ""
|
|||||||
"Você está prestes a abrir muitos arquivos de uma vez. Problemas podem surgir"
|
"Você está prestes a abrir muitos arquivos de uma vez. Problemas podem surgir"
|
||||||
" dependendo de qual app seja usado para abri-los. Deseja continuar?"
|
" dependendo de qual app seja usado para abri-los. Deseja continuar?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Buscando por duplicatas"
|
msgstr "Buscando por duplicatas"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Carregando"
|
msgstr "Carregando"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Movendo"
|
msgstr "Movendo"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Copiando"
|
msgstr "Copiando"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Movendo para o Lixo"
|
msgstr "Movendo para o Lixo"
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ msgstr "Selecione um diretório para onde deseja mover os arquivos marcados"
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Selecione uma pasta para o CSV exportado"
|
msgstr "Selecione uma pasta para o CSV exportado"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Não foi possível gravar no arquivo: {}"
|
msgstr "Não foi possível gravar no arquivo: {}"
|
||||||
|
|
||||||
@ -114,23 +114,23 @@ msgid "You have no custom command set up. Set it up in your preferences."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Você não possui nenhum comando personalizado. Crie um nas preferências."
|
"Você não possui nenhum comando personalizado. Crie um nas preferências."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Remover %d arquivo(s) dos resultados?"
|
msgstr "Remover %d arquivo(s) dos resultados?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} grupos de duplicatas alterados ao repriorizar."
|
msgstr "{} grupos de duplicatas alterados ao repriorizar."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "As pastas selecionadas não contém arquivos escaneáveis."
|
msgstr "As pastas selecionadas não contém arquivos escaneáveis."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Juntando arquivos para escanear"
|
msgstr "Juntando arquivos para escanear"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d rejeitado(s))"
|
msgstr "%s (%d rejeitado(s))"
|
||||||
|
|
||||||
@ -174,23 +174,23 @@ msgstr "Nome do arquivo - campos (sem pedido)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Conteúdo"
|
msgstr "Conteúdo"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "%d/%d fotos analizadas"
|
msgstr "%d/%d fotos analizadas"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "%d/%d resultados em blocos executados"
|
msgstr "%d/%d resultados em blocos executados"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Preparando para comparação"
|
msgstr "Preparando para comparação"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "%d/%d resultados verificados"
|
msgstr "%d/%d resultados verificados"
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ msgstr "%d/%d resultados verificados"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "EXIF lido em %d/%d fotos"
|
msgstr "EXIF lido em %d/%d fotos"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Timestamp EXIF"
|
msgstr "Timestamp EXIF"
|
||||||
|
|
||||||
@ -206,51 +206,55 @@ msgstr "Timestamp EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nenhum"
|
msgstr "Nenhum"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Termina com número"
|
msgstr "Termina com número"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Não termina com número"
|
msgstr "Não termina com número"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Mais longo"
|
msgstr "Mais longo"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Mais curto"
|
msgstr "Mais curto"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Maior"
|
msgstr "Maior"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Menor"
|
msgstr "Menor"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Mais recente"
|
msgstr "Mais recente"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Mais antigo"
|
msgstr "Mais antigo"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) duplicatas marcadas."
|
msgstr "%d / %d (%s / %s) duplicatas marcadas."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " filtro: %s"
|
msgstr " filtro: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Tamanho lido em %d/%d arquivos"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Metadados lidos em %d/%d arquivos"
|
msgstr "Metadados lidos em %d/%d arquivos"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Quase pronto! Mexendo nos resultados ..."
|
msgstr "Quase pronto! Mexendo nos resultados ..."
|
||||||
|
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
||||||
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/voltaicideas/teams/116153/pt_BR/)\n"
|
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/voltaicideas/teams/116153/pt_BR/)\n"
|
||||||
"Language: pt_BR\n"
|
"Language: pt_BR\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: qt/app.py:81
|
#: qt/app.py:81
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
@ -314,10 +314,6 @@ msgstr "Modo de Depuração (requer reinício)"
|
|||||||
msgid "Match pictures of different dimensions"
|
msgid "Match pictures of different dimensions"
|
||||||
msgstr "Coincidir fotos de dimensões diferentes"
|
msgstr "Coincidir fotos de dimensões diferentes"
|
||||||
|
|
||||||
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr "Coincidir fotos de rotações diferentes"
|
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:43
|
#: qt/preferences_dialog.py:43
|
||||||
msgid "Filter Hardness:"
|
msgid "Filter Hardness:"
|
||||||
msgstr "Pressão do Filtro:"
|
msgstr "Pressão do Filtro:"
|
||||||
@ -1038,7 +1034,7 @@ msgstr "Algo deu errado. Deseja relatar o erro?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1046,7 +1042,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Os relatórios de erros devem ser relatados como problemas do GitHub. Você pode copiar o rastreamento do erro acima e colá-lo em uma nova edição.\n"
|
"Os relatórios de erros devem ser relatados como problemas do Github. Você pode copiar o rastreamento do erro acima e colá-lo em uma nova edição.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Por favor, certifique-se de executar uma pesquisa de qualquer problema já existente com antecedência. Certifique-se também de testar a versão mais recente disponível no repositório, uma vez que o bug que você está enfrentando pode já ter sido corrigido.\n"
|
"Por favor, certifique-se de executar uma pesquisa de qualquer problema já existente com antecedência. Certifique-se também de testar a versão mais recente disponível no repositório, uma vez que o bug que você está enfrentando pode já ter sido corrigido.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1055,8 +1051,8 @@ msgstr ""
|
|||||||
"Embora o aplicativo deva continuar a ser executado após esse erro, ele pode estar em um estado instável, portanto, é recomendável reiniciar o aplicativo."
|
"Embora o aplicativo deva continuar a ser executado após esse erro, ele pode estar em um estado instável, portanto, é recomendável reiniciar o aplicativo."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Ir para o GitHub"
|
msgstr "Ir para o Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1141,32 +1137,3 @@ msgstr "Limpar Lista"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Buscar…"
|
msgstr "Buscar…"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
6
locale/qtlib.pot
Normal file
6
locale/qtlib.pot
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
|
|
@ -1,11 +1,10 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2021
|
# Andrew Senetar <arsenetar@gmail.com>, 2021
|
||||||
# AHOHNMYC <lqwh2h2cwa@protonmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: AHOHNMYC <lqwh2h2cwa@protonmail.com>, 2023\n"
|
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n"
|
||||||
"Language-Team: Russian (https://app.transifex.com/voltaicideas/teams/116153/ru/)\n"
|
"Language-Team: Russian (https://www.transifex.com/voltaicideas/teams/116153/ru/)\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -30,9 +29,9 @@ msgstr "Битрейт"
|
|||||||
|
|
||||||
#: core\me\prioritize.py:37
|
#: core\me\prioritize.py:37
|
||||||
msgid "Samplerate"
|
msgid "Samplerate"
|
||||||
msgstr "Частота дискретизации"
|
msgstr "Частота оцифровки"
|
||||||
|
|
||||||
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:94
|
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
|
||||||
#: core\se\result_table.py:19
|
#: core\se\result_table.py:19
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
msgstr "Имя файла"
|
msgstr "Имя файла"
|
||||||
@ -52,7 +51,7 @@ msgstr "Время"
|
|||||||
|
|
||||||
#: core\me\result_table.py:24
|
#: core\me\result_table.py:24
|
||||||
msgid "Sample Rate"
|
msgid "Sample Rate"
|
||||||
msgstr "Частота дискретизации"
|
msgstr "Частота"
|
||||||
|
|
||||||
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
|
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
|
||||||
#: core\se\result_table.py:22
|
#: core\se\result_table.py:22
|
||||||
@ -60,7 +59,7 @@ msgid "Kind"
|
|||||||
msgstr "Тип"
|
msgstr "Тип"
|
||||||
|
|
||||||
#: core\me\result_table.py:26 core\pe\result_table.py:25
|
#: core\me\result_table.py:26 core\pe\result_table.py:25
|
||||||
#: core\prioritize.py:165 core\se\result_table.py:23
|
#: core\prioritize.py:163 core\se\result_table.py:23
|
||||||
msgid "Modification"
|
msgid "Modification"
|
||||||
msgstr "Время изменения"
|
msgstr "Время изменения"
|
||||||
|
|
||||||
@ -118,6 +117,6 @@ msgstr "Размер (КБ)"
|
|||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Временная отметка EXIF"
|
msgstr "Временная отметка EXIF"
|
||||||
|
|
||||||
#: core\prioritize.py:158
|
#: core\prioritize.py:156
|
||||||
msgid "Size"
|
msgid "Size"
|
||||||
msgstr "Размер"
|
msgstr "Размер"
|
||||||
|
@ -1,27 +1,25 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2021
|
# Andrew Senetar <arsenetar@gmail.com>, 2021
|
||||||
# Fuan <jcfrt@posteo.net>, 2021
|
# Fuan <jcfrt@posteo.net>, 2021
|
||||||
# AHOHNMYC <lqwh2h2cwa@protonmail.com>, 2023
|
|
||||||
# Eugene Morozov <transifex@emorozov.net>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Eugene Morozov <transifex@emorozov.net>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Russian (https://app.transifex.com/voltaicideas/teams/116153/ru/)\n"
|
"Language-Team: Russian (https://www.transifex.com/voltaicideas/teams/116153/ru/)\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Дубликаты не отмечены. Нечего выполнять."
|
msgstr "Дубликаты не отмечены. Нечего выполнять."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Дубликаты не выбраны. Нечего выполнять."
|
msgstr "Дубликаты не выбраны. Нечего выполнять."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -30,23 +28,23 @@ msgstr ""
|
|||||||
"файлы будут открыты, это действие может создать настоящий беспорядок. "
|
"файлы будут открыты, это действие может создать настоящий беспорядок. "
|
||||||
"Продолжать?"
|
"Продолжать?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Проверка на наличие дубликатов"
|
msgstr "Проверка на наличие дубликатов"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Загрузка"
|
msgstr "Загрузка"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Перемещение"
|
msgstr "Перемещение"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Копирование"
|
msgstr "Копирование"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Перемещение в Корзину"
|
msgstr "Перемещение в Корзину"
|
||||||
|
|
||||||
@ -72,7 +70,7 @@ msgstr "Все отмеченные файлы были перемещены у
|
|||||||
|
|
||||||
#: core\app.py:319
|
#: core\app.py:319
|
||||||
msgid "All marked files were deleted successfully."
|
msgid "All marked files were deleted successfully."
|
||||||
msgstr "Все отмеченные файлы были удалены успешно."
|
msgstr ""
|
||||||
|
|
||||||
#: core\app.py:321
|
#: core\app.py:321
|
||||||
msgid "All marked files were successfully sent to Trash."
|
msgid "All marked files were successfully sent to Trash."
|
||||||
@ -110,7 +108,7 @@ msgstr "Выберите каталог, в который вы хотите п
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Выберите назначение для экспортируемого "
|
msgstr "Выберите назначение для экспортируемого "
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Не удалось записать в файл: {}"
|
msgstr "Не удалось записать в файл: {}"
|
||||||
|
|
||||||
@ -118,37 +116,37 @@ msgstr "Не удалось записать в файл: {}"
|
|||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "Вы не создали пользовательскую команду. Задайте её в настройках."
|
msgstr "Вы не создали пользовательскую команду. Задайте её в настройках."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Вы собираетесь удалить %d файлов из результата поиска. Продолжить?"
|
msgstr "Вы собираетесь удалить %d файлов из результата поиска. Продолжить?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} групп дубликатов было изменено при реприоритезации."
|
msgstr "{} групп дубликатов было изменено при реприоритезации."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Выбранные каталоги не содержат файлов для сканирования."
|
msgstr "Выбранные каталоги не содержат файлов для сканирования."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Сбор файлов для сканирования"
|
msgstr "Сбор файлов для сканирования"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s. (%d отменено)"
|
msgstr "%s. (%d отменено)"
|
||||||
|
|
||||||
#: core\directories.py:191
|
#: core\directories.py:191
|
||||||
msgid "Collected {} files to scan"
|
msgid "Collected {} files to scan"
|
||||||
msgstr "Собрано {} файлов для сканирования"
|
msgstr ""
|
||||||
|
|
||||||
#: core\directories.py:207
|
#: core\directories.py:207
|
||||||
msgid "Collected {} folders to scan"
|
msgid "Collected {} folders to scan"
|
||||||
msgstr "Собрано {} каталогов для сканирования"
|
msgstr ""
|
||||||
|
|
||||||
#: core\engine.py:27
|
#: core\engine.py:27
|
||||||
msgid "%d matches found from %d groups"
|
msgid "%d matches found from %d groups"
|
||||||
msgstr "Найдено %d совпадений из %d групп"
|
msgstr ""
|
||||||
|
|
||||||
#: core\gui\deletion_options.py:71
|
#: core\gui\deletion_options.py:71
|
||||||
msgid "You are sending {} file(s) to the Trash."
|
msgid "You are sending {} file(s) to the Trash."
|
||||||
@ -156,7 +154,7 @@ msgstr "Вы перемещаете {} файлов в Корзину."
|
|||||||
|
|
||||||
#: core\gui\exclude_list_table.py:14
|
#: core\gui\exclude_list_table.py:14
|
||||||
msgid "Regular Expressions"
|
msgid "Regular Expressions"
|
||||||
msgstr "Регулярные выражения"
|
msgstr "Обычные выражения"
|
||||||
|
|
||||||
#: core\gui\ignore_list_dialog.py:25
|
#: core\gui\ignore_list_dialog.py:25
|
||||||
msgid "Do you really want to remove all %d items from the ignore list?"
|
msgid "Do you really want to remove all %d items from the ignore list?"
|
||||||
@ -173,29 +171,29 @@ msgstr "Имя файла - Поля"
|
|||||||
|
|
||||||
#: core\me\scanner.py:22
|
#: core\me\scanner.py:22
|
||||||
msgid "Filename - Fields (No Order)"
|
msgid "Filename - Fields (No Order)"
|
||||||
msgstr "Имя файла - Поля (без сортировки)"
|
msgstr "Имя файла - поля (без порядка)"
|
||||||
|
|
||||||
#: core\me\scanner.py:23
|
#: core\me\scanner.py:23
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Теги"
|
msgstr "Теги"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Содержание"
|
msgstr "Содержание"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Проанализировано %d из %d изображений"
|
msgstr "Анализируется %d/%d изображений"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Проверено %d/%d совпадений"
|
msgstr "Выполнено %d/%d совпадений блоков"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Подготовка для сравнения"
|
msgstr "Подготовка для сравнения"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Проверено %d/%d совпадений"
|
msgstr "Проверено %d/%d совпадений"
|
||||||
|
|
||||||
@ -203,7 +201,7 @@ msgstr "Проверено %d/%d совпадений"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Прочитана EXIF-информация %d/%d фотографий"
|
msgstr "Прочитана EXIF-информация %d/%d фотографий"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Метка времени EXIF"
|
msgstr "Метка времени EXIF"
|
||||||
|
|
||||||
@ -211,53 +209,57 @@ msgstr "Метка времени EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Ни один"
|
msgstr "Ни один"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Заканчивается номером"
|
msgstr "Заканчивается номером"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Не заканчивается номером"
|
msgstr "Не заканчивается номером"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Самый длинный"
|
msgstr "Самый длинный"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Самый короткий"
|
msgstr "Самый короткий"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Наивысший"
|
msgstr "Наивысший"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Самый низкий"
|
msgstr "Самый низкий"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Новейший"
|
msgstr "Новейший"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Старейший"
|
msgstr "Старейшие"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) дубликатов отмечено."
|
msgstr "%d / %d (%s / %s) дубликатов отмечено."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "фильтр: %s"
|
msgstr "фильтр: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Подсчитан размер %d/%d файлов"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Прочитаны метаданные %d/%d файлов"
|
msgstr "Прочитаны метаданные %d/%d файлов"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Почти готово! Вожусь с результатами..."
|
msgstr "Почти готово! Возиться с результатами..."
|
||||||
|
|
||||||
#: core\se\scanner.py:18
|
#: core\se\scanner.py:18
|
||||||
msgid "Folders"
|
msgid "Folders"
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# AHOHNMYC <lqwh2h2cwa@protonmail.com>, 2023
|
|
||||||
# Captain Quake <elizabeth-keen.gardy@simplelogin.co>, 2023
|
|
||||||
# Eugene Morozov <transifex@emorozov.net>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Eugene Morozov <transifex@emorozov.net>, 2023\n"
|
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
|
||||||
"Language-Team: Russian (https://app.transifex.com/voltaicideas/teams/116153/ru/)\n"
|
"Language-Team: Russian (https://www.transifex.com/voltaicideas/teams/116153/ru/)\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -21,7 +18,7 @@ msgstr "Выйти"
|
|||||||
#: qt/app.py:82 qt/preferences_dialog.py:116
|
#: qt/app.py:82 qt/preferences_dialog.py:116
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr "Настройки"
|
msgstr "Параметры"
|
||||||
|
|
||||||
#: qt/app.py:83 qt/ignore_list_dialog.py:32
|
#: qt/app.py:83 qt/ignore_list_dialog.py:32
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
@ -78,7 +75,7 @@ msgstr "Жёсткая ссылка"
|
|||||||
|
|
||||||
#: qt/deletion_options.py:44
|
#: qt/deletion_options.py:44
|
||||||
msgid "Symlink"
|
msgid "Symlink"
|
||||||
msgstr "Символическая ссылка"
|
msgstr "Символьная ссылка"
|
||||||
|
|
||||||
#: qt/deletion_options.py:48
|
#: qt/deletion_options.py:48
|
||||||
msgid " (unsupported)"
|
msgid " (unsupported)"
|
||||||
@ -93,12 +90,12 @@ msgid ""
|
|||||||
"Instead of sending files to trash, delete them directly. This option is "
|
"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."
|
"usually used as a workaround when the normal deletion method doesn't work."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Удалить файлы с диска вместо отправки в Корзину. Используйте если нормальный"
|
"Вместо отправки файлов в Корзину удалить их с диска. Этот параметр обычно "
|
||||||
" метод удаления не работает."
|
"используется как обходной путь, когда нормальный метод удаления не работает."
|
||||||
|
|
||||||
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
|
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Proceed"
|
msgid "Proceed"
|
||||||
msgstr "Приступить"
|
msgstr "Выполняется"
|
||||||
|
|
||||||
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
|
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
@ -157,11 +154,11 @@ msgstr "Музыка"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Picture"
|
msgid "Picture"
|
||||||
msgstr "Изображения"
|
msgstr "Рисунок"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Standard"
|
msgid "Standard"
|
||||||
msgstr "Обычный"
|
msgstr "Стандарт"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Scan Type:"
|
msgid "Scan Type:"
|
||||||
@ -173,7 +170,7 @@ msgstr "Больше вариантов"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Select folders to scan and press \"Scan\"."
|
msgid "Select folders to scan and press \"Scan\"."
|
||||||
msgstr "Выберите каталоги для поиска и нажмите \"Сканировать\"."
|
msgstr "Выберите каталоги для поиска и нажмите \"Сканирование\"."
|
||||||
|
|
||||||
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Load Results"
|
msgid "Load Results"
|
||||||
@ -181,7 +178,7 @@ msgstr "Загрузить результаты"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:166 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:166 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Scan"
|
msgid "Scan"
|
||||||
msgstr "Сканировать"
|
msgstr "Сканирование"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:230
|
#: qt/directories_dialog.py:230
|
||||||
msgid "Unsaved results"
|
msgid "Unsaved results"
|
||||||
@ -225,11 +222,11 @@ msgstr "Состояние"
|
|||||||
|
|
||||||
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Excluded"
|
msgid "Excluded"
|
||||||
msgstr "Исключён"
|
msgstr "Исключённые"
|
||||||
|
|
||||||
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Normal"
|
msgid "Normal"
|
||||||
msgstr "Обычный"
|
msgstr "Нормальный"
|
||||||
|
|
||||||
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
|
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Remove Selected"
|
msgid "Remove Selected"
|
||||||
@ -296,7 +293,7 @@ msgstr "Можно смешивать типы файлов"
|
|||||||
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
|
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
|
||||||
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Use regular expressions when filtering"
|
msgid "Use regular expressions when filtering"
|
||||||
msgstr "Использовать регулярные выражения для фильтров"
|
msgstr "Использование регулярных выражений при фильтрации"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
|
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
|
||||||
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
|
||||||
@ -315,7 +312,7 @@ msgstr "Режим отладки (требуется перезапуск)"
|
|||||||
|
|
||||||
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Match pictures of different dimensions"
|
msgid "Match pictures of different dimensions"
|
||||||
msgstr "Искать дубликаты изображений разных размеров"
|
msgstr "Совпадение рисунков разных размеров"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:43
|
#: qt/preferences_dialog.py:43
|
||||||
msgid "Filter Hardness:"
|
msgid "Filter Hardness:"
|
||||||
@ -360,7 +357,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: qt/preferences_dialog.py:174
|
#: qt/preferences_dialog.py:174
|
||||||
msgid "dupeGuru has to restart for language changes to take effect."
|
msgid "dupeGuru has to restart for language changes to take effect."
|
||||||
msgstr "Новый язык будет загружен при следующем запуске dupeGuru."
|
msgstr ""
|
||||||
|
"dupeGuru необходимо перезапустить, чтобы языковые изменения вступили в силу."
|
||||||
|
|
||||||
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
|
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Re-Prioritize duplicates"
|
msgid "Re-Prioritize duplicates"
|
||||||
@ -379,7 +377,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
|
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Problems!"
|
msgid "Problems!"
|
||||||
msgstr "Проблемка!"
|
msgstr "Проблемы!"
|
||||||
|
|
||||||
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
|
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -473,7 +471,7 @@ msgstr "Экспорт в HTML"
|
|||||||
|
|
||||||
#: qt/result_window.py:88
|
#: qt/result_window.py:88
|
||||||
msgid "Export To CSV"
|
msgid "Export To CSV"
|
||||||
msgstr "Экспорт в CSV"
|
msgstr "Экспорт в "
|
||||||
|
|
||||||
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
|
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Save Results..."
|
msgid "Save Results..."
|
||||||
@ -646,7 +644,7 @@ msgstr "Скрыть остальные"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Ignore files smaller than:"
|
msgid "Ignore files smaller than:"
|
||||||
msgstr "Пропускать файлы меньше чем:"
|
msgstr "Игнорировать файлы меньше чем:"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Load from file..."
|
msgid "Load from file..."
|
||||||
@ -654,7 +652,7 @@ msgstr "Загрузить из файла…"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Свернуть"
|
msgstr "Минимизировать"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
@ -754,7 +752,7 @@ msgstr "Выберите файл каталогов для загрузки"
|
|||||||
|
|
||||||
#: qt\directories_dialog.py:338
|
#: qt\directories_dialog.py:338
|
||||||
msgid "dupeGuru Results (*.dupegurudirs)"
|
msgid "dupeGuru Results (*.dupegurudirs)"
|
||||||
msgstr "Каталоги dupeGuru (*.dupegurudirs)"
|
msgstr "каталоги dupeGuru (*.dupegurudirs)"
|
||||||
|
|
||||||
#: qt\directories_dialog.py:347
|
#: qt\directories_dialog.py:347
|
||||||
msgid "Select a file to save your directories to"
|
msgid "Select a file to save your directories to"
|
||||||
@ -762,11 +760,11 @@ msgstr "Выберите файл для сохранения каталогов
|
|||||||
|
|
||||||
#: qt\directories_dialog.py:348
|
#: qt\directories_dialog.py:348
|
||||||
msgid "dupeGuru Directories (*.dupegurudirs)"
|
msgid "dupeGuru Directories (*.dupegurudirs)"
|
||||||
msgstr "Каталоги dupeGuru (*.dupegurudirs)"
|
msgstr "каталоги dupeGuru (*.dupegurudirs)"
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:44
|
#: qt\exclude_list_dialog.py:44
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr "Добавить"
|
msgstr "добавлять"
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:46
|
#: qt\exclude_list_dialog.py:46
|
||||||
msgid "Restore defaults"
|
msgid "Restore defaults"
|
||||||
@ -774,7 +772,7 @@ msgstr "Восстановить значения по умолчанию"
|
|||||||
|
|
||||||
#: qt\exclude_list_dialog.py:47
|
#: qt\exclude_list_dialog.py:47
|
||||||
msgid "Test string"
|
msgid "Test string"
|
||||||
msgstr "Проверить строку"
|
msgstr "Тестовая строка"
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:83
|
#: qt\exclude_list_dialog.py:83
|
||||||
msgid "Type a python regular expression here..."
|
msgid "Type a python regular expression here..."
|
||||||
@ -791,10 +789,10 @@ msgid ""
|
|||||||
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the test string feature by pasting a fake path in it:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Эти (чувствительные к регистру) регулярные выражения Python будут отфильтровывать файлы во время сканирования.<br>Если имя каталога подходит под какое-либо из выбранных регулярных выражений, для него на вкладке «Каталоги» будет выставлено <strong>состояние по умолчанию</strong> «Исключено».<br>Для каждого файла выполняется две проверки, чтобы определить, следует ли его полностью игнорировать:<br><li>1. Регулярные выражения без разделителя пути будут сравниваться только с именем файла.</li>\n"
|
"Эти (чувствительные к регистру) регулярные выражения Python будут отфильтровывать файлы во время сканирования.<br>Директорам также будет установлено <strong>состояние по умолчанию</strong> «Исключено» на вкладке «Каталоги», если их имя совпадает с одним из выбранных регулярных выражений.<br>Для каждого собранного файла выполняется два теста, чтобы определить, следует ли его полностью игнорировать:<br><li>1. Регулярные выражения без разделителя пути будут сравниваться только с именем файла.</li>\n"
|
||||||
"<li>2. Регулярные выражения, содержащие хотя бы один разделитель пути, будут сравниваться с полным путем к файлу.</li><br>\n"
|
"<li>2. Регулярные выражения, содержащие хотя бы один разделитель пути, будут сравниваться с полным путем к файлу.</li><br>\n"
|
||||||
"Пример: отфильтровать .PNG из каталога «Мои изображения»:<br><code>.*Мои\\sизображения\\\\.*\\.png</code><br><br>Вы можете проверить регулярное выражение с помощью кнопки «Проверить строку», указав, например, такой путь:<br><code>C:\\\\Пользователь\\Мои изображения\\test.png</code><br><br>\n"
|
"Пример: если вы хотите отфильтровать файлы .PNG только из каталога «Мои изображения»:<br><code>.*Мои\\sизображения\\\\.*\\.png</code><br><br>Вы можете проверить регулярное выражение с помощью кнопки «тестовая строка» после вставки поддельного пути в тестовое поле:<br><code>C:\\\\Пользователь\\Мои изображения\\test.png</code><br><br>\n"
|
||||||
"Сработавшие регулярные выражения будут выделены.<br>Если есть хотя бы одно выделение, проверенный путь или имя файла будет проигнорирован во время сканирования.<br><br>Каталоги и файлы, начинающиеся с точки \".\" по умолчанию будут отфильтрованы.<br><br>"
|
"Соответствующие регулярные выражения будут выделены.<br>Если есть хотя бы одно выделение, проверенный путь или имя файла будет проигнорирован во время сканирования.<br><br>Каталоги и файлы, начинающиеся с точки \".\" по умолчанию отфильтрованы.<br><br>"
|
||||||
|
|
||||||
#: qt\exclude_list_table.py:36
|
#: qt\exclude_list_table.py:36
|
||||||
msgid "Compilation error: "
|
msgid "Compilation error: "
|
||||||
@ -835,7 +833,9 @@ msgstr "Переопределить значки темы на панели и
|
|||||||
#: qt\pe\preferences_dialog.py:58
|
#: qt\pe\preferences_dialog.py:58
|
||||||
msgid ""
|
msgid ""
|
||||||
"Use our own internal icons instead of those provided by the theme engine"
|
"Use our own internal icons instead of those provided by the theme engine"
|
||||||
msgstr "Используйте внутренние значки вместо значков, встроенных в тему"
|
msgstr ""
|
||||||
|
"Используйте наши собственные внутренние значки вместо тех, которые "
|
||||||
|
"предоставляются движком темы."
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:66
|
#: qt\pe\preferences_dialog.py:66
|
||||||
msgid "Show scrollbars in image viewers"
|
msgid "Show scrollbars in image viewers"
|
||||||
@ -845,7 +845,9 @@ msgstr "Показывать полосы прокрутки в средства
|
|||||||
msgid ""
|
msgid ""
|
||||||
"When the image displayed doesn't fit the viewport, show scrollbars to span "
|
"When the image displayed doesn't fit the viewport, show scrollbars to span "
|
||||||
"the view around"
|
"the view around"
|
||||||
msgstr "Показывать полосы прокрутки для больших изображений"
|
msgstr ""
|
||||||
|
"Когда отображаемое изображение не умещается в области просмотра, покажите "
|
||||||
|
"полосы прокрутки, чтобы охватить область просмотра"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:156
|
#: qt\preferences_dialog.py:156
|
||||||
msgid "Use default position for tab bar (requires restart)"
|
msgid "Use default position for tab bar (requires restart)"
|
||||||
@ -862,19 +864,19 @@ msgstr ""
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:172
|
#: qt\preferences_dialog.py:172
|
||||||
msgid "Use bold font for references"
|
msgid "Use bold font for references"
|
||||||
msgstr "Использовать жирный шрифт для ссылок"
|
msgstr "Используйте жирный шрифт для ссылок"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:176
|
#: qt\preferences_dialog.py:176
|
||||||
msgid "Reference foreground color:"
|
msgid "Reference foreground color:"
|
||||||
msgstr "Цвет шрифта для эталонных файлов:"
|
msgstr "Эталонный цвет переднего плана:"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:179
|
#: qt\preferences_dialog.py:179
|
||||||
msgid "Reference background color:"
|
msgid "Reference background color:"
|
||||||
msgstr "Цвет фона для эталонных файлов:"
|
msgstr "Цвет фона справки:"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
|
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
|
||||||
msgid "Delta foreground color:"
|
msgid "Delta foreground color:"
|
||||||
msgstr "Цвет шрифта для дельты:"
|
msgstr "Цвет переднего плана дельты:"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:195
|
#: qt\preferences_dialog.py:195
|
||||||
msgid "Show the title bar and can be docked"
|
msgid "Show the title bar and can be docked"
|
||||||
@ -885,8 +887,8 @@ msgid ""
|
|||||||
"While the title bar is hidden, use the modifier key to drag the floating "
|
"While the title bar is hidden, use the modifier key to drag the floating "
|
||||||
"window around"
|
"window around"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Если строка заголовка скрыта, перемещать плавающее окно с клавишей-"
|
"Пока строка заголовка скрыта, используйте клавишу-модификатор, чтобы "
|
||||||
"модификатором"
|
"перетащить плавающее окно вокруг"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:199
|
#: qt\preferences_dialog.py:199
|
||||||
msgid "The title bar can only be disabled while the window is docked"
|
msgid "The title bar can only be disabled while the window is docked"
|
||||||
@ -913,10 +915,10 @@ msgid ""
|
|||||||
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Эти (чувствительные к регистру) регулярные выражения Python будут отфильтровывать файлы во время сканирования.<br>Если имя каталога подходит под какое-либо из выбранных регулярных выражений, для него на вкладке «Каталоги» будет выставлено <strong>состояние по умолчанию</strong> «Исключено».<br>Для каждого файла выполняется две проверки, чтобы определить, следует ли его полностью игнорировать:<br><li>1. Регулярные выражения без разделителя пути будут сравниваться только с именем файла.</li>\n"
|
"Эти (чувствительные к регистру) регулярные выражения Python будут отфильтровывать файлы во время сканирования.<br>Директорам также будет установлено <strong>состояние по умолчанию</strong> «Исключено» на вкладке «Каталоги», если их имя совпадает с одним из выбранных регулярных выражений.<br>Для каждого собранного файла выполняется два теста, чтобы определить, следует ли его полностью игнорировать:<br><li>1. Регулярные выражения без разделителя пути будут сравниваться только с именем файла.</li>\n"
|
||||||
"<li>2. Регулярные выражения, содержащие хотя бы один разделитель пути, будут сравниваться с полным путем к файлу.</li><br>\n"
|
"<li>2. Регулярные выражения, содержащие хотя бы один разделитель пути, будут сравниваться с полным путем к файлу.</li><br>\n"
|
||||||
"Пример: отфильтровать .PNG из каталога «Мои изображения»:<br><code>.*Мои\\sизображения\\\\.*\\.png</code><br><br>Вы можете проверить регулярное выражение с помощью кнопки «Проверить строку», указав, например, такой путь:<br><code>C:\\\\Пользователь\\Мои изображения\\test.png</code><br><br>\n"
|
"Пример: если вы хотите отфильтровать файлы .PNG только из каталога «Мои изображения»:<br><code>.*Мои\\sизображения\\\\.*\\.png</code><br><br>Вы можете проверить регулярное выражение с помощью кнопки «тестовая строка» после вставки поддельного пути в тестовое поле:<br><code>C:\\\\Пользователь\\Мои изображения\\test.png</code><br><br>\n"
|
||||||
"Сработавшие регулярные выражения будут выделены.<br>Если есть хотя бы одно выделение, проверенный путь или имя файла будет проигнорирован во время сканирования.<br><br>Каталоги и файлы, начинающиеся с точки \".\" по умолчанию будут отфильтрованы.<br><br>"
|
"Соответствующие регулярные выражения будут выделены.<br>Если есть хотя бы одно выделение, проверенный путь или имя файла будет проигнорирован во время сканирования.<br><br>Каталоги и файлы, начинающиеся с точки \".\" по умолчанию отфильтрованы.<br><br>"
|
||||||
|
|
||||||
#: qt\app.py:256
|
#: qt\app.py:256
|
||||||
msgid "Results"
|
msgid "Results"
|
||||||
@ -928,86 +930,79 @@ msgstr "Общий интерфейс"
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:176
|
#: qt\preferences_dialog.py:176
|
||||||
msgid "Result Table"
|
msgid "Result Table"
|
||||||
msgstr "Таблица с результатами"
|
msgstr "Таблица результатов"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:205
|
#: qt\preferences_dialog.py:205
|
||||||
msgid "Details Window"
|
msgid "Details Window"
|
||||||
msgstr "Окно с подробностями"
|
msgstr "Окно деталей"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:285
|
#: qt\preferences_dialog.py:285
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Общие"
|
msgstr "Общий"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:286
|
#: qt\preferences_dialog.py:286
|
||||||
msgid "Display"
|
msgid "Display"
|
||||||
msgstr "Внешний вид"
|
msgstr "Отображать"
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:70
|
#: qt\se\preferences_dialog.py:70
|
||||||
msgid "Partially hash files bigger than"
|
msgid "Partially hash files bigger than"
|
||||||
msgstr "Частично хешировать большие файлы, размером более"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:80
|
#: qt\se\preferences_dialog.py:80
|
||||||
msgid "MB"
|
msgid "MB"
|
||||||
msgstr "МБ"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:163
|
#: qt\preferences_dialog.py:163
|
||||||
msgid "Use native OS dialogs"
|
msgid "Use native OS dialogs"
|
||||||
msgstr "Использовать системное окно выбора файлов и папок"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:166
|
#: qt\preferences_dialog.py:166
|
||||||
msgid ""
|
msgid ""
|
||||||
"For actions such as file/folder selection use the OS native dialogs.\n"
|
"For actions such as file/folder selection use the OS native dialogs.\n"
|
||||||
"Some native dialogs have limited functionality."
|
"Some native dialogs have limited functionality."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"При выборе файлов или папок для добавления в список сканирования будет "
|
|
||||||
"использоваться диалоговое окно системы, а не встроенное в dupeGuru. "
|
|
||||||
"Некоторые системные диалоговые окна имеют ограниченную функциональность."
|
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:68
|
#: qt\se\preferences_dialog.py:68
|
||||||
msgid "Ignore files larger than"
|
msgid "Ignore files larger than"
|
||||||
msgstr "Игнорировать файлы больше чем"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:135 qt\app.py:293
|
#: qt\app.py:135 qt\app.py:293
|
||||||
msgid "Clear Cache"
|
msgid "Clear Cache"
|
||||||
msgstr "Очистить кэш"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:294
|
#: qt\app.py:294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Do you really want to clear the cache? This will remove all cached file "
|
"Do you really want to clear the cache? This will remove all cached file "
|
||||||
"hashes and picture analysis."
|
"hashes and picture analysis."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Вы действительно хотите очистить кэш? Это удалит все кэшированные хеши "
|
|
||||||
"файлов и анализ данных изображений."
|
|
||||||
|
|
||||||
#: qt\app.py:299
|
#: qt\app.py:299
|
||||||
msgid "Cache cleared."
|
msgid "Cache cleared."
|
||||||
msgstr "Кэш очищен "
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:173
|
#: qt\preferences_dialog.py:173
|
||||||
msgid "Use dark style"
|
msgid "Use dark style"
|
||||||
msgstr "Использовать темную тему"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:241
|
#: qt\preferences_dialog.py:241
|
||||||
msgid "Profile scan operation"
|
msgid "Profile scan operation"
|
||||||
msgstr "Сохранить профиль сканирования"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:242
|
#: qt\preferences_dialog.py:242
|
||||||
msgid "Profile the scan operation and save logs for optimization."
|
msgid "Profile the scan operation and save logs for optimization."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"В папке установленной или портативной программы, есть папка Data в которую "
|
|
||||||
"сохраняется логи и файл с раширением *.profile для оптимизации."
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:246
|
#: qt\preferences_dialog.py:246
|
||||||
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
||||||
msgstr "Сохранять отчеты в: <a href=\"{}\">{}</a>"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:291
|
#: qt\preferences_dialog.py:291
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
msgstr "Отладка"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:31
|
#: qt\about_box.py:31
|
||||||
msgid "About {}"
|
msgid "About {}"
|
||||||
msgstr "О программе {}"
|
msgstr "О {}"
|
||||||
|
|
||||||
#: qt\about_box.py:47
|
#: qt\about_box.py:47
|
||||||
msgid "Version {}"
|
msgid "Version {}"
|
||||||
@ -1015,7 +1010,7 @@ msgstr "Версия {}"
|
|||||||
|
|
||||||
#: qt\about_box.py:49 qt\about_box.py:75
|
#: qt\about_box.py:49 qt\about_box.py:75
|
||||||
msgid "Checking for updates..."
|
msgid "Checking for updates..."
|
||||||
msgstr "Проверка обновлений..."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:54
|
#: qt\about_box.py:54
|
||||||
msgid "Licensed under GPLv3"
|
msgid "Licensed under GPLv3"
|
||||||
@ -1023,11 +1018,11 @@ msgstr "Под лицензией GPLv3"
|
|||||||
|
|
||||||
#: qt\about_box.py:68
|
#: qt\about_box.py:68
|
||||||
msgid "No update available."
|
msgid "No update available."
|
||||||
msgstr "У вас самая свежая версия"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:71
|
#: qt\about_box.py:71
|
||||||
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
||||||
msgstr "Обнаружена новая {} версия, загружать <a href=\"{}\">тут</a>."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:50
|
#: qt\error_report_dialog.py:50
|
||||||
msgid "Error Report"
|
msgid "Error Report"
|
||||||
@ -1039,7 +1034,7 @@ msgstr "Что-то пошло не так. Хотите отправить от
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1047,17 +1042,17 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Отчеты об ошибках следует сообщать в виде проблем (issues) на GitHub. Вы можете скопировать приведенный выше отчет об ошибке и сообщить о нем на GitHub.\n"
|
"Отчеты об ошибках следует сообщать как о проблемах Github. Вы можете скопировать трассировку ошибки выше и вставить ее в новый выпуск.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Пожалуйста, предварительно сделайте поиск уже существующих проблем в репозитории программы на GitHub. Также убедитесь, что вы используете самую последнюю версию, доступную из репозитория, поскольку ошибка, с которой вы столкнулись, возможно, уже исправлена.\n"
|
"Обязательно заранее выполните поиск любых уже существующих проблем. Также не забудьте протестировать самую последнюю версию, доступную в репозитории, поскольку ошибка, с которой вы столкнулись, могла уже быть исправлена.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Чтобы быстро и качественно решить проблему, очень поможет пошаговое описание действий пришедших к ошибке. Спасибо!\n"
|
"Что обычно действительно помогает, так это то, что вы добавляете описание того, как вы получили ошибку. Благодаря!\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Приложение должно продолжать работу после ошибки, хотя и не стабильно. Рекомендуется перезапустить программу."
|
"Хотя приложение должно продолжить работу после этой ошибки, оно может находиться в нестабильном состоянии, поэтому рекомендуется перезапустить приложение."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Перейти на GitHub"
|
msgstr "Перейти на Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1142,38 +1137,3 @@ msgstr "Очистить список"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Искать..."
|
msgstr "Искать..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
"Опция для опытных пользователей для различных специфичных ситуаций. Если не "
|
|
||||||
"знаете, что делаете, не трогайте!"
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr "Включить проверку после завершения сканирования"
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr "Игнорировать разницу во времени при загрузке кэшированных дайджестов"
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr "Отменить?"
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr "Вы уверены, что хотите отменить? Весь прогресс будет потерян."
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>, 2021\n"
|
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>, 2021\n"
|
||||||
"Language-Team: Turkish (https://app.transifex.com/voltaicideas/teams/116153/tr/)\n"
|
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
|
||||||
"Language: tr\n"
|
"Language: tr\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "İmlenen kopya yok. İşlem yapılmadı."
|
msgstr "İmlenen kopya yok. İşlem yapılmadı."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Seçilen kopya yok. İşlem yapılmadı."
|
msgstr "Seçilen kopya yok. İşlem yapılmadı."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -27,23 +27,23 @@ msgstr ""
|
|||||||
"Birden çok dosyayı aynı anda açmaya çalışıyorsunuz. Dosyaların açıldığı "
|
"Birden çok dosyayı aynı anda açmaya çalışıyorsunuz. Dosyaların açıldığı "
|
||||||
"programlara bağlı olarak, bu sorun yaratabilir. Sürdürülsün mü?"
|
"programlara bağlı olarak, bu sorun yaratabilir. Sürdürülsün mü?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Kopyalar aranıyor"
|
msgstr "Kopyalar aranıyor"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Yükleniyor"
|
msgstr "Yükleniyor"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Taşınıyor"
|
msgstr "Taşınıyor"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Kopyalanıyor"
|
msgstr "Kopyalanıyor"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Çöpe Gönderiliyor"
|
msgstr "Çöpe Gönderiliyor"
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ msgstr "İmlenen dosyaları taşımak için dizin seç"
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Dışa aktarılan CSV'niz için hedef seçin"
|
msgstr "Dışa aktarılan CSV'niz için hedef seçin"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Dosyaya yazılamadı: {}"
|
msgstr "Dosyaya yazılamadı: {}"
|
||||||
|
|
||||||
@ -114,23 +114,23 @@ msgstr "Dosyaya yazılamadı: {}"
|
|||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "Ayarlı özel komutunuz yok. Tercihlerinizden ayarlayınız."
|
msgstr "Ayarlı özel komutunuz yok. Tercihlerinizden ayarlayınız."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "%d ögeyi sonuçlardan kaldırıyorsunuz. Sürdür?"
|
msgstr "%d ögeyi sonuçlardan kaldırıyorsunuz. Sürdür?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{} kopya küme, yeniden önceliklendirme tarafından değiştirildi."
|
msgstr "{} kopya küme, yeniden önceliklendirme tarafından değiştirildi."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Seçili dizinler taranabilir dosya içermiyor."
|
msgstr "Seçili dizinler taranabilir dosya içermiyor."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Taranacak dosyalar toplanıyor"
|
msgstr "Taranacak dosyalar toplanıyor"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d göz ardı edilen)"
|
msgstr "%s (%d göz ardı edilen)"
|
||||||
|
|
||||||
@ -175,23 +175,23 @@ msgstr "Dosya Adı - Alanlar (Düzen Yok)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Etiketler"
|
msgstr "Etiketler"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "İçindekiler"
|
msgstr "İçindekiler"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "%d/%d fotoğraf incelendi"
|
msgstr "%d/%d fotoğraf incelendi"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "%d/%d yığın eşleşmesi gerçekleştirildi"
|
msgstr "%d/%d yığın eşleşmesi gerçekleştirildi"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Eşlemeye hazırlanıyor"
|
msgstr "Eşlemeye hazırlanıyor"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "%d/%d eşleşme doğrulandı"
|
msgstr "%d/%d eşleşme doğrulandı"
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ msgstr "%d/%d eşleşme doğrulandı"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "%d/%d fotorğafın EXIF'i okundu"
|
msgstr "%d/%d fotorğafın EXIF'i okundu"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIF Zaman damgası"
|
msgstr "EXIF Zaman damgası"
|
||||||
|
|
||||||
@ -207,51 +207,55 @@ msgstr "EXIF Zaman damgası"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Hiçbiri"
|
msgstr "Hiçbiri"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Sayıyla bitenler"
|
msgstr "Sayıyla bitenler"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Sayıyla bitmeyenler"
|
msgstr "Sayıyla bitmeyenler"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "En uzun"
|
msgstr "En uzun"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "En kısa"
|
msgstr "En kısa"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "En yüksek"
|
msgstr "En yüksek"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "En düşük"
|
msgstr "En düşük"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "En yeni"
|
msgstr "En yeni"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "En eski"
|
msgstr "En eski"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) kopya imlendi."
|
msgstr "%d / %d (%s / %s) kopya imlendi."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "süz: %s"
|
msgstr "süz: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "%d/%d dosyanın boyutu okundu"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "%d/%d dosyanın üst verisi okundu"
|
msgstr "%d/%d dosyanın üst verisi okundu"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Neredeyse bitti! Sonuçlarla uğraşılıyor..."
|
msgstr "Neredeyse bitti! Sonuçlarla uğraşılıyor..."
|
||||||
|
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2022
|
|
||||||
# Emin Tufan Çetin <etcetin@gmail.com>, 2022
|
# Emin Tufan Çetin <etcetin@gmail.com>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2022
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2022\n"
|
||||||
"Language-Team: Turkish (https://app.transifex.com/voltaicideas/teams/116153/tr/)\n"
|
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
|
||||||
"Language: tr\n"
|
"Language: tr\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -988,19 +987,19 @@ msgstr "Karanlık biçem kullan"
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:241
|
#: qt\preferences_dialog.py:241
|
||||||
msgid "Profile scan operation"
|
msgid "Profile scan operation"
|
||||||
msgstr "Tarama işlemini profille"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:242
|
#: qt\preferences_dialog.py:242
|
||||||
msgid "Profile the scan operation and save logs for optimization."
|
msgid "Profile the scan operation and save logs for optimization."
|
||||||
msgstr "Tarama işlemini profille ve iyileştirme için günlükleri kaydet."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:246
|
#: qt\preferences_dialog.py:246
|
||||||
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
||||||
msgstr "Günlükler şuradadır: <a href=\"{}\">{}</a>"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:291
|
#: qt\preferences_dialog.py:291
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
msgstr "Hata ayıklama"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:31
|
#: qt\about_box.py:31
|
||||||
msgid "About {}"
|
msgid "About {}"
|
||||||
@ -1012,7 +1011,7 @@ msgstr "Sürüm {}"
|
|||||||
|
|
||||||
#: qt\about_box.py:49 qt\about_box.py:75
|
#: qt\about_box.py:49 qt\about_box.py:75
|
||||||
msgid "Checking for updates..."
|
msgid "Checking for updates..."
|
||||||
msgstr "Güncellemeler denetleniyor..."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:54
|
#: qt\about_box.py:54
|
||||||
msgid "Licensed under GPLv3"
|
msgid "Licensed under GPLv3"
|
||||||
@ -1020,11 +1019,11 @@ msgstr "GPLv3 altında lisanslanmıştır."
|
|||||||
|
|
||||||
#: qt\about_box.py:68
|
#: qt\about_box.py:68
|
||||||
msgid "No update available."
|
msgid "No update available."
|
||||||
msgstr "Güncelleme yok."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:71
|
#: qt\about_box.py:71
|
||||||
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
||||||
msgstr "Yeni {} sürümü var, <a href=\"{}\">buradan</a> indirilebilir."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:50
|
#: qt\error_report_dialog.py:50
|
||||||
msgid "Error Report"
|
msgid "Error Report"
|
||||||
@ -1036,7 +1035,7 @@ msgstr "Bir şeyler yanlış gitti. Hatayı raporlamak ister misin?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1044,7 +1043,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Hata raporları GitHub'da sorun (issue) olarak bildirilmelidir. Yukarıdaki hata kaynağını kopyalayabilir ve yeni sorun bildirimine yapıştırabilirsiniz\n"
|
"Hata raporları Github'da sorun (issue) olarak bildirilmelidir. Yukarıdaki hata kaynağını kopyalayabilir ve yeni sorun bildirimine yapıştırabilirsiniz\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Lütfen yeni sorun bildirimi oluşturmadan önce var olan sorunları aradığınızdan emin olun. Ayrıca depoda bulunan en son sürümü sınadığınızdan emin olun, karşılaştığınız hata hâlihazırda düzeltilmiş olabilir.\n"
|
"Lütfen yeni sorun bildirimi oluşturmadan önce var olan sorunları aradığınızdan emin olun. Ayrıca depoda bulunan en son sürümü sınadığınızdan emin olun, karşılaştığınız hata hâlihazırda düzeltilmiş olabilir.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1053,8 +1052,8 @@ msgstr ""
|
|||||||
"Bu hatadan sonra uygulama çalışmaya sürdürebilse de kararsız durumda olabilir, bu nedenle uygulamayı yeniden başlatmanız önerilir."
|
"Bu hatadan sonra uygulama çalışmaya sürdürebilse de kararsız durumda olabilir, bu nedenle uygulamayı yeniden başlatmanız önerilir."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "GitHub'a Git"
|
msgstr "Github'a Git"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1139,36 +1138,3 @@ msgstr "Listeyi Temizle"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Ara..."
|
msgstr "Ara..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -996,7 +996,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1006,7 +1006,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
@ -1092,36 +1092,3 @@ msgstr ""
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,21 +5,21 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Ukrainian (https://app.transifex.com/voltaicideas/teams/116153/uk/)\n"
|
"Language-Team: Ukrainian (https://www.transifex.com/voltaicideas/teams/116153/uk/)\n"
|
||||||
"Language: uk\n"
|
"Language: uk\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
|
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "Немає позначених дублікатів - нічого робити."
|
msgstr "Немає позначених дублікатів - нічого робити."
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "Немає обраних дублікатів - нічого робити."
|
msgstr "Немає обраних дублікатів - нічого робити."
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -27,23 +27,23 @@ msgstr ""
|
|||||||
"Ви збираєтеся відкрити багато файлів одночасно.\n"
|
"Ви збираєтеся відкрити багато файлів одночасно.\n"
|
||||||
"Залежно від того, з чим відкриваються ці файли, це може створити неабияку халепу. Продовжити?"
|
"Залежно від того, з чим відкриваються ці файли, це може створити неабияку халепу. Продовжити?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Пошук дублікатів"
|
msgstr "Пошук дублікатів"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Завантаження"
|
msgstr "Завантаження"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Переміщення"
|
msgstr "Переміщення"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Копіювання"
|
msgstr "Копіювання"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Відправка до кошику"
|
msgstr "Відправка до кошику"
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ msgstr "Виберіть каталог, куди ви хочете перемі
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Виберіть каталог, куди потрібно скопіювати позначені файли"
|
msgstr "Виберіть каталог, куди потрібно скопіювати позначені файли"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Не вдалося записати у файл: {}"
|
msgstr "Не вдалося записати у файл: {}"
|
||||||
|
|
||||||
@ -115,25 +115,25 @@ msgstr "Не вдалося записати у файл: {}"
|
|||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "Власна команда не встановлена. Встановіть її у налаштуваннях."
|
msgstr "Власна команда не встановлена. Встановіть її у налаштуваннях."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "Ви збираєтеся видалити %d файлів з результату пошуку. Продовжити?"
|
msgstr "Ви збираєтеся видалити %d файлів з результату пошуку. Продовжити?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{} повторюваних груп було змінено шляхом повторного встановлення "
|
"{} повторюваних груп було змінено шляхом повторного встановлення "
|
||||||
"пріоритетів."
|
"пріоритетів."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "Обрані папки не містять файлів придатних для пошуку."
|
msgstr "Обрані папки не містять файлів придатних для пошуку."
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Збір файлів для пошуку"
|
msgstr "Збір файлів для пошуку"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d відкинуто)"
|
msgstr "%s (%d відкинуто)"
|
||||||
|
|
||||||
@ -177,23 +177,23 @@ msgstr "Назва файлу - поля (без замовлення)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Теги"
|
msgstr "Теги"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Зміст"
|
msgstr "Зміст"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Проаналізовано %d/%d фотографій"
|
msgstr "Проаналізовано %d/%d фотографій"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Виконано %d/%d порівнянь шматків"
|
msgstr "Виконано %d/%d порівнянь шматків"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Підготовка до порівняння"
|
msgstr "Підготовка до порівняння"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Перевірено %d/%d результатів"
|
msgstr "Перевірено %d/%d результатів"
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ msgstr "Перевірено %d/%d результатів"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Прочитано EXIF з %d/%d фотографій"
|
msgstr "Прочитано EXIF з %d/%d фотографій"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Відмітка часу EXIF"
|
msgstr "Відмітка часу EXIF"
|
||||||
|
|
||||||
@ -209,51 +209,55 @@ msgstr "Відмітка часу EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Жоден"
|
msgstr "Жоден"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Закінчується номером"
|
msgstr "Закінчується номером"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Не закінчується номером"
|
msgstr "Не закінчується номером"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Найдовший"
|
msgstr "Найдовший"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Найкоротший"
|
msgstr "Найкоротший"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Найвища"
|
msgstr "Найвища"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Найнижча"
|
msgstr "Найнижча"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Найновіші"
|
msgstr "Найновіші"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Найдавніший"
|
msgstr "Найдавніший"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) дублікатів позначено."
|
msgstr "%d / %d (%s / %s) дублікатів позначено."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr "фільтр: %s"
|
msgstr "фільтр: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Прочитано розмір %d/%d файлів"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Прочитано метаданих з %d/%d файлів"
|
msgstr "Прочитано метаданих з %d/%d файлів"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Майже зроблено! Возився з результатами..."
|
msgstr "Майже зроблено! Возився з результатами..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Ukrainian (https://app.transifex.com/voltaicideas/teams/116153/uk/)\n"
|
"Language-Team: Ukrainian (https://www.transifex.com/voltaicideas/teams/116153/uk/)\n"
|
||||||
"Language: uk\n"
|
"Language: uk\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1034,7 +1034,7 @@ msgstr "Щось пішло не так. Як щодо повідомлення
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1042,7 +1042,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Звіти про помилки слід повідомляти як проблеми GitHub. Ви можете скопіювати помилку відстеження помилки вище та вставити її в нове видання.\n"
|
"Звіти про помилки слід повідомляти як проблеми Github. Ви можете скопіювати помилку відстеження помилки вище та вставити її в нове видання.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Будь ласка, не забудьте заздалегідь здійснити пошук уже існуючих проблем. Також не забудьте протестувати найновішу версію, доступну зі сховища, оскільки виправлена помилка, можливо, вже виправлена.\n"
|
"Будь ласка, не забудьте заздалегідь здійснити пошук уже існуючих проблем. Також не забудьте протестувати найновішу версію, доступну зі сховища, оскільки виправлена помилка, можливо, вже виправлена.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1051,8 +1051,8 @@ msgstr ""
|
|||||||
"Незважаючи на те, що програма повинна продовжувати працювати після цієї помилки, вона може бути в нестабільному стані, тому рекомендується перезапустити програму."
|
"Незважаючи на те, що програма повинна продовжувати працювати після цієї помилки, вона може бути в нестабільному стані, тому рекомендується перезапустити програму."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Перейдіть до GitHub"
|
msgstr "Перейдіть до Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1137,36 +1137,3 @@ msgstr "Очистити список"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Шукати..."
|
msgstr "Шукати..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -5,23 +5,23 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n"
|
||||||
"Language-Team: Vietnamese (https://app.transifex.com/voltaicideas/teams/116153/vi/)\n"
|
"Language-Team: Vietnamese (https://www.transifex.com/voltaicideas/teams/116153/vi/)\n"
|
||||||
"Language: vi\n"
|
"Language: vi\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr ""
|
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."
|
"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:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr ""
|
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."
|
"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:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
@ -29,23 +29,23 @@ 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 "
|
"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?"
|
"đượ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:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "Quét các phần trùng nhau"
|
msgstr "Quét các phần trùng nhau"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Đang tải"
|
msgstr "Đang tải"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "Đang di chuyển"
|
msgstr "Đang di chuyển"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "Đang sao chép"
|
msgstr "Đang sao chép"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "Đang gửi vào thùng rác"
|
msgstr "Đang gửi vào thùng rác"
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ msgstr ""
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "Chọn một điểm xuất dữ liệu dạng CSV"
|
msgstr "Chọn một điểm xuất dữ liệu dạng CSV"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "Không thể ghi vào tệp: {}"
|
msgstr "Không thể ghi vào tệp: {}"
|
||||||
|
|
||||||
@ -122,23 +122,23 @@ 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 "
|
"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."
|
"trong phần tùy biến của bạn."
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
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?"
|
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:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
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."
|
msgstr "{} các nhóm trùng nhau đã được thay đổi bởi thứ tự-tái ưu tiên."
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
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."
|
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:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "Đang thu thập các tập tin để quét"
|
msgstr "Đang thu thập các tập tin để quét"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d bị bỏ qua)"
|
msgstr "%s (%d bị bỏ qua)"
|
||||||
|
|
||||||
@ -182,23 +182,23 @@ msgstr "Tên tệp - Trường (Không có thứ tự)"
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "Nội dung"
|
msgstr "Nội dung"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "Đã phân tích %d/%d hình ảnh"
|
msgstr "Đã phân tích %d/%d hình ảnh"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "Đã thể thiện %d/%d các phần khớp nhau"
|
msgstr "Đã thể thiện %d/%d các phần khớp nhau"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "Đang chuẩn bị phần khớp nhau"
|
msgstr "Đang chuẩn bị phần khớp nhau"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "Đã xác nhận %d/%d phần khớp nhau"
|
msgstr "Đã xác nhận %d/%d phần khớp nhau"
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ msgstr "Đã xác nhận %d/%d phần khớp nhau"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "Đọc thông tin EXIF của %d/%d hình ảnh"
|
msgstr "Đọc thông tin EXIF của %d/%d hình ảnh"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "Dấu thời gian EXIF"
|
msgstr "Dấu thời gian EXIF"
|
||||||
|
|
||||||
@ -214,51 +214,55 @@ msgstr "Dấu thời gian EXIF"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Không "
|
msgstr "Không "
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "Tận cùng là số"
|
msgstr "Tận cùng là số"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "Tận cùng không chứa số"
|
msgstr "Tận cùng không chứa số"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "Dài nhất"
|
msgstr "Dài nhất"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "Ngắn nhất"
|
msgstr "Ngắn nhất"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "Cao nhất"
|
msgstr "Cao nhất"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "Thấp nhất"
|
msgstr "Thấp nhất"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "Mới nhất"
|
msgstr "Mới nhất"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "Cũ nhất"
|
msgstr "Cũ nhất"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "%d / %d (%s / %s) phần trùng nhau đã được đánh dấu."
|
msgstr "%d / %d (%s / %s) phần trùng nhau đã được đánh dấu."
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " bộ lọc: %s"
|
msgstr " bộ lọc: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "Đọc kích thước của các tập tin %d/%d"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "Đọc thông tin chi tiết của %d/%d tập tin"
|
msgstr "Đọc thông tin chi tiết của %d/%d tập tin"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "Sắp xong! Loay hoay với kết quả..."
|
msgstr "Sắp xong! Loay hoay với kết quả..."
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Fuan <jcfrt@posteo.net>, 2022\n"
|
||||||
"Language-Team: Vietnamese (https://app.transifex.com/voltaicideas/teams/116153/vi/)\n"
|
"Language-Team: Vietnamese (https://www.transifex.com/voltaicideas/teams/116153/vi/)\n"
|
||||||
"Language: vi\n"
|
"Language: vi\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -1035,7 +1035,7 @@ msgstr "Đã xảy ra lỗi. Làm thế nào về việc báo cáo lỗi?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1043,7 +1043,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Các báo cáo lỗi phải được báo cáo dưới dạng sự cố GitHub. Bạn có thể sao chép các traceback lỗi trên và dán nó vào một vấn đề mới.\n"
|
"Các báo cáo lỗi phải được báo cáo dưới dạng sự cố Github. Bạn có thể sao chép các traceback lỗi trên và dán nó vào một vấn đề mới.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Vui lòng đảm bảo chạy tìm kiếm bất kỳ vấn đề nào đã tồn tại trước đó. Ngoài ra, hãy đảm bảo kiểm tra phiên bản mới nhất có sẵn từ kho lưu trữ, vì lỗi bạn đang gặp phải có thể đã được vá.\n"
|
"Vui lòng đảm bảo chạy tìm kiếm bất kỳ vấn đề nào đã tồn tại trước đó. Ngoài ra, hãy đảm bảo kiểm tra phiên bản mới nhất có sẵn từ kho lưu trữ, vì lỗi bạn đang gặp phải có thể đã được vá.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1052,8 +1052,8 @@ msgstr ""
|
|||||||
"Mặc dù ứng dụng sẽ tiếp tục chạy sau lỗi này, nhưng nó có thể ở trạng thái không ổn định, vì vậy bạn nên khởi động lại ứng dụng."
|
"Mặc dù ứng dụng sẽ tiếp tục chạy sau lỗi này, nhưng nó có thể ở trạng thái không ổn định, vì vậy bạn nên khởi động lại ứng dụng."
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "Truy cập GitHub"
|
msgstr "Truy cập Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1138,36 +1138,3 @@ msgstr "Xóa danh sách"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "Tìm kiếm..."
|
msgstr "Tìm kiếm..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -3,48 +3,47 @@
|
|||||||
# Chris Ocelot, 2021
|
# Chris Ocelot, 2021
|
||||||
# Fuan <jcfrt@posteo.net>, 2021
|
# Fuan <jcfrt@posteo.net>, 2021
|
||||||
# YaNing Lu, 2021
|
# YaNing Lu, 2021
|
||||||
# Mèng yáo, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Mèng yáo, 2023\n"
|
"Last-Translator: YaNing Lu, 2021\n"
|
||||||
"Language-Team: Chinese (China) (https://app.transifex.com/voltaicideas/teams/116153/zh_CN/)\n"
|
"Language-Team: Chinese (China) (https://www.transifex.com/voltaicideas/teams/116153/zh_CN/)\n"
|
||||||
"Language: zh_CN\n"
|
"Language: zh_CN\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: core\app.py:44
|
#: core\app.py:42
|
||||||
msgid "There are no marked duplicates. Nothing has been done."
|
msgid "There are no marked duplicates. Nothing has been done."
|
||||||
msgstr "没有已标记的重复项。无需任何操作。"
|
msgstr "没有已标记的重复项。无需任何操作。"
|
||||||
|
|
||||||
#: core\app.py:45
|
#: core\app.py:43
|
||||||
msgid "There are no selected duplicates. Nothing has been done."
|
msgid "There are no selected duplicates. Nothing has been done."
|
||||||
msgstr "没有已选定的重复项。无需任何操作。"
|
msgstr "没有已选定的重复项。无需任何操作。"
|
||||||
|
|
||||||
#: core\app.py:46
|
#: core\app.py:44
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're about to open many files at once. Depending on what those files are "
|
"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?"
|
"opened with, doing so can create quite a mess. Continue?"
|
||||||
msgstr "您即将一次性打开多个文件。取决于这些文件的默认打开方式,此项操作可能导致非常混乱的状况。是否继续?"
|
msgstr "您即将一次性打开多个文件。取决于这些文件的默认打开方式,此项操作可能导致非常混乱的状况。是否继续?"
|
||||||
|
|
||||||
#: core\app.py:73
|
#: core\app.py:71
|
||||||
msgid "Scanning for duplicates"
|
msgid "Scanning for duplicates"
|
||||||
msgstr "正在扫描重复内容"
|
msgstr "正在扫描重复内容"
|
||||||
|
|
||||||
#: core\app.py:74
|
#: core\app.py:72
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "载入中"
|
msgstr "载入中"
|
||||||
|
|
||||||
#: core\app.py:75
|
#: core\app.py:73
|
||||||
msgid "Moving"
|
msgid "Moving"
|
||||||
msgstr "移动中"
|
msgstr "移动中"
|
||||||
|
|
||||||
#: core\app.py:76
|
#: core\app.py:74
|
||||||
msgid "Copying"
|
msgid "Copying"
|
||||||
msgstr "复制中"
|
msgstr "复制中"
|
||||||
|
|
||||||
#: core\app.py:77
|
#: core\app.py:75
|
||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "正在移至回收站"
|
msgstr "正在移至回收站"
|
||||||
|
|
||||||
@ -76,15 +75,15 @@ msgstr "所有已标记的文件已成功移至回收站。"
|
|||||||
|
|
||||||
#: core\app.py:326
|
#: core\app.py:326
|
||||||
msgid "Could not load file: {}"
|
msgid "Could not load file: {}"
|
||||||
msgstr "无法加载文件:{}"
|
msgstr "无法加载文件: {}"
|
||||||
|
|
||||||
#: core\app.py:382
|
#: core\app.py:382
|
||||||
msgid "'{}' already is in the list."
|
msgid "'{}' already is in the list."
|
||||||
msgstr "“{}”已在列表中。"
|
msgstr "'{}' 已在列表中。"
|
||||||
|
|
||||||
#: core\app.py:384
|
#: core\app.py:384
|
||||||
msgid "'{}' does not exist."
|
msgid "'{}' does not exist."
|
||||||
msgstr "“{}”不存在。"
|
msgstr "'{}' 不存在。"
|
||||||
|
|
||||||
#: core\app.py:392
|
#: core\app.py:392
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -104,45 +103,45 @@ msgstr "请选择要将标记文件移动到的目录"
|
|||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "选择您导出 CSV 的目标文件夹"
|
msgstr "选择您导出 CSV 的目标文件夹"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:516 core\app.py:771 core\app.py:781
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "不能写入文件:{}"
|
msgstr "不能写入文件: {}"
|
||||||
|
|
||||||
#: core\app.py:539
|
#: core\app.py:539
|
||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "您没有设定自定义命令。请在设置中进行设定。"
|
msgstr "您没有设定自定义命令。请在设置中进行设定。"
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:695 core\app.py:707
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "您将从结果中移除 %d 个文件。是否继续?"
|
msgstr "您将从结果中移除 %d 个文件。是否继续?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:743
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{}个重复的组已被重新排列。"
|
msgstr "{}个重复的组已被重新排列。"
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:790
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "所选目录中不包含可供扫描的文件。"
|
msgstr "所选目录中不包含可供扫描的文件。"
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:803
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "收集文件以供扫描"
|
msgstr "收集文件以供扫描"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:850
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d 项已丢弃)"
|
msgstr "%s (%d 项已丢弃)"
|
||||||
|
|
||||||
#: core\directories.py:191
|
#: core\directories.py:191
|
||||||
msgid "Collected {} files to scan"
|
msgid "Collected {} files to scan"
|
||||||
msgstr "收集要扫描的 {} 个文件"
|
msgstr "收集要扫描的{}文件"
|
||||||
|
|
||||||
#: core\directories.py:207
|
#: core\directories.py:207
|
||||||
msgid "Collected {} folders to scan"
|
msgid "Collected {} folders to scan"
|
||||||
msgstr "收集要扫描的 {} 个文件夹"
|
msgstr "收集要扫描的{}文件夹"
|
||||||
|
|
||||||
#: core\engine.py:27
|
#: core\engine.py:27
|
||||||
msgid "%d matches found from %d groups"
|
msgid "%d matches found from %d groups"
|
||||||
msgstr "找到 %d 个匹配,来自于 %d 个组中"
|
msgstr "从1%d组中找到1%d个匹配"
|
||||||
|
|
||||||
#: core\gui\deletion_options.py:71
|
#: core\gui\deletion_options.py:71
|
||||||
msgid "You are sending {} file(s) to the Trash."
|
msgid "You are sending {} file(s) to the Trash."
|
||||||
@ -154,7 +153,7 @@ msgstr "正则表达式"
|
|||||||
|
|
||||||
#: core\gui\ignore_list_dialog.py:25
|
#: core\gui\ignore_list_dialog.py:25
|
||||||
msgid "Do you really want to remove all %d items from the ignore list?"
|
msgid "Do you really want to remove all %d items from the ignore list?"
|
||||||
msgstr "确定要从忽略列表中移除所有 %d 项吗?"
|
msgstr "确定要从忽略列表中移除所有 %d 项吗?"
|
||||||
|
|
||||||
#: core\me\scanner.py:20 core\se\scanner.py:16
|
#: core\me\scanner.py:20 core\se\scanner.py:16
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
@ -162,41 +161,41 @@ msgstr "文件名"
|
|||||||
|
|
||||||
#: core\me\scanner.py:21
|
#: core\me\scanner.py:21
|
||||||
msgid "Filename - Fields"
|
msgid "Filename - Fields"
|
||||||
msgstr "分组比较文件名(如:作者-歌曲名)"
|
msgstr "分组比较文件名(如作者-歌曲名)"
|
||||||
|
|
||||||
#: core\me\scanner.py:22
|
#: core\me\scanner.py:22
|
||||||
msgid "Filename - Fields (No Order)"
|
msgid "Filename - Fields (No Order)"
|
||||||
msgstr "分组比较文件名(不固定顺序,如:作者-歌曲名 或者 歌曲名-作者)"
|
msgstr "分组比较文件名(不固定顺序(如作者-歌曲名或者歌曲名-作者))"
|
||||||
|
|
||||||
#: core\me\scanner.py:23
|
#: core\me\scanner.py:23
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "标签"
|
msgstr "标签"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "内容"
|
msgstr "内容"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "已分析 %d 张图像(共 %d 张)"
|
msgstr "已分析 %d/%d 图像"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "已执行 %d 个区块匹配(共 %d 个)"
|
msgstr "已执行 %d/%d 个区块匹配"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "准备进行匹配"
|
msgstr "准备进行匹配"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "已验证 %d 个匹配项(共 %d 个)"
|
msgstr "已验证 %d/%d 匹配项"
|
||||||
|
|
||||||
#: core\pe\matchexif.py:19
|
#: core\pe\matchexif.py:19
|
||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "已读取 %d 张图片的 EXIF(共 %d 张)"
|
msgstr "已读取 %d/%d 张图片的 EXIF"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIF 时间戳"
|
msgstr "EXIF 时间戳"
|
||||||
|
|
||||||
@ -204,51 +203,55 @@ msgstr "EXIF 时间戳"
|
|||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "无"
|
msgstr "无"
|
||||||
|
|
||||||
#: core\prioritize.py:102
|
#: core\prioritize.py:100
|
||||||
msgid "Ends with number"
|
msgid "Ends with number"
|
||||||
msgstr "以数字结尾"
|
msgstr "以数字结尾"
|
||||||
|
|
||||||
#: core\prioritize.py:103
|
#: core\prioritize.py:101
|
||||||
msgid "Doesn't end with number"
|
msgid "Doesn't end with number"
|
||||||
msgstr "不以数字结尾"
|
msgstr "不以数字结尾"
|
||||||
|
|
||||||
#: core\prioritize.py:104
|
#: core\prioritize.py:102
|
||||||
msgid "Longest"
|
msgid "Longest"
|
||||||
msgstr "最长"
|
msgstr "最长"
|
||||||
|
|
||||||
#: core\prioritize.py:105
|
#: core\prioritize.py:103
|
||||||
msgid "Shortest"
|
msgid "Shortest"
|
||||||
msgstr "最短"
|
msgstr "最短"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr "最高"
|
msgstr "最高"
|
||||||
|
|
||||||
#: core\prioritize.py:142
|
#: core\prioritize.py:140
|
||||||
msgid "Lowest"
|
msgid "Lowest"
|
||||||
msgstr "最低"
|
msgstr "最低"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Newest"
|
msgid "Newest"
|
||||||
msgstr "最新"
|
msgstr "最新"
|
||||||
|
|
||||||
#: core\prioritize.py:171
|
#: core\prioritize.py:169
|
||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "最旧"
|
msgstr "最旧"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "已标记 %d / %d (%s / %s) 个重复项。"
|
msgstr "已标记 %d / %d (%s / %s) 个重复项。"
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " 过滤:%s"
|
msgstr " 过滤: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "已读取 %d/%d 文件大小"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "已读取 %d 个文件元数据(共 %d 个)"
|
msgstr "已读取 %d/%d 文件元数据"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "即将完成!整理结果中..."
|
msgstr "即将完成!整理结果中..."
|
||||||
|
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# 太子 VC <taiziccf@gmail.com>, 2022
|
# 太子 VC <taiziccf@gmail.com>, 2022
|
||||||
# Chris Ocelot, 2023
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
# Chris Ocelot, 2022
|
||||||
# Mèng yáo, 2023
|
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Mèng yáo, 2023\n"
|
"Last-Translator: Chris Ocelot, 2022\n"
|
||||||
"Language-Team: Chinese (China) (https://app.transifex.com/voltaicideas/teams/116153/zh_CN/)\n"
|
"Language-Team: Chinese (China) (https://www.transifex.com/voltaicideas/teams/116153/zh_CN/)\n"
|
||||||
"Language: zh_CN\n"
|
"Language: zh_CN\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -46,7 +45,7 @@ msgstr "打开调试记录"
|
|||||||
|
|
||||||
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
|
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Do you really want to remove all your cached picture analysis?"
|
msgid "Do you really want to remove all your cached picture analysis?"
|
||||||
msgstr "确定要移除所有缓存的图片分析吗?"
|
msgstr "确定要移除所有缓存图片?"
|
||||||
|
|
||||||
#: qt/app.py:184
|
#: qt/app.py:184
|
||||||
msgid "Picture cache cleared."
|
msgid "Picture cache cleared."
|
||||||
@ -90,7 +89,7 @@ msgstr "直接删除文件"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Instead of sending files to trash, delete them directly. This option is "
|
"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."
|
"usually used as a workaround when the normal deletion method doesn't work."
|
||||||
msgstr "直接将文件删除,而不是将其移至回收站。此选项通常作为常规删除方法不起作用时的替代方案。"
|
msgstr "直接将文件删除,而不是将其移至回收站。此选项通常作为普通删除方法不能正常使用时替代方案。"
|
||||||
|
|
||||||
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
|
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Proceed"
|
msgid "Proceed"
|
||||||
@ -161,7 +160,7 @@ msgstr "标准"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Scan Type:"
|
msgid "Scan Type:"
|
||||||
msgstr "扫描类型:"
|
msgstr "扫描类型:"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:135
|
#: qt/directories_dialog.py:135
|
||||||
msgid "More Options"
|
msgid "More Options"
|
||||||
@ -169,7 +168,7 @@ msgstr "更多选项"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Select folders to scan and press \"Scan\"."
|
msgid "Select folders to scan and press \"Scan\"."
|
||||||
msgstr "请选择要扫描的文件夹,然后点击“扫描”。"
|
msgstr "请选择要扫描的文件夹,然后点击 \"扫描\"。"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Load Results"
|
msgid "Load Results"
|
||||||
@ -185,7 +184,7 @@ msgstr "未保存的结果"
|
|||||||
|
|
||||||
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "You have unsaved results, do you really want to quit?"
|
msgid "You have unsaved results, do you really want to quit?"
|
||||||
msgstr "您还没有保存扫描结果,确定要退出吗?"
|
msgstr "您还没有保存扫描结果,确定要退出吗?"
|
||||||
|
|
||||||
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
|
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Select a folder to add to the scanning list"
|
msgid "Select a folder to add to the scanning list"
|
||||||
@ -248,7 +247,7 @@ msgstr "详细信息"
|
|||||||
|
|
||||||
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Tags to scan:"
|
msgid "Tags to scan:"
|
||||||
msgstr "扫描标签:"
|
msgstr "扫描标签:"
|
||||||
|
|
||||||
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Track"
|
msgid "Track"
|
||||||
@ -307,7 +306,7 @@ msgstr "忽略硬链接到相同文件的重复文件"
|
|||||||
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
|
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
|
||||||
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Debug mode (restart required)"
|
msgid "Debug mode (restart required)"
|
||||||
msgstr "调试模式(需要重新启动)"
|
msgstr "调试模式 (需要重新启动)"
|
||||||
|
|
||||||
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Match pictures of different dimensions"
|
msgid "Match pictures of different dimensions"
|
||||||
@ -315,7 +314,7 @@ msgstr "匹配不同尺寸的图像"
|
|||||||
|
|
||||||
#: qt/preferences_dialog.py:43
|
#: qt/preferences_dialog.py:43
|
||||||
msgid "Filter Hardness:"
|
msgid "Filter Hardness:"
|
||||||
msgstr "过滤强度:"
|
msgstr "过滤强度:"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:69
|
#: qt/preferences_dialog.py:69
|
||||||
msgid "More Results"
|
msgid "More Results"
|
||||||
@ -327,15 +326,15 @@ msgstr "较少结果"
|
|||||||
|
|
||||||
#: qt/preferences_dialog.py:81
|
#: qt/preferences_dialog.py:81
|
||||||
msgid "Font size:"
|
msgid "Font size:"
|
||||||
msgstr "字体大小:"
|
msgstr "字体大小:"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:85
|
#: qt/preferences_dialog.py:85
|
||||||
msgid "Language:"
|
msgid "Language:"
|
||||||
msgstr "语言:"
|
msgstr "语言:"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:91 cocoa/en.lproj/Localizable.strings:0
|
#: qt/preferences_dialog.py:91 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Copy and Move:"
|
msgid "Copy and Move:"
|
||||||
msgstr "复制并移动:"
|
msgstr "复制并移动:"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
|
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Right in destination"
|
msgid "Right in destination"
|
||||||
@ -351,7 +350,7 @@ msgstr "重建绝对路径"
|
|||||||
|
|
||||||
#: qt/preferences_dialog.py:99
|
#: qt/preferences_dialog.py:99
|
||||||
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
|
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
|
||||||
msgstr "自定义命令(参数:%d 指重复文件,%r 指源文件):"
|
msgstr "自定义命令 (参数: %d 指重复文件, %r 指源文件):"
|
||||||
|
|
||||||
#: qt/preferences_dialog.py:174
|
#: qt/preferences_dialog.py:174
|
||||||
msgid "dupeGuru has to restart for language changes to take effect."
|
msgid "dupeGuru has to restart for language changes to take effect."
|
||||||
@ -370,7 +369,7 @@ msgstr "在右侧的框内添加规则然后点击确定,以将最符合规则
|
|||||||
|
|
||||||
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
|
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Problems!"
|
msgid "Problems!"
|
||||||
msgstr "有问题!"
|
msgstr "有问题!"
|
||||||
|
|
||||||
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
|
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -502,7 +501,7 @@ msgstr "选择一个文件来保存您的结果"
|
|||||||
|
|
||||||
#: qt/se/preferences_dialog.py:41
|
#: qt/se/preferences_dialog.py:41
|
||||||
msgid "Ignore files smaller than"
|
msgid "Ignore files smaller than"
|
||||||
msgstr "忽略文件,当其小于"
|
msgstr "忽略文件当其小于"
|
||||||
|
|
||||||
#: qt/se/preferences_dialog.py:52 cocoa/en.lproj/Localizable.strings:0
|
#: qt/se/preferences_dialog.py:52 cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "KB"
|
msgid "KB"
|
||||||
@ -550,7 +549,7 @@ msgstr "复制"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Custom command (arguments: %d for dupe, %r for ref):"
|
msgid "Custom command (arguments: %d for dupe, %r for ref):"
|
||||||
msgstr "自定义命令(参数:%d 指重复文件,%r 指源文件):"
|
msgstr "自定义命令 (参数: %d 指重复文件, %r 指源文件):"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Cut"
|
msgid "Cut"
|
||||||
@ -610,7 +609,7 @@ msgstr "过滤器"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Filter hardness:"
|
msgid "Filter hardness:"
|
||||||
msgstr "过滤强度:"
|
msgstr "过滤强度:"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Filter Results..."
|
msgid "Filter Results..."
|
||||||
@ -622,7 +621,7 @@ msgstr "文件夹选择窗口"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Font Size:"
|
msgid "Font Size:"
|
||||||
msgstr "字体大小:"
|
msgstr "字体大小:"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Hide dupeGuru"
|
msgid "Hide dupeGuru"
|
||||||
@ -634,7 +633,7 @@ msgstr "隐藏其他"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Ignore files smaller than:"
|
msgid "Ignore files smaller than:"
|
||||||
msgstr "忽略文件,当其小于:"
|
msgstr "忽略文件当其小于:"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Load from file..."
|
msgid "Load from file..."
|
||||||
@ -710,7 +709,7 @@ msgstr "开始重复内容扫描"
|
|||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "The name '%@' already exists."
|
msgid "The name '%@' already exists."
|
||||||
msgstr "名称“%@”已存在。"
|
msgstr "名称 '%@' 已存在。"
|
||||||
|
|
||||||
#: cocoa/en.lproj/Localizable.strings:0
|
#: cocoa/en.lproj/Localizable.strings:0
|
||||||
msgid "Window"
|
msgid "Window"
|
||||||
@ -742,7 +741,7 @@ msgstr "选择一个目录文件以载入"
|
|||||||
|
|
||||||
#: qt\directories_dialog.py:338
|
#: qt\directories_dialog.py:338
|
||||||
msgid "dupeGuru Results (*.dupegurudirs)"
|
msgid "dupeGuru Results (*.dupegurudirs)"
|
||||||
msgstr "dupeGuru 结果 (*.dupegurudirs)"
|
msgstr "dupeGuru 结果 (*.dupegurudirs)"
|
||||||
|
|
||||||
#: qt\directories_dialog.py:347
|
#: qt\directories_dialog.py:347
|
||||||
msgid "Select a file to save your directories to"
|
msgid "Select a file to save your directories to"
|
||||||
@ -750,7 +749,7 @@ msgstr "选择一个文件来保存您的目录"
|
|||||||
|
|
||||||
#: qt\directories_dialog.py:348
|
#: qt\directories_dialog.py:348
|
||||||
msgid "dupeGuru Directories (*.dupegurudirs)"
|
msgid "dupeGuru Directories (*.dupegurudirs)"
|
||||||
msgstr "dupeGuru 目录 (*.dupegurudirs)"
|
msgstr "dupeGuru 目录 (*.dupegurudirs)"
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:44
|
#: qt\exclude_list_dialog.py:44
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
@ -837,15 +836,15 @@ msgstr "当图片尺寸大于显示窗口时,显示滚动条来移动图片。
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:156
|
#: qt\preferences_dialog.py:156
|
||||||
msgid "Use default position for tab bar (requires restart)"
|
msgid "Use default position for tab bar (requires restart)"
|
||||||
msgstr "在默认位置显示标签栏(需要重启)"
|
msgstr "在默认位置显示Tab Bar(需要重启)"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:158
|
#: qt\preferences_dialog.py:158
|
||||||
msgid ""
|
msgid ""
|
||||||
"Place the tab bar below the main menu instead of next to it\n"
|
"Place the tab bar below the main menu instead of next to it\n"
|
||||||
"On MacOS, the tab bar will fill up the window's width instead."
|
"On MacOS, the tab bar will fill up the window's width instead."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"把标签栏放在主菜单下面而不是旁边\n"
|
"把Tab Bar放在主菜单下面而不是旁边\n"
|
||||||
"在 MacOS 上,标签栏会填充满整个窗口的宽度。"
|
"在MacOS上,Tab Bar会填充满整个窗口的宽度。"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:172
|
#: qt\preferences_dialog.py:172
|
||||||
msgid "Use bold font for references"
|
msgid "Use bold font for references"
|
||||||
@ -888,7 +887,7 @@ msgstr "把标题栏从顶部横向改为左侧竖直"
|
|||||||
|
|
||||||
#: qt\tabbed_window.py:44
|
#: qt\tabbed_window.py:44
|
||||||
msgid "Show tab bar"
|
msgid "Show tab bar"
|
||||||
msgstr "显示标签栏"
|
msgstr "显示 Tab Bar"
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:152
|
#: qt\exclude_list_dialog.py:152
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -897,10 +896,10 @@ msgid ""
|
|||||||
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
"Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"这些 python 正则表达式(区分大小写)将在扫描期间过滤掉文件。<br>如果目录的名称恰好与某个选定的正则表达式匹配,则目录的<strong>默认状态</strong>也将在“目录”选项卡中设置为“已排除”。<br>对于收集的每个文件,将执行以下两个测试以确定是否完全忽略它:<br><li>1、没有路径分隔符的正则表达式将仅与文件名进行比较。</li>\n"
|
"这些(大小写敏感)的python正则表达式会在扫描过程中对结果进行过滤。<br>除非目录名称和正则表达式匹配,它们的<strong>默认状态</strong>会被设成从目录标签排除。<br>每一个文件都会经过两种测试,以确定它是否会被完全忽略:<br><li>1. 没有路径分隔符的正则表达式,仅用于和文件名进行比较。</li>\n"
|
||||||
"<li>2、包含至少一个路径分隔符的正则表达式将与文件的完整路径进行比较。</li><br>\n"
|
"<li>2. 至少有一个路径分隔符的正则表达式,会被用于和文件的完整路径进行比较。</li><br>\n"
|
||||||
"示例:如果只想从“我的图片”目录中过滤掉 .PNG 文件:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>那么在测试框中粘贴如下虚拟路径后,可以使用“测试字符串”按钮测试正则表达式:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
"例如:如果你想要仅在“图片”目录中排除所有.PNG文件:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>你可以使用“测试字符串”按钮来测试你的正则表达式,只需要将虚拟的路径输入测试框即可:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
||||||
"匹配的正则表达式将突出显示。<br>如果至少有一个突出显示,则在扫描过程中将忽略测试的路径或文件名。<br><br>默认情况下,以英文句点“.”开头的目录和文件将被过滤掉。<br><br>"
|
"匹配的正则表达式会被高亮。<br>假如有至少一个高亮,测试文件的文件名或者路径就会在扫描中被忽略。<br><br>以“.”开头的目录或文件默认会被忽略。<br><br>"
|
||||||
|
|
||||||
#: qt\app.py:256
|
#: qt\app.py:256
|
||||||
msgid "Results"
|
msgid "Results"
|
||||||
@ -908,7 +907,7 @@ msgstr "结果"
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:150
|
#: qt\preferences_dialog.py:150
|
||||||
msgid "General Interface"
|
msgid "General Interface"
|
||||||
msgstr "通用界面"
|
msgstr "通用介面"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:176
|
#: qt\preferences_dialog.py:176
|
||||||
msgid "Result Table"
|
msgid "Result Table"
|
||||||
@ -920,19 +919,19 @@ msgstr "详细信息窗口"
|
|||||||
|
|
||||||
#: qt\preferences_dialog.py:285
|
#: qt\preferences_dialog.py:285
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "常规"
|
msgstr "一般"
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:286
|
#: qt\preferences_dialog.py:286
|
||||||
msgid "Display"
|
msgid "Display"
|
||||||
msgstr "显示"
|
msgstr "展示"
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:70
|
#: qt\se\preferences_dialog.py:70
|
||||||
msgid "Partially hash files bigger than"
|
msgid "Partially hash files bigger than"
|
||||||
msgstr "只计算部分哈希值,如果文件大于"
|
msgstr "只哈希部分如果文件大于"
|
||||||
|
|
||||||
#: qt\se\preferences_dialog.py:80
|
#: qt\se\preferences_dialog.py:80
|
||||||
msgid "MB"
|
msgid "MB"
|
||||||
msgstr "MB"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:163
|
#: qt\preferences_dialog.py:163
|
||||||
msgid "Use native OS dialogs"
|
msgid "Use native OS dialogs"
|
||||||
@ -946,44 +945,41 @@ msgstr "使用操作系统原生对话窗口选择文件、文件夹。部分系
|
|||||||
|
|
||||||
#: qt\se\preferences_dialog.py:68
|
#: qt\se\preferences_dialog.py:68
|
||||||
msgid "Ignore files larger than"
|
msgid "Ignore files larger than"
|
||||||
msgstr "忽略文件,如果大于"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:135 qt\app.py:293
|
#: qt\app.py:135 qt\app.py:293
|
||||||
msgid "Clear Cache"
|
msgid "Clear Cache"
|
||||||
msgstr "清除缓存"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:294
|
#: qt\app.py:294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Do you really want to clear the cache? This will remove all cached file "
|
"Do you really want to clear the cache? This will remove all cached file "
|
||||||
"hashes and picture analysis."
|
"hashes and picture analysis."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"确定要清除缓存吗?\n"
|
|
||||||
"\n"
|
|
||||||
"这将删除所有缓存的文件哈希和图片分析。"
|
|
||||||
|
|
||||||
#: qt\app.py:299
|
#: qt\app.py:299
|
||||||
msgid "Cache cleared."
|
msgid "Cache cleared."
|
||||||
msgstr "缓存已清除。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:173
|
#: qt\preferences_dialog.py:173
|
||||||
msgid "Use dark style"
|
msgid "Use dark style"
|
||||||
msgstr "使用暗色主题"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:241
|
#: qt\preferences_dialog.py:241
|
||||||
msgid "Profile scan operation"
|
msgid "Profile scan operation"
|
||||||
msgstr "将扫描操作保存为配置"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:242
|
#: qt\preferences_dialog.py:242
|
||||||
msgid "Profile the scan operation and save logs for optimization."
|
msgid "Profile the scan operation and save logs for optimization."
|
||||||
msgstr "将扫描操作保存为配置,并保存日志用于优化。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:246
|
#: qt\preferences_dialog.py:246
|
||||||
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
||||||
msgstr "日志位于:<a href=\"{}\">{}</a>"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:291
|
#: qt\preferences_dialog.py:291
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
msgstr "调试"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:31
|
#: qt\about_box.py:31
|
||||||
msgid "About {}"
|
msgid "About {}"
|
||||||
@ -995,7 +991,7 @@ msgstr "版本 {}"
|
|||||||
|
|
||||||
#: qt\about_box.py:49 qt\about_box.py:75
|
#: qt\about_box.py:49 qt\about_box.py:75
|
||||||
msgid "Checking for updates..."
|
msgid "Checking for updates..."
|
||||||
msgstr "正在检查更新..."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:54
|
#: qt\about_box.py:54
|
||||||
msgid "Licensed under GPLv3"
|
msgid "Licensed under GPLv3"
|
||||||
@ -1003,11 +999,11 @@ msgstr "本项目基于 GPLv3 开源协议发布"
|
|||||||
|
|
||||||
#: qt\about_box.py:68
|
#: qt\about_box.py:68
|
||||||
msgid "No update available."
|
msgid "No update available."
|
||||||
msgstr "没有新版本。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:71
|
#: qt\about_box.py:71
|
||||||
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
||||||
msgstr "新版本 {} 可用,<a href=\"{}\">点这里</a>下载。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:50
|
#: qt\error_report_dialog.py:50
|
||||||
msgid "Error Report"
|
msgid "Error Report"
|
||||||
@ -1019,7 +1015,7 @@ msgstr "发生错误,是否要报告错误?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1027,7 +1023,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"错误报告应该以GitHub issue的形式进行提交。您可以把错误信息复制粘贴到新的issue中\n"
|
"错误报告应该以Github issue的形式进行提交。您可以把错误信息复制粘贴到新的issue中\n"
|
||||||
"\n"
|
"\n"
|
||||||
"在提交新issue前,请搜索已经存在的issue,以确保没有其他人已经报告了相同的错误。同时请确保使用仓库中的最新版进行测试,因为您所遇到的bug可能已经被最新版修复。\n"
|
"在提交新issue前,请搜索已经存在的issue,以确保没有其他人已经报告了相同的错误。同时请确保使用仓库中的最新版进行测试,因为您所遇到的bug可能已经被最新版修复。\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1036,8 +1032,8 @@ msgstr ""
|
|||||||
"虽然本程序在此错误后依然会继续运行,但是可能处于不稳定的状态,因此推荐重启本程序。"
|
"虽然本程序在此错误后依然会继续运行,但是可能处于不稳定的状态,因此推荐重启本程序。"
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "前往GitHub"
|
msgstr "前往Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1122,39 +1118,3 @@ msgstr "清空列表"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "搜索..."
|
msgstr "搜索..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr "这些选项是供高级用户或者特定情况下使用,大多数用户不该修改它们。"
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr "在扫描结束后检查文件是否存在"
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr "载入缓存摘要时忽略mtime的不同"
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr "取消?"
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr "确定要取消吗?这将会导致所有进展都付诸东流。"
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
"这些 python 正则表达式(区分大小写)将在扫描期间过滤掉文件。<br>如果目录的名称恰好与某个选定的正则表达式匹配,则目录的<strong>默认状态</strong>也将在“目录”选项卡中设置为“已排除”。<br>对于收集的每个文件,将执行以下两个测试以确定是否完全忽略它:<br><li>1、没有路径分隔符的正则表达式将仅与文件名进行比较。</li>\n"
|
|
||||||
"<li>2、包含至少一个路径分隔符的正则表达式将与文件的完整路径进行比较。</li><br>示例:如果只想从“我的图片”目录中过滤掉 .PNG 文件:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>那么在测试框中粘贴如下虚拟路径后,可以使用“测试字符串”按钮测试正则表达式:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"匹配的正则表达式将突出显示。<br>如果至少有一个突出显示,则在扫描过程中将忽略测试的路径或文件名。<br><br>默认情况下,以英文句点“.”开头的目录和文件将被过滤掉。<br><br>"
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Chris Ocelot, 2022\n"
|
"Last-Translator: Chris Ocelot, 2022\n"
|
||||||
"Language-Team: Chinese (Taiwan) (https://app.transifex.com/voltaicideas/teams/116153/zh_TW/)\n"
|
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/voltaicideas/teams/116153/zh_TW/)\n"
|
||||||
"Language: zh_TW\n"
|
"Language: zh_TW\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -47,95 +47,95 @@ msgstr "复制中"
|
|||||||
msgid "Sending to Trash"
|
msgid "Sending to Trash"
|
||||||
msgstr "正在移至回收站"
|
msgstr "正在移至回收站"
|
||||||
|
|
||||||
#: core\app.py:289
|
#: core\app.py:291
|
||||||
msgid ""
|
msgid ""
|
||||||
"A previous action is still hanging in there. You can't start a new one yet. "
|
"A previous action is still hanging in there. You can't start a new one yet. "
|
||||||
"Wait a few seconds, then try again."
|
"Wait a few seconds, then try again."
|
||||||
msgstr "前一项操作还在执行,无法启动新操作。请等待几秒钟后再重试一次。"
|
msgstr "前一项操作还在执行,无法启动新操作。请等待几秒钟后再重试一次。"
|
||||||
|
|
||||||
#: core\app.py:300
|
#: core\app.py:302
|
||||||
msgid "No duplicates found."
|
msgid "No duplicates found."
|
||||||
msgstr "没有找到重复文件。"
|
msgstr "没有找到重复文件。"
|
||||||
|
|
||||||
#: core\app.py:315
|
#: core\app.py:317
|
||||||
msgid "All marked files were copied successfully."
|
msgid "All marked files were copied successfully."
|
||||||
msgstr "所有已标记的文件已复制成功。"
|
msgstr "所有已标记的文件已复制成功。"
|
||||||
|
|
||||||
#: core\app.py:317
|
#: core\app.py:319
|
||||||
msgid "All marked files were moved successfully."
|
msgid "All marked files were moved successfully."
|
||||||
msgstr "所有已标记的文件已移动成功。"
|
msgstr "所有已标记的文件已移动成功。"
|
||||||
|
|
||||||
#: core\app.py:319
|
#: core\app.py:321
|
||||||
msgid "All marked files were deleted successfully."
|
msgid "All marked files were deleted successfully."
|
||||||
msgstr "已复制所有标记文件"
|
msgstr "已复制所有标记文件"
|
||||||
|
|
||||||
#: core\app.py:321
|
#: core\app.py:323
|
||||||
msgid "All marked files were successfully sent to Trash."
|
msgid "All marked files were successfully sent to Trash."
|
||||||
msgstr "所有已标记的文件已成功移至回收站。"
|
msgstr "所有已标记的文件已成功移至回收站。"
|
||||||
|
|
||||||
#: core\app.py:326
|
#: core\app.py:328
|
||||||
msgid "Could not load file: {}"
|
msgid "Could not load file: {}"
|
||||||
msgstr "无法加载文件: {}"
|
msgstr "无法加载文件: {}"
|
||||||
|
|
||||||
#: core\app.py:382
|
#: core\app.py:384
|
||||||
msgid "'{}' already is in the list."
|
msgid "'{}' already is in the list."
|
||||||
msgstr "'{}' 已在列表中。"
|
msgstr "'{}' 已在列表中。"
|
||||||
|
|
||||||
#: core\app.py:384
|
#: core\app.py:386
|
||||||
msgid "'{}' does not exist."
|
msgid "'{}' does not exist."
|
||||||
msgstr "'{}' 不存在。"
|
msgstr "'{}' 不存在。"
|
||||||
|
|
||||||
#: core\app.py:392
|
#: core\app.py:394
|
||||||
msgid ""
|
msgid ""
|
||||||
"All selected %d matches are going to be ignored in all subsequent scans. "
|
"All selected %d matches are going to be ignored in all subsequent scans. "
|
||||||
"Continue?"
|
"Continue?"
|
||||||
msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。是否继续?"
|
msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。是否继续?"
|
||||||
|
|
||||||
#: core\app.py:469
|
#: core\app.py:471
|
||||||
msgid "Select a directory to copy marked files to"
|
msgid "Select a directory to copy marked files to"
|
||||||
msgstr "请选择要将标记文件复制到的目录"
|
msgstr "请选择要将标记文件复制到的目录"
|
||||||
|
|
||||||
#: core\app.py:471
|
#: core\app.py:473
|
||||||
msgid "Select a directory to move marked files to"
|
msgid "Select a directory to move marked files to"
|
||||||
msgstr "请选择要将标记文件移动到的目录"
|
msgstr "请选择要将标记文件移动到的目录"
|
||||||
|
|
||||||
#: core\app.py:510
|
#: core\app.py:512
|
||||||
msgid "Select a destination for your exported CSV"
|
msgid "Select a destination for your exported CSV"
|
||||||
msgstr "选择您导出 CSV 的目标文件夹"
|
msgstr "选择您导出 CSV 的目标文件夹"
|
||||||
|
|
||||||
#: core\app.py:516 core\app.py:777 core\app.py:787
|
#: core\app.py:518 core\app.py:773 core\app.py:783
|
||||||
msgid "Couldn't write to file: {}"
|
msgid "Couldn't write to file: {}"
|
||||||
msgstr "不能写入文件: {}"
|
msgstr "不能写入文件: {}"
|
||||||
|
|
||||||
#: core\app.py:539
|
#: core\app.py:541
|
||||||
msgid "You have no custom command set up. Set it up in your preferences."
|
msgid "You have no custom command set up. Set it up in your preferences."
|
||||||
msgstr "您没有设定自定义命令。请在设置中进行设定。"
|
msgstr "您没有设定自定义命令。请在设置中进行设定。"
|
||||||
|
|
||||||
#: core\app.py:701 core\app.py:713
|
#: core\app.py:697 core\app.py:709
|
||||||
msgid "You are about to remove %d files from results. Continue?"
|
msgid "You are about to remove %d files from results. Continue?"
|
||||||
msgstr "您将从结果中移除 %d 个文件。是否继续?"
|
msgstr "您将从结果中移除 %d 个文件。是否继续?"
|
||||||
|
|
||||||
#: core\app.py:749
|
#: core\app.py:745
|
||||||
msgid "{} duplicate groups were changed by the re-prioritization."
|
msgid "{} duplicate groups were changed by the re-prioritization."
|
||||||
msgstr "{}个重复的组已被重新排列。"
|
msgstr "{}个重复的组已被重新排列。"
|
||||||
|
|
||||||
#: core\app.py:797
|
#: core\app.py:792
|
||||||
msgid "The selected directories contain no scannable file."
|
msgid "The selected directories contain no scannable file."
|
||||||
msgstr "所选目录中不包含可供扫描的文件。"
|
msgstr "所选目录中不包含可供扫描的文件。"
|
||||||
|
|
||||||
#: core\app.py:813
|
#: core\app.py:808
|
||||||
msgid "Collecting files to scan"
|
msgid "Collecting files to scan"
|
||||||
msgstr "收集文件以供扫描"
|
msgstr "收集文件以供扫描"
|
||||||
|
|
||||||
#: core\app.py:863
|
#: core\app.py:858
|
||||||
msgid "%s (%d discarded)"
|
msgid "%s (%d discarded)"
|
||||||
msgstr "%s (%d 项已丢弃)"
|
msgstr "%s (%d 项已丢弃)"
|
||||||
|
|
||||||
#: core\directories.py:191
|
#: core\directories.py:190
|
||||||
msgid "Collected {} files to scan"
|
msgid "Collected {} files to scan"
|
||||||
msgstr "收集要扫描的{}文件"
|
msgstr "收集要扫描的{}文件"
|
||||||
|
|
||||||
#: core\directories.py:207
|
#: core\directories.py:206
|
||||||
msgid "Collected {} folders to scan"
|
msgid "Collected {} folders to scan"
|
||||||
msgstr "收集要扫描的{}文件夹"
|
msgstr "收集要扫描的{}文件夹"
|
||||||
|
|
||||||
@ -171,23 +171,23 @@ msgstr "分组比较文件名(不固定顺序(如作者-歌曲名或者歌
|
|||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "标签"
|
msgstr "标签"
|
||||||
|
|
||||||
#: core\me\scanner.py:24 core\pe\scanner.py:22 core\se\scanner.py:17
|
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr "内容"
|
msgstr "内容"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:66
|
#: core\pe\matchblock.py:72
|
||||||
msgid "Analyzed %d/%d pictures"
|
msgid "Analyzed %d/%d pictures"
|
||||||
msgstr "已分析 %d/%d 图像"
|
msgstr "已分析 %d/%d 图像"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:183
|
#: core\pe\matchblock.py:177
|
||||||
msgid "Performed %d/%d chunk matches"
|
msgid "Performed %d/%d chunk matches"
|
||||||
msgstr "已执行 %d/%d 个区块匹配"
|
msgstr "已执行 %d/%d 个区块匹配"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:191
|
#: core\pe\matchblock.py:185
|
||||||
msgid "Preparing for matching"
|
msgid "Preparing for matching"
|
||||||
msgstr "准备进行匹配"
|
msgstr "准备进行匹配"
|
||||||
|
|
||||||
#: core\pe\matchblock.py:240
|
#: core\pe\matchblock.py:234
|
||||||
msgid "Verified %d/%d matches"
|
msgid "Verified %d/%d matches"
|
||||||
msgstr "已验证 %d/%d 匹配项"
|
msgstr "已验证 %d/%d 匹配项"
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ msgstr "已验证 %d/%d 匹配项"
|
|||||||
msgid "Read EXIF of %d/%d pictures"
|
msgid "Read EXIF of %d/%d pictures"
|
||||||
msgstr "已读取 %d/%d 张图片的 EXIF"
|
msgstr "已读取 %d/%d 张图片的 EXIF"
|
||||||
|
|
||||||
#: core\pe\scanner.py:23
|
#: core\pe\scanner.py:22
|
||||||
msgid "EXIF Timestamp"
|
msgid "EXIF Timestamp"
|
||||||
msgstr "EXIF 时间戳"
|
msgstr "EXIF 时间戳"
|
||||||
|
|
||||||
@ -235,19 +235,23 @@ msgstr "最新"
|
|||||||
msgid "Oldest"
|
msgid "Oldest"
|
||||||
msgstr "最旧"
|
msgstr "最旧"
|
||||||
|
|
||||||
#: core\results.py:135
|
#: core\results.py:134
|
||||||
msgid "%d / %d (%s / %s) duplicates marked."
|
msgid "%d / %d (%s / %s) duplicates marked."
|
||||||
msgstr "已标记 %d / %d (%s / %s) 个重复项。"
|
msgstr "已标记 %d / %d (%s / %s) 个重复项。"
|
||||||
|
|
||||||
#: core\results.py:142
|
#: core\results.py:141
|
||||||
msgid " filter: %s"
|
msgid " filter: %s"
|
||||||
msgstr " 过滤: %s"
|
msgstr " 过滤: %s"
|
||||||
|
|
||||||
#: core\scanner.py:114
|
#: core\scanner.py:90
|
||||||
|
msgid "Read size of %d/%d files"
|
||||||
|
msgstr "已读取 %d/%d 文件大小"
|
||||||
|
|
||||||
|
#: core\scanner.py:116
|
||||||
msgid "Read metadata of %d/%d files"
|
msgid "Read metadata of %d/%d files"
|
||||||
msgstr "已读取 %d/%d 文件元数据"
|
msgstr "已读取 %d/%d 文件元数据"
|
||||||
|
|
||||||
#: core\scanner.py:152
|
#: core\scanner.py:154
|
||||||
msgid "Almost done! Fiddling with results..."
|
msgid "Almost done! Fiddling with results..."
|
||||||
msgstr "即将完成!整理结果中..."
|
msgstr "即将完成!整理结果中..."
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Fuan <jcfrt@posteo.net>, 2022
|
# Fuan <jcfrt@posteo.net>, 2022
|
||||||
# 太子 VC <taiziccf@gmail.com>, 2022
|
# 太子 VC <taiziccf@gmail.com>, 2022
|
||||||
# Chris Ocelot, 2023
|
# Andrew Senetar <arsenetar@gmail.com>, 2022
|
||||||
# Andrew Senetar <arsenetar@gmail.com>, 2023
|
# Chris Ocelot, 2022
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2023\n"
|
"Last-Translator: Chris Ocelot, 2022\n"
|
||||||
"Language-Team: Chinese (Taiwan) (https://app.transifex.com/voltaicideas/teams/116153/zh_TW/)\n"
|
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/voltaicideas/teams/116153/zh_TW/)\n"
|
||||||
"Language: zh_TW\n"
|
"Language: zh_TW\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
@ -931,7 +931,7 @@ msgstr "只哈希部分如果文件大于"
|
|||||||
|
|
||||||
#: qt\se\preferences_dialog.py:80
|
#: qt\se\preferences_dialog.py:80
|
||||||
msgid "MB"
|
msgid "MB"
|
||||||
msgstr "MB"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:163
|
#: qt\preferences_dialog.py:163
|
||||||
msgid "Use native OS dialogs"
|
msgid "Use native OS dialogs"
|
||||||
@ -945,41 +945,41 @@ msgstr "使用操作系统原生对话窗口选择文件、文件夹。部分系
|
|||||||
|
|
||||||
#: qt\se\preferences_dialog.py:68
|
#: qt\se\preferences_dialog.py:68
|
||||||
msgid "Ignore files larger than"
|
msgid "Ignore files larger than"
|
||||||
msgstr "忽略文件,如果大于"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:135 qt\app.py:293
|
#: qt\app.py:135 qt\app.py:293
|
||||||
msgid "Clear Cache"
|
msgid "Clear Cache"
|
||||||
msgstr "清除缓存"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:294
|
#: qt\app.py:294
|
||||||
msgid ""
|
msgid ""
|
||||||
"Do you really want to clear the cache? This will remove all cached file "
|
"Do you really want to clear the cache? This will remove all cached file "
|
||||||
"hashes and picture analysis."
|
"hashes and picture analysis."
|
||||||
msgstr "你确定要清除缓存吗?所有缓存的文件hash和图片分析都会被移除。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\app.py:299
|
#: qt\app.py:299
|
||||||
msgid "Cache cleared."
|
msgid "Cache cleared."
|
||||||
msgstr "缓存已清除。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:173
|
#: qt\preferences_dialog.py:173
|
||||||
msgid "Use dark style"
|
msgid "Use dark style"
|
||||||
msgstr "使用暗色主题"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:241
|
#: qt\preferences_dialog.py:241
|
||||||
msgid "Profile scan operation"
|
msgid "Profile scan operation"
|
||||||
msgstr "将扫描操作保存为配置"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:242
|
#: qt\preferences_dialog.py:242
|
||||||
msgid "Profile the scan operation and save logs for optimization."
|
msgid "Profile the scan operation and save logs for optimization."
|
||||||
msgstr "将扫描操作保存为配置,并保存日志用于优化。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:246
|
#: qt\preferences_dialog.py:246
|
||||||
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
msgid "Logs located in: <a href=\"{}\">{}</a>"
|
||||||
msgstr "日志位于:<a href=\"{}\">{}"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:291
|
#: qt\preferences_dialog.py:291
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
msgstr "调试"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:31
|
#: qt\about_box.py:31
|
||||||
msgid "About {}"
|
msgid "About {}"
|
||||||
@ -991,7 +991,7 @@ msgstr "版本 {}"
|
|||||||
|
|
||||||
#: qt\about_box.py:49 qt\about_box.py:75
|
#: qt\about_box.py:49 qt\about_box.py:75
|
||||||
msgid "Checking for updates..."
|
msgid "Checking for updates..."
|
||||||
msgstr "检查更新..."
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:54
|
#: qt\about_box.py:54
|
||||||
msgid "Licensed under GPLv3"
|
msgid "Licensed under GPLv3"
|
||||||
@ -999,11 +999,11 @@ msgstr "本项目基于GPLv3开源协议发布"
|
|||||||
|
|
||||||
#: qt\about_box.py:68
|
#: qt\about_box.py:68
|
||||||
msgid "No update available."
|
msgid "No update available."
|
||||||
msgstr "没有新版本。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\about_box.py:71
|
#: qt\about_box.py:71
|
||||||
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
||||||
msgstr "有新版本{}可用,在<a href=\"{}\">这里</a>下载。"
|
msgstr ""
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:50
|
#: qt\error_report_dialog.py:50
|
||||||
msgid "Error Report"
|
msgid "Error Report"
|
||||||
@ -1015,7 +1015,7 @@ msgstr "发生错误,是否要报告错误?"
|
|||||||
|
|
||||||
#: qt\error_report_dialog.py:60
|
#: qt\error_report_dialog.py:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"Error reports should be reported as GitHub issues. You can copy the error traceback above and paste it in a new issue.\n"
|
"Error reports should be reported as Github issues. You can copy the error traceback above and paste it in a new issue.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
"Please make sure to run a search for any already existing issues beforehand. Also make sure to test the very latest version available from the repository, since the bug you are experiencing might have already been patched.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1023,7 +1023,7 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
"Although the application should continue to run after this error, it may be in an unstable state, so it is recommended that you restart the application."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"错误报告应该以GitHub issue的形式进行提交。您可以把错误信息复制粘贴到新的issue中\n"
|
"错误报告应该以Github issue的形式进行提交。您可以把错误信息复制粘贴到新的issue中\n"
|
||||||
"\n"
|
"\n"
|
||||||
"在提交新issue前,请搜索已经存在的issue,以确保没有其他人已经报告了相同的错误。同时请确保使用仓库中的最新版进行测试,因为您所遇到的bug可能已经被最新版修复。\n"
|
"在提交新issue前,请搜索已经存在的issue,以确保没有其他人已经报告了相同的错误。同时请确保使用仓库中的最新版进行测试,因为您所遇到的bug可能已经被最新版修复。\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1032,8 +1032,8 @@ msgstr ""
|
|||||||
"虽然本程序在此错误后依然会继续运行,但是可能处于不稳定的状态,因此推荐重启本程序。"
|
"虽然本程序在此错误后依然会继续运行,但是可能处于不稳定的状态,因此推荐重启本程序。"
|
||||||
|
|
||||||
#: qt\error_report_dialog.py:80
|
#: qt\error_report_dialog.py:80
|
||||||
msgid "Go to GitHub"
|
msgid "Go to Github"
|
||||||
msgstr "前往GitHub"
|
msgstr "前往Github"
|
||||||
|
|
||||||
#: qt\preferences.py:24
|
#: qt\preferences.py:24
|
||||||
msgid "Czech"
|
msgid "Czech"
|
||||||
@ -1118,36 +1118,3 @@ msgstr "清空列表"
|
|||||||
#: qt\search_edit.py:78
|
#: qt\search_edit.py:78
|
||||||
msgid "Search..."
|
msgid "Search..."
|
||||||
msgstr "搜索..."
|
msgstr "搜索..."
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:219
|
|
||||||
msgid ""
|
|
||||||
"These options are for advanced users or for very specific situations, most "
|
|
||||||
"users should not have to modify these."
|
|
||||||
msgstr "这些选项是供高级用户或者特定情况下使用,大多数用户不该修改它们。"
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:225
|
|
||||||
msgid "Include existence check after scan completion"
|
|
||||||
msgstr "在扫描结束后检查文件是否存在"
|
|
||||||
|
|
||||||
#: qt\preferences_dialog.py:227
|
|
||||||
msgid "Ignore difference in mtime when loading cached digests"
|
|
||||||
msgstr "载入缓存摘要时忽略mtime的不同"
|
|
||||||
|
|
||||||
#: qt\progress_window.py:64
|
|
||||||
msgid "Cancel?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\progress_window.py:65
|
|
||||||
msgid "Are you sure you want to cancel? All progress will be lost."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\exclude_list_dialog.py:161
|
|
||||||
msgid ""
|
|
||||||
"These (case sensitive) python regular expressions will filter out files during scans.<br>Directores will also have their <strong>default state</strong> set to Excluded in the Directories tab if their name happens to match one of the selected regular expressions.<br>For each file collected, two tests are performed to determine whether or not to completely ignore it:<br><li>1. Regular expressions with no path separator in them will be compared to the file name only.</li>\n"
|
|
||||||
"<li>2. Regular expressions with at least one path separator in them will be compared to the full path to the file.</li><br>Example: if you want to filter out .PNG files from the \"My Pictures\" directory only:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>You can test the regular expression with the \"test string\" button after pasting a fake path in the test field:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
|
|
||||||
"Matching regular expressions will be highlighted.<br>If there is at least one highlight, the path or filename tested will be ignored during scans.<br><br>Directories and files starting with a period '.' are filtered out by default.<br><br>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qt\pe\preferences_dialog.py:24
|
|
||||||
msgid "Match pictures of different rotations"
|
|
||||||
msgstr ""
|
|
||||||
|
@ -122,7 +122,7 @@ def package_arch():
|
|||||||
# need to include them).
|
# need to include them).
|
||||||
print("Packaging for Arch")
|
print("Packaging for Arch")
|
||||||
srcpath = op.join("build", "dupeguru-arch")
|
srcpath = op.join("build", "dupeguru-arch")
|
||||||
packages = ["hscommon", "core", "qt"]
|
packages = ["hscommon", "core", "qt", "send2trash"]
|
||||||
copy_files_to_package(srcpath, packages, with_so=True)
|
copy_files_to_package(srcpath, packages, with_so=True)
|
||||||
shutil.copy(op.join("images", "dgse_logo_128.png"), srcpath)
|
shutil.copy(op.join("images", "dgse_logo_128.png"), srcpath)
|
||||||
debopts = json.load(open(op.join("pkg", "arch", "dupeguru.json")))
|
debopts = json.load(open(op.join("pkg", "arch", "dupeguru.json")))
|
||||||
|
@ -348,3 +348,4 @@ dupeguru (2.9.2-1) unstable; urgency=low
|
|||||||
* Fixed selection glitches, especially while renaming. (#93)
|
* Fixed selection glitches, especially while renaming. (#93)
|
||||||
|
|
||||||
-- Virgil Dupras <hsoft@hardcoded.net> Wed, 10 Feb 2010 00:00:00 +0000
|
-- Virgil Dupras <hsoft@hardcoded.net> Wed, 10 Feb 2010 00:00:00 +0000
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ Vcs-Git: https://github.com/arsenetar/dupeguru.git
|
|||||||
|
|
||||||
Package: {pkgname}
|
Package: {pkgname}
|
||||||
Architecture: {arch}
|
Architecture: {arch}
|
||||||
Depends: ${shlibs:Depends}, python3 (>=3.7), python3 (<<3.12), python3-pyqt5, python3-mutagen, python3-semantic-version
|
Depends: ${shlibs:Depends}, python3 (>=3.7), python3-pyqt5, python3-mutagen, python3-semantic-version
|
||||||
Provides: dupeguru-se, dupeguru-me, dupeguru-pe
|
Provides: dupeguru-se, dupeguru-me, dupeguru-pe
|
||||||
Replaces: dupeguru-se, dupeguru-me, dupeguru-pe
|
Replaces: dupeguru-se, dupeguru-me, dupeguru-pe
|
||||||
Conflicts: dupeguru-se, dupeguru-me, dupeguru-pe
|
Conflicts: dupeguru-se, dupeguru-me, dupeguru-pe
|
||||||
|
@ -6,4 +6,3 @@ Icon=dupeguru
|
|||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Categories=Utility;
|
Categories=Utility;
|
||||||
Keywords=file manager;gui;
|
|
||||||
|
@ -192,9 +192,7 @@ class DupeGuru(QObject):
|
|||||||
scanned_tags.add("year")
|
scanned_tags.add("year")
|
||||||
self.model.options["scanned_tags"] = scanned_tags
|
self.model.options["scanned_tags"] = scanned_tags
|
||||||
self.model.options["match_scaled"] = self.prefs.match_scaled
|
self.model.options["match_scaled"] = self.prefs.match_scaled
|
||||||
self.model.options["match_rotated"] = self.prefs.match_rotated
|
self.model.options["picture_cache_type"] = self.prefs.picture_cache_type
|
||||||
self.model.options["include_exists_check"] = self.prefs.include_exists_check
|
|
||||||
self.model.options["rehash_ignore_mtime"] = self.prefs.rehash_ignore_mtime
|
|
||||||
|
|
||||||
if self.details_dialog:
|
if self.details_dialog:
|
||||||
self.details_dialog.update_options()
|
self.details_dialog.update_options()
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user