1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-02-05 04:41:39 +00:00

Compare commits

...

26 Commits

Author SHA1 Message Date
c51a82a2ce Fix Issues from Translation Update
- Add Qtlib to transifex config
- Pull latest qtlib translations
- Fix flake8 error
- Remove code for manual translation import, use transifex-client instead
2021-08-06 22:21:35 -05:00
0cd8f5e948 Update translation pot files 2021-08-06 21:41:52 -05:00
9c09607c08 Add Turkish & Updates from Transifex
- Pull updates from Transifex
- Add Turkish
- Sort language lists in code
- Remove old locale conversion code as it appears to work correctly on
windows without different conversions.
2021-08-06 21:41:52 -05:00
3bd342770c Update configurations
- Enable Unicode for NSIS Installer
- Update transifex config to new project
2021-08-06 21:41:52 -05:00
14b456dcf9 Merge pull request #927 from glubsy/fix_directories_tests
Fix Directories regex test
2021-08-06 20:08:27 -05:00
glubsy
3dccb686e2 Fix Directories regex test
The entire path to the file would match unless another path separator is added.
2021-08-06 17:18:23 +02:00
0db66baace Merge pull request #907 from glubsy/missing_renamed_regex
Missing renamed regex
2021-08-03 22:26:08 -05:00
e3828ae2ca Merge pull request #911 from glubsy/fix_757_fix_regression
Fix infinite recursion
2021-06-22 22:44:12 -05:00
glubsy
23c59787e5 Fix infinite recursion
Force the Results to update its internal __dupes list whenever at least one group has re-prioritized and changed its dupes/ref.
2021-06-23 05:36:10 +02:00
2f8d603251 Merge pull request #910 from glubsy/757_fix
Fix refs appearing in dupes-only view
2021-06-22 21:54:49 -05:00
glubsy
a51f263632 Fix refs appearing in dupes-only view
* Some refs appeared in the dupes-only view after a re-prioritization was done a second time.
* It seems the core.Results.__dupes list was not properly updated whenever core.app.Dupeguru.reprioritize_groups() -> core.Results.sort_dupes() was called.
When a re-prioritization is done, some refs became dupe, and some dupes became ref in their place. So we need to update the new state of the internal list of dupes kept by the Results object, instead of relying on the outdated cached one.
* Fix #757.
2021-06-22 22:57:57 +02:00
4641bd6ec9 Merge pull request #905 from glubsy/fix_863
Fix exception when deleting while in delta view
2021-06-19 20:29:47 -05:00
glubsy
a6f83ad3d7 Fix missing regexp after rename
* Doing a full match should be safer to avoid partial results which would result in overly aggressive filtering.
* Add new tests to test suite to cover this issue.
* Fixes #903.
2021-06-19 02:00:25 +02:00
glubsy
ab8750eedb Fix partial regex match yielding false positive 2021-06-17 03:49:59 +02:00
glubsy
22033211d6 Fix exception when deleting while in delta view 2021-05-31 23:49:21 +02:00
0b46ca2222 Merge pull request #879 from glubsy/fix_unicode
Fix stripping (japanese) unicode characters
2021-05-25 19:11:19 -05:00
72e0f76242 Merge pull request #898 from AlttiRi/master
Change reference background color #894
2021-05-25 19:10:31 -05:00
[Alt'tiRi]
65c1d463f8 Change reference background color #894 2021-05-22 02:52:41 +03:00
e6c791ab0a Merge pull request #884 from samusz/master
Small typo
2021-05-09 23:32:32 -05:00
Sacha Muszlak
78f5088101 Merge pull request #1 from samusz/samusz-patch-1
typo correction
2021-05-07 09:41:47 +02:00
Sacha Muszlak
095df5eb95 typo correction 2021-05-07 09:40:08 +02:00
glubsy
f1ae478433 Fix including character at the border 2021-04-29 05:29:35 +02:00
glubsy
c4dcfd3d4b Fix stripping (japanese) unicode characters
* Accents are getting removed from Unicode characters to generate similar "words".
* Non-latin characters which cannot be processed that way (eg. japanese, greek, russian, etc.) should not be filtered out at all otherwise files are erroneously skipped or detected as dupes if only some characters make it passed the filter.
* Starting from an arbitrary unicode codepoint (converted to decimal), above which we know it is pointless to try any sort of processing, we leave the characters as is.
* Fix #878.
2021-04-29 05:15:34 +02:00
0840104edf Merge pull request #873 from glubsy/fix_857
Fix 857
2021-04-20 20:05:05 -05:00
glubsy
6b4b436251 Fix crash on shutdown
* Fixes "'DetailsPanel' object has no attribute '_table'" error on shutdown if the Results table is updated (item removed) while the Details Dialog is shown as a floating window.
* It seems that QApplication.quit() triggers some sort of refresh on the floating QDockWidget, which in turn makes calls to the underlying model that is possibly being destroyed, ie. there might be a race condition here.
* Closing or hiding the QDockWidget before the cal to quit() is a workaround. Similarly, this is already done in the quitTriggered() method anyway.
* This fixes #857.
2021-04-16 17:54:49 +02:00
glubsy
d18b8c10ec Remove redundant assignment
The "app" field is already set in the parent class.
2021-04-15 18:03:00 +02:00
49 changed files with 2811 additions and 1081 deletions

View File

@@ -1,21 +1,26 @@
[main] [main]
host = https://www.transifex.com host = https://www.transifex.com
[dupeguru.core] [dupeguru-1.core]
file_filter = locale/<lang>/LC_MESSAGES/core.po file_filter = locale/<lang>/LC_MESSAGES/core.po
source_file = locale/core.pot source_file = locale/core.pot
source_lang = en source_lang = en
type = PO type = PO
[dupeguru.columns] [dupeguru-1.columns]
file_filter = locale/<lang>/LC_MESSAGES/columns.po file_filter = locale/<lang>/LC_MESSAGES/columns.po
source_file = locale/columns.pot source_file = locale/columns.pot
source_lang = en source_lang = en
type = PO type = PO
[dupeguru.ui] [dupeguru-1.ui]
file_filter = locale/<lang>/LC_MESSAGES/ui.po 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
[dupeguru-1.qtlib]
file_filter = qtlib/locale/<lang>/LC_MESSAGES/qtlib.po
source_file = qtlib/locale/qtlib.pot
source_lang = en
type = PO

View File

@@ -8,7 +8,6 @@ import os
import os.path as op import os.path as op
from optparse import OptionParser from optparse import OptionParser
import shutil import shutil
from pathlib import Path
from setuptools import setup, Extension from setuptools import setup, Extension
@@ -61,12 +60,6 @@ def parse_args():
dest="modules", dest="modules",
help="Build the python modules.", help="Build the python modules.",
) )
parser.add_option(
"--importpo",
action="store_true",
dest="importpo",
help="Import all PO files downloaded from transifex.",
)
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
return options return options
@@ -136,33 +129,6 @@ def build_normpo():
# loc.normalize_all_pos(op.join("cocoalib", "locale")) # loc.normalize_all_pos(op.join("cocoalib", "locale"))
def build_importpo():
basePath = Path.cwd()
# expect a folder named transifex with all the .po files from the exports
translationsPath = basePath.joinpath("transifex")
# locations where the translation files go
qtlibPath = basePath.joinpath("qtlib", "locale")
localePath = basePath.joinpath("locale")
for translation in translationsPath.iterdir():
# transifex files are named resource_lang.po so split on first '_'
parts = translation.stem.split("_", 1)
resource = parts[0]
language = parts[1]
# make sure qtlib resources go to dedicated folder
if resource == "qtlib":
outputPath = qtlibPath
else:
outputPath = localePath
outputFolder = outputPath.joinpath(language, "LC_MESSAGES")
# create the language folder if it is new
if not outputFolder.exists():
outputFolder.mkdir(parents=True)
# copy the po file over
shutil.copy(translation, outputFolder.joinpath(resource + ".po"))
# normalize files after complete
build_normpo()
def build_pe_modules(): def build_pe_modules():
print("Building PE Modules") print("Building PE Modules")
exts = [ exts = [
@@ -225,8 +191,6 @@ def main():
build_normpo() build_normpo()
elif options.modules: elif options.modules:
build_pe_modules() build_pe_modules()
elif options.importpo:
build_importpo()
else: else:
build_normal() build_normal()

View File

@@ -770,6 +770,8 @@ class DupeGuru(Broadcaster):
for group in self.results.groups: for group in self.results.groups:
if group.prioritize(key_func=sort_key): if group.prioritize(key_func=sort_key):
count += 1 count += 1
if count:
self.results.refresh_required = True
self._results_changed() self._results_changed()
msg = tr("{} duplicate groups were changed by the re-prioritization.").format( msg = tr("{} duplicate groups were changed by the re-prioritization.").format(
count count

View File

@@ -108,18 +108,9 @@ class Directories:
found_files = [] found_files = []
# print(f"len of files: {len(files)} {files}") # print(f"len of files: {len(files)} {files}")
for f in files: for f in files:
found = False if not self._exclude_list.is_excluded(root, f):
for expr in self._exclude_list.compiled_files: found_files.append(fs.get_file(rootPath + f,
if expr.match(f): fileclasses=fileclasses))
found = True
break
if not found:
for expr in self._exclude_list.compiled_paths:
if expr.match(root + os.sep + f):
found = True
break
if not found:
found_files.append(fs.get_file(rootPath + f, fileclasses=fileclasses))
found_files = [f for f in found_files if f is not None] found_files = [f for f in found_files if f is not None]
# In some cases, directories can be considered as files by dupeGuru, which is # In some cases, directories can be considered as files by dupeGuru, which is
# why we have this line below. In fact, there only one case: Bundle files under # why we have this line below. In fact, there only one case: Bundle files under

View File

@@ -26,8 +26,19 @@ def getwords(s):
# We decompose the string so that ascii letters with accents can be part of the word. # We decompose the string so that ascii letters with accents can be part of the word.
s = normalize("NFD", s) s = normalize("NFD", s)
s = multi_replace(s, "-_&+():;\\[]{}.,<>/?~!@#$*", " ").lower() s = multi_replace(s, "-_&+():;\\[]{}.,<>/?~!@#$*", " ").lower()
# logging.debug(f"DEBUG chars for: {s}\n"
# f"{[c for c in s if ord(c) != 32]}\n"
# f"{[ord(c) for c in s if ord(c) != 32]}")
# HACK We shouldn't ignore non-ascii characters altogether. Any Unicode char
# above common european characters that cannot be "sanitized" (ie. stripped
# of their accents, etc.) are preserved as is. The arbitrary limit is
# obtained from this one: ord("\u037e") GREEK QUESTION MARK
s = "".join( s = "".join(
c for c in s if c in string.ascii_letters + string.digits + string.whitespace c for c in s
if (ord(c) <= 894
and c in string.ascii_letters + string.digits + string.whitespace
)
or ord(c) > 894
) )
return [_f for _f in s.split(" ") if _f] # remove empty elements return [_f for _f in s.split(" ") if _f] # remove empty elements

View File

@@ -81,7 +81,7 @@ class ExcludeList(Markable):
yield self.is_marked(regex), regex yield self.is_marked(regex), regex
def __contains__(self, item): def __contains__(self, item):
return self.isExcluded(item) return self.has_entry(item)
def __len__(self): def __len__(self):
"""Returns the total number of regexes regardless of mark status.""" """Returns the total number of regexes regardless of mark status."""
@@ -173,7 +173,9 @@ class ExcludeList(Markable):
[x for x in self._excluded_compiled if not has_sep(x.pattern)] [x for x in self._excluded_compiled if not has_sep(x.pattern)]
self._cached_compiled_paths =\ self._cached_compiled_paths =\
[x for x in self._excluded_compiled if has_sep(x.pattern)] [x for x in self._excluded_compiled if has_sep(x.pattern)]
self._dirty = False
return return
marked_count = [x for marked, x in self if marked] marked_count = [x for marked, x in self if marked]
# If there is no item, the compiled Pattern will be '' and match everything! # If there is no item, the compiled Pattern will be '' and match everything!
if not marked_count: if not marked_count:
@@ -197,14 +199,14 @@ class ExcludeList(Markable):
else: else:
self._cached_compiled_union_paths =\ self._cached_compiled_union_paths =\
(re.compile('|'.join(paths_marked)),) (re.compile('|'.join(paths_marked)),)
self._dirty = False
@property @property
def compiled(self): def compiled(self):
"""Should be used by other classes to retrieve the up-to-date list of patterns.""" """Should be used by other classes to retrieve the up-to-date list of patterns."""
if self._use_union: if self._use_union:
if self._dirty: if self._dirty:
self.build_compiled_caches(True) self.build_compiled_caches(self._use_union)
self._dirty = False
return self._cached_compiled_union_all return self._cached_compiled_union_all
return self._excluded_compiled return self._excluded_compiled
@@ -215,8 +217,7 @@ class ExcludeList(Markable):
The interface should be expected to be a generator, even if it returns only The interface should be expected to be a generator, even if it returns only
one item (one Pattern in the union case).""" one item (one Pattern in the union case)."""
if self._dirty: if self._dirty:
self.build_compiled_caches(True if self._use_union else False) self.build_compiled_caches(self._use_union)
self._dirty = False
return self._cached_compiled_union_files if self._use_union\ return self._cached_compiled_union_files if self._use_union\
else self._cached_compiled_files else self._cached_compiled_files
@@ -224,8 +225,7 @@ class ExcludeList(Markable):
def compiled_paths(self): def compiled_paths(self):
"""Returns patterns with only separators in them, for more precise filtering.""" """Returns patterns with only separators in them, for more precise filtering."""
if self._dirty: if self._dirty:
self.build_compiled_caches(True if self._use_union else False) self.build_compiled_caches(self._use_union)
self._dirty = False
return self._cached_compiled_union_paths if self._use_union\ return self._cached_compiled_union_paths if self._use_union\
else self._cached_compiled_paths else self._cached_compiled_paths
@@ -233,7 +233,7 @@ class ExcludeList(Markable):
def add(self, regex, forced=False): def add(self, regex, forced=False):
"""This interface should throw exceptions if there is an error during """This interface should throw exceptions if there is an error during
regex compilation""" regex compilation"""
if self.isExcluded(regex): if self.has_entry(regex):
# This exception should never be ignored # This exception should never be ignored
raise AlreadyThereException() raise AlreadyThereException()
if regex in forbidden_regexes: if regex in forbidden_regexes:
@@ -256,12 +256,27 @@ class ExcludeList(Markable):
"""Returns the number of marked regexes only.""" """Returns the number of marked regexes only."""
return len([x for marked, x in self if marked]) return len([x for marked, x in self if marked])
def isExcluded(self, regex): def has_entry(self, regex):
for item in self._excluded: for item in self._excluded:
if regex == item[0]: if regex == item[0]:
return True return True
return False return False
def is_excluded(self, dirname, filename):
"""Return True if the file or the absolute path to file is supposed to be
filtered out, False otherwise."""
matched = False
for expr in self.compiled_files:
if expr.fullmatch(filename):
matched = True
break
if not matched:
for expr in self.compiled_paths:
if expr.fullmatch(dirname + sep + filename):
matched = True
break
return matched
def remove(self, regex): def remove(self, regex):
for item in self._excluded: for item in self._excluded:
if item[0] == regex: if item[0] == regex:
@@ -286,9 +301,11 @@ class ExcludeList(Markable):
break break
if not found: if not found:
return return
if is_compilable and was_marked: if is_compilable:
# Not marked by default when added, add it back self._add_compiled(newregex)
self.mark(newregex) if was_marked:
# Not marked by default when added, add it back
self.mark(newregex)
# def change_index(self, regex, new_index): # def change_index(self, regex, new_index):
# """Internal list must be a list, not dict.""" # """Internal list must be a list, not dict."""
@@ -300,7 +317,7 @@ class ExcludeList(Markable):
if regex not in default_regexes: if regex not in default_regexes:
self.unmark(regex) self.unmark(regex)
for default_regex in default_regexes: for default_regex in default_regexes:
if not self.isExcluded(default_regex): if not self.has_entry(default_regex):
self.add(default_regex) self.add(default_regex)
self.mark(default_regex) self.mark(default_regex)
@@ -399,9 +416,9 @@ class ExcludeDict(ExcludeList):
if self._use_union: if self._use_union:
return return
try: try:
self._excluded_compiled.add(self._excluded[regex]["compiled"]) self._excluded_compiled.add(self._excluded.get(regex).get("compiled"))
except Exception as e: except Exception as e:
logging.warning(f"Exception while adding regex {regex} to compiled set: {e}") logging.error(f"Exception while adding regex {regex} to compiled set: {e}")
return return
def is_compilable(self, regex): def is_compilable(self, regex):
@@ -425,7 +442,7 @@ class ExcludeDict(ExcludeList):
"compiled": compiled "compiled": compiled
} }
def isExcluded(self, regex): def has_entry(self, regex):
if regex in self._excluded.keys(): if regex in self._excluded.keys():
return True return True
return False return False
@@ -451,14 +468,16 @@ class ExcludeDict(ExcludeList):
previous = self._excluded.pop(regex) previous = self._excluded.pop(regex)
iscompilable, error, compiled = self.compile_re(newregex) iscompilable, error, compiled = self.compile_re(newregex)
self._excluded[newregex] = { self._excluded[newregex] = {
"index": previous["index"], "index": previous.get('index'),
"compilable": iscompilable, "compilable": iscompilable,
"error": error, "error": error,
"compiled": compiled "compiled": compiled
} }
self._remove_compiled(regex) self._remove_compiled(regex)
if was_marked and iscompilable: if iscompilable:
self.mark(newregex) self._add_compiled(newregex)
if was_marked:
self.mark(newregex)
def save_to_xml(self, outfile): def save_to_xml(self, outfile):
"""Create a XML file that can be used by load_from_xml. """Create a XML file that can be used by load_from_xml.
@@ -492,8 +511,8 @@ def ordered_keys(_dict):
if ISWINDOWS: if ISWINDOWS:
def has_sep(x): def has_sep(regexp):
return '\\' + sep in x return '\\' + sep in regexp
else: else:
def has_sep(x): def has_sep(regexp):
return sep in x return sep in regexp

View File

@@ -7,6 +7,8 @@
# from hscommon.trans import tr # from hscommon.trans import tr
from .exclude_list_table import ExcludeListTable from .exclude_list_table import ExcludeListTable
from core.exclude import has_sep
from os import sep
import logging import logging
@@ -30,9 +32,10 @@ class ExcludeListDialogCore:
self.refresh() self.refresh()
def rename_selected(self, newregex): def rename_selected(self, newregex):
"""Renames the selected regex to ``newregex``. """Rename the selected regex to ``newregex``.
If there's more than one selected row, the first one is used. If there is more than one selected row, the first one is used.
:param str newregex: The regex to rename the row's regex to. :param str newregex: The regex to rename the row's regex to.
:return bool: true if success, false if error.
""" """
try: try:
r = self.exclude_list_table.selected_rows[0] r = self.exclude_list_table.selected_rows[0]
@@ -52,17 +55,37 @@ class ExcludeListDialogCore:
self.exclude_list_table.add(regex) self.exclude_list_table.add(regex)
def test_string(self, test_string): def test_string(self, test_string):
"""Sets property on row to highlight if its regex matches test_string supplied.""" """Set the highlight property on each row when its regex matches the
test_string supplied. Return True if any row matched."""
matched = False matched = False
for row in self.exclude_list_table.rows: for row in self.exclude_list_table.rows:
compiled_regex = self.exclude_list.get_compiled(row.regex) compiled_regex = self.exclude_list.get_compiled(row.regex)
if compiled_regex and compiled_regex.match(test_string):
matched = True if self.is_match(test_string, compiled_regex):
row.highlight = True row.highlight = True
matched = True
else: else:
row.highlight = False row.highlight = False
return matched return matched
def is_match(self, test_string, compiled_regex):
# This method is like an inverted version of ExcludeList.is_excluded()
if not compiled_regex:
return False
matched = False
# Test only the filename portion of the path
if not has_sep(compiled_regex.pattern) and sep in test_string:
filename = test_string.rsplit(sep, 1)[1]
if compiled_regex.fullmatch(filename):
matched = True
return matched
# Test the entire path + filename
if compiled_regex.fullmatch(test_string):
matched = True
return matched
def reset_rows_highlight(self): def reset_rows_highlight(self):
for row in self.exclude_list_table.rows: for row in self.exclude_list_table.rows:
row.highlight = False row.highlight = False

View File

@@ -36,7 +36,7 @@ class ExcludeListTable(GUITable, DupeGuruGUIObject):
return ExcludeListRow(self, self.dialog.exclude_list.is_marked(regex), regex), 0 return ExcludeListRow(self, self.dialog.exclude_list.is_marked(regex), regex), 0
def _do_delete(self): def _do_delete(self):
self.dalog.exclude_list.remove(self.selected_row.regex) self.dialog.exclude_list.remove(self.selected_row.regex)
# --- Override # --- Override
def add(self, regex): def add(self, regex):

View File

@@ -41,6 +41,8 @@ class DupeRow(Row):
# table.DELTA_COLUMNS are always "delta" # table.DELTA_COLUMNS are always "delta"
self._delta_columns = self.table.DELTA_COLUMNS.copy() self._delta_columns = self.table.DELTA_COLUMNS.copy()
dupe_info = self.data dupe_info = self.data
if self._group.ref is None:
return False
ref_info = self._group.ref.get_display_info(group=self._group, delta=False) ref_info = self._group.ref.get_display_info(group=self._group, delta=False)
for key, value in dupe_info.items(): for key, value in dupe_info.items():
if (key not in self._delta_columns) and ( if (key not in self._delta_columns) and (

View File

@@ -52,6 +52,7 @@ class Results(Markable):
self.app = app self.app = app
self.problems = [] # (dupe, error_msg) self.problems = [] # (dupe, error_msg)
self.is_modified = False self.is_modified = False
self.refresh_required = False
def _did_mark(self, dupe): def _did_mark(self, dupe):
self.__marked_size += dupe.size self.__marked_size += dupe.size
@@ -94,8 +95,9 @@ class Results(Markable):
# ---Private # ---Private
def __get_dupe_list(self): def __get_dupe_list(self):
if self.__dupes is None: if self.__dupes is None or self.refresh_required:
self.__dupes = flatten(group.dupes for group in self.groups) self.__dupes = flatten(group.dupes for group in self.groups)
self.refresh_required = False
if None in self.__dupes: if None in self.__dupes:
# This is debug logging to try to figure out #44 # This is debug logging to try to figure out #44
logging.warning( logging.warning(

View File

@@ -473,6 +473,29 @@ files: {self.d._exclude_list.compiled_files} all: {self.d._exclude_list.compiled
assert "file_ending_with_subdir" not in files assert "file_ending_with_subdir" not in files
assert "file_which_shouldnt_match" in files assert "file_which_shouldnt_match" in files
# This should match the directory only
regex6 = r".*/.*subdir.*/.*"
if ISWINDOWS:
regex6 = r".*\\.*subdir.*\\.*"
assert os.sep in regex6
self.d._exclude_list.rename(regex5, regex6)
self.d._exclude_list.remove(regex1)
eq_(len(self.d._exclude_list.compiled), 1)
assert regex1 not in self.d._exclude_list
assert regex5 not in self.d._exclude_list
assert self.d._exclude_list.error(regex6) is None
assert regex6 in self.d._exclude_list
# This still should not be affected
eq_(self.d.get_state(p1["$Recycle.Bin"]["subdir"]), DirectoryState.Normal)
files = self.get_files_and_expect_num_result(5)
# These files are under the "/subdir" directory
assert "somesubdirfile.png" not in files
assert "unwanted_subdirfile.gif" not in files
# This file under "subdar" directory should not be filtered out
assert "file_ending_with_subdir" in files
# This file is in a directory that should be filtered out
assert "file_which_shouldnt_match" not in files
def test_japanese_unicode(self, tmpdir): def test_japanese_unicode(self, tmpdir):
p1 = Path(str(tmpdir)) p1 = Path(str(tmpdir))
p1["$Recycle.Bin"].mkdir() p1["$Recycle.Bin"].mkdir()

View File

@@ -69,6 +69,10 @@ class TestCasegetwords:
eq_(["a", "b", "c", "d"], getwords("a b c d")) eq_(["a", "b", "c", "d"], getwords("a b c d"))
eq_(["a", "b", "c", "d"], getwords(" a b c d ")) eq_(["a", "b", "c", "d"], getwords(" a b c d "))
def test_unicode(self):
eq_(["e", "c", "0", "a", "o", "u", "e", "u"], getwords("é ç 0 à ö û è ¤ ù"))
eq_(["02", "君のこころは輝いてるかい?", "国木田花丸", "solo", "ver"], getwords("02 君のこころは輝いてるかい? 国木田花丸 Solo Ver"))
def test_splitter_chars(self): def test_splitter_chars(self):
eq_( eq_(
[chr(i) for i in range(ord("a"), ord("z") + 1)], [chr(i) for i in range(ord("a"), ord("z") + 1)],
@@ -85,7 +89,7 @@ class TestCasegetwords:
eq_(["foo", "bar"], getwords("FOO BAR")) eq_(["foo", "bar"], getwords("FOO BAR"))
def test_decompose_unicode(self): def test_decompose_unicode(self):
eq_(getwords("foo\xe9bar"), ["fooebar"]) eq_(["fooebar"], getwords("foo\xe9bar"))
class TestCasegetfields: class TestCasegetfields:

View File

@@ -188,6 +188,28 @@ class TestCaseListEmpty:
self.exclude_list.rename(regex_renamed_compilable, regex_compilable) self.exclude_list.rename(regex_renamed_compilable, regex_compilable)
eq_(self.exclude_list.is_marked(regex_compilable), True) eq_(self.exclude_list.is_marked(regex_compilable), True)
def test_rename_regex_file_to_path(self):
regex = r".*/one.*"
if ISWINDOWS:
regex = r".*\\one.*"
regex2 = r".*one.*"
self.exclude_list.add(regex)
self.exclude_list.mark(regex)
compiled_re = [x.pattern for x in self.exclude_list._excluded_compiled]
files_re = [x.pattern for x in self.exclude_list.compiled_files]
paths_re = [x.pattern for x in self.exclude_list.compiled_paths]
assert regex in compiled_re
assert regex not in files_re
assert regex in paths_re
self.exclude_list.rename(regex, regex2)
compiled_re = [x.pattern for x in self.exclude_list._excluded_compiled]
files_re = [x.pattern for x in self.exclude_list.compiled_files]
paths_re = [x.pattern for x in self.exclude_list.compiled_paths]
assert regex not in compiled_re
assert regex2 in compiled_re
assert regex2 in files_re
assert regex2 not in paths_re
def test_restore_default(self): def test_restore_default(self):
"""Only unmark previously added regexes and mark the pre-defined ones""" """Only unmark previously added regexes and mark the pre-defined ones"""
regex = r"one" regex = r"one"
@@ -213,6 +235,73 @@ class TestCaseListEmpty:
eq_(len(default_regexes), len(self.exclude_list.compiled)) eq_(len(default_regexes), len(self.exclude_list.compiled))
class TestCaseListEmptyUnion(TestCaseListEmpty):
"""Same but with union regex"""
def setup_method(self, method):
self.app = DupeGuru()
self.app.exclude_list = ExcludeList(union_regex=True)
self.exclude_list = self.app.exclude_list
def test_add_mark_and_remove_regex(self):
regex1 = r"one"
regex2 = r"two"
self.exclude_list.add(regex1)
assert(regex1 in self.exclude_list)
self.exclude_list.add(regex2)
self.exclude_list.mark(regex1)
self.exclude_list.mark(regex2)
eq_(len(self.exclude_list), 2)
eq_(len(self.exclude_list.compiled), 1)
compiled_files = [x for x in self.exclude_list.compiled_files]
eq_(len(compiled_files), 1) # Two patterns joined together into one
assert "|" in compiled_files[0].pattern
self.exclude_list.remove(regex2)
assert(regex2 not in self.exclude_list)
eq_(len(self.exclude_list), 1)
def test_rename_regex_file_to_path(self):
regex = r".*/one.*"
if ISWINDOWS:
regex = r".*\\one.*"
regex2 = r".*one.*"
self.exclude_list.add(regex)
self.exclude_list.mark(regex)
eq_(len([x for x in self.exclude_list]), 1)
compiled_re = [x.pattern for x in self.exclude_list.compiled]
files_re = [x.pattern for x in self.exclude_list.compiled_files]
paths_re = [x.pattern for x in self.exclude_list.compiled_paths]
assert regex in compiled_re
assert regex not in files_re
assert regex in paths_re
self.exclude_list.rename(regex, regex2)
eq_(len([x for x in self.exclude_list]), 1)
compiled_re = [x.pattern for x in self.exclude_list.compiled]
files_re = [x.pattern for x in self.exclude_list.compiled_files]
paths_re = [x.pattern for x in self.exclude_list.compiled_paths]
assert regex not in compiled_re
assert regex2 in compiled_re
assert regex2 in files_re
assert regex2 not in paths_re
def test_restore_default(self):
"""Only unmark previously added regexes and mark the pre-defined ones"""
regex = r"one"
self.exclude_list.add(regex)
self.exclude_list.mark(regex)
self.exclude_list.restore_defaults()
eq_(len(default_regexes), self.exclude_list.marked_count)
# added regex shouldn't be marked
eq_(self.exclude_list.is_marked(regex), False)
# added regex shouldn't be in compiled list either
compiled = [x for x in self.exclude_list.compiled]
assert regex not in compiled
# Need to escape both to get the same strings after compilation
compiled_escaped = set([x.encode('unicode-escape').decode() for x in compiled[0].pattern.split("|")])
default_escaped = set([x.encode('unicode-escape').decode() for x in default_regexes])
assert compiled_escaped == default_escaped
eq_(len(default_regexes), len(compiled[0].pattern.split("|")))
class TestCaseDictEmpty(TestCaseListEmpty): class TestCaseDictEmpty(TestCaseListEmpty):
"""Same, but with dictionary implementation""" """Same, but with dictionary implementation"""
def setup_method(self, method): def setup_method(self, method):
@@ -221,6 +310,73 @@ class TestCaseDictEmpty(TestCaseListEmpty):
self.exclude_list = self.app.exclude_list self.exclude_list = self.app.exclude_list
class TestCaseDictEmptyUnion(TestCaseDictEmpty):
"""Same, but with union regex"""
def setup_method(self, method):
self.app = DupeGuru()
self.app.exclude_list = ExcludeDict(union_regex=True)
self.exclude_list = self.app.exclude_list
def test_add_mark_and_remove_regex(self):
regex1 = r"one"
regex2 = r"two"
self.exclude_list.add(regex1)
assert(regex1 in self.exclude_list)
self.exclude_list.add(regex2)
self.exclude_list.mark(regex1)
self.exclude_list.mark(regex2)
eq_(len(self.exclude_list), 2)
eq_(len(self.exclude_list.compiled), 1)
compiled_files = [x for x in self.exclude_list.compiled_files]
# two patterns joined into one
eq_(len(compiled_files), 1)
self.exclude_list.remove(regex2)
assert(regex2 not in self.exclude_list)
eq_(len(self.exclude_list), 1)
def test_rename_regex_file_to_path(self):
regex = r".*/one.*"
if ISWINDOWS:
regex = r".*\\one.*"
regex2 = r".*one.*"
self.exclude_list.add(regex)
self.exclude_list.mark(regex)
marked_re = [x for marked, x in self.exclude_list if marked]
eq_(len(marked_re), 1)
compiled_re = [x.pattern for x in self.exclude_list.compiled]
files_re = [x.pattern for x in self.exclude_list.compiled_files]
paths_re = [x.pattern for x in self.exclude_list.compiled_paths]
assert regex in compiled_re
assert regex not in files_re
assert regex in paths_re
self.exclude_list.rename(regex, regex2)
compiled_re = [x.pattern for x in self.exclude_list.compiled]
files_re = [x.pattern for x in self.exclude_list.compiled_files]
paths_re = [x.pattern for x in self.exclude_list.compiled_paths]
assert regex not in compiled_re
assert regex2 in compiled_re
assert regex2 in files_re
assert regex2 not in paths_re
def test_restore_default(self):
"""Only unmark previously added regexes and mark the pre-defined ones"""
regex = r"one"
self.exclude_list.add(regex)
self.exclude_list.mark(regex)
self.exclude_list.restore_defaults()
eq_(len(default_regexes), self.exclude_list.marked_count)
# added regex shouldn't be marked
eq_(self.exclude_list.is_marked(regex), False)
# added regex shouldn't be in compiled list either
compiled = [x for x in self.exclude_list.compiled]
assert regex not in compiled
# Need to escape both to get the same strings after compilation
compiled_escaped = set([x.encode('unicode-escape').decode() for x in compiled[0].pattern.split("|")])
default_escaped = set([x.encode('unicode-escape').decode() for x in default_regexes])
assert compiled_escaped == default_escaped
eq_(len(default_regexes), len(compiled[0].pattern.split("|")))
def split_union(pattern_object): def split_union(pattern_object):
"""Returns list of strings for each union pattern""" """Returns list of strings for each union pattern"""
return [x for x in pattern_object.pattern.split("|")] return [x for x in pattern_object.pattern.split("|")]

View File

@@ -13,7 +13,7 @@ import locale
import logging import logging
import os.path as op import os.path as op
from .plat import ISWINDOWS, ISLINUX from .plat import ISLINUX
_trfunc = None _trfunc = None
_trget = None _trget = None
@@ -46,40 +46,27 @@ def set_tr(new_tr, new_trget=None):
def get_locale_name(lang): def get_locale_name(lang):
if ISWINDOWS: # Removed old conversion code as windows seems to support these
# http://msdn.microsoft.com/en-us/library/39cwe7zf(vs.71).aspx LANG2LOCALENAME = {
LANG2LOCALENAME = { "cs": "cs_CZ",
"cs": "czy", "de": "de_DE",
"de": "deu", "el": "el_GR",
"el": "grc", "en": "en",
"es": "esn", "es": "es_ES",
"fr": "fra", "fr": "fr_FR",
"it": "ita", "hy": "hy_AM",
"ko": "korean", "it": "it_IT",
"nl": "nld", "ja": "ja_JP",
"pl_PL": "polish_poland", "ko": "ko_KR",
"pt_BR": "ptb", "nl": "nl_NL",
"ru": "rus", "pl_PL": "pl_PL",
"zh_CN": "chs", "pt_BR": "pt_BR",
} "ru": "ru_RU",
else: "tr": "tr_TR",
LANG2LOCALENAME = { "uk": "uk_UA",
"cs": "cs_CZ", "vi": "vi_VN",
"de": "de_DE", "zh_CN": "zh_CN",
"el": "el_GR", }
"es": "es_ES",
"fr": "fr_FR",
"it": "it_IT",
"nl": "nl_NL",
"hy": "hy_AM",
"ko": "ko_KR",
"pl_PL": "pl_PL",
"pt_BR": "pt_BR",
"ru": "ru_RU",
"uk": "uk_UA",
"vi": "vi_VN",
"zh_CN": "zh_CN",
}
if lang not in LANG2LOCALENAME: if lang not in LANG2LOCALENAME:
return None return None
result = LANG2LOCALENAME[lang] result = LANG2LOCALENAME[lang]

View File

@@ -84,7 +84,7 @@ msgstr ""
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core\app.py:534 core\app.py:801 core\app.py:811 #: core\app.py:534 core\app.py:803 core\app.py:813
msgid "Couldn't write to file: {}" msgid "Couldn't write to file: {}"
msgstr "" msgstr ""
@@ -96,27 +96,27 @@ msgstr ""
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:774 #: core\app.py:776
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core\app.py:821 #: core\app.py:823
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "" msgstr ""
#: core\app.py:835 #: core\app.py:837
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "" msgstr ""
#: core\app.py:891 #: core\app.py:893
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "" msgstr ""
#: core\engine.py:244 core\engine.py:288 #: core\engine.py:255 core\engine.py:299
msgid "0 matches found" msgid "0 matches found"
msgstr "" msgstr ""
#: core\engine.py:262 core\engine.py:296 #: core\engine.py:273 core\engine.py:307
msgid "%d matches found" msgid "%d matches found"
msgstr "" msgstr ""
@@ -212,11 +212,11 @@ msgstr ""
msgid "Oldest" msgid "Oldest"
msgstr "" msgstr ""
#: core\results.py:142 #: core\results.py:144
msgid "%d / %d (%s / %s) duplicates marked." msgid "%d / %d (%s / %s) duplicates marked."
msgstr "" msgstr ""
#: core\results.py:149 #: core\results.py:151
msgid " filter: %s" msgid " filter: %s"
msgstr "" msgstr ""

View File

@@ -308,7 +308,7 @@ msgstr "Rimuovi le cartelle vuote dopo aver cancellato o spostato"
#: 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
msgid "Ignore duplicates hardlinking to the same file" msgid "Ignore duplicates hardlinking to the same file"
msgstr "Non creare gli hardlink per i duplicati verso il medesimo file" msgstr "Non considerare gli hardlink come duplicati"
#: 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

View File

@@ -1,9 +1,10 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Bas <duvel3@gmail.com>, 2021
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2021\n" "Last-Translator: Bas <duvel3@gmail.com>, 2021\n"
"Language-Team: Dutch (https://www.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"
@@ -13,11 +14,11 @@ 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 "Bestand locatie" msgstr "Bestandspad"
#: core\gui\problem_table.py:19 #: core\gui\problem_table.py:19
msgid "Error Message" msgid "Error Message"
msgstr "Fout Melding" msgstr "Foutmelding"
#: core\me\prioritize.py:23 #: core\me\prioritize.py:23
msgid "Duration" msgid "Duration"
@@ -39,11 +40,11 @@ msgstr "Bestandsnaam"
#: 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 "Folder" msgstr "Map"
#: core\me\result_table.py:21 #: core\me\result_table.py:21
msgid "Size (MB)" msgid "Size (MB)"
msgstr "Grote (MB)" msgstr "Grootte (MB)"
#: core\me\result_table.py:22 #: core\me\result_table.py:22
msgid "Time" msgid "Time"
@@ -56,7 +57,7 @@ msgstr "Sample Frequentie"
#: 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 "Kind" msgstr "Soort"
#: 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:163 core\se\result_table.py:23 #: core\prioritize.py:163 core\se\result_table.py:23
@@ -111,7 +112,7 @@ msgstr "Afmetingen"
#: 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 "Grote (KB)" msgstr "Grootte (KB)"
#: core\pe\result_table.py:24 #: core\pe\result_table.py:24
msgid "EXIF Timestamp" msgid "EXIF Timestamp"
@@ -119,4 +120,4 @@ msgstr "EXIF Tijdstip"
#: core\prioritize.py:156 #: core\prioritize.py:156
msgid "Size" msgid "Size"
msgstr "Grote" msgstr "Grootte"

View File

@@ -1,10 +1,11 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021 # Fuan <jcfrt@posteo.net>, 2021
# Bas <duvel3@gmail.com>, 2021
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n" "Last-Translator: Bas <duvel3@gmail.com>, 2021\n"
"Language-Team: Dutch (https://www.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"
@@ -42,7 +43,7 @@ msgstr "Verplaatsen"
#: core\app.py:74 #: core\app.py:74
msgid "Copying" msgid "Copying"
msgstr "Kopieeren" msgstr "Kopiëren"
#: core\app.py:75 #: core\app.py:75
msgid "Sending to Trash" msgid "Sending to Trash"
@@ -78,7 +79,7 @@ msgstr "Kan bestand niet laden: {}"
#: core\app.py:399 #: core\app.py:399
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}'staat al in de lijst." msgstr "'{}' staat al in de lijst."
#: core\app.py:401 #: core\app.py:401
msgid "'{}' does not exist." msgid "'{}' does not exist."
@@ -151,7 +152,7 @@ msgstr "%d overeenkomsten gevonden"
#: core\gui\deletion_options.py:73 #: core\gui\deletion_options.py:73
msgid "You are sending {} file(s) to the Trash." msgid "You are sending {} file(s) to the Trash."
msgstr "Je verplaatst {} bestanden naar de prullenbak" msgstr "Je verplaatst {} bestand(en) naar de prullenbak"
#: core\gui\exclude_list_table.py:15 #: core\gui\exclude_list_table.py:15
msgid "Regular Expressions" msgid "Regular Expressions"
@@ -160,7 +161,7 @@ msgstr "Normale Uitdrukkingen"
#: 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 "" msgstr ""
"Weet je zeker dat je all %d regels uit de overslaan lijst wilt verwijderen?" "Weet je zeker dat je alle %d regels uit de overslaan lijst wilt verwijderen?"
#: core\me\scanner.py:20 core\se\scanner.py:16 #: core\me\scanner.py:20 core\se\scanner.py:16
msgid "Filename" msgid "Filename"
@@ -252,7 +253,7 @@ msgstr "filter: %s"
#: core\scanner.py:85 #: core\scanner.py:85
msgid "Read size of %d/%d files" msgid "Read size of %d/%d files"
msgstr "Bestands grote van %d/%d bestanden aan het lezen." msgstr "Bestandsgrootte van %d/%d bestanden aan het lezen."
#: core\scanner.py:109 #: core\scanner.py:109
msgid "Read metadata of %d/%d files" msgid "Read metadata of %d/%d files"

View File

@@ -1,10 +1,11 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021 # Fuan <jcfrt@posteo.net>, 2021
# Bas <duvel3@gmail.com>, 2021
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n" "Last-Translator: Bas <duvel3@gmail.com>, 2021\n"
"Language-Team: Dutch (https://www.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"
@@ -47,7 +48,7 @@ msgstr "Weet je zeker dat je de afbeeldings-analyse cache wilt verwijderen"
#: qt/app.py:184 #: qt/app.py:184
msgid "Picture cache cleared." msgid "Picture cache cleared."
msgstr "Afbeelding cache leeggemaakt" msgstr "Afbeelding cache leeggemaakt."
#: qt/app.py:251 #: qt/app.py:251
msgid "{} file (*.{})" msgid "{} file (*.{})"
@@ -55,7 +56,7 @@ msgstr "{} bestand (*.{})"
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options" msgid "Deletion Options"
msgstr "verwijder opties" msgstr "Verwijderopties"
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0 #: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files" msgid "Link deleted files"
@@ -125,7 +126,7 @@ msgstr "Resultaten venster"
#: qt/directories_dialog.py:66 #: qt/directories_dialog.py:66
msgid "Add Folder..." msgid "Add Folder..."
msgstr "Folder toevoegen" msgstr "Folder toevoegen..."
#: qt/directories_dialog.py:74 qt/result_window.py:100 #: qt/directories_dialog.py:74 qt/result_window.py:100
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
@@ -287,7 +288,7 @@ msgstr "Word gewicht"
#: 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 "vergelijk gelijkwaardige woorden" msgstr "Vergelijk gelijkwaardige woorden"
#: 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
@@ -307,7 +308,7 @@ msgstr "Verwijder lege folders tijdens weggooien of verplaatsen"
#: 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
msgid "Ignore duplicates hardlinking to the same file" msgid "Ignore duplicates hardlinking to the same file"
msgstr "negeer dubbelingen die hard gelinkt zijn aan het zelfde bestand" msgstr "Negeer dubbelingen die hard gelinkt zijn aan het zelfde bestand"
#: 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
@@ -633,7 +634,7 @@ msgstr "Folder selectie venster"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Font Size:" msgid "Font Size:"
msgstr "Font grote:" msgstr "Grootte lettertype:"
#: cocoa/en.lproj/Localizable.strings:0 #: cocoa/en.lproj/Localizable.strings:0
msgid "Hide dupeGuru" msgid "Hide dupeGuru"

View File

@@ -0,0 +1,122 @@
# Translators:
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021
#
msgid ""
msgstr ""
"Last-Translator: Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021\n"
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
"Language: tr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core\gui\ignore_list_table.py:19 core\gui\ignore_list_table.py:20
#: core\gui\problem_table.py:18
msgid "File Path"
msgstr "Dosya Yolu"
#: core\gui\problem_table.py:19
msgid "Error Message"
msgstr "Hata Mesajı"
#: core\me\prioritize.py:23
msgid "Duration"
msgstr "Süre"
#: core\me\prioritize.py:30 core\me\result_table.py:23
msgid "Bitrate"
msgstr "Bit hızı"
#: core\me\prioritize.py:37
msgid "Samplerate"
msgstr "Örnekleme hızı"
#: core\me\result_table.py:19 core\pe\result_table.py:19 core\prioritize.py:92
#: core\se\result_table.py:19
msgid "Filename"
msgstr "Dosya adı"
#: core\me\result_table.py:20 core\pe\result_table.py:20 core\prioritize.py:75
#: core\se\result_table.py:20
msgid "Folder"
msgstr "Dizin"
#: core\me\result_table.py:21
msgid "Size (MB)"
msgstr "Boyut (MB)"
#: core\me\result_table.py:22
msgid "Time"
msgstr "Zaman"
#: core\me\result_table.py:24
msgid "Sample Rate"
msgstr "Örnekleme Hızı"
#: core\me\result_table.py:25 core\pe\result_table.py:22 core\prioritize.py:65
#: core\se\result_table.py:22
msgid "Kind"
msgstr "Tür"
#: core\me\result_table.py:26 core\pe\result_table.py:25
#: core\prioritize.py:163 core\se\result_table.py:23
msgid "Modification"
msgstr "Düzenleme"
#: core\me\result_table.py:27
msgid "Title"
msgstr "Başlık"
#: core\me\result_table.py:28
msgid "Artist"
msgstr "Sanatçı"
#: core\me\result_table.py:29
msgid "Album"
msgstr "Albüm"
#: core\me\result_table.py:30
msgid "Genre"
msgstr "Tarz"
#: core\me\result_table.py:31
msgid "Year"
msgstr "Yıl"
#: core\me\result_table.py:32
msgid "Track Number"
msgstr "Parça Numarası"
#: core\me\result_table.py:33
msgid "Comment"
msgstr "Yorum"
#: core\me\result_table.py:34 core\pe\result_table.py:26
#: core\se\result_table.py:24
msgid "Match %"
msgstr "Eşleşme oranı %"
#: core\me\result_table.py:35 core\se\result_table.py:25
msgid "Words Used"
msgstr "Kullanılan Kelimeler"
#: core\me\result_table.py:36 core\pe\result_table.py:27
#: core\se\result_table.py:26
msgid "Dupe Count"
msgstr "Kopya Sayısı"
#: core\pe\prioritize.py:23 core\pe\result_table.py:23
msgid "Dimensions"
msgstr "Boyutlar"
#: core\pe\result_table.py:21 core\se\result_table.py:21
msgid "Size (KB)"
msgstr "Boyut (KB)"
#: core\pe\result_table.py:24
msgid "EXIF Timestamp"
msgstr "EXIF Zaman damgası"
#: core\prioritize.py:156
msgid "Size"
msgstr "Boyut"

View File

@@ -0,0 +1,258 @@
# Translators:
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021
#
msgid ""
msgstr ""
"Last-Translator: Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021\n"
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
"Language: tr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core\app.py:42
msgid "There are no marked duplicates. Nothing has been done."
msgstr "İşaretlenmiş kopya yok. Hiçbir işlem yapılmadı."
#: core\app.py:43
msgid "There are no selected duplicates. Nothing has been done."
msgstr "Seçilmiş kopya yok. Hiçbir işlem yapılmadı."
#: core\app.py:44
msgid ""
"You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?"
msgstr ""
"Aynı anda birçok dosyayı açmak üzeresiniz. Bu dosyaların neyle açıldığına "
"bağlı olarak, bunu yapmak büyük karışıklık yaratabilir. Yine de devam "
"edilsin mi?"
#: core\app.py:71
msgid "Scanning for duplicates"
msgstr "Kopyalar için taranıyor"
#: core\app.py:72
msgid "Loading"
msgstr "Yükleniyor"
#: core\app.py:73
msgid "Moving"
msgstr "Taşınıyor"
#: core\app.py:74
msgid "Copying"
msgstr "Kopyalanıyor"
#: core\app.py:75
msgid "Sending to Trash"
msgstr "Geri Dönüşüm Kutusuna gönderiliyor"
#: core\app.py:308
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 ""
"Önceki eylem hala tamamlanmadı. Henüz yeni bir eylem başlatamazsınız. Birkaç"
" saniye bekleyin, ardından tekrar deneyin."
#: core\app.py:318
msgid "No duplicates found."
msgstr "Hiç kopya bulunamadı."
#: core\app.py:333
msgid "All marked files were copied successfully."
msgstr "İşaretlenmiş tüm dosyalar başarıyla kopyalandı."
#: core\app.py:334
msgid "All marked files were moved successfully."
msgstr "İşaretlenmiş tüm dosyalar başarıyla taşındı."
#: core\app.py:335
msgid "All marked files were successfully sent to Trash."
msgstr "İşaretlenmiş tüm dosyalar başarıyla Geri Dönüşüm Kutusuna gönderildi."
#: core\app.py:343
msgid "Could not load file: {}"
msgstr "Dosya yüklenemedi: {}"
#: core\app.py:399
msgid "'{}' already is in the list."
msgstr "'{}' zaten listede."
#: core\app.py:401
msgid "'{}' does not exist."
msgstr "'{}' mevcut değil."
#: core\app.py:410
msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?"
msgstr ""
"Tüm seçili %deşleşmeleri sonraki taramalarda yok sayılacaktır. Devam edilsin"
" mi?"
#: core\app.py:486
msgid "Select a directory to copy marked files to"
msgstr "İşaretlenmiş dosyaları kopyalamak için bir dizin seçin"
#: core\app.py:487
msgid "Select a directory to move marked files to"
msgstr "İşaretlenmiş dosyaları taşımak için bir dizin seçin"
#: core\app.py:527
msgid "Select a destination for your exported CSV"
msgstr "Dışa aktarılacak CSV dosyası için bir hedef seçin"
#: core\app.py:534 core\app.py:801 core\app.py:811
msgid "Couldn't write to file: {}"
msgstr "Dosyaya yazılamadı: {}"
#: core\app.py:559
msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Özel bir komut ayarınız yok. Tercihlerinizden ayarlayabilirsiniz."
#: core\app.py:727 core\app.py:740
msgid "You are about to remove %d files from results. Continue?"
msgstr "Sonuçlardan%ddosyaları çıkarmak üzeresiniz. Devam edilsin mi?"
#: core\app.py:774
msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} yinelenen gruplar, yeniden önceliklendirme ile değiştirildi."
#: core\app.py:821
msgid "The selected directories contain no scannable file."
msgstr "Seçili dizinler taranabilir dosya içermiyor."
#: core\app.py:835
msgid "Collecting files to scan"
msgstr "Taranacak dosyalar toplanıyor"
#: core\app.py:891
msgid "%s (%d discarded)"
msgstr "%s(%d atıldı)"
#: core\engine.py:244 core\engine.py:288
msgid "0 matches found"
msgstr "0 eşleşme bulundu"
#: core\engine.py:262 core\engine.py:296
msgid "%d matches found"
msgstr "%deşleşme bulundu"
#: core\gui\deletion_options.py:73
msgid "You are sending {} file(s) to the Trash."
msgstr "{} dosyayı/dosyaları Geri Dönüşüm Kutusuna gönderiyorsunuz."
#: core\gui\exclude_list_table.py:15
msgid "Regular Expressions"
msgstr "Düzenli İfadeler"
#: core\gui\ignore_list_dialog.py:25
msgid "Do you really want to remove all %d items from the ignore list?"
msgstr ""
"Yok sayılanlar listesinden %d öğelerin tümünü çıkarmak istediğinize emin "
"misiniz?"
#: core\me\scanner.py:20 core\se\scanner.py:16
msgid "Filename"
msgstr "Dosya adı"
#: core\me\scanner.py:21
msgid "Filename - Fields"
msgstr "Dosya adı - Alanlar"
#: core\me\scanner.py:22
msgid "Filename - Fields (No Order)"
msgstr "Dosya Adı - Alanlar (Düzen Yok)"
#: core\me\scanner.py:23
msgid "Tags"
msgstr "Etiketler"
#: core\me\scanner.py:24 core\pe\scanner.py:21 core\se\scanner.py:17
msgid "Contents"
msgstr "İçindekiler"
#: core\pe\matchblock.py:72
msgid "Analyzed %d/%d pictures"
msgstr " %d/%d resim analiz edildi."
#: core\pe\matchblock.py:181
msgid "Performed %d/%d chunk matches"
msgstr "%d/%d öbek eşleştirme gerçekleştirildi"
#: core\pe\matchblock.py:191
msgid "Preparing for matching"
msgstr "Eşleştirmek için hazırlanılıyor"
#: core\pe\matchblock.py:244
msgid "Verified %d/%d matches"
msgstr "%d/%d eşleşmeler doğrulandı"
#: core\pe\matchexif.py:19
msgid "Read EXIF of %d/%d pictures"
msgstr "%d/%d resimlerin EXIF'i okunuyor"
#: core\pe\scanner.py:22
msgid "EXIF Timestamp"
msgstr "EXIF Zaman damgası"
#: core\prioritize.py:70
msgid "None"
msgstr "Hiçbiri"
#: core\prioritize.py:100
msgid "Ends with number"
msgstr "Sayıyla biter"
#: core\prioritize.py:101
msgid "Doesn't end with number"
msgstr "Sayıyla bitmez"
#: core\prioritize.py:102
msgid "Longest"
msgstr "En uzun"
#: core\prioritize.py:103
msgid "Shortest"
msgstr "En kısa"
#: core\prioritize.py:140
msgid "Highest"
msgstr "En yüksek"
#: core\prioritize.py:140
msgid "Lowest"
msgstr "En düşük"
#: core\prioritize.py:169
msgid "Newest"
msgstr "En yeni"
#: core\prioritize.py:169
msgid "Oldest"
msgstr "En eski"
#: core\results.py:142
msgid "%d / %d (%s / %s) duplicates marked."
msgstr "%d/%d(%s/%s) kopyalar işaretlendi."
#: core\results.py:149
msgid " filter: %s"
msgstr "filtrele: %s"
#: core\scanner.py:85
msgid "Read size of %d/%d files"
msgstr "%d/%d dosyaların boyutunu oku"
#: core\scanner.py:109
msgid "Read metadata of %d/%d files"
msgstr "%d/%d dosyaların üst verisini(metadata) oku"
#: core\scanner.py:147
msgid "Almost done! Fiddling with results..."
msgstr "Neredeyse bitti! Sonuçlarla uğraşılıyor..."
#: core\se\scanner.py:18
msgid "Folders"
msgstr "Dizinler"

947
locale/tr/LC_MESSAGES/ui.po Normal file
View File

@@ -0,0 +1,947 @@
# Translators:
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021
#
msgid ""
msgstr ""
"Last-Translator: Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021\n"
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
"Language: tr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: qt/app.py:81
msgid "Quit"
msgstr "Çık"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr "Seçenekler"
#: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List"
msgstr "Yoksayılanlar Listesi"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr "Resim Önbelliğini Temizle"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help"
msgstr "dupeGuru Yardımı"
#: qt/app.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "About dupeGuru"
msgstr "dupeGuru Hakkında"
#: qt/app.py:87
msgid "Open Debug Log"
msgstr "Hata Ayıklama Günlüğünü Aç"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
"Önbelleğe alınmış tüm resim analizlerinizi gerçekten kaldırmak istiyor "
"musunuz?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr "Resim önbelleği temizlendi."
#: qt/app.py:251
msgid "{} file (*.{})"
msgstr "{} dosya (*.{})"
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options"
msgstr "Silme Seçenekleri"
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files"
msgstr "Silinen dosyaları bağla"
#: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"After having deleted a duplicate, place a link targeting the reference file "
"to replace the deleted file."
msgstr ""
"Bir kopyayı sildikten sonra, silinen dosyayı değiştirmek için referans "
"dosyayı hedefleyen bir bağlantı yerleştirin."
#: qt/deletion_options.py:44
msgid "Hardlink"
msgstr "Hard link"
#: qt/deletion_options.py:44
msgid "Symlink"
msgstr "Sembolik link"
#: qt/deletion_options.py:48
msgid " (unsupported)"
msgstr "(desteklenmiyor)"
#: qt/deletion_options.py:49 cocoa/en.lproj/Localizable.strings:0
msgid "Directly delete files"
msgstr "Doğrudan dosyaları sil"
#: qt/deletion_options.py:51 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Instead of sending files to trash, delete them directly. This option is "
"usually used as a workaround when the normal deletion method doesn't work."
msgstr ""
"Dosyaları Geri Dönüşüm Kutusuna göndermek yerine, onları doğrudan sil. Bu "
"seçenek genellikle normal silme yöntemi çalışmadığında geçici bir çözüm "
"olarak kullanılır."
#: qt/deletion_options.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Proceed"
msgstr "Devam Et"
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
msgid "Cancel"
msgstr "İptal Et"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Attribute"
msgstr "Özellik"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Selected"
msgstr "Seçili"
#: qt/details_table.py:16 qt/directories_model.py:24
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reference"
msgstr "Referans"
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results..."
msgstr "Sonuçları Yükle..."
#: qt/directories_dialog.py:65 cocoa/en.lproj/Localizable.strings:0
msgid "Results Window"
msgstr "Sonuç Penceresi"
#: qt/directories_dialog.py:66
msgid "Add Folder..."
msgstr "Dizini Ekle..."
#: qt/directories_dialog.py:74 qt/result_window.py:100
#: cocoa/en.lproj/Localizable.strings:0
msgid "File"
msgstr "Dosya"
#: qt/directories_dialog.py:76 qt/result_window.py:108
msgid "View"
msgstr "Görüntüle"
#: qt/directories_dialog.py:78 qt/result_window.py:110
#: cocoa/en.lproj/Localizable.strings:0
msgid "Help"
msgstr "Yardım"
#: qt/directories_dialog.py:80 cocoa/en.lproj/Localizable.strings:0
msgid "Load Recent Results"
msgstr "Son Sonuçları Yükle"
#: qt/directories_dialog.py:116 cocoa/en.lproj/Localizable.strings:0
msgid "Application Mode:"
msgstr "Uygulama Modu:"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Music"
msgstr "Müzik"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Picture"
msgstr "Resim"
#: qt/directories_dialog.py:121 cocoa/en.lproj/Localizable.strings:0
msgid "Standard"
msgstr "Standart"
#: qt/directories_dialog.py:128 cocoa/en.lproj/Localizable.strings:0
msgid "Scan Type:"
msgstr "Tarama Türü:"
#: qt/directories_dialog.py:135
msgid "More Options"
msgstr "Daha Fazla Seçenek"
#: qt/directories_dialog.py:139 cocoa/en.lproj/Localizable.strings:0
msgid "Select folders to scan and press \"Scan\"."
msgstr "Taranacak dizinleri seçin ve \"Tara\"ya basın."
#: qt/directories_dialog.py:163 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results"
msgstr "Sonuçları Yükle"
#: qt/directories_dialog.py:166 cocoa/en.lproj/Localizable.strings:0
msgid "Scan"
msgstr "Tara"
#: qt/directories_dialog.py:230
msgid "Unsaved results"
msgstr "Kaydedilmeyen sonuçlar"
#: qt/directories_dialog.py:231 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to quit?"
msgstr "Kaydedilmeyen sonuçlarınız var, gerçekten çıkmak istiyor musunuz?"
#: qt/directories_dialog.py:239 cocoa/en.lproj/Localizable.strings:0
msgid "Select a folder to add to the scanning list"
msgstr "Tarama listesine eklemek için bir klasör seçin"
#: qt/directories_dialog.py:266 cocoa/en.lproj/Localizable.strings:0
msgid "Select a results file to load"
msgstr "Yüklenecek bir sonuç dosyası seçin"
#: qt/directories_dialog.py:267
msgid "All Files (*.*)"
msgstr "Tüm Dosyalar (*.*)"
#: qt/directories_dialog.py:267 qt/result_window.py:311
msgid "dupeGuru Results (*.dupeguru)"
msgstr "dupeGuru Sonuçları (*.dupeguru)"
#: qt/directories_dialog.py:278
msgid "Start a new scan"
msgstr "Yeni bir tarama başlat"
#: qt/directories_dialog.py:279 cocoa/en.lproj/Localizable.strings:0
msgid "You have unsaved results, do you really want to continue?"
msgstr ""
"Kaydedilmeyen sonuçlarınız var, gerçekten devam etmek istiyor musunuz?"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "Name"
msgstr "İsim"
#: qt/directories_model.py:23 cocoa/en.lproj/Localizable.strings:0
msgid "State"
msgstr "Durum"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Excluded"
msgstr "Hariç Tutulan"
#: qt/directories_model.py:24 cocoa/en.lproj/Localizable.strings:0
msgid "Normal"
msgstr "Normal"
#: qt/ignore_list_dialog.py:45 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected"
msgstr "Seçili Öğeyi Kaldır"
#: qt/ignore_list_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Clear"
msgstr "Temizle"
#: qt/ignore_list_dialog.py:47 qt/problem_dialog.py:61
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close"
msgstr "Kapat"
#: qt/me/details_dialog.py:18 qt/pe/details_dialog.py:24
#: qt/result_window.py:56 qt/result_window.py:192 qt/se/details_dialog.py:18
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details"
msgstr "Ayrıntılar"
#: qt/me/preferences_dialog.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Tags to scan:"
msgstr "Taranacak etiketler:"
#: qt/me/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Track"
msgstr "Parça"
#: qt/me/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Artist"
msgstr "Sanatçı"
#: qt/me/preferences_dialog.py:40 cocoa/en.lproj/Localizable.strings:0
msgid "Album"
msgstr "Albüm"
#: qt/me/preferences_dialog.py:42 cocoa/en.lproj/Localizable.strings:0
msgid "Title"
msgstr "Başlık"
#: qt/me/preferences_dialog.py:44 cocoa/en.lproj/Localizable.strings:0
msgid "Genre"
msgstr "Tarz"
#: qt/me/preferences_dialog.py:46 cocoa/en.lproj/Localizable.strings:0
msgid "Year"
msgstr "Yıl"
#: qt/me/preferences_dialog.py:50 qt/se/preferences_dialog.py:30
#: cocoa/en.lproj/Localizable.strings:0
msgid "Word weighting"
msgstr "Kelimeleri tartma"
#: qt/me/preferences_dialog.py:52 qt/se/preferences_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Match similar words"
msgstr "Benzer kelimeleri eşleştir"
#: qt/me/preferences_dialog.py:54 qt/pe/preferences_dialog.py:21
#: qt/se/preferences_dialog.py:34 cocoa/en.lproj/Localizable.strings:0
msgid "Can mix file kind"
msgstr "Dosya türünü karıştırabilir"
#: qt/me/preferences_dialog.py:56 qt/pe/preferences_dialog.py:23
#: qt/se/preferences_dialog.py:36 cocoa/en.lproj/Localizable.strings:0
msgid "Use regular expressions when filtering"
msgstr "Filtrelerken normal ifadeler kullan"
#: qt/me/preferences_dialog.py:58 qt/pe/preferences_dialog.py:25
#: qt/se/preferences_dialog.py:38 cocoa/en.lproj/Localizable.strings:0
msgid "Remove empty folders on delete or move"
msgstr "Silme veya taşıma sırasında boş klasörleri kaldır"
#: qt/me/preferences_dialog.py:60 qt/pe/preferences_dialog.py:27
#: qt/se/preferences_dialog.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Ignore duplicates hardlinking to the same file"
msgstr "Aynı dosyaya sabit bağlantı(hardlink) yapan kopyaları yoksay"
#: qt/me/preferences_dialog.py:62 qt/pe/preferences_dialog.py:29
#: qt/se/preferences_dialog.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Debug mode (restart required)"
msgstr "Hata ayıklama modu (yeniden başlatma gerektirir)"
#: qt/pe/preferences_dialog.py:19 cocoa/en.lproj/Localizable.strings:0
msgid "Match pictures of different dimensions"
msgstr "Farklı boyutlardaki resimleri eşleştir"
#: qt/preferences_dialog.py:43
msgid "Filter Hardness:"
msgstr "Filtre Sertliği:"
#: qt/preferences_dialog.py:69
msgid "More Results"
msgstr "Daha Fazla Sonuç"
#: qt/preferences_dialog.py:74
msgid "Fewer Results"
msgstr "Daha Az Sonuç"
#: qt/preferences_dialog.py:81
msgid "Font size:"
msgstr "Yazı boyutu:"
#: qt/preferences_dialog.py:85
msgid "Language:"
msgstr "Dil:"
#: qt/preferences_dialog.py:91 cocoa/en.lproj/Localizable.strings:0
msgid "Copy and Move:"
msgstr "Kopyala ve Taşı:"
#: qt/preferences_dialog.py:94 cocoa/en.lproj/Localizable.strings:0
msgid "Right in destination"
msgstr "Doğrudan hedef klasöre"
#: qt/preferences_dialog.py:95 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate relative path"
msgstr "Göreli yolu yeniden oluştur"
#: qt/preferences_dialog.py:96 cocoa/en.lproj/Localizable.strings:0
msgid "Recreate absolute path"
msgstr "Mutlak yolu yeniden oluştur"
#: qt/preferences_dialog.py:99
msgid "Custom Command (arguments: %d for dupe, %r for ref):"
msgstr "Özel Komut (argümanlar: %d kopya için, %r referans için):"
#: qt/preferences_dialog.py:174
msgid "dupeGuru has to restart for language changes to take effect."
msgstr ""
"Dil değişiklerinin etkili olması için dupeGuru'nun yeniden başlatılması "
"gerekir."
#: qt/prioritize_dialog.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize duplicates"
msgstr "Kopyaları yeniden önceliklendirin"
#: qt/prioritize_dialog.py:79 cocoa/en.lproj/Localizable.strings:0
msgid ""
"Add criteria to the right box and click OK to send the dupes that correspond"
" the best to these criteria to their respective group's reference position. "
"Read the help file for more information."
msgstr ""
"Sağdaki kutuya kriter ekleyin ve bu kriterlere en iyi uyan kopyaları ilgili "
"grubun referans konumuna göndermek için Tamam'a tıklayın. Daha fazla bilgi "
"için yardım dosyasını okuyun."
#: qt/problem_dialog.py:33 cocoa/en.lproj/Localizable.strings:0
msgid "Problems!"
msgstr "Problemler!"
#: qt/problem_dialog.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
"There were problems processing some (or all) of the files. The cause of "
"these problems are described in the table below. Those files were not "
"removed from your results."
msgstr ""
"Dosyaların bazılarını (veya tümünü) işlerken sorunlar oluştu. Bu sorunların "
"nedeni aşağıdaki tabloda açıklanmıştır. Bu dosyalar sonuçlarınızdan "
"kaldırılmadı."
#: qt/problem_dialog.py:56
msgid "Reveal Selected"
msgstr "Seçili Öğeyi Göster"
#: qt/result_window.py:57 qt/result_window.py:104 qt/result_window.py:167
#: qt/result_window.py:191 cocoa/en.lproj/Localizable.strings:0
msgid "Actions"
msgstr "Eylemler"
#: qt/result_window.py:58 cocoa/en.lproj/Localizable.strings:0
msgid "Show Dupes Only"
msgstr "Sadece Kopyaları Göster"
#: qt/result_window.py:59 cocoa/en.lproj/Localizable.strings:0
msgid "Show Delta Values"
msgstr "Delta Değerlerini Göster"
#: qt/result_window.py:60
msgid "Send Marked to Recycle Bin..."
msgstr "İşaretlileri Geri Dönüşüm Kutusuna Gönder..."
#: qt/result_window.py:61 cocoa/en.lproj/Localizable.strings:0
msgid "Move Marked to..."
msgstr "İşaretlileri Şuraya Taşı..."
#: qt/result_window.py:62 cocoa/en.lproj/Localizable.strings:0
msgid "Copy Marked to..."
msgstr "İşaretlileri Şuraya Kopyala..."
#: qt/result_window.py:63 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Marked from Results"
msgstr "Sonuçlardan İşaretlileri Kaldır"
#: qt/result_window.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..."
msgstr "Sonuçları yeniden önceliklendirin..."
#: qt/result_window.py:67 cocoa/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results"
msgstr "Sonuçlardan Seçili Öğeyi Kaldır"
#: qt/result_window.py:71 cocoa/en.lproj/Localizable.strings:0
msgid "Add Selected to Ignore List"
msgstr "Seçili Öğeyi Yok Sayılanlar Listesine Ekle"
#: qt/result_window.py:75 cocoa/en.lproj/Localizable.strings:0
msgid "Make Selected into Reference"
msgstr "Seçili Öğeyi Referans Yap"
#: qt/result_window.py:77 cocoa/en.lproj/Localizable.strings:0
msgid "Open Selected with Default Application"
msgstr "Seçili Öğeyi Varsayılan Uygulama ile Aç"
#: qt/result_window.py:80
msgid "Open Containing Folder of Selected"
msgstr "Seçili Öğenin Bulunduğu Klasörü Aç"
#: qt/result_window.py:82 cocoa/en.lproj/Localizable.strings:0
msgid "Rename Selected"
msgstr "Seçili Öğeyi Yeniden Adlandır"
#: qt/result_window.py:83 cocoa/en.lproj/Localizable.strings:0
msgid "Mark All"
msgstr "Tümünü İşaretle"
#: qt/result_window.py:84 cocoa/en.lproj/Localizable.strings:0
msgid "Mark None"
msgstr "Hiçbirini İşaretleme"
#: qt/result_window.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "Invert Marking"
msgstr "İşaretleri Tersine Çevir"
#: qt/result_window.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "Mark Selected"
msgstr "Seçili Öğeyi İşaretle"
#: qt/result_window.py:87
msgid "Export To HTML"
msgstr "HTML'ye Aktar"
#: qt/result_window.py:88
msgid "Export To CSV"
msgstr "CSV'ye Aktar"
#: qt/result_window.py:89 cocoa/en.lproj/Localizable.strings:0
msgid "Save Results..."
msgstr "Sonuçları Kaydet..."
#: qt/result_window.py:90 cocoa/en.lproj/Localizable.strings:0
msgid "Invoke Custom Command"
msgstr "Özel Komutu Çağır"
#: qt/result_window.py:102
msgid "Mark"
msgstr "İşaret"
#: qt/result_window.py:106 cocoa/en.lproj/Localizable.strings:0
msgid "Columns"
msgstr "Sütunlar"
#: qt/result_window.py:163
msgid "Reset to Defaults"
msgstr "Varsayılanlara Dön"
#: qt/result_window.py:185
msgid "{} Results"
msgstr "{} Sonuçlar"
#: qt/result_window.py:193 cocoa/en.lproj/Localizable.strings:0
msgid "Dupes Only"
msgstr "Sadece Kopyalar"
#: qt/result_window.py:194
msgid "Delta Values"
msgstr "Delta Değerleri"
#: qt/result_window.py:310 cocoa/en.lproj/Localizable.strings:0
msgid "Select a file to save your results to"
msgstr "Sonuçlarınızı kaydetmek için bir dosya seçin"
#: qt/se/preferences_dialog.py:41
msgid "Ignore files smaller than"
msgstr "Şu boyuttan küçük dosyaları yoksay"
#: qt/se/preferences_dialog.py:52 cocoa/en.lproj/Localizable.strings:0
msgid "KB"
msgstr "KB"
#: cocoa/en.lproj/Localizable.strings:0
msgid "%@ Results"
msgstr "%@ Sonuçlar"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Action"
msgstr "Eylem"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Add New Folder..."
msgstr "Yeni Klasör Ekle..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Advanced"
msgstr "Gelişmiş"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Automatically check for updates"
msgstr "Güncellemeleri otomatik olarak kontrol et"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Basic"
msgstr "Temel"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Bring All to Front"
msgstr "Tümünü Öne Getir"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Check for update..."
msgstr "Güncellemeleri kontrol et..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Close Window"
msgstr "Pencereyi Kapat"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Copy"
msgstr "Kopyala"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Custom command (arguments: %d for dupe, %r for ref):"
msgstr "Özel komutlar (argümanlar: %d kopya için, %r referans için):"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Cut"
msgstr "Kes"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Delta"
msgstr "Delta"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details of Selected File"
msgstr "Seçili Dosyanın Ayrıntıları"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Details Panel"
msgstr "Ayrıntılar Paneli"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Directories"
msgstr "Dizinler"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru"
msgstr "dupeGuru"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Preferences"
msgstr "dupeGuru Tercihleri"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Results"
msgstr "dupeGuru Sonuçları"
#: cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Website"
msgstr "dupeGuru Websitesi"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Edit"
msgstr "Düzenle"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to CSV"
msgstr "Sonuçları CSV'ye Aktar"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Export Results to XHTML"
msgstr "Sonuçları XHTML'ye Aktar"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Fewer results"
msgstr "Daha az sonuç"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter"
msgstr "Filtrele"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter hardness:"
msgstr "Filtre sertliği:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Filter Results..."
msgstr "Sonuçları Filtrele..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Folder Selection Window"
msgstr "Klasör Seçim Penceresi"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Font Size:"
msgstr "Yazı Tipi Boyutu:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide dupeGuru"
msgstr "dupeGuru'yu Gizle"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Hide Others"
msgstr "Diğerlerini Gizle"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore files smaller than:"
msgstr "Şu boyuttan küçük dosyaları yoksay:"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Load from file..."
msgstr "Dosyadan yükle..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Minimize"
msgstr "Küçült"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Mode"
msgstr "Mod"
#: cocoa/en.lproj/Localizable.strings:0
msgid "More results"
msgstr "Daha fazla sonuç"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ok"
msgstr "Tamam"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Paste"
msgstr "Yapıştır"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Preferences..."
msgstr "Tercihler..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quick Look"
msgstr "Hızlı Bakış"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Quit dupeGuru"
msgstr "dupeGuru'dan Çık"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset to Default"
msgstr "Varsayılana Dön"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reset To Defaults"
msgstr "Varsayılanlara Dön"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal"
msgstr "Ortaya Çıkar"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reveal Selected in Finder"
msgstr "Seçili Öğeyi Finder'da Göster"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Select All"
msgstr "Tümünü Seç"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Send Marked to Trash..."
msgstr "İşaretlileri Geri Dönüşüm Kutusuna Gönder..."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Services"
msgstr "Hizmetler"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Show All"
msgstr "Tümünü Göster"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Start Duplicate Scan"
msgstr "Kopyaları Taramayı Başlat"
#: cocoa/en.lproj/Localizable.strings:0
msgid "The name '%@' already exists."
msgstr "'%@' adı zaten var."
#: cocoa/en.lproj/Localizable.strings:0
msgid "Window"
msgstr "Pencere"
#: cocoa/en.lproj/Localizable.strings:0
msgid "Zoom"
msgstr "Yakınlaştır"
#: qt\app.py:158
msgid "Exclusion Filters"
msgstr "Harici Bırakma Filtreleri"
#: qt\directories_dialog.py:91
msgid "Scan Results"
msgstr "Tarama Sonuçları"
#: qt\directories_dialog.py:95
msgid "Load Directories..."
msgstr "Dizinleri Yükle..."
#: qt\directories_dialog.py:96
msgid "Save Directories..."
msgstr "Dizinleri Kaydet..."
#: qt\directories_dialog.py:337
msgid "Select a directories file to load"
msgstr "Yüklenecek bir dizin dosyası seçin"
#: qt\directories_dialog.py:338
msgid "dupeGuru Results (*.dupegurudirs)"
msgstr "dupeGuru Sonuçları (*.dupegurudirs)"
#: qt\directories_dialog.py:347
msgid "Select a file to save your directories to"
msgstr "Dizinlerinizi kaydetmek için bir dosya seçin"
#: qt\directories_dialog.py:348
msgid "dupeGuru Directories (*.dupegurudirs)"
msgstr "dupeGuru Dizinleri (*.dupegurudirs)"
#: qt\exclude_list_dialog.py:44
msgid "Add"
msgstr "Ekle"
#: qt\exclude_list_dialog.py:46
msgid "Restore defaults"
msgstr "Varsayılanları geri yükle"
#: qt\exclude_list_dialog.py:47
msgid "Test string"
msgstr "Test dizisi"
#: qt\exclude_list_dialog.py:83
msgid "Type a python regular expression here..."
msgstr "Buraya bir Python düzenli ifadesi yazın..."
#: qt\exclude_list_dialog.py:85
msgid "Type a file system path or filename here..."
msgstr "Buraya bir dosya sistemi yolu veya dosya adı yazın..."
#: qt\exclude_list_dialog.py:152
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 happen to match one of the regular expressions.<br>For each file collected two tests are perfomed on each of them to determine whether or not to filter them out:<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 no path separator in them will be compared to the full path to the file.</li><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>"
msgstr ""
"Bu (büyük/küçük harfe duyarlı) python düzenli ifadeleri, taramalar sırasında dosyaları filtreleyecektir.<br>Dizinler ayrıca, adları seçilen düzenli ifadelerden biriyle eşleşirse, Dizinler sekmesinde<strong>varsayılan durumları</strong>Hariç Tutuldu olarak ayarlanır.<br>Toplanan her dosya için, tamamen göz ardı edilip edilmeyeceğini belirlemek için dosyaların her birinin üzerinde iki test yapılır:<br><li>1. İçinde yol ayırıcı olmayan düzenli ifadeler yalnızca dosya adıyla karşılaştırılır.</li>\n"
"<li>2. İçinde yol ayırıcı olmayan normal ifadeler, dosyanın tam yolu ile karşılaştırılacaktır.</li><br>\n"
"Örnek: .PNG dosyalarını yalnızca \"My Pictures\" dizininden filtrelemek istiyorsanız:<br><code>.*My\\sPictures\\\\.*\\.png</code><br><br>Düzenli ifadeyi, test dizesi özelliğinin içine sahte bir yol yapıştırarak test edebilirsiniz:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Eşleşen normal ifadeler vurgulanacaktır.<br>En az bir vurgu varsa, test edilen yol taramalar sırasında yok sayılır<br><br>Nokta '.' ile başlayan dizinler ve dosyalar varsayılan olarak filtrelenir.<br><br>"
#: qt\exclude_list_table.py:36
msgid "Compilation error: "
msgstr "Derleme hatası:"
#: qt\pe\image_viewer.py:56
msgid "Increase zoom"
msgstr "Yakınlaştırmayı arttır"
#: qt\pe\image_viewer.py:66
msgid "Decrease zoom"
msgstr "Yakınlaştırmayı azalt"
#: qt\pe\image_viewer.py:71
msgid "Ctrl+/"
msgstr "Ctrl+/"
#: qt\pe\image_viewer.py:76
msgid "Normal size"
msgstr "Normal boyut"
#: qt\pe\image_viewer.py:81
msgid "Ctrl+*"
msgstr "Ctrl+*"
#: qt\pe\image_viewer.py:86
msgid "Best fit"
msgstr "En uygun"
#: qt\pe\preferences_dialog.py:49
msgid "Picture cache mode:"
msgstr "Resim önbellek modu:"
#: qt\pe\preferences_dialog.py:56
msgid "Override theme icons in viewer toolbar"
msgstr "Görüntüleyici araç çubuğundaki tema simgelerini geçersiz kıl"
#: qt\pe\preferences_dialog.py:58
msgid ""
"Use our own internal icons instead of those provided by the theme engine"
msgstr ""
"Tema motoru tarafından sağlananlar yerine kendi dahili simgelerimizi "
"kullanın"
#: qt\pe\preferences_dialog.py:66
msgid "Show scrollbars in image viewers"
msgstr "Resim görüntüleyicilerde kaydırma çubuklarını göster"
#: qt\pe\preferences_dialog.py:68
msgid ""
"When the image displayed doesn't fit the viewport, show scrollbars to span "
"the view around"
msgstr ""
"Görüntülenen görüntü görünüm alanına sığmadığında, görünümü etrafa yaymak "
"için kaydırma çubuklarını göster"
#: qt\preferences_dialog.py:156
msgid "Use default position for tab bar (requires restart)"
msgstr ""
"Sekme çubuğu için varsayılan konumu kullan (yeniden başlatma gerektirir)"
#: qt\preferences_dialog.py:158
msgid ""
"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."
msgstr ""
"Sekme çubuğunu ana menünün yanına değil altına yerleştirin\n"
"MacOS'ta sekme çubuğu bunun yerine pencerenin genişliğini dolduracaktır."
#: qt\preferences_dialog.py:172
msgid "Use bold font for references"
msgstr "Referanslar için kalın yazı tipi kullanın"
#: qt\preferences_dialog.py:176
msgid "Reference foreground color:"
msgstr "Referans ön plan rengi:"
#: qt\preferences_dialog.py:179
msgid "Reference background color:"
msgstr "Referans arka plan rengi:"
#: qt\preferences_dialog.py:182 qt\preferences_dialog.py:216
msgid "Delta foreground color:"
msgstr "Delta ön plan rengi:"
#: qt\preferences_dialog.py:195
msgid "Show the title bar and can be docked"
msgstr "Başlık çubuğunu görüntüleyebilir ve sabitleyebilirsiniz."
#: qt\preferences_dialog.py:197
msgid ""
"While the title bar is hidden, use the modifier key to drag the floating "
"window around"
msgstr ""
"Başlık çubuğu gizliyken, kayan pencereyi etrafında sürüklemek için "
"değiştirici tuşu kullanın."
#: qt\preferences_dialog.py:199
msgid "The title bar can only be disabled while the window is docked"
msgstr ""
"Başlık çubuğu yalnızca pencere sabitlendiğinde devre dışı bırakılabilir"
#: qt\preferences_dialog.py:202
msgid "Vertical title bar"
msgstr "Dikey başlık çubuğu"
#: qt\preferences_dialog.py:204
msgid ""
"Change the title bar from horizontal on top, to vertical on the left side"
msgstr "Başlık çubuğunu üstte yataydan sol tarafta dikey olarak değiştirin"
#: qt\tabbed_window.py:44
msgid "Show tab bar"
msgstr "Sekme çubuğunu göster"
#: qt\exclude_list_dialog.py:152
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>\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>"
msgstr ""
"Bu (büyük/küçük harfe duyarlı) python düzenli ifadeleri, taramalar sırasında dosyaları filtreleyecektir.<br>Dizinler ayrıca, adları seçilen düzenli ifadelerden biriyle eşleşirse, Dizinler sekmesinde <strong>varsayılan durumları</strong> Hariç Tutuldu olarak ayarlanır.<br>Toplanan her dosya için, tamamen göz ardı edilip edilmeyeceğini belirlemek için iki test yapılır:<br><li>1. İçinde yol ayırıcı olmayan düzenli ifadeler yalnızca dosya adıyla karşılaştırılacaktır.</li>\n"
"<li>2. İçinde en az bir yol ayırıcı bulunan düzenli ifadeler, dosyanın tam yolu ile karşılaştırılacaktır.</li><br>\n"
"<br>Örnek: .PNG dosyalarını yalnızca \"My Pictures\" dizininden filtrelemek istiyorsanız:<code>.*My\\sPictures\\\\.*\\.png</code><br><br>Test alanına sahte bir yol yapıştırdıktan sonra normal ifadeyi \"test dizesi\" düğmesiyle test edebilirsiniz:<br><code>C:\\\\User\\My Pictures\\test.png</code><br><br>\n"
"Eşleşen normal ifadeler vurgulanacaktır.<br>En az bir vurgu varsa, test edilen yol veya dosya adı taramalar sırasında yok sayılır.<br><br>Nokta '.' ile başlayan dizinler ve dosyalar varsayılan olarak filtrelenir.<br><br>"
#: qt\app.py:256
msgid "Results"
msgstr "Sonuçlar"
#: qt\preferences_dialog.py:150
msgid "General Interface"
msgstr "Genel Arayüz"
#: qt\preferences_dialog.py:176
msgid "Result Table"
msgstr "Sonuç Tablosu"
#: qt\preferences_dialog.py:205
msgid "Details Window"
msgstr "Ayrıntı Penceresi"
#: qt\preferences_dialog.py:285
msgid "General"
msgstr "Genel"
#: qt\preferences_dialog.py:286
msgid "Display"
msgstr "Görüntüle"

View File

@@ -11,7 +11,7 @@
1. Install Xcode if desired 1. Install Xcode if desired
2. Install [Homebrew][homebrew], if not on the path after install (arm based Macs) create `~/.zshrc` 2. Install [Homebrew][homebrew], if not on the path after install (arm based Macs) create `~/.zshrc`
with `export PATH="/opt/homebrew/bin:$PATH"`. Will need to reload terminal or source the file to take with `export PATH="/opt/homebrew/bin:$PATH"`. Will need to reload terminal or source the file to take
affect. effect.
3. Install qt5 with `brew`. If you are using a version of macos without system python 3.6+ then you will 3. Install qt5 with `brew`. If you are using a version of macos without system python 3.6+ then you will
also need to install that via brew or with pyenv. also need to install that via brew or with pyenv.

View File

@@ -271,6 +271,9 @@ class DupeGuru(QObject):
self.willSavePrefs.emit() self.willSavePrefs.emit()
self.prefs.save() self.prefs.save()
self.model.save() self.model.save()
# Workaround for #857, hide() or close().
if self.details_dialog is not None:
self.details_dialog.close()
QApplication.quit() QApplication.quit()
# --- Signals # --- Signals

View File

@@ -51,7 +51,7 @@ class DetailsDialog(QDockWidget):
if not self.titleBarWidget(): # default title bar if not self.titleBarWidget(): # default title bar
self.setTitleBarWidget(QWidget()) # disables title bar self.setTitleBarWidget(QWidget()) # disables title bar
# Windows (and MacOS?) users cannot move a floating window which # Windows (and MacOS?) users cannot move a floating window which
# has not native decoration so we force it to dock for now # has no native decoration so we force it to dock for now
if not ISLINUX: if not ISLINUX:
self.setFloating(False) self.setFloating(False)
elif self.titleBarWidget() is not None: # title bar is disabled elif self.titleBarWidget() is not None: # title bar is disabled

View File

@@ -116,31 +116,32 @@ class ExcludeListDialog(QDialog):
if not input_text: if not input_text:
self.reset_input_style() self.reset_input_style()
return return
# if at least one row matched, we know whether table is highlighted or not # If at least one row matched, we know whether table is highlighted or not
self._row_matched = self.model.test_string(input_text) self._row_matched = self.model.test_string(input_text)
self.table.refresh() self.table.refresh()
# Test the string currently in the input text box as well
input_regex = self.inputLine.text() input_regex = self.inputLine.text()
if not input_regex: if not input_regex:
self.reset_input_style() self.reset_input_style()
return return
compiled = None
try: try:
compiled = re.compile(input_regex) compiled = re.compile(input_regex)
except re.error: except re.error:
self.reset_input_style() self.reset_input_style()
return return
match = compiled.match(input_text) if self.model.is_match(input_text, compiled):
if match:
self._input_styled = True
self.inputLine.setStyleSheet("background-color: rgb(10, 200, 10);") self.inputLine.setStyleSheet("background-color: rgb(10, 200, 10);")
self._input_styled = True
else: else:
self.reset_input_style() self.reset_input_style()
def reset_input_style(self): def reset_input_style(self):
"""Reset regex input line background""" """Reset regex input line background"""
if self._input_styled: if self._input_styled:
self._input_styled = False
self.inputLine.setStyleSheet(self.styleSheet()) self.inputLine.setStyleSheet(self.styleSheet())
self._input_styled = False
def reset_table_style(self): def reset_table_style(self):
if self._row_matched: if self._row_matched:

View File

@@ -19,7 +19,6 @@ tr = trget("ui")
class DetailsDialog(DetailsDialogBase): class DetailsDialog(DetailsDialogBase):
def __init__(self, parent, app): def __init__(self, parent, app):
self.vController = None self.vController = None
self.app = app
super().__init__(parent, app) super().__init__(parent, app)
def _setupUi(self): def _setupUi(self):

View File

@@ -102,7 +102,7 @@ class Preferences(PreferencesBase):
self.details_dialog_override_theme_icons = False if not ISLINUX else True self.details_dialog_override_theme_icons = False if not ISLINUX else True
self.details_dialog_viewers_show_scrollbars = True self.details_dialog_viewers_show_scrollbars = True
self.result_table_ref_foreground_color = QColor(Qt.blue) self.result_table_ref_foreground_color = QColor(Qt.blue)
self.result_table_ref_background_color = QColor(Qt.darkGray) self.result_table_ref_background_color = QColor(Qt.lightGray)
self.result_table_delta_foreground_color = QColor(255, 142, 40) # orange self.result_table_delta_foreground_color = QColor(255, 142, 40) # orange
self.resultWindowIsMaximized = False self.resultWindowIsMaximized = False
self.resultWindowRect = None self.resultWindowRect = None

View File

@@ -41,23 +41,24 @@ from .preferences import Preferences
tr = trget("ui") tr = trget("ui")
SUPPORTED_LANGUAGES = [ SUPPORTED_LANGUAGES = [
"en", "cs",
"fr",
"de", "de",
"el", "el",
"zh_CN", "en",
"cs",
"it",
"hy",
"ru",
"uk",
"pt_BR",
"vi",
"pl_PL",
"ko",
"es", "es",
"nl", "fr",
"hy",
"it",
"ja", "ja",
"ko",
"nl",
"pl_PL",
"pt_BR",
"ru",
"tr",
"uk",
"vi",
"zh_CN",
] ]

View File

@@ -57,72 +57,76 @@ msgid "Go to Github"
msgstr "Přejít na Github" msgstr "Přejít na Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Anglicky."
#: qtlib\preferences.py:24
msgid "French"
msgstr "Francouzsky"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Německy"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "řecky"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "čínsky (zjednodušeně)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "česky" msgstr "česky"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "italsky" msgstr "Německy"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "arménsky" msgstr "řecky"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "korejsky" msgstr "Anglicky."
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "rusky"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "ukrajinsky"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "holandsky"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "polsky"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "brazilsky"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "španělsky" msgstr "španělsky"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Francouzsky"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "arménsky"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "italsky"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Japonština"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "korejsky"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "holandsky"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "polsky"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "brazilsky"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "rusky"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "ukrajinsky"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "vietnamsky" msgstr "vietnamsky"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Japonština" msgstr "čínsky (zjednodušeně)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Geh zu Github" msgstr "Geh zu Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Englisch"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Französisch"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Deutsch"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Griechisch"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Chinesisch (Vereinfachtes)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Tschechisch" msgstr "Tschechisch"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Italienisch" msgstr "Deutsch"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Armenisch" msgstr "Griechisch"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Koreanisch" msgstr "Englisch"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Russisch"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Ukrainisch"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Niederländisch"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Polnisch"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Brasilianisch"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Spanisch" msgstr "Spanisch"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Französisch"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Armenisch"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Italienisch"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Japanisch"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Koreanisch"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Niederländisch"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Polnisch"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Brasilianisch"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Russisch"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ukrainisch"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Vietnamesisch" msgstr "Vietnamesisch"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Japanisch" msgstr "Chinesisch (Vereinfachtes)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Επίσκεψη Github" msgstr "Επίσκεψη Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Αγγλικά"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Γαλλικά"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Γερμανικά"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Ελληνικά"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Κινέζικα (Απλοποιημένα)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Τσέχικα" msgstr "Τσέχικα"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Ιταλικά"
#: qtlib\preferences.py:30
msgid "Armenian"
msgstr "Αρμένικα"
#: qtlib\preferences.py:31
msgid "Korean"
msgstr "Κορεάτικα"
#: qtlib\preferences.py:32
msgid "Russian"
msgstr "Ρώσικα"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Ουκρανέζικα"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Γερμανικά" msgstr "Γερμανικά"
#: qtlib\preferences.py:35 #: qtlib\preferences.py:25
msgid "Polish" msgid "Greek"
msgstr "Πολωνικά" msgstr "Ελληνικά"
#: qtlib\preferences.py:36 #: qtlib\preferences.py:26
msgid "Brazilian" msgid "English"
msgstr "Βραζιλιάνικα" msgstr "Αγγλικά"
#: qtlib\preferences.py:37 #: qtlib\preferences.py:27
msgid "Spanish" msgid "Spanish"
msgstr "Ισπανικά" msgstr "Ισπανικά"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Γαλλικά"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Αρμένικα"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Ιταλικά"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Ιαπωνικά"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Κορεάτικα"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Γερμανικά"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Πολωνικά"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Βραζιλιάνικα"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Ρώσικα"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ουκρανέζικα"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Βιετναμέζικα" msgstr "Βιετναμέζικα"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Ιαπωνικά" msgstr "Κινέζικα (Απλοποιημένα)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Ir a Github" msgstr "Ir a Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Inglés"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Francés"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Alemán"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Griego"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Chino (simplificado)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Checo" msgstr "Checo"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Italiano" msgstr "Alemán"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Armenio" msgstr "Griego"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Coreano" msgstr "Inglés"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Ruso"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Ucraniano"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Holandés"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Polaco"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Brasileño"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Español" msgstr "Español"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Francés"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Armenio"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Italiano"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Japonés"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Coreano"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Holandés"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Polaco"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Brasileño"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Ruso"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ucraniano"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Vietnamita" msgstr "Vietnamita"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Japonés" msgstr "Chino (simplificado)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Aller sur Github" msgstr "Aller sur Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Anglais"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Français"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Allemand"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Grecque"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Chinois (Simplifié)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Tchèque" msgstr "Tchèque"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Italien" msgstr "Allemand"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Arménien" msgstr "Grecque"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Coréen" msgstr "Anglais"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Russe"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Ukrainien"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Néerlandais"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Polonais"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Brésilien"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Espagnol" msgstr "Espagnol"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Français"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Arménien"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Italien"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Japonais"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Coréen"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Néerlandais"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Polonais"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Brésilien"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Russe"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ukrainien"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Vietnamien" msgstr "Vietnamien"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Japonais" msgstr "Chinois (Simplifié)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Գնացեք Գիթուբ" msgstr "Գնացեք Գիթուբ"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Անգլերեն"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Ֆրանսերեն"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Գերմաներեն"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "հունարեն"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Չինարեն (Պարզեցված)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Չեխերեն" msgstr "Չեխերեն"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Իտալերեն" msgstr "Գերմաներեն"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "հայերեն" msgstr "հունարեն"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "կորեերեն" msgstr "Անգլերեն"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "ռուսերեն"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "ուկրաիներեն"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "հոլանդերեն"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "լեհերեն"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "բրազիլական"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Իսպաներեն" msgstr "Իսպաներեն"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Ֆրանսերեն"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "հայերեն"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Իտալերեն"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "ճապոներեն"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "կորեերեն"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "հոլանդերեն"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "լեհերեն"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "բրազիլական"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "ռուսերեն"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "ուկրաիներեն"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "վիետնամերեն" msgstr "վիետնամերեն"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "ճապոներեն" msgstr "Չինարեն (Պարզեցված)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -57,72 +57,76 @@ msgid "Go to Github"
msgstr "Apri in Github" msgstr "Apri in Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Inglese"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Francese"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Tedesco"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Greco"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Cinese (semplificato)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Ceco" msgstr "Ceco"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Italiano" msgstr "Tedesco"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Armeno" msgstr "Greco"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Coreano" msgstr "Inglese"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Russo"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Ucraino"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Olandese"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Polacco"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Brasiliano"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Spagnolo" msgstr "Spagnolo"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Francese"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Armeno"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Italiano"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Giapponese"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Coreano"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Olandese"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Polacco"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Brasiliano"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Russo"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ucraino"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Vietnamita" msgstr "Vietnamita"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Giapponese" msgstr "Cinese (semplificato)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -57,72 +57,76 @@ msgid "Go to Github"
msgstr "Githubに移動する" msgstr "Githubに移動する"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "英語"
#: qtlib\preferences.py:24
msgid "French"
msgstr "フランス語"
#: qtlib\preferences.py:25
msgid "German"
msgstr "ドイツ語"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "ギリシャ語"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "中国語(簡体字)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "チェコ語" msgstr "チェコ語"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "イタリア語" msgstr "ドイツ語"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "アルメニア語" msgstr "ギリシャ語"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "韓国語" msgstr "語"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "ロシア語"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "ウクライナ語"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "オランダ語"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "ポーランド語"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "ブラジル語"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "スペイン語" msgstr "スペイン語"
#: qtlib\preferences.py:28
msgid "French"
msgstr "フランス語"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "アルメニア語"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "イタリア語"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "日本語"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "韓国語"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "オランダ語"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "ポーランド語"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "ブラジル語"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "ロシア語"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "ウクライナ語"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "ベトナム語" msgstr "ベトナム語"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "日本語" msgstr "中国語(簡体字)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -57,72 +57,76 @@ msgid "Go to Github"
msgstr "Github로 이동" msgstr "Github로 이동"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "영어"
#: qtlib\preferences.py:24
msgid "French"
msgstr "프랑스어"
#: qtlib\preferences.py:25
msgid "German"
msgstr "독일어"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "그리스어"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "중국어 (간체)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "체코어" msgstr "체코어"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "이탈리아어" msgstr "독일어"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "아르메니아어" msgstr "그리스어"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "한국어" msgstr "어"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "러시아어"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "우크라이나어"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "네덜란드어"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "폴란드어"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "브라질 언어"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "스페인어" msgstr "스페인어"
#: qtlib\preferences.py:28
msgid "French"
msgstr "프랑스어"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "아르메니아어"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "이탈리아어"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "일본어"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "한국어"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "네덜란드어"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "폴란드어"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "브라질 언어"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "러시아어"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "우크라이나어"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "베트남어" msgstr "베트남어"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "일본어" msgstr "중국어 (간체)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -1,10 +1,11 @@
# Translators: # Translators:
# Andrew Senetar <arsenetar@gmail.com>, 2021 # Andrew Senetar <arsenetar@gmail.com>, 2021
# Fuan <jcfrt@posteo.net>, 2021 # Fuan <jcfrt@posteo.net>, 2021
# Bas <duvel3@gmail.com>, 2021
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Last-Translator: Fuan <jcfrt@posteo.net>, 2021\n" "Last-Translator: Bas <duvel3@gmail.com>, 2021\n"
"Language-Team: Dutch (https://www.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"
@@ -58,76 +59,80 @@ msgid "Go to Github"
msgstr "Ga naar Github" msgstr "Ga naar Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Engels"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Frans"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Duits"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Grieks"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "(Versimpeld) Chinees"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Tsjechisch" msgstr "Tsjechisch"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Italiaans" msgstr "Duits"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Armeens" msgstr "Grieks"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Koreaans" msgstr "Engels"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Russisch"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Oekraïens"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Nederlands"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Pools"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Braziliaans"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Spaans" msgstr "Spaans"
#: qtlib\preferences.py:38 #: qtlib\preferences.py:28
msgid "Vietnamese" msgid "French"
msgstr "Vietnamees" msgstr "Frans"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Armeens"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Italiaans"
#: qtlib\preferences.py:31
msgid "Japanese" msgid "Japanese"
msgstr "Japans" msgstr "Japans"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Koreaans"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Nederlands"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Pools"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Braziliaans"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Russisch"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Oekraïens"
#: qtlib\preferences.py:39
msgid "Vietnamese"
msgstr "Vietnamees"
#: qtlib\preferences.py:40
msgid "Chinese (Simplified)"
msgstr "(Versimpeld) Chinees"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"
msgstr "Duidelijke lijst" msgstr "Lijst leegmaken"
#: qtlib\search_edit.py:78 #: qtlib\search_edit.py:78
msgid "Search..." msgid "Search..."

View File

@@ -57,72 +57,76 @@ msgid "Go to Github"
msgstr "Przejdź do Github" msgstr "Przejdź do Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Angielski"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Francuski"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Niemiecki"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Grecki"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Chiński (uproszczony)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Czech" msgstr "Czech"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Włoski" msgstr "Niemiecki"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Ormiański" msgstr "Grecki"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Koreański" msgstr "Angielski"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Rosyjski"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Ukraiński"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Holenderski"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Polskie"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Brazylijski"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Hiszpański" msgstr "Hiszpański"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Francuski"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Ormiański"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Włoski"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Japońsku"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Koreański"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Holenderski"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Polskie"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Brazylijski"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Rosyjski"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ukraiński"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Wietnamski" msgstr "Wietnamski"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Japońsku" msgstr "Chiński (uproszczony)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Ir para o Github" msgstr "Ir para o Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Inglês"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Francês"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Alemão"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Grega"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Chinês (Simplificado)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Tcheco" msgstr "Tcheco"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Italiano" msgstr "Alemão"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Armênio" msgstr "Grega"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Coreano" msgstr "Inglês"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Russo"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Ucraniano"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Holandês"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Polonês"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Português Brasileiro"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Espanhol" msgstr "Espanhol"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Francês"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Armênio"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Italiano"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Japonês"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Coreano"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Holandês"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Polonês"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Português Brasileiro"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Russo"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ucraniano"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Vietnamita" msgstr "Vietnamita"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Japonês" msgstr "Chinês (Simplificado)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -44,71 +44,75 @@ msgid "Go to Github"
msgstr "" msgstr ""
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr ""
#: qtlib\preferences.py:24
msgid "French"
msgstr ""
#: qtlib\preferences.py:25
msgid "German"
msgstr ""
#: qtlib\preferences.py:26
msgid "Greek"
msgstr ""
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr ""
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "" msgstr ""
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "" msgstr ""
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "" msgstr ""
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "" msgstr ""
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr ""
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr ""
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr ""
#: qtlib\preferences.py:35
msgid "Polish"
msgstr ""
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr ""
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: qtlib\preferences.py:28
msgid "French"
msgstr ""
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr ""
#: qtlib\preferences.py:30
msgid "Italian"
msgstr ""
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr ""
#: qtlib\preferences.py:32
msgid "Korean"
msgstr ""
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr ""
#: qtlib\preferences.py:34
msgid "Polish"
msgstr ""
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr ""
#: qtlib\preferences.py:36
msgid "Russian"
msgstr ""
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Vietnamese" msgid "Ukrainian"
msgstr "" msgstr ""
#: qtlib\preferences.py:39 #: qtlib\preferences.py:39
msgid "Japanese" msgid "Vietnamese"
msgstr ""
#: qtlib\preferences.py:40
msgid "Chinese (Simplified)"
msgstr "" msgstr ""
#: qtlib\recent.py:54 #: qtlib\recent.py:54

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Перейти на Github" msgstr "Перейти на Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Английский"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Французский"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Немецкий"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Греческий"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Китайский (упрощенный)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Чешский" msgstr "Чешский"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Итальянский" msgstr "Немецкий"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Армянский" msgstr "Греческий"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Корейский" msgstr "Английский"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Русский"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Украинский"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Голландский"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Польский"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Бразильский"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Испанский" msgstr "Испанский"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Французский"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Армянский"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Итальянский"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Японский"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Корейский"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Голландский"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Польский"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Бразильский"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Русский"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Украинский"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Вьетнамский" msgstr "Вьетнамский"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Японский" msgstr "Китайский (упрощенный)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -0,0 +1,137 @@
# Translators:
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021
#
msgid ""
msgstr ""
"Last-Translator: Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021\n"
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
"Language: tr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: qtlib\about_box.py:43
msgid "About {}"
msgstr "Hakkında {}"
#: qtlib\about_box.py:65
msgid "Version {}"
msgstr "Sürüm {}"
#: qtlib\about_box.py:70
msgid "Licensed under GPLv3"
msgstr "GPLv3 kapsamında lisanslanmıştır."
#: qtlib\error_report_dialog.py:49
msgid "Error Report"
msgstr "Hata Raporu"
#: qtlib\error_report_dialog.py:53
msgid "Something went wrong. How about reporting the error?"
msgstr "Bir şeyler ters gitti. Hatayı rapor etmek ister misin?"
#: qtlib\error_report_dialog.py:59
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 ""
"Hata raporları Github'da sorun(issue) olarak bildirilmelidir. Yukarıdaki hata izlemeyi kopyalayabilir ve yeni bir sorun içine yapıştırabilirsiniz\n"
"\n"
"Lütfen yeni bir sorun oluşturmadan önce var olan sorunlar içinde arama yaptığınızdan emin olun. Ayrıca depoda bulunan en son sürümü test ettiğinizden emin olun, karşılaştığınız hata zaten düzeltilmiş olabilir.\n"
"\n"
"Hatayı nasıl aldığınızın açıklamasını eklemeniz gerçekten yardımcı olabilir. Teşekkürler!\n"
"\n"
"Bu hatadan sonra uygulama çalışmaya devam edebilse de, kararsız bir durumda olabilir, bu nedenle uygulamayı yeniden başlatmanız önerilir."
#: qtlib\error_report_dialog.py:75
msgid "Close"
msgstr "Kapat"
#: qtlib\error_report_dialog.py:79
msgid "Go to Github"
msgstr "Github'a git"
#: qtlib\preferences.py:23
msgid "Czech"
msgstr "Çekçe"
#: qtlib\preferences.py:24
msgid "German"
msgstr "Almanca"
#: qtlib\preferences.py:25
msgid "Greek"
msgstr "Yunanca"
#: qtlib\preferences.py:26
msgid "English"
msgstr "İngilizce"
#: qtlib\preferences.py:27
msgid "Spanish"
msgstr "İspanyolca"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Fransızca"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Ermenice"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "İtalyanca"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Japonca"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Korece"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Flemenkçe"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Lehçe"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Brezilya Portekizcesi"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Rusça"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Ukraynaca"
#: qtlib\preferences.py:39
msgid "Vietnamese"
msgstr "Vietnamca"
#: qtlib\preferences.py:40
msgid "Chinese (Simplified)"
msgstr "Çince (Basitleştirilmiş)"
#: qtlib\recent.py:54
msgid "Clear List"
msgstr "Listeyi Temizle"
#: qtlib\search_edit.py:78
msgid "Search..."
msgstr "Ara..."

View File

@@ -58,72 +58,76 @@ msgid "Go to Github"
msgstr "Перейдіть до Github" msgstr "Перейдіть до Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Англійська"
#: qtlib\preferences.py:24
msgid "French"
msgstr "Французька"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Німецька"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Німецька"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Китайська (спрощена)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Чеська" msgstr "Чеська"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Італійська" msgstr "Німецька"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "Вірменська" msgstr "Німецька"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Корейська" msgstr "Англійська"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Російська"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Українська"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Голландська"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Польська"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Бразильська"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Іспанська" msgstr "Іспанська"
#: qtlib\preferences.py:28
msgid "French"
msgstr "Французька"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "Вірменська"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Італійська"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "Японський"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Корейська"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Голландська"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Польська"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Бразильська"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Російська"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Українська"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "В'єтнамська" msgstr "В'єтнамська"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "Японський" msgstr "Китайська (спрощена)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -57,72 +57,76 @@ msgid "Go to Github"
msgstr "Truy cập Github" msgstr "Truy cập Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "Ngôn ngữ tiếng anh"
#: qtlib\preferences.py:24
msgid "French"
msgstr "ngôn ngữ Pháp"
#: qtlib\preferences.py:25
msgid "German"
msgstr "Tiếng Đức"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "Ngôn ngữ Hy lạp"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "Ngôn ngữ Trung Quốc (giản thể)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "Tiếng Séc" msgstr "Tiếng Séc"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "Ngôn ngữ Ý" msgstr "Tiếng Đức"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "ngôn ngữ Armenia" msgstr "Ngôn ngữ Hy lạp"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "Ngôn ngữ Hàn Quốc" msgstr "Ngôn ngữ tiếng anh"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "Ngôn ngữ Nga"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "Tiếng Ukraina"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "Tiếng Hà Lan"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "Ngôn ngữ Ba Lan"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "Ngôn ngữ Brazil"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "Tiếng Tây Ban Nha" msgstr "Tiếng Tây Ban Nha"
#: qtlib\preferences.py:28
msgid "French"
msgstr "ngôn ngữ Pháp"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "ngôn ngữ Armenia"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "Ngôn ngữ Ý"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "tiếng Nhật"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "Ngôn ngữ Hàn Quốc"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "Tiếng Hà Lan"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "Ngôn ngữ Ba Lan"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "Ngôn ngữ Brazil"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "Ngôn ngữ Nga"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "Tiếng Ukraina"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "Ngôn ngữ tiếng Việt" msgstr "Ngôn ngữ tiếng Việt"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "tiếng Nhật" msgstr "Ngôn ngữ Trung Quốc (giản thể)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -59,72 +59,76 @@ msgid "Go to Github"
msgstr "前往Github" msgstr "前往Github"
#: qtlib\preferences.py:23 #: qtlib\preferences.py:23
msgid "English"
msgstr "英语"
#: qtlib\preferences.py:24
msgid "French"
msgstr "法语"
#: qtlib\preferences.py:25
msgid "German"
msgstr "德语"
#: qtlib\preferences.py:26
msgid "Greek"
msgstr "希腊语"
#: qtlib\preferences.py:27
msgid "Chinese (Simplified)"
msgstr "中文(简体)"
#: qtlib\preferences.py:28
msgid "Czech" msgid "Czech"
msgstr "捷克语" msgstr "捷克语"
#: qtlib\preferences.py:29 #: qtlib\preferences.py:24
msgid "Italian" msgid "German"
msgstr "意大利语" msgstr "语"
#: qtlib\preferences.py:30 #: qtlib\preferences.py:25
msgid "Armenian" msgid "Greek"
msgstr "亚美尼亚语" msgstr "希腊语"
#: qtlib\preferences.py:31 #: qtlib\preferences.py:26
msgid "Korean" msgid "English"
msgstr "语" msgstr "语"
#: qtlib\preferences.py:32 #: qtlib\preferences.py:27
msgid "Russian"
msgstr "俄语"
#: qtlib\preferences.py:33
msgid "Ukrainian"
msgstr "乌克兰语"
#: qtlib\preferences.py:34
msgid "Dutch"
msgstr "荷兰语"
#: qtlib\preferences.py:35
msgid "Polish"
msgstr "波兰语"
#: qtlib\preferences.py:36
msgid "Brazilian"
msgstr "巴西葡萄牙语"
#: qtlib\preferences.py:37
msgid "Spanish" msgid "Spanish"
msgstr "西班牙语" msgstr "西班牙语"
#: qtlib\preferences.py:28
msgid "French"
msgstr "法语"
#: qtlib\preferences.py:29
msgid "Armenian"
msgstr "亚美尼亚语"
#: qtlib\preferences.py:30
msgid "Italian"
msgstr "意大利语"
#: qtlib\preferences.py:31
msgid "Japanese"
msgstr "日语"
#: qtlib\preferences.py:32
msgid "Korean"
msgstr "韩语"
#: qtlib\preferences.py:33
msgid "Dutch"
msgstr "荷兰语"
#: qtlib\preferences.py:34
msgid "Polish"
msgstr "波兰语"
#: qtlib\preferences.py:35
msgid "Brazilian"
msgstr "巴西葡萄牙语"
#: qtlib\preferences.py:36
msgid "Russian"
msgstr "俄语"
#: qtlib\preferences.py:37
msgid "Turkish"
msgstr ""
#: qtlib\preferences.py:38 #: qtlib\preferences.py:38
msgid "Ukrainian"
msgstr "乌克兰语"
#: qtlib\preferences.py:39
msgid "Vietnamese" msgid "Vietnamese"
msgstr "越南语" msgstr "越南语"
#: qtlib\preferences.py:39 #: qtlib\preferences.py:40
msgid "Japanese" msgid "Chinese (Simplified)"
msgstr "日语" msgstr "中文(简体)"
#: qtlib\recent.py:54 #: qtlib\recent.py:54
msgid "Clear List" msgid "Clear List"

View File

@@ -20,23 +20,24 @@ tr = trget("qtlib")
def get_langnames(): def get_langnames():
return { return {
"en": tr("English"), "cs": tr("Czech"),
"fr": tr("French"),
"de": tr("German"), "de": tr("German"),
"el": tr("Greek"), "el": tr("Greek"),
"zh_CN": tr("Chinese (Simplified)"), "en": tr("English"),
"cs": tr("Czech"), "es": tr("Spanish"),
"it": tr("Italian"), "fr": tr("French"),
"hy": tr("Armenian"), "hy": tr("Armenian"),
"it": tr("Italian"),
"ja": tr("Japanese"),
"ko": tr("Korean"), "ko": tr("Korean"),
"ru": tr("Russian"),
"uk": tr("Ukrainian"),
"nl": tr("Dutch"), "nl": tr("Dutch"),
"pl_PL": tr("Polish"), "pl_PL": tr("Polish"),
"pt_BR": tr("Brazilian"), "pt_BR": tr("Brazilian"),
"es": tr("Spanish"), "ru": tr("Russian"),
"tr": tr("Turkish"),
"uk": tr("Ukrainian"),
"vi": tr("Vietnamese"), "vi": tr("Vietnamese"),
"ja": tr("Japanese"), "zh_CN": tr("Chinese (Simplified)"),
} }

View File

@@ -7,7 +7,7 @@
; NOTE: ; NOTE:
; If SOURCEPATH is not set it will default to build (uses subdir based on app). ; If SOURCEPATH is not set it will default to build (uses subdir based on app).
;============================================================================== ;==============================================================================
Unicode true
; Compression Setting ; Compression Setting
SetCompressor /SOLID lzma SetCompressor /SOLID lzma
; General Headers ; General Headers