From 1b157e7abbf8523fd2f0fb1cb28447fccea9cd29 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Mon, 23 Jan 2017 15:07:30 +0530 Subject: [PATCH 001/173] Add tooltip for Scan toolbar button --- picard/ui/mainwindow.py | 1 + 1 file changed, 1 insertion(+) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 3229f6b71..9386932cc 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -417,6 +417,7 @@ class MainWindow(QtGui.QMainWindow): self.analyze_action = QtGui.QAction(icontheme.lookup('picard-analyze'), _(u"&Scan"), self) self.analyze_action.setStatusTip(_(u"Use AcoustID audio fingerprint to identify the files by the actual music, even if they have no metadata")) self.analyze_action.setEnabled(False) + self.analyze_action.setToolTip(_(u'Identify the file using its AcoustID audio fingerprint')) # TR: Keyboard shortcut for "Analyze" self.analyze_action.setShortcut(QtGui.QKeySequence(_(u"Ctrl+Y"))) self.analyze_action.triggered.connect(self.analyze) From 14f123d5d41487f7b1f2b77e69ac48a65bfbd24a Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Mon, 23 Jan 2017 20:08:24 +0530 Subject: [PATCH 002/173] Remove monkey patching of windows file write methods --- picard/formats/__init__.py | 101 ------------------------------------- 1 file changed, 101 deletions(-) diff --git a/picard/formats/__init__.py b/picard/formats/__init__.py index cae2cc71c..8d649d04a 100644 --- a/picard/formats/__init__.py +++ b/picard/formats/__init__.py @@ -84,107 +84,6 @@ def open(filename): return None -def _insert_bytes_no_mmap(fobj, size, offset, BUFFER_SIZE=2**16): - """Insert size bytes of empty space starting at offset. - - fobj must be an open file object, open rb+ or - equivalent. Mutagen tries to use mmap to resize the file, but - falls back to a significantly slower method if mmap fails. - """ - assert 0 < size - assert 0 <= offset - locked = False - fobj.seek(0, 2) - filesize = fobj.tell() - movesize = filesize - offset - fobj.write('\x00' * size) - fobj.flush() - try: - locked = _win32_locking(fobj, filesize, msvcrt.LK_LOCK) - fobj.truncate(filesize) - - fobj.seek(0, 2) - padsize = size - # Don't generate an enormous string if we need to pad - # the file out several megs. - while padsize: - addsize = min(BUFFER_SIZE, padsize) - fobj.write("\x00" * addsize) - padsize -= addsize - - fobj.seek(filesize, 0) - while movesize: - # At the start of this loop, fobj is pointing at the end - # of the data we need to move, which is of movesize length. - thismove = min(BUFFER_SIZE, movesize) - # Seek back however much we're going to read this frame. - fobj.seek(-thismove, 1) - nextpos = fobj.tell() - # Read it, so we're back at the end. - data = fobj.read(thismove) - # Seek back to where we need to write it. - fobj.seek(-thismove + size, 1) - # Write it. - fobj.write(data) - # And seek back to the end of the unmoved data. - fobj.seek(nextpos) - movesize -= thismove - - fobj.flush() - finally: - if locked: - _win32_locking(fobj, filesize, msvcrt.LK_UNLCK) - - -def _delete_bytes_no_mmap(fobj, size, offset, BUFFER_SIZE=2**16): - """Delete size bytes of empty space starting at offset. - - fobj must be an open file object, open rb+ or - equivalent. Mutagen tries to use mmap to resize the file, but - falls back to a significantly slower method if mmap fails. - """ - locked = False - assert 0 < size - assert 0 <= offset - fobj.seek(0, 2) - filesize = fobj.tell() - movesize = filesize - offset - size - assert 0 <= movesize - try: - if movesize > 0: - fobj.flush() - locked = _win32_locking(fobj, filesize, msvcrt.LK_LOCK) - fobj.seek(offset + size) - buf = fobj.read(BUFFER_SIZE) - while buf: - fobj.seek(offset) - fobj.write(buf) - offset += len(buf) - fobj.seek(offset + size) - buf = fobj.read(BUFFER_SIZE) - fobj.truncate(filesize - size) - fobj.flush() - finally: - if locked: - _win32_locking(fobj, filesize, msvcrt.LK_UNLCK) - - -def _win32_locking(fobj, nbytes, mode): - try: - fobj.seek(0) - msvcrt.locking(fobj.fileno(), mode, nbytes) - except IOError: - return False - else: - return True - - -if sys.platform == 'win32': - import msvcrt - _util.insert_bytes = _insert_bytes_no_mmap - _util.delete_bytes = _delete_bytes_no_mmap - - from picard.formats.id3 import ( AiffFile, MP3File, From 5924ffd8c97af560f8342d11e17a8b484610da9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20=E2=80=9CFreso=E2=80=9D=20S=2E=20Olesen?= Date: Thu, 26 Jan 2017 14:04:23 +0100 Subject: [PATCH 003/173] PICARD-951: Always use HTTPS for musicbrainz.org. MusicBrainz.org is eventually going to go all HTTPS-only, though the webservice for now can still be reached via HTTP. To help the move to HTTPS, this commit makes URLs built via `build_qurl()` always use HTTPS when going to a MusicBrainz server (as defined by the `MUSICBRAINZ_SERVERS` constant). This also means that the check in the `build_qurl()` function for whether a given page/URL is/requires an authentication for MusicBrainz is now redundant, as we're always using HTTPS on MusicBrainz, regardless of login/authentication status. --- picard/oauth.py | 2 +- picard/util/__init__.py | 8 +++----- picard/webservice.py | 3 +-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/picard/oauth.py b/picard/oauth.py index f88a2534a..2ec151200 100644 --- a/picard/oauth.py +++ b/picard/oauth.py @@ -74,7 +74,7 @@ class OAuthManager(object): MUSICBRAINZ_OAUTH_CLIENT_ID, "redirect_uri": "urn:ietf:wg:oauth:2.0:oob", "scope": scopes} url = build_qurl(host, port, path="/oauth2/authorize", - queryargs=params, mblogin=True) + queryargs=params) return str(url.toEncoded()) def set_refresh_token(self, refresh_token, scopes): diff --git a/picard/util/__init__.py b/picard/util/__init__.py index c5d392f78..5394f43e7 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -383,21 +383,19 @@ def album_artist_from_path(filename, album, artist): return album, artist -def build_qurl(host, port=80, path=None, mblogin=False, queryargs=None): +def build_qurl(host, port=80, path=None, queryargs=None): """ Builds and returns a QUrl object from `host`, `port` and `path` and automatically enables HTTPS if necessary. - Setting `mblogin` to True forces HTTPS on MusicBrainz' servers. - Encoded query arguments can be provided in `queryargs`, a dictionary mapping field names to values. """ url = QtCore.QUrl() url.setHost(host) url.setPort(port) - if (# Login is required and we're contacting an MB server - (mblogin and host in MUSICBRAINZ_SERVERS and port == 80) or + if (# We're contacting a MusicBrainz server + (host in MUSICBRAINZ_SERVERS and port == 80) or # Or we're contacting some other server via HTTPS. port == 443): url.setScheme("https") diff --git a/picard/webservice.py b/picard/webservice.py index abf61c655..581641f86 100644 --- a/picard/webservice.py +++ b/picard/webservice.py @@ -189,8 +189,7 @@ class XmlWebService(QtCore.QObject): def _start_request_continue(self, method, host, port, path, data, handler, xml, mblogin=False, cacheloadcontrol=None, refresh=None, access_token=None, queryargs=None): - url = build_qurl(host, port, path=path, mblogin=mblogin, - queryargs=queryargs) + url = build_qurl(host, port, path=path, queryargs=queryargs) request = QtNetwork.QNetworkRequest(url) if mblogin and access_token: request.setRawHeader("Authorization", "Bearer %s" % access_token) From 08722cf9eeaa44d0ca82820f8be141692b09eb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20=E2=80=9CFreso=E2=80=9D=20S=2E=20Olesen?= Date: Thu, 26 Jan 2017 16:08:52 +0100 Subject: [PATCH 004/173] PICARD-952: Use HTTPS for Cover Art Archive. --- picard/const/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/const/__init__.py b/picard/const/__init__.py index 12766e489..5f22eb3dc 100644 --- a/picard/const/__init__.py +++ b/picard/const/__init__.py @@ -48,7 +48,7 @@ MUSICBRAINZ_OAUTH_CLIENT_SECRET = 'xIsvXbIuntaLuRRhzuazOA' # Cover art archive URL and port CAA_HOST = "coverartarchive.org" -CAA_PORT = 80 +CAA_PORT = 443 # URLs PICARD_URLS = { From 533f1688271f9e5ba71074555c6ac0894f00fb5b Mon Sep 17 00:00:00 2001 From: Sophist Date: Thu, 26 Jan 2017 16:36:12 +0000 Subject: [PATCH 005/173] PICARD-953: Show album with extra tracks unmatched Resolves [PICARD-953](https://tickets.metabrainz.org/browse/PICARD-953). If an album has unmatched files ii is shown as incomplete even if all album tracks are matched to one file. Although the terminology would suggest that such an album is "complete", in practical terms the album is not perfect because in all likelihood the user needs to select a different release with more tracks. --- picard/album.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/picard/album.py b/picard/album.py index ee0e02210..ad51448cb 100644 --- a/picard/album.py +++ b/picard/album.py @@ -485,6 +485,8 @@ class Album(DataObject, Item): for track in self.tracks: if not track.is_complete(): return False + if self.get_num_unmatched_files(): + return False else: return True From e85febfd2357b558b3f83d41e2459b062ff29d46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20=E2=80=9CFreso=E2=80=9D=20S=2E=20Olesen?= Date: Thu, 26 Jan 2017 18:26:38 +0100 Subject: [PATCH 006/173] Don't check port when contacting musicbrainz.org. If we're always using HTTPS when contacting musicbrainz.org, there's no reason to check for the port at all, so let's not. --- picard/util/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/util/__init__.py b/picard/util/__init__.py index 5394f43e7..b6bff611f 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -395,9 +395,9 @@ def build_qurl(host, port=80, path=None, queryargs=None): url.setHost(host) url.setPort(port) if (# We're contacting a MusicBrainz server - (host in MUSICBRAINZ_SERVERS and port == 80) or + host in MUSICBRAINZ_SERVERS or # Or we're contacting some other server via HTTPS. - port == 443): + port == 443): url.setScheme("https") url.setPort(443) else: From 8789668ea281ed614b58b4a736b06714a2747f00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20=E2=80=9CFreso=E2=80=9D=20S=2E=20Olesen?= Date: Thu, 26 Jan 2017 19:00:21 +0100 Subject: [PATCH 007/173] Clean up in-line comments in `build_qurl()`. After "refactoring" for PICARD-951, the in-line comments in the `build_qurl()` provide pretty much no information that isn't readily readable from the surrounding code. --- picard/util/__init__.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/picard/util/__init__.py b/picard/util/__init__.py index b6bff611f..b573cda41 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -394,12 +394,10 @@ def build_qurl(host, port=80, path=None, queryargs=None): url = QtCore.QUrl() url.setHost(host) url.setPort(port) - if (# We're contacting a MusicBrainz server - host in MUSICBRAINZ_SERVERS or - # Or we're contacting some other server via HTTPS. - port == 443): - url.setScheme("https") - url.setPort(443) + + if (host in MUSICBRAINZ_SERVERS or port == 443): + url.setScheme("https") + url.setPort(443) else: url.setScheme("http") From 256d0ef3ead0f9c7036c9fcbe87cd33977b88ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20=E2=80=9CFreso=E2=80=9D=20S=2E=20Olesen?= Date: Sun, 29 Jan 2017 17:23:34 +0100 Subject: [PATCH 008/173] Set default server port to 443. Since the code now always forces HTTPS (ie., port 443) connections to MUSICBRAINZ_SERVERS, having port set to 80 means that the interface shows musicbrainz.org:80 as the default, while it will actually be connecting to musicbrainz.org:443. So this change makes the interface more consistent with what is actually going on. See discussion from and onwards: https://github.com/metabrainz/picard/pull/600#issuecomment-275917095 --- picard/ui/options/general.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/ui/options/general.py b/picard/ui/options/general.py index 822e47155..2978d6708 100644 --- a/picard/ui/options/general.py +++ b/picard/ui/options/general.py @@ -37,7 +37,7 @@ class GeneralOptionsPage(OptionsPage): options = [ config.TextOption("setting", "server_host", MUSICBRAINZ_SERVERS[0]), - config.IntOption("setting", "server_port", 80), + config.IntOption("setting", "server_port", 443), config.TextOption("persist", "oauth_refresh_token", ""), config.BoolOption("setting", "analyze_new_files", False), config.BoolOption("setting", "ignore_file_mbids", False), From 784df7b3ed3ee5672485c584c9c7076dd1834bb3 Mon Sep 17 00:00:00 2001 From: Sophist Date: Wed, 1 Feb 2017 15:42:46 +0000 Subject: [PATCH 009/173] PICARD-972: Avoid save if file removed Handles both removal before save starts and removal whilst file is being saved. --- picard/file.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/picard/file.py b/picard/file.py index b2f45d14d..bec53b9ab 100644 --- a/picard/file.py +++ b/picard/file.py @@ -176,6 +176,9 @@ class File(QtCore.QObject, Item): def _save_and_rename(self, old_filename, metadata): """Save the metadata.""" + # Check that file has not been removed since thread was queued + if self.state == File.REMOVED: + return None new_filename = old_filename if not config.setting["dont_write_tags"]: encoded_old_filename = encode_filename(old_filename) @@ -222,6 +225,9 @@ class File(QtCore.QObject, Item): raise OSError def _saving_finished(self, result=None, error=None): + # Handle file removed + if self.state == File.REMOVED and not result: + return old_filename = new_filename = self.filename if error is not None: self.error = str(error) @@ -247,8 +253,9 @@ class File(QtCore.QObject, Item): self.clear_pending() self._add_path_to_metadata(self.orig_metadata) - del self.tagger.files[old_filename] - self.tagger.files[new_filename] = self + if self.state != File.REMOVED: + del self.tagger.files[old_filename] + self.tagger.files[new_filename] = self def _save(self, filename, metadata): """Save the metadata.""" From cebc2387d76f80db24fda2daf8dbc4ec790ca232 Mon Sep 17 00:00:00 2001 From: Sophist Date: Wed, 1 Feb 2017 22:25:22 +0000 Subject: [PATCH 010/173] Add explanatory comment and check for None --- picard/file.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/picard/file.py b/picard/file.py index bec53b9ab..2835b824b 100644 --- a/picard/file.py +++ b/picard/file.py @@ -225,8 +225,9 @@ class File(QtCore.QObject, Item): raise OSError def _saving_finished(self, result=None, error=None): - # Handle file removed - if self.state == File.REMOVED and not result: + # Handle file removed before save + # Result is None if save was skipped because file was removed. + if self.state == File.REMOVED and result is not None: return old_filename = new_filename = self.filename if error is not None: From b56f9c862e03be03eda3c3ff0962482130774bb9 Mon Sep 17 00:00:00 2001 From: Sophist Date: Thu, 2 Feb 2017 00:10:24 +0000 Subject: [PATCH 011/173] Correct typo. --- picard/file.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/file.py b/picard/file.py index 2835b824b..c9ceb7033 100644 --- a/picard/file.py +++ b/picard/file.py @@ -226,8 +226,8 @@ class File(QtCore.QObject, Item): def _saving_finished(self, result=None, error=None): # Handle file removed before save - # Result is None if save was skipped because file was removed. - if self.state == File.REMOVED and result is not None: + # Result is None if save was skipped because file was removed. + if self.state == File.REMOVED and result is None: return old_filename = new_filename = self.filename if error is not None: From 15901f8660b179bce0c0047f8f55350e5ee542e6 Mon Sep 17 00:00:00 2001 From: Sophist Date: Thu, 2 Feb 2017 00:18:36 +0000 Subject: [PATCH 012/173] Also skip save if Picard is stopping --- picard/file.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/picard/file.py b/picard/file.py index c9ceb7033..d41dba2fb 100644 --- a/picard/file.py +++ b/picard/file.py @@ -177,7 +177,11 @@ class File(QtCore.QObject, Item): def _save_and_rename(self, old_filename, metadata): """Save the metadata.""" # Check that file has not been removed since thread was queued - if self.state == File.REMOVED: + # Also don't save if we are stopping. + if self.state == File.REMOVED or self.tagger.stopping: + log.debug("File not saved because %s: %r", + "Picard is stopping" if self.tagger.stopping else "it was removed", + self.filename) return None new_filename = old_filename if not config.setting["dont_write_tags"]: @@ -226,8 +230,9 @@ class File(QtCore.QObject, Item): def _saving_finished(self, result=None, error=None): # Handle file removed before save - # Result is None if save was skipped because file was removed. - if self.state == File.REMOVED and result is None: + # Result is None if save was skipped + if ((self.state == File.REMOVED or self.tagger.stopping) + and result is None): return old_filename = new_filename = self.filename if error is not None: From e8d22952d417ecac0a9db5fb31862a3e67bf8f79 Mon Sep 17 00:00:00 2001 From: Sophist Date: Thu, 2 Feb 2017 07:36:36 +0000 Subject: [PATCH 013/173] Initialise tagger.stopping --- picard/tagger.py | 1 + 1 file changed, 1 insertion(+) diff --git a/picard/tagger.py b/picard/tagger.py index 3e36ad40f..ac424202b 100644 --- a/picard/tagger.py +++ b/picard/tagger.py @@ -214,6 +214,7 @@ class Tagger(QtGui.QApplication): self.nats = None self.window = MainWindow() self.exit_cleanup = [] + self.stopping = False def register_cleanup(self, func): self.exit_cleanup.append(func) From 328762b7be91d7ff94bbcd54ccf70d803698408b Mon Sep 17 00:00:00 2001 From: Sophist Date: Thu, 2 Feb 2017 09:17:11 +0000 Subject: [PATCH 014/173] Add debug message showing final file saved. --- picard/file.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/picard/file.py b/picard/file.py index d41dba2fb..4b426ac84 100644 --- a/picard/file.py +++ b/picard/file.py @@ -263,6 +263,9 @@ class File(QtCore.QObject, Item): del self.tagger.files[old_filename] self.tagger.files[new_filename] = self + if self.tagger.stopping: + log.debug("Save of %r completed before stopping Picard", self.filename) + def _save(self, filename, metadata): """Save the metadata.""" raise NotImplementedError From 0f9d5c7677443f0ffdd0531659cbb0d812eecaec Mon Sep 17 00:00:00 2001 From: Sophist Date: Thu, 2 Feb 2017 21:04:10 +0000 Subject: [PATCH 015/173] PICARD-973: Process events before exiting Resolves [PICARD-973](https://tickets.metabrainz.org/browse/PICARD-973). --- picard/tagger.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/picard/tagger.py b/picard/tagger.py index ac424202b..d017c85e5 100644 --- a/picard/tagger.py +++ b/picard/tagger.py @@ -270,7 +270,7 @@ class Tagger(QtGui.QApplication): self.nats.update() def exit(self): - log.debug("exit") + log.debug("Picard stopping") self.stopping = True self._acoustid.done() self.thread_pool.waitForDone() @@ -279,6 +279,7 @@ class Tagger(QtGui.QApplication): self.xmlws.stop() for f in self.exit_cleanup: f() + QtCore.QCoreApplication.processEvents() def _run_init(self): if self._cmdline_files: From 40114def9ab61dadfb0a71c0c8d5215a198e98bb Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Wed, 8 Feb 2017 18:19:17 +0100 Subject: [PATCH 016/173] Resync translations --- po/attributes/da.po | 4 +- po/attributes/nl.po | 4 +- po/attributes/sv.po | 19 +- po/bg.po | 43 ++- po/ca.po | 43 ++- po/countries/da.po | 4 +- po/countries/sv.po | 7 +- po/cs.po | 43 ++- po/cy.po | 43 ++- po/da.po | 171 +++++---- po/de.po | 48 +-- po/el.po | 43 ++- po/en_CA.po | 43 ++- po/en_GB.po | 43 ++- po/eo.po | 43 ++- po/es.po | 43 ++- po/et.po | 43 ++- po/fa.po | 43 ++- po/fi.po | 43 ++- po/fr.po | 43 ++- po/gl.po | 43 ++- po/he.po | 43 ++- po/hu.po | 43 ++- po/id.po | 43 ++- po/is.po | 43 ++- po/it.po | 43 ++- po/ja.po | 43 ++- po/ko.po | 43 ++- po/mr.po | 43 ++- po/nb.po | 896 ++++++++++++++++++++++---------------------- po/nl.po | 71 ++-- po/oc.po | 43 ++- po/pl.po | 43 ++- po/pt.po | 43 ++- po/pt_BR.po | 43 ++- po/ro.po | 43 ++- po/ru.po | 43 ++- po/sk.po | 43 ++- po/sl.po | 43 ++- po/sr.po | 43 ++- po/sv.po | 153 ++++---- po/te.po | 43 ++- po/tr.po | 43 ++- po/uk.po | 43 ++- po/zh_CN.po | 43 ++- po/zh_TW.po | 43 ++- 46 files changed, 1444 insertions(+), 1481 deletions(-) diff --git a/po/attributes/da.po b/po/attributes/da.po index 1d89e2ace..57b239d2d 100644 --- a/po/attributes/da.po +++ b/po/attributes/da.po @@ -1,7 +1,7 @@ # Translators: # Translators: -# Freso , 2012 -# Freso , 2014-2015 +# Frederik “Freso” S. Olesen , 2012 +# Frederik “Freso” S. Olesen , 2014-2015 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" diff --git a/po/attributes/nl.po b/po/attributes/nl.po index 8fe51652e..5e3238e69 100644 --- a/po/attributes/nl.po +++ b/po/attributes/nl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-01-18 16:52+0000\n" +"PO-Revision-Date: 2017-01-25 17:12+0000\n" "Last-Translator: Maurits Meulenbelt \n" "Language-Team: Dutch (http://www.transifex.com/musicbrainz/musicbrainz/language/nl/)\n" "MIME-Version: 1.0\n" @@ -1355,7 +1355,7 @@ msgstr "DCC" #: DB:release_group_secondary_type/name:8 msgctxt "release_group_secondary_type" msgid "DJ-mix" -msgstr "DJ-mix" +msgstr "dj-mix" #: DB:medium_format/name:44 msgctxt "medium_format" diff --git a/po/attributes/sv.po b/po/attributes/sv.po index e029d303e..6a584ce6d 100644 --- a/po/attributes/sv.po +++ b/po/attributes/sv.po @@ -1,5 +1,6 @@ # Translators: # Translators: +# Jonatan Nyberg , 2017 # Kristoffer Grundström , 2016 # Killinstinct , 2015 # Robin Björnsvik , 2013 @@ -7,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-01-16 20:46+0000\n" -"Last-Translator: Laurent Monin \n" +"PO-Revision-Date: 2017-01-24 01:39+0000\n" +"Last-Translator: Jonatan Nyberg \n" "Language-Team: Swedish (http://www.transifex.com/musicbrainz/musicbrainz/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -4297,7 +4298,7 @@ msgstr "" #: DB:series_type/name:9 msgctxt "series_type" msgid "Run" -msgstr "" +msgstr "Kör" #: DB:work_attribute_type_allowed_value/value:521 msgctxt "work_attribute_type_allowed_value" @@ -4382,7 +4383,7 @@ msgstr "" #: DB:medium_format/name:62 msgctxt "medium_format" msgid "SD Card" -msgstr "" +msgstr "SD-kort" #: DB:work_attribute_type/name:8 msgctxt "work_attribute_type" @@ -4572,12 +4573,12 @@ msgstr "" #: DB:editor_collection_type/name:14 msgctxt "collection_type" msgid "Series" -msgstr "" +msgstr "Serier" #: DB:series_alias_type/name:1 msgctxt "alias_type" msgid "Series name" -msgstr "" +msgstr "Serier namn" #: DB:work_attribute_type_allowed_value/value:663 msgctxt "work_attribute_type_allowed_value" @@ -4701,7 +4702,7 @@ msgstr "Klistermärke" #: DB:instrument_type/name:2 msgctxt "instrument_type" msgid "String instrument" -msgstr "" +msgstr "Sträng instrument" #: DB:place_type/name:1 msgctxt "place_type" @@ -4894,7 +4895,7 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:668 msgctxt "work_attribute_type_allowed_value" msgid "Tango" -msgstr "" +msgstr "Tango" #: DB:work_attribute_type_allowed_value/value:575 msgctxt "work_attribute_type_allowed_value" @@ -5170,7 +5171,7 @@ msgstr "VCD" #: DB:medium_format/name:59 msgctxt "medium_format" msgid "VHD" -msgstr "" +msgstr "VHD" #: DB:medium_format/name:21 msgctxt "medium_format" diff --git a/po/bg.po b/po/bg.po index b54e61bb9..61b29bc4d 100644 --- a/po/bg.po +++ b/po/bg.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Bulgarian (http://www.transifex.com/musicbrainz/musicbrainz/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -138,7 +138,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1128,9 +1128,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Име" @@ -1190,9 +1190,8 @@ msgstr "" msgid "File Name" msgstr "Име на файл" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1355,7 +1354,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1410,7 +1409,7 @@ msgstr "Порт:" msgid "Server address:" msgstr "Адрес на сървър:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1422,7 +1421,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Общи" @@ -1514,7 +1513,7 @@ msgstr "Минимална прилика при файлово търсене:" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Метаданни" @@ -1584,7 +1583,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Приставки" @@ -1911,19 +1910,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2094,7 +2093,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2136,15 +2135,15 @@ msgstr "" msgid "Scripting" msgstr "Скриптове" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Грешка в скрипта" diff --git a/po/ca.po b/po/ca.po index bef607aa7..b05fc4965 100644 --- a/po/ca.po +++ b/po/ca.po @@ -11,14 +11,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Catalan (http://www.transifex.com/musicbrainz/musicbrainz/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -141,7 +141,7 @@ msgid "Merge" msgstr "Fusiona" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Elimina" @@ -1131,9 +1131,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nom" @@ -1193,9 +1193,8 @@ msgstr "" msgid "File Name" msgstr "Nom de fitxer" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Recerca de CD" @@ -1358,7 +1357,7 @@ msgstr "Clau API:" msgid "Get API key..." msgstr "Obté una clau API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Etiquetes de folcsonomia" @@ -1413,7 +1412,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Adreça del servidor:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1425,7 +1424,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "General" @@ -1517,7 +1516,7 @@ msgstr "Mínima semblança per recerques de fitxers:" msgid "Minimal similarity for cluster lookups:" msgstr "Mínima similitud per les recerques de clúster:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadades" @@ -1587,7 +1586,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1914,19 +1913,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2097,7 +2096,7 @@ msgstr "Reinicialitza tot" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2139,15 +2138,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/countries/da.po b/po/countries/da.po index 11bb43e92..971f07f21 100644 --- a/po/countries/da.po +++ b/po/countries/da.po @@ -1,8 +1,8 @@ # Translators: # Translators: # FIRST AUTHOR , 2006 -# Freso , 2013 -# Freso , 2012 +# Frederik “Freso” S. Olesen , 2013 +# Frederik “Freso” S. Olesen , 2012 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" diff --git a/po/countries/sv.po b/po/countries/sv.po index be8c037c4..afc2389cd 100644 --- a/po/countries/sv.po +++ b/po/countries/sv.po @@ -1,13 +1,14 @@ # Translators: # Translators: +# Kebabpizza , 2017 # niklasb , 2016 # Robin Björnsvik , 2013 # Staffan Vilcans, 2014 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2016-12-05 06:04+0000\n" -"Last-Translator: niklasb \n" +"PO-Revision-Date: 2017-02-02 19:44+0000\n" +"Last-Translator: Kebabpizza \n" "Language-Team: Swedish (http://www.transifex.com/musicbrainz/musicbrainz/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1078,7 +1079,7 @@ msgstr "Sydkorea" #. iso.code:SS #: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:257 msgid "South Sudan" -msgstr "" +msgstr "Sydsudan" #. iso.code:SU #: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:243 diff --git a/po/cs.po b/po/cs.po index a5b1c64a1..8ffde7e16 100644 --- a/po/cs.po +++ b/po/cs.po @@ -11,14 +11,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Czech (http://www.transifex.com/musicbrainz/musicbrainz/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" @@ -144,7 +144,7 @@ msgid "Merge" msgstr "Sloučit" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Odstranit" @@ -1140,9 +1140,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Název" @@ -1202,9 +1202,8 @@ msgstr "" msgid "File Name" msgstr "Název souboru" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Vyhledání CD" @@ -1367,7 +1366,7 @@ msgstr "Klíč API:" msgid "Get API key..." msgstr "Získat klíč API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folkosonomické tagy" @@ -1422,7 +1421,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Adresa serveru:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1434,7 +1433,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Obecné" @@ -1526,7 +1525,7 @@ msgstr "Minimální podobnost pro vyhledávní v souborech" msgid "Minimal similarity for cluster lookups:" msgstr "Minimální podobnost pro vyhledávní v klastrech" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1596,7 +1595,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Zásuvné moduly" @@ -1923,19 +1922,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2106,7 +2105,7 @@ msgstr "Resetovat vše" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2148,15 +2147,15 @@ msgstr "" msgid "Scripting" msgstr "Skriptování" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Chyba skriptu" diff --git a/po/cy.po b/po/cy.po index c53a7c370..368bbc2d6 100644 --- a/po/cy.po +++ b/po/cy.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Welsh (http://www.transifex.com/musicbrainz/musicbrainz/language/cy/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: cy\n" "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n" @@ -145,7 +145,7 @@ msgid "Merge" msgstr "Cyfuno" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Tynnu" @@ -1147,9 +1147,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Enw" @@ -1209,9 +1209,8 @@ msgstr "" msgid "File Name" msgstr "Enw Ffeil" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Edrych lan CD" @@ -1374,7 +1373,7 @@ msgstr "Allwedd API:" msgid "Get API key..." msgstr "Cael allwedd API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1429,7 +1428,7 @@ msgstr "Porth:" msgid "Server address:" msgstr "" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1441,7 +1440,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Cyffredinol" @@ -1533,7 +1532,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "" @@ -1603,7 +1602,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Ategion" @@ -1930,19 +1929,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2113,7 +2112,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2155,15 +2154,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/da.po b/po/da.po index 73cda9b55..b7d04d24e 100644 --- a/po/da.po +++ b/po/da.po @@ -4,23 +4,23 @@ # # Translators: # FIRST AUTHOR , 2006 -# Freso , 2012 -# Freso , 2012 +# Frederik “Freso” S. Olesen , 2012 +# Frederik “Freso” S. Olesen , 2012 # Jakob Miland , 2013 -# Freso , 2013-2014 -# Freso , 2012 +# Frederik “Freso” S. Olesen , 2013-2014,2017 +# Frederik “Freso” S. Olesen , 2012 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" -"PO-Revision-Date: 2017-01-19 09:17+0000\n" -"Last-Translator: nikki\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" +"PO-Revision-Date: 2017-01-25 15:50+0000\n" +"Last-Translator: Frederik “Freso” S. Olesen \n" "Language-Team: Danish (http://www.transifex.com/musicbrainz/musicbrainz/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -42,16 +42,16 @@ msgstr "AcoustID-opslag gav ingen resultater for filen \"%(filename)s\"" #: picard/acoustid.py:168 #, python-format msgid "Looking up the fingerprint for file '%(filename)s' ..." -msgstr "Slår fingeraftryk for filen \"%(filename)s\" op..." +msgstr "Slår fingeraftryk for filen \"%(filename)s\" op…" #: picard/acoustidmanager.py:82 msgid "Submitting AcoustIDs ..." -msgstr "Sender AcoustID'er ..." +msgstr "Sender AcoustID’er…" #: picard/acoustidmanager.py:103 #, python-format msgid "AcoustID submission failed with error '%(error)s': %(message)s" -msgstr "" +msgstr "AcoustID-indsending mislykkedes med fejlen \"%(error)s\": %(message)s" #: picard/acoustidmanager.py:111 msgid "AcoustIDs successfully submitted." @@ -100,7 +100,7 @@ msgstr "Klyngen %(album)s identificeret!" #: picard/cluster.py:196 #, python-format msgid "Looking up the metadata for cluster %(album)s..." -msgstr "Slår metadata op for klyngen %(album)s..." +msgstr "Slår metadata op for klyngen %(album)s…" #: picard/collection.py:64 #, python-format @@ -143,7 +143,7 @@ msgid "Merge" msgstr "Sammenflet" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Fjern" @@ -170,7 +170,7 @@ msgstr "Filen '%(filename)s' blev identificeret!" #: picard/file.py:584 #, python-format msgid "Looking up the metadata for file %(filename)s ..." -msgstr "Slår metadata for filen %(filename)s op ..." +msgstr "Slår metadata for filen %(filename)s op…" #: picard/plugin.py:434 #, python-format @@ -196,7 +196,7 @@ msgstr "Format" #: picard/releasegroup.py:57 msgid "Label" -msgstr "" +msgstr "Selskab" #: picard/releasegroup.py:58 msgid "Cat No" @@ -215,12 +215,12 @@ msgstr "[ingen udgivelsesinfo]" msgid "Adding %(count)d file from '%(directory)s' ..." msgid_plural "Adding %(count)d files from '%(directory)s' ..." msgstr[0] "Tilføjer %(count)d fil fra '%(directory)s' ..." -msgstr[1] "Tilføjer %(count)d filer fra '%(directory)s' ..." +msgstr[1] "Tilføjer %(count)d filer fra \"%(directory)s\"…" #: picard/tagger.py:597 #, python-format msgid "Removing album %(id)s: %(artist)s - %(album)s" -msgstr "" +msgstr "Fjerner album %(id)s: %(artist)s - %(album)s" #: picard/tagger.py:613 msgid "CD Lookup Error" @@ -331,7 +331,7 @@ msgstr "" #: picard/coverart/providers/local.py:65 msgid "Local Files" -msgstr "" +msgstr "Lokale filer" #: picard/coverart/providers/whitelist.py:38 msgid "Whitelist" @@ -354,7 +354,7 @@ msgstr "Dato" #: picard/ui/cdlookup.py:36 picard/ui/searchdialog.py:518 msgid "Labels" -msgstr "" +msgstr "Selskaber" #: picard/ui/cdlookup.py:36 picard/ui/searchdialog.py:519 msgid "Catalog #s" @@ -482,11 +482,11 @@ msgstr "" #: picard/ui/infodialog.py:313 msgid "Album:" -msgstr "" +msgstr "Album:" #: picard/ui/infodialog.py:315 msgid "Artist:" -msgstr "" +msgstr "Kunstner:" #: picard/ui/infodialog.py:325 msgid "Tracklist:" @@ -551,11 +551,11 @@ msgstr "Fold alle sammen" #: picard/ui/itemviews.py:247 msgid "Select &all" -msgstr "" +msgstr "Marker &alt" #: picard/ui/itemviews.py:249 msgid "Ctrl+A" -msgstr "" +msgstr "Ctrl+A" #: picard/ui/itemviews.py:315 msgid "&Other versions" @@ -563,7 +563,7 @@ msgstr "Andre udgaver" #: picard/ui/itemviews.py:318 msgid "Loading..." -msgstr "Indlæser..." +msgstr "Indlæser…" #: picard/ui/itemviews.py:383 msgid "Collections" @@ -615,7 +615,7 @@ msgstr "" #: picard/ui/itemviews.py:811 msgid "Track saved" -msgstr "" +msgstr "Skæring gemt" #: picard/ui/itemviews.py:813 picard/ui/itemviews.py:817 msgid "Pending" @@ -686,7 +686,7 @@ msgstr "Du skal angive din AcoustID API-nøgle før du kan indsende fingeraftryk #: picard/ui/mainwindow.py:313 msgid "&Options..." -msgstr "&Indstillinger..." +msgstr "&Indstillinger…" #: picard/ui/mainwindow.py:317 msgid "&Cut" @@ -698,27 +698,27 @@ msgstr "&Indsæt" #: picard/ui/mainwindow.py:327 msgid "&Help..." -msgstr "&Hjælp..." +msgstr "&Hjælp…" #: picard/ui/mainwindow.py:331 msgid "&About..." -msgstr "&Om..." +msgstr "&Om…" #: picard/ui/mainwindow.py:335 msgid "&Donate..." -msgstr "%Donere..." +msgstr "%Donér…" #: picard/ui/mainwindow.py:338 msgid "&Report a Bug..." -msgstr "&Rapportér en fejl..." +msgstr "&Rapportér en fejl…" #: picard/ui/mainwindow.py:341 msgid "&Support Forum..." -msgstr "&Support-forum..." +msgstr "&Hjælpeforum…" #: picard/ui/mainwindow.py:344 msgid "&Add Files..." -msgstr "&Tilføj filer..." +msgstr "&Tilføj filer…" #: picard/ui/mainwindow.py:345 msgid "Add files to the tagger" @@ -726,7 +726,7 @@ msgstr "Tilføj filer til taggeren" #: picard/ui/mainwindow.py:350 msgid "A&dd Folder..." -msgstr "Tilføj &mappe..." +msgstr "Tilføj &mappe…" #: picard/ui/mainwindow.py:351 msgid "Add a folder to the tagger" @@ -746,7 +746,7 @@ msgstr "Gem valgte filer" #: picard/ui/mainwindow.py:363 msgid "S&ubmit AcoustIDs" -msgstr "" +msgstr "Indsend Aco&ustID’er" #: picard/ui/mainwindow.py:364 msgid "Submit acoustic fingerprints" @@ -778,7 +778,7 @@ msgstr "Slå det valgte element op på MusicBrainz-netstedet" #: picard/ui/mainwindow.py:383 msgid "Ctrl+Shift+L" -msgstr "" +msgstr "Ctrl+Shift+L" #: picard/ui/mainwindow.py:386 msgid "Search for similar albums..." @@ -815,7 +815,7 @@ msgstr "Søg" #: picard/ui/mainwindow.py:411 msgid "Lookup &CD..." -msgstr "Slå &cd op..." +msgstr "Slå &cd op…" #: picard/ui/mainwindow.py:412 msgid "Lookup the details of the CD in your drive" @@ -865,7 +865,7 @@ msgstr "Ctrl+L" #: picard/ui/mainwindow.py:440 msgid "&Info..." -msgstr "&Info..." +msgstr "&Info…" #: picard/ui/mainwindow.py:443 msgid "Ctrl+I" @@ -893,7 +893,7 @@ msgstr "Gem &tags" #: picard/ui/mainwindow.py:465 msgid "Tags From &File Names..." -msgstr "Tags fra &filnavne..." +msgstr "Tags fra &filnavne…" #: picard/ui/mainwindow.py:469 msgid "&Open My Collections in Browser" @@ -1065,7 +1065,7 @@ msgstr "" #: picard/ui/metadatabox.py:274 msgid "Edit..." -msgstr "Redigér..." +msgstr "Redigér…" #: picard/ui/metadatabox.py:282 msgid "Add to 'Preserve Tags' List" @@ -1133,9 +1133,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Navn" @@ -1195,9 +1195,8 @@ msgstr "" msgid "File Name" msgstr "Filnavn" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Cd-opslag" @@ -1346,11 +1345,11 @@ msgstr "Fingeraftryksberegner:" #: picard/ui/ui_options_fingerprinting.py:92 #: picard/ui/ui_options_interface.py:129 picard/ui/ui_options_renaming.py:165 msgid "Browse..." -msgstr "Gennemse..." +msgstr "Gennemse…" #: picard/ui/ui_options_fingerprinting.py:93 msgid "Download..." -msgstr "Download..." +msgstr "Download…" #: picard/ui/ui_options_fingerprinting.py:94 msgid "API key:" @@ -1358,9 +1357,9 @@ msgstr "API-nøgle:" #: picard/ui/ui_options_fingerprinting.py:95 msgid "Get API key..." -msgstr "Få API-nøgle..." +msgstr "Få API-nøgle…" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomitags" @@ -1415,7 +1414,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Serveradresse:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1427,7 +1426,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Generelt" @@ -1493,7 +1492,7 @@ msgstr "" #: picard/ui/ui_options_interface.py:137 picard/ui/ui_options_interface.py:139 msgid "..." -msgstr "" +msgstr "…" #: picard/ui/ui_options_interface.py:138 msgid "Move selected item down" @@ -1519,7 +1518,7 @@ msgstr "Mindste lighed for filopslag:" msgid "Minimal similarity for cluster lookups:" msgstr "Mindste lighed for klyngeopslag:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1589,7 +1588,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Udvidelsesmoduler" @@ -1599,7 +1598,7 @@ msgstr "Version" #: picard/ui/ui_options_plugins.py:141 msgid "Install plugin..." -msgstr "Installér modul..." +msgstr "Installér modul…" #: picard/ui/ui_options_plugins.py:142 msgid "Open plugin folder" @@ -1916,21 +1915,21 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" -msgstr "" +msgstr "Er du sikker?" #: picard/ui/options/fingerprinting.py:32 msgid "Fingerprinting" @@ -1948,7 +1947,7 @@ msgstr "" #: picard/ui/options/general.py:74 #, python-format msgid "Logged in as %s." -msgstr "" +msgstr "Logget ind som %s" #: picard/ui/options/general.py:88 msgid "Authorization code:" @@ -1960,11 +1959,11 @@ msgstr "Brugergrænseflade" #: picard/ui/options/interface.py:43 msgid "Add Folder" -msgstr "" +msgstr "Tilføj mappe" #: picard/ui/options/interface.py:47 msgid "Add Files" -msgstr "" +msgstr "Tilføj filer" #: picard/ui/options/interface.py:51 msgid "Cluster" @@ -1972,31 +1971,31 @@ msgstr "" #: picard/ui/options/interface.py:55 msgid "Lookup" -msgstr "" +msgstr "Slå op" #: picard/ui/options/interface.py:59 msgid "Scan" -msgstr "" +msgstr "Skan" #: picard/ui/options/interface.py:63 msgid "Lookup in Browser" -msgstr "" +msgstr "Slå op i browser" #: picard/ui/options/interface.py:67 msgid "Save" -msgstr "" +msgstr "Gem" #: picard/ui/options/interface.py:79 msgid "Submit AcoustIDs" -msgstr "" +msgstr "Indsend AcoustID’er" #: picard/ui/options/interface.py:83 msgid "Open in Player" -msgstr "" +msgstr "Åben i afspiller" #: picard/ui/options/interface.py:87 msgid "Lookup CD..." -msgstr "" +msgstr "Slå cd op…" #: picard/ui/options/interface.py:125 msgid "System default" @@ -2018,7 +2017,7 @@ msgstr "" #: picard/ui/options/interface.py:209 picard/ui/options/interface.py:291 msgid "label" -msgstr "" +msgstr "selskab" #: picard/ui/options/matching.py:28 msgid "Matching" @@ -2044,27 +2043,27 @@ msgstr "" #: picard/ui/options/plugins.py:254 msgid "Update" -msgstr "" +msgstr "Opdatér" #: picard/ui/options/plugins.py:256 msgid "Install" -msgstr "" +msgstr "Installér" #: picard/ui/options/plugins.py:271 msgid "Updated" -msgstr "" +msgstr "Opdateret" #: picard/ui/options/plugins.py:273 msgid "Installed" -msgstr "" +msgstr "Installeret" #: picard/ui/options/plugins.py:297 msgid "Restart Picard to upgrade to new version" -msgstr "" +msgstr "Genstart Picard for at opgradere til den nyeste version" #: picard/ui/options/plugins.py:299 msgid "New version available" -msgstr "" +msgstr "Ny udgave tilgængelig" #: picard/ui/options/plugins.py:305 msgid "Authors" @@ -2081,7 +2080,7 @@ msgstr "" #: picard/ui/options/plugins.py:339 msgid "Please try again later." -msgstr "" +msgstr "Prøv igen senere." #: picard/ui/options/ratings.py:28 msgid "Ratings" @@ -2099,7 +2098,7 @@ msgstr "Nulstil alle" msgid "File Naming" msgstr "Navngivning af filer" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2141,15 +2140,15 @@ msgstr "" msgid "Scripting" msgstr "Skriptning" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Skriptfejl" @@ -2223,7 +2222,7 @@ msgstr "Oprindelig udgivelsesdato" #: picard/util/tags.py:26 msgid "Original Year" -msgstr "" +msgstr "Originalt år" #: picard/util/tags.py:27 msgid "Album Artist" @@ -2263,7 +2262,7 @@ msgstr "Sorteringsrækkefølge for album" #: picard/util/tags.py:36 msgid "Composer Sort Order" -msgstr "" +msgstr "Sorteringsrækkefølge for komponister" #: picard/util/tags.py:37 msgid "ASIN" @@ -2287,7 +2286,7 @@ msgstr "BPM" #: picard/util/tags.py:42 msgid "Key" -msgstr "" +msgstr "Toneart" #: picard/util/tags.py:43 msgid "Copyright" @@ -2299,7 +2298,7 @@ msgstr "Komponist" #: picard/util/tags.py:46 msgid "Writer" -msgstr "" +msgstr "Forfatter/sangskriver" #: picard/util/tags.py:47 msgid "Conductor" diff --git a/po/de.po b/po/de.po index e43b5a52d..3865a9684 100644 --- a/po/de.po +++ b/po/de.po @@ -10,6 +10,7 @@ # Ettore Atalan , 2014 # Felix Kugler , 2015 # Frank Matthiae , 2017 +# ix5 5 , 2017 # nikki, 2013 # Philipp Wolfer , 2014,2017 # S.Brandt , 2014-2015,2017 @@ -23,14 +24,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" -"PO-Revision-Date: 2017-01-20 14:23+0000\n" -"Last-Translator: S.Brandt \n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" +"PO-Revision-Date: 2017-01-26 22:37+0000\n" +"Last-Translator: ix5 5 \n" "Language-Team: German (http://www.transifex.com/musicbrainz/musicbrainz/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -153,7 +154,7 @@ msgid "Merge" msgstr "Vereinen" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Entfernen" @@ -1143,9 +1144,9 @@ msgstr "In Picard laden" msgid "Track Search Results" msgstr "Ergebnisse der Titelsuche" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Name" @@ -1205,9 +1206,8 @@ msgstr "Endgebiet" msgid "File Name" msgstr "Dateiname" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD abfragen" @@ -1370,7 +1370,7 @@ msgstr "API-Key:" msgid "Get API key..." msgstr "API-Schlüssel anfordern …" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomy-Tags" @@ -1425,7 +1425,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Serveradresse:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainz Benutzerkonto" @@ -1437,7 +1437,7 @@ msgstr "Einloggen" msgid "Log out" msgstr "Abmelden" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Allgemein" @@ -1529,7 +1529,7 @@ msgstr "Minimale Ähnlichkeit für Datei-Abfragen:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimale Ähnlichkeit für Gruppierungsabfragen:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadaten" @@ -1599,7 +1599,7 @@ msgstr "Standard-Verbindungsport" msgid "Listen only on localhost" msgstr "Nur auf localhost Verbindungen annehmen" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1926,19 +1926,19 @@ msgstr "&Standard wiederherstellen" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "Du bist dabei, die Einstellungen für diese Seite zurückzusetzen." -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "Warnung! Dadurch werden alle deine Einstellungen zurückgesetzt." -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "Zurücksetzen bestätigen" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "Bist du sicher?" @@ -2109,7 +2109,7 @@ msgstr "Alle zurücksetzen" msgid "File Naming" msgstr "Dateibenennung" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2151,15 +2151,15 @@ msgstr "Skript entfernen" msgid "Scripting" msgstr "Scripting" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "Sind sie sicher, dass sie dieses Skript entfernen wollen?" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "Entfernen bestätigen" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Script-Fehler" diff --git a/po/el.po b/po/el.po index 468d59326..c825d7d37 100644 --- a/po/el.po +++ b/po/el.po @@ -13,14 +13,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Greek (http://www.transifex.com/musicbrainz/musicbrainz/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -143,7 +143,7 @@ msgid "Merge" msgstr "Συγχώνευση" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Αφαίρεση" @@ -1133,9 +1133,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Όνομα" @@ -1195,9 +1195,8 @@ msgstr "" msgid "File Name" msgstr "Όνομα αρχείου" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Αναζήτηση CD" @@ -1360,7 +1359,7 @@ msgstr "Κλειδί API:" msgid "Get API key..." msgstr "Λήψη κλεδιού API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Συνεργατικές ετικέτες" @@ -1415,7 +1414,7 @@ msgstr "Θύρα:" msgid "Server address:" msgstr "Διεύθυνση εξυπηρετητή" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "Λογαριασμός MusicBrainz" @@ -1427,7 +1426,7 @@ msgstr "Σύνδεση" msgid "Log out" msgstr "Αποσύνδεση" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Γενικά" @@ -1519,7 +1518,7 @@ msgstr "Ελάχιστη ομοιότητα για τις αναζητήσεις msgid "Minimal similarity for cluster lookups:" msgstr "Ελάχιστη ομοιότητα για τις αναζητήσεις ομάδων:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Μεταδεδομένα" @@ -1589,7 +1588,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Πρόσθετα" @@ -1916,19 +1915,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2099,7 +2098,7 @@ msgstr "Επαναφορά όλων" msgid "File Naming" msgstr "Ονομασία αρχείων" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2141,15 +2140,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/en_CA.po b/po/en_CA.po index 69ef5bd50..ed596bd6b 100644 --- a/po/en_CA.po +++ b/po/en_CA.po @@ -12,14 +12,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: English (Canada) (http://www.transifex.com/musicbrainz/musicbrainz/language/en_CA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: en_CA\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -142,7 +142,7 @@ msgid "Merge" msgstr "Merge" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Remove" @@ -1132,9 +1132,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Name" @@ -1194,9 +1194,8 @@ msgstr "" msgid "File Name" msgstr "File Name" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD Lookup" @@ -1359,7 +1358,7 @@ msgstr "API key:" msgid "Get API key..." msgstr "Get API key..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomy Tags" @@ -1414,7 +1413,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Server address:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainz Account" @@ -1426,7 +1425,7 @@ msgstr "Log in" msgid "Log out" msgstr "Log out" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "General" @@ -1518,7 +1517,7 @@ msgstr "Minimal similarity for file lookups:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimal similarity for cluster lookups:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1588,7 +1587,7 @@ msgstr "Default listening port:" msgid "Listen only on localhost" msgstr "Listen only on localhost" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1915,19 +1914,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2098,7 +2097,7 @@ msgstr "Reset all" msgid "File Naming" msgstr "File Naming" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2140,15 +2139,15 @@ msgstr "" msgid "Scripting" msgstr "Scripting" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Script Error" diff --git a/po/en_GB.po b/po/en_GB.po index cfd452904..dbf075bde 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: English (United Kingdom) (http://www.transifex.com/musicbrainz/musicbrainz/language/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -140,7 +140,7 @@ msgid "Merge" msgstr "Merge" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Remove" @@ -1130,9 +1130,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Name" @@ -1192,9 +1192,8 @@ msgstr "" msgid "File Name" msgstr "File Name" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD Lookup" @@ -1357,7 +1356,7 @@ msgstr "API key:" msgid "Get API key..." msgstr "Get API key..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomy Tags" @@ -1412,7 +1411,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Server address:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1424,7 +1423,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "General" @@ -1516,7 +1515,7 @@ msgstr "Minimal similarity for file lookups:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimal similarity for cluster lookups:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1586,7 +1585,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1913,19 +1912,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2096,7 +2095,7 @@ msgstr "Reset all" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2138,15 +2137,15 @@ msgstr "" msgid "Scripting" msgstr "Scripting" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Script Error" diff --git a/po/eo.po b/po/eo.po index 520211e4d..699000e89 100644 --- a/po/eo.po +++ b/po/eo.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Esperanto (http://www.transifex.com/musicbrainz/musicbrainz/language/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -139,7 +139,7 @@ msgid "Merge" msgstr "Kunfandiĝi" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1129,9 +1129,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "" @@ -1191,9 +1191,8 @@ msgstr "" msgid "File Name" msgstr "" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1356,7 +1355,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1411,7 +1410,7 @@ msgstr "" msgid "Server address:" msgstr "" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1423,7 +1422,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "" @@ -1515,7 +1514,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "" @@ -1585,7 +1584,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "" @@ -1912,19 +1911,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2095,7 +2094,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2137,15 +2136,15 @@ msgstr "" msgid "Scripting" msgstr "Skriptado" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Skript-eraro" diff --git a/po/es.po b/po/es.po index e30439fcb..9c231965e 100644 --- a/po/es.po +++ b/po/es.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Spanish (http://www.transifex.com/musicbrainz/musicbrainz/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -140,7 +140,7 @@ msgid "Merge" msgstr "Combinar" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Eliminar" @@ -1130,9 +1130,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nombre" @@ -1192,9 +1192,8 @@ msgstr "" msgid "File Name" msgstr "Nombre de archivo" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Búsqueda de CD" @@ -1357,7 +1356,7 @@ msgstr "Clave del API:" msgid "Get API key..." msgstr "Obtener la clave del API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Etiquetas de Folksonomía" @@ -1412,7 +1411,7 @@ msgstr "Puerto:" msgid "Server address:" msgstr "Dirección del servidor:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "Cuenta en MusicBrainz" @@ -1424,7 +1423,7 @@ msgstr "Conectar" msgid "Log out" msgstr "Desconectar" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "General" @@ -1516,7 +1515,7 @@ msgstr "Similitud mínima para las búsquedas de archivo:" msgid "Minimal similarity for cluster lookups:" msgstr "Similitud mínima para las búsquedas de grupos:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadatos" @@ -1586,7 +1585,7 @@ msgstr "Puerto de escucha predeterminado:" msgid "Listen only on localhost" msgstr "Restringir la escucha a su sistema" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Complementos" @@ -1913,19 +1912,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2096,7 +2095,7 @@ msgstr "Reiniciar todo" msgid "File Naming" msgstr "Nombrado de archivos" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2138,15 +2137,15 @@ msgstr "" msgid "Scripting" msgstr "Escritura de scripts" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Error de script" diff --git a/po/et.po b/po/et.po index d0809d620..4b656242e 100644 --- a/po/et.po +++ b/po/et.po @@ -12,14 +12,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Estonian (http://www.transifex.com/musicbrainz/musicbrainz/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -142,7 +142,7 @@ msgid "Merge" msgstr "Ühenda" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Eemalda" @@ -1132,9 +1132,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nimi" @@ -1194,9 +1194,8 @@ msgstr "" msgid "File Name" msgstr "Failinimi" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD päring" @@ -1359,7 +1358,7 @@ msgstr "API võti:" msgid "Get API key..." msgstr "Hangi API võti..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonoomia" @@ -1414,7 +1413,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Serveri aadress:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainzi konto" @@ -1426,7 +1425,7 @@ msgstr "Logi sisse" msgid "Log out" msgstr "Logi välja" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Üldine" @@ -1518,7 +1517,7 @@ msgstr "Vähim sarnasus faili päringu jaoks:" msgid "Minimal similarity for cluster lookups:" msgstr "Vähim sarnasus rühma päringu jaoks:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metaandmed" @@ -1588,7 +1587,7 @@ msgstr "Vaikimisi kuulatav port:" msgid "Listen only on localhost" msgstr "Kuulatakse ainult \"localhost'il\"" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Pluginad" @@ -1915,19 +1914,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2098,7 +2097,7 @@ msgstr "Lähtesta kõik" msgid "File Naming" msgstr "Failinimed" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2140,15 +2139,15 @@ msgstr "" msgid "Scripting" msgstr "Skriptimine" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Skripti viga" diff --git a/po/fa.po b/po/fa.po index 40e58f015..2b172a8ea 100644 --- a/po/fa.po +++ b/po/fa.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Persian (http://www.transifex.com/musicbrainz/musicbrainz/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -136,7 +136,7 @@ msgid "Merge" msgstr "ادغام" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "حذف" @@ -1120,9 +1120,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "" @@ -1182,9 +1182,8 @@ msgstr "" msgid "File Name" msgstr "" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1347,7 +1346,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1402,7 +1401,7 @@ msgstr "" msgid "Server address:" msgstr "" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1414,7 +1413,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "" @@ -1506,7 +1505,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "" @@ -1576,7 +1575,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "" @@ -1903,19 +1902,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2086,7 +2085,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2128,15 +2127,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/fi.po b/po/fi.po index b7cf05aad..83e60b1f3 100644 --- a/po/fi.po +++ b/po/fi.po @@ -12,14 +12,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Finnish (http://www.transifex.com/musicbrainz/musicbrainz/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -142,7 +142,7 @@ msgid "Merge" msgstr "Yhdistä" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Poista" @@ -1132,9 +1132,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nimi" @@ -1194,9 +1194,8 @@ msgstr "" msgid "File Name" msgstr "Tiedostonimi" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD-haku" @@ -1359,7 +1358,7 @@ msgstr "API-avain:" msgid "Get API key..." msgstr "Hae API-avain..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomia-luokitukset" @@ -1414,7 +1413,7 @@ msgstr "Portti:" msgid "Server address:" msgstr "Palvelimen osoite:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainz-tili" @@ -1426,7 +1425,7 @@ msgstr "Kirjaudu sisään" msgid "Log out" msgstr "Kirjaudu ulos" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Yleiset" @@ -1518,7 +1517,7 @@ msgstr "Pienin samankaltaisuus tiedostojen hakuihin:" msgid "Minimal similarity for cluster lookups:" msgstr "Pienin samankaltaisuus ryhmien hakuihin:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metatiedot" @@ -1588,7 +1587,7 @@ msgstr "Oletusportti:" msgid "Listen only on localhost" msgstr "Salli yhteydet vain isäntäkoneelta" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Liitännäiset" @@ -1915,19 +1914,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2098,7 +2097,7 @@ msgstr "Oletusasetukset" msgid "File Naming" msgstr "Nimeämisasetukset" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2140,15 +2139,15 @@ msgstr "" msgid "Scripting" msgstr "Komentosarjat" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Virhe komentosarjassa" diff --git a/po/fr.po b/po/fr.po index fd6e971a8..a2c6abcdd 100644 --- a/po/fr.po +++ b/po/fr.po @@ -25,14 +25,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 11:49+0000\n" "Last-Translator: Laurent Monin \n" "Language-Team: French (http://www.transifex.com/musicbrainz/musicbrainz/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -155,7 +155,7 @@ msgid "Merge" msgstr "Fusionner" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Retirer" @@ -1145,9 +1145,9 @@ msgstr "Charger dans Picard" msgid "Track Search Results" msgstr "Résultats de recherche de pistes" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nom d’utilisateur" @@ -1207,9 +1207,8 @@ msgstr "Région de fin" msgid "File Name" msgstr "Nom de fichier" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Consultation du CD" @@ -1372,7 +1371,7 @@ msgstr "Clef d’API :" msgid "Get API key..." msgstr "Obtenir la clef d’API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Balises de folksonomie" @@ -1427,7 +1426,7 @@ msgstr "Port :" msgid "Server address:" msgstr "Adresse du serveur :" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "Compte MusicBrainz" @@ -1439,7 +1438,7 @@ msgstr "Connexion" msgid "Log out" msgstr "Déconnexion" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Général" @@ -1531,7 +1530,7 @@ msgstr "Ressemblance minimale pour chercher des fichiers :" msgid "Minimal similarity for cluster lookups:" msgstr "Ressemblance minimale pour rechercher les grappes :" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Métadonnées" @@ -1601,7 +1600,7 @@ msgstr "Port d’écoute par défaut :" msgid "Listen only on localhost" msgstr "Écouter seulement sur localhost" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Greffons" @@ -1928,19 +1927,19 @@ msgstr "Restaurer par &défaut" msgid "Reset all settings for current option page" msgstr "Réinitialiser toutes les options de la page courante" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "Vous êtes sur le point de réinitialiser vos options pour cette page." -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "Attention ! Cela réinitialisera tout votre configuration." -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "Confirmation de la réinitialisation" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "Êtes-vous sûr ?" @@ -2111,7 +2110,7 @@ msgstr "Tout réinitialiser" msgid "File Naming" msgstr "Nommage de fichiers" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2153,15 +2152,15 @@ msgstr "Supprimer le script" msgid "Scripting" msgstr "Scripts" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "Êtes-vous certain de vouloir supprimer ce script ?" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "Confirmation de la suppression" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Erreur de script" diff --git a/po/gl.po b/po/gl.po index 0639a550f..db8f11017 100644 --- a/po/gl.po +++ b/po/gl.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Galician (http://www.transifex.com/musicbrainz/musicbrainz/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -138,7 +138,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1128,9 +1128,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nome" @@ -1190,9 +1190,8 @@ msgstr "" msgid "File Name" msgstr "Nome do ficheiro" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Buscar CD" @@ -1355,7 +1354,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Etiquetas colaborativas (Folcsonomía)" @@ -1410,7 +1409,7 @@ msgstr "Porto:" msgid "Server address:" msgstr "Enderezo do servidor:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1422,7 +1421,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Xeral" @@ -1514,7 +1513,7 @@ msgstr "Similitude mínima para as buscas en ficheiros:" msgid "Minimal similarity for cluster lookups:" msgstr "Similitude mínima para as buscas en clústers:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadatos" @@ -1584,7 +1583,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1911,19 +1910,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2094,7 +2093,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2136,15 +2135,15 @@ msgstr "" msgid "Scripting" msgstr "Scripting" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Produciuse un erro no script" diff --git a/po/he.po b/po/he.po index 400dde4bf..594444450 100644 --- a/po/he.po +++ b/po/he.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Hebrew (http://www.transifex.com/musicbrainz/musicbrainz/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -140,7 +140,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "הסר" @@ -1130,9 +1130,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "שם" @@ -1192,9 +1192,8 @@ msgstr "" msgid "File Name" msgstr "שם הקובץ" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "חיפוש תקליטור" @@ -1357,7 +1356,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "תגיות שיתופיות" @@ -1412,7 +1411,7 @@ msgstr "פתחה:" msgid "Server address:" msgstr "כתובת השרת:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1424,7 +1423,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "כללי" @@ -1516,7 +1515,7 @@ msgstr "דמיון מזערי לחיפושי קבצים:" msgid "Minimal similarity for cluster lookups:" msgstr "דמיון מזערי לחיפושי אשכולות:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "נתוני מטא" @@ -1586,7 +1585,7 @@ msgstr "פורט ברירת מחדל להאזנה:" msgid "Listen only on localhost" msgstr "האזן רק במחשב מקומי" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "תוספים" @@ -1913,19 +1912,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2096,7 +2095,7 @@ msgstr "אפס הכל" msgid "File Naming" msgstr "קביעת שמות קבצים" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2138,15 +2137,15 @@ msgstr "" msgid "Scripting" msgstr "יצירת סקריפט" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "שגיאת סקריפט" diff --git a/po/hu.po b/po/hu.po index 8627a0e76..30f881506 100644 --- a/po/hu.po +++ b/po/hu.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Hungarian (http://www.transifex.com/musicbrainz/musicbrainz/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -139,7 +139,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1129,9 +1129,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Név" @@ -1191,9 +1191,8 @@ msgstr "" msgid "File Name" msgstr "Fájlnév" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD infó keresése" @@ -1356,7 +1355,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Közösségi cimkék" @@ -1411,7 +1410,7 @@ msgstr "Port:" msgid "Server address:" msgstr "A kiszolgáló címe:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1423,7 +1422,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Általános" @@ -1515,7 +1514,7 @@ msgstr "Minimális hasonlóság fájl lekérdezésénél:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimális hasonlóság csoport-lekérdezésnél:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metaadat" @@ -1585,7 +1584,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Bővítmények" @@ -1912,19 +1911,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2095,7 +2094,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2137,15 +2136,15 @@ msgstr "" msgid "Scripting" msgstr "Parancsfájlok" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Huba a parancsfájlban" diff --git a/po/id.po b/po/id.po index 74c265ff9..6cb982ac1 100644 --- a/po/id.po +++ b/po/id.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Indonesian (http://www.transifex.com/musicbrainz/musicbrainz/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -137,7 +137,7 @@ msgid "Merge" msgstr "Gabung" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Hilangkan" @@ -1121,9 +1121,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nama" @@ -1183,9 +1183,8 @@ msgstr "" msgid "File Name" msgstr "Nama Berkas" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1348,7 +1347,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1403,7 +1402,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Alamat server:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1415,7 +1414,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Umum" @@ -1507,7 +1506,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1577,7 +1576,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "" @@ -1904,19 +1903,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2087,7 +2086,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2129,15 +2128,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/is.po b/po/is.po index e83f683a0..5918b6e89 100644 --- a/po/is.po +++ b/po/is.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Icelandic (http://www.transifex.com/musicbrainz/musicbrainz/language/is/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" @@ -138,7 +138,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1128,9 +1128,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Heiti" @@ -1190,9 +1190,8 @@ msgstr "" msgid "File Name" msgstr "Skráarnafn" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Geisladiskaleit" @@ -1355,7 +1354,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1410,7 +1409,7 @@ msgstr "Gátt:" msgid "Server address:" msgstr "Vistfang miðlara:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1422,7 +1421,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Almennt" @@ -1514,7 +1513,7 @@ msgstr "Lágmarks skyldleiki við fundnar skrár:" msgid "Minimal similarity for cluster lookups:" msgstr "Lágmarks skyldleiki við fundna klasa:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Lýsigögn" @@ -1584,7 +1583,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Íforrit" @@ -1911,19 +1910,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2094,7 +2093,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2136,15 +2135,15 @@ msgstr "" msgid "Scripting" msgstr "Skriftun" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Skriftuvilla" diff --git a/po/it.po b/po/it.po index 90cf4c31b..9df2f3ddd 100644 --- a/po/it.po +++ b/po/it.po @@ -12,14 +12,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-21 14:38+0000\n" "Last-Translator: Luca Salini \n" "Language-Team: Italian (http://www.transifex.com/musicbrainz/musicbrainz/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -142,7 +142,7 @@ msgid "Merge" msgstr "Unisci" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Elimina" @@ -1132,9 +1132,9 @@ msgstr "Carica su Picard" msgid "Track Search Results" msgstr "Risultati della ricerca tracce" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nome" @@ -1194,9 +1194,8 @@ msgstr "Area finale" msgid "File Name" msgstr "Nome file" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Ricerca CD" @@ -1359,7 +1358,7 @@ msgstr "Chiave API:" msgid "Get API key..." msgstr "Ottieni chiave API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Tag di folksonomia" @@ -1414,7 +1413,7 @@ msgstr "Porta:" msgid "Server address:" msgstr "Indirizzo server:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "Account MusicBrainz" @@ -1426,7 +1425,7 @@ msgstr "Accedi" msgid "Log out" msgstr "Disconnetti" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Generale" @@ -1518,7 +1517,7 @@ msgstr "Somiglianza minima per ricerca file:" msgid "Minimal similarity for cluster lookups:" msgstr "Somiglianza minima per ricerca gruppo:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadati" @@ -1588,7 +1587,7 @@ msgstr "Porta di ascolto predefinita:" msgid "Listen only on localhost" msgstr "Ascolta solo su localhost" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugin" @@ -1915,19 +1914,19 @@ msgstr "Ripristina &default" msgid "Reset all settings for current option page" msgstr "Reimposta tutte le impostazioni di questa pagina" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "Stai per reimpostare le tue opzioni per questa pagina." -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "Attenzione! Questo reimposterà tutte le tue impostazioni." -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "Conferma reimpostazione" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "Sei sicuro?" @@ -2098,7 +2097,7 @@ msgstr "Reimposta tutto" msgid "File Naming" msgstr "Rinominazione file" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2140,15 +2139,15 @@ msgstr "Rimuovi script" msgid "Scripting" msgstr "Scripting" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "Sei sicuro di voler rimuovere questo script?" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "Conferma rimozione" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Errore causato dallo script" diff --git a/po/ja.po b/po/ja.po index 52b449e1b..c4e69b891 100644 --- a/po/ja.po +++ b/po/ja.po @@ -14,14 +14,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Japanese (http://www.transifex.com/musicbrainz/musicbrainz/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -141,7 +141,7 @@ msgid "Merge" msgstr "マージ" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "削除" @@ -1125,9 +1125,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "名前" @@ -1187,9 +1187,8 @@ msgstr "" msgid "File Name" msgstr "ファイル名" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD読み込み" @@ -1352,7 +1351,7 @@ msgstr "APIキー:" msgid "Get API key..." msgstr "APIキーを申し込む…" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "フォークソノミー" @@ -1407,7 +1406,7 @@ msgstr "ポート:" msgid "Server address:" msgstr "サーバアドレス:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainzアカウント" @@ -1419,7 +1418,7 @@ msgstr "ログイン" msgid "Log out" msgstr "ログアウト" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "全般" @@ -1511,7 +1510,7 @@ msgstr "ファイル検索の際の類似性の下限値:" msgid "Minimal similarity for cluster lookups:" msgstr "クラスタ検索の際の類似性の下限値:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "メタデータ" @@ -1581,7 +1580,7 @@ msgstr "標準の待ち受けポート: " msgid "Listen only on localhost" msgstr "localhostの接続のみを受け付ける" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "プラグイン" @@ -1908,19 +1907,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2091,7 +2090,7 @@ msgstr "全てリセット" msgid "File Naming" msgstr "ファイル名" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2133,15 +2132,15 @@ msgstr "" msgid "Scripting" msgstr "スクリプト" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "スクリプトのエラー" diff --git a/po/ko.po b/po/ko.po index 911120eb8..88386038f 100644 --- a/po/ko.po +++ b/po/ko.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Korean (http://www.transifex.com/musicbrainz/musicbrainz/language/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -135,7 +135,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1119,9 +1119,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "이름" @@ -1181,9 +1181,8 @@ msgstr "" msgid "File Name" msgstr "파일 이름" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD 찾기" @@ -1346,7 +1345,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1401,7 +1400,7 @@ msgstr "" msgid "Server address:" msgstr "서버 주소:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1413,7 +1412,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "일반 사항" @@ -1505,7 +1504,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "지역 파일 정보" @@ -1575,7 +1574,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "" @@ -1902,19 +1901,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2085,7 +2084,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2127,15 +2126,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/mr.po b/po/mr.po index aefbe6e56..8f63d310e 100644 --- a/po/mr.po +++ b/po/mr.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Marathi (http://www.transifex.com/musicbrainz/musicbrainz/language/mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -138,7 +138,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "काढून टाका" @@ -1128,9 +1128,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "नाव" @@ -1190,9 +1190,8 @@ msgstr "" msgid "File Name" msgstr "फाईलचे नाव" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1355,7 +1354,7 @@ msgstr "एपीआय की:" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1410,7 +1409,7 @@ msgstr "पोर्ट:" msgid "Server address:" msgstr "सर्वरचा पत्ता:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1422,7 +1421,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "सामान्य" @@ -1514,7 +1513,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "मेटाडेटा" @@ -1584,7 +1583,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "प्लगिन्स" @@ -1911,19 +1910,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2094,7 +2093,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2136,15 +2135,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/nb.po b/po/nb.po index f4ca7b8a7..b8859ba30 100644 --- a/po/nb.po +++ b/po/nb.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the picard project. # # Translators: +# CatQuest, The Endeavouring Cat, 2017 # Kurt-Håkon Eilertsen , 2014 # CatQuest, The Endeavouring Cat, 2013 # CatQuest, The Endeavouring Cat, 2014 @@ -10,72 +11,72 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" -"PO-Revision-Date: 2017-01-19 09:17+0000\n" -"Last-Translator: nikki\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" +"PO-Revision-Date: 2017-02-08 15:05+0000\n" +"Last-Translator: CatQuest, The Endeavouring Cat\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/musicbrainz/musicbrainz/language/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: picard/acoustid.py:111 #, python-format msgid "AcoustID lookup network error for '%(filename)s'!" -msgstr "" +msgstr "Nettverksfeil for AcoustID oppsøket av \"%(filename)s\"" #: picard/acoustid.py:135 #, python-format msgid "AcoustID lookup failed for '%(filename)s'!" -msgstr "" +msgstr "Oppsøk av AcoustID feilet for \"%(filename)s\"" #: picard/acoustid.py:157 #, python-format msgid "AcoustID lookup returned no result for file '%(filename)s'" -msgstr "" +msgstr "Ingen resultater for AcoustID oppsøk av fil \"%(filename)s\"" #: picard/acoustid.py:168 #, python-format msgid "Looking up the fingerprint for file '%(filename)s' ..." -msgstr "" +msgstr "Søker opp lydavtrykk for fil \"%(filename)s\" ..." #: picard/acoustidmanager.py:82 msgid "Submitting AcoustIDs ..." -msgstr "" +msgstr "Sender AcoustIDer..." #: picard/acoustidmanager.py:103 #, python-format msgid "AcoustID submission failed with error '%(error)s': %(message)s" -msgstr "" +msgstr "Feil '%(error)s' ved AcoustID innsending: %(message)s" #: picard/acoustidmanager.py:111 msgid "AcoustIDs successfully submitted." -msgstr "" +msgstr "AcoustIDer sendt inn." #: picard/album.py:70 picard/cluster.py:272 msgid "Unmatched Files" -msgstr "" +msgstr "Usamsvarende filer" #: picard/album.py:206 #, python-format msgid "[could not load album %s]" -msgstr "" +msgstr "[kunne ikke laste album %s]" #: picard/album.py:295 #, python-format msgid "Album %(id)s loaded: %(artist)s - %(album)s" -msgstr "" +msgstr "Album %(id)s lastet: %(artist)s - %(album)s" #: picard/album.py:338 #, python-format msgid "Loading album %(id)s ..." -msgstr "" +msgstr "Henter album %(id)s ..." #: picard/album.py:342 msgid "[loading album information]" -msgstr "" +msgstr "[laster albuminformasjon]" #: picard/album.py:527 #, python-format @@ -87,92 +88,92 @@ msgstr[1] "; %i bilder" #: picard/cluster.py:166 picard/cluster.py:179 #, python-format msgid "No matching releases for cluster %(album)s" -msgstr "" +msgstr "Ingen treff for filklyngen %(album)s" #: picard/cluster.py:185 #, python-format msgid "Cluster %(album)s identified!" -msgstr "" +msgstr "Filklynge %(album)s identifisert!" #: picard/cluster.py:196 #, python-format msgid "Looking up the metadata for cluster %(album)s..." -msgstr "" +msgstr "Søker opp metadata for filklynge %(album)s..." #: picard/collection.py:64 #, python-format msgid "Added %(count)i release to collection \"%(name)s\"" msgid_plural "Added %(count)i releases to collection \"%(name)s\"" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)i utgivelse lagt til samling \"%(name)s\"" +msgstr[1] "%(count)i utgivelser lagt til samling \"%(name)s\"" #: picard/collection.py:86 #, python-format msgid "Removed %(count)i release from collection \"%(name)s\"" msgid_plural "Removed %(count)i releases from collection \"%(name)s\"" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%(count)i utgivelse fjernet fra samling \"%(name)s\"" +msgstr[1] "%(count)i utgivelser fjernet fra samling \"%(name)s\"" #: picard/collection.py:100 #, python-format msgid "Error loading collections: %(error)s" -msgstr "" +msgstr "Feil ved henting av samlinger: %(error)s" #: picard/config_upgrade.py:58 picard/config_upgrade.py:71 msgid "Various Artists file naming scheme removal" -msgstr "" +msgstr "Fjerning av navneordning for filer av diverse artister " #: picard/config_upgrade.py:59 msgid "" "The separate file naming scheme for various artists albums has been removed in this version of Picard.\n" "Your file naming scheme has automatically been merged with that of single artist albums." -msgstr "" +msgstr "Den separate navneordningen for album av diverse artister er fjernet i denne versjonen av Picard.\nDine konfigurerte navneordninger for album av single og diverse artister er slått sammen automatisk; resultatet må gjennomgås." #: picard/config_upgrade.py:72 msgid "" "The separate file naming scheme for various artists albums has been removed in this version of Picard.\n" "You currently do not use this option, but have a separate file naming scheme defined.\n" "Do you want to remove it or merge it with your file naming scheme for single artist albums?" -msgstr "" +msgstr "Den separate navneordningen for album av diverse artister er fjernet i denne versjonen av Picard.\n\nDu har allerede en slik navneordning konfigurert, men den er ikke aktiv.\nØnsker du å fjerne den eller slå det sammen med navneordningen for album av single artister?" #: picard/config_upgrade.py:78 msgid "Merge" msgstr "Flett" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Fjern" #: picard/config_upgrade.py:193 picard/ui/options/scripting.py:28 #, python-format msgid "My script %d" -msgstr "" +msgstr "Mine skript %d" #: picard/file.py:541 #, python-format msgid "No matching tracks for file '%(filename)s'" -msgstr "" +msgstr "Ingen treffende spor for filen '%(filename)s'" #: picard/file.py:557 #, python-format msgid "No matching tracks above the threshold for file '%(filename)s'" -msgstr "" +msgstr "Ingen treffende spor over terskelen for filen '%(filename)s'" #: picard/file.py:564 #, python-format msgid "File '%(filename)s' identified!" -msgstr "" +msgstr "Fil \"%(filename)s\" identifisert!" #: picard/file.py:584 #, python-format msgid "Looking up the metadata for file %(filename)s ..." -msgstr "" +msgstr "Søker opp metadata for fil \"%(filename)s\" ..." #: picard/plugin.py:434 #, python-format msgid "Error loading plugins list: %(error)s" -msgstr "" +msgstr "Feil ved henting av programtilleggsliste: %(error)s" #: picard/releasegroup.py:53 picard/ui/searchdialog.py:515 msgid "Tracks" @@ -197,7 +198,7 @@ msgstr "Plateselskap" #: picard/releasegroup.py:58 msgid "Cat No" -msgstr "" +msgstr "Katalog nr." #: picard/releasegroup.py:88 msgid "[no barcode]" @@ -205,23 +206,23 @@ msgstr "[ingen strekkode]" #: picard/releasegroup.py:108 msgid "[no release info]" -msgstr "" +msgstr "[ingen informasjon om utgivels]" #: picard/tagger.py:405 picard/tagger.py:438 #, python-format msgid "Adding %(count)d file from '%(directory)s' ..." msgid_plural "Adding %(count)d files from '%(directory)s' ..." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Legger til %(count)d fil fra \"%(directory)s\" ..." +msgstr[1] "Legger til %(count)d filer fra \"%(directory)s\" ..." #: picard/tagger.py:597 #, python-format msgid "Removing album %(id)s: %(artist)s - %(album)s" -msgstr "" +msgstr "Fjerner album %(id)s: %(artist)s - %(album)s" #: picard/tagger.py:613 msgid "CD Lookup Error" -msgstr "" +msgstr "Feil i CD oppsøk" #: picard/tagger.py:614 #, python-format @@ -229,7 +230,7 @@ msgid "" "Error while reading CD:\n" "\n" "%s" -msgstr "" +msgstr "Feil ved lesing av cd:\n\n%s" #: picard/const/languages.py:31 msgid "Danish" @@ -245,7 +246,7 @@ msgstr "Engelsk" #: picard/const/languages.py:35 msgid "English (Canada)" -msgstr "Kanadisk Engelsk" +msgstr "Canadisk Engelsk" #: picard/const/languages.py:36 msgid "English (UK)" @@ -290,13 +291,13 @@ msgstr "Svensk" #: picard/coverart/__init__.py:98 #, python-format msgid "Cover art of type '%(type)s' downloaded for %(albumid)s from %(host)s" -msgstr "" +msgstr "Plateomslag av type \"%(type)s\" lastet ned til %(albumid)s fra %(host)s" #: picard/coverart/__init__.py:185 #, python-format msgid "" "Downloading cover art of type '%(type)s' for %(albumid)s from %(host)s ..." -msgstr "" +msgstr "Laster ned plateomslag av type \"%(type)s\" til %(albumid)s fra %(host)s" #: picard/coverart/utils.py:31 msgid "Unknown" @@ -308,15 +309,15 @@ msgstr "Amazon" #: picard/coverart/providers/caa.py:51 msgid "Cover art types" -msgstr "" +msgstr "Omslagsbildetyper" #: picard/coverart/providers/caa.py:84 msgid "Chec&k all" -msgstr "" +msgstr "S&jekk alle" #: picard/coverart/providers/caa.py:85 msgid "&Uncheck all" -msgstr "" +msgstr "&Velg alle" #: picard/coverart/providers/caa.py:187 msgid "Cover Art Archive" @@ -324,15 +325,15 @@ msgstr "Cover Art Archive" #: picard/coverart/providers/caa_release_group.py:41 msgid "CAA Release Group" -msgstr "" +msgstr "CAA Utgivelsesgruppe" #: picard/coverart/providers/local.py:65 msgid "Local Files" -msgstr "" +msgstr "Lokale filer" #: picard/coverart/providers/whitelist.py:38 msgid "Whitelist" -msgstr "" +msgstr "Godkjenningsliste" #: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:625 picard/util/tags.py:21 msgid "Album" @@ -355,7 +356,7 @@ msgstr "Plateselskap" #: picard/ui/cdlookup.py:36 picard/ui/searchdialog.py:519 msgid "Catalog #s" -msgstr "" +msgstr "Katalog #s" #: picard/ui/cdlookup.py:36 picard/ui/searchdialog.py:520 #: picard/util/tags.py:79 @@ -364,48 +365,48 @@ msgstr "Strekkode" #: picard/ui/collectionmenu.py:42 msgid "Refresh List" -msgstr "" +msgstr "Oppdater liste" #: picard/ui/collectionmenu.py:86 #, python-format msgid "%s (%i release)" msgid_plural "%s (%i releases)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s (%i utgivelse)" +msgstr[1] "%s (%i utgivelser)" #: picard/ui/coverartbox.py:143 msgid "View release on MusicBrainz" -msgstr "" +msgstr "Se utgivelsen hos MusicBrainz" #: picard/ui/filebrowser.py:40 msgid "&Move Tagged Files Here" -msgstr "" +msgstr "&Flytt taggede filer hit" #: picard/ui/filebrowser.py:43 msgid "Show &Hidden Files" -msgstr "" +msgstr "&Vis skjulte filer" #: picard/ui/filebrowser.py:48 msgid "&Set as starting directory" -msgstr "" +msgstr "&Sett som startmappe" #: picard/ui/infodialog.py:46 msgid "Existing Cover" -msgstr "" +msgstr "Eksisterende omslagsbilder" #: picard/ui/infodialog.py:46 picard/ui/infodialog.py:52 #: picard/ui/searchdialog.py:330 picard/ui/searchdialog.py:522 #: picard/ui/searchdialog.py:741 msgid "Type" -msgstr "" +msgstr "Type" #: picard/ui/infodialog.py:47 msgid "New Cover" -msgstr "" +msgstr "Nytt omslagsbilde" #: picard/ui/infodialog.py:52 picard/ui/searchdialog.py:524 msgid "Cover" -msgstr "" +msgstr "Omslagsbilde" #: picard/ui/infodialog.py:122 picard/ui/infodialog.py:237 #: picard/ui/options/interface.py:71 @@ -418,7 +419,7 @@ msgid "" "Double-click to open in external viewer\n" "Temporary file: %s\n" "Source: %s" -msgstr "" +msgstr "Dobbelklikk for å åpne i ekstern forhåndsviser\nMidlertidig fil: %s\nKilde: %s" #: picard/ui/infodialog.py:242 msgid "Filename:" @@ -438,15 +439,15 @@ msgstr "Lengde:" #: picard/ui/infodialog.py:254 msgid "Bitrate:" -msgstr "Bitrate:" +msgstr "Bitfrekvens:" #: picard/ui/infodialog.py:256 msgid "Sample rate:" -msgstr "Samplingsrate:" +msgstr "Samplingsfrekvens:" #: picard/ui/infodialog.py:258 msgid "Bits per sample:" -msgstr "Bits per sample:" +msgstr "Bits per sampling:" #: picard/ui/infodialog.py:262 msgid "Mono" @@ -458,15 +459,15 @@ msgstr "Stereo" #: picard/ui/infodialog.py:267 msgid "Channels:" -msgstr "" +msgstr "Kanaler:" #: picard/ui/infodialog.py:278 msgid "Album Info" -msgstr "" +msgstr "Albuminfo" #: picard/ui/infodialog.py:286 msgid "&Errors" -msgstr "" +msgstr "%Feilmeldinger" #: picard/ui/infodialog.py:296 picard/ui/infodialog.py:311 #: picard/ui/ui_infodialog.py:70 @@ -475,19 +476,19 @@ msgstr "&Info" #: picard/ui/infodialog.py:304 msgid "Cluster Info" -msgstr "" +msgstr "Filklyngeinfo" #: picard/ui/infodialog.py:313 msgid "Album:" -msgstr "" +msgstr "Album:" #: picard/ui/infodialog.py:315 msgid "Artist:" -msgstr "" +msgstr "Artist:" #: picard/ui/infodialog.py:325 msgid "Tracklist:" -msgstr "" +msgstr "Sporliste:" #: picard/ui/infostatus.py:51 picard/ui/options/plugins.py:308 msgid "Files" @@ -499,11 +500,11 @@ msgstr "Albumer" #: picard/ui/infostatus.py:53 msgid "Pending files" -msgstr "" +msgstr "Avventende filer" #: picard/ui/infostatus.py:54 msgid "Pending requests" -msgstr "" +msgstr "Forespørsel under behandling" #: picard/ui/itemviews.py:94 picard/util/tags.py:23 msgid "Title" @@ -516,43 +517,43 @@ msgstr "Lengde" #: picard/ui/itemviews.py:162 msgid "Bad match" -msgstr "" +msgstr "Feil samsvaring" #: picard/ui/itemviews.py:163 msgid "Poor match" -msgstr "" +msgstr "Dårlig samsvaring" #: picard/ui/itemviews.py:164 msgid "Ok match" -msgstr "" +msgstr "Passe samsvaring" #: picard/ui/itemviews.py:165 msgid "Good match" -msgstr "" +msgstr "Bra samsvaring" #: picard/ui/itemviews.py:166 msgid "Great match" -msgstr "" +msgstr "Flott samsvaring" #: picard/ui/itemviews.py:167 msgid "Excellent match" -msgstr "" +msgstr "Fantastisk samsvaring" #: picard/ui/itemviews.py:243 msgid "&Expand all" -msgstr "" +msgstr "&Utvid alle" #: picard/ui/itemviews.py:245 msgid "&Collapse all" -msgstr "" +msgstr "%Skjul alle" #: picard/ui/itemviews.py:247 msgid "Select &all" -msgstr "" +msgstr "Velg &alle" #: picard/ui/itemviews.py:249 msgid "Ctrl+A" -msgstr "" +msgstr "Ctrl+A" #: picard/ui/itemviews.py:315 msgid "&Other versions" @@ -564,31 +565,31 @@ msgstr "Laster..." #: picard/ui/itemviews.py:383 msgid "Collections" -msgstr "" +msgstr "Samlinger" #: picard/ui/itemviews.py:386 msgid "P&lugins" -msgstr "" +msgstr "Program&tillegg" #: picard/ui/itemviews.py:557 msgid "file view" -msgstr "" +msgstr "filvisning" #: picard/ui/itemviews.py:558 msgid "Contains unmatched files and clusters" -msgstr "" +msgstr "Inneholder ikke samsvarende filer og filklynger" #: picard/ui/itemviews.py:578 msgid "Clusters" -msgstr "" +msgstr "Filklynger" #: picard/ui/itemviews.py:587 msgid "album view" -msgstr "" +msgstr "albumvisning" #: picard/ui/itemviews.py:588 msgid "Contains albums and matched files" -msgstr "" +msgstr "Inneholder album og samsvarende filklynger" #: picard/ui/itemviews.py:694 picard/ui/options/renaming.py:188 msgid "Error" @@ -596,27 +597,27 @@ msgstr "Feil" #: picard/ui/itemviews.py:698 msgid "Album modified and complete" -msgstr "" +msgstr "Album endret og fullført" #: picard/ui/itemviews.py:701 msgid "Album unchanged and complete" -msgstr "" +msgstr "Album uendret og fullført" #: picard/ui/itemviews.py:705 msgid "Album modified" -msgstr "" +msgstr "Album endret" #: picard/ui/itemviews.py:708 msgid "Album unchanged" -msgstr "" +msgstr "Album uendret" #: picard/ui/itemviews.py:811 msgid "Track saved" -msgstr "" +msgstr "Spor lagret" #: picard/ui/itemviews.py:813 picard/ui/itemviews.py:817 msgid "Pending" -msgstr "" +msgstr "Avventer" #: picard/ui/logview.py:109 msgid "Log" @@ -624,11 +625,11 @@ msgstr "Logg" #: picard/ui/logview.py:113 msgid "Debug mode" -msgstr "" +msgstr "Feilsøkingsmodus" #: picard/ui/logview.py:134 msgid "Activity History" -msgstr "" +msgstr "Handlingshistorie" #: picard/ui/mainwindow.py:82 msgid "MusicBrainz Picard" @@ -636,11 +637,11 @@ msgstr "MusicBrainz Picard" #: picard/ui/mainwindow.py:163 msgid "Unsaved Changes" -msgstr "" +msgstr "Ulagrede endringer" #: picard/ui/mainwindow.py:164 msgid "Are you sure you want to quit Picard?" -msgstr "" +msgstr "Er du sikker på at du vil avslutte Picard?" #: picard/ui/mainwindow.py:165 #, python-format @@ -648,12 +649,12 @@ msgid "" "There is %d unsaved file. Closing Picard will lose all unsaved changes." msgid_plural "" "There are %d unsaved files. Closing Picard will lose all unsaved changes." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d ulagret fil. Alle endringer vil gå tapt hvis du lukker Picard." +msgstr[1] "%d ulagrede filer. Alle endringer vil gå tapt hvis du lukker Picard." #: picard/ui/mainwindow.py:172 msgid "&Quit Picard" -msgstr "" +msgstr "&Avslutt Picard" #: picard/ui/mainwindow.py:224 msgid "Ready" @@ -664,22 +665,22 @@ msgid "" "Picard listens on this port to integrate with your browser. When you " "\"Search\" or \"Open in Browser\" from Picard, clicking the \"Tagger\" " "button on the web page loads the release into Picard." -msgstr "" +msgstr "Picard lytter på denne porten for å samarbeide med nettleseren. Når du utfører et \"Søk\" eller \"Åpne i nettleser\" fra Picard, så vil det å klikke \"tagger\" knappen på nettsida åpne utgivelsen i Picard." #: picard/ui/mainwindow.py:251 #, python-format msgid " Listening on port %(port)d " -msgstr "" +msgstr " Lytter på port %(port)d " #: picard/ui/mainwindow.py:307 msgid "Submission Error" -msgstr "" +msgstr "Innsendingsfeil" #: picard/ui/mainwindow.py:308 msgid "" "You need to configure your AcoustID API key before you can submit " "fingerprints." -msgstr "" +msgstr "AcoustID API-nøkkelen må konfigureres før du kan sende inn lydavtrykk." #: picard/ui/mainwindow.py:313 msgid "&Options..." @@ -703,7 +704,7 @@ msgstr "&Om..." #: picard/ui/mainwindow.py:335 msgid "&Donate..." -msgstr "" +msgstr "&Donér..." #: picard/ui/mainwindow.py:338 msgid "&Report a Bug..." @@ -711,7 +712,7 @@ msgstr "&Rapportér en feil..." #: picard/ui/mainwindow.py:341 msgid "&Support Forum..." -msgstr "&Support Forum..." +msgstr "&Forum for brukerstøtte..." #: picard/ui/mainwindow.py:344 msgid "&Add Files..." @@ -719,15 +720,15 @@ msgstr "&Legg til filer" #: picard/ui/mainwindow.py:345 msgid "Add files to the tagger" -msgstr "" +msgstr "Legg filer til taggeren" #: picard/ui/mainwindow.py:350 msgid "A&dd Folder..." -msgstr "" +msgstr "Legg til &mappe..." #: picard/ui/mainwindow.py:351 msgid "Add a folder to the tagger" -msgstr "" +msgstr "Legg en mappe til taggeren" #: picard/ui/mainwindow.py:353 msgid "Ctrl+D" @@ -739,15 +740,15 @@ msgstr "&Lagre" #: picard/ui/mainwindow.py:357 msgid "Save selected files" -msgstr "" +msgstr "Lagre valgte filer" #: picard/ui/mainwindow.py:363 msgid "S&ubmit AcoustIDs" -msgstr "" +msgstr "S&end AcoustIDer" #: picard/ui/mainwindow.py:364 msgid "Submit acoustic fingerprints" -msgstr "" +msgstr "Send inn lydavtrykk" #: picard/ui/mainwindow.py:368 msgid "E&xit" @@ -763,39 +764,39 @@ msgstr "&Fjern" #: picard/ui/mainwindow.py:375 msgid "Remove selected files/albums" -msgstr "" +msgstr "Fjern valgte filer/album" #: picard/ui/mainwindow.py:379 picard/ui/metadatabox.py:300 msgid "Lookup in &Browser" -msgstr "" +msgstr "Slå opp i &nettleser" #: picard/ui/mainwindow.py:380 msgid "Lookup selected item on MusicBrainz website" -msgstr "" +msgstr "Slå opp valgte element på Musicbrainz nettsida" #: picard/ui/mainwindow.py:383 msgid "Ctrl+Shift+L" -msgstr "" +msgstr "Ctrl+Shift+L" #: picard/ui/mainwindow.py:386 msgid "Search for similar albums..." -msgstr "" +msgstr "Søk etter lignende album..." #: picard/ui/mainwindow.py:387 msgid "View similar releases and optionally choose a different release" -msgstr "" +msgstr "Vis lignende utgivelser og eventuelt velg en annen utgivelse" #: picard/ui/mainwindow.py:390 msgid "Search for similar tracks..." -msgstr "" +msgstr "Søk etter lignende spor..." #: picard/ui/mainwindow.py:391 msgid "View similar tracks and optionally choose a different release" -msgstr "" +msgstr "Vis lignende spor og velg eventuelt en annen utgivelse" #: picard/ui/mainwindow.py:394 msgid "File &Browser" -msgstr "" +msgstr "&Filbehandler" #: picard/ui/mainwindow.py:398 msgid "Ctrl+B" @@ -803,7 +804,7 @@ msgstr "Ctrl+B" #: picard/ui/mainwindow.py:401 msgid "&Cover Art" -msgstr "&Plateomslag" +msgstr "&Omslagsbilder" #: picard/ui/mainwindow.py:407 picard/ui/mainwindow.py:619 #: picard/ui/searchdialog.py:71 @@ -812,11 +813,11 @@ msgstr "Søk" #: picard/ui/mainwindow.py:411 msgid "Lookup &CD..." -msgstr "" +msgstr "Søk opp &CD..." #: picard/ui/mainwindow.py:412 msgid "Lookup the details of the CD in your drive" -msgstr "" +msgstr "Slå opp detaljene av CDen i cd-rom stasjonen" #: picard/ui/mainwindow.py:414 msgid "Ctrl+K" @@ -824,13 +825,13 @@ msgstr "Ctrl+K" #: picard/ui/mainwindow.py:417 msgid "&Scan" -msgstr "" +msgstr "&Skann" #: picard/ui/mainwindow.py:418 msgid "" "Use AcoustID audio fingerprint to identify the files by the actual music, " "even if they have no metadata" -msgstr "" +msgstr "Bruk AcoustID lydavtrykk til å identifisere selve musikken, selv om filene ikke har noe metadata" #: picard/ui/mainwindow.py:421 msgid "Ctrl+Y" @@ -838,11 +839,11 @@ msgstr "Ctrl+Y" #: picard/ui/mainwindow.py:424 msgid "Cl&uster" -msgstr "" +msgstr "&Gruppér" #: picard/ui/mainwindow.py:425 msgid "Cluster files into album clusters" -msgstr "" +msgstr "Gruppér filer i albumklynger" #: picard/ui/mainwindow.py:428 msgid "Ctrl+U" @@ -850,11 +851,11 @@ msgstr "Ctrl+U" #: picard/ui/mainwindow.py:431 msgid "&Lookup" -msgstr "" +msgstr "Opps&øk" #: picard/ui/mainwindow.py:432 msgid "Lookup selected items in MusicBrainz" -msgstr "" +msgstr "Søk opp valgte elementer i MusicBrainz" #: picard/ui/mainwindow.py:437 msgid "Ctrl+L" @@ -878,7 +879,7 @@ msgstr "Ctrl+R" #: picard/ui/mainwindow.py:450 msgid "&Rename Files" -msgstr "" +msgstr "&Endre navn på filer" #: picard/ui/mainwindow.py:455 msgid "&Move Files" @@ -886,39 +887,39 @@ msgstr "&Flytt filer" #: picard/ui/mainwindow.py:460 msgid "Save &Tags" -msgstr "" +msgstr "&Lagre tagger" #: picard/ui/mainwindow.py:465 msgid "Tags From &File Names..." -msgstr "" +msgstr "Tagger fra &filnavn..." #: picard/ui/mainwindow.py:469 msgid "&Open My Collections in Browser" -msgstr "" +msgstr "&Åpne Mine samlinger i nettleseren" #: picard/ui/mainwindow.py:473 msgid "View Error/Debug &Log" -msgstr "" +msgstr "Vis Feil/Feilsøkings&log" #: picard/ui/mainwindow.py:476 msgid "View Activity &History" -msgstr "" +msgstr "Se &handlingshistorie" #: picard/ui/mainwindow.py:483 msgid "Open in &Player" -msgstr "" +msgstr "Åpne i %spiller" #: picard/ui/mainwindow.py:484 msgid "Play the file in your default media player" -msgstr "" +msgstr "Spill filen i standard mediespiller" #: picard/ui/mainwindow.py:488 msgid "Open Containing &Folder" -msgstr "" +msgstr "Åpne overordnet %mappe" #: picard/ui/mainwindow.py:489 msgid "Open the containing folder in your file explorer" -msgstr "" +msgstr "Åpne den overordnende %mappen i filbehandleren" #: picard/ui/mainwindow.py:518 msgid "&File" @@ -930,7 +931,7 @@ msgstr "&Rediger" #: picard/ui/mainwindow.py:535 msgid "&View" -msgstr "" +msgstr "&Vis" #: picard/ui/mainwindow.py:541 msgid "&Options" @@ -946,7 +947,7 @@ msgstr "&Hjelp" #: picard/ui/mainwindow.py:586 msgid "Actions" -msgstr "" +msgstr "Handlinger" #: picard/ui/mainwindow.py:627 msgid "Track" @@ -959,106 +960,106 @@ msgstr "Alle støttede formater" #: picard/ui/mainwindow.py:730 #, python-format msgid "Adding multiple directories from '%(directory)s' ..." -msgstr "" +msgstr "Legger til flere mapper fra \"%(directory)s\"..." #: picard/ui/mainwindow.py:735 #, python-format msgid "Adding directory: '%(directory)s' ..." -msgstr "" +msgstr "Legger til mappe \"%(directory)s\" ..." #: picard/ui/mainwindow.py:801 msgid "Configuration Required" -msgstr "" +msgstr "Konfigurasjon nødvendig" #: picard/ui/mainwindow.py:802 msgid "" "Audio fingerprinting is not yet configured. Would you like to configure it " "now?" -msgstr "" +msgstr "Lydfingeravtrykk er foreløpig ikke konfigurert. Vil du sette opp dette nå?" #: picard/ui/mainwindow.py:902 #, python-format msgid "%(filename)s (error: %(error)s)" -msgstr "" +msgstr "%(filename)s (feil: %(error)s)" #: picard/ui/mainwindow.py:908 #, python-format msgid "%(filename)s" -msgstr "" +msgstr "%(filename)s" #: picard/ui/mainwindow.py:918 #, python-format msgid "%(filename)s (%(similarity)d%%) (error: %(error)s)" -msgstr "" +msgstr "%(filename)s (%(similarity)d%%) (Feil: %(error)s)" #: picard/ui/mainwindow.py:925 #, python-format msgid "%(filename)s (%(similarity)d%%)" -msgstr "" +msgstr "%(filename)s (%(similarity)d%%)" #: picard/ui/mainwindow.py:961 msgid "Authentication Required" -msgstr "" +msgstr "Godkjenning nødvendig" #: picard/ui/mainwindow.py:962 msgid "" "Picard needs authorization to access your personal data on the MusicBrainz " "server. Would you like to log in now?" -msgstr "" +msgstr "Picard trenger tillatelse for å få tilgang til dine personlige data på MusicBrainz serveren. Logge inn nå?" #: picard/ui/metadatabox.py:84 #, python-format msgid "(different across %d item)" msgid_plural "(different across %d items)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "(%d fil forskjellig)" +msgstr[1] "(forskjell mellom %d filer)" #: picard/ui/metadatabox.py:92 #, python-format msgid "(missing from %d item)" msgid_plural "(missing from %d items)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "(mangler fra %d fil)" +msgstr[1] "(mangler fra %d filer)" #: picard/ui/metadatabox.py:155 msgid "metadata view" -msgstr "" +msgstr "vis metadata" #: picard/ui/metadatabox.py:156 msgid "Displays original and new tags for the selected files" -msgstr "" +msgstr "Viser de opprinnelige og de nye verdiene for valgte filer" #: picard/ui/metadatabox.py:158 msgid "Tag" -msgstr "" +msgstr "Tagger" #: picard/ui/metadatabox.py:158 msgid "Original Value" -msgstr "" +msgstr "Opprinnelig verdi" #: picard/ui/metadatabox.py:158 msgid "New Value" -msgstr "" +msgstr "Ny verdi" #: picard/ui/metadatabox.py:182 msgid "Add New Tag..." -msgstr "" +msgstr "Legg til ny tagg..." #: picard/ui/metadatabox.py:184 msgid "Show Changes First" -msgstr "" +msgstr "Se endringer først" #: picard/ui/metadatabox.py:190 msgid "Alt+Shift+A" -msgstr "" +msgstr "Alt+Shift+A" #: picard/ui/metadatabox.py:193 msgid "Alt+Shift+E" -msgstr "" +msgstr "Alt+Shift+E" #: picard/ui/metadatabox.py:195 msgid "Alt+Shift+R" -msgstr "" +msgstr "Alt+Shift+R" #: picard/ui/metadatabox.py:274 msgid "Edit..." @@ -1066,48 +1067,48 @@ msgstr "Endre..." #: picard/ui/metadatabox.py:282 msgid "Add to 'Preserve Tags' List" -msgstr "" +msgstr "Legg til i \"Behold Tagger\" listen" #: picard/ui/metadatabox.py:286 msgid "Remove from 'Preserve Tags' List" -msgstr "" +msgstr "Fjern fra \"Behold Tagger\" listen" #: picard/ui/metadatabox.py:319 msgid "Use Original Value" msgid_plural "Use Original Values" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Bruk opprinnelig verdi" +msgstr[1] "Bruk opprinnelige verdier" #: picard/ui/passworddialog.py:35 #, python-format msgid "" "The server %s requires you to login. Please enter your username and " "password." -msgstr "" +msgstr "Tjeneren %s krever at du logger inn. Skriv inn brukernavn og passord." #: picard/ui/passworddialog.py:55 #, python-format msgid "" "The proxy %s requires you to login. Please enter your username and password." -msgstr "" +msgstr "Mellomleddstjeneren %s krever at du logger inn. Skriv inn brukernavn og passord." #: picard/ui/searchdialog.py:109 picard/ui/ui_options_interface.py:126 msgid "Use advanced query syntax" -msgstr "" +msgstr "Bruk avansert forespørselssyntaks" #: picard/ui/searchdialog.py:114 msgid "" " (Syntax " "Help)" -msgstr "" +msgstr " (Syntaks hjelp)" #: picard/ui/searchdialog.py:228 msgid "Loading..." -msgstr "" +msgstr "Laster..." #: picard/ui/searchdialog.py:259 msgid "Retry" -msgstr "" +msgstr "Prøv igjen" #: picard/ui/searchdialog.py:288 #, python-format @@ -1115,38 +1116,38 @@ msgid "" "Following error occurred while fetching " "results:

Network request error for %s:
%s (QT code %d, " "HTTP code %s)
" -msgstr "" +msgstr "Det oppsto en feil ved henting av resultater:

feil ved Nettverkforespørsel for %s:
%s (QT code %d, HTTP code %s)
" #: picard/ui/searchdialog.py:293 msgid "" "No results found. Please try a different search query." -msgstr "" +msgstr "Ingen resultater funnet. Forsøk med et annet søkemne." #: picard/ui/searchdialog.py:320 picard/ui/searchdialog.py:508 msgid "Load into Picard" -msgstr "" +msgstr "Last inn i Picard" #: picard/ui/searchdialog.py:322 msgid "Track Search Results" -msgstr "" +msgstr "Sporsøksresultat" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Navn" #: picard/ui/searchdialog.py:327 msgid "Release" -msgstr "" +msgstr "Utgivelse" #: picard/ui/searchdialog.py:435 msgid "Standalone Recording" -msgstr "" +msgstr "Frittstående innspilling" #: picard/ui/searchdialog.py:510 msgid "Album Search Results" -msgstr "" +msgstr "Albumsøkeresultat" #: picard/ui/searchdialog.py:521 picard/util/tags.py:85 msgid "Language" @@ -1154,53 +1155,52 @@ msgstr "Språk" #: picard/ui/searchdialog.py:523 picard/ui/ui_options_plugins.py:140 msgid "Status" -msgstr "" +msgstr "Status" #: picard/ui/searchdialog.py:737 msgid "Show in browser" -msgstr "" +msgstr "Vis i nettleser" #: picard/ui/searchdialog.py:738 msgid "Artist Search Dialog" -msgstr "" +msgstr "Artistsøksdialogboks" #: picard/ui/searchdialog.py:742 msgid "Gender" -msgstr "" +msgstr "Kjønn" #: picard/ui/searchdialog.py:743 msgid "Area" -msgstr "" +msgstr "Område" #: picard/ui/searchdialog.py:744 msgid "Begin" -msgstr "" +msgstr "Start" #: picard/ui/searchdialog.py:745 msgid "Begin Area" -msgstr "" +msgstr "Startområde" #: picard/ui/searchdialog.py:746 msgid "End" -msgstr "" +msgstr "Slutt" #: picard/ui/searchdialog.py:747 msgid "End Area" -msgstr "" +msgstr "Sluttområde" #: picard/ui/tagsfromfilenames.py:65 picard/ui/tagsfromfilenames.py:113 msgid "File Name" -msgstr "" +msgstr "Filnavn" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" -msgstr "CD Lookup" +msgstr "CD oppsøk" #: picard/ui/ui_cdlookup.py:54 msgid "The following releases on MusicBrainz match the CD:" -msgstr "De følgende album på MusicBrainz matcher CDen:" +msgstr "De følgende utgivelser på MusicBrainz samsvarer med CDen:" #: picard/ui/ui_cdlookup.py:55 msgid "OK" @@ -1208,7 +1208,7 @@ msgstr "OK" #: picard/ui/ui_cdlookup.py:56 msgid "Lookup manually" -msgstr "" +msgstr "Søk opp manuelt" #: picard/ui/ui_cdlookup.py:57 msgid "Cancel" @@ -1216,113 +1216,113 @@ msgstr "Avbryt" #: picard/ui/ui_edittagdialog.py:88 msgid "Edit Tag" -msgstr "" +msgstr "Endre tagg" #: picard/ui/ui_edittagdialog.py:89 msgid "Edit value" -msgstr "" +msgstr "Endre verdi" #: picard/ui/ui_edittagdialog.py:90 msgid "Add value" -msgstr "" +msgstr "Legg til verdi" #: picard/ui/ui_edittagdialog.py:91 msgid "Remove value" -msgstr "" +msgstr "Fjern verdi" #: picard/ui/ui_infodialog.py:71 msgid "A&rtwork" -msgstr "" +msgstr "G&rafikk" #: picard/ui/ui_infostatus.py:96 picard/ui/ui_provider_options_caa.py:85 #: picard/ui/ui_provider_options_local.py:63 msgid "Form" -msgstr "" +msgstr "Format" #: picard/ui/ui_options.py:38 msgid "Options" -msgstr "" +msgstr "Alternativer" #: picard/ui/ui_options_advanced.py:75 msgid "Advanced options" -msgstr "" +msgstr "Avanserte innstillinger" #: picard/ui/ui_options_advanced.py:76 msgid "Ignore file paths matching the following regular expression:" -msgstr "" +msgstr "Ignorer filbaner som tilsvarer følgende regulære uttrykk:" #: picard/ui/ui_options_advanced.py:77 msgid "Ignore hidden files" -msgstr "" +msgstr "Ignorer skjulte filer" #: picard/ui/ui_options_advanced.py:78 msgid "Recursively add files and folders from directory" -msgstr "" +msgstr "Legg til alle filer og undermapper" #: picard/ui/ui_options_advanced.py:79 msgid "" "Ignore the following tracks when determining whether a release is complete" -msgstr "" +msgstr "Ved avgjørelse om utgivelsen er fullstendig, ignorer følgende tagger" #: picard/ui/ui_options_advanced.py:80 msgid "Video tracks" -msgstr "" +msgstr "Videospor" #: picard/ui/ui_options_advanced.py:81 msgid "Pregap tracks" -msgstr "" +msgstr "Førintervallspor" #: picard/ui/ui_options_advanced.py:82 msgid "Data tracks" -msgstr "" +msgstr "Dataspor" #: picard/ui/ui_options_advanced.py:83 msgid "Silent tracks" -msgstr "" +msgstr "Lydløst spor" #: picard/ui/ui_options_cdlookup.py:43 msgid "CD-ROM device to use for lookups:" -msgstr "" +msgstr "CD-rom stasjon til bruk for oppsøk:" #: picard/ui/ui_options_cdlookup_select.py:50 msgid "Default CD-ROM drive to use for lookups:" -msgstr "" +msgstr "Standard CD-rom stasjon til bruk for oppsøk:" #: picard/ui/ui_options_cover.py:79 msgid "Location" -msgstr "" +msgstr "Sted" #: picard/ui/ui_options_cover.py:80 msgid "Embed cover images into tags" -msgstr "Legg cover til filtaggene" +msgstr "Bygg inn omslagsbilder i filer" #: picard/ui/ui_options_cover.py:81 msgid "Only embed a front image" -msgstr "" +msgstr "Bygg bare inn forsidebilde" #: picard/ui/ui_options_cover.py:82 msgid "Save cover images as separate files" -msgstr "Lagre plateomslag som egne filer" +msgstr "Lagre omslagsbilder som egne filer" #: picard/ui/ui_options_cover.py:83 msgid "Use the following file name for images:" -msgstr "" +msgstr "Bruk følgende filnavn for bilder:" #: picard/ui/ui_options_cover.py:84 msgid "Overwrite the file if it already exists" -msgstr "Overskrive filen hvis den eksisterer?" +msgstr "Overskriv filen hvis den allerede finnes?" #: picard/ui/ui_options_cover.py:85 msgid "Cover Art Providers" -msgstr "" +msgstr "Leverandører av omslagsbilder" #: picard/ui/ui_options_fingerprinting.py:86 msgid "Audio Fingerprinting" -msgstr "" +msgstr "Lydavtrykk" #: picard/ui/ui_options_fingerprinting.py:87 msgid "Do not use audio fingerprinting" -msgstr "" +msgstr "Ikke bruk lydavtrykk" #: picard/ui/ui_options_fingerprinting.py:88 msgid "Use AcoustID" @@ -1330,15 +1330,15 @@ msgstr "Bruk AcoustID" #: picard/ui/ui_options_fingerprinting.py:89 msgid "AcoustID Settings" -msgstr "" +msgstr "AcoustID Innstillinger" #: picard/ui/ui_options_fingerprinting.py:90 msgid "Ignore existing AcoustID fingerprints" -msgstr "" +msgstr "Ignorer eksisterende AcoustID lydavtrykk" #: picard/ui/ui_options_fingerprinting.py:91 msgid "Fingerprint calculator:" -msgstr "" +msgstr "Lydavtrykkskalkulator" #: picard/ui/ui_options_fingerprinting.py:92 #: picard/ui/ui_options_interface.py:129 picard/ui/ui_options_renaming.py:165 @@ -1355,29 +1355,29 @@ msgstr "API nøkkel:" #: picard/ui/ui_options_fingerprinting.py:95 msgid "Get API key..." -msgstr "" +msgstr "Få API nøkkel..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" -msgstr "" +msgstr "Folksonomi tagger" #: picard/ui/ui_options_folksonomy.py:116 msgid "Ignore tags:" -msgstr "Overse merker:" +msgstr "Ignorer tagger:" #: picard/ui/ui_options_folksonomy.py:117 msgid "Only use my tags" -msgstr "" +msgstr "Bruk bare mine tagger" #: picard/ui/ui_options_folksonomy.py:118 msgid "" "Fall back on album's artists tags if no tags are found for the release or " "release group" -msgstr "" +msgstr "Fall tilbake på artist tagger hvis ingen utgivelse- eller utgivelsesgruppe-tagger finnes" #: picard/ui/ui_options_folksonomy.py:119 msgid "Minimal tag usage:" -msgstr "" +msgstr "Minimal tagg bruk:" #: picard/ui/ui_options_folksonomy.py:120 picard/ui/ui_options_matching.py:75 #: picard/ui/ui_options_matching.py:76 picard/ui/ui_options_matching.py:77 @@ -1386,11 +1386,11 @@ msgstr " %" #: picard/ui/ui_options_folksonomy.py:121 msgid "Maximum number of tags:" -msgstr "" +msgstr "Maksimum antall tagger:" #: picard/ui/ui_options_folksonomy.py:122 msgid "Join multiple tags with:" -msgstr "" +msgstr "Slå sammen flere tagger med:" #: picard/ui/ui_options_folksonomy.py:123 msgid " / " @@ -1412,93 +1412,93 @@ msgstr "Port:" msgid "Server address:" msgstr "Tjeneradresse:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" -msgstr "" +msgstr "MusicBrainz brukerkonto" #: picard/ui/ui_options_general.py:96 msgid "Log in" -msgstr "" +msgstr "Logg inn" #: picard/ui/ui_options_general.py:97 msgid "Log out" -msgstr "" +msgstr "Logg ut" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Generelt" #: picard/ui/ui_options_general.py:99 msgid "Automatically scan all new files" -msgstr "" +msgstr "Skann alle nye filer automatisk" #: picard/ui/ui_options_general.py:100 msgid "Ignore MBIDs when loading new files" -msgstr "" +msgstr "Ignorer MBID ved lasting av nye filer" #: picard/ui/ui_options_interface.py:122 msgid "Miscellaneous" -msgstr "" +msgstr "Annet" #: picard/ui/ui_options_interface.py:123 msgid "Show text labels under icons" -msgstr "" +msgstr "Vis tekst under ikoner" #: picard/ui/ui_options_interface.py:124 msgid "Allow selection of multiple directories" -msgstr "" +msgstr "Tillat inkludering av flere mapper" #: picard/ui/ui_options_interface.py:125 msgid "Use builtin search rather than looking in browser" -msgstr "" +msgstr "Bruk innebygget søk isteden for nettleserens" #: picard/ui/ui_options_interface.py:127 msgid "Show a quit confirmation dialog for unsaved changes" -msgstr "" +msgstr "Vis en avsluttingsbekreftelse ved ulagrede filer" #: picard/ui/ui_options_interface.py:128 msgid "Begin browsing in the following directory:" -msgstr "" +msgstr "Begynn søk i følgende mappe:" #: picard/ui/ui_options_interface.py:130 msgid "User interface language:" -msgstr "" +msgstr "Brukergrensesnittsspråk" #: picard/ui/ui_options_interface.py:131 msgid "Customize Action Toolbar" -msgstr "" +msgstr "Tilpass handlingsverktøylinja" #: picard/ui/ui_options_interface.py:132 msgid "Add a new button to Toolbar" -msgstr "" +msgstr "Legg til en ny knapp på verktøylinja" #: picard/ui/ui_options_interface.py:133 msgid "Add Action" -msgstr "" +msgstr "Legg til handling" #: picard/ui/ui_options_interface.py:134 msgid "Insert a separator" -msgstr "" +msgstr "Sett in skilletegn" #: picard/ui/ui_options_interface.py:135 msgid "Add Separator" -msgstr "" +msgstr "Legg til separator" #: picard/ui/ui_options_interface.py:136 msgid "Move selected item up" -msgstr "" +msgstr "Flytt valgte element opp" #: picard/ui/ui_options_interface.py:137 picard/ui/ui_options_interface.py:139 msgid "..." -msgstr "" +msgstr "..." #: picard/ui/ui_options_interface.py:138 msgid "Move selected item down" -msgstr "" +msgstr "Flytt valgte element ned" #: picard/ui/ui_options_interface.py:140 msgid "Remove button from toolbar" -msgstr "" +msgstr "Fjern knapp fra verktøylinja" #: picard/ui/ui_options_matching.py:73 msgid "Thresholds" @@ -1506,47 +1506,47 @@ msgstr "Terskler" #: picard/ui/ui_options_matching.py:74 msgid "Minimal similarity for matching files to tracks:" -msgstr "Minste likhet for å matche filer til spor:" +msgstr "Minste likhet for å samsvare filer med spor:" #: picard/ui/ui_options_matching.py:78 msgid "Minimal similarity for file lookups:" -msgstr "Minste likhet for filoppslag:" +msgstr "Minste likhet for filoppsøk:" #: picard/ui/ui_options_matching.py:79 msgid "Minimal similarity for cluster lookups:" -msgstr "Minste likhet for gruppeoppslag:" +msgstr "Minste likhet for filklyngeoppsøk:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" -msgstr "" +msgstr "Metadata" #: picard/ui/ui_options_metadata.py:102 msgid "Translate artist names to this locale where possible:" -msgstr "" +msgstr "Hvis mulig, bruk følgende region til oversetting av artistnavn:" #: picard/ui/ui_options_metadata.py:103 msgid "Use standardized artist names" -msgstr "" +msgstr "Bruk standardiserte artistnavn" #: picard/ui/ui_options_metadata.py:104 msgid "Convert Unicode punctuation characters to ASCII" -msgstr "" +msgstr "Konverter Unicode skilletegn til ASCII" #: picard/ui/ui_options_metadata.py:105 msgid "Use release relationships" -msgstr "" +msgstr "Bru utgivelsesrelasjoner" #: picard/ui/ui_options_metadata.py:106 msgid "Use track relationships" -msgstr "" +msgstr "Bruk sporrelasjoner" #: picard/ui/ui_options_metadata.py:107 msgid "Use folksonomy tags as genre" -msgstr "" +msgstr "Bruk folksonomi tagger som sjanger" #: picard/ui/ui_options_metadata.py:108 msgid "Custom Fields" -msgstr "" +msgstr "Egendefinerte felt" #: picard/ui/ui_options_metadata.py:109 msgid "Various artists:" @@ -1564,7 +1564,7 @@ msgstr "Standard" #: picard/ui/ui_options_network.py:107 msgid "Web Proxy" -msgstr "Web Proxy" +msgstr "Mellomleddstjener" #: picard/ui/ui_options_network.py:108 picard/ui/ui_passworddialog.py:66 msgid "Password:" @@ -1576,19 +1576,19 @@ msgstr "Brukernavn:" #: picard/ui/ui_options_network.py:112 msgid "Browser Integration" -msgstr "" +msgstr "Nettleserintegrasjon" #: picard/ui/ui_options_network.py:113 msgid "Default listening port:" -msgstr "" +msgstr "Standard lytteport:" #: picard/ui/ui_options_network.py:114 msgid "Listen only on localhost" -msgstr "" +msgstr "Lytt bare på lokalvert" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" -msgstr "" +msgstr "Programtillegg" #: picard/ui/ui_options_plugins.py:139 msgid "Version" @@ -1596,15 +1596,15 @@ msgstr "Versjon" #: picard/ui/ui_options_plugins.py:141 msgid "Install plugin..." -msgstr "Installér plugin.." +msgstr "Installér programtillegg..." #: picard/ui/ui_options_plugins.py:142 msgid "Open plugin folder" -msgstr "" +msgstr "Åpne mappen med programtillegg" #: picard/ui/ui_options_plugins.py:143 msgid "Reload List of Plugins" -msgstr "" +msgstr "Oppdater listen med programtillegg" #: picard/ui/ui_options_plugins.py:144 msgid "Details" @@ -1612,7 +1612,7 @@ msgstr "Detaljer" #: picard/ui/ui_options_ratings.py:49 msgid "Enable track ratings" -msgstr "" +msgstr "Skru på sporvurderinger" #: picard/ui/ui_options_ratings.py:50 msgid "" @@ -1620,7 +1620,7 @@ msgid "" "user who did the rating. That way different ratings for different users can " "be stored in the files. Please specify the e-mail you want to use to save " "your ratings." -msgstr "" +msgstr "Picard lagrer vurderinger sammen med en e-postadresse som identifiserer brukeren. Sånn kan vurderinger fra forskjellige brukere lagres i filer. Skriv inn e-posten du vil ha lagret sammen med dine vurderinger." #: picard/ui/ui_options_ratings.py:51 msgid "E-mail:" @@ -1628,15 +1628,15 @@ msgstr "E-post:" #: picard/ui/ui_options_ratings.py:52 msgid "Submit ratings to MusicBrainz" -msgstr "" +msgstr "Send vurderinger til MusicBrainz" #: picard/ui/ui_options_releases.py:104 msgid "Preferred release types" -msgstr "" +msgstr "Foretrukne utgivelsestyper" #: picard/ui/ui_options_releases.py:105 msgid "Preferred release countries" -msgstr "" +msgstr "Foretrukne utgivelsesland" #: picard/ui/ui_options_releases.py:106 picard/ui/ui_options_releases.py:109 msgid ">" @@ -1648,31 +1648,31 @@ msgstr "<" #: picard/ui/ui_options_releases.py:108 msgid "Preferred release formats" -msgstr "" +msgstr "Foretrukne utgivelsesformater" #: picard/ui/ui_options_renaming.py:163 msgid "Move files when saving" -msgstr "" +msgstr "Flytt filer ved lagring" #: picard/ui/ui_options_renaming.py:164 msgid "Destination directory:" -msgstr "" +msgstr "Destinasjonsmappe:" #: picard/ui/ui_options_renaming.py:166 msgid "Move additional files (case insensitive):" -msgstr "" +msgstr "Flytt flere filer (ikke versalsensitiv):" #: picard/ui/ui_options_renaming.py:167 msgid "Delete empty directories" -msgstr "" +msgstr "Slett tomme mapper" #: picard/ui/ui_options_renaming.py:168 msgid "Rename files when saving" -msgstr "" +msgstr "Endre navn på filer ved lagring" #: picard/ui/ui_options_renaming.py:169 msgid "Replace non-ASCII characters" -msgstr "Bytt ut ikke-ASCII tegn" +msgstr "Bytt ut tegn som ikke er ASCII" #: picard/ui/ui_options_renaming.py:170 msgid "Windows compatibility" @@ -1680,7 +1680,7 @@ msgstr "Windows kombatibilitet" #: picard/ui/ui_options_renaming.py:171 msgid "Name files like this" -msgstr "" +msgstr "Gi nye filer navn som dette" #: picard/ui/ui_options_renaming.py:178 msgid "Examples" @@ -1688,56 +1688,56 @@ msgstr "Eksempler" #: picard/ui/ui_options_script.py:98 msgid "Tagger Script(s)" -msgstr "" +msgstr "Taggerskript" #: picard/ui/ui_options_script.py:99 picard/ui/ui_options_script.py:100 msgid "Add new script" -msgstr "" +msgstr "Legg til nytt skript" #: picard/ui/ui_options_script.py:101 msgid "Display Name" -msgstr "" +msgstr "Visningsnavn" #: picard/ui/ui_options_tags.py:152 msgid "Write tags to files" -msgstr "" +msgstr "Skriv tagger til filer" #: picard/ui/ui_options_tags.py:153 msgid "Preserve timestamps of tagged files" -msgstr "" +msgstr "Behold systemtider i lagrede filer" #: picard/ui/ui_options_tags.py:154 msgid "Before Tagging" -msgstr "" +msgstr "Før tagging" #: picard/ui/ui_options_tags.py:155 msgid "Clear existing tags" -msgstr "" +msgstr "Fjern eksisterende tagger" #: picard/ui/ui_options_tags.py:156 msgid "Remove ID3 tags from FLAC files" -msgstr "" +msgstr "Fjern ID3 tagger fra FLAC filer" #: picard/ui/ui_options_tags.py:157 msgid "Remove APEv2 tags from MP3 files" -msgstr "" +msgstr "Fjern APEv2 tagger fra mp3 filer" #: picard/ui/ui_options_tags.py:158 msgid "" "Preserve these tags from being cleared or overwritten with MusicBrainz data:" -msgstr "" +msgstr "Ivareta disse taggene fra å fjernes eller overskrives med MusicBrainz data:" #: picard/ui/ui_options_tags.py:159 msgid "Tags are separated by commas, and are case-sensitive." -msgstr "" +msgstr "Tagger er atskilt med komma, og er versalsensitive." #: picard/ui/ui_options_tags.py:160 msgid "Tag Compatibility" -msgstr "" +msgstr "Taggekompatibilitet" #: picard/ui/ui_options_tags.py:161 msgid "ID3v2 Version" -msgstr "" +msgstr "ID3v2 versjon" #: picard/ui/ui_options_tags.py:162 msgid "2.4" @@ -1749,7 +1749,7 @@ msgstr "2,3" #: picard/ui/ui_options_tags.py:164 msgid "ID3v2 Text Encoding" -msgstr "" +msgstr "ID3v2 tekstkoding" #: picard/ui/ui_options_tags.py:165 msgid "UTF-8" @@ -1765,75 +1765,75 @@ msgstr "ISO-8859-1" #: picard/ui/ui_options_tags.py:168 msgid "Join multiple ID3v2.3 tags with:" -msgstr "" +msgstr "Slå sammen flere ID3v2.3 tagger med:" #: picard/ui/ui_options_tags.py:169 msgid "" "

Default is '/' to maintain compatibility with previous" " Picard releases.

New alternatives are ';_' or '_/_' or type your own." "

" -msgstr "" +msgstr "

Standard er \"/\" for å opprettholde kompatibilitet med tidligere Picardutgivelser.

Nye alternativer er. '; _' Eller '_ / _' Du kan også skrive din egen.

" #: picard/ui/ui_options_tags.py:170 msgid "Also include ID3v1 tags in the files" -msgstr "" +msgstr "Inkluder også ID3v1 tagger i filene" #: picard/ui/ui_passworddialog.py:64 msgid "Authentication required" -msgstr "" +msgstr "Godkjenning nødvendig" #: picard/ui/ui_provider_options_caa.py:86 msgid "Download only cover art images matching selected types" -msgstr "" +msgstr "Last ned bare omslagsbilder av samsvarende type" #: picard/ui/ui_provider_options_caa.py:87 msgid "Select types..." -msgstr "" +msgstr "Velg typer..." #: picard/ui/ui_provider_options_caa.py:88 msgid "Only use images of the following size:" -msgstr "" +msgstr "Bruk bare bilder av følgende størrelse:" #: picard/ui/ui_provider_options_caa.py:89 msgid "250 px" -msgstr "" +msgstr "250 px" #: picard/ui/ui_provider_options_caa.py:90 msgid "500 px" -msgstr "" +msgstr "500 px" #: picard/ui/ui_provider_options_caa.py:91 msgid "Full size" -msgstr "" +msgstr "Full størrelse" #: picard/ui/ui_provider_options_caa.py:92 msgid "Save only one front image as separate file" -msgstr "" +msgstr "Lagre bare forsidebilde som separat fil" #: picard/ui/ui_provider_options_caa.py:93 msgid "Download only approved images" -msgstr "" +msgstr "Last ned bare godkjente bilder" #: picard/ui/ui_provider_options_caa.py:94 msgid "" "Use the first image type as the filename. This will not change the filename " "of front images." -msgstr "" +msgstr "Bruk den første bildetypen som filnavn. Dette endrer ikke filnavnet til forsidebilder." #: picard/ui/ui_provider_options_local.py:64 msgid "Local cover art files match the following regular expression:" -msgstr "" +msgstr "Eksisterende omslagsbilder passer følgende regulære uttrykk:" #: picard/ui/ui_provider_options_local.py:66 msgid "" "First group in the regular expression, if any, will be used as type, ie. " "cover-back-spine.jpg will be set as types Back + Spine. If no type is found," " it will default to Front type." -msgstr "" +msgstr "Første gruppe i det eventuelle regulære uttrykket, vil bli benyttet som type, dvs cover-back-spine.jpg " #: picard/ui/ui_tagsfromfilenames.py:50 msgid "Convert File Names to Tags" -msgstr "" +msgstr "Konverter filnavn om till tagger" #: picard/ui/ui_tagsfromfilenames.py:51 msgid "Replace underscores with spaces" @@ -1853,11 +1853,11 @@ msgstr "&Avbryt" #: picard/ui/util.py:87 msgid "Clear entry" -msgstr "" +msgstr "Slett oppføring" #: picard/ui/options/__init__.py:83 msgid "Regex Error" -msgstr "" +msgstr "Feil i Regeks" #: picard/ui/options/about.py:30 msgid "About" @@ -1865,7 +1865,7 @@ msgstr "Om..." #: picard/ui/options/about.py:50 msgid "translator-credits" -msgstr "Launchpad Contributions:\n Anders https://launchpad.net/~andersja+launchpad-net\n Anders Oftedal https://launchpad.net/~anders-oftedal-gmail\n Lukáš Lalinský https://launchpad.net/~luks\n Philipp Wolfer https://launchpad.net/~phw\n Simen Sandberg https://launchpad.net/~senilix\n ZaphodBeeblebrox https://launchpad.net/~zaphodbeeblebrox" +msgstr "Transifex teamet:\n https://www.transifex.com/musicbrainz/teams/13846/nb/\n\nForhenværende Launchpad oversettere:\n Anders https://launchpad.net/~andersja+launchpad-net\n Anders Oftedal https://launchpad.net/~anders-oftedal-gmail\n Lukáš Lalinský https://launchpad.net/~luks\n Philipp Wolfer https://launchpad.net/~phw\n Simen Sandberg https://launchpad.net/~senilix\n ZaphodBeeblebrox https://launchpad.net/~zaphodbeeblebrox" #: picard/ui/options/about.py:53 #, python-format @@ -1887,7 +1887,7 @@ msgid "" "

Credits
\n" "Copyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin and others%(translator-credits)s

\n" "

Official website
%(picard-doc-url)s

\n" -msgstr "" +msgstr "

MusicBrainz Picard
\nversjon %(version)s

\n

\n%(third_parties_versions)s\n

\n

Støttede formater
%(formats)s

\n

Donasjon
\nTakk for at du bruker Picard. Picard baserer seg på MusicBrainz databasen, som drives av MetaBrainz Foundation ved hjelp av tusenvis av frivillige. Hvis du liker dette programmet kan du donere til MetaBrainz Foundation for å holde tjenesten gående.

\n

Donér nå!

\n

Credits
\nCopyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin og andre%(translator-credits)s

\n

Offisiell nettside
%(picard-doc-url)s

\n" #: picard/ui/options/advanced.py:30 msgid "Advanced" @@ -1895,61 +1895,61 @@ msgstr "Avansert" #: picard/ui/options/cover.py:34 msgid "Cover Art" -msgstr "Plateomslag" +msgstr "Omslagsbilder" #: picard/ui/options/dialog.py:82 msgid "&Restore all Defaults" -msgstr "" +msgstr "Gjenopprett &alle standardinnstillinger" #: picard/ui/options/dialog.py:83 msgid "Reset all of Picard's settings" -msgstr "" +msgstr "Tilbakestill alle Picard innstillinger" #: picard/ui/options/dialog.py:84 msgid "Restore &Defaults" -msgstr "" +msgstr "&Gjenopprett standardinnstillinger" #: picard/ui/options/dialog.py:85 msgid "Reset all settings for current option page" -msgstr "" +msgstr "Tilbakestill alle innstillinger for denne sida" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." -msgstr "" +msgstr "Du er i ferd med å tilbakestille innstillingene for denne siden." -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." -msgstr "" +msgstr "Advarsel! Dette vil tilbakestille alle innstillinger." -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" -msgstr "" +msgstr "Bekreft tilbakestilling" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" -msgstr "" +msgstr "Er du sikker?" #: picard/ui/options/fingerprinting.py:32 msgid "Fingerprinting" -msgstr "" +msgstr "Lydavtrykk" #: picard/ui/options/fingerprinting.py:135 #: picard/ui/options/fingerprinting.py:139 msgid "Please select a valid fpcalc executable." -msgstr "" +msgstr "Velg en gyldig fpcalc programfil." #: picard/ui/options/fingerprinting.py:139 msgid "Invalid fpcalc executable" -msgstr "" +msgstr "Ugyldig fpcalc programfil" #: picard/ui/options/general.py:74 #, python-format msgid "Logged in as %s." -msgstr "" +msgstr "Logget inn som %s." #: picard/ui/options/general.py:88 msgid "Authorization code:" -msgstr "" +msgstr "Autoriseringskode: " #: picard/ui/options/interface.py:36 msgid "User Interface" @@ -1957,43 +1957,43 @@ msgstr "Brukergrensesnitt" #: picard/ui/options/interface.py:43 msgid "Add Folder" -msgstr "" +msgstr "Legg til mappe" #: picard/ui/options/interface.py:47 msgid "Add Files" -msgstr "" +msgstr "Legg til filer" #: picard/ui/options/interface.py:51 msgid "Cluster" -msgstr "" +msgstr "Gruppér" #: picard/ui/options/interface.py:55 msgid "Lookup" -msgstr "" +msgstr "Slå opp" #: picard/ui/options/interface.py:59 msgid "Scan" -msgstr "" +msgstr "Skanner" #: picard/ui/options/interface.py:63 msgid "Lookup in Browser" -msgstr "" +msgstr "Slå opp i nettleser" #: picard/ui/options/interface.py:67 msgid "Save" -msgstr "" +msgstr "Lagre" #: picard/ui/options/interface.py:79 msgid "Submit AcoustIDs" -msgstr "" +msgstr "Send AcoustIDer" #: picard/ui/options/interface.py:83 msgid "Open in Player" -msgstr "" +msgstr "Åpne i spiller" #: picard/ui/options/interface.py:87 msgid "Lookup CD..." -msgstr "" +msgstr "Slå opp CD..." #: picard/ui/options/interface.py:125 msgid "System default" @@ -2007,65 +2007,65 @@ msgstr "Språk endret" msgid "" "You have changed the interface language. You have to restart Picard in order" " for the change to take effect." -msgstr "" +msgstr "Du har endret grensesnittspråk. Picard må startes på nytt for at endringen skal tre i kraft." #: picard/ui/options/interface.py:207 msgid "Drag and Drop to re-order" -msgstr "" +msgstr "Dra og slipp for å endre rekkefølgen" #: picard/ui/options/interface.py:209 picard/ui/options/interface.py:291 msgid "label" -msgstr "" +msgstr "plateselskap" #: picard/ui/options/matching.py:28 msgid "Matching" -msgstr "" +msgstr "Samsvaring" #: picard/ui/options/network.py:29 msgid "Network" -msgstr "" +msgstr "Nettverk" #: picard/ui/options/plugins.py:135 msgid "No plugins installed." -msgstr "" +msgstr "Ingen programtillegg er installert." #: picard/ui/options/plugins.py:198 #, python-format msgid "The plugin '%s' is not compatible with this version of Picard." -msgstr "" +msgstr "Programtillegget \"%s\" er uforenelig med denne versjonen av Picard." #: picard/ui/options/plugins.py:226 #, python-format msgid "The plugin '%s' will be upgraded to version %s on next run of Picard." -msgstr "" +msgstr "Programtillegget \"%s\" vil oppdateres til versjon %s neste gang Picard startes." #: picard/ui/options/plugins.py:254 msgid "Update" -msgstr "" +msgstr "Oppdater" #: picard/ui/options/plugins.py:256 msgid "Install" -msgstr "" +msgstr "Installér" #: picard/ui/options/plugins.py:271 msgid "Updated" -msgstr "" +msgstr "Oppdatert" #: picard/ui/options/plugins.py:273 msgid "Installed" -msgstr "" +msgstr "Installert " #: picard/ui/options/plugins.py:297 msgid "Restart Picard to upgrade to new version" -msgstr "" +msgstr "Start Picard på nytt for å oppgradere til ny versjon" #: picard/ui/options/plugins.py:299 msgid "New version available" -msgstr "" +msgstr "Ny versjon tilgjengelig" #: picard/ui/options/plugins.py:305 msgid "Authors" -msgstr "" +msgstr "Forfattere" #: picard/ui/options/plugins.py:307 picard/util/tags.py:44 msgid "License" @@ -2074,19 +2074,19 @@ msgstr "Lisens" #: picard/ui/options/plugins.py:338 #, python-format msgid "The plugin '%s' could not be downloaded." -msgstr "" +msgstr "Programtillegget \"%s\" kunne ikke lastes ned." #: picard/ui/options/plugins.py:339 msgid "Please try again later." -msgstr "" +msgstr "Prøv igjen senere." #: picard/ui/options/ratings.py:28 msgid "Ratings" -msgstr "" +msgstr "Vurderinger" #: picard/ui/options/releases.py:87 msgid "Preferred Releases" -msgstr "" +msgstr "Foretrukne utgivelser" #: picard/ui/options/releases.py:121 msgid "Reset all" @@ -2094,61 +2094,61 @@ msgstr "Tilbakestill alle" #: picard/ui/options/renaming.py:46 msgid "File Naming" -msgstr "" +msgstr "Filbenevning" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" -msgstr "" +msgstr "Åpne dokumentasjon om skriving av skript i nettleser" #: picard/ui/options/renaming.py:188 msgid "The location to move files to must not be empty." -msgstr "" +msgstr "Destinasjonsmappe kan ikke være tom." #: picard/ui/options/renaming.py:198 msgid "The file naming format must not be empty." -msgstr "" +msgstr "Filnanvsformat kan ikke være tom." #: picard/ui/options/scripting.py:29 msgid "My script" -msgstr "" +msgstr "Mitt skript" #: picard/ui/options/scripting.py:128 msgid "Move script up" -msgstr "" +msgstr "Flytt skript opp" #: picard/ui/options/scripting.py:132 msgid "Move script down" -msgstr "" +msgstr "Flytt skript ned" #: picard/ui/options/scripting.py:140 msgid "Other options" -msgstr "" +msgstr "Andre innstillinger" #: picard/ui/options/scripting.py:142 msgid "Rename script" -msgstr "" +msgstr "Gi nytt navn til skript" #: picard/ui/options/scripting.py:143 msgid "Remove script" -msgstr "" +msgstr "Fjern skript" #: picard/ui/options/scripting.py:205 msgid "Scripting" msgstr "Skripting" -#: picard/ui/options/scripting.py:292 -msgid "Are you sure you want to remove this script?" -msgstr "" - #: picard/ui/options/scripting.py:293 -msgid "Confirm Remove" -msgstr "" +msgid "Are you sure you want to remove this script?" +msgstr "Er du sikker på at du vil fjerne dette skriptet?" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:294 +msgid "Confirm Remove" +msgstr "Bekreft fjerning" + +#: picard/ui/options/scripting.py:377 msgid "Script Error" -msgstr "" +msgstr "Skriptfeil" #: picard/ui/options/tags.py:30 msgid "Tags" @@ -2216,11 +2216,11 @@ msgstr "%s " #: picard/util/tags.py:25 msgid "Original Release Date" -msgstr "" +msgstr "Opprinnelig utgivelsesdato" #: picard/util/tags.py:26 msgid "Original Year" -msgstr "" +msgstr "Opprinnelig utgivelsesår" #: picard/util/tags.py:27 msgid "Album Artist" @@ -2228,23 +2228,23 @@ msgstr "Album Artist" #: picard/util/tags.py:28 msgid "Track Number" -msgstr "" +msgstr "Spornummer" #: picard/util/tags.py:29 msgid "Total Tracks" -msgstr "" +msgstr "Spor totalt" #: picard/util/tags.py:30 msgid "Disc Number" -msgstr "" +msgstr "Disknummer" #: picard/util/tags.py:31 msgid "Total Discs" -msgstr "" +msgstr "Disker totalt" #: picard/util/tags.py:32 msgid "Album Artist Sort Order" -msgstr "" +msgstr "Sorter etter albumartist" #: picard/util/tags.py:33 msgid "Artist Sort Order" @@ -2256,11 +2256,11 @@ msgstr "Sorter etter tittel" #: picard/util/tags.py:35 msgid "Album Sort Order" -msgstr "" +msgstr "Sorter etter album" #: picard/util/tags.py:36 msgid "Composer Sort Order" -msgstr "" +msgstr "Sorter etter komponist" #: picard/util/tags.py:37 msgid "ASIN" @@ -2284,7 +2284,7 @@ msgstr "BPM" #: picard/util/tags.py:42 msgid "Key" -msgstr "" +msgstr "Toneart" #: picard/util/tags.py:43 msgid "Copyright" @@ -2292,15 +2292,15 @@ msgstr "Kopibeskyttelse" #: picard/util/tags.py:45 msgid "Composer" -msgstr "" +msgstr "Komponist" #: picard/util/tags.py:46 msgid "Writer" -msgstr "" +msgstr "Skriver" #: picard/util/tags.py:47 msgid "Conductor" -msgstr "" +msgstr "Dirigent" #: picard/util/tags.py:48 msgid "Lyricist" @@ -2316,59 +2316,59 @@ msgstr "Produsent" #: picard/util/tags.py:51 msgid "Engineer" -msgstr "" +msgstr "Teknikker" #: picard/util/tags.py:52 msgid "Subtitle" -msgstr "Undertekst" +msgstr "Undertittel" #: picard/util/tags.py:53 msgid "Disc Subtitle" -msgstr "" +msgstr "Disk undertittel" #: picard/util/tags.py:54 msgid "Remixer" -msgstr "" +msgstr "Remikser" #: picard/util/tags.py:55 msgid "MusicBrainz Recording Id" -msgstr "" +msgstr "MusicBrainz InnspillingsID" #: picard/util/tags.py:56 msgid "MusicBrainz Track Id" -msgstr "" +msgstr "MusicBrainz Spor ID" #: picard/util/tags.py:57 msgid "MusicBrainz Release Id" -msgstr "" +msgstr "MusicBrainz UtgivelsesID" #: picard/util/tags.py:58 msgid "MusicBrainz Artist Id" -msgstr "" +msgstr "MusicBrainz Artist ID" #: picard/util/tags.py:59 msgid "MusicBrainz Release Artist Id" -msgstr "" +msgstr "MusicBrainz UtgivelsesartistID" #: picard/util/tags.py:60 msgid "MusicBrainz Work Id" -msgstr "" +msgstr "MusicBrainz ÅndsverksID" #: picard/util/tags.py:61 msgid "MusicBrainz Release Group Id" -msgstr "" +msgstr "MusicBrainz Utgivelsesgruppe ID" #: picard/util/tags.py:62 msgid "MusicBrainz Disc Id" -msgstr "" +msgstr "MusicBrainz disk ID" #: picard/util/tags.py:63 msgid "MusicIP PUID" -msgstr "" +msgstr "MusicIP PUID" #: picard/util/tags.py:64 msgid "MusicIP Fingerprint" -msgstr "" +msgstr "MusicIP lydavtrykk" #: picard/util/tags.py:65 msgid "AcoustID" @@ -2376,19 +2376,19 @@ msgstr "AcoustID" #: picard/util/tags.py:66 msgid "AcoustID Fingerprint" -msgstr "" +msgstr "AcoustID lydavtrykk" #: picard/util/tags.py:67 msgid "Disc Id" -msgstr "" +msgstr "Disk ID" #: picard/util/tags.py:68 msgid "Artist Website" -msgstr "" +msgstr "Artistens nettside" #: picard/util/tags.py:69 msgid "Compilation (iTunes)" -msgstr "" +msgstr "Del av et samlealbum (iTunes)" #: picard/util/tags.py:70 msgid "Comment" @@ -2400,11 +2400,11 @@ msgstr "Sjanger" #: picard/util/tags.py:72 msgid "Encoded By" -msgstr "" +msgstr "Kodet av" #: picard/util/tags.py:73 msgid "Encoder Settings" -msgstr "" +msgstr "Kodeinnstillinger" #: picard/util/tags.py:74 msgid "Performer" @@ -2412,31 +2412,31 @@ msgstr "Artist" #: picard/util/tags.py:75 msgid "Release Type" -msgstr "" +msgstr "Utgivelsestype" #: picard/util/tags.py:76 msgid "Release Status" -msgstr "" +msgstr "Utgivelsesstatus" #: picard/util/tags.py:77 msgid "Release Country" -msgstr "" +msgstr "Utgivelsesland" #: picard/util/tags.py:78 msgid "Record Label" -msgstr "" +msgstr "Plateselskap" #: picard/util/tags.py:80 msgid "Catalog Number" -msgstr "" +msgstr "Katalog nummer" #: picard/util/tags.py:81 msgid "DJ-Mixer" -msgstr "" +msgstr "DJ-mikser" #: picard/util/tags.py:82 msgid "Media" -msgstr "Medie" +msgstr "Medier" #: picard/util/tags.py:83 msgid "Lyrics" @@ -2448,11 +2448,11 @@ msgstr "Mikser" #: picard/util/tags.py:86 msgid "Script" -msgstr "" +msgstr "Skript" #: picard/util/tags.py:88 msgid "Rating" -msgstr "" +msgstr "Vurdering" #: picard/util/tags.py:89 msgid "Artists" @@ -2460,7 +2460,7 @@ msgstr "Artister" #: picard/util/tags.py:90 msgid "Work" -msgstr "Verk" +msgstr "Åndsverk" #: picard/util/versions.py:47 msgid "is not installed" @@ -2468,7 +2468,7 @@ msgstr "er ikke installert" #: picard/util/webbrowser2.py:90 msgid "Web Browser Error" -msgstr "" +msgstr "Nettleserfeil" #: picard/util/webbrowser2.py:90 #, python-format @@ -2476,4 +2476,4 @@ msgid "" "Error while launching a web browser:\n" "\n" "%s" -msgstr "" +msgstr "Feil ved kjøring av nettleser:\n\n%s" diff --git a/po/nl.po b/po/nl.po index 74a2f7f5e..4c4823cb9 100644 --- a/po/nl.po +++ b/po/nl.po @@ -11,14 +11,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" -"PO-Revision-Date: 2017-01-19 09:58+0000\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" +"PO-Revision-Date: 2017-01-28 13:16+0000\n" "Last-Translator: Maurits Meulenbelt \n" "Language-Team: Dutch (http://www.transifex.com/musicbrainz/musicbrainz/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -141,7 +141,7 @@ msgid "Merge" msgstr "Samenvoegen" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "&Verwijderen" @@ -365,7 +365,7 @@ msgstr "Streepjescode" #: picard/ui/collectionmenu.py:42 msgid "Refresh List" -msgstr "Lijst verversen" +msgstr "Lijst herladen" #: picard/ui/collectionmenu.py:86 #, python-format @@ -871,7 +871,7 @@ msgstr "Ctrl+I" #: picard/ui/mainwindow.py:446 msgid "&Refresh" -msgstr "&Verversen" +msgstr "&Herladen" #: picard/ui/mainwindow.py:447 msgid "Ctrl+R" @@ -1011,15 +1011,15 @@ msgstr "Picard heeft een machtiging nodig om toegang tot je persoonlijke gegeven #, python-format msgid "(different across %d item)" msgid_plural "(different across %d items)" -msgstr[0] "(verschillend tussen %d object)" -msgstr[1] "(verschillend tussen %d objecten)" +msgstr[0] "(verschilt bij %d nummer)" +msgstr[1] "(verschilt bij %d nummers)" #: picard/ui/metadatabox.py:92 #, python-format msgid "(missing from %d item)" msgid_plural "(missing from %d items)" -msgstr[0] "(ontbrekend bij %d object)" -msgstr[1] "(ontbrekend bij %d objecten)" +msgstr[0] "(ontbreekt bij bij %d nummer)" +msgstr[1] "(ontbreekt bij %d nummers)" #: picard/ui/metadatabox.py:155 msgid "metadata view" @@ -1131,9 +1131,9 @@ msgstr "In Picard laden" msgid "Track Search Results" msgstr "Zoekresultaten voor nummers" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Naam" @@ -1193,9 +1193,8 @@ msgstr "Eindgebied" msgid "File Name" msgstr "Bestandsnaam" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Cd opzoeken" @@ -1358,7 +1357,7 @@ msgstr "API-sleutel:" msgid "Get API key..." msgstr "API-sleutel verkrijgen" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomietags" @@ -1413,7 +1412,7 @@ msgstr "Poort:" msgid "Server address:" msgstr "Serveradres:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainz-account" @@ -1425,13 +1424,13 @@ msgstr "Aanmelden" msgid "Log out" msgstr "Afmelden" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Algemeen" #: picard/ui/ui_options_general.py:99 msgid "Automatically scan all new files" -msgstr "Automatisch alle nieuwe bestanden analyseren" +msgstr "Alle nieuwe bestanden automatisch analyseren" #: picard/ui/ui_options_general.py:100 msgid "Ignore MBIDs when loading new files" @@ -1517,7 +1516,7 @@ msgstr "Minimale overeenkomst voor het opzoeken van bestanden:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimale overeenkomst voor het opzoeken van clusters:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1587,7 +1586,7 @@ msgstr "Standaard luisterpoort:" msgid "Listen only on localhost" msgstr "Alleen op localhost luisteren" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1809,17 +1808,17 @@ msgstr "Grootste formaat" #: picard/ui/ui_provider_options_caa.py:92 msgid "Save only one front image as separate file" -msgstr "Maar één afbeelding van de voorkant als los bestand opslaan." +msgstr "Maar één afbeelding van de voorkant als los bestand opslaan" #: picard/ui/ui_provider_options_caa.py:93 msgid "Download only approved images" -msgstr "Alleen goedgekeurde afbeeldingen downloaden." +msgstr "Alleen goedgekeurde afbeeldingen downloaden" #: picard/ui/ui_provider_options_caa.py:94 msgid "" "Use the first image type as the filename. This will not change the filename " "of front images." -msgstr "Gebruik het eerste afbeeldingstype als bestandsnaam. Dit verandert de bestandsnaam van afbeeldingen van de voorkant niet." +msgstr "Gebruik het eerste afbeeldingstype als bestandsnaam. Dit verandert de bestandsnaam van afbeeldingen van de voorkant niet" #: picard/ui/ui_provider_options_local.py:64 msgid "Local cover art files match the following regular expression:" @@ -1838,7 +1837,7 @@ msgstr "Bestandsnamen naar tags converteren" #: picard/ui/ui_tagsfromfilenames.py:51 msgid "Replace underscores with spaces" -msgstr "Lage streepjes vervangen door spaties" +msgstr "Lage streepjes door spaties vervangen" #: picard/ui/ui_tagsfromfilenames.py:52 msgid "&Preview" @@ -1896,7 +1895,7 @@ msgstr "Geavanceerd" #: picard/ui/options/cover.py:34 msgid "Cover Art" -msgstr "Hoesafbeelding" +msgstr "Hoesafbeeldingen" #: picard/ui/options/dialog.py:82 msgid "&Restore all Defaults" @@ -1914,19 +1913,19 @@ msgstr "Instellingen herstellen" msgid "Reset all settings for current option page" msgstr "Zet de instellingen van deze pagina terug naar de standaard" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "Je staat op het punt de instellingen op deze pagina naar de standaardwaardes te herstellen." -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "Waarschuwing! Dit zet al je instellingen terug naar de standaardwaardes." -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "Terugzetten bevestigen" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "Weet je het zeker?" @@ -2097,7 +2096,7 @@ msgstr "Alles terugzetten" msgid "File Naming" msgstr "Bestandsnamen" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2139,15 +2138,15 @@ msgstr "Script verwijderen" msgid "Scripting" msgstr "Scripting" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "Weet je zeker dat je dit script wil verwijderen?" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "Verwijderen bevestigen" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Scriptfout" @@ -2433,7 +2432,7 @@ msgstr "Catalogusnummer" #: picard/util/tags.py:81 msgid "DJ-Mixer" -msgstr "DJ-Mixer" +msgstr "Dj-mixer" #: picard/util/tags.py:82 msgid "Media" diff --git a/po/oc.po b/po/oc.po index c88e3fdd0..49493b8c1 100644 --- a/po/oc.po +++ b/po/oc.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Occitan (post 1500) (http://www.transifex.com/musicbrainz/musicbrainz/language/oc/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: oc\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -138,7 +138,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1128,9 +1128,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nom" @@ -1190,9 +1190,8 @@ msgstr "" msgid "File Name" msgstr "Nom del fichièr" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Consultacion del CD" @@ -1355,7 +1354,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Metabalisas de folksonomia" @@ -1410,7 +1409,7 @@ msgstr "Pòrt :" msgid "Server address:" msgstr "Adreça del servidor :" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1422,7 +1421,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "General" @@ -1514,7 +1513,7 @@ msgstr "Semblança minimala per cercar de fichièrs :" msgid "Minimal similarity for cluster lookups:" msgstr "Semblança minimala pel regropament d'albums" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadonadas" @@ -1584,7 +1583,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Moduls extèrnes" @@ -1911,19 +1910,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2094,7 +2093,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2136,15 +2135,15 @@ msgstr "" msgid "Scripting" msgstr "Escripts" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Error d'escript" diff --git a/po/pl.po b/po/pl.po index 6ffe4b9fa..147c6b360 100644 --- a/po/pl.po +++ b/po/pl.po @@ -12,14 +12,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Polish (http://www.transifex.com/musicbrainz/musicbrainz/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -145,7 +145,7 @@ msgid "Merge" msgstr "Scal" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Usuń" @@ -1141,9 +1141,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nazwa" @@ -1203,9 +1203,8 @@ msgstr "" msgid "File Name" msgstr "Nazwa pliku" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Sprawdzanie CD" @@ -1368,7 +1367,7 @@ msgstr "Klucz API:" msgid "Get API key..." msgstr "Pobierz klucz API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomia" @@ -1423,7 +1422,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Adres serwera:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "Konto MusicBrainz" @@ -1435,7 +1434,7 @@ msgstr "Zaloguj się" msgid "Log out" msgstr "Wyloguj się" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Ogólne" @@ -1527,7 +1526,7 @@ msgstr "Minimalne podobieństwo dla sprawdzanych plików:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimalne podobieństwo dla sprawdzanych grup:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadane" @@ -1597,7 +1596,7 @@ msgstr "Domyślny port nasłuchiwania:" msgid "Listen only on localhost" msgstr "Nasłuchuj tylko na localhost" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Wtyczki" @@ -1924,19 +1923,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2107,7 +2106,7 @@ msgstr "Resetuj wszystko" msgid "File Naming" msgstr "Nazwy plików" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2149,15 +2148,15 @@ msgstr "" msgid "Scripting" msgstr "Skrypty" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Błąd skryptu" diff --git a/po/pt.po b/po/pt.po index 6f1be60cb..5a804d241 100644 --- a/po/pt.po +++ b/po/pt.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Portuguese (http://www.transifex.com/musicbrainz/musicbrainz/language/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -140,7 +140,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Remover" @@ -1130,9 +1130,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nome" @@ -1192,9 +1192,8 @@ msgstr "" msgid "File Name" msgstr "Nome do Ficheiro" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Procurar CD" @@ -1357,7 +1356,7 @@ msgstr "Chave API:" msgid "Get API key..." msgstr "Obter chave API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Marcas Folksonomy" @@ -1412,7 +1411,7 @@ msgstr "Porta:" msgid "Server address:" msgstr "Endereço do servidor:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1424,7 +1423,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Geral" @@ -1516,7 +1515,7 @@ msgstr "Semelhança mínima para as pesquisas de ficheiros:" msgid "Minimal similarity for cluster lookups:" msgstr "Semelhança mínima para as pesquisas de cluster:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Meta-dados" @@ -1586,7 +1585,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1913,19 +1912,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2096,7 +2095,7 @@ msgstr "Reiniciar todos" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2138,15 +2137,15 @@ msgstr "" msgid "Scripting" msgstr "Programação" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Erro de Programação" diff --git a/po/pt_BR.po b/po/pt_BR.po index b7ec290ef..88b4fdad0 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -16,14 +16,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/musicbrainz/musicbrainz/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -146,7 +146,7 @@ msgid "Merge" msgstr "Mesclar" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Remover" @@ -1136,9 +1136,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nome" @@ -1198,9 +1198,8 @@ msgstr "" msgid "File Name" msgstr "Nome do arquivo" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Escanear CD" @@ -1363,7 +1362,7 @@ msgstr "Chave API:" msgid "Get API key..." msgstr "Obter chave API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Etiquetas de folksonomia" @@ -1418,7 +1417,7 @@ msgstr "Porta:" msgid "Server address:" msgstr "Endereço do servidor:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "Conta do MusicBrainz" @@ -1430,7 +1429,7 @@ msgstr "Conectar" msgid "Log out" msgstr "Desconectar" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Geral" @@ -1522,7 +1521,7 @@ msgstr "Similaridade mínima para pesquisas de arquivo:" msgid "Minimal similarity for cluster lookups:" msgstr "Similaridade mínima para pesquisas de grupo:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadados" @@ -1592,7 +1591,7 @@ msgstr "Porta de escuta padrão" msgid "Listen only on localhost" msgstr "Escutar somente no host local" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Plugins" @@ -1919,19 +1918,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2102,7 +2101,7 @@ msgstr "Limpar tudo" msgid "File Naming" msgstr "Nomeação de arquivos" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2144,15 +2143,15 @@ msgstr "" msgid "Scripting" msgstr "Scripts" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Erro de script" diff --git a/po/ro.po b/po/ro.po index b74920297..47b87ffae 100644 --- a/po/ro.po +++ b/po/ro.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Romanian (http://www.transifex.com/musicbrainz/musicbrainz/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" @@ -142,7 +142,7 @@ msgid "Merge" msgstr "Combină" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Înlătu&ră" @@ -1138,9 +1138,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nume" @@ -1200,9 +1200,8 @@ msgstr "" msgid "File Name" msgstr "Numele fișierului" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Căutare CD" @@ -1365,7 +1364,7 @@ msgstr "Cheie API:" msgid "Get API key..." msgstr "Obține cheie API..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Etichete utilizator" @@ -1420,7 +1419,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Adresa serverului:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1432,7 +1431,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Generale" @@ -1524,7 +1523,7 @@ msgstr "Similaritate minimă pentru căutare de fișiere" msgid "Minimal similarity for cluster lookups:" msgstr "Similaritate minimă pentru căutare de grupaje" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadate" @@ -1594,7 +1593,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Module" @@ -1921,19 +1920,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2104,7 +2103,7 @@ msgstr "Resetare totală" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2146,15 +2145,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Eroare în script" diff --git a/po/ru.po b/po/ru.po index 7825b2523..428f5ac25 100644 --- a/po/ru.po +++ b/po/ru.po @@ -16,14 +16,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Russian (http://www.transifex.com/musicbrainz/musicbrainz/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" @@ -152,7 +152,7 @@ msgid "Merge" msgstr "Объединить" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Удалить" @@ -1154,9 +1154,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Имя" @@ -1216,9 +1216,8 @@ msgstr "" msgid "File Name" msgstr "Имя файла" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Поиск CD" @@ -1381,7 +1380,7 @@ msgstr "Ключ API:" msgid "Get API key..." msgstr "Получить API ключ..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Теги, выбранные сообществом" @@ -1436,7 +1435,7 @@ msgstr "Порт:" msgid "Server address:" msgstr "Адрес сервера:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "Аккаунт MusicBrainz" @@ -1448,7 +1447,7 @@ msgstr "Войти" msgid "Log out" msgstr "Выйти" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Основные" @@ -1540,7 +1539,7 @@ msgstr "Минимальное сходство при опознавании ф msgid "Minimal similarity for cluster lookups:" msgstr "Минимальное сходство при опознавании кластеров:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Метаданные" @@ -1610,7 +1609,7 @@ msgstr "Порт для прослушивания:" msgid "Listen only on localhost" msgstr "Слушать только на localhost" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Плагины" @@ -1937,19 +1936,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2120,7 +2119,7 @@ msgstr "Сбросить всё" msgid "File Naming" msgstr "Имя файла" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2162,15 +2161,15 @@ msgstr "" msgid "Scripting" msgstr "Скрипты" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Ошибка скрипта" diff --git a/po/sk.po b/po/sk.po index 1ac41b994..c343f51db 100644 --- a/po/sk.po +++ b/po/sk.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Slovak (http://www.transifex.com/musicbrainz/musicbrainz/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" @@ -142,7 +142,7 @@ msgid "Merge" msgstr "Zlúčiť" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Odstrániť" @@ -1138,9 +1138,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Nazov" @@ -1200,9 +1200,8 @@ msgstr "" msgid "File Name" msgstr "Meno Súboru" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Vyhľadanie CD" @@ -1365,7 +1364,7 @@ msgstr "Kľúč API:" msgid "Get API key..." msgstr "Získať kľúč API…" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Rovnako znejúce tagy" @@ -1420,7 +1419,7 @@ msgstr "port:" msgid "Server address:" msgstr "Adresa servera:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1432,7 +1431,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Všeobecné" @@ -1524,7 +1523,7 @@ msgstr "Minimálna podobnosť pre vyhľadávanie v súboroch:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimálna podobnosť pre vyhľadávanie klastrov:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1594,7 +1593,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Pluginy" @@ -1921,19 +1920,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2104,7 +2103,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2146,15 +2145,15 @@ msgstr "" msgid "Scripting" msgstr "Skriptovanie" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Chyba skriptu" diff --git a/po/sl.po b/po/sl.po index 77ebe62a3..31adc4c81 100644 --- a/po/sl.po +++ b/po/sl.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Slovenian (http://www.transifex.com/musicbrainz/musicbrainz/language/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" @@ -146,7 +146,7 @@ msgid "Merge" msgstr "Združi" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Odstrani" @@ -1148,9 +1148,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Ime" @@ -1210,9 +1210,8 @@ msgstr "" msgid "File Name" msgstr "Ime datoteke" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Pregled CD-ja" @@ -1375,7 +1374,7 @@ msgstr "API ključ:" msgid "Get API key..." msgstr "Pridobi API ključ ..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomske oznake" @@ -1430,7 +1429,7 @@ msgstr "Vrata:" msgid "Server address:" msgstr "Naslov strežnika:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1442,7 +1441,7 @@ msgstr "Prijava" msgid "Log out" msgstr "Odjava" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Splošno" @@ -1534,7 +1533,7 @@ msgstr "Minimalna podobnost za pregled datotek:" msgid "Minimal similarity for cluster lookups:" msgstr "Minimalna podobnost za pregled skupkov:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metapodatki" @@ -1604,7 +1603,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Vtičniki" @@ -1931,19 +1930,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2114,7 +2113,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2156,15 +2155,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Napaka skript" diff --git a/po/sr.po b/po/sr.po index 20970d058..f63d1ba8a 100644 --- a/po/sr.po +++ b/po/sr.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Serbian (http://www.transifex.com/musicbrainz/musicbrainz/language/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: sr\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -143,7 +143,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1139,9 +1139,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "" @@ -1201,9 +1201,8 @@ msgstr "" msgid "File Name" msgstr "" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1366,7 +1365,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1421,7 +1420,7 @@ msgstr "" msgid "Server address:" msgstr "" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1433,7 +1432,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "" @@ -1525,7 +1524,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "" @@ -1595,7 +1594,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "" @@ -1922,19 +1921,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2105,7 +2104,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2147,15 +2146,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/sv.po b/po/sv.po index e7dfedf07..cfefa4da9 100644 --- a/po/sv.po +++ b/po/sv.po @@ -5,7 +5,7 @@ # Translators: # bnw , 2006 # Christian Andersson , 2012 -# Jonatan Nyberg , 2016 +# Jonatan Nyberg , 2016-2017 # Robin Björnsvik , 2013 # Staffan Vilcans, 2014 # Staffan Vilcans, 2016-2017 @@ -14,14 +14,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" -"PO-Revision-Date: 2017-01-20 08:52+0000\n" -"Last-Translator: Staffan Vilcans\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" +"PO-Revision-Date: 2017-01-24 01:53+0000\n" +"Last-Translator: Jonatan Nyberg \n" "Language-Team: Swedish (http://www.transifex.com/musicbrainz/musicbrainz/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -70,7 +70,7 @@ msgstr "[kunde inte ladda album %s]" #: picard/album.py:295 #, python-format msgid "Album %(id)s loaded: %(artist)s - %(album)s" -msgstr "" +msgstr "Album %(id)s laddad: %(artist)s - %(album)s" #: picard/album.py:338 #, python-format @@ -96,7 +96,7 @@ msgstr "" #: picard/cluster.py:185 #, python-format msgid "Cluster %(album)s identified!" -msgstr "" +msgstr "Kluster %(album)s identifierad!" #: picard/cluster.py:196 #, python-format @@ -144,7 +144,7 @@ msgid "Merge" msgstr "Sammanfoga" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Radera" @@ -176,7 +176,7 @@ msgstr "Letar upp metadata för file %(filename)s ..." #: picard/plugin.py:434 #, python-format msgid "Error loading plugins list: %(error)s" -msgstr "" +msgstr "Fel vid laddning av insticksmodullista: %(error)s" #: picard/releasegroup.py:53 picard/ui/searchdialog.py:515 msgid "Tracks" @@ -215,8 +215,8 @@ msgstr "[ingen information om utgåva]" #, python-format msgid "Adding %(count)d file from '%(directory)s' ..." msgid_plural "Adding %(count)d files from '%(directory)s' ..." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Lägger till %(count)d fil från '%(directory)s' ..." +msgstr[1] "Lägger till %(count)d filer från '%(directory)s' ..." #: picard/tagger.py:597 #, python-format @@ -312,15 +312,15 @@ msgstr "Amazon" #: picard/coverart/providers/caa.py:51 msgid "Cover art types" -msgstr "" +msgstr "Omslagstyper" #: picard/coverart/providers/caa.py:84 msgid "Chec&k all" -msgstr "" +msgstr "Boc&ka alla" #: picard/coverart/providers/caa.py:85 msgid "&Uncheck all" -msgstr "" +msgstr "&Avbocka alla" #: picard/coverart/providers/caa.py:187 msgid "Cover Art Archive" @@ -374,8 +374,8 @@ msgstr "Uppdatera lista" #, python-format msgid "%s (%i release)" msgid_plural "%s (%i releases)" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%s (%i utgåva)" +msgstr[1] "%s (%i utgåvor)" #: picard/ui/coverartbox.py:143 msgid "View release on MusicBrainz" @@ -395,7 +395,7 @@ msgstr "&Sätt som startkatalog" #: picard/ui/infodialog.py:46 msgid "Existing Cover" -msgstr "" +msgstr "Befintligt omslag" #: picard/ui/infodialog.py:46 picard/ui/infodialog.py:52 #: picard/ui/searchdialog.py:330 picard/ui/searchdialog.py:522 @@ -479,7 +479,7 @@ msgstr "&Information" #: picard/ui/infodialog.py:304 msgid "Cluster Info" -msgstr "" +msgstr "Kluster info" #: picard/ui/infodialog.py:313 msgid "Album:" @@ -520,7 +520,7 @@ msgstr "Längd" #: picard/ui/itemviews.py:162 msgid "Bad match" -msgstr "" +msgstr "Dålig träff" #: picard/ui/itemviews.py:163 msgid "Poor match" @@ -528,11 +528,11 @@ msgstr "" #: picard/ui/itemviews.py:164 msgid "Ok match" -msgstr "" +msgstr "Ok träff" #: picard/ui/itemviews.py:165 msgid "Good match" -msgstr "" +msgstr "Bra match" #: picard/ui/itemviews.py:166 msgid "Great match" @@ -552,7 +552,7 @@ msgstr "&Minimera alla" #: picard/ui/itemviews.py:247 msgid "Select &all" -msgstr "" +msgstr "Välj &alla" #: picard/ui/itemviews.py:249 msgid "Ctrl+A" @@ -572,7 +572,7 @@ msgstr "Samlingar" #: picard/ui/itemviews.py:386 msgid "P&lugins" -msgstr "" +msgstr "&Insticksmoduler" #: picard/ui/itemviews.py:557 msgid "file view" @@ -608,19 +608,19 @@ msgstr "" #: picard/ui/itemviews.py:705 msgid "Album modified" -msgstr "" +msgstr "Album modifierat" #: picard/ui/itemviews.py:708 msgid "Album unchanged" -msgstr "" +msgstr "Album oändrat" #: picard/ui/itemviews.py:811 msgid "Track saved" -msgstr "" +msgstr "Spår sparad" #: picard/ui/itemviews.py:813 picard/ui/itemviews.py:817 msgid "Pending" -msgstr "" +msgstr "Pågående" #: picard/ui/logview.py:109 msgid "Log" @@ -628,11 +628,11 @@ msgstr "Logg" #: picard/ui/logview.py:113 msgid "Debug mode" -msgstr "" +msgstr "Felsökningsläge" #: picard/ui/logview.py:134 msgid "Activity History" -msgstr "" +msgstr "Aktivitet historia" #: picard/ui/mainwindow.py:82 msgid "MusicBrainz Picard" @@ -783,7 +783,7 @@ msgstr "Ctrl+Shift+L" #: picard/ui/mainwindow.py:386 msgid "Search for similar albums..." -msgstr "" +msgstr "Sök efter liknande album..." #: picard/ui/mainwindow.py:387 msgid "View similar releases and optionally choose a different release" @@ -791,7 +791,7 @@ msgstr "" #: picard/ui/mainwindow.py:390 msgid "Search for similar tracks..." -msgstr "" +msgstr "Sök efter liknande spår..." #: picard/ui/mainwindow.py:391 msgid "View similar tracks and optionally choose a different release" @@ -910,7 +910,7 @@ msgstr "" #: picard/ui/mainwindow.py:483 msgid "Open in &Player" -msgstr "" +msgstr "Öppna i &spelare" #: picard/ui/mainwindow.py:484 msgid "Play the file in your default media player" @@ -950,7 +950,7 @@ msgstr "&Hjälp" #: picard/ui/mainwindow.py:586 msgid "Actions" -msgstr "" +msgstr "Åtgärder" #: picard/ui/mainwindow.py:627 msgid "Track" @@ -1103,11 +1103,11 @@ msgstr "Använd avancerad frågesyntax" msgid "" " (Syntax " "Help)" -msgstr "" +msgstr " (Syntax Hjälp)" #: picard/ui/searchdialog.py:228 msgid "Loading..." -msgstr "" +msgstr "Laddar..." #: picard/ui/searchdialog.py:259 msgid "Retry" @@ -1132,17 +1132,17 @@ msgstr "" #: picard/ui/searchdialog.py:322 msgid "Track Search Results" -msgstr "" +msgstr "Spårsöknings resultat" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Namn" #: picard/ui/searchdialog.py:327 msgid "Release" -msgstr "" +msgstr "Utgåva" #: picard/ui/searchdialog.py:435 msgid "Standalone Recording" @@ -1162,11 +1162,11 @@ msgstr "Status" #: picard/ui/searchdialog.py:737 msgid "Show in browser" -msgstr "" +msgstr "Visa i webbläsare" #: picard/ui/searchdialog.py:738 msgid "Artist Search Dialog" -msgstr "" +msgstr "Artist sökdialog" #: picard/ui/searchdialog.py:742 msgid "Gender" @@ -1178,7 +1178,7 @@ msgstr "Område" #: picard/ui/searchdialog.py:744 msgid "Begin" -msgstr "" +msgstr "Börja" #: picard/ui/searchdialog.py:745 msgid "Begin Area" @@ -1186,7 +1186,7 @@ msgstr "" #: picard/ui/searchdialog.py:746 msgid "End" -msgstr "" +msgstr "Slut" #: picard/ui/searchdialog.py:747 msgid "End Area" @@ -1196,9 +1196,8 @@ msgstr "" msgid "File Name" msgstr "Filnamn" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD-uppslagning" @@ -1270,7 +1269,7 @@ msgstr "" #: picard/ui/ui_options_advanced.py:80 msgid "Video tracks" -msgstr "" +msgstr "Video spår" #: picard/ui/ui_options_advanced.py:81 msgid "Pregap tracks" @@ -1278,11 +1277,11 @@ msgstr "" #: picard/ui/ui_options_advanced.py:82 msgid "Data tracks" -msgstr "" +msgstr "Dataspår" #: picard/ui/ui_options_advanced.py:83 msgid "Silent tracks" -msgstr "" +msgstr "Tysta spår" #: picard/ui/ui_options_cdlookup.py:43 msgid "CD-ROM device to use for lookups:" @@ -1361,7 +1360,7 @@ msgstr "API-nyckel:" msgid "Get API key..." msgstr "Hämta API-nyckel...Aktivera spårgradering" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonimitaggar" @@ -1416,7 +1415,7 @@ msgstr "Port:" msgid "Server address:" msgstr "Serveradress:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainz konto" @@ -1428,7 +1427,7 @@ msgstr "Logga in" msgid "Log out" msgstr "Logga ut" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Allmänt" @@ -1478,7 +1477,7 @@ msgstr "" #: picard/ui/ui_options_interface.py:133 msgid "Add Action" -msgstr "" +msgstr "Lägg till åtgärd" #: picard/ui/ui_options_interface.py:134 msgid "Insert a separator" @@ -1490,7 +1489,7 @@ msgstr "" #: picard/ui/ui_options_interface.py:136 msgid "Move selected item up" -msgstr "" +msgstr "Flytta valt objekt upp" #: picard/ui/ui_options_interface.py:137 picard/ui/ui_options_interface.py:139 msgid "..." @@ -1498,7 +1497,7 @@ msgstr "..." #: picard/ui/ui_options_interface.py:138 msgid "Move selected item down" -msgstr "" +msgstr "Flytta valt objekt ner" #: picard/ui/ui_options_interface.py:140 msgid "Remove button from toolbar" @@ -1520,7 +1519,7 @@ msgstr "Minsta överensstämmelse för uppslagning av fil:" msgid "Minimal similarity for cluster lookups:" msgstr "Minsta överensstämmelse för uppslagning av kluster:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1584,13 +1583,13 @@ msgstr "Webbläsarintegrering" #: picard/ui/ui_options_network.py:113 msgid "Default listening port:" -msgstr "" +msgstr "Standard lyssnarport:" #: picard/ui/ui_options_network.py:114 msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Insticksmoduler" @@ -1700,7 +1699,7 @@ msgstr "" #: picard/ui/ui_options_script.py:101 msgid "Display Name" -msgstr "" +msgstr "Visa namn" #: picard/ui/ui_options_tags.py:152 msgid "Write tags to files" @@ -1712,7 +1711,7 @@ msgstr "" #: picard/ui/ui_options_tags.py:154 msgid "Before Tagging" -msgstr "" +msgstr "Före taggning" #: picard/ui/ui_options_tags.py:155 msgid "Clear existing tags" @@ -1753,7 +1752,7 @@ msgstr "2.3" #: picard/ui/ui_options_tags.py:164 msgid "ID3v2 Text Encoding" -msgstr "" +msgstr "ID3v2 textkodning" #: picard/ui/ui_options_tags.py:165 msgid "UTF-8" @@ -1861,7 +1860,7 @@ msgstr "" #: picard/ui/options/__init__.py:83 msgid "Regex Error" -msgstr "" +msgstr "Regex fel" #: picard/ui/options/about.py:30 msgid "About" @@ -1917,19 +1916,19 @@ msgstr "Återställ standardvärden" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "Varning! Detta kommer nollställa alla dina inställningar." -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "Bekräfta nollställning" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "Är du säker?" @@ -1993,7 +1992,7 @@ msgstr "Skicka in AcoustIDn" #: picard/ui/options/interface.py:83 msgid "Open in Player" -msgstr "" +msgstr "Open i spelare" #: picard/ui/options/interface.py:87 msgid "Lookup CD..." @@ -2019,7 +2018,7 @@ msgstr "Dra och släpp för att ordna om" #: picard/ui/options/interface.py:209 picard/ui/options/interface.py:291 msgid "label" -msgstr "" +msgstr "etikett" #: picard/ui/options/matching.py:28 msgid "Matching" @@ -2069,7 +2068,7 @@ msgstr "Ny version tillgänglig" #: picard/ui/options/plugins.py:305 msgid "Authors" -msgstr "" +msgstr "Författare" #: picard/ui/options/plugins.py:307 picard/util/tags.py:44 msgid "License" @@ -2082,7 +2081,7 @@ msgstr "" #: picard/ui/options/plugins.py:339 msgid "Please try again later." -msgstr "" +msgstr "Vänligen försök igen senare." #: picard/ui/options/ratings.py:28 msgid "Ratings" @@ -2100,7 +2099,7 @@ msgstr "Återställ allt" msgid "File Naming" msgstr "Filnamngivning" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2142,15 +2141,15 @@ msgstr "" msgid "Scripting" msgstr "Skriptning" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Skriptfel" @@ -2288,7 +2287,7 @@ msgstr "BPM" #: picard/util/tags.py:42 msgid "Key" -msgstr "" +msgstr "Nyckel" #: picard/util/tags.py:43 msgid "Copyright" @@ -2464,7 +2463,7 @@ msgstr "Artister" #: picard/util/tags.py:90 msgid "Work" -msgstr "" +msgstr "Jobb" #: picard/util/versions.py:47 msgid "is not installed" diff --git a/po/te.po b/po/te.po index 99092a34e..5c0576ac2 100644 --- a/po/te.po +++ b/po/te.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Telugu (http://www.transifex.com/musicbrainz/musicbrainz/language/te/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: te\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" @@ -139,7 +139,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "తీసివేయి" @@ -1129,9 +1129,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "పేరు" @@ -1191,9 +1191,8 @@ msgstr "" msgid "File Name" msgstr "" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1356,7 +1355,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1411,7 +1410,7 @@ msgstr "" msgid "Server address:" msgstr "" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1423,7 +1422,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "సాధారణ" @@ -1515,7 +1514,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "" @@ -1585,7 +1584,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "" @@ -1912,19 +1911,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2095,7 +2094,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2137,15 +2136,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/tr.po b/po/tr.po index d683f5367..e7c4faccd 100644 --- a/po/tr.po +++ b/po/tr.po @@ -13,14 +13,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Turkish (http://www.transifex.com/musicbrainz/musicbrainz/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -143,7 +143,7 @@ msgid "Merge" msgstr "Birleştir" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "Sil" @@ -1133,9 +1133,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "İsim" @@ -1195,9 +1195,8 @@ msgstr "" msgid "File Name" msgstr "Dosya Adı" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD Arama" @@ -1360,7 +1359,7 @@ msgstr "API anahtarı:" msgid "Get API key..." msgstr "API anahtarı al..." -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Folksonomi Etiketleri" @@ -1415,7 +1414,7 @@ msgstr "Bağlantı Noktası:" msgid "Server address:" msgstr "Sunucu adresi:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainz Hesabı" @@ -1427,7 +1426,7 @@ msgstr "Giriş yap" msgid "Log out" msgstr "Çıkış yap" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Genel" @@ -1519,7 +1518,7 @@ msgstr "Dosya aramaları için gerekli olan minimum benzerlik" msgid "Minimal similarity for cluster lookups:" msgstr "Küme aramaları için minimum benzerlik:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Metadata" @@ -1589,7 +1588,7 @@ msgstr "Varsayılan dinleme portu:" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Eklentiler" @@ -1916,19 +1915,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2099,7 +2098,7 @@ msgstr "Tümünü sıfırla" msgid "File Naming" msgstr "Dosya İsimlendirme" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2141,15 +2140,15 @@ msgstr "" msgid "Scripting" msgstr "Betikleme" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Betik Hatası" diff --git a/po/uk.po b/po/uk.po index 875762d3a..4b420830c 100644 --- a/po/uk.po +++ b/po/uk.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Ukrainian (http://www.transifex.com/musicbrainz/musicbrainz/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: uk\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" @@ -142,7 +142,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1138,9 +1138,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "Назва" @@ -1200,9 +1200,8 @@ msgstr "" msgid "File Name" msgstr "Назва файла" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "Пошук CD" @@ -1365,7 +1364,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "Фолкосономічні позначки" @@ -1420,7 +1419,7 @@ msgstr "Порт:" msgid "Server address:" msgstr "Адреса сервера:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1432,7 +1431,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Загальне" @@ -1524,7 +1523,7 @@ msgstr "Мінімальна схожість для пошуків файлів msgid "Minimal similarity for cluster lookups:" msgstr "Мінімальна схожість для пошуків кластерів:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "Метадані" @@ -1594,7 +1593,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "Модулі" @@ -1921,19 +1920,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2104,7 +2103,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2146,15 +2145,15 @@ msgstr "" msgid "Scripting" msgstr "Сценарії" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "Помилка сценарію" diff --git a/po/zh_CN.po b/po/zh_CN.po index b94090c73..fabea8114 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -9,14 +9,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Chinese (China) (http://www.transifex.com/musicbrainz/musicbrainz/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -136,7 +136,7 @@ msgid "Merge" msgstr "" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "" @@ -1120,9 +1120,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "名称" @@ -1182,9 +1182,8 @@ msgstr "" msgid "File Name" msgstr "文件名" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" @@ -1347,7 +1346,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1402,7 +1401,7 @@ msgstr "端口:" msgid "Server address:" msgstr "服务器地址:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "" @@ -1414,7 +1413,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "" @@ -1506,7 +1505,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "元数据" @@ -1576,7 +1575,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "插件" @@ -1903,19 +1902,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2086,7 +2085,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2128,15 +2127,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" diff --git a/po/zh_TW.po b/po/zh_TW.po index b443ef24f..f75e0a193 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-18 12:51+0100\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" "PO-Revision-Date: 2017-01-19 09:17+0000\n" "Last-Translator: nikki\n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/musicbrainz/musicbrainz/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 1.3\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" @@ -137,7 +137,7 @@ msgid "Merge" msgstr "合併" #: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 msgid "Remove" msgstr "移除" @@ -1121,9 +1121,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 -#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 -#: picard/ui/ui_options_plugins.py:138 +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 msgid "Name" msgstr "名稱" @@ -1183,9 +1183,8 @@ msgstr "" msgid "File Name" msgstr "檔案名稱" -#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 -#: picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "CD 查找" @@ -1348,7 +1347,7 @@ msgstr "API 金鑰:" msgid "Get API key..." msgstr "取得 API 金鑰…" -#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" @@ -1403,7 +1402,7 @@ msgstr "連接埠:" msgid "Server address:" msgstr "伺服機位址:" -#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" msgstr "MusicBrainz 帳號" @@ -1415,7 +1414,7 @@ msgstr "登入" msgid "Log out" msgstr "登出" -#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "一般" @@ -1507,7 +1506,7 @@ msgstr "檔案查找的最小相似度:" msgid "Minimal similarity for cluster lookups:" msgstr "叢集查找的最小相似度:" -#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "後設資料" @@ -1577,7 +1576,7 @@ msgstr "預設的聆聽連接埠:" msgid "Listen only on localhost" msgstr "只在本機端的連接埠聆聽" -#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 msgid "Plugins" msgstr "插件" @@ -1904,19 +1903,19 @@ msgstr "" msgid "Reset all settings for current option page" msgstr "" -#: picard/ui/options/dialog.py:166 +#: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." msgstr "" -#: picard/ui/options/dialog.py:170 +#: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." msgstr "" -#: picard/ui/options/dialog.py:177 +#: picard/ui/options/dialog.py:183 msgid "Confirm Reset" msgstr "" -#: picard/ui/options/dialog.py:178 +#: picard/ui/options/dialog.py:184 msgid "Are you sure?" msgstr "" @@ -2087,7 +2086,7 @@ msgstr "" msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:406 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" "Open Scripting Documentation in " "your browser" @@ -2129,15 +2128,15 @@ msgstr "" msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:292 +#: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" msgstr "" -#: picard/ui/options/scripting.py:293 +#: picard/ui/options/scripting.py:294 msgid "Confirm Remove" msgstr "" -#: picard/ui/options/scripting.py:376 +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" From 0b6207a40d4e4e98fcf27b010cbe5cfccf360413 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Thu, 9 Feb 2017 00:07:17 +0100 Subject: [PATCH 017/173] PICARD-947: fix typo in parenthesis causing translation to fail The string was correctly parsed by gettext, but not translated at runtime. --- picard/ui/searchdialog.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/ui/searchdialog.py b/picard/ui/searchdialog.py index 974d75952..614a56dde 100644 --- a/picard/ui/searchdialog.py +++ b/picard/ui/searchdialog.py @@ -281,11 +281,11 @@ class SearchDialog(PicardDialog): def network_error(self, reply, error): error_msg = _("Following error occurred while fetching results:

" - "Network request error for %s:
%s (QT code %d, HTTP code %s)
" % ( + "Network request error for %s:
%s (QT code %d, HTTP code %s)
") % ( reply.request().url().toString(QtCore.QUrl.RemoveUserInfo), reply.errorString(), error, - repr(reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute))) + repr(reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute)) ) self.show_error(error_msg, show_retry_button=True) From f2e2188ba49ee5dd46eacf584915bd026bbc1a35 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 9 Feb 2017 08:15:37 +0100 Subject: [PATCH 018/173] Fix various cover drop issues This patch adds https support, so users can drag covers from amazon. Also fixes the imgurl query handling so users can drag covers from google images thumbnails (but large resolution images will be downloaded). It also adds support for dropped octet-stream data, so chromium users can drag "opened" images from google images even if the link actually points to the url containing the image, since chromium adds the image data to the drop event. Unfortunately, firefox doesn't do that, so firefox users will have to drag thumbnails (but the same large resolution image will be used in any case) --- picard/ui/coverartbox.py | 45 +++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index fc5158776..31b21deb4 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -33,7 +33,7 @@ class ActiveLabel(QtGui.QLabel): """Clickable QLabel.""" clicked = QtCore.pyqtSignal() - imageDropped = QtCore.pyqtSignal(QtCore.QUrl) + imageDropped = QtCore.pyqtSignal(QtCore.QUrl, QtCore.QByteArray) def __init__(self, active=True, *args): QtGui.QLabel.__init__(self, *args) @@ -54,16 +54,20 @@ class ActiveLabel(QtGui.QLabel): def dragEnterEvent(self, event): for url in event.mimeData().urls(): - if url.scheme() in ('http', 'file'): + if url.scheme() in ('https', 'http', 'file'): event.acceptProposedAction() break def dropEvent(self, event): accepted = False + # Chromium includes the actual data of the dragged image in the drop event. This + # is useful for Google Images, where the url links to the page that contains the image + # so we use it if the downloaded url is not an image. + droppedData = event.mimeData().data('application/octet-stream') for url in event.mimeData().urls(): - if url.scheme() in ('http', 'file'): + if url.scheme() in ('https', 'http', 'file'): accepted = True - self.imageDropped.emit(url) + self.imageDropped.emit(url, droppedData) if accepted: event.acceptProposedAction() @@ -150,15 +154,19 @@ class CoverArtBox(QtGui.QGroupBox): lookup = self.tagger.get_file_lookup() lookup.albumLookup(self.release) - def fetch_remote_image(self, url): + def fetch_remote_image(self, url, fallbackData=None): if self.item is None: return - if url.scheme() == 'http': + if url.scheme() in ('https', 'http'): path = url.encodedPath() if url.hasQuery(): path += '?' + url.encodedQuery() - self.tagger.xmlws.get(url.encodedHost(), url.port(80), path, - partial(self.on_remote_image_fetched, url), + if url.scheme() == 'https': + port = 443 + else: + port = 80 + self.tagger.xmlws.get(str(url.encodedHost()), url.port(port), str(path), + partial(self.on_remote_image_fetched, url, fallbackData=fallbackData), xml=False, priority=True, important=True) elif url.scheme() == 'file': @@ -169,16 +177,29 @@ class CoverArtBox(QtGui.QGroupBox): data = f.read() self.load_remote_image(url, mime, data) - def on_remote_image_fetched(self, url, data, reply, error): + def on_remote_image_fetched(self, url, data, reply, error, fallbackData=None): mime = reply.header(QtNetwork.QNetworkRequest.ContentTypeHeader) if mime in ('image/jpeg', 'image/png'): self.load_remote_image(url, mime, data) - elif reply.url().hasQueryItem("imgurl"): + elif url.hasQueryItem("imgurl"): # This may be a google images result, try to get the URL which is encoded in the query - url = QtCore.QUrl(reply.url().queryItemValue("imgurl")) + url = QtCore.QUrl(url.queryItemValue("imgurl")) self.fetch_remote_image(url) else: - log.warning("Can't load image with MIME-Type %s", mime) + log.warning("Can't load remote image with MIME-Type %s", mime) + if fallbackData: + # Tests for image format obtained from file-magic + if fallbackData[:2]=='\xff\xd8': + mime = 'image/jpeg' + elif fallbackData[:8]=='\x89PNG\x0d\x0a\x1a\x0a': + mime = 'image/png' + else: + mime = None + + if mime: + log.warning("Trying the dropped %s data", mime) + self.load_remote_image(url, mime, fallbackData) + def load_remote_image(self, url, mime, data): try: From 31768cf8f9693c7e291722a0560a19908b2ae777 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 9 Feb 2017 10:03:36 +0100 Subject: [PATCH 019/173] Rename variables to use snake-case Also, use log.debug instead of log.warning for a message --- picard/ui/coverartbox.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 31b21deb4..c378b93fd 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -63,11 +63,11 @@ class ActiveLabel(QtGui.QLabel): # Chromium includes the actual data of the dragged image in the drop event. This # is useful for Google Images, where the url links to the page that contains the image # so we use it if the downloaded url is not an image. - droppedData = event.mimeData().data('application/octet-stream') + dropped_data = event.mimeData().data('application/octet-stream') for url in event.mimeData().urls(): if url.scheme() in ('https', 'http', 'file'): accepted = True - self.imageDropped.emit(url, droppedData) + self.imageDropped.emit(url, dropped_data) if accepted: event.acceptProposedAction() @@ -154,7 +154,7 @@ class CoverArtBox(QtGui.QGroupBox): lookup = self.tagger.get_file_lookup() lookup.albumLookup(self.release) - def fetch_remote_image(self, url, fallbackData=None): + def fetch_remote_image(self, url, fallback_data=None): if self.item is None: return if url.scheme() in ('https', 'http'): @@ -166,7 +166,7 @@ class CoverArtBox(QtGui.QGroupBox): else: port = 80 self.tagger.xmlws.get(str(url.encodedHost()), url.port(port), str(path), - partial(self.on_remote_image_fetched, url, fallbackData=fallbackData), + partial(self.on_remote_image_fetched, url, fallback_data=fallback_data), xml=False, priority=True, important=True) elif url.scheme() == 'file': @@ -177,7 +177,7 @@ class CoverArtBox(QtGui.QGroupBox): data = f.read() self.load_remote_image(url, mime, data) - def on_remote_image_fetched(self, url, data, reply, error, fallbackData=None): + def on_remote_image_fetched(self, url, data, reply, error, fallback_data=None): mime = reply.header(QtNetwork.QNetworkRequest.ContentTypeHeader) if mime in ('image/jpeg', 'image/png'): self.load_remote_image(url, mime, data) @@ -187,18 +187,18 @@ class CoverArtBox(QtGui.QGroupBox): self.fetch_remote_image(url) else: log.warning("Can't load remote image with MIME-Type %s", mime) - if fallbackData: + if fallback_data: # Tests for image format obtained from file-magic - if fallbackData[:2]=='\xff\xd8': + if fallback_data[:2]=='\xff\xd8': mime = 'image/jpeg' - elif fallbackData[:8]=='\x89PNG\x0d\x0a\x1a\x0a': + elif fallback_data[:8]=='\x89PNG\x0d\x0a\x1a\x0a': mime = 'image/png' else: mime = None if mime: - log.warning("Trying the dropped %s data", mime) - self.load_remote_image(url, mime, fallbackData) + log.debug("Trying the dropped %s data", mime) + self.load_remote_image(url, mime, fallback_data) def load_remote_image(self, url, mime, data): From 2961ed0333261d390f9a514500e7bf061002130c Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 9 Feb 2017 10:43:25 +0100 Subject: [PATCH 020/173] Rename the imageDropped signal to image_dropped --- picard/ui/coverartbox.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index c378b93fd..54c92fdd5 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -33,7 +33,7 @@ class ActiveLabel(QtGui.QLabel): """Clickable QLabel.""" clicked = QtCore.pyqtSignal() - imageDropped = QtCore.pyqtSignal(QtCore.QUrl, QtCore.QByteArray) + image_dropped = QtCore.pyqtSignal(QtCore.QUrl, QtCore.QByteArray) def __init__(self, active=True, *args): QtGui.QLabel.__init__(self, *args) @@ -67,7 +67,7 @@ class ActiveLabel(QtGui.QLabel): for url in event.mimeData().urls(): if url.scheme() in ('https', 'http', 'file'): accepted = True - self.imageDropped.emit(url, dropped_data) + self.image_dropped.emit(url, dropped_data) if accepted: event.acceptProposedAction() @@ -89,7 +89,7 @@ class CoverArtBox(QtGui.QGroupBox): self.coverArt.setPixmap(self.shadow) self.coverArt.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.coverArt.clicked.connect(self.open_release_page) - self.coverArt.imageDropped.connect(self.fetch_remote_image) + self.coverArt.image_dropped.connect(self.fetch_remote_image) self.layout.addWidget(self.coverArt, 0) self.setLayout(self.layout) From 33ea56fb542a19c9ead3973152a94c1d6f74d311 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 9 Feb 2017 16:51:19 +0530 Subject: [PATCH 021/173] Add Norwegian to UI languages --- picard/const/languages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/const/languages.py b/picard/const/languages.py index e5c350b30..21b06e6e6 100644 --- a/picard/const/languages.py +++ b/picard/const/languages.py @@ -54,7 +54,7 @@ UI_LANGUAGES = [ #(u'kn', u'ಕನ್ನಡ', N_(u'Kannada')), #(u'ko', u'한국어', N_(u'Korean')), #(u'lt', u'Lietuvių', N_(u'Lithuanian')), - #(u'nb', u'Norsk bokmål', N_(u'Norwegian Bokmal')), + (u'nb', u'Norsk bokmål', N_(u'Norwegian Bokmal')), #(u'nds', u'Plattdüütsch', N_(u'Low German')), (u'nl', u'Nederlands', N_(u'Dutch')), #(u'oc', u'Occitan', N_(u'Occitan')), From da3bbf414ff7bee80daea73c9996a64af6f0b403 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 9 Feb 2017 19:32:40 +0100 Subject: [PATCH 022/173] Use picard.util.imageinfo.py::identify to guess the mimetype of dropped image data Replace the hack to identify the image format of the dropped octet-stream with a call to imageinfo.identify which is used in other parts of picard. --- picard/ui/coverartbox.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 54c92fdd5..cf2409966 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -25,7 +25,7 @@ from picard.album import Album from picard.coverart.image import CoverArtImage, CoverArtImageError from picard.track import Track from picard.file import File -from picard.util import encode_filename +from picard.util import encode_filename, imageinfo class ActiveLabel(QtGui.QLabel): @@ -189,16 +189,13 @@ class CoverArtBox(QtGui.QGroupBox): log.warning("Can't load remote image with MIME-Type %s", mime) if fallback_data: # Tests for image format obtained from file-magic - if fallback_data[:2]=='\xff\xd8': - mime = 'image/jpeg' - elif fallback_data[:8]=='\x89PNG\x0d\x0a\x1a\x0a': - mime = 'image/png' - else: - mime = None - - if mime: - log.debug("Trying the dropped %s data", mime) + try: + mime = imageinfo.identify(fallback_data)[2] + log.warning("Trying the dropped %s data", mime) self.load_remote_image(url, mime, fallback_data) + except: + log.error("Unable to identify dropped data format") + def load_remote_image(self, url, mime, data): From 1117dd637c2dbf0ebe6887d4e47d0c6dfbc02116 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Fri, 10 Feb 2017 11:01:52 +0100 Subject: [PATCH 023/173] Update few .po files --- po/attributes/nb.po | 48 ++++++++++++------------- po/attributes/sv.po | 61 +++++++++++++++---------------- po/de.po | 16 ++++----- po/nb.po | 88 ++++++++++++++++++++++----------------------- 4 files changed, 107 insertions(+), 106 deletions(-) diff --git a/po/attributes/nb.po b/po/attributes/nb.po index b8057e71c..fc05993e9 100644 --- a/po/attributes/nb.po +++ b/po/attributes/nb.po @@ -1,14 +1,14 @@ # Translators: # Translators: -# CatQuest, The Endeavouring Cat, 2015 +# CatQuest, The Endeavouring Cat, 2015,2017 # Kurt-Håkon Eilertsen , 2014 # CatQuest, The Endeavouring Cat, 2012 # CatQuest, The Endeavouring Cat, 2014 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-01-16 20:46+0000\n" -"Last-Translator: Laurent Monin \n" +"PO-Revision-Date: 2017-02-10 00:50+0000\n" +"Last-Translator: CatQuest, The Endeavouring Cat\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/musicbrainz/musicbrainz/language/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -251,7 +251,7 @@ msgstr "" #: DB:series_type/description:3 msgctxt "series_type" msgid "A series of recordings." -msgstr "" +msgstr "En serie av innspillinger" #: DB:series_type/description:7 msgctxt "series_type" @@ -816,7 +816,7 @@ msgstr "Behāg" #: DB:work_type/name:26 msgctxt "work_type" msgid "Beijing opera" -msgstr "Beijing opera" +msgstr "Beijing operaen" #: DB:work_type/description:26 msgctxt "work_type" @@ -988,12 +988,12 @@ msgstr "Hefte" #: DB:release_status/name:3 msgctxt "release_status" msgid "Bootleg" -msgstr "Ulovlig" +msgstr "" #: DB:label_type/name:5 msgctxt "label_type" msgid "Bootleg Production" -msgstr "Ulovlig produksjon" +msgstr "" #: DB:work_attribute_type_allowed_value/value:607 msgctxt "work_attribute_type_allowed_value" @@ -1003,7 +1003,7 @@ msgstr "Bozlak" #: DB:release_group_primary_type/name:12 msgctxt "release_group_primary_type" msgid "Broadcast" -msgstr "Kringkaste" +msgstr "Kringkasting" #: DB:work_attribute_type_allowed_value/value:62 msgctxt "work_attribute_type_allowed_value" @@ -1153,7 +1153,7 @@ msgstr "Kortbord/Papirarm" #: DB:medium_format/name:9 msgctxt "medium_format" msgid "Cartridge" -msgstr "Patron" +msgstr "" #: DB:work_attribute_type_allowed_value/value:66 msgctxt "work_attribute_type_allowed_value" @@ -1168,7 +1168,7 @@ msgstr "Kassett" #: DB:release_packaging/name:8 msgctxt "release_packaging" msgid "Cassette Case" -msgstr "Kassett etui" +msgstr "Kassettetui" #: DB:series_type/name:5 msgctxt "series_type" @@ -1193,7 +1193,7 @@ msgstr "Cevher" #: DB:artist_type/name:4 msgctxt "artist_type" msgid "Character" -msgstr "Karakter" +msgstr "Rolle" #: DB:artist_type/name:6 msgctxt "artist_type" @@ -1599,7 +1599,7 @@ msgstr "Distributør" #: DB:area_type/name:5 msgctxt "area_type" msgid "District" -msgstr "Område" +msgstr "Distrikt" #: DB:area_type/description:5 msgctxt "area_type" @@ -1769,7 +1769,7 @@ msgstr "" #: DB:instrument_type/name:4 msgctxt "instrument_type" msgid "Electronic instrument" -msgstr "elektronisk instrument" +msgstr "Elektronisk instrument" #: DB:medium_format/name:42 msgctxt "medium_format" @@ -1794,17 +1794,17 @@ msgstr "Evcara" #: DB:editor_collection_type/name:4 msgctxt "collection_type" msgid "Event" -msgstr "" +msgstr "Arrangement" #: DB:series_type/name:6 msgctxt "series_type" msgid "Event" -msgstr "" +msgstr "Arrangement" #: DB:event_alias_type/name:1 msgctxt "alias_type" msgid "Event name" -msgstr "" +msgstr "Arrangementnavn" #: DB:work_attribute_type_allowed_value/value:729 msgctxt "work_attribute_type_allowed_value" @@ -2082,7 +2082,7 @@ msgstr "Garuḍadhvani" #: DB:release_packaging/name:12 msgctxt "release_packaging" msgid "Gatefold Cover" -msgstr "Sammenbrettet forside" +msgstr "Digipak" #: DB:work_attribute_type_allowed_value/value:99 msgctxt "work_attribute_type_allowed_value" @@ -2564,7 +2564,7 @@ msgstr "Instrument" #: DB:instrument_alias_type/name:1 msgctxt "alias_type" msgid "Instrument name" -msgstr "Instrument navn" +msgstr "Instrumentnavn" #: DB:release_group_secondary_type/name:4 msgctxt "release_group_secondary_type" @@ -3167,7 +3167,7 @@ msgstr "Mandāri" #: DB:series_ordering_type/name:2 msgctxt "series_ordering_type" msgid "Manual" -msgstr "Håndbok" +msgstr "Manual" #: DB:work_attribute_type_allowed_value/value:172 msgctxt "work_attribute_type_allowed_value" @@ -3877,7 +3877,7 @@ msgstr "Annet" #: DB:instrument_type/name:5 msgctxt "instrument_type" msgid "Other instrument" -msgstr "Andre instrument" +msgstr "Annet instrument" #: DB:work_type/name:12 msgctxt "work_type" @@ -4017,7 +4017,7 @@ msgstr "Produksjon" #: DB:release_status/name:2 msgctxt "release_status" msgid "Promotion" -msgstr "Reklame" +msgstr "Promoplate" #: DB:work_type/name:23 msgctxt "work_type" @@ -4681,12 +4681,12 @@ msgstr "Lydspor" #: DB:cover_art_archive.art_type/name:6 msgctxt "cover_art_type" msgid "Spine" -msgstr "" +msgstr "Rygg" #: DB:release_group_secondary_type/name:3 msgctxt "release_group_secondary_type" msgid "Spokenword" -msgstr "Uttalt ord" +msgstr "Taleplate" #: DB:place_type/name:4 msgctxt "place_type" @@ -5075,7 +5075,7 @@ msgstr "Spor" #: DB:cover_art_archive.art_type/name:9 msgctxt "cover_art_type" msgid "Tray" -msgstr "" +msgstr "Innlegg" #: DB:work_attribute_type_allowed_value/value:775 msgctxt "work_attribute_type_allowed_value" diff --git a/po/attributes/sv.po b/po/attributes/sv.po index 6a584ce6d..ddeae16e3 100644 --- a/po/attributes/sv.po +++ b/po/attributes/sv.po @@ -1,5 +1,6 @@ # Translators: # Translators: +# A. Regnander , 2017 # Jonatan Nyberg , 2017 # Kristoffer Grundström , 2016 # Killinstinct , 2015 @@ -8,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-01-24 01:39+0000\n" -"Last-Translator: Jonatan Nyberg \n" +"PO-Revision-Date: 2017-02-09 17:58+0000\n" +"Last-Translator: A. Regnander \n" "Language-Team: Swedish (http://www.transifex.com/musicbrainz/musicbrainz/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -247,7 +248,7 @@ msgstr "En serie händelser." #: DB:series_type/description:9 msgctxt "series_type" msgid "A series of performances of the same show at the same venue." -msgstr "" +msgstr "En serie uppträdanden av samma föreställning på samma plats." #: DB:series_type/description:3 msgctxt "series_type" @@ -257,27 +258,27 @@ msgstr "En serie inspelningar." #: DB:series_type/description:7 msgctxt "series_type" msgid "A series of related concerts by an artist in different locations." -msgstr "" +msgstr "En serie relaterade konserter av en artist på olika platser." #: DB:series_type/description:1 msgctxt "series_type" msgid "A series of release groups." -msgstr "" +msgstr "En serie utgivningsgrupper." #: DB:series_type/description:2 msgctxt "series_type" msgid "A series of releases." -msgstr "" +msgstr "En serie utgivningar." #: DB:series_type/description:5 msgctxt "series_type" msgid "A series of works which form a catalogue of classical compositions." -msgstr "" +msgstr "En ser verk som bildar en katalog över klassiska kompositioner." #: DB:series_type/description:4 msgctxt "series_type" msgid "A series of works." -msgstr "" +msgstr "En serie verk." #: DB:work_type/description:15 msgctxt "work_type" @@ -3878,7 +3879,7 @@ msgstr "Annan" #: DB:instrument_type/name:5 msgctxt "instrument_type" msgid "Other instrument" -msgstr "" +msgstr "Andra instrument" #: DB:work_type/name:12 msgctxt "work_type" @@ -3888,7 +3889,7 @@ msgstr "Ouvertyr" #: DB:editor_collection_type/name:2 msgctxt "collection_type" msgid "Owned music" -msgstr "" +msgstr "Ägd musik" #: DB:work_attribute_type_allowed_value/value:762 msgctxt "work_attribute_type_allowed_value" @@ -3983,12 +3984,12 @@ msgstr "" #: DB:place_alias_type/name:1 msgctxt "alias_type" msgid "Place name" -msgstr "" +msgstr "Platsnamn" #: DB:work_type/name:28 msgctxt "work_type" msgid "Play" -msgstr "" +msgstr "Pjäs" #: DB:medium_format/name:45 msgctxt "medium_format" @@ -4183,7 +4184,7 @@ msgstr "" #: DB:editor_collection_type/name:12 msgctxt "collection_type" msgid "Recording" -msgstr "" +msgstr "Inspelning" #: DB:series_type/name:3 msgctxt "series_type" @@ -4193,7 +4194,7 @@ msgstr "Inspelning" #: DB:recording_alias_type/name:1 msgctxt "alias_type" msgid "Recording name" -msgstr "" +msgstr "Inspelningsnamn" #: DB:medium_format/name:10 msgctxt "medium_format" @@ -4218,37 +4219,37 @@ msgstr "" #: DB:editor_collection_type/name:1 msgctxt "collection_type" msgid "Release" -msgstr "" +msgstr "Utgivning" #: DB:series_type/name:2 msgctxt "series_type" msgid "Release" -msgstr "" +msgstr "Utgivning" #: DB:editor_collection_type/name:13 msgctxt "collection_type" msgid "Release group" -msgstr "" +msgstr "Utgivningsgrupp" #: DB:series_type/name:1 msgctxt "series_type" msgid "Release group" -msgstr "" +msgstr "Utgivningsgrupp" #: DB:release_group_alias_type/name:1 msgctxt "alias_type" msgid "Release group name" -msgstr "" +msgstr "Utgivningsgruppnamn" #: DB:release_alias_type/name:1 msgctxt "alias_type" msgid "Release name" -msgstr "" +msgstr "Utgivningsnamn" #: DB:place_type/name:6 msgctxt "place_type" msgid "Religious building" -msgstr "" +msgstr "Religiös byggnad" #: DB:work_attribute_type_allowed_value/value:765 msgctxt "work_attribute_type_allowed_value" @@ -4578,7 +4579,7 @@ msgstr "Serier" #: DB:series_alias_type/name:1 msgctxt "alias_type" msgid "Series name" -msgstr "Serier namn" +msgstr "Serienamn" #: DB:work_attribute_type_allowed_value/value:663 msgctxt "work_attribute_type_allowed_value" @@ -4667,7 +4668,7 @@ msgctxt "series_ordering_type" msgid "" "Sorts the items in the series automatically by their number attributes, " "using a natural sort order." -msgstr "" +msgstr "Sorterar objekten i serien automatiskt efter dess nummerattributer, med en naturlig sorteringsordning." #: DB:release_group_secondary_type/name:2 msgctxt "release_group_secondary_type" @@ -4707,7 +4708,7 @@ msgstr "Sträng instrument" #: DB:place_type/name:1 msgctxt "place_type" msgid "Studio" -msgstr "" +msgstr "Studio" #: DB:area_type/name:2 msgctxt "area_type" @@ -5313,7 +5314,7 @@ msgstr "" #: DB:cover_art_archive.art_type/name:13 msgctxt "cover_art_type" msgid "Watermark" -msgstr "" +msgstr "Vattenmärke" #: DB:medium_format/name:14 msgctxt "medium_format" @@ -5323,22 +5324,22 @@ msgstr "Fonografcylinder" #: DB:instrument_type/name:1 msgctxt "instrument_type" msgid "Wind instrument" -msgstr "" +msgstr "Blåsinstrument" #: DB:editor_collection_type/name:3 msgctxt "collection_type" msgid "Wishlist" -msgstr "" +msgstr "Önskelista" #: DB:editor_collection_type/name:15 msgctxt "collection_type" msgid "Work" -msgstr "" +msgstr "Verk" #: DB:series_type/name:4 msgctxt "series_type" msgid "Work" -msgstr "" +msgstr "Verk" #: DB:work_alias_type/name:1 msgctxt "alias_type" @@ -5451,7 +5452,7 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:681 msgctxt "work_attribute_type_allowed_value" msgid "ambiguous" -msgstr "" +msgstr "tvetydligt" #: DB:medium_format/name:27 msgctxt "medium_format" diff --git a/po/de.po b/po/de.po index 3865a9684..3632e62b7 100644 --- a/po/de.po +++ b/po/de.po @@ -17,7 +17,7 @@ # Shepard, 2013-2014 # Shepard, 2012 # Wieland Hoffmann , 2012 -# Wieland Hoffmann , 2013,2015 +# Wieland Hoffmann , 2013,2015,2017 # HumHumXX, 2015 # HumHumXX, 2012 msgid "" @@ -25,8 +25,8 @@ msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2017-01-23 14:00+0100\n" -"PO-Revision-Date: 2017-01-26 22:37+0000\n" -"Last-Translator: ix5 5 \n" +"PO-Revision-Date: 2017-02-09 17:16+0000\n" +"Last-Translator: Wieland Hoffmann \n" "Language-Team: German (http://www.transifex.com/musicbrainz/musicbrainz/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -693,7 +693,7 @@ msgstr "Übermittlungsfehler" msgid "" "You need to configure your AcoustID API key before you can submit " "fingerprints." -msgstr "Du musst deinen AcoustID API-Key angeben, um Fingerabdrücke übermitteln zu können." +msgstr "Du musst deinen AcoustID API-Schlüssel angeben, um Fingerabdrücke übermitteln zu können." #: picard/ui/mainwindow.py:313 msgid "&Options..." @@ -1129,7 +1129,7 @@ msgid "" "Following error occurred while fetching " "results:

Network request error for %s:
%s (QT code %d, " "HTTP code %s)
" -msgstr "Folgender Fehler is beim laden der Ergebnisse aufgetreten:

Netzwerkanfrage-Fehler für %s:
%s (QT code %d, HTTP code %s)
" +msgstr "Folgender Fehler ist beim Laden der Ergebnisse aufgetreten:

Netzwerkanfrage-Fehler für %s:
%s (QT code %d, HTTP code %s)
" #: picard/ui/searchdialog.py:293 msgid "" @@ -1364,7 +1364,7 @@ msgstr "Herunterladen …" #: picard/ui/ui_options_fingerprinting.py:94 msgid "API key:" -msgstr "API-Key:" +msgstr "API-Schlüssel:" #: picard/ui/ui_options_fingerprinting.py:95 msgid "Get API key..." @@ -1958,7 +1958,7 @@ msgstr "Ungültige fpcalc-Datei" #: picard/ui/options/general.py:74 #, python-format msgid "Logged in as %s." -msgstr "Eingeloggt als %s." +msgstr "Angemeldet als %s." #: picard/ui/options/general.py:88 msgid "Authorization code:" @@ -2113,7 +2113,7 @@ msgstr "Dateibenennung" msgid "" "Open Scripting Documentation in " "your browser" -msgstr "öffne Skript-Dokumentation im Browser" +msgstr "Öffne Skript-Dokumentation im Browser" #: picard/ui/options/renaming.py:188 msgid "The location to move files to must not be empty." diff --git a/po/nb.po b/po/nb.po index b8859ba30..c66a1e8e5 100644 --- a/po/nb.po +++ b/po/nb.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2017-01-23 14:00+0100\n" -"PO-Revision-Date: 2017-02-08 15:05+0000\n" +"PO-Revision-Date: 2017-02-09 19:13+0000\n" "Last-Translator: CatQuest, The Endeavouring Cat\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/musicbrainz/musicbrainz/language/nb/)\n" "MIME-Version: 1.0\n" @@ -148,7 +148,7 @@ msgstr "Fjern" #: picard/config_upgrade.py:193 picard/ui/options/scripting.py:28 #, python-format msgid "My script %d" -msgstr "Mine skript %d" +msgstr "Mitt skript %d" #: picard/file.py:541 #, python-format @@ -206,7 +206,7 @@ msgstr "[ingen strekkode]" #: picard/releasegroup.py:108 msgid "[no release info]" -msgstr "[ingen informasjon om utgivels]" +msgstr "[ingen informasjon om utgivelse]" #: picard/tagger.py:405 picard/tagger.py:438 #, python-format @@ -222,7 +222,7 @@ msgstr "Fjerner album %(id)s: %(artist)s - %(album)s" #: picard/tagger.py:613 msgid "CD Lookup Error" -msgstr "Feil i CD oppsøk" +msgstr "Feil ved CD oppslag" #: picard/tagger.py:614 #, python-format @@ -333,7 +333,7 @@ msgstr "Lokale filer" #: picard/coverart/providers/whitelist.py:38 msgid "Whitelist" -msgstr "Godkjenningsliste" +msgstr "Godkjent liste" #: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:625 picard/util/tags.py:21 msgid "Album" @@ -545,7 +545,7 @@ msgstr "&Utvid alle" #: picard/ui/itemviews.py:245 msgid "&Collapse all" -msgstr "%Skjul alle" +msgstr "&Skjul alle" #: picard/ui/itemviews.py:247 msgid "Select &all" @@ -813,7 +813,7 @@ msgstr "Søk" #: picard/ui/mainwindow.py:411 msgid "Lookup &CD..." -msgstr "Søk opp &CD..." +msgstr "Slå opp &CD..." #: picard/ui/mainwindow.py:412 msgid "Lookup the details of the CD in your drive" @@ -907,7 +907,7 @@ msgstr "Se &handlingshistorie" #: picard/ui/mainwindow.py:483 msgid "Open in &Player" -msgstr "Åpne i %spiller" +msgstr "Åpne i &spiller" #: picard/ui/mainwindow.py:484 msgid "Play the file in your default media player" @@ -915,11 +915,11 @@ msgstr "Spill filen i standard mediespiller" #: picard/ui/mainwindow.py:488 msgid "Open Containing &Folder" -msgstr "Åpne overordnet %mappe" +msgstr "Åpne overordnet &mappe" #: picard/ui/mainwindow.py:489 msgid "Open the containing folder in your file explorer" -msgstr "Åpne den overordnende %mappen i filbehandleren" +msgstr "Åpne den overordnende mappen i filbehandleren" #: picard/ui/mainwindow.py:518 msgid "&File" @@ -1196,7 +1196,7 @@ msgstr "Filnavn" #: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 #: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" -msgstr "CD oppsøk" +msgstr "CD oppslag" #: picard/ui/ui_cdlookup.py:54 msgid "The following releases on MusicBrainz match the CD:" @@ -1314,7 +1314,7 @@ msgstr "Overskriv filen hvis den allerede finnes?" #: picard/ui/ui_options_cover.py:85 msgid "Cover Art Providers" -msgstr "Leverandører av omslagsbilder" +msgstr "Omslagsbilde opphav" #: picard/ui/ui_options_fingerprinting.py:86 msgid "Audio Fingerprinting" @@ -1330,7 +1330,7 @@ msgstr "Bruk AcoustID" #: picard/ui/ui_options_fingerprinting.py:89 msgid "AcoustID Settings" -msgstr "AcoustID Innstillinger" +msgstr "Innstillinger for AcoustID" #: picard/ui/ui_options_fingerprinting.py:90 msgid "Ignore existing AcoustID fingerprints" @@ -1359,7 +1359,7 @@ msgstr "Få API nøkkel..." #: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" -msgstr "Folksonomi tagger" +msgstr "Folksonomitagger" #: picard/ui/ui_options_folksonomy.py:116 msgid "Ignore tags:" @@ -1377,7 +1377,7 @@ msgstr "Fall tilbake på artist tagger hvis ingen utgivelse- eller utgivelsesgru #: picard/ui/ui_options_folksonomy.py:119 msgid "Minimal tag usage:" -msgstr "Minimal tagg bruk:" +msgstr "Minste tagg bruk:" #: picard/ui/ui_options_folksonomy.py:120 picard/ui/ui_options_matching.py:75 #: picard/ui/ui_options_matching.py:76 picard/ui/ui_options_matching.py:77 @@ -1390,7 +1390,7 @@ msgstr "Maksimum antall tagger:" #: picard/ui/ui_options_folksonomy.py:122 msgid "Join multiple tags with:" -msgstr "Slå sammen flere tagger med:" +msgstr "Kombinér flere tagger med:" #: picard/ui/ui_options_folksonomy.py:123 msgid " / " @@ -1542,7 +1542,7 @@ msgstr "Bruk sporrelasjoner" #: picard/ui/ui_options_metadata.py:107 msgid "Use folksonomy tags as genre" -msgstr "Bruk folksonomi tagger som sjanger" +msgstr "Bruk folksonomitagger som sjanger" #: picard/ui/ui_options_metadata.py:108 msgid "Custom Fields" @@ -1660,7 +1660,7 @@ msgstr "Destinasjonsmappe:" #: picard/ui/ui_options_renaming.py:166 msgid "Move additional files (case insensitive):" -msgstr "Flytt flere filer (ikke versalsensitiv):" +msgstr "Flytt også filtypene (navn er ikke versalsensitiv):" #: picard/ui/ui_options_renaming.py:167 msgid "Delete empty directories" @@ -1668,7 +1668,7 @@ msgstr "Slett tomme mapper" #: picard/ui/ui_options_renaming.py:168 msgid "Rename files when saving" -msgstr "Endre navn på filer ved lagring" +msgstr "Endre filnavn ved lagring" #: picard/ui/ui_options_renaming.py:169 msgid "Replace non-ASCII characters" @@ -1680,7 +1680,7 @@ msgstr "Windows kombatibilitet" #: picard/ui/ui_options_renaming.py:171 msgid "Name files like this" -msgstr "Gi nye filer navn som dette" +msgstr "Navngi filer ifølge regeks:" #: picard/ui/ui_options_renaming.py:178 msgid "Examples" @@ -1692,7 +1692,7 @@ msgstr "Taggerskript" #: picard/ui/ui_options_script.py:99 picard/ui/ui_options_script.py:100 msgid "Add new script" -msgstr "Legg til nytt skript" +msgstr "Lag nytt skript" #: picard/ui/ui_options_script.py:101 msgid "Display Name" @@ -1729,7 +1729,7 @@ msgstr "Ivareta disse taggene fra å fjernes eller overskrives med MusicBrainz d #: picard/ui/ui_options_tags.py:159 msgid "Tags are separated by commas, and are case-sensitive." -msgstr "Tagger er atskilt med komma, og er versalsensitive." +msgstr "Tagger er atskilt med komma og er versalsensitive." #: picard/ui/ui_options_tags.py:160 msgid "Tag Compatibility" @@ -1741,11 +1741,11 @@ msgstr "ID3v2 versjon" #: picard/ui/ui_options_tags.py:162 msgid "2.4" -msgstr "2,4" +msgstr "2.4" #: picard/ui/ui_options_tags.py:163 msgid "2.3" -msgstr "2,3" +msgstr "2.3" #: picard/ui/ui_options_tags.py:164 msgid "ID3v2 Text Encoding" @@ -1765,7 +1765,7 @@ msgstr "ISO-8859-1" #: picard/ui/ui_options_tags.py:168 msgid "Join multiple ID3v2.3 tags with:" -msgstr "Slå sammen flere ID3v2.3 tagger med:" +msgstr "Kombinér flere ID3v2.3 tagger med:" #: picard/ui/ui_options_tags.py:169 msgid "" @@ -1780,11 +1780,11 @@ msgstr "Inkluder også ID3v1 tagger i filene" #: picard/ui/ui_passworddialog.py:64 msgid "Authentication required" -msgstr "Godkjenning nødvendig" +msgstr "Autorisering nødvendig" #: picard/ui/ui_provider_options_caa.py:86 msgid "Download only cover art images matching selected types" -msgstr "Last ned bare omslagsbilder av samsvarende type" +msgstr "Last bare ned omslagsbilder valgte typer:" #: picard/ui/ui_provider_options_caa.py:87 msgid "Select types..." @@ -1822,14 +1822,14 @@ msgstr "Bruk den første bildetypen som filnavn. Dette endrer ikke filnavnet til #: picard/ui/ui_provider_options_local.py:64 msgid "Local cover art files match the following regular expression:" -msgstr "Eksisterende omslagsbilder passer følgende regulære uttrykk:" +msgstr "Regulært uttrykk for eksisterende omslagsbilder:" #: picard/ui/ui_provider_options_local.py:66 msgid "" "First group in the regular expression, if any, will be used as type, ie. " "cover-back-spine.jpg will be set as types Back + Spine. If no type is found," " it will default to Front type." -msgstr "Første gruppe i det eventuelle regulære uttrykket, vil bli benyttet som type, dvs cover-back-spine.jpg " +msgstr "Første gruppe i det eventuelle regulære uttrykket, vil bli benyttet som type, dvs omslag-bakside-rygg.jpg settest som bakside + rygg, hvis ingen type er funnet, vil typen bli satt som forside" #: picard/ui/ui_tagsfromfilenames.py:50 msgid "Convert File Names to Tags" @@ -1887,7 +1887,7 @@ msgid "" "

Credits
\n" "Copyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin and others%(translator-credits)s

\n" "

Official website
%(picard-doc-url)s

\n" -msgstr "

MusicBrainz Picard
\nversjon %(version)s

\n

\n%(third_parties_versions)s\n

\n

Støttede formater
%(formats)s

\n

Donasjon
\nTakk for at du bruker Picard. Picard baserer seg på MusicBrainz databasen, som drives av MetaBrainz Foundation ved hjelp av tusenvis av frivillige. Hvis du liker dette programmet kan du donere til MetaBrainz Foundation for å holde tjenesten gående.

\n

Donér nå!

\n

Credits
\nCopyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin og andre%(translator-credits)s

\n

Offisiell nettside
%(picard-doc-url)s

\n" +msgstr "

MusicBrainz Picard
\nversjon %(version)s

\n

\n%(third_parties_versions)s\n

\n

Støttede formater
%(formats)s

\n

Donasjon
\nTakk for at du bruker Picard. Picard baserer seg på MusicBrainz databasen, som drives av MetaBrainz Foundation ved hjelp av tusenvis av frivillige. Hvis du liker dette programmet kan du donere til MetaBrainz Foundation for å holde tjenesten gående.

\n

Donér nå!

\n

Anerkjennelser
\nCopyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin og andre%(translator-credits)s

\n

Offisiell nettside
%(picard-doc-url)s

\n" #: picard/ui/options/advanced.py:30 msgid "Advanced" @@ -1973,7 +1973,7 @@ msgstr "Slå opp" #: picard/ui/options/interface.py:59 msgid "Scan" -msgstr "Skanner" +msgstr "Skann" #: picard/ui/options/interface.py:63 msgid "Lookup in Browser" @@ -2094,7 +2094,7 @@ msgstr "Tilbakestill alle" #: picard/ui/options/renaming.py:46 msgid "File Naming" -msgstr "Filbenevning" +msgstr "Filnavn og -flytting" #: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 msgid "" @@ -2116,11 +2116,11 @@ msgstr "Mitt skript" #: picard/ui/options/scripting.py:128 msgid "Move script up" -msgstr "Flytt skript opp" +msgstr "Flytt opp" #: picard/ui/options/scripting.py:132 msgid "Move script down" -msgstr "Flytt skript ned" +msgstr "Flytt ned" #: picard/ui/options/scripting.py:140 msgid "Other options" @@ -2128,11 +2128,11 @@ msgstr "Andre innstillinger" #: picard/ui/options/scripting.py:142 msgid "Rename script" -msgstr "Gi nytt navn til skript" +msgstr "Gi nytt navn" #: picard/ui/options/scripting.py:143 msgid "Remove script" -msgstr "Fjern skript" +msgstr "Slett skript" #: picard/ui/options/scripting.py:205 msgid "Scripting" @@ -2140,7 +2140,7 @@ msgstr "Skripting" #: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" -msgstr "Er du sikker på at du vil fjerne dette skriptet?" +msgstr "Er du sikker på at du vil slette dette skriptet?" #: picard/ui/options/scripting.py:294 msgid "Confirm Remove" @@ -2152,7 +2152,7 @@ msgstr "Skriptfeil" #: picard/ui/options/tags.py:30 msgid "Tags" -msgstr "Metadata" +msgstr "Tagger" #: picard/util/bytes2human.py:33 #, python-format @@ -2224,7 +2224,7 @@ msgstr "Opprinnelig utgivelsesår" #: picard/util/tags.py:27 msgid "Album Artist" -msgstr "Album Artist" +msgstr "Album artist" #: picard/util/tags.py:28 msgid "Track Number" @@ -2324,7 +2324,7 @@ msgstr "Undertittel" #: picard/util/tags.py:53 msgid "Disc Subtitle" -msgstr "Disk undertittel" +msgstr "Diskundertittel" #: picard/util/tags.py:54 msgid "Remixer" @@ -2332,7 +2332,7 @@ msgstr "Remikser" #: picard/util/tags.py:55 msgid "MusicBrainz Recording Id" -msgstr "MusicBrainz InnspillingsID" +msgstr "MusicBrainz Innspillings ID" #: picard/util/tags.py:56 msgid "MusicBrainz Track Id" @@ -2340,7 +2340,7 @@ msgstr "MusicBrainz Spor ID" #: picard/util/tags.py:57 msgid "MusicBrainz Release Id" -msgstr "MusicBrainz UtgivelsesID" +msgstr "MusicBrainz Utgivelses ID" #: picard/util/tags.py:58 msgid "MusicBrainz Artist Id" @@ -2348,11 +2348,11 @@ msgstr "MusicBrainz Artist ID" #: picard/util/tags.py:59 msgid "MusicBrainz Release Artist Id" -msgstr "MusicBrainz UtgivelsesartistID" +msgstr "MusicBrainz Utgivelsesartist ID" #: picard/util/tags.py:60 msgid "MusicBrainz Work Id" -msgstr "MusicBrainz ÅndsverksID" +msgstr "MusicBrainz Åndsverks ID" #: picard/util/tags.py:61 msgid "MusicBrainz Release Group Id" From 85282935f60f30b37295a607caa410430a7277bb Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Sun, 12 Feb 2017 20:47:15 +0100 Subject: [PATCH 024/173] Add test for the inmulti function Add a test to check that the inmulti function works as expected. --- test/test_script.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/test_script.py b/test/test_script.py index 35e45cffd..e9846256f 100644 --- a/test/test_script.py +++ b/test/test_script.py @@ -370,3 +370,22 @@ class ScriptParserTest(unittest.TestCase): self.parser.eval("$unset(performer:*)", context) self.assertNotIn('performer:bar', context) self.assertNotIn('performer:foo', context) + + def test_cmd_inmulti(self): + context = Metadata() + self.parser.eval("$set(foo,First; Second; Third)", context) + self.assertEqual(self.parser.eval("$in(%foo%,Second)", context), "1") + self.assertEqual(self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") + self.assertEqual(self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") + self.assertEqual(self.parser.eval("$inmulti(%foo%,Second)", context), "") + self.assertEqual(self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") + self.assertEqual(self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "1") + + self.parser.eval("$setmulti(foo,First; Second; Third)", context) + self.assertEqual(self.parser.eval("$in(%foo%,Second)", context), "1") + self.assertEqual(self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") + self.assertEqual(self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") + self.assertEqual(self.parser.eval("$inmulti(%foo%,Second)", context), "1") + self.assertEqual(self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") + self.assertEqual(self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "") + From 9155c0bd8f5e25797e9a8f7b71b6615c5b5369e2 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Sun, 12 Feb 2017 20:50:55 +0100 Subject: [PATCH 025/173] Fix inmulti behaviour with multi-values inmulti arguments where evaluated before inmulti was executed, which resulted in strings being passed as arguments, which breaks cases in which the strings in multivalue variables contain the separator used to separate multiple values (see PICARD-922). This commit changes the behaviour of inmulti so arguments are not evaluated before they're passed, so it can extract the argument value as a list and work with that. This should fix PICARD-922 --- picard/script.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/picard/script.py b/picard/script.py index 1fca623c0..54ad48131 100644 --- a/picard/script.py +++ b/picard/script.py @@ -387,9 +387,30 @@ def func_in(parser, text, needle): return "" -def func_inmulti(parser, text, value, separator=MULTI_VALUED_JOINER): - """Splits ``text`` by ``separator``, and returns true if the resulting list contains ``value``.""" - return func_in(parser, text.split(separator) if separator else [text], value) +def func_inmulti(parser, haystack, needle, separator=MULTI_VALUED_JOINER): + """Searches for ``needle`` in ``haystack``, supporting a list variable for ``haystack``. + If a string is used instead, then a ``separator`` can be used to split it. + In both cases, it returns true if the resulting list contains ``needle``.""" + + needle = needle.eval(parser) + if type(text)==ScriptExpression and len(text)==1 and type(text[0])==ScriptVariable: + text=text[0] + if type(text)==ScriptVariable: + if text.name.startswith(u"_"): + name = u"~" + text.name[1:] + else: + name = text.name + values=parser.context.getall(name) + + if needle in values: + return "1" + else: + return "" + + # I'm not sure if it is actually possible to continue in this code path, + # but just in case, it's better to have a fallback to correct behaviour + text=text.eval(parser) + return func_in(parser, text.split(separator) if separator else [text], needle) def func_rreplace(parser, text, old, new): @@ -819,7 +840,7 @@ register_script_function(func_lte, "lte") register_script_function(func_gt, "gt") register_script_function(func_gte, "gte") register_script_function(func_in, "in") -register_script_function(func_inmulti, "inmulti") +register_script_function(func_inmulti, "inmulti", eval_args=False) register_script_function(func_copy, "copy") register_script_function(func_copymerge, "copymerge") register_script_function(func_len, "len") From b7c324b4de2dab0b8facd402ab8aa12f44cbb3cd Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Mon, 13 Feb 2017 15:41:20 +0100 Subject: [PATCH 026/173] Fix PEP8 issues (mostly lines too large) Add a few empty lines and wrap some lines so they're not so large --- test/test_script.py | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/test/test_script.py b/test/test_script.py index e9846256f..c7102c581 100644 --- a/test/test_script.py +++ b/test/test_script.py @@ -6,15 +6,19 @@ from picard.script import ScriptParser, ScriptError, register_script_function from picard.metadata import Metadata from picard.ui.options.renaming import _DEFAULT_FILE_NAMING_FORMAT + class ScriptParserTest(unittest.TestCase): def setUp(self): config.setting = { 'enabled_plugins': '', } + self.parser = ScriptParser() + def func_noargstest(parser): return "" + register_script_function(func_noargstest, "noargstest") def test_cmd_noop(self): @@ -374,18 +378,29 @@ class ScriptParserTest(unittest.TestCase): def test_cmd_inmulti(self): context = Metadata() self.parser.eval("$set(foo,First; Second; Third)", context) - self.assertEqual(self.parser.eval("$in(%foo%,Second)", context), "1") - self.assertEqual(self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") - self.assertEqual(self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") - self.assertEqual(self.parser.eval("$inmulti(%foo%,Second)", context), "") - self.assertEqual(self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") - self.assertEqual(self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "1") + self.assertEqual( + self.parser.eval("$in(%foo%,Second)", context), "1") + self.assertEqual( + self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") + self.assertEqual( + self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") + self.assertEqual( + self.parser.eval("$inmulti(%foo%,Second)", context), "") + self.assertEqual( + self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") + self.assertEqual( + self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "1") self.parser.eval("$setmulti(foo,First; Second; Third)", context) - self.assertEqual(self.parser.eval("$in(%foo%,Second)", context), "1") - self.assertEqual(self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") - self.assertEqual(self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") - self.assertEqual(self.parser.eval("$inmulti(%foo%,Second)", context), "1") - self.assertEqual(self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") - self.assertEqual(self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "") - + self.assertEqual( + self.parser.eval("$in(%foo%,Second)", context), "1") + self.assertEqual( + self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") + self.assertEqual( + self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") + self.assertEqual( + self.parser.eval("$inmulti(%foo%,Second)", context), "1") + self.assertEqual( + self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") + self.assertEqual( + self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "") From 5daf2fecda9d06c96824ed322487fcf40f105768 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Mon, 13 Feb 2017 16:24:52 +0100 Subject: [PATCH 027/173] Fix PEP8 issues and rename text to haystack everywhere The text variable was renamed to haystack except in some lines. This commit fixes this and also fixes some coding style issues. --- picard/script.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/picard/script.py b/picard/script.py index 54ad48131..487d99b52 100644 --- a/picard/script.py +++ b/picard/script.py @@ -388,29 +388,32 @@ def func_in(parser, text, needle): def func_inmulti(parser, haystack, needle, separator=MULTI_VALUED_JOINER): - """Searches for ``needle`` in ``haystack``, supporting a list variable for ``haystack``. - If a string is used instead, then a ``separator`` can be used to split it. - In both cases, it returns true if the resulting list contains ``needle``.""" + """Searches for ``needle`` in ``haystack``, supporting a list variable for + ``haystack``. If a string is used instead, then a ``separator`` can be + used to split it. In both cases, it returns true if the resulting list + contains ``needle``.""" needle = needle.eval(parser) - if type(text)==ScriptExpression and len(text)==1 and type(text[0])==ScriptVariable: - text=text[0] - if type(text)==ScriptVariable: - if text.name.startswith(u"_"): - name = u"~" + text.name[1:] - else: - name = text.name - values=parser.context.getall(name) + if (isinstance(haystack, ScriptExpression) and + len(haystack) == 1 and + isinstance(haystack[0], ScriptVariable)): + haystack = haystack[0] - if needle in values: - return "1" + if isinstance(haystack, ScriptVariable): + if haystack.name.startswith(u"_"): + name = u"~" + haystack.name[1:] else: - return "" + name = haystack.name + values = parser.context.getall(name) + + return func_in(parser, values, needle) # I'm not sure if it is actually possible to continue in this code path, # but just in case, it's better to have a fallback to correct behaviour - text=text.eval(parser) - return func_in(parser, text.split(separator) if separator else [text], needle) + haystack = haystack.eval(parser) + return func_in(parser, + haystack.split(separator) if separator else [haystack], + needle) def func_rreplace(parser, text, old, new): From d7a37108166e16c6d7c94924ca0dcd6d0b38c05c Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Mon, 13 Feb 2017 20:37:39 +0100 Subject: [PATCH 028/173] Update po files from transifex --- po/attributes/nb.po | 26 +- po/attributes/pl.po | 2 +- po/attributes/pt_BR.po | 159 +- po/attributes/zh_CN.po | 4 +- po/countries/pl.po | 2 +- po/countries/pt_BR.po | 8 +- po/countries/sv.po | 2 +- po/de.po | 2 +- po/fr.po | 177 ++- po/lt.po | 3443 ++++++++++++++++++---------------------- po/nb.po | 8 +- po/pl.po | 11 +- po/pt_BR.po | 267 ++-- 13 files changed, 1906 insertions(+), 2205 deletions(-) diff --git a/po/attributes/nb.po b/po/attributes/nb.po index fc05993e9..0dfe5b4ef 100644 --- a/po/attributes/nb.po +++ b/po/attributes/nb.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-02-10 00:50+0000\n" +"PO-Revision-Date: 2017-02-10 12:38+0000\n" "Last-Translator: CatQuest, The Endeavouring Cat\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/musicbrainz/musicbrainz/language/nb/)\n" "MIME-Version: 1.0\n" @@ -54,12 +54,12 @@ msgstr "12\" Vinyl" #: DB:medium_format/name:49 msgctxt "medium_format" msgid "3.5\" Floppy Disk" -msgstr "" +msgstr "3.5\" Diskett" #: DB:medium_format/name:52 msgctxt "medium_format" msgid "7\" Flexi-disc" -msgstr "" +msgstr "7\" Flexidisk" #: DB:medium_format/name:56 msgctxt "medium_format" @@ -1148,7 +1148,7 @@ msgstr "Kantate" #: DB:release_packaging/name:4 msgctxt "release_packaging" msgid "Cardboard/Paper Sleeve" -msgstr "Kortbord/Papirarm" +msgstr "" #: DB:medium_format/name:9 msgctxt "medium_format" @@ -1444,7 +1444,7 @@ msgstr "Darbārī kānaḍa" #: DB:medium_format/name:43 msgctxt "medium_format" msgid "Data CD" -msgstr "" +msgstr "Data CD" #: DB:release_group_secondary_type/name:10 msgctxt "release_group_secondary_type" @@ -1994,7 +1994,7 @@ msgstr "Fireng-i Fer" #: DB:medium_format/name:51 msgctxt "medium_format" msgid "Flexi-disc" -msgstr "" +msgstr "Flexidisk" #: DB:medium_format/description:51 msgctxt "medium_format" @@ -2012,7 +2012,7 @@ msgstr "" #: DB:area_alias_type/name:2 msgctxt "alias_type" msgid "Formal name" -msgstr "Formelt navn" +msgstr "" #: DB:work_attribute_type_allowed_value/value:735 msgctxt "work_attribute_type_allowed_value" @@ -2467,17 +2467,17 @@ msgstr "Huzi" #: DB:medium_format/name:38 msgctxt "medium_format" msgid "Hybrid SACD" -msgstr "" +msgstr "Hybrid SACD" #: DB:medium_format/name:63 msgctxt "medium_format" msgid "Hybrid SACD (CD layer)" -msgstr "" +msgstr "Hybrid SACD (CD lag)" #: DB:medium_format/name:64 msgctxt "medium_format" msgid "Hybrid SACD (SACD layer)" -msgstr "" +msgstr "Hybrid SACD (SACD lag)" #: DB:work_attribute_type_allowed_value/value:418 msgctxt "work_attribute_type_allowed_value" @@ -3862,7 +3862,7 @@ msgstr "Annet" #: DB:place_type/name:3 msgctxt "place_type" msgid "Other" -msgstr "Andre" +msgstr "Annet" #: DB:release_group_primary_type/name:11 msgctxt "release_group_primary_type" @@ -4382,7 +4382,7 @@ msgstr "" #: DB:medium_format/name:62 msgctxt "medium_format" msgid "SD Card" -msgstr "" +msgstr "SDkort" #: DB:work_attribute_type/name:8 msgctxt "work_attribute_type" @@ -5170,7 +5170,7 @@ msgstr "VCD" #: DB:medium_format/name:59 msgctxt "medium_format" msgid "VHD" -msgstr "" +msgstr "Videokassett" #: DB:medium_format/name:21 msgctxt "medium_format" diff --git a/po/attributes/pl.po b/po/attributes/pl.po index 8cbbb2aea..72bbcba0a 100644 --- a/po/attributes/pl.po +++ b/po/attributes/pl.po @@ -19,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: DB:work_type/description:9 msgctxt "work_type" diff --git a/po/attributes/pt_BR.po b/po/attributes/pt_BR.po index 9c4c08408..26684510a 100644 --- a/po/attributes/pt_BR.po +++ b/po/attributes/pt_BR.po @@ -1,23 +1,24 @@ # Translators: # Translators: # Alex Luís Silva , 2015 +# Daniel Biasotto , 2017 # Eduardo Bastos , 2012 # Jefferson Gomes , 2016 # João Miguel Soares , 2016 # lampih , 2012 # Lucas de Jesus , 2016 # Lucas Gomes , 2012 -# Marco Tulio Costa , 2012 +# Marco Costa , 2012 # Marcus Vinícius Marques, 2014 -# Marco Tulio Costa , 2012 +# Marco Costa , 2012 # rafaelbrandao , 2012 # davitf , 2012 # Lucas Gomes , 2012 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-01-16 20:46+0000\n" -"Last-Translator: Laurent Monin \n" +"PO-Revision-Date: 2017-02-11 04:56+0000\n" +"Last-Translator: Marco Costa \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/musicbrainz/musicbrainz/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -31,19 +32,19 @@ msgid "" "\"Motet\" is a term that applies to different types of (usually " "unaccompanied) choral works. What exactly is a motet depends quite a bit on " "the period." -msgstr "\"Moteto\" é um termo que se aplica a diferentes tipos de (geralmente desacompanhadas) palavras de coral. O que é exatamente um moteto depende um pouco do período." +msgstr "\"Moteto\" é um termo que se aplica a diferentes tipos de obras de coral (geralmente não-acompanhadas). O que é exatamente um moteto depende um pouco do período." #: DB:work_type/description:5 msgctxt "work_type" msgid "" "\"Sonata\" is a general term used to describe small scale (very often solo " "or solo + keyboard) instrumental works, initially in baroque music." -msgstr "\"Sonata\" é geralmente um termo usado para descrever trabalhos instrumentais em pequena escala (frequentemente solo ou solo + teclados), inicialmente na musica barroca." +msgstr "\"Sonata\" é um termo geral usado para descrever trabalhos instrumentais em pequena escala (frequentemente solo ou solo + teclados), inicialmente na musica barroca." #: DB:medium_format/name:54 msgctxt "medium_format" msgid "10\" Shellac" -msgstr "" +msgstr "Goma-laca 10\"" #: DB:medium_format/name:30 msgctxt "medium_format" @@ -53,7 +54,7 @@ msgstr "Vinil de 10 polegadas" #: DB:medium_format/name:55 msgctxt "medium_format" msgid "12\" Shellac" -msgstr "" +msgstr "Goma-laca 12\"" #: DB:medium_format/name:31 msgctxt "medium_format" @@ -73,7 +74,7 @@ msgstr "Vinil flexível de 7 polegadas" #: DB:medium_format/name:56 msgctxt "medium_format" msgid "7\" Shellac" -msgstr "" +msgstr "Goma-laca 7\"" #: DB:medium_format/name:29 msgctxt "medium_format" @@ -95,17 +96,17 @@ msgctxt "medium_format" msgid "" "90 rpm, vertical-cut shellac discs, produced by the Pathé label from 1906 to" " 1932." -msgstr "" +msgstr "Discos de goma-laca verticalmente cortados, de 90 rpm, produzidos pela gravadora Pathé de 1906 à 1932." #: DB:work_attribute_type_allowed_value/value:794 msgctxt "work_attribute_type_allowed_value" msgid "A Dorian" -msgstr "" +msgstr "Lá Dórico" #: DB:work_attribute_type_allowed_value/value:806 msgctxt "work_attribute_type_allowed_value" msgid "A Mixolydian" -msgstr "" +msgstr "Lá Mixolídio" #: DB:work_type/description:2 msgctxt "work_type" @@ -146,7 +147,7 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:28 msgctxt "work_attribute_type_allowed_value" msgid "A major" -msgstr "Uma maioria" +msgstr "Lá maior" #: DB:work_type/description:8 msgctxt "work_type" @@ -167,7 +168,7 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:29 msgctxt "work_attribute_type_allowed_value" msgid "A minor" -msgstr "Uma minoria" +msgstr "Lá menor" #: DB:work_type/description:13 msgctxt "work_type" @@ -350,17 +351,17 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:26 msgctxt "work_attribute_type_allowed_value" msgid "A-flat major" -msgstr "" +msgstr "Lá bemol maior" #: DB:work_attribute_type_allowed_value/value:27 msgctxt "work_attribute_type_allowed_value" msgid "A-flat minor" -msgstr "" +msgstr "Lá bemol menor" #: DB:work_attribute_type_allowed_value/value:30 msgctxt "work_attribute_type_allowed_value" msgid "A-sharp minor" -msgstr "" +msgstr "Lá sustenido menor" #: DB:work_attribute_type/name:23 msgctxt "work_attribute_type" @@ -755,32 +756,32 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:795 msgctxt "work_attribute_type_allowed_value" msgid "B Dorian" -msgstr "" +msgstr "Si Dórico" #: DB:work_attribute_type_allowed_value/value:807 msgctxt "work_attribute_type_allowed_value" msgid "B Mixolydian" -msgstr "" +msgstr "Si Mixolídio" #: DB:work_attribute_type_allowed_value/value:33 msgctxt "work_attribute_type_allowed_value" msgid "B major" -msgstr "" +msgstr "Si maior" #: DB:work_attribute_type_allowed_value/value:34 msgctxt "work_attribute_type_allowed_value" msgid "B minor" -msgstr "" +msgstr "Si menor" #: DB:work_attribute_type_allowed_value/value:31 msgctxt "work_attribute_type_allowed_value" msgid "B-flat major" -msgstr "" +msgstr "Si bemol maior" #: DB:work_attribute_type_allowed_value/value:32 msgctxt "work_attribute_type_allowed_value" msgid "B-flat minor" -msgstr "" +msgstr "Si bemol menor" #: DB:work_attribute_type/name:7 msgctxt "work_attribute_type" @@ -1062,37 +1063,37 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:789 msgctxt "work_attribute_type_allowed_value" msgid "C Dorian" -msgstr "" +msgstr "Dó Dórico" #: DB:work_attribute_type_allowed_value/value:801 msgctxt "work_attribute_type_allowed_value" msgid "C Mixolydian" -msgstr "" +msgstr "Dó MIxolídio" #: DB:work_attribute_type_allowed_value/value:2 msgctxt "work_attribute_type_allowed_value" msgid "C major" -msgstr "" +msgstr "Dó maior" #: DB:work_attribute_type_allowed_value/value:3 msgctxt "work_attribute_type_allowed_value" msgid "C minor" -msgstr "" +msgstr "Dó menor" #: DB:work_attribute_type_allowed_value/value:1 msgctxt "work_attribute_type_allowed_value" msgid "C-flat major" -msgstr "" +msgstr "Dó bemol maior" #: DB:work_attribute_type_allowed_value/value:4 msgctxt "work_attribute_type_allowed_value" msgid "C-sharp major" -msgstr "" +msgstr "Dó sustenido maior" #: DB:work_attribute_type_allowed_value/value:5 msgctxt "work_attribute_type_allowed_value" msgid "C-sharp minor" -msgstr "" +msgstr "Dó sustenido menor" #: DB:work_attribute_type/name:19 msgctxt "work_attribute_type" @@ -1318,37 +1319,37 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:790 msgctxt "work_attribute_type_allowed_value" msgid "D Dorian" -msgstr "" +msgstr "Ré Dórico" #: DB:work_attribute_type_allowed_value/value:802 msgctxt "work_attribute_type_allowed_value" msgid "D Mixolydian" -msgstr "" +msgstr "Ré Mixolídio" #: DB:work_attribute_type_allowed_value/value:8 msgctxt "work_attribute_type_allowed_value" msgid "D major" -msgstr "" +msgstr "Ré maior" #: DB:work_attribute_type_allowed_value/value:9 msgctxt "work_attribute_type_allowed_value" msgid "D minor" -msgstr "" +msgstr "Ré menor" #: DB:work_attribute_type_allowed_value/value:6 msgctxt "work_attribute_type_allowed_value" msgid "D-flat major" -msgstr "" +msgstr "Ré bemol maior" #: DB:work_attribute_type_allowed_value/value:7 msgctxt "work_attribute_type_allowed_value" msgid "D-flat minor" -msgstr "" +msgstr "Ré bemol menor" #: DB:work_attribute_type_allowed_value/value:10 msgctxt "work_attribute_type_allowed_value" msgid "D-sharp minor" -msgstr "" +msgstr "Ré sustenido menor" #: DB:medium_format/name:11 msgctxt "medium_format" @@ -1553,7 +1554,7 @@ msgstr "Digipak" #: DB:medium_format/name:12 msgctxt "medium_format" msgid "Digital Media" -msgstr "Mídia Digitalk" +msgstr "Mídia Digital" #: DB:work_attribute_type_allowed_value/value:345 msgctxt "work_attribute_type_allowed_value" @@ -1633,17 +1634,17 @@ msgstr "DualDisc" #: DB:medium_format/name:67 msgctxt "medium_format" msgid "DualDisc (CD side)" -msgstr "" +msgstr "DualDisc (lado do CD)" #: DB:medium_format/name:65 msgctxt "medium_format" msgid "DualDisc (DVD-Audio side)" -msgstr "" +msgstr "DualDisc (lado do DVD de Áudio)" #: DB:medium_format/name:66 msgctxt "medium_format" msgid "DualDisc (DVD-Video side)" -msgstr "" +msgstr "DualDisc (lado do DVD de Vídeo)" #: DB:work_attribute_type_allowed_value/value:612 msgctxt "work_attribute_type_allowed_value" @@ -1733,37 +1734,37 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:791 msgctxt "work_attribute_type_allowed_value" msgid "E Dorian" -msgstr "" +msgstr "Mi Dórico" #: DB:work_attribute_type_allowed_value/value:803 msgctxt "work_attribute_type_allowed_value" msgid "E Mixolydian" -msgstr "" +msgstr "Mi Mixolídio" #: DB:work_attribute_type_allowed_value/value:13 msgctxt "work_attribute_type_allowed_value" msgid "E major" -msgstr "" +msgstr "Mi maior" #: DB:work_attribute_type_allowed_value/value:14 msgctxt "work_attribute_type_allowed_value" msgid "E minor" -msgstr "" +msgstr "Mi menor" #: DB:work_attribute_type_allowed_value/value:11 msgctxt "work_attribute_type_allowed_value" msgid "E-flat major" -msgstr "" +msgstr "Mi bemol maior" #: DB:work_attribute_type_allowed_value/value:12 msgctxt "work_attribute_type_allowed_value" msgid "E-flat minor" -msgstr "" +msgstr "Mi bemol menor" #: DB:work_attribute_type_allowed_value/value:15 msgctxt "work_attribute_type_allowed_value" msgid "E-sharp minor" -msgstr "" +msgstr "Mi sustenido menor" #: DB:release_group_primary_type/name:3 msgctxt "release_group_primary_type" @@ -1878,37 +1879,37 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:792 msgctxt "work_attribute_type_allowed_value" msgid "F Dorian" -msgstr "" +msgstr "Fá Dórico" #: DB:work_attribute_type_allowed_value/value:804 msgctxt "work_attribute_type_allowed_value" msgid "F Mixolydian" -msgstr "" +msgstr "Fá MIxolídio" #: DB:work_attribute_type_allowed_value/value:17 msgctxt "work_attribute_type_allowed_value" msgid "F major" -msgstr "" +msgstr "Fá maior" #: DB:work_attribute_type_allowed_value/value:18 msgctxt "work_attribute_type_allowed_value" msgid "F minor" -msgstr "" +msgstr "Fá menor" #: DB:work_attribute_type_allowed_value/value:16 msgctxt "work_attribute_type_allowed_value" msgid "F-flat major" -msgstr "" +msgstr "Fá bemol maior" #: DB:work_attribute_type_allowed_value/value:19 msgctxt "work_attribute_type_allowed_value" msgid "F-sharp major" -msgstr "" +msgstr "Fá sustenido maior" #: DB:work_attribute_type_allowed_value/value:20 msgctxt "work_attribute_type_allowed_value" msgid "F-sharp minor" -msgstr "" +msgstr "Fá sustenido menor" #: DB:work_attribute_type_allowed_value/value:731 msgctxt "work_attribute_type_allowed_value" @@ -2036,37 +2037,37 @@ msgstr "" #: DB:work_attribute_type_allowed_value/value:793 msgctxt "work_attribute_type_allowed_value" msgid "G Dorian" -msgstr "" +msgstr "Sol Dórico" #: DB:work_attribute_type_allowed_value/value:805 msgctxt "work_attribute_type_allowed_value" msgid "G Mixolydian" -msgstr "" +msgstr "Sol Mixolídio" #: DB:work_attribute_type_allowed_value/value:22 msgctxt "work_attribute_type_allowed_value" msgid "G major" -msgstr "" +msgstr "Sol maior" #: DB:work_attribute_type_allowed_value/value:23 msgctxt "work_attribute_type_allowed_value" msgid "G minor" -msgstr "" +msgstr "Sol menor" #: DB:work_attribute_type_allowed_value/value:21 msgctxt "work_attribute_type_allowed_value" msgid "G-flat major" -msgstr "" +msgstr "Sol bemol maior" #: DB:work_attribute_type_allowed_value/value:24 msgctxt "work_attribute_type_allowed_value" msgid "G-sharp major" -msgstr "" +msgstr "Sol sustenido maior" #: DB:work_attribute_type_allowed_value/value:25 msgctxt "work_attribute_type_allowed_value" msgid "G-sharp minor" -msgstr "" +msgstr "Sol sustenido menor" #: DB:work_attribute_type/name:9 msgctxt "work_attribute_type" @@ -2633,7 +2634,7 @@ msgstr "" #: DB:area_type/name:6 msgctxt "area_type" msgid "Island" -msgstr "" +msgstr "Ilha" #: DB:area_type/description:6 msgctxt "area_type" @@ -2641,7 +2642,7 @@ msgid "" "Island is used for islands and atolls which don't form subdivisions of their" " own, e.g. Skye. These are not considered when displaying the parent areas " "for a given area." -msgstr "" +msgstr "Ilha é usado para ilhas e atóis que não formam subdivisões de si mesmas, e.g. Ilhabela. Essas não são consideradas ao exibir as áreas pai para uma determinada área." #: DB:work_attribute_type/name:3 msgctxt "work_attribute_type" @@ -3026,7 +3027,7 @@ msgstr "" #: DB:editor_collection_type/name:10 msgctxt "collection_type" msgid "Label" -msgstr "Rótulo" +msgstr "Gravadora" #: DB:label_alias_type/name:1 msgctxt "alias_type" @@ -3251,7 +3252,7 @@ msgstr "" #: DB:cover_art_archive.art_type/name:4 msgctxt "cover_art_type" msgid "Medium" -msgstr "Médio" +msgstr "Mídia" #: DB:work_attribute_type_allowed_value/value:176 msgctxt "work_attribute_type_allowed_value" @@ -3404,7 +3405,7 @@ msgid "" "Municipality is used for small administrative divisions which, for urban " "municipalities, often contain a single city and a few surrounding villages. " "Rural municipalities typically group several villages together." -msgstr "" +msgstr "Municipalidade é usado para pequenas divisões administrativas que, para municipalidades urbanas, frequentemente contêm uma única cidade e algumas vilas ao redor. Municipalidades rurais tipicamente agrupam várias vilas." #: DB:work_attribute_type_allowed_value/value:645 msgctxt "work_attribute_type_allowed_value" @@ -3419,7 +3420,7 @@ msgstr "" #: DB:work_type/name:29 msgctxt "work_type" msgid "Musical" -msgstr "" +msgstr "Musical" #: DB:work_type/description:29 msgctxt "work_type" @@ -3871,7 +3872,7 @@ msgstr "Outro" #: DB:place_type/name:3 msgctxt "place_type" msgid "Other" -msgstr "" +msgstr "Outro" #: DB:release_group_primary_type/name:11 msgctxt "release_group_primary_type" @@ -3886,7 +3887,7 @@ msgstr "Outro" #: DB:instrument_type/name:5 msgctxt "instrument_type" msgid "Other instrument" -msgstr "" +msgstr "Outro instrumento" #: DB:work_type/name:12 msgctxt "work_type" @@ -3986,12 +3987,12 @@ msgstr "" #: DB:editor_collection_type/name:11 msgctxt "collection_type" msgid "Place" -msgstr "" +msgstr "Local" #: DB:place_alias_type/name:1 msgctxt "alias_type" msgid "Place name" -msgstr "" +msgstr "Nome do local" #: DB:work_type/name:28 msgctxt "work_type" @@ -4226,12 +4227,12 @@ msgstr "" #: DB:editor_collection_type/name:1 msgctxt "collection_type" msgid "Release" -msgstr "Lançamento" +msgstr "Álbum" #: DB:series_type/name:2 msgctxt "series_type" msgid "Release" -msgstr "Lançamento" +msgstr "Álbum" #: DB:editor_collection_type/name:13 msgctxt "collection_type" @@ -4251,7 +4252,7 @@ msgstr "" #: DB:release_alias_type/name:1 msgctxt "alias_type" msgid "Release name" -msgstr "" +msgstr "Nome do álbum" #: DB:place_type/name:6 msgctxt "place_type" @@ -4596,14 +4597,14 @@ msgstr "" #: DB:medium_format/name:53 msgctxt "medium_format" msgid "Shellac" -msgstr "" +msgstr "Goma-laca" #: DB:medium_format/description:53 msgctxt "medium_format" msgid "" "Shellac records were the most predominant type of gramophone record during " "the first half of the 20th century." -msgstr "" +msgstr "Discos de goma-laca foram o tipo mais predominante de discos de gramofone durante a primeira metade do século XX." #: DB:work_attribute_type_allowed_value/value:236 msgctxt "work_attribute_type_allowed_value" @@ -4720,7 +4721,7 @@ msgstr "" #: DB:area_type/name:2 msgctxt "area_type" msgid "Subdivision" -msgstr "" +msgstr "Subdivisão" #: DB:area_type/description:2 msgctxt "area_type" @@ -4728,7 +4729,7 @@ msgid "" "Subdivision is used for the main administrative divisions of a country, e.g." " California, Ontario, Okinawa. These are considered when displaying the " "parent areas for a given area." -msgstr "" +msgstr "Subdivisão é usado para a principal divisão administrativa de um país, e.g. São Paulo, Texas, Okinawa. Essas são consideradas ao exibir as áreas pai para uma determinada área." #: DB:work_attribute_type_allowed_value/value:244 msgctxt "work_attribute_type_allowed_value" diff --git a/po/attributes/zh_CN.po b/po/attributes/zh_CN.po index 052c56f4f..c54f72992 100644 --- a/po/attributes/zh_CN.po +++ b/po/attributes/zh_CN.po @@ -9,9 +9,9 @@ # RedHotHeat , 2012 # LI Daobing , 2007, 2008, 2009, 2010, 2011 # LI Daobing , 2007, 2008, 2009, 2010 -# Lin Xueyuan <767763591@qq.com>, 2016 +# LXY <767763591@qq.com>, 2016 # 毛瑞盈 , 2014 -# niklasb , 2016 +# Niklas Berglund , 2016 # Tobias Toedter , 2007 # - Wang Jian , 2000 # YunQiang Su , 2011 diff --git a/po/countries/pl.po b/po/countries/pl.po index 3aedaafe4..5ba81c172 100644 --- a/po/countries/pl.po +++ b/po/countries/pl.po @@ -21,7 +21,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #. iso.code:AF #: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:1 diff --git a/po/countries/pt_BR.po b/po/countries/pt_BR.po index c3dfcb50c..fb62a83b9 100644 --- a/po/countries/pt_BR.po +++ b/po/countries/pt_BR.po @@ -4,17 +4,17 @@ # Eduardo Bastos , 2012 # lampih , 2012 # Lucas Gomes , 2012 -# Marco Tulio Costa , 2012 +# Marco Costa , 2012 # Marcus Vinícius Marques, 2014 -# Marco Tulio Costa , 2012 +# Marco Costa , 2012 # rafaelbrandao , 2012 # davitf , 2012 # Lucas Gomes , 2012 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2015-11-17 13:14+0000\n" -"Last-Translator: André Aparecido Caniato \n" +"PO-Revision-Date: 2017-02-11 04:56+0000\n" +"Last-Translator: Marco Costa \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/musicbrainz/musicbrainz/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/po/countries/sv.po b/po/countries/sv.po index afc2389cd..b1c3e883c 100644 --- a/po/countries/sv.po +++ b/po/countries/sv.po @@ -1,7 +1,7 @@ # Translators: # Translators: # Kebabpizza , 2017 -# niklasb , 2016 +# Niklas Berglund , 2016 # Robin Björnsvik , 2013 # Staffan Vilcans, 2014 msgid "" diff --git a/po/de.po b/po/de.po index 3632e62b7..3c73772cd 100644 --- a/po/de.po +++ b/po/de.po @@ -10,7 +10,7 @@ # Ettore Atalan , 2014 # Felix Kugler , 2015 # Frank Matthiae , 2017 -# ix5 5 , 2017 +# ix5, 2017 # nikki, 2013 # Philipp Wolfer , 2014,2017 # S.Brandt , 2014-2015,2017 diff --git a/po/fr.po b/po/fr.po index a2c6abcdd..165607369 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,6 +8,7 @@ # Dibou , 2013 # FIRST AUTHOR , 2010 # French language coordinator , 2013,2015 +# French language coordinator , 2013,2015 # ybsar , 2013 # Jahrynx , 2006 # Laurent Monin , 2013-2014,2017 @@ -26,8 +27,8 @@ msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2017-01-23 14:00+0100\n" -"PO-Revision-Date: 2017-01-19 11:49+0000\n" -"Last-Translator: Laurent Monin \n" +"PO-Revision-Date: 2017-02-13 18:53+0000\n" +"Last-Translator: yvanz\n" "Language-Team: French (http://www.transifex.com/musicbrainz/musicbrainz/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -63,7 +64,7 @@ msgstr "Envoi des AcoustID..." #: picard/acoustidmanager.py:103 #, python-format msgid "AcoustID submission failed with error '%(error)s': %(message)s" -msgstr "L’envoi d’AcoustID a échoué avec l’erreur « %(error)s » : %(message)s" +msgstr "L’envoi d’AcoustID a échoué avec l’erreur « %(error)s » : %(message)s" #: picard/acoustidmanager.py:111 msgid "AcoustIDs successfully submitted." @@ -81,7 +82,7 @@ msgstr "[impossible de charger l’album %s]" #: picard/album.py:295 #, python-format msgid "Album %(id)s loaded: %(artist)s - %(album)s" -msgstr "Album %(id)s chargé : %(artist)s - %(album)s" +msgstr "Album %(id)s chargé : %(artist)s - %(album)s" #: picard/album.py:338 #, python-format @@ -131,7 +132,7 @@ msgstr[1] "%(count)i parutions ont été retirées de la collection « %(name)s #: picard/collection.py:100 #, python-format msgid "Error loading collections: %(error)s" -msgstr "Erreur lors du chargement des collections : %(error)s" +msgstr "Erreur lors du chargement des collections : %(error)s" #: picard/config_upgrade.py:58 picard/config_upgrade.py:71 msgid "Various Artists file naming scheme removal" @@ -187,7 +188,7 @@ msgstr "Recherche des métadonnées pour le fichier « %(filename)s »..." #: picard/plugin.py:434 #, python-format msgid "Error loading plugins list: %(error)s" -msgstr "Erreur lors du chargement de la liste des greffons : %(error)s" +msgstr "Erreur lors du chargement de la liste des greffons : %(error)s" #: picard/releasegroup.py:53 picard/ui/searchdialog.py:515 msgid "Tracks" @@ -232,7 +233,7 @@ msgstr[1] "Ajout de %(count)d fichiers de « %(directory)s »..." #: picard/tagger.py:597 #, python-format msgid "Removing album %(id)s: %(artist)s - %(album)s" -msgstr "Suppression de l’album %(id)s : %(artist)s - %(album)s" +msgstr "Suppression de l’album %(id)s : %(artist)s - %(album)s" #: picard/tagger.py:613 msgid "CD Lookup Error" @@ -244,7 +245,7 @@ msgid "" "Error while reading CD:\n" "\n" "%s" -msgstr "Erreur pendant la lecture du CD :\n\n%s" +msgstr "Erreur pendant la lecture du CD :\n\n%s" #: picard/const/languages.py:31 msgid "Danish" @@ -416,7 +417,7 @@ msgstr "Type" #: picard/ui/infodialog.py:47 msgid "New Cover" -msgstr "Nouvelle Illustration" +msgstr "Nouvelle illustration" #: picard/ui/infodialog.py:52 picard/ui/searchdialog.py:524 msgid "Cover" @@ -433,35 +434,35 @@ msgid "" "Double-click to open in external viewer\n" "Temporary file: %s\n" "Source: %s" -msgstr "Double-cliquer pour ouvrir dans le visualiseur externe\nFichier temporaire : %s\nSource : %s" +msgstr "Double-cliquer pour ouvrir dans le visualiseur externe\nFichier temporaire : %s\nSource : %s" #: picard/ui/infodialog.py:242 msgid "Filename:" -msgstr "Nom du fichier :" +msgstr "Nom du fichier :" #: picard/ui/infodialog.py:244 msgid "Format:" -msgstr "Format :" +msgstr "Format :" #: picard/ui/infodialog.py:248 msgid "Size:" -msgstr "Taille :" +msgstr "Taille :" #: picard/ui/infodialog.py:252 msgid "Length:" -msgstr "Durée :" +msgstr "Durée :" #: picard/ui/infodialog.py:254 msgid "Bitrate:" -msgstr "Débit binaire :" +msgstr "Débit binaire :" #: picard/ui/infodialog.py:256 msgid "Sample rate:" -msgstr "Taux d’échantillonage :" +msgstr "Taux d’échantillonage :" #: picard/ui/infodialog.py:258 msgid "Bits per sample:" -msgstr "Bits par échantillon :" +msgstr "Bits par échantillon :" #: picard/ui/infodialog.py:262 msgid "Mono" @@ -473,7 +474,7 @@ msgstr "Stéréo" #: picard/ui/infodialog.py:267 msgid "Channels:" -msgstr "Canaux :" +msgstr "Canaux :" #: picard/ui/infodialog.py:278 msgid "Album Info" @@ -494,15 +495,15 @@ msgstr "Infos de grappe" #: picard/ui/infodialog.py:313 msgid "Album:" -msgstr "Album : " +msgstr "Album : " #: picard/ui/infodialog.py:315 msgid "Artist:" -msgstr "Artiste : " +msgstr "Artiste : " #: picard/ui/infodialog.py:325 msgid "Tracklist:" -msgstr "Liste de pistes :" +msgstr "Liste de pistes :" #: picard/ui/infostatus.py:51 picard/ui/options/plugins.py:308 msgid "Files" @@ -575,7 +576,7 @@ msgstr "Autres versi&ons" #: picard/ui/itemviews.py:318 msgid "Loading..." -msgstr "Chargement…" +msgstr "Chargement..." #: picard/ui/itemviews.py:383 msgid "Collections" @@ -845,7 +846,7 @@ msgstr "&Analyser" msgid "" "Use AcoustID audio fingerprint to identify the files by the actual music, " "even if they have no metadata" -msgstr "Utiliser l'empreinte audioacoustique AcoustID pour identifier les fichiers par la musique qu'ils contiennent, même s'il ne possède pas de métadonnées" +msgstr "Utiliser l’empreinte audioacoustique AcoustID pour identifier les fichiers par la musique qu’ils contiennent, même s’ils ne possèdent pas de métadonnées" #: picard/ui/mainwindow.py:421 msgid "Ctrl+Y" @@ -857,7 +858,7 @@ msgstr "Regro&uper" #: picard/ui/mainwindow.py:425 msgid "Cluster files into album clusters" -msgstr "Regrouper les fichiers dans des grappes d'albums" +msgstr "Regrouper les fichiers dans des grappes d’albums" #: picard/ui/mainwindow.py:428 msgid "Ctrl+U" @@ -979,7 +980,7 @@ msgstr "Ajouter plusieurs répertoires à partir de « %(directory)s »..." #: picard/ui/mainwindow.py:735 #, python-format msgid "Adding directory: '%(directory)s' ..." -msgstr "Ajout du répertoire : « %(directory)s »..." +msgstr "Ajout du répertoire : « %(directory)s »..." #: picard/ui/mainwindow.py:801 msgid "Configuration Required" @@ -994,7 +995,7 @@ msgstr "La prise d’empreinte audio-acoustique n’a pas été configurée. Vou #: picard/ui/mainwindow.py:902 #, python-format msgid "%(filename)s (error: %(error)s)" -msgstr "%(filename)s (erreur : %(error)s)" +msgstr "%(filename)s (erreur : %(error)s)" #: picard/ui/mainwindow.py:908 #, python-format @@ -1004,7 +1005,7 @@ msgstr "%(filename)s" #: picard/ui/mainwindow.py:918 #, python-format msgid "%(filename)s (%(similarity)d%%) (error: %(error)s)" -msgstr "%(filename)s (%(similarity)d%%) (erreur : %(error)s)" +msgstr "%(filename)s (%(similarity)d%%) (erreur : %(error)s)" #: picard/ui/mainwindow.py:925 #, python-format @@ -1081,11 +1082,11 @@ msgstr "Modifier..." #: picard/ui/metadatabox.py:282 msgid "Add to 'Preserve Tags' List" -msgstr "Ajouter à la liste « Balises Préservées »" +msgstr "Ajouter à la liste « Balises préservées »" #: picard/ui/metadatabox.py:286 msgid "Remove from 'Preserve Tags' List" -msgstr "Retirer de la liste « Balises Préservées »" +msgstr "Retirer de la liste « Balises préservées »" #: picard/ui/metadatabox.py:319 msgid "Use Original Value" @@ -1108,13 +1109,13 @@ msgstr "Le %s serveur mandataire requiert une connexion. Veuillez entrer vos nom #: picard/ui/searchdialog.py:109 picard/ui/ui_options_interface.py:126 msgid "Use advanced query syntax" -msgstr "Utilisez la syntaxe évoluée de requête" +msgstr "Utiliser la syntaxe évoluée de requête" #: picard/ui/searchdialog.py:114 msgid "" " (Syntax " "Help)" -msgstr " (Aide sur la syntaxe)" +msgstr " (Aide de la syntaxe)" #: picard/ui/searchdialog.py:228 msgid "Loading..." @@ -1130,7 +1131,7 @@ msgid "" "Following error occurred while fetching " "results:

Network request error for %s:
%s (QT code %d, " "HTTP code %s)
" -msgstr "L'erreur suivante s'est produite pendant la récupération des résultats :

Erreur de requête réseau pour %s :
%s (code QT %d, code HTTP %s)
" +msgstr "L’erreur suivante s’est produite pendant la récupération des résultats :

Erreur de requête réseau pour %s :
%s (code QT %d, code HTTP %s)
" #: picard/ui/searchdialog.py:293 msgid "" @@ -1149,7 +1150,7 @@ msgstr "Résultats de recherche de pistes" #: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 #: picard/ui/options/plugins.py:303 msgid "Name" -msgstr "Nom d’utilisateur" +msgstr "Nom" #: picard/ui/searchdialog.py:327 msgid "Release" @@ -1161,7 +1162,7 @@ msgstr "Enregistrement isolé" #: picard/ui/searchdialog.py:510 msgid "Album Search Results" -msgstr "Résultats de recherche d'albums" +msgstr "Résultats de recherche d’albums" #: picard/ui/searchdialog.py:521 picard/util/tags.py:85 msgid "Language" @@ -1177,7 +1178,7 @@ msgstr "Montrer dans le navigateur" #: picard/ui/searchdialog.py:738 msgid "Artist Search Dialog" -msgstr "Dialogue de recherche d'artistes" +msgstr "Dialogue de recherche d’artistes" #: picard/ui/searchdialog.py:742 msgid "Gender" @@ -1214,7 +1215,7 @@ msgstr "Consultation du CD" #: picard/ui/ui_cdlookup.py:54 msgid "The following releases on MusicBrainz match the CD:" -msgstr "Les parutions suivantes de MusicBrainz correspondent à ce CD :" +msgstr "Les parutions suivantes de MusicBrainz correspondent à ce CD :" #: picard/ui/ui_cdlookup.py:55 msgid "OK" @@ -1263,7 +1264,7 @@ msgstr "Options avancées" #: picard/ui/ui_options_advanced.py:76 msgid "Ignore file paths matching the following regular expression:" -msgstr "Ignorer les chemins de fichier correspondants à l’expression régulière :" +msgstr "Ignorer les chemins de fichier correspondants à l’expression régulière :" #: picard/ui/ui_options_advanced.py:77 msgid "Ignore hidden files" @@ -1276,7 +1277,7 @@ msgstr "Ajouter récursivement les fichiers et dossiers de ce répertoire" #: picard/ui/ui_options_advanced.py:79 msgid "" "Ignore the following tracks when determining whether a release is complete" -msgstr "Ignorer les pistes suivantes lors de la détermination de l'état complet d'une parution" +msgstr "Ignorer les pistes suivantes pour évaluer si une parution est complète" #: picard/ui/ui_options_advanced.py:80 msgid "Video tracks" @@ -1296,11 +1297,11 @@ msgstr "Pistes de silence" #: picard/ui/ui_options_cdlookup.py:43 msgid "CD-ROM device to use for lookups:" -msgstr "Lecteur de CD-ROM à utiliser pour les consultations :" +msgstr "Lecteur de CD-ROM à utiliser pour les consultations :" #: picard/ui/ui_options_cdlookup_select.py:50 msgid "Default CD-ROM drive to use for lookups:" -msgstr "Lecteur de CD-ROM par défaut à utiliser pour les consultations :" +msgstr "Lecteur de CD-ROM par défaut à utiliser pour les consultations :" #: picard/ui/ui_options_cover.py:79 msgid "Location" @@ -1320,7 +1321,7 @@ msgstr "Enregistrer les images de couverture dans des fichiers séparés" #: picard/ui/ui_options_cover.py:83 msgid "Use the following file name for images:" -msgstr "Utiliser le nom de fichier suivant pour les images :" +msgstr "Utiliser le nom de fichier suivant pour les images :" #: picard/ui/ui_options_cover.py:84 msgid "Overwrite the file if it already exists" @@ -1328,7 +1329,7 @@ msgstr "Écraser le fichier s’il existe déjà" #: picard/ui/ui_options_cover.py:85 msgid "Cover Art Providers" -msgstr "Fournisseurs d'illustrations" +msgstr "Fournisseurs d’illustrations" #: picard/ui/ui_options_fingerprinting.py:86 msgid "Audio Fingerprinting" @@ -1352,7 +1353,7 @@ msgstr "Ignorer les empreintes AcoustID existantes" #: picard/ui/ui_options_fingerprinting.py:91 msgid "Fingerprint calculator:" -msgstr "Calculateur d’empreinte :" +msgstr "Calculateur d’empreinte :" #: picard/ui/ui_options_fingerprinting.py:92 #: picard/ui/ui_options_interface.py:129 picard/ui/ui_options_renaming.py:165 @@ -1365,7 +1366,7 @@ msgstr "Téléchargement..." #: picard/ui/ui_options_fingerprinting.py:94 msgid "API key:" -msgstr "Clef d’API :" +msgstr "Clef d’API :" #: picard/ui/ui_options_fingerprinting.py:95 msgid "Get API key..." @@ -1377,7 +1378,7 @@ msgstr "Balises de folksonomie" #: picard/ui/ui_options_folksonomy.py:116 msgid "Ignore tags:" -msgstr "Ignorer les balises :" +msgstr "Ignorer les balises :" #: picard/ui/ui_options_folksonomy.py:117 msgid "Only use my tags" @@ -1387,11 +1388,11 @@ msgstr "Utiliser uniquement mes balises" msgid "" "Fall back on album's artists tags if no tags are found for the release or " "release group" -msgstr "Utiliser les balises des artistes de l'album si aucune balise n'est trouvée pour la parution ou le groupe de parutions" +msgstr "Utiliser les balises des artistes de l’album si aucune balise n’est trouvée pour la parution ou le groupe de parutions" #: picard/ui/ui_options_folksonomy.py:119 msgid "Minimal tag usage:" -msgstr "Usage minimal de balise :" +msgstr "Usage minimal de balise :" #: picard/ui/ui_options_folksonomy.py:120 picard/ui/ui_options_matching.py:75 #: picard/ui/ui_options_matching.py:76 picard/ui/ui_options_matching.py:77 @@ -1400,11 +1401,11 @@ msgstr " %" #: picard/ui/ui_options_folksonomy.py:121 msgid "Maximum number of tags:" -msgstr "Nombre maximum de balises :" +msgstr "Nombre maximum de balises :" #: picard/ui/ui_options_folksonomy.py:122 msgid "Join multiple tags with:" -msgstr "Joindre plusieurs balises avec :" +msgstr "Joindre plusieurs balises avec :" #: picard/ui/ui_options_folksonomy.py:123 msgid " / " @@ -1420,11 +1421,11 @@ msgstr "Serveur MusicBrainz" #: picard/ui/ui_options_general.py:93 picard/ui/ui_options_network.py:110 msgid "Port:" -msgstr "Port :" +msgstr "Port :" #: picard/ui/ui_options_general.py:94 picard/ui/ui_options_network.py:111 msgid "Server address:" -msgstr "Adresse du serveur :" +msgstr "Adresse du serveur :" #: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 msgid "MusicBrainz Account" @@ -1476,15 +1477,15 @@ msgstr "Commencer la navigation dans le répertoire suivant" #: picard/ui/ui_options_interface.py:130 msgid "User interface language:" -msgstr "Langue de l’interface utilisateur :" +msgstr "Langue de l’interface utilisateur :" #: picard/ui/ui_options_interface.py:131 msgid "Customize Action Toolbar" -msgstr "Personnaliser les actions de la barre d'outils" +msgstr "Personnaliser les actions de la barre d’outils" #: picard/ui/ui_options_interface.py:132 msgid "Add a new button to Toolbar" -msgstr "Ajouter un nouveau bouton à la barre d'outils" +msgstr "Ajouter un nouveau bouton à la barre d’outils" #: picard/ui/ui_options_interface.py:133 msgid "Add Action" @@ -1500,7 +1501,7 @@ msgstr "Ajouter un séparateur" #: picard/ui/ui_options_interface.py:136 msgid "Move selected item up" -msgstr "Monter l'élément sélectionné" +msgstr "Monter l’élément sélectionné" #: picard/ui/ui_options_interface.py:137 picard/ui/ui_options_interface.py:139 msgid "..." @@ -1508,11 +1509,11 @@ msgstr "..." #: picard/ui/ui_options_interface.py:138 msgid "Move selected item down" -msgstr "Descendre l'élément sélectionné" +msgstr "Descendre l’élément sélectionné" #: picard/ui/ui_options_interface.py:140 msgid "Remove button from toolbar" -msgstr "Retirer le bouton de la barre d'outils" +msgstr "Retirer le bouton de la barre d’outils" #: picard/ui/ui_options_matching.py:73 msgid "Thresholds" @@ -1520,15 +1521,15 @@ msgstr "Seuils" #: picard/ui/ui_options_matching.py:74 msgid "Minimal similarity for matching files to tracks:" -msgstr "Ressemblance minimale pour faire concorder les fichiers aux pistes :" +msgstr "Ressemblance minimale pour faire concorder les fichiers aux pistes :" #: picard/ui/ui_options_matching.py:78 msgid "Minimal similarity for file lookups:" -msgstr "Ressemblance minimale pour chercher des fichiers :" +msgstr "Ressemblance minimale pour chercher des fichiers :" #: picard/ui/ui_options_matching.py:79 msgid "Minimal similarity for cluster lookups:" -msgstr "Ressemblance minimale pour rechercher les grappes :" +msgstr "Ressemblance minimale pour rechercher les grappes :" #: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" @@ -1536,7 +1537,7 @@ msgstr "Métadonnées" #: picard/ui/ui_options_metadata.py:102 msgid "Translate artist names to this locale where possible:" -msgstr "Traduire les noms d’artiste vers cette locale si possible :" +msgstr "Traduire les noms d’artiste vers cette locale si possible :" #: picard/ui/ui_options_metadata.py:103 msgid "Use standardized artist names" @@ -1564,11 +1565,11 @@ msgstr "Champs personnalisés" #: picard/ui/ui_options_metadata.py:109 msgid "Various artists:" -msgstr "Artistes divers :" +msgstr "Artistes divers :" #: picard/ui/ui_options_metadata.py:110 msgid "Non-album tracks:" -msgstr "Pistes hors album :" +msgstr "Pistes hors album :" #: picard/ui/ui_options_metadata.py:111 picard/ui/ui_options_metadata.py:112 #: picard/ui/ui_options_renaming.py:177 @@ -1582,11 +1583,11 @@ msgstr "Serveur mandataire Web" #: picard/ui/ui_options_network.py:108 picard/ui/ui_passworddialog.py:66 msgid "Password:" -msgstr "Mot de passe :" +msgstr "Mot de passe :" #: picard/ui/ui_options_network.py:109 picard/ui/ui_passworddialog.py:65 msgid "Username:" -msgstr "Nom d’utilisateur :" +msgstr "Nom d’utilisateur :" #: picard/ui/ui_options_network.py:112 msgid "Browser Integration" @@ -1594,7 +1595,7 @@ msgstr "Intégration au navigateur" #: picard/ui/ui_options_network.py:113 msgid "Default listening port:" -msgstr "Port d’écoute par défaut :" +msgstr "Port d’écoute par défaut :" #: picard/ui/ui_options_network.py:114 msgid "Listen only on localhost" @@ -1638,7 +1639,7 @@ msgstr "Picard sauve les évaluations ainsi qu’une adresse de courriel identif #: picard/ui/ui_options_ratings.py:51 msgid "E-mail:" -msgstr "Courriel :" +msgstr "Courriel :" #: picard/ui/ui_options_ratings.py:52 msgid "Submit ratings to MusicBrainz" @@ -1670,11 +1671,11 @@ msgstr "Déplacer les fichiers à l’enregistrement" #: picard/ui/ui_options_renaming.py:164 msgid "Destination directory:" -msgstr "Dossier de destination :" +msgstr "Dossier de destination :" #: picard/ui/ui_options_renaming.py:166 msgid "Move additional files (case insensitive):" -msgstr "Déplacer les fichiers supplémentaires (ignore la casse):" +msgstr "Déplacer les fichiers supplémentaires (en ignorant la casse):" #: picard/ui/ui_options_renaming.py:167 msgid "Delete empty directories" @@ -1739,7 +1740,7 @@ msgstr "Supprimer les balises APEv2 des fichiers MP3" #: picard/ui/ui_options_tags.py:158 msgid "" "Preserve these tags from being cleared or overwritten with MusicBrainz data:" -msgstr "Ne pas effacer ou écraser les balises suivantes par les données de MusicBrainz :" +msgstr "Ne pas effacer ou écraser les balises suivantes par les données de MusicBrainz :" #: picard/ui/ui_options_tags.py:159 msgid "Tags are separated by commas, and are case-sensitive." @@ -1806,7 +1807,7 @@ msgstr "Sélectionner les types..." #: picard/ui/ui_provider_options_caa.py:88 msgid "Only use images of the following size:" -msgstr "Utiliser seulement les images de la taille suivante :" +msgstr "Utiliser seulement les images de la taille suivante :" #: picard/ui/ui_provider_options_caa.py:89 msgid "250 px" @@ -1822,7 +1823,7 @@ msgstr "Pleine taille" #: picard/ui/ui_provider_options_caa.py:92 msgid "Save only one front image as separate file" -msgstr "Enregistrer seulement une image de type devant comme fichier séparé" +msgstr "Enregistrer seulement une image de type Devant comme fichier séparé" #: picard/ui/ui_provider_options_caa.py:93 msgid "Download only approved images" @@ -1832,18 +1833,18 @@ msgstr "Ne télécharger que des images approuvées" msgid "" "Use the first image type as the filename. This will not change the filename " "of front images." -msgstr "Utiliser le premier type de l’image comme nom de fichier. Cela ne changera pas le nom de fichier des images de face avant." +msgstr "Utiliser le premier type de l’image comme nom de fichier. Cela ne changera pas le nom de fichier des images de type Devant." #: picard/ui/ui_provider_options_local.py:64 msgid "Local cover art files match the following regular expression:" -msgstr "Les fichiers locaux d'illustration correspondent à l’expression régulière suivante :" +msgstr "Les fichiers locaux d’illustration correspondent à l’expression régulière suivante :" #: picard/ui/ui_provider_options_local.py:66 msgid "" "First group in the regular expression, if any, will be used as type, ie. " "cover-back-spine.jpg will be set as types Back + Spine. If no type is found," " it will default to Front type." -msgstr "Le premier groupe dans l'expression régulière, le cas échéant, sera utilisé comme type, par exemple cover-back-spine.jpg aura les types Arrière (Back) + Tranche (Spine). Si aucun type n'est trouvé, le type Devant sera utilisé." +msgstr "Le premier groupe dans l’expression régulière, le cas échéant, sera utilisé comme type, par exemple cover-back-spine.jpg aura les types Arrière (Back) + Tranche (Spine). Si aucun type n’est trouvé, le type Devant sera utilisé." #: picard/ui/ui_tagsfromfilenames.py:50 msgid "Convert File Names to Tags" @@ -1901,7 +1902,7 @@ msgid "" "

Credits
\n" "Copyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin and others%(translator-credits)s

\n" "

Official website
%(picard-doc-url)s

\n" -msgstr "

MusicBrainz Picard
\nVersion %(version)s

\n

\n%(third_parties_versions)s\n

\n

Formats pris en charge
%(formats)s

\n

Veuillez faire un don
\nMerci d'utiliser Picard. Picard s'appuie sur la base de données de MusicBrainz qui est gérée par la fondation MetaBrainz avec l'aide de milliers de volontaires. Si vous aimez cette application, nous vous encourageons à faire un don à la Fondation MetaBrainz afin de maintenir le service.

\n

Faire un don maintenant !

\n

Credits
\nTous droits réservés © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin et d'autres%(translator-credits)s

\n

Site officiel
%(picard-doc-url)s

\n" +msgstr "

MusicBrainz Picard
\nVersion %(version)s

\n

\n%(third_parties_versions)s\n

\n

Formats pris en charge
%(formats)s

\n

Veuillez faire un don
\nMerci d’utiliser Picard. Picard s’appuie sur la base de données de MusicBrainz qui est gérée par la fondation MetaBrainz avec l’aide de milliers de volontaires. Si vous aimez cette application, nous vous encourageons à faire un don à la Fondation MetaBrainz afin de maintenir le service.

\n

Faire un don maintenant !

\n

Credits
\nTous droits réservés © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin et d’autres%(translator-credits)s

\n

Site officiel
%(picard-doc-url)s

\n" #: picard/ui/options/advanced.py:30 msgid "Advanced" @@ -1913,7 +1914,7 @@ msgstr "Illustrations" #: picard/ui/options/dialog.py:82 msgid "&Restore all Defaults" -msgstr "Tout &Restaurer par défaut" +msgstr "Tout &restaurer par défaut" #: picard/ui/options/dialog.py:83 msgid "Reset all of Picard's settings" @@ -1933,7 +1934,7 @@ msgstr "Vous êtes sur le point de réinitialiser vos options pour cette page." #: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." -msgstr "Attention ! Cela réinitialisera tout votre configuration." +msgstr "Attention ! Cela réinitialisera tout votre configuration." #: picard/ui/options/dialog.py:183 msgid "Confirm Reset" @@ -1941,7 +1942,7 @@ msgstr "Confirmation de la réinitialisation" #: picard/ui/options/dialog.py:184 msgid "Are you sure?" -msgstr "Êtes-vous sûr ?" +msgstr "Êtes-vous sûr ?" #: picard/ui/options/fingerprinting.py:32 msgid "Fingerprinting" @@ -1963,7 +1964,7 @@ msgstr "Connecté en tant que %s." #: picard/ui/options/general.py:88 msgid "Authorization code:" -msgstr " Code d’autorisation : " +msgstr " Code d’autorisation : " #: picard/ui/options/interface.py:36 msgid "User Interface" @@ -1999,7 +2000,7 @@ msgstr "Enregistrer" #: picard/ui/options/interface.py:79 msgid "Submit AcoustIDs" -msgstr "Envoyer AcoustIDs" +msgstr "Envoyer les AcoustID" #: picard/ui/options/interface.py:83 msgid "Open in Player" @@ -2046,12 +2047,12 @@ msgstr "Aucun greffon installé." #: picard/ui/options/plugins.py:198 #, python-format msgid "The plugin '%s' is not compatible with this version of Picard." -msgstr "Le greffon « %s » n'est pas compatible avec cette version de Picard." +msgstr "Le greffon « %s » n’est pas compatible avec cette version de Picard." #: picard/ui/options/plugins.py:226 #, python-format msgid "The plugin '%s' will be upgraded to version %s on next run of Picard." -msgstr "Le greffon « %s » sera mis à jour vers la version %s au prochain démarrage de Picard." +msgstr "Le greffon « %s » sera mis à jour vers la version %s au prochain démarrage de Picard." #: picard/ui/options/plugins.py:254 msgid "Update" @@ -2088,11 +2089,11 @@ msgstr "Licence" #: picard/ui/options/plugins.py:338 #, python-format msgid "The plugin '%s' could not be downloaded." -msgstr "Le greffon « %s » n'a pu être téléchargé." +msgstr "Le greffon « %s » n’a pu être téléchargé." #: picard/ui/options/plugins.py:339 msgid "Please try again later." -msgstr "Merci d'essayer à nouveau plus tard." +msgstr "Merci d’essayer à nouveau plus tard." #: picard/ui/options/ratings.py:28 msgid "Ratings" @@ -2114,7 +2115,7 @@ msgstr "Nommage de fichiers" msgid "" "Open Scripting Documentation in " "your browser" -msgstr "Ouvrir la Documentation des scripts dans votre navigateur" +msgstr "Ouvrir la documentation des scripts dans votre navigateur" #: picard/ui/options/renaming.py:188 msgid "The location to move files to must not be empty." @@ -2154,7 +2155,7 @@ msgstr "Scripts" #: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" -msgstr "Êtes-vous certain de vouloir supprimer ce script ?" +msgstr "Êtes-vous certain de vouloir supprimer ce script ?" #: picard/ui/options/scripting.py:294 msgid "Confirm Remove" @@ -2490,4 +2491,4 @@ msgid "" "Error while launching a web browser:\n" "\n" "%s" -msgstr "Erreur en lançant un navigateur web :\n\n%s" +msgstr "Erreur en lançant un navigateur web :\n\n%s" diff --git a/po/lt.po b/po/lt.po index 6008a02d9..84724846b 100644 --- a/po/lt.po +++ b/po/lt.po @@ -1,1413 +1,232 @@ -# Translations template for PROJECT. -# Copyright (C) 2012 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. +# Translations template for picard. +# Copyright (C) 2017 ORGANIZATION +# This file is distributed under the same license as the picard project. # # Translators: -# Jonas Slivka , 2006. +# A B, 2017 +# Jonas Slivka , 2006 msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"Report-Msgid-Bugs-To: http://tickets.musicbrainz.org/\n" -"POT-Creation-Date: 2012-08-28 15:50+0200\n" -"PO-Revision-Date: 2012-08-29 08:53+0000\n" -"Last-Translator: Lukáš Lalinský \n" -"Language-Team: LANGUAGE \n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2017-01-23 14:00+0100\n" +"PO-Revision-Date: 2017-02-11 10:11+0000\n" +"Last-Translator: A B\n" +"Language-Team: Lithuanian (http://www.transifex.com/musicbrainz/musicbrainz/language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" +"Generated-By: Babel 1.3\n" "Language: lt\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: contrib/plugins/no_release.py:48 -msgid "Enable plugin for all releases by default" -msgstr "" - -#: contrib/plugins/no_release.py:49 -msgid "Tags to strip (comma-separated)" -msgstr "" - -#: contrib/plugins/no_release.py:59 -msgid "Remove specific release information..." -msgstr "" - -#: contrib/plugins/open_in_gui.py:30 -msgid "Open Error" -msgstr "" - -#: contrib/plugins/open_in_gui.py:30 +#: picard/acoustid.py:111 #, python-format -msgid "" -"Error while opening file:\n" -"\n" -"%s" +msgid "AcoustID lookup network error for '%(filename)s'!" msgstr "" -#: contrib/plugins/lastfm/ui_options_lastfm.py:115 -msgid "Last.fm" -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:116 -msgid "Use track tags" -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:117 -msgid "Use artist tags" -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:118 -#: picard/ui/options/tags.py:30 -msgid "Tags" -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:119 -#: picard/ui/ui_options_folksonomy.py:107 -msgid "Ignore tags:" -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:120 -#: picard/ui/ui_options_folksonomy.py:112 -msgid "Join multiple tags with:" -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:121 -#: picard/ui/ui_options_folksonomy.py:113 -msgid " / " -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:122 -#: picard/ui/ui_options_folksonomy.py:114 -msgid ", " -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:123 -#: picard/ui/ui_options_folksonomy.py:109 -msgid "Minimal tag usage:" -msgstr "" - -#: contrib/plugins/lastfm/ui_options_lastfm.py:124 -#: picard/ui/ui_options_folksonomy.py:110 picard/ui/ui_options_matching.py:79 -#: picard/ui/ui_options_matching.py:80 picard/ui/ui_options_matching.py:81 -msgid " %" -msgstr "" - -#: contrib/plugins/replaygain/__init__.py:48 -msgid "Calculate replay &gain..." -msgstr "" - -#: contrib/plugins/replaygain/__init__.py:65 +#: picard/acoustid.py:135 #, python-format -msgid "Calculating replay gain for \"%s\"..." +msgid "AcoustID lookup failed for '%(filename)s'!" msgstr "" -#: contrib/plugins/replaygain/__init__.py:70 +#: picard/acoustid.py:157 #, python-format -msgid "Replay gain for \"%s\" successfully calculated." +msgid "AcoustID lookup returned no result for file '%(filename)s'" msgstr "" -#: contrib/plugins/replaygain/__init__.py:72 +#: picard/acoustid.py:168 #, python-format -msgid "Could not calculate replay gain for \"%s\"." +msgid "Looking up the fingerprint for file '%(filename)s' ..." msgstr "" -#: contrib/plugins/replaygain/__init__.py:75 -msgid "Calculate album &gain..." +#: picard/acoustidmanager.py:82 +msgid "Submitting AcoustIDs ..." msgstr "" -#: contrib/plugins/replaygain/__init__.py:98 +#: picard/acoustidmanager.py:103 #, python-format -msgid "Calculating album gain for \"%s\"..." +msgid "AcoustID submission failed with error '%(error)s': %(message)s" msgstr "" -#: contrib/plugins/replaygain/__init__.py:106 -#, python-format -msgid "Album gain for \"%s\" successfully calculated." +#: picard/acoustidmanager.py:111 +msgid "AcoustIDs successfully submitted." msgstr "" -#: contrib/plugins/replaygain/__init__.py:108 -#, python-format -msgid "Could not calculate album gain for \"%s\"." -msgstr "" - -#: picard/acoustid.py:116 -#, python-format -msgid "Could not find AcoustID for file %s" -msgstr "" - -#: picard/acoustid.py:120 picard/musicdns/__init__.py:103 -#, python-format -msgid "Looking up the fingerprint for file %s..." -msgstr "" - -#: picard/acoustidmanager.py:78 -msgid "Submitting AcoustIDs..." -msgstr "" - -#: picard/acoustidmanager.py:83 -#, python-format -msgid "AcoustID submission failed: %s" -msgstr "" - -#: picard/acoustidmanager.py:85 -msgid "AcoustIDs successfully submitted!" -msgstr "" - -#: picard/album.py:55 picard/cluster.py:260 +#: picard/album.py:70 picard/cluster.py:272 msgid "Unmatched Files" msgstr "" -#: picard/album.py:180 +#: picard/album.py:206 #, python-format msgid "[could not load album %s]" msgstr "" -#: picard/album.py:266 +#: picard/album.py:295 #, python-format -msgid "Album %s loaded" +msgid "Album %(id)s loaded: %(artist)s - %(album)s" msgstr "" -#: picard/album.py:282 +#: picard/album.py:338 +#, python-format +msgid "Loading album %(id)s ..." +msgstr "Kraunam %(id)s albumą ..." + +#: picard/album.py:342 msgid "[loading album information]" -msgstr "" +msgstr "[kraunam albumo informacija]" -#: picard/cluster.py:177 picard/cluster.py:188 +#: picard/album.py:527 #, python-format -msgid "No matching releases for cluster %s" -msgstr "" +msgid "; %i image" +msgid_plural "; %i images" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: picard/cluster.py:190 +#: picard/cluster.py:166 picard/cluster.py:179 #, python-format -msgid "Cluster %s identified!" +msgid "No matching releases for cluster %(album)s" msgstr "" -#: picard/cluster.py:195 +#: picard/cluster.py:185 #, python-format -msgid "Looking up the metadata for cluster %s..." +msgid "Cluster %(album)s identified!" msgstr "" -#: picard/const.py:39 -msgid "CD" -msgstr "" - -#: picard/const.py:40 -msgid "CD-R" -msgstr "" - -#: picard/const.py:41 -msgid "HDCD" -msgstr "" - -#: picard/const.py:42 -msgid "8cm CD" -msgstr "" - -#: picard/const.py:43 -msgid "Vinyl" -msgstr "" - -#: picard/const.py:44 -msgid "7\" Vinyl" -msgstr "" - -#: picard/const.py:45 -msgid "10\" Vinyl" -msgstr "" - -#: picard/const.py:46 -msgid "12\" Vinyl" -msgstr "" - -#: picard/const.py:47 -msgid "Digital Media" -msgstr "" - -#: picard/const.py:48 -msgid "USB Flash Drive" -msgstr "" - -#: picard/const.py:49 -msgid "slotMusic" -msgstr "" - -#: picard/const.py:50 -msgid "Cassette" -msgstr "" - -#: picard/const.py:51 -msgid "DVD" -msgstr "" - -#: picard/const.py:52 -msgid "DVD-Audio" -msgstr "" - -#: picard/const.py:53 -msgid "DVD-Video" -msgstr "" - -#: picard/const.py:54 -msgid "SACD" -msgstr "" - -#: picard/const.py:55 -msgid "DualDisc" -msgstr "" - -#: picard/const.py:56 -msgid "MiniDisc" -msgstr "" - -#: picard/const.py:57 -msgid "Blu-ray" -msgstr "" - -#: picard/const.py:58 -msgid "HD-DVD" -msgstr "" - -#: picard/const.py:59 -msgid "Videotape" -msgstr "" - -#: picard/const.py:60 -msgid "VHS" -msgstr "" - -#: picard/const.py:61 -msgid "Betamax" -msgstr "" - -#: picard/const.py:62 -msgid "VCD" -msgstr "" - -#: picard/const.py:63 -msgid "SVCD" -msgstr "" - -#: picard/const.py:64 -msgid "UMD" -msgstr "" - -#: picard/const.py:65 picard/ui/ui_options_releases.py:226 -msgid "Other" -msgstr "" - -#: picard/const.py:66 -msgid "LaserDisc" -msgstr "" - -#: picard/const.py:67 -msgid "Cartridge" -msgstr "" - -#: picard/const.py:68 -msgid "Reel-to-reel" -msgstr "" - -#: picard/const.py:69 -msgid "DAT" -msgstr "" - -#: picard/const.py:70 -msgid "Wax Cylinder" -msgstr "" - -#: picard/const.py:71 -msgid "Piano Roll" -msgstr "" - -#: picard/const.py:72 -msgid "DCC" -msgstr "" - -#: picard/const.py:77 -msgid "Bangladesh" -msgstr "" - -#: picard/const.py:78 -msgid "Belgium" -msgstr "" - -#: picard/const.py:79 -msgid "Burkina Faso" -msgstr "" - -#: picard/const.py:80 -msgid "Bulgaria" -msgstr "" - -#: picard/const.py:81 -msgid "Barbados" -msgstr "" - -#: picard/const.py:82 -msgid "Wallis and Futuna Islands" -msgstr "" - -#: picard/const.py:83 -msgid "Bermuda" -msgstr "" - -#: picard/const.py:84 -msgid "Brunei Darussalam" -msgstr "" - -#: picard/const.py:85 -msgid "Bolivia" -msgstr "" - -#: picard/const.py:86 -msgid "Bahrain" -msgstr "" - -#: picard/const.py:87 -msgid "Burundi" -msgstr "" - -#: picard/const.py:88 -msgid "Benin" -msgstr "" - -#: picard/const.py:89 -msgid "Bhutan" -msgstr "" - -#: picard/const.py:90 -msgid "Jamaica" -msgstr "" - -#: picard/const.py:91 -msgid "Bouvet Island" -msgstr "" - -#: picard/const.py:92 -msgid "Botswana" -msgstr "" - -#: picard/const.py:93 -msgid "Samoa" -msgstr "" - -#: picard/const.py:94 -msgid "Brazil" -msgstr "" - -#: picard/const.py:95 -msgid "Bahamas" -msgstr "" - -#: picard/const.py:96 -msgid "Belarus" -msgstr "" - -#: picard/const.py:97 -msgid "Belize" -msgstr "" - -#: picard/const.py:98 -msgid "Russian Federation" -msgstr "" - -#: picard/const.py:99 -msgid "Rwanda" -msgstr "" - -#: picard/const.py:100 -msgid "Reunion" -msgstr "" - -#: picard/const.py:101 -msgid "Turkmenistan" -msgstr "" - -#: picard/const.py:102 -msgid "Tajikistan" -msgstr "" - -#: picard/const.py:103 -msgid "Romania" -msgstr "" - -#: picard/const.py:104 -msgid "Tokelau" -msgstr "" - -#: picard/const.py:105 -msgid "Guinea-Bissa" -msgstr "" - -#: picard/const.py:106 -msgid "Guam" -msgstr "" - -#: picard/const.py:107 -msgid "Guatemala" -msgstr "" - -#: picard/const.py:108 -msgid "Greece" -msgstr "" - -#: picard/const.py:109 -msgid "Equatorial Guinea" -msgstr "" - -#: picard/const.py:110 -msgid "Guadeloupe" -msgstr "" - -#: picard/const.py:111 -msgid "Japan" -msgstr "" - -#: picard/const.py:112 -msgid "Guyana" -msgstr "" - -#: picard/const.py:113 -msgid "French Guiana" -msgstr "" - -#: picard/const.py:114 -msgid "Georgia" -msgstr "" - -#: picard/const.py:115 -msgid "Grenada" -msgstr "" - -#: picard/const.py:116 -msgid "United Kingdom" -msgstr "" - -#: picard/const.py:117 -msgid "Gabon" -msgstr "" - -#: picard/const.py:118 -msgid "El Salvador" -msgstr "" - -#: picard/const.py:119 -msgid "Guinea" -msgstr "" - -#: picard/const.py:120 -msgid "Gambia" -msgstr "" - -#: picard/const.py:121 -msgid "Greenland" -msgstr "" - -#: picard/const.py:122 -msgid "Gibraltar" -msgstr "" - -#: picard/const.py:123 -msgid "Ghana" -msgstr "" - -#: picard/const.py:124 -msgid "Oman" -msgstr "" - -#: picard/const.py:125 -msgid "Tunisia" -msgstr "" - -#: picard/const.py:126 -msgid "Jordan" -msgstr "" - -#: picard/const.py:127 -msgid "Haiti" -msgstr "" - -#: picard/const.py:128 -msgid "Hungary" -msgstr "" - -#: picard/const.py:129 -msgid "Hong Kong" -msgstr "" - -#: picard/const.py:130 -msgid "Honduras" -msgstr "" - -#: picard/const.py:131 -msgid "Heard and Mc Donald Islands" -msgstr "" - -#: picard/const.py:132 -msgid "Venezuela" -msgstr "" - -#: picard/const.py:133 -msgid "Puerto Rico" -msgstr "" - -#: picard/const.py:134 -msgid "Palau" -msgstr "" - -#: picard/const.py:135 -msgid "Portugal" -msgstr "" - -#: picard/const.py:136 -msgid "Svalbard and Jan Mayen Islands" -msgstr "" - -#: picard/const.py:137 -msgid "Paraguay" -msgstr "" - -#: picard/const.py:138 -msgid "Iraq" -msgstr "" - -#: picard/const.py:139 -msgid "Panama" -msgstr "" - -#: picard/const.py:140 -msgid "French Polynesia" -msgstr "" - -#: picard/const.py:141 -msgid "Papua New Guinea" -msgstr "" - -#: picard/const.py:142 -msgid "Peru" -msgstr "" - -#: picard/const.py:143 -msgid "Pakistan" -msgstr "" - -#: picard/const.py:144 -msgid "Philippines" -msgstr "" - -#: picard/const.py:145 -msgid "Pitcairn" -msgstr "" - -#: picard/const.py:146 -msgid "Poland" -msgstr "" - -#: picard/const.py:147 -msgid "St. Pierre and Miquelon" -msgstr "" - -#: picard/const.py:148 -msgid "Zambia" -msgstr "" - -#: picard/const.py:149 -msgid "Western Sahara" -msgstr "" - -#: picard/const.py:150 -msgid "Estonia" -msgstr "" - -#: picard/const.py:151 -msgid "Egypt" -msgstr "" - -#: picard/const.py:152 -msgid "South Africa" -msgstr "" - -#: picard/const.py:153 -msgid "Ecuador" -msgstr "" - -#: picard/const.py:154 -msgid "Italy" -msgstr "" - -#: picard/const.py:155 -msgid "Viet Nam" -msgstr "" - -#: picard/const.py:156 -msgid "Solomon Islands" -msgstr "" - -#: picard/const.py:157 -msgid "Ethiopia" -msgstr "" - -#: picard/const.py:158 -msgid "Somalia" -msgstr "" - -#: picard/const.py:159 -msgid "Zimbabwe" -msgstr "" - -#: picard/const.py:160 -msgid "Saudi Arabia" -msgstr "" - -#: picard/const.py:161 -msgid "Spain" -msgstr "" - -#: picard/const.py:162 -msgid "Eritrea" -msgstr "" - -#: picard/const.py:163 -msgid "Moldova, Republic of" -msgstr "" - -#: picard/const.py:164 -msgid "Madagascar" -msgstr "" - -#: picard/const.py:165 -msgid "Morocco" -msgstr "" - -#: picard/const.py:166 -msgid "Monaco" -msgstr "" - -#: picard/const.py:167 -msgid "Uzbekistan" -msgstr "" - -#: picard/const.py:168 -msgid "Myanmar" -msgstr "" - -#: picard/const.py:169 -msgid "Mali" -msgstr "" - -#: picard/const.py:170 -msgid "Macau" -msgstr "" - -#: picard/const.py:171 -msgid "Mongolia" -msgstr "" - -#: picard/const.py:172 -msgid "Marshall Islands" -msgstr "" - -#: picard/const.py:173 -msgid "Macedonia, The Former Yugoslav Republic of" -msgstr "" - -#: picard/const.py:174 -msgid "Mauritius" -msgstr "" - -#: picard/const.py:175 -msgid "Malta" -msgstr "" - -#: picard/const.py:176 -msgid "Malawi" -msgstr "" - -#: picard/const.py:177 -msgid "Maldives" -msgstr "" - -#: picard/const.py:178 -msgid "Martinique" -msgstr "" - -#: picard/const.py:179 -msgid "Northern Mariana Islands" -msgstr "" - -#: picard/const.py:180 -msgid "Montserrat" -msgstr "" - -#: picard/const.py:181 -msgid "Mauritania" -msgstr "" - -#: picard/const.py:182 -msgid "Uganda" -msgstr "" - -#: picard/const.py:183 -msgid "Malaysia" -msgstr "" - -#: picard/const.py:184 -msgid "Mexico" -msgstr "" - -#: picard/const.py:185 -msgid "Israel" -msgstr "" - -#: picard/const.py:186 -msgid "France" -msgstr "" - -#: picard/const.py:187 -msgid "British Indian Ocean Territory" -msgstr "" - -#: picard/const.py:188 -msgid "St. Helena" -msgstr "" - -#: picard/const.py:189 -msgid "Finland" -msgstr "" - -#: picard/const.py:190 -msgid "Fiji" -msgstr "" - -#: picard/const.py:191 -msgid "Falkland Islands (Malvinas)" -msgstr "" - -#: picard/const.py:192 -msgid "Micronesia, Federated States of" -msgstr "" - -#: picard/const.py:193 -msgid "Faroe Islands" -msgstr "" - -#: picard/const.py:194 -msgid "Nicaragua" -msgstr "" - -#: picard/const.py:195 -msgid "Netherlands" -msgstr "" - -#: picard/const.py:196 -msgid "Norway" -msgstr "" - -#: picard/const.py:197 -msgid "Namibia" -msgstr "" - -#: picard/const.py:198 -msgid "Vanuatu" -msgstr "" - -#: picard/const.py:199 -msgid "New Caledonia" -msgstr "" - -#: picard/const.py:200 -msgid "Niger" -msgstr "" - -#: picard/const.py:201 -msgid "Norfolk Island" -msgstr "" - -#: picard/const.py:202 -msgid "Nigeria" -msgstr "" - -#: picard/const.py:203 -msgid "New Zealand" -msgstr "" - -#: picard/const.py:204 -msgid "Zaire" -msgstr "" - -#: picard/const.py:205 -msgid "Nepal" -msgstr "" - -#: picard/const.py:206 -msgid "Nauru" -msgstr "" - -#: picard/const.py:207 -msgid "Niue" -msgstr "" - -#: picard/const.py:208 -msgid "Cook Islands" -msgstr "" - -#: picard/const.py:209 -msgid "Cote d'Ivoire" -msgstr "" - -#: picard/const.py:210 -msgid "Switzerland" -msgstr "" - -#: picard/const.py:211 -msgid "Colombia" -msgstr "" - -#: picard/const.py:212 -msgid "China" -msgstr "" - -#: picard/const.py:213 -msgid "Cameroon" -msgstr "" - -#: picard/const.py:214 -msgid "Chile" -msgstr "" - -#: picard/const.py:215 -msgid "Cocos (Keeling) Islands" -msgstr "" - -#: picard/const.py:216 -msgid "Canada" -msgstr "" - -#: picard/const.py:217 -msgid "Congo" -msgstr "" - -#: picard/const.py:218 -msgid "Central African Republic" -msgstr "" - -#: picard/const.py:219 -msgid "Czech Republic" -msgstr "" - -#: picard/const.py:220 -msgid "Cyprus" -msgstr "" - -#: picard/const.py:221 -msgid "Christmas Island" -msgstr "" - -#: picard/const.py:222 -msgid "Costa Rica" -msgstr "" - -#: picard/const.py:223 -msgid "Cape Verde" -msgstr "" - -#: picard/const.py:224 -msgid "Cuba" -msgstr "" - -#: picard/const.py:225 -msgid "Swaziland" -msgstr "" - -#: picard/const.py:226 -msgid "Syrian Arab Republic" -msgstr "" - -#: picard/const.py:227 -msgid "Kyrgyzstan" -msgstr "" - -#: picard/const.py:228 -msgid "Kenya" -msgstr "" - -#: picard/const.py:229 -msgid "Suriname" -msgstr "" - -#: picard/const.py:230 -msgid "Kiribati" -msgstr "" - -#: picard/const.py:231 -msgid "Cambodia" -msgstr "" - -#: picard/const.py:232 -msgid "Saint Kitts and Nevis" -msgstr "" - -#: picard/const.py:233 -msgid "Comoros" -msgstr "" - -#: picard/const.py:234 -msgid "Sao Tome and Principe" -msgstr "" - -#: picard/const.py:235 -msgid "Slovenia" -msgstr "" - -#: picard/const.py:236 -msgid "Kuwait" -msgstr "" - -#: picard/const.py:237 -msgid "Senegal" -msgstr "" - -#: picard/const.py:238 -msgid "San Marino" -msgstr "" - -#: picard/const.py:239 -msgid "Sierra Leone" -msgstr "" - -#: picard/const.py:240 -msgid "Seychelles" -msgstr "" - -#: picard/const.py:241 -msgid "Kazakhstan" -msgstr "" - -#: picard/const.py:242 -msgid "Cayman Islands" -msgstr "" - -#: picard/const.py:243 -msgid "Singapore" -msgstr "" - -#: picard/const.py:244 -msgid "Sweden" -msgstr "" - -#: picard/const.py:245 -msgid "Sudan" -msgstr "" - -#: picard/const.py:246 -msgid "Dominican Republic" -msgstr "" - -#: picard/const.py:247 -msgid "Dominica" -msgstr "" - -#: picard/const.py:248 -msgid "Djibouti" -msgstr "" - -#: picard/const.py:249 -msgid "Denmark" -msgstr "" - -#: picard/const.py:250 -msgid "Virgin Islands (British)" -msgstr "" - -#: picard/const.py:251 -msgid "Germany" -msgstr "" - -#: picard/const.py:252 -msgid "Yemen" -msgstr "" - -#: picard/const.py:253 -msgid "Algeria" -msgstr "" - -#: picard/const.py:254 -msgid "United States" -msgstr "" - -#: picard/const.py:255 -msgid "Uruguay" -msgstr "" - -#: picard/const.py:256 -msgid "Mayotte" -msgstr "" - -#: picard/const.py:257 -msgid "United States Minor Outlying Islands" -msgstr "" - -#: picard/const.py:258 -msgid "Lebanon" -msgstr "" - -#: picard/const.py:259 -msgid "Saint Lucia" -msgstr "" - -#: picard/const.py:260 -msgid "Lao People's Democratic Republic" -msgstr "" - -#: picard/const.py:261 -msgid "Tuvalu" -msgstr "" - -#: picard/const.py:262 -msgid "Taiwan" -msgstr "" - -#: picard/const.py:263 -msgid "Trinidad and Tobago" -msgstr "" - -#: picard/const.py:264 -msgid "Turkey" -msgstr "" - -#: picard/const.py:265 -msgid "Sri Lanka" -msgstr "" - -#: picard/const.py:266 -msgid "Liechtenstein" -msgstr "" - -#: picard/const.py:267 -msgid "Latvia" -msgstr "" - -#: picard/const.py:268 -msgid "Tonga" -msgstr "" - -#: picard/const.py:269 -msgid "Lithuania" -msgstr "" - -#: picard/const.py:270 -msgid "Luxembourg" -msgstr "" - -#: picard/const.py:271 -msgid "Liberia" -msgstr "" - -#: picard/const.py:272 -msgid "Lesotho" -msgstr "" - -#: picard/const.py:273 -msgid "Thailand" -msgstr "" - -#: picard/const.py:274 -msgid "French Southern Territories" -msgstr "" - -#: picard/const.py:275 -msgid "Togo" -msgstr "" - -#: picard/const.py:276 -msgid "Chad" -msgstr "" - -#: picard/const.py:277 -msgid "Turks and Caicos Islands" -msgstr "" - -#: picard/const.py:278 -msgid "Libyan Arab Jamahiriya" -msgstr "" - -#: picard/const.py:279 -msgid "Vatican City State (Holy See)" -msgstr "" - -#: picard/const.py:280 -msgid "Saint Vincent and The Grenadines" -msgstr "" - -#: picard/const.py:281 -msgid "United Arab Emirates" -msgstr "" - -#: picard/const.py:282 -msgid "Andorra" -msgstr "" - -#: picard/const.py:283 -msgid "Antigua and Barbuda" -msgstr "" - -#: picard/const.py:284 -msgid "Afghanistan" -msgstr "" - -#: picard/const.py:285 -msgid "Anguilla" -msgstr "" - -#: picard/const.py:286 -msgid "Virgin Islands (U.S.)" -msgstr "" - -#: picard/const.py:287 -msgid "Iceland" -msgstr "" - -#: picard/const.py:288 -msgid "Iran (Islamic Republic of)" -msgstr "" - -#: picard/const.py:289 -msgid "Armenia" -msgstr "" - -#: picard/const.py:290 -msgid "Albania" -msgstr "" - -#: picard/const.py:291 -msgid "Angola" -msgstr "" - -#: picard/const.py:292 -msgid "Netherlands Antilles" -msgstr "" - -#: picard/const.py:293 -msgid "Antarctica" -msgstr "" - -#: picard/const.py:294 -msgid "American Samoa" -msgstr "" - -#: picard/const.py:295 -msgid "Argentina" -msgstr "" - -#: picard/const.py:296 -msgid "Australia" -msgstr "" - -#: picard/const.py:297 -msgid "Austria" -msgstr "" - -#: picard/const.py:298 -msgid "Aruba" -msgstr "" - -#: picard/const.py:299 -msgid "India" -msgstr "" - -#: picard/const.py:300 -msgid "Tanzania, United Republic of" -msgstr "" - -#: picard/const.py:301 -msgid "Azerbaijan" -msgstr "" - -#: picard/const.py:302 -msgid "Ireland" -msgstr "" - -#: picard/const.py:303 -msgid "Indonesia" -msgstr "" - -#: picard/const.py:304 -msgid "Ukraine" -msgstr "" - -#: picard/const.py:305 -msgid "Qatar" -msgstr "" - -#: picard/const.py:306 -msgid "Mozambique" -msgstr "" - -#: picard/const.py:307 -msgid "Bosnia and Herzegovina" -msgstr "" - -#: picard/const.py:308 -msgid "Congo, The Democratic Republic of the" -msgstr "" - -#: picard/const.py:309 -msgid "Serbia and Montenegro (historical, 2003-2006)" -msgstr "" - -#: picard/const.py:310 -msgid "Serbia" -msgstr "" - -#: picard/const.py:311 -msgid "Montenegro" -msgstr "" - -#: picard/const.py:312 -msgid "Croatia" -msgstr "" - -#: picard/const.py:313 -msgid "Korea (North), Democratic People's Republic of" -msgstr "" - -#: picard/const.py:314 -msgid "Korea (South), Republic of" -msgstr "" - -#: picard/const.py:315 -msgid "Slovakia" -msgstr "" - -#: picard/const.py:316 -msgid "Soviet Union (historical, 1922-1991)" -msgstr "" - -#: picard/const.py:317 -msgid "East Timor" -msgstr "" - -#: picard/const.py:318 -msgid "Czechoslovakia (historical, 1918-1992)" -msgstr "" - -#: picard/const.py:319 -msgid "Europe" -msgstr "" - -#: picard/const.py:320 -msgid "East Germany (historical, 1949-1990)" -msgstr "" - -#: picard/const.py:321 -msgid "[Unknown Country]" -msgstr "" - -#: picard/const.py:322 -msgid "[Worldwide]" -msgstr "" - -#: picard/const.py:323 -msgid "Yugoslavia (historical, 1918-1992)" -msgstr "" - -#: picard/const.py:335 -msgid "Danish" -msgstr "" - -#: picard/const.py:336 -msgid "German" -msgstr "" - -#: picard/const.py:338 -msgid "English" -msgstr "" - -#: picard/const.py:339 -msgid "English (Canada)" -msgstr "" - -#: picard/const.py:340 -msgid "English (UK)" -msgstr "" - -#: picard/const.py:342 -msgid "Spanish" -msgstr "" - -#: picard/const.py:343 -msgid "Estonian" -msgstr "" - -#: picard/const.py:345 -msgid "Finnish" -msgstr "" - -#: picard/const.py:347 -msgid "French" -msgstr "" - -#: picard/const.py:356 -msgid "Italian" -msgstr "" - -#: picard/const.py:363 -msgid "Dutch" -msgstr "" - -#: picard/const.py:365 -msgid "Polish" -msgstr "" - -#: picard/const.py:367 -msgid "Brazilian Portuguese" -msgstr "" - -#: picard/const.py:374 -msgid "Swedish" -msgstr "" - -#: picard/file.py:589 +#: picard/cluster.py:196 #, python-format -msgid "No matching tracks for file %s" +msgid "Looking up the metadata for cluster %(album)s..." msgstr "" -#: picard/file.py:604 +#: picard/collection.py:64 #, python-format -msgid "No matching tracks above the threshold for file %s" -msgstr "" +msgid "Added %(count)i release to collection \"%(name)s\"" +msgid_plural "Added %(count)i releases to collection \"%(name)s\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: picard/file.py:607 +#: picard/collection.py:86 #, python-format -msgid "File %s identified!" -msgstr "" +msgid "Removed %(count)i release from collection \"%(name)s\"" +msgid_plural "Removed %(count)i releases from collection \"%(name)s\"" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: picard/file.py:623 +#: picard/collection.py:100 #, python-format -msgid "Looking up the PUID for file %s..." +msgid "Error loading collections: %(error)s" msgstr "" -#: picard/file.py:629 +#: picard/config_upgrade.py:58 picard/config_upgrade.py:71 +msgid "Various Artists file naming scheme removal" +msgstr "" + +#: picard/config_upgrade.py:59 +msgid "" +"The separate file naming scheme for various artists albums has been removed in this version of Picard.\n" +"Your file naming scheme has automatically been merged with that of single artist albums." +msgstr "" + +#: picard/config_upgrade.py:72 +msgid "" +"The separate file naming scheme for various artists albums has been removed in this version of Picard.\n" +"You currently do not use this option, but have a separate file naming scheme defined.\n" +"Do you want to remove it or merge it with your file naming scheme for single artist albums?" +msgstr "" + +#: picard/config_upgrade.py:78 +msgid "Merge" +msgstr "" + +#: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 +#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 +msgid "Remove" +msgstr "" + +#: picard/config_upgrade.py:193 picard/ui/options/scripting.py:28 #, python-format -msgid "Looking up the metadata for file %s..." +msgid "My script %d" msgstr "" -#: picard/puidmanager.py:62 -msgid "Submitting PUIDs..." -msgstr "" - -#: picard/puidmanager.py:68 +#: picard/file.py:541 #, python-format -msgid "PUIDs submission failed: %d" +msgid "No matching tracks for file '%(filename)s'" msgstr "" -#: picard/puidmanager.py:70 -msgid "PUIDs successfully submitted!" +#: picard/file.py:557 +#, python-format +msgid "No matching tracks above the threshold for file '%(filename)s'" msgstr "" -#: picard/tagger.py:528 +#: picard/file.py:564 +#, python-format +msgid "File '%(filename)s' identified!" +msgstr "" + +#: picard/file.py:584 +#, python-format +msgid "Looking up the metadata for file %(filename)s ..." +msgstr "" + +#: picard/plugin.py:434 +#, python-format +msgid "Error loading plugins list: %(error)s" +msgstr "" + +#: picard/releasegroup.py:53 picard/ui/searchdialog.py:515 +msgid "Tracks" +msgstr "" + +#: picard/releasegroup.py:54 +msgid "Year" +msgstr "Metai" + +#: picard/releasegroup.py:55 picard/ui/cdlookup.py:35 +#: picard/ui/searchdialog.py:329 picard/ui/searchdialog.py:517 +msgid "Country" +msgstr "Kraštas" + +#: picard/releasegroup.py:56 picard/ui/searchdialog.py:514 +msgid "Format" +msgstr "" + +#: picard/releasegroup.py:57 +msgid "Label" +msgstr "" + +#: picard/releasegroup.py:58 +msgid "Cat No" +msgstr "" + +#: picard/releasegroup.py:88 +msgid "[no barcode]" +msgstr "" + +#: picard/releasegroup.py:108 +msgid "[no release info]" +msgstr "" + +#: picard/tagger.py:405 picard/tagger.py:438 +#, python-format +msgid "Adding %(count)d file from '%(directory)s' ..." +msgid_plural "Adding %(count)d files from '%(directory)s' ..." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: picard/tagger.py:597 +#, python-format +msgid "Removing album %(id)s: %(artist)s - %(album)s" +msgstr "" + +#: picard/tagger.py:613 msgid "CD Lookup Error" msgstr "" -#: picard/tagger.py:529 +#: picard/tagger.py:614 #, python-format msgid "" "Error while reading CD:\n" @@ -1415,150 +234,419 @@ msgid "" "%s" msgstr "" -#: picard/tagger.py:555 +#: picard/const/languages.py:31 +msgid "Danish" +msgstr "" + +#: picard/const/languages.py:32 +msgid "German" +msgstr "Vokiečių kalba" + +#: picard/const/languages.py:34 +msgid "English" +msgstr "Anglų kalba" + +#: picard/const/languages.py:35 +msgid "English (Canada)" +msgstr "Anglų kalba (Kanadiečių)" + +#: picard/const/languages.py:36 +msgid "English (UK)" +msgstr "Anglų kalba (JK)" + +#: picard/const/languages.py:38 +msgid "Spanish" +msgstr "Ispanų kalba" + +#: picard/const/languages.py:39 +msgid "Estonian" +msgstr "Estų kalba" + +#: picard/const/languages.py:41 +msgid "Finnish" +msgstr "Suomių kalba" + +#: picard/const/languages.py:43 +msgid "French" +msgstr "Prancūzų kalba" + +#: picard/const/languages.py:52 +msgid "Italian" +msgstr "Italų kalba" + +#: picard/const/languages.py:59 +msgid "Dutch" +msgstr "" + +#: picard/const/languages.py:61 +msgid "Polish" +msgstr "Lenkų kalba" + +#: picard/const/languages.py:63 +msgid "Brazilian Portuguese" +msgstr "Brazilijos Portugalų kalba" + +#: picard/const/languages.py:70 +msgid "Swedish" +msgstr "Švedų kalba" + +#: picard/coverart/__init__.py:98 #, python-format -msgid "Could not find PUID for file %s" +msgid "Cover art of type '%(type)s' downloaded for %(albumid)s from %(host)s" msgstr "" -#: picard/ui/cdlookup.py:33 picard/ui/mainwindow.py:525 -#: picard/ui/ui_options_releases.py:216 picard/util/tags.py:21 +#: picard/coverart/__init__.py:185 +#, python-format +msgid "" +"Downloading cover art of type '%(type)s' for %(albumid)s from %(host)s ..." +msgstr "" + +#: picard/coverart/utils.py:31 +msgid "Unknown" +msgstr "Nežinoma" + +#: picard/coverart/providers/amazon.py:92 +msgid "Amazon" +msgstr "Amazon" + +#: picard/coverart/providers/caa.py:51 +msgid "Cover art types" +msgstr "" + +#: picard/coverart/providers/caa.py:84 +msgid "Chec&k all" +msgstr "" + +#: picard/coverart/providers/caa.py:85 +msgid "&Uncheck all" +msgstr "" + +#: picard/coverart/providers/caa.py:187 +msgid "Cover Art Archive" +msgstr "Cover Art Archive" + +#: picard/coverart/providers/caa_release_group.py:41 +msgid "CAA Release Group" +msgstr "" + +#: picard/coverart/providers/local.py:65 +msgid "Local Files" +msgstr "" + +#: picard/coverart/providers/whitelist.py:38 +msgid "Whitelist" +msgstr "" + +#: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:625 picard/util/tags.py:21 msgid "Album" -msgstr "" +msgstr "Albumas" -#: picard/ui/cdlookup.py:33 picard/ui/itemviews.py:89 -#: picard/ui/mainwindow.py:526 picard/util/tags.py:22 +#: picard/ui/cdlookup.py:35 picard/ui/itemviews.py:96 +#: picard/ui/mainwindow.py:626 picard/ui/searchdialog.py:326 +#: picard/ui/searchdialog.py:513 picard/util/tags.py:22 msgid "Artist" -msgstr "" +msgstr "Artistas" -#: picard/ui/cdlookup.py:33 picard/util/tags.py:24 +#: picard/ui/cdlookup.py:35 picard/ui/searchdialog.py:328 +#: picard/ui/searchdialog.py:516 picard/util/tags.py:24 msgid "Date" -msgstr "" +msgstr "Datą" -#: picard/ui/cdlookup.py:33 -msgid "Country" -msgstr "" - -#: picard/ui/cdlookup.py:34 +#: picard/ui/cdlookup.py:36 picard/ui/searchdialog.py:518 msgid "Labels" -msgstr "" +msgstr "Įrašai" -#: picard/ui/cdlookup.py:34 +#: picard/ui/cdlookup.py:36 picard/ui/searchdialog.py:519 msgid "Catalog #s" msgstr "" -#: picard/ui/cdlookup.py:34 picard/util/tags.py:75 +#: picard/ui/cdlookup.py:36 picard/ui/searchdialog.py:520 +#: picard/util/tags.py:79 msgid "Barcode" msgstr "" -#: picard/ui/coverartbox.py:122 +#: picard/ui/collectionmenu.py:42 +msgid "Refresh List" +msgstr "Atnaujink Saraša " + +#: picard/ui/collectionmenu.py:86 +#, python-format +msgid "%s (%i release)" +msgid_plural "%s (%i releases)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: picard/ui/coverartbox.py:143 msgid "View release on MusicBrainz" msgstr "" -#: picard/ui/filebrowser.py:38 +#: picard/ui/filebrowser.py:40 msgid "&Move Tagged Files Here" msgstr "" -#: picard/ui/filebrowser.py:41 +#: picard/ui/filebrowser.py:43 msgid "Show &Hidden Files" msgstr "" -#: picard/ui/infodialog.py:36 -msgid "Info" +#: picard/ui/filebrowser.py:48 +msgid "&Set as starting directory" msgstr "" -#: picard/ui/infodialog.py:42 +#: picard/ui/infodialog.py:46 +msgid "Existing Cover" +msgstr "" + +#: picard/ui/infodialog.py:46 picard/ui/infodialog.py:52 +#: picard/ui/searchdialog.py:330 picard/ui/searchdialog.py:522 +#: picard/ui/searchdialog.py:741 +msgid "Type" +msgstr "" + +#: picard/ui/infodialog.py:47 +msgid "New Cover" +msgstr "" + +#: picard/ui/infodialog.py:52 picard/ui/searchdialog.py:524 +msgid "Cover" +msgstr "" + +#: picard/ui/infodialog.py:122 picard/ui/infodialog.py:237 +#: picard/ui/options/interface.py:71 +msgid "Info" +msgstr "Informacija" + +#: picard/ui/infodialog.py:166 +#, python-format +msgid "" +"Double-click to open in external viewer\n" +"Temporary file: %s\n" +"Source: %s" +msgstr "" + +#: picard/ui/infodialog.py:242 msgid "Filename:" msgstr "" -#: picard/ui/infodialog.py:44 +#: picard/ui/infodialog.py:244 msgid "Format:" msgstr "" -#: picard/ui/infodialog.py:53 +#: picard/ui/infodialog.py:248 msgid "Size:" -msgstr "" +msgstr "Dydis:" -#: picard/ui/infodialog.py:57 +#: picard/ui/infodialog.py:252 msgid "Length:" -msgstr "" +msgstr "Ilgis:" -#: picard/ui/infodialog.py:59 +#: picard/ui/infodialog.py:254 msgid "Bitrate:" msgstr "" -#: picard/ui/infodialog.py:61 +#: picard/ui/infodialog.py:256 msgid "Sample rate:" msgstr "" -#: picard/ui/infodialog.py:63 +#: picard/ui/infodialog.py:258 msgid "Bits per sample:" msgstr "" -#: picard/ui/infodialog.py:66 +#: picard/ui/infodialog.py:262 msgid "Mono" msgstr "" -#: picard/ui/infodialog.py:67 +#: picard/ui/infodialog.py:264 msgid "Stereo" msgstr "" -#: picard/ui/infodialog.py:69 +#: picard/ui/infodialog.py:267 msgid "Channels:" msgstr "" -#: picard/ui/itemviews.py:87 picard/util/tags.py:23 +#: picard/ui/infodialog.py:278 +msgid "Album Info" +msgstr "Albumo Informacija" + +#: picard/ui/infodialog.py:286 +msgid "&Errors" +msgstr "" + +#: picard/ui/infodialog.py:296 picard/ui/infodialog.py:311 +#: picard/ui/ui_infodialog.py:70 +msgid "&Info" +msgstr "" + +#: picard/ui/infodialog.py:304 +msgid "Cluster Info" +msgstr "" + +#: picard/ui/infodialog.py:313 +msgid "Album:" +msgstr "Albumas:" + +#: picard/ui/infodialog.py:315 +msgid "Artist:" +msgstr "Artistas:" + +#: picard/ui/infodialog.py:325 +msgid "Tracklist:" +msgstr "" + +#: picard/ui/infostatus.py:51 picard/ui/options/plugins.py:308 +msgid "Files" +msgstr "" + +#: picard/ui/infostatus.py:52 +msgid "Albums" +msgstr "Albumai" + +#: picard/ui/infostatus.py:53 +msgid "Pending files" +msgstr "" + +#: picard/ui/infostatus.py:54 +msgid "Pending requests" +msgstr "" + +#: picard/ui/itemviews.py:94 picard/util/tags.py:23 msgid "Title" msgstr "" -#: picard/ui/itemviews.py:88 picard/util/tags.py:84 +#: picard/ui/itemviews.py:95 picard/ui/searchdialog.py:325 +#: picard/util/tags.py:87 msgid "Length" +msgstr "Ilgis" + +#: picard/ui/itemviews.py:162 +msgid "Bad match" msgstr "" -#: picard/ui/itemviews.py:214 +#: picard/ui/itemviews.py:163 +msgid "Poor match" +msgstr "" + +#: picard/ui/itemviews.py:164 +msgid "Ok match" +msgstr "" + +#: picard/ui/itemviews.py:165 +msgid "Good match" +msgstr "" + +#: picard/ui/itemviews.py:166 +msgid "Great match" +msgstr "" + +#: picard/ui/itemviews.py:167 +msgid "Excellent match" +msgstr "" + +#: picard/ui/itemviews.py:243 msgid "&Expand all" msgstr "" -#: picard/ui/itemviews.py:216 +#: picard/ui/itemviews.py:245 msgid "&Collapse all" msgstr "" -#: picard/ui/itemviews.py:273 +#: picard/ui/itemviews.py:247 +msgid "Select &all" +msgstr "" + +#: picard/ui/itemviews.py:249 +msgid "Ctrl+A" +msgstr "" + +#: picard/ui/itemviews.py:315 msgid "&Other versions" msgstr "" -#: picard/ui/itemviews.py:276 +#: picard/ui/itemviews.py:318 msgid "Loading..." +msgstr "Kraunam..." + +#: picard/ui/itemviews.py:383 +msgid "Collections" msgstr "" -#: picard/ui/itemviews.py:286 -msgid "[no release info]" +#: picard/ui/itemviews.py:386 +msgid "P&lugins" msgstr "" -#: picard/ui/itemviews.py:309 -msgid "&Plugins" +#: picard/ui/itemviews.py:557 +msgid "file view" msgstr "" -#: picard/ui/itemviews.py:527 +#: picard/ui/itemviews.py:558 +msgid "Contains unmatched files and clusters" +msgstr "" + +#: picard/ui/itemviews.py:578 msgid "Clusters" msgstr "" -#: picard/ui/logview.py:30 +#: picard/ui/itemviews.py:587 +msgid "album view" +msgstr "" + +#: picard/ui/itemviews.py:588 +msgid "Contains albums and matched files" +msgstr "" + +#: picard/ui/itemviews.py:694 picard/ui/options/renaming.py:188 +msgid "Error" +msgstr "" + +#: picard/ui/itemviews.py:698 +msgid "Album modified and complete" +msgstr "" + +#: picard/ui/itemviews.py:701 +msgid "Album unchanged and complete" +msgstr "" + +#: picard/ui/itemviews.py:705 +msgid "Album modified" +msgstr "" + +#: picard/ui/itemviews.py:708 +msgid "Album unchanged" +msgstr "" + +#: picard/ui/itemviews.py:811 +msgid "Track saved" +msgstr "" + +#: picard/ui/itemviews.py:813 picard/ui/itemviews.py:817 +msgid "Pending" +msgstr "" + +#: picard/ui/logview.py:109 msgid "Log" msgstr "" -#: picard/ui/mainwindow.py:73 +#: picard/ui/logview.py:113 +msgid "Debug mode" +msgstr "" + +#: picard/ui/logview.py:134 +msgid "Activity History" +msgstr "" + +#: picard/ui/mainwindow.py:82 msgid "MusicBrainz Picard" msgstr "" -#: picard/ui/mainwindow.py:151 +#: picard/ui/mainwindow.py:163 msgid "Unsaved Changes" msgstr "" -#: picard/ui/mainwindow.py:152 +#: picard/ui/mainwindow.py:164 msgid "Are you sure you want to quit Picard?" -msgstr "" +msgstr "Ar tu esi įsitikinęs kad nori išjungti Picard? " -#: picard/ui/mainwindow.py:153 +#: picard/ui/mainwindow.py:165 #, python-format msgid "" "There is %d unsaved file. Closing Picard will lose all unsaved changes." @@ -1568,332 +656,362 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: picard/ui/mainwindow.py:160 +#: picard/ui/mainwindow.py:172 msgid "&Quit Picard" msgstr "" -#: picard/ui/mainwindow.py:210 -msgid "Ready" -msgstr "" - -#: picard/ui/mainwindow.py:214 -msgid "" -"Picard listens on a port to integrate with your browser and downloads " -"release information when you click the \"Tagger\" buttons on the MusicBrainz" -" website" -msgstr "" - #: picard/ui/mainwindow.py:224 -#, python-format -msgid " Files: %(files)d, Pending Files: %(pending)d " +msgid "Ready" +msgstr "Pasiruošęs" + +#: picard/ui/mainwindow.py:228 +msgid "" +"Picard listens on this port to integrate with your browser. When you " +"\"Search\" or \"Open in Browser\" from Picard, clicking the \"Tagger\" " +"button on the web page loads the release into Picard." msgstr "" -#: picard/ui/mainwindow.py:229 +#: picard/ui/mainwindow.py:251 #, python-format msgid " Listening on port %(port)d " msgstr "" -#: picard/ui/mainwindow.py:257 +#: picard/ui/mainwindow.py:307 msgid "Submission Error" msgstr "" -#: picard/ui/mainwindow.py:258 +#: picard/ui/mainwindow.py:308 msgid "" "You need to configure your AcoustID API key before you can submit " "fingerprints." msgstr "" -#: picard/ui/mainwindow.py:265 +#: picard/ui/mainwindow.py:313 msgid "&Options..." msgstr "" -#: picard/ui/mainwindow.py:268 +#: picard/ui/mainwindow.py:317 msgid "&Cut" msgstr "" -#: picard/ui/mainwindow.py:273 +#: picard/ui/mainwindow.py:322 msgid "&Paste" msgstr "" -#: picard/ui/mainwindow.py:278 +#: picard/ui/mainwindow.py:327 msgid "&Help..." msgstr "" -#: picard/ui/mainwindow.py:283 +#: picard/ui/mainwindow.py:331 msgid "&About..." msgstr "" -#: picard/ui/mainwindow.py:286 +#: picard/ui/mainwindow.py:335 msgid "&Donate..." msgstr "" -#: picard/ui/mainwindow.py:289 +#: picard/ui/mainwindow.py:338 msgid "&Report a Bug..." msgstr "" -#: picard/ui/mainwindow.py:292 +#: picard/ui/mainwindow.py:341 msgid "&Support Forum..." msgstr "" -#: picard/ui/mainwindow.py:295 +#: picard/ui/mainwindow.py:344 msgid "&Add Files..." msgstr "" -#: picard/ui/mainwindow.py:296 +#: picard/ui/mainwindow.py:345 msgid "Add files to the tagger" msgstr "" -#: picard/ui/mainwindow.py:301 +#: picard/ui/mainwindow.py:350 msgid "A&dd Folder..." msgstr "" -#: picard/ui/mainwindow.py:302 +#: picard/ui/mainwindow.py:351 msgid "Add a folder to the tagger" msgstr "" -#: picard/ui/mainwindow.py:304 +#: picard/ui/mainwindow.py:353 msgid "Ctrl+D" msgstr "" -#: picard/ui/mainwindow.py:308 +#: picard/ui/mainwindow.py:356 msgid "&Save" msgstr "" -#: picard/ui/mainwindow.py:309 +#: picard/ui/mainwindow.py:357 msgid "Save selected files" msgstr "" -#: picard/ui/mainwindow.py:315 -msgid "S&ubmit" -msgstr "" - -#: picard/ui/mainwindow.py:316 -msgid "Submit fingerprints" -msgstr "" - -#: picard/ui/mainwindow.py:320 -msgid "E&xit" -msgstr "" - -#: picard/ui/mainwindow.py:322 -msgid "Ctrl+Q" -msgstr "" - -#: picard/ui/mainwindow.py:325 -msgid "&Remove" -msgstr "" - -#: picard/ui/mainwindow.py:326 -msgid "Remove selected files/albums" -msgstr "" - -#: picard/ui/mainwindow.py:330 -msgid "Lookup in &Browser" -msgstr "" - -#: picard/ui/mainwindow.py:331 -msgid "Lookup selected item on MusicBrainz website" -msgstr "" - -#: picard/ui/mainwindow.py:335 -msgid "File &Browser" -msgstr "" - -#: picard/ui/mainwindow.py:339 -msgid "Ctrl+B" -msgstr "" - -#: picard/ui/mainwindow.py:342 -msgid "&Cover Art" -msgstr "" - -#: picard/ui/mainwindow.py:348 -msgid "Search" -msgstr "" - -#: picard/ui/mainwindow.py:351 -msgid "&CD Lookup..." -msgstr "" - -#: picard/ui/mainwindow.py:352 picard/ui/mainwindow.py:353 -msgid "Lookup CD" -msgstr "" - -#: picard/ui/mainwindow.py:355 -msgid "Ctrl+K" -msgstr "" - -#: picard/ui/mainwindow.py:358 -msgid "&Scan" -msgstr "" - -#: picard/ui/mainwindow.py:361 -msgid "Ctrl+Y" +#: picard/ui/mainwindow.py:363 +msgid "S&ubmit AcoustIDs" msgstr "" #: picard/ui/mainwindow.py:364 -msgid "Cl&uster" +msgid "Submit acoustic fingerprints" msgstr "" -#: picard/ui/mainwindow.py:367 -msgid "Ctrl+U" +#: picard/ui/mainwindow.py:368 +msgid "E&xit" msgstr "" -#: picard/ui/mainwindow.py:370 -msgid "&Lookup" +#: picard/ui/mainwindow.py:371 +msgid "Ctrl+Q" msgstr "" -#: picard/ui/mainwindow.py:371 picard/ui/mainwindow.py:372 -msgid "Lookup metadata" +#: picard/ui/mainwindow.py:374 +msgid "&Remove" msgstr "" #: picard/ui/mainwindow.py:375 -msgid "Ctrl+L" +msgid "Remove selected files/albums" msgstr "" -#: picard/ui/mainwindow.py:378 -msgid "&Info..." +#: picard/ui/mainwindow.py:379 picard/ui/metadatabox.py:300 +msgid "Lookup in &Browser" msgstr "" -#: picard/ui/mainwindow.py:381 -msgid "Ctrl+I" +#: picard/ui/mainwindow.py:380 +msgid "Lookup selected item on MusicBrainz website" msgstr "" -#: picard/ui/mainwindow.py:384 -msgid "&Refresh" +#: picard/ui/mainwindow.py:383 +msgid "Ctrl+Shift+L" msgstr "" -#: picard/ui/mainwindow.py:385 -msgid "Ctrl+R" +#: picard/ui/mainwindow.py:386 +msgid "Search for similar albums..." msgstr "" -#: picard/ui/mainwindow.py:388 -msgid "&Rename Files" +#: picard/ui/mainwindow.py:387 +msgid "View similar releases and optionally choose a different release" msgstr "" -#: picard/ui/mainwindow.py:393 -msgid "&Move Files" +#: picard/ui/mainwindow.py:390 +msgid "Search for similar tracks..." +msgstr "" + +#: picard/ui/mainwindow.py:391 +msgid "View similar tracks and optionally choose a different release" +msgstr "" + +#: picard/ui/mainwindow.py:394 +msgid "File &Browser" msgstr "" #: picard/ui/mainwindow.py:398 -msgid "Save &Tags" +msgid "Ctrl+B" msgstr "" -#: picard/ui/mainwindow.py:403 -msgid "Tags From &File Names..." +#: picard/ui/mainwindow.py:401 +msgid "&Cover Art" msgstr "" -#: picard/ui/mainwindow.py:406 -msgid "View &Log..." +#: picard/ui/mainwindow.py:407 picard/ui/mainwindow.py:619 +#: picard/ui/searchdialog.py:71 +msgid "Search" +msgstr "" + +#: picard/ui/mainwindow.py:411 +msgid "Lookup &CD..." msgstr "" #: picard/ui/mainwindow.py:412 -msgid "&Open..." +msgid "Lookup the details of the CD in your drive" msgstr "" -#: picard/ui/mainwindow.py:413 -msgid "Open the file" -msgstr "" - -#: picard/ui/mainwindow.py:416 -msgid "Open &Folder..." +#: picard/ui/mainwindow.py:414 +msgid "Ctrl+K" msgstr "" #: picard/ui/mainwindow.py:417 -msgid "Open the containing folder" +msgid "&Scan" msgstr "" -#: picard/ui/mainwindow.py:438 -msgid "&File" +#: picard/ui/mainwindow.py:418 +msgid "" +"Use AcoustID audio fingerprint to identify the files by the actual music, " +"even if they have no metadata" +msgstr "" + +#: picard/ui/mainwindow.py:421 +msgid "Ctrl+Y" +msgstr "" + +#: picard/ui/mainwindow.py:424 +msgid "Cl&uster" +msgstr "" + +#: picard/ui/mainwindow.py:425 +msgid "Cluster files into album clusters" +msgstr "" + +#: picard/ui/mainwindow.py:428 +msgid "Ctrl+U" +msgstr "" + +#: picard/ui/mainwindow.py:431 +msgid "&Lookup" +msgstr "" + +#: picard/ui/mainwindow.py:432 +msgid "Lookup selected items in MusicBrainz" +msgstr "" + +#: picard/ui/mainwindow.py:437 +msgid "Ctrl+L" +msgstr "" + +#: picard/ui/mainwindow.py:440 +msgid "&Info..." +msgstr "" + +#: picard/ui/mainwindow.py:443 +msgid "Ctrl+I" msgstr "" #: picard/ui/mainwindow.py:446 -msgid "&Edit" +msgid "&Refresh" msgstr "" -#: picard/ui/mainwindow.py:452 -msgid "&View" +#: picard/ui/mainwindow.py:447 +msgid "Ctrl+R" +msgstr "" + +#: picard/ui/mainwindow.py:450 +msgid "&Rename Files" +msgstr "" + +#: picard/ui/mainwindow.py:455 +msgid "&Move Files" msgstr "" #: picard/ui/mainwindow.py:460 +msgid "Save &Tags" +msgstr "" + +#: picard/ui/mainwindow.py:465 +msgid "Tags From &File Names..." +msgstr "" + +#: picard/ui/mainwindow.py:469 +msgid "&Open My Collections in Browser" +msgstr "" + +#: picard/ui/mainwindow.py:473 +msgid "View Error/Debug &Log" +msgstr "" + +#: picard/ui/mainwindow.py:476 +msgid "View Activity &History" +msgstr "" + +#: picard/ui/mainwindow.py:483 +msgid "Open in &Player" +msgstr "" + +#: picard/ui/mainwindow.py:484 +msgid "Play the file in your default media player" +msgstr "" + +#: picard/ui/mainwindow.py:488 +msgid "Open Containing &Folder" +msgstr "" + +#: picard/ui/mainwindow.py:489 +msgid "Open the containing folder in your file explorer" +msgstr "" + +#: picard/ui/mainwindow.py:518 +msgid "&File" +msgstr "" + +#: picard/ui/mainwindow.py:529 +msgid "&Edit" +msgstr "" + +#: picard/ui/mainwindow.py:535 +msgid "&View" +msgstr "" + +#: picard/ui/mainwindow.py:541 msgid "&Options" msgstr "" -#: picard/ui/mainwindow.py:466 +#: picard/ui/mainwindow.py:547 msgid "&Tools" msgstr "" -#: picard/ui/mainwindow.py:475 picard/ui/util.py:33 +#: picard/ui/mainwindow.py:558 picard/ui/util.py:35 msgid "&Help" msgstr "" -#: picard/ui/mainwindow.py:493 -msgid "&Toolbar" +#: picard/ui/mainwindow.py:586 +msgid "Actions" msgstr "" -#: picard/ui/mainwindow.py:520 -msgid "&Search Bar" -msgstr "" - -#: picard/ui/mainwindow.py:527 picard/ui/puidsubmit.py:31 +#: picard/ui/mainwindow.py:627 msgid "Track" msgstr "" -#: picard/ui/mainwindow.py:566 +#: picard/ui/mainwindow.py:703 msgid "All Supported Formats" msgstr "" -#: picard/ui/mainwindow.py:624 picard/ui/mainwindow.py:633 -msgid "Various Artists file naming scheme removal" +#: picard/ui/mainwindow.py:730 +#, python-format +msgid "Adding multiple directories from '%(directory)s' ..." msgstr "" -#: picard/ui/mainwindow.py:625 -msgid "" -"The separate file naming scheme for various artists albums has been\n" -"removed in this version of Picard. You currently do not use the this option,\n" -"but have a separate file naming scheme defined. Do you want to remove it or\n" -"merge it with your file naming scheme for single artist albums?" +#: picard/ui/mainwindow.py:735 +#, python-format +msgid "Adding directory: '%(directory)s' ..." msgstr "" -#: picard/ui/mainwindow.py:629 -msgid "Merge" -msgstr "" - -#: picard/ui/mainwindow.py:629 picard/ui/metadatabox.py:185 -msgid "Remove" -msgstr "" - -#: picard/ui/mainwindow.py:634 -msgid "" -"The separate file naming scheme for various artists albums has been\n" -"removed in this version of Picard. Your file naming scheme has automatically\n" -"been merged with that of single artist albums." -msgstr "" - -#: picard/ui/mainwindow.py:682 +#: picard/ui/mainwindow.py:801 msgid "Configuration Required" msgstr "" -#: picard/ui/mainwindow.py:683 +#: picard/ui/mainwindow.py:802 msgid "" "Audio fingerprinting is not yet configured. Would you like to configure it " "now?" msgstr "" -#: picard/ui/mainwindow.py:756 picard/ui/mainwindow.py:763 +#: picard/ui/mainwindow.py:902 #, python-format -msgid " (Error: %s)" +msgid "%(filename)s (error: %(error)s)" msgstr "" -#: picard/ui/metadatabox.py:64 +#: picard/ui/mainwindow.py:908 #, python-format -msgid "(missing from %d item)" -msgid_plural "(missing from %d items)" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "%(filename)s" +msgstr "" -#: picard/ui/metadatabox.py:66 +#: picard/ui/mainwindow.py:918 +#, python-format +msgid "%(filename)s (%(similarity)d%%) (error: %(error)s)" +msgstr "" + +#: picard/ui/mainwindow.py:925 +#, python-format +msgid "%(filename)s (%(similarity)d%%)" +msgstr "" + +#: picard/ui/mainwindow.py:961 +msgid "Authentication Required" +msgstr "" + +#: picard/ui/mainwindow.py:962 +msgid "" +"Picard needs authorization to access your personal data on the MusicBrainz " +"server. Would you like to log in now?" +msgstr "" + +#: picard/ui/metadatabox.py:84 #, python-format msgid "(different across %d item)" msgid_plural "(different across %d items)" @@ -1901,219 +1019,419 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: picard/ui/metadatabox.py:90 +#: picard/ui/metadatabox.py:92 +#, python-format +msgid "(missing from %d item)" +msgid_plural "(missing from %d items)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: picard/ui/metadatabox.py:155 +msgid "metadata view" +msgstr "" + +#: picard/ui/metadatabox.py:156 +msgid "Displays original and new tags for the selected files" +msgstr "" + +#: picard/ui/metadatabox.py:158 msgid "Tag" msgstr "" -#: picard/ui/metadatabox.py:90 +#: picard/ui/metadatabox.py:158 msgid "Original Value" msgstr "" -#: picard/ui/metadatabox.py:90 +#: picard/ui/metadatabox.py:158 msgid "New Value" msgstr "" -#: picard/ui/metadatabox.py:117 +#: picard/ui/metadatabox.py:182 msgid "Add New Tag..." msgstr "" -#: picard/ui/metadatabox.py:119 +#: picard/ui/metadatabox.py:184 msgid "Show Changes First" msgstr "" -#: picard/ui/metadatabox.py:166 +#: picard/ui/metadatabox.py:190 +msgid "Alt+Shift+A" +msgstr "" + +#: picard/ui/metadatabox.py:193 +msgid "Alt+Shift+E" +msgstr "" + +#: picard/ui/metadatabox.py:195 +msgid "Alt+Shift+R" +msgstr "" + +#: picard/ui/metadatabox.py:274 msgid "Edit..." msgstr "" -#: picard/ui/metadatabox.py:189 +#: picard/ui/metadatabox.py:282 +msgid "Add to 'Preserve Tags' List" +msgstr "" + +#: picard/ui/metadatabox.py:286 +msgid "Remove from 'Preserve Tags' List" +msgstr "" + +#: picard/ui/metadatabox.py:319 msgid "Use Original Value" msgid_plural "Use Original Values" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: picard/ui/passworddialog.py:38 +#: picard/ui/passworddialog.py:35 #, python-format msgid "" "The server %s requires you to login. Please enter your username and " "password." msgstr "" -#: picard/ui/passworddialog.py:76 +#: picard/ui/passworddialog.py:55 #, python-format msgid "" "The proxy %s requires you to login. Please enter your username and password." msgstr "" -#: picard/ui/puidsubmit.py:31 picard/ui/options/plugins.py:125 -msgid "File" +#: picard/ui/searchdialog.py:109 picard/ui/ui_options_interface.py:126 +msgid "Use advanced query syntax" msgstr "" -#: picard/ui/puidsubmit.py:31 -msgid "PUID" +#: picard/ui/searchdialog.py:114 +msgid "" +" (Syntax " +"Help)" msgstr "" -#: picard/ui/puidsubmit.py:31 +#: picard/ui/searchdialog.py:228 +msgid "Loading..." +msgstr "" + +#: picard/ui/searchdialog.py:259 +msgid "Retry" +msgstr "" + +#: picard/ui/searchdialog.py:288 +#, python-format +msgid "" +"Following error occurred while fetching " +"results:

Network request error for %s:
%s (QT code %d, " +"HTTP code %s)
" +msgstr "" + +#: picard/ui/searchdialog.py:293 +msgid "" +"No results found. Please try a different search query." +msgstr "" + +#: picard/ui/searchdialog.py:320 picard/ui/searchdialog.py:508 +msgid "Load into Picard" +msgstr "Įkrauk į Picard" + +#: picard/ui/searchdialog.py:322 +msgid "Track Search Results" +msgstr "" + +#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 +#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 +#: picard/ui/options/plugins.py:303 +msgid "Name" +msgstr "Vardas" + +#: picard/ui/searchdialog.py:327 msgid "Release" msgstr "" -#: picard/ui/puidsubmit.py:31 -msgid "Release ID" +#: picard/ui/searchdialog.py:435 +msgid "Standalone Recording" msgstr "" -#: picard/ui/tagsfromfilenames.py:54 picard/ui/tagsfromfilenames.py:99 +#: picard/ui/searchdialog.py:510 +msgid "Album Search Results" +msgstr "" + +#: picard/ui/searchdialog.py:521 picard/util/tags.py:85 +msgid "Language" +msgstr "Kalba" + +#: picard/ui/searchdialog.py:523 picard/ui/ui_options_plugins.py:140 +msgid "Status" +msgstr "" + +#: picard/ui/searchdialog.py:737 +msgid "Show in browser" +msgstr "" + +#: picard/ui/searchdialog.py:738 +msgid "Artist Search Dialog" +msgstr "" + +#: picard/ui/searchdialog.py:742 +msgid "Gender" +msgstr "" + +#: picard/ui/searchdialog.py:743 +msgid "Area" +msgstr "" + +#: picard/ui/searchdialog.py:744 +msgid "Begin" +msgstr "" + +#: picard/ui/searchdialog.py:745 +msgid "Begin Area" +msgstr "" + +#: picard/ui/searchdialog.py:746 +msgid "End" +msgstr "" + +#: picard/ui/searchdialog.py:747 +msgid "End Area" +msgstr "" + +#: picard/ui/tagsfromfilenames.py:65 picard/ui/tagsfromfilenames.py:113 msgid "File Name" msgstr "" -#: picard/ui/ui_cdlookup.py:57 picard/ui/ui_options_cdlookup.py:46 -#: picard/ui/ui_options_cdlookup_select.py:53 picard/ui/options/cdlookup.py:36 +#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 msgid "CD Lookup" msgstr "" -#: picard/ui/ui_cdlookup.py:58 +#: picard/ui/ui_cdlookup.py:54 msgid "The following releases on MusicBrainz match the CD:" msgstr "" -#: picard/ui/ui_cdlookup.py:59 picard/ui/ui_puidsubmit.py:52 +#: picard/ui/ui_cdlookup.py:55 msgid "OK" +msgstr "Gerai" + +#: picard/ui/ui_cdlookup.py:56 +msgid "Lookup manually" msgstr "" -#: picard/ui/ui_cdlookup.py:60 -msgid " Lookup manually " -msgstr "" - -#: picard/ui/ui_cdlookup.py:61 picard/ui/ui_puidsubmit.py:53 +#: picard/ui/ui_cdlookup.py:57 msgid "Cancel" msgstr "" -#: picard/ui/ui_edittagdialog.py:92 +#: picard/ui/ui_edittagdialog.py:88 msgid "Edit Tag" msgstr "" -#: picard/ui/ui_edittagdialog.py:93 +#: picard/ui/ui_edittagdialog.py:89 msgid "Edit value" msgstr "" -#: picard/ui/ui_edittagdialog.py:94 +#: picard/ui/ui_edittagdialog.py:90 msgid "Add value" msgstr "" -#: picard/ui/ui_edittagdialog.py:95 +#: picard/ui/ui_edittagdialog.py:91 msgid "Remove value" msgstr "" -#: picard/ui/ui_infodialog.py:66 -msgid "&Info" -msgstr "" - -#: picard/ui/ui_infodialog.py:67 +#: picard/ui/ui_infodialog.py:71 msgid "A&rtwork" msgstr "" -#: picard/ui/ui_options.py:42 +#: picard/ui/ui_infostatus.py:96 picard/ui/ui_provider_options_caa.py:85 +#: picard/ui/ui_provider_options_local.py:63 +msgid "Form" +msgstr "" + +#: picard/ui/ui_options.py:38 msgid "Options" msgstr "" -#: picard/ui/ui_options_cdlookup.py:47 +#: picard/ui/ui_options_advanced.py:75 +msgid "Advanced options" +msgstr "" + +#: picard/ui/ui_options_advanced.py:76 +msgid "Ignore file paths matching the following regular expression:" +msgstr "" + +#: picard/ui/ui_options_advanced.py:77 +msgid "Ignore hidden files" +msgstr "" + +#: picard/ui/ui_options_advanced.py:78 +msgid "Recursively add files and folders from directory" +msgstr "" + +#: picard/ui/ui_options_advanced.py:79 +msgid "" +"Ignore the following tracks when determining whether a release is complete" +msgstr "" + +#: picard/ui/ui_options_advanced.py:80 +msgid "Video tracks" +msgstr "" + +#: picard/ui/ui_options_advanced.py:81 +msgid "Pregap tracks" +msgstr "" + +#: picard/ui/ui_options_advanced.py:82 +msgid "Data tracks" +msgstr "" + +#: picard/ui/ui_options_advanced.py:83 +msgid "Silent tracks" +msgstr "" + +#: picard/ui/ui_options_cdlookup.py:43 msgid "CD-ROM device to use for lookups:" msgstr "" -#: picard/ui/ui_options_cdlookup_select.py:54 +#: picard/ui/ui_options_cdlookup_select.py:50 msgid "Default CD-ROM drive to use for lookups:" msgstr "" -#: picard/ui/ui_options_cover.py:53 +#: picard/ui/ui_options_cover.py:79 msgid "Location" -msgstr "" +msgstr "Vietą" -#: picard/ui/ui_options_cover.py:54 +#: picard/ui/ui_options_cover.py:80 msgid "Embed cover images into tags" msgstr "" -#: picard/ui/ui_options_cover.py:55 +#: picard/ui/ui_options_cover.py:81 +msgid "Only embed a front image" +msgstr "" + +#: picard/ui/ui_options_cover.py:82 msgid "Save cover images as separate files" msgstr "" -#: picard/ui/ui_options_cover.py:56 +#: picard/ui/ui_options_cover.py:83 +msgid "Use the following file name for images:" +msgstr "" + +#: picard/ui/ui_options_cover.py:84 msgid "Overwrite the file if it already exists" msgstr "" -#: picard/ui/ui_options_fingerprinting.py:74 +#: picard/ui/ui_options_cover.py:85 +msgid "Cover Art Providers" +msgstr "" + +#: picard/ui/ui_options_fingerprinting.py:86 msgid "Audio Fingerprinting" msgstr "" -#: picard/ui/ui_options_fingerprinting.py:75 +#: picard/ui/ui_options_fingerprinting.py:87 +msgid "Do not use audio fingerprinting" +msgstr "" + +#: picard/ui/ui_options_fingerprinting.py:88 msgid "Use AcoustID" -msgstr "" +msgstr "Naudok AcoustID" -#: picard/ui/ui_options_fingerprinting.py:76 -msgid "Use AmpliFIND (formerly MusicDNS)" -msgstr "" - -#: picard/ui/ui_options_fingerprinting.py:77 +#: picard/ui/ui_options_fingerprinting.py:89 msgid "AcoustID Settings" +msgstr "AcoustID Nustatymai" + +#: picard/ui/ui_options_fingerprinting.py:90 +msgid "Ignore existing AcoustID fingerprints" msgstr "" -#: picard/ui/ui_options_fingerprinting.py:78 +#: picard/ui/ui_options_fingerprinting.py:91 msgid "Fingerprint calculator:" msgstr "" -#: picard/ui/ui_options_fingerprinting.py:79 -#: picard/ui/ui_options_renaming.py:138 +#: picard/ui/ui_options_fingerprinting.py:92 +#: picard/ui/ui_options_interface.py:129 picard/ui/ui_options_renaming.py:165 msgid "Browse..." msgstr "" -#: picard/ui/ui_options_fingerprinting.py:80 +#: picard/ui/ui_options_fingerprinting.py:93 msgid "Download..." msgstr "" -#: picard/ui/ui_options_fingerprinting.py:81 +#: picard/ui/ui_options_fingerprinting.py:94 msgid "API key:" msgstr "" -#: picard/ui/ui_options_fingerprinting.py:82 +#: picard/ui/ui_options_fingerprinting.py:95 msgid "Get API key..." msgstr "" -#: picard/ui/ui_options_folksonomy.py:106 picard/ui/options/folksonomy.py:29 +#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 msgid "Folksonomy Tags" msgstr "" -#: picard/ui/ui_options_folksonomy.py:108 +#: picard/ui/ui_options_folksonomy.py:116 +msgid "Ignore tags:" +msgstr "" + +#: picard/ui/ui_options_folksonomy.py:117 msgid "Only use my tags" msgstr "" -#: picard/ui/ui_options_folksonomy.py:111 +#: picard/ui/ui_options_folksonomy.py:118 +msgid "" +"Fall back on album's artists tags if no tags are found for the release or " +"release group" +msgstr "" + +#: picard/ui/ui_options_folksonomy.py:119 +msgid "Minimal tag usage:" +msgstr "" + +#: picard/ui/ui_options_folksonomy.py:120 picard/ui/ui_options_matching.py:75 +#: picard/ui/ui_options_matching.py:76 picard/ui/ui_options_matching.py:77 +msgid " %" +msgstr "" + +#: picard/ui/ui_options_folksonomy.py:121 msgid "Maximum number of tags:" msgstr "" +#: picard/ui/ui_options_folksonomy.py:122 +msgid "Join multiple tags with:" +msgstr "" + +#: picard/ui/ui_options_folksonomy.py:123 +msgid " / " +msgstr "" + +#: picard/ui/ui_options_folksonomy.py:124 +msgid ", " +msgstr "" + #: picard/ui/ui_options_general.py:92 msgid "MusicBrainz Server" msgstr "" -#: picard/ui/ui_options_general.py:93 picard/ui/ui_options_proxy.py:77 +#: picard/ui/ui_options_general.py:93 picard/ui/ui_options_network.py:110 msgid "Port:" msgstr "" -#: picard/ui/ui_options_general.py:94 picard/ui/ui_options_proxy.py:78 +#: picard/ui/ui_options_general.py:94 picard/ui/ui_options_network.py:111 msgid "Server address:" msgstr "" -#: picard/ui/ui_options_general.py:95 -msgid "Account Information" +#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 +msgid "MusicBrainz Account" msgstr "" -#: picard/ui/ui_options_general.py:96 picard/ui/ui_options_proxy.py:75 -#: picard/ui/ui_passworddialog.py:74 -msgid "Password:" +#: picard/ui/ui_options_general.py:96 +msgid "Log in" msgstr "" -#: picard/ui/ui_options_general.py:97 picard/ui/ui_options_proxy.py:76 -#: picard/ui/ui_passworddialog.py:73 -msgid "Username:" +#: picard/ui/ui_options_general.py:97 +msgid "Log out" msgstr "" -#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:29 +#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 msgid "General" msgstr "Bendra" @@ -2125,47 +1443,87 @@ msgstr "" msgid "Ignore MBIDs when loading new files" msgstr "" -#: picard/ui/ui_options_interface.py:58 +#: picard/ui/ui_options_interface.py:122 msgid "Miscellaneous" msgstr "" -#: picard/ui/ui_options_interface.py:59 +#: picard/ui/ui_options_interface.py:123 msgid "Show text labels under icons" msgstr "" -#: picard/ui/ui_options_interface.py:60 +#: picard/ui/ui_options_interface.py:124 msgid "Allow selection of multiple directories" msgstr "" -#: picard/ui/ui_options_interface.py:61 -msgid "Use advanced query syntax" +#: picard/ui/ui_options_interface.py:125 +msgid "Use builtin search rather than looking in browser" msgstr "" -#: picard/ui/ui_options_interface.py:62 +#: picard/ui/ui_options_interface.py:127 msgid "Show a quit confirmation dialog for unsaved changes" msgstr "" -#: picard/ui/ui_options_interface.py:63 +#: picard/ui/ui_options_interface.py:128 +msgid "Begin browsing in the following directory:" +msgstr "" + +#: picard/ui/ui_options_interface.py:130 msgid "User interface language:" msgstr "" -#: picard/ui/ui_options_matching.py:77 +#: picard/ui/ui_options_interface.py:131 +msgid "Customize Action Toolbar" +msgstr "" + +#: picard/ui/ui_options_interface.py:132 +msgid "Add a new button to Toolbar" +msgstr "" + +#: picard/ui/ui_options_interface.py:133 +msgid "Add Action" +msgstr "" + +#: picard/ui/ui_options_interface.py:134 +msgid "Insert a separator" +msgstr "" + +#: picard/ui/ui_options_interface.py:135 +msgid "Add Separator" +msgstr "" + +#: picard/ui/ui_options_interface.py:136 +msgid "Move selected item up" +msgstr "" + +#: picard/ui/ui_options_interface.py:137 picard/ui/ui_options_interface.py:139 +msgid "..." +msgstr "" + +#: picard/ui/ui_options_interface.py:138 +msgid "Move selected item down" +msgstr "" + +#: picard/ui/ui_options_interface.py:140 +msgid "Remove button from toolbar" +msgstr "" + +#: picard/ui/ui_options_matching.py:73 msgid "Thresholds" msgstr "" -#: picard/ui/ui_options_matching.py:78 +#: picard/ui/ui_options_matching.py:74 msgid "Minimal similarity for matching files to tracks:" msgstr "" -#: picard/ui/ui_options_matching.py:82 +#: picard/ui/ui_options_matching.py:78 msgid "Minimal similarity for file lookups:" msgstr "" -#: picard/ui/ui_options_matching.py:83 +#: picard/ui/ui_options_matching.py:79 msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:30 +#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 msgid "Metadata" msgstr "" @@ -2206,51 +1564,64 @@ msgid "Non-album tracks:" msgstr "" #: picard/ui/ui_options_metadata.py:111 picard/ui/ui_options_metadata.py:112 -#: picard/ui/ui_options_renaming.py:147 +#: picard/ui/ui_options_renaming.py:177 +#: picard/ui/ui_provider_options_local.py:65 msgid "Default" msgstr "" -#: picard/ui/ui_options_plugins.py:131 picard/ui/options/plugins.py:37 -msgid "Plugins" -msgstr "" - -#: picard/ui/ui_options_plugins.py:132 picard/ui/options/plugins.py:121 -msgid "Name" -msgstr "" - -#: picard/ui/ui_options_plugins.py:133 picard/util/tags.py:37 -msgid "Version" -msgstr "" - -#: picard/ui/ui_options_plugins.py:134 picard/ui/options/plugins.py:124 -msgid "Author" -msgstr "" - -#: picard/ui/ui_options_plugins.py:135 -msgid "Install plugin..." -msgstr "" - -#: picard/ui/ui_options_plugins.py:136 -msgid "Open plugin folder" -msgstr "" - -#: picard/ui/ui_options_plugins.py:137 -msgid "Download plugins" -msgstr "" - -#: picard/ui/ui_options_plugins.py:138 -msgid "Details" -msgstr "" - -#: picard/ui/ui_options_proxy.py:74 picard/ui/options/proxy.py:28 +#: picard/ui/ui_options_network.py:107 msgid "Web Proxy" msgstr "" -#: picard/ui/ui_options_ratings.py:53 +#: picard/ui/ui_options_network.py:108 picard/ui/ui_passworddialog.py:66 +msgid "Password:" +msgstr "" + +#: picard/ui/ui_options_network.py:109 picard/ui/ui_passworddialog.py:65 +msgid "Username:" +msgstr "" + +#: picard/ui/ui_options_network.py:112 +msgid "Browser Integration" +msgstr "" + +#: picard/ui/ui_options_network.py:113 +msgid "Default listening port:" +msgstr "" + +#: picard/ui/ui_options_network.py:114 +msgid "Listen only on localhost" +msgstr "" + +#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 +msgid "Plugins" +msgstr "" + +#: picard/ui/ui_options_plugins.py:139 +msgid "Version" +msgstr "" + +#: picard/ui/ui_options_plugins.py:141 +msgid "Install plugin..." +msgstr "" + +#: picard/ui/ui_options_plugins.py:142 +msgid "Open plugin folder" +msgstr "" + +#: picard/ui/ui_options_plugins.py:143 +msgid "Reload List of Plugins" +msgstr "" + +#: picard/ui/ui_options_plugins.py:144 +msgid "Details" +msgstr "" + +#: picard/ui/ui_options_ratings.py:49 msgid "Enable track ratings" msgstr "" -#: picard/ui/ui_options_ratings.py:54 +#: picard/ui/ui_options_ratings.py:50 msgid "" "Picard saves the ratings together with an e-mail address identifying the " "user who did the rating. That way different ratings for different users can " @@ -2258,537 +1629,855 @@ msgid "" "your ratings." msgstr "" -#: picard/ui/ui_options_ratings.py:55 +#: picard/ui/ui_options_ratings.py:51 msgid "E-mail:" msgstr "" -#: picard/ui/ui_options_ratings.py:56 +#: picard/ui/ui_options_ratings.py:52 msgid "Submit ratings to MusicBrainz" msgstr "" -#: picard/ui/ui_options_releases.py:215 +#: picard/ui/ui_options_releases.py:104 msgid "Preferred release types" msgstr "" -#: picard/ui/ui_options_releases.py:217 -msgid "Single" -msgstr "" - -#: picard/ui/ui_options_releases.py:218 -msgid "EP" -msgstr "" - -#: picard/ui/ui_options_releases.py:219 picard/util/tags.py:66 -msgid "Compilation" -msgstr "" - -#: picard/ui/ui_options_releases.py:220 -msgid "Soundtrack" -msgstr "" - -#: picard/ui/ui_options_releases.py:221 -msgid "Spokenword" -msgstr "" - -#: picard/ui/ui_options_releases.py:222 -msgid "Interview" -msgstr "" - -#: picard/ui/ui_options_releases.py:223 -msgid "Audiobook" -msgstr "" - -#: picard/ui/ui_options_releases.py:224 -msgid "Live" -msgstr "" - -#: picard/ui/ui_options_releases.py:225 -msgid "Remix" -msgstr "" - -#: picard/ui/ui_options_releases.py:227 -msgid "Reset all" -msgstr "" - -#: picard/ui/ui_options_releases.py:228 +#: picard/ui/ui_options_releases.py:105 msgid "Preferred release countries" msgstr "" -#: picard/ui/ui_options_releases.py:229 picard/ui/ui_options_releases.py:232 +#: picard/ui/ui_options_releases.py:106 picard/ui/ui_options_releases.py:109 msgid ">" msgstr "" -#: picard/ui/ui_options_releases.py:230 picard/ui/ui_options_releases.py:233 +#: picard/ui/ui_options_releases.py:107 picard/ui/ui_options_releases.py:110 msgid "<" msgstr "" -#: picard/ui/ui_options_releases.py:231 +#: picard/ui/ui_options_releases.py:108 msgid "Preferred release formats" msgstr "" -#: picard/ui/ui_options_renaming.py:134 -msgid "Rename files when saving" +#: picard/ui/ui_options_renaming.py:163 +msgid "Move files when saving" msgstr "" -#: picard/ui/ui_options_renaming.py:135 -msgid "Replace non-ASCII characters" +#: picard/ui/ui_options_renaming.py:164 +msgid "Destination directory:" msgstr "" -#: picard/ui/ui_options_renaming.py:136 -msgid "Replace Windows-incompatible characters" +#: picard/ui/ui_options_renaming.py:166 +msgid "Move additional files (case insensitive):" msgstr "" -#: picard/ui/ui_options_renaming.py:137 -msgid "Move files to this directory when saving:" -msgstr "" - -#: picard/ui/ui_options_renaming.py:139 +#: picard/ui/ui_options_renaming.py:167 msgid "Delete empty directories" msgstr "" -#: picard/ui/ui_options_renaming.py:140 -msgid "Move additional files:" +#: picard/ui/ui_options_renaming.py:168 +msgid "Rename files when saving" msgstr "" -#: picard/ui/ui_options_renaming.py:141 +#: picard/ui/ui_options_renaming.py:169 +msgid "Replace non-ASCII characters" +msgstr "" + +#: picard/ui/ui_options_renaming.py:170 +msgid "Windows compatibility" +msgstr "" + +#: picard/ui/ui_options_renaming.py:171 msgid "Name files like this" msgstr "" -#: picard/ui/ui_options_renaming.py:148 +#: picard/ui/ui_options_renaming.py:178 msgid "Examples" msgstr "" -#: picard/ui/ui_options_script.py:49 -msgid "Tagger Script" +#: picard/ui/ui_options_script.py:98 +msgid "Tagger Script(s)" msgstr "" -#: picard/ui/ui_options_tags.py:114 +#: picard/ui/ui_options_script.py:99 picard/ui/ui_options_script.py:100 +msgid "Add new script" +msgstr "" + +#: picard/ui/ui_options_script.py:101 +msgid "Display Name" +msgstr "" + +#: picard/ui/ui_options_tags.py:152 msgid "Write tags to files" msgstr "" -#: picard/ui/ui_options_tags.py:115 +#: picard/ui/ui_options_tags.py:153 msgid "Preserve timestamps of tagged files" msgstr "" -#: picard/ui/ui_options_tags.py:116 -msgid "Before tagging" +#: picard/ui/ui_options_tags.py:154 +msgid "Before Tagging" msgstr "" -#: picard/ui/ui_options_tags.py:117 +#: picard/ui/ui_options_tags.py:155 msgid "Clear existing tags" msgstr "" -#: picard/ui/ui_options_tags.py:118 +#: picard/ui/ui_options_tags.py:156 msgid "Remove ID3 tags from FLAC files" msgstr "" -#: picard/ui/ui_options_tags.py:119 +#: picard/ui/ui_options_tags.py:157 msgid "Remove APEv2 tags from MP3 files" msgstr "" -#: picard/ui/ui_options_tags.py:120 +#: picard/ui/ui_options_tags.py:158 msgid "" "Preserve these tags from being cleared or overwritten with MusicBrainz data:" msgstr "" -#: picard/ui/ui_options_tags.py:121 -msgid "Tags are separated by spaces, and are case-sensitive." +#: picard/ui/ui_options_tags.py:159 +msgid "Tags are separated by commas, and are case-sensitive." msgstr "" -#: picard/ui/ui_options_tags.py:122 -msgid "Tag compatibility" +#: picard/ui/ui_options_tags.py:160 +msgid "Tag Compatibility" msgstr "" -#: picard/ui/ui_options_tags.py:123 -msgid "ID3v2 version" +#: picard/ui/ui_options_tags.py:161 +msgid "ID3v2 Version" msgstr "" -#: picard/ui/ui_options_tags.py:124 +#: picard/ui/ui_options_tags.py:162 msgid "2.4" msgstr "" -#: picard/ui/ui_options_tags.py:125 +#: picard/ui/ui_options_tags.py:163 msgid "2.3" msgstr "" -#: picard/ui/ui_options_tags.py:126 -msgid "Also include ID3v1 tags in the files" +#: picard/ui/ui_options_tags.py:164 +msgid "ID3v2 Text Encoding" msgstr "" -#: picard/ui/ui_options_tags.py:127 -msgid "ID3v2 text encoding" -msgstr "" - -#: picard/ui/ui_options_tags.py:128 +#: picard/ui/ui_options_tags.py:165 msgid "UTF-8" msgstr "" -#: picard/ui/ui_options_tags.py:129 +#: picard/ui/ui_options_tags.py:166 msgid "UTF-16" msgstr "" -#: picard/ui/ui_options_tags.py:130 +#: picard/ui/ui_options_tags.py:167 msgid "ISO-8859-1" msgstr "" -#: picard/ui/ui_passworddialog.py:72 +#: picard/ui/ui_options_tags.py:168 +msgid "Join multiple ID3v2.3 tags with:" +msgstr "" + +#: picard/ui/ui_options_tags.py:169 +msgid "" +"

Default is '/' to maintain compatibility with previous" +" Picard releases.

New alternatives are ';_' or '_/_' or type your own." +"

" +msgstr "" + +#: picard/ui/ui_options_tags.py:170 +msgid "Also include ID3v1 tags in the files" +msgstr "" + +#: picard/ui/ui_passworddialog.py:64 msgid "Authentication required" msgstr "" -#: picard/ui/ui_passworddialog.py:75 -msgid "Save username and password" +#: picard/ui/ui_provider_options_caa.py:86 +msgid "Download only cover art images matching selected types" msgstr "" -#: picard/ui/ui_puidsubmit.py:51 -msgid "Submit PUIDs" +#: picard/ui/ui_provider_options_caa.py:87 +msgid "Select types..." msgstr "" -#: picard/ui/ui_tagsfromfilenames.py:54 +#: picard/ui/ui_provider_options_caa.py:88 +msgid "Only use images of the following size:" +msgstr "" + +#: picard/ui/ui_provider_options_caa.py:89 +msgid "250 px" +msgstr "" + +#: picard/ui/ui_provider_options_caa.py:90 +msgid "500 px" +msgstr "" + +#: picard/ui/ui_provider_options_caa.py:91 +msgid "Full size" +msgstr "" + +#: picard/ui/ui_provider_options_caa.py:92 +msgid "Save only one front image as separate file" +msgstr "" + +#: picard/ui/ui_provider_options_caa.py:93 +msgid "Download only approved images" +msgstr "" + +#: picard/ui/ui_provider_options_caa.py:94 +msgid "" +"Use the first image type as the filename. This will not change the filename " +"of front images." +msgstr "" + +#: picard/ui/ui_provider_options_local.py:64 +msgid "Local cover art files match the following regular expression:" +msgstr "" + +#: picard/ui/ui_provider_options_local.py:66 +msgid "" +"First group in the regular expression, if any, will be used as type, ie. " +"cover-back-spine.jpg will be set as types Back + Spine. If no type is found," +" it will default to Front type." +msgstr "" + +#: picard/ui/ui_tagsfromfilenames.py:50 msgid "Convert File Names to Tags" msgstr "" -#: picard/ui/ui_tagsfromfilenames.py:55 +#: picard/ui/ui_tagsfromfilenames.py:51 msgid "Replace underscores with spaces" msgstr "" -#: picard/ui/ui_tagsfromfilenames.py:56 +#: picard/ui/ui_tagsfromfilenames.py:52 msgid "&Preview" msgstr "" -#: picard/ui/util.py:31 +#: picard/ui/util.py:33 msgid "&Ok" msgstr "" -#: picard/ui/util.py:32 +#: picard/ui/util.py:34 msgid "&Cancel" msgstr "" -#: picard/ui/options/about.py:29 +#: picard/ui/util.py:87 +msgid "Clear entry" +msgstr "" + +#: picard/ui/options/__init__.py:83 +msgid "Regex Error" +msgstr "" + +#: picard/ui/options/about.py:30 msgid "About" msgstr "Apie" -#: picard/ui/options/about.py:48 +#: picard/ui/options/about.py:50 msgid "translator-credits" msgstr "Launchpad Contributions:\n Jonas Slivka https://launchpad.net/~jonas-slivka\n Philipp Wolfer https://launchpad.net/~phw" -#: picard/ui/options/about.py:51 +#: picard/ui/options/about.py:53 #, python-format msgid "
Translated to LANG by %s" msgstr "" -#: picard/ui/options/about.py:55 +#: picard/ui/options/about.py:61 #, python-format msgid "" "

MusicBrainz Picard
\n" "Version %(version)s

\n" +"

\n" +"%(third_parties_versions)s\n" +"

\n" "

Supported formats
%(formats)s

\n" "

Please donate
\n" "Thank you for using Picard. Picard relies on the MusicBrainz database, which is operated by the MetaBrainz Foundation with the help of thousands of volunteers. If you like this application please consider donating to the MetaBrainz Foundation to keep the service running.

\n" -"

Donate now!

\n" +"

Donate now!

\n" "

Credits
\n" -"Copyright © 2004-2011 Robert Kaye, Lukáš Lalinský and others%(translator-credits)s

\n" -"

http://musicbrainz.org/doc/MusicBrainz_Picard

\n" +"Copyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin and others%(translator-credits)s

\n" +"

Official website
%(picard-doc-url)s

\n" msgstr "" -#: picard/ui/options/advanced.py:26 +#: picard/ui/options/advanced.py:30 msgid "Advanced" msgstr "" -#: picard/ui/options/cover.py:29 +#: picard/ui/options/cover.py:34 msgid "Cover Art" msgstr "" +#: picard/ui/options/dialog.py:82 +msgid "&Restore all Defaults" +msgstr "" + +#: picard/ui/options/dialog.py:83 +msgid "Reset all of Picard's settings" +msgstr "" + +#: picard/ui/options/dialog.py:84 +msgid "Restore &Defaults" +msgstr "" + +#: picard/ui/options/dialog.py:85 +msgid "Reset all settings for current option page" +msgstr "" + +#: picard/ui/options/dialog.py:172 +msgid "You are about to reset your options for this page." +msgstr "" + +#: picard/ui/options/dialog.py:176 +msgid "Warning! This will reset all of your settings." +msgstr "" + +#: picard/ui/options/dialog.py:183 +msgid "Confirm Reset" +msgstr "" + +#: picard/ui/options/dialog.py:184 +msgid "Are you sure?" +msgstr "" + #: picard/ui/options/fingerprinting.py:32 msgid "Fingerprinting" msgstr "" -#: picard/ui/options/interface.py:32 +#: picard/ui/options/fingerprinting.py:135 +#: picard/ui/options/fingerprinting.py:139 +msgid "Please select a valid fpcalc executable." +msgstr "" + +#: picard/ui/options/fingerprinting.py:139 +msgid "Invalid fpcalc executable" +msgstr "" + +#: picard/ui/options/general.py:74 +#, python-format +msgid "Logged in as %s." +msgstr "" + +#: picard/ui/options/general.py:88 +msgid "Authorization code:" +msgstr "" + +#: picard/ui/options/interface.py:36 msgid "User Interface" msgstr "" -#: picard/ui/options/interface.py:49 +#: picard/ui/options/interface.py:43 +msgid "Add Folder" +msgstr "" + +#: picard/ui/options/interface.py:47 +msgid "Add Files" +msgstr "" + +#: picard/ui/options/interface.py:51 +msgid "Cluster" +msgstr "" + +#: picard/ui/options/interface.py:55 +msgid "Lookup" +msgstr "" + +#: picard/ui/options/interface.py:59 +msgid "Scan" +msgstr "" + +#: picard/ui/options/interface.py:63 +msgid "Lookup in Browser" +msgstr "" + +#: picard/ui/options/interface.py:67 +msgid "Save" +msgstr "" + +#: picard/ui/options/interface.py:79 +msgid "Submit AcoustIDs" +msgstr "" + +#: picard/ui/options/interface.py:83 +msgid "Open in Player" +msgstr "" + +#: picard/ui/options/interface.py:87 +msgid "Lookup CD..." +msgstr "" + +#: picard/ui/options/interface.py:125 msgid "System default" msgstr "Sistemos numatytoji" -#: picard/ui/options/interface.py:76 +#: picard/ui/options/interface.py:182 msgid "Language changed" msgstr "" -#: picard/ui/options/interface.py:76 +#: picard/ui/options/interface.py:183 msgid "" "You have changed the interface language. You have to restart Picard in order" " for the change to take effect." msgstr "" -#: picard/ui/options/matching.py:29 +#: picard/ui/options/interface.py:207 +msgid "Drag and Drop to re-order" +msgstr "" + +#: picard/ui/options/interface.py:209 picard/ui/options/interface.py:291 +msgid "label" +msgstr "" + +#: picard/ui/options/matching.py:28 msgid "Matching" msgstr "" -#: picard/ui/options/ratings.py:29 +#: picard/ui/options/network.py:29 +msgid "Network" +msgstr "" + +#: picard/ui/options/plugins.py:135 +msgid "No plugins installed." +msgstr "" + +#: picard/ui/options/plugins.py:198 +#, python-format +msgid "The plugin '%s' is not compatible with this version of Picard." +msgstr "" + +#: picard/ui/options/plugins.py:226 +#, python-format +msgid "The plugin '%s' will be upgraded to version %s on next run of Picard." +msgstr "" + +#: picard/ui/options/plugins.py:254 +msgid "Update" +msgstr "" + +#: picard/ui/options/plugins.py:256 +msgid "Install" +msgstr "" + +#: picard/ui/options/plugins.py:271 +msgid "Updated" +msgstr "" + +#: picard/ui/options/plugins.py:273 +msgid "Installed" +msgstr "" + +#: picard/ui/options/plugins.py:297 +msgid "Restart Picard to upgrade to new version" +msgstr "" + +#: picard/ui/options/plugins.py:299 +msgid "New version available" +msgstr "" + +#: picard/ui/options/plugins.py:305 +msgid "Authors" +msgstr "" + +#: picard/ui/options/plugins.py:307 picard/util/tags.py:44 +msgid "License" +msgstr "" + +#: picard/ui/options/plugins.py:338 +#, python-format +msgid "The plugin '%s' could not be downloaded." +msgstr "" + +#: picard/ui/options/plugins.py:339 +msgid "Please try again later." +msgstr "" + +#: picard/ui/options/ratings.py:28 msgid "Ratings" msgstr "" -#: picard/ui/options/releases.py:33 +#: picard/ui/options/releases.py:87 msgid "Preferred Releases" msgstr "" -#: picard/ui/options/renaming.py:34 -msgid "File naming" +#: picard/ui/options/releases.py:121 +msgid "Reset all" msgstr "" -#: picard/ui/options/renaming.py:143 -msgid "Error" +#: picard/ui/options/renaming.py:46 +msgid "File Naming" msgstr "" -#: picard/ui/options/renaming.py:143 +#: picard/ui/options/renaming.py:175 picard/ui/options/scripting.py:410 +msgid "" +"Open Scripting Documentation in " +"your browser" +msgstr "" + +#: picard/ui/options/renaming.py:188 msgid "The location to move files to must not be empty." msgstr "" -#: picard/ui/options/renaming.py:153 +#: picard/ui/options/renaming.py:198 msgid "The file naming format must not be empty." msgstr "" -#: picard/ui/options/scripting.py:63 +#: picard/ui/options/scripting.py:29 +msgid "My script" +msgstr "" + +#: picard/ui/options/scripting.py:128 +msgid "Move script up" +msgstr "" + +#: picard/ui/options/scripting.py:132 +msgid "Move script down" +msgstr "" + +#: picard/ui/options/scripting.py:140 +msgid "Other options" +msgstr "" + +#: picard/ui/options/scripting.py:142 +msgid "Rename script" +msgstr "" + +#: picard/ui/options/scripting.py:143 +msgid "Remove script" +msgstr "" + +#: picard/ui/options/scripting.py:205 msgid "Scripting" msgstr "" -#: picard/ui/options/scripting.py:97 +#: picard/ui/options/scripting.py:293 +msgid "Are you sure you want to remove this script?" +msgstr "" + +#: picard/ui/options/scripting.py:294 +msgid "Confirm Remove" +msgstr "" + +#: picard/ui/options/scripting.py:377 msgid "Script Error" msgstr "" +#: picard/ui/options/tags.py:30 +msgid "Tags" +msgstr "" + +#: picard/util/bytes2human.py:33 +#, python-format +msgid "%s B" +msgstr "" + +#: picard/util/bytes2human.py:34 +#, python-format +msgid "%s kB" +msgstr "" + +#: picard/util/bytes2human.py:35 +#, python-format +msgid "%s KiB" +msgstr "" + +#: picard/util/bytes2human.py:36 +#, python-format +msgid "%s MB" +msgstr "" + +#: picard/util/bytes2human.py:37 +#, python-format +msgid "%s MiB" +msgstr "" + +#: picard/util/bytes2human.py:38 +#, python-format +msgid "%s GB" +msgstr "" + +#: picard/util/bytes2human.py:39 +#, python-format +msgid "%s GiB" +msgstr "" + +#: picard/util/bytes2human.py:40 +#, python-format +msgid "%s TB" +msgstr "" + +#: picard/util/bytes2human.py:41 +#, python-format +msgid "%s TiB" +msgstr "" + +#: picard/util/bytes2human.py:42 +#, python-format +msgid "%s PB" +msgstr "" + +#: picard/util/bytes2human.py:43 +#, python-format +msgid "%s PiB" +msgstr "" + +#: picard/util/bytes2human.py:84 +#, python-format +msgid "%s " +msgstr "" + #: picard/util/tags.py:25 msgid "Original Release Date" msgstr "" #: picard/util/tags.py:26 -msgid "Album Artist" +msgid "Original Year" msgstr "" #: picard/util/tags.py:27 -msgid "Track Number" +msgid "Album Artist" msgstr "" #: picard/util/tags.py:28 -msgid "Total Tracks" +msgid "Track Number" msgstr "" #: picard/util/tags.py:29 -msgid "Disc Number" +msgid "Total Tracks" msgstr "" #: picard/util/tags.py:30 -msgid "Total Discs" +msgid "Disc Number" msgstr "" #: picard/util/tags.py:31 -msgid "Album Artist Sort Order" +msgid "Total Discs" msgstr "" #: picard/util/tags.py:32 -msgid "Artist Sort Order" +msgid "Album Artist Sort Order" msgstr "" #: picard/util/tags.py:33 -msgid "Title Sort Order" +msgid "Artist Sort Order" msgstr "" #: picard/util/tags.py:34 -msgid "Album Sort Order" +msgid "Title Sort Order" msgstr "" #: picard/util/tags.py:35 -msgid "ASIN" +msgid "Album Sort Order" msgstr "" #: picard/util/tags.py:36 -msgid "Grouping" +msgid "Composer Sort Order" +msgstr "" + +#: picard/util/tags.py:37 +msgid "ASIN" msgstr "" #: picard/util/tags.py:38 -msgid "ISRC" +msgid "Grouping" msgstr "" #: picard/util/tags.py:39 -msgid "Mood" +msgid "ISRC" msgstr "" #: picard/util/tags.py:40 -msgid "BPM" +msgid "Mood" msgstr "" #: picard/util/tags.py:41 -msgid "Copyright" +msgid "BPM" msgstr "" #: picard/util/tags.py:42 -msgid "License" +msgid "Key" msgstr "" #: picard/util/tags.py:43 -msgid "Composer" -msgstr "" - -#: picard/util/tags.py:44 -msgid "Writer" +msgid "Copyright" msgstr "" #: picard/util/tags.py:45 -msgid "Conductor" +msgid "Composer" msgstr "" #: picard/util/tags.py:46 -msgid "Lyricist" +msgid "Writer" msgstr "" #: picard/util/tags.py:47 -msgid "Arranger" +msgid "Conductor" msgstr "" #: picard/util/tags.py:48 -msgid "Producer" +msgid "Lyricist" msgstr "" #: picard/util/tags.py:49 -msgid "Engineer" +msgid "Arranger" msgstr "" #: picard/util/tags.py:50 -msgid "Subtitle" +msgid "Producer" msgstr "" #: picard/util/tags.py:51 -msgid "Disc Subtitle" +msgid "Engineer" msgstr "" #: picard/util/tags.py:52 -msgid "Remixer" +msgid "Subtitle" msgstr "" #: picard/util/tags.py:53 -msgid "MusicBrainz Recording Id" +msgid "Disc Subtitle" msgstr "" #: picard/util/tags.py:54 -msgid "MusicBrainz Release Id" +msgid "Remixer" msgstr "" #: picard/util/tags.py:55 -msgid "MusicBrainz Artist Id" +msgid "MusicBrainz Recording Id" msgstr "" #: picard/util/tags.py:56 -msgid "MusicBrainz Release Artist Id" +msgid "MusicBrainz Track Id" msgstr "" #: picard/util/tags.py:57 -msgid "MusicBrainz Work Id" +msgid "MusicBrainz Release Id" msgstr "" #: picard/util/tags.py:58 -msgid "MusicBrainz Disc Id" +msgid "MusicBrainz Artist Id" msgstr "" #: picard/util/tags.py:59 -msgid "MusicBrainz Sort Name" +msgid "MusicBrainz Release Artist Id" msgstr "" #: picard/util/tags.py:60 -msgid "MusicIP PUID" +msgid "MusicBrainz Work Id" msgstr "" #: picard/util/tags.py:61 -msgid "MusicIP Fingerprint" +msgid "MusicBrainz Release Group Id" msgstr "" #: picard/util/tags.py:62 -msgid "AcoustID" +msgid "MusicBrainz Disc Id" msgstr "" #: picard/util/tags.py:63 -msgid "AcoustID Fingerprint" +msgid "MusicIP PUID" msgstr "" #: picard/util/tags.py:64 -msgid "Disc Id" +msgid "MusicIP Fingerprint" msgstr "" #: picard/util/tags.py:65 -msgid "Website" +msgid "AcoustID" +msgstr "" + +#: picard/util/tags.py:66 +msgid "AcoustID Fingerprint" msgstr "" #: picard/util/tags.py:67 -msgid "Comment" +msgid "Disc Id" msgstr "" #: picard/util/tags.py:68 -msgid "Genre" +msgid "Artist Website" msgstr "" #: picard/util/tags.py:69 -msgid "Encoded By" +msgid "Compilation (iTunes)" msgstr "" #: picard/util/tags.py:70 -msgid "Performer" +msgid "Comment" msgstr "" #: picard/util/tags.py:71 -msgid "Release Type" +msgid "Genre" msgstr "" #: picard/util/tags.py:72 -msgid "Release Status" +msgid "Encoded By" msgstr "" #: picard/util/tags.py:73 -msgid "Release Country" +msgid "Encoder Settings" msgstr "" #: picard/util/tags.py:74 -msgid "Record Label" +msgid "Performer" +msgstr "" + +#: picard/util/tags.py:75 +msgid "Release Type" msgstr "" #: picard/util/tags.py:76 -msgid "Catalog Number" +msgid "Release Status" msgstr "" #: picard/util/tags.py:77 -msgid "Format" +msgid "Release Country" msgstr "" #: picard/util/tags.py:78 -msgid "DJ-Mixer" -msgstr "" - -#: picard/util/tags.py:79 -msgid "Media" +msgid "Record Label" msgstr "" #: picard/util/tags.py:80 -msgid "Lyrics" +msgid "Catalog Number" msgstr "" #: picard/util/tags.py:81 -msgid "Mixer" +msgid "DJ-Mixer" msgstr "" #: picard/util/tags.py:82 -msgid "Language" -msgstr "Kalba" +msgid "Media" +msgstr "" #: picard/util/tags.py:83 +msgid "Lyrics" +msgstr "" + +#: picard/util/tags.py:84 +msgid "Mixer" +msgstr "" + +#: picard/util/tags.py:86 msgid "Script" msgstr "" -#: picard/util/tags.py:85 +#: picard/util/tags.py:88 msgid "Rating" msgstr "" -#: picard/util/webbrowser2.py:88 +#: picard/util/tags.py:89 +msgid "Artists" +msgstr "" + +#: picard/util/tags.py:90 +msgid "Work" +msgstr "" + +#: picard/util/versions.py:47 +msgid "is not installed" +msgstr "" + +#: picard/util/webbrowser2.py:90 msgid "Web Browser Error" msgstr "" -#: picard/util/webbrowser2.py:88 +#: picard/util/webbrowser2.py:90 #, python-format msgid "" "Error while launching a web browser:\n" diff --git a/po/nb.po b/po/nb.po index c66a1e8e5..41f6c63a8 100644 --- a/po/nb.po +++ b/po/nb.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2017-01-23 14:00+0100\n" -"PO-Revision-Date: 2017-02-09 19:13+0000\n" +"PO-Revision-Date: 2017-02-13 12:45+0000\n" "Last-Translator: CatQuest, The Endeavouring Cat\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/musicbrainz/musicbrainz/language/nb/)\n" "MIME-Version: 1.0\n" @@ -44,7 +44,7 @@ msgstr "Søker opp lydavtrykk for fil \"%(filename)s\" ..." #: picard/acoustidmanager.py:82 msgid "Submitting AcoustIDs ..." -msgstr "Sender AcoustIDer..." +msgstr "Sender inn AcoustID..." #: picard/acoustidmanager.py:103 #, python-format @@ -57,7 +57,7 @@ msgstr "AcoustIDer sendt inn." #: picard/album.py:70 picard/cluster.py:272 msgid "Unmatched Files" -msgstr "Usamsvarende filer" +msgstr "Ufiltrerte filer" #: picard/album.py:206 #, python-format @@ -98,7 +98,7 @@ msgstr "Filklynge %(album)s identifisert!" #: picard/cluster.py:196 #, python-format msgid "Looking up the metadata for cluster %(album)s..." -msgstr "Søker opp metadata for filklynge %(album)s..." +msgstr "Ser etter metadata for filklynge %(album)s..." #: picard/collection.py:64 #, python-format diff --git a/po/pl.po b/po/pl.po index 147c6b360..9b191f4a2 100644 --- a/po/pl.po +++ b/po/pl.po @@ -21,7 +21,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 1.3\n" "Language: pl\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: picard/acoustid.py:111 #, python-format @@ -86,6 +86,7 @@ msgid_plural "; %i images" msgstr[0] "%i grafika" msgstr[1] "%i grafiki" msgstr[2] "%i grafik" +msgstr[3] "%i grafik" #: picard/cluster.py:166 picard/cluster.py:179 #, python-format @@ -109,6 +110,7 @@ msgid_plural "Added %(count)i releases to collection \"%(name)s\"" msgstr[0] "Dodano %(count)i wydanie do kolekcji \"%(name)s\"" msgstr[1] "Dodano %(count)i wydania do kolekcji \"%(name)s\"" msgstr[2] "Dodano %(count)i wydań do kolekcji \"%(name)s\"" +msgstr[3] "Dodano %(count)i wydań do kolekcji \"%(name)s\"" #: picard/collection.py:86 #, python-format @@ -117,6 +119,7 @@ msgid_plural "Removed %(count)i releases from collection \"%(name)s\"" msgstr[0] "Usunięto %(count)i wydanie z kolekcji \"%(name)s\"" msgstr[1] "Usunięto %(count)i wydania z kolekcji \"%(name)s\"" msgstr[2] "Usunięto %(count)i wydań z kolekcji \"%(name)s\"" +msgstr[3] "Usunięto %(count)i wydań z kolekcji \"%(name)s\"" #: picard/collection.py:100 #, python-format @@ -219,6 +222,7 @@ msgid_plural "Adding %(count)d files from '%(directory)s' ..." msgstr[0] "Dodawanie %(count)d pliku z '%(directory)s' ..." msgstr[1] "Dodawanie %(count)d plików z '%(directory)s' ..." msgstr[2] "Dodawanie %(count)d plików z '%(directory)s' ..." +msgstr[3] "Dodawanie %(count)d plików z '%(directory)s' ..." #: picard/tagger.py:597 #, python-format @@ -379,6 +383,7 @@ msgid_plural "%s (%i releases)" msgstr[0] "%s (%i wydanie)" msgstr[1] "%s (%i wydania)" msgstr[2] "%s (%i wydań)" +msgstr[3] "%s (%i wydań)" #: picard/ui/coverartbox.py:143 msgid "View release on MusicBrainz" @@ -658,6 +663,7 @@ msgid_plural "" msgstr[0] "%d plik posiada niezapisane zmiany. Zamykając program Picard utracisz zmiany dokonane na tym pliku." msgstr[1] "%d pliki posiadają niezapisane zmiany. Zamykając program Picard utracisz zmiany dokonane na tych plikach." msgstr[2] "%d plików posiada niezapisane zmiany. Zamykając program Picard utracisz zmiany dokonane na tych plikach." +msgstr[3] "%d plików posiada niezapisane zmiany. Zamykając program Picard utracisz zmiany dokonane na tych plikach." #: picard/ui/mainwindow.py:172 msgid "&Quit Picard" @@ -1021,6 +1027,7 @@ msgid_plural "(different across %d items)" msgstr[0] "(różne pośród %d pozycji)" msgstr[1] "(różne pośród %d pozycji)" msgstr[2] "(różne pośród %d pozycji)" +msgstr[3] "(różne pośród %d pozycji)" #: picard/ui/metadatabox.py:92 #, python-format @@ -1029,6 +1036,7 @@ msgid_plural "(missing from %d items)" msgstr[0] "(brak w %d elemencie)" msgstr[1] "(brak w %d elementach)" msgstr[2] "(brak w %d elementach)" +msgstr[3] "(brak w %d elementach)" #: picard/ui/metadatabox.py:155 msgid "metadata view" @@ -1088,6 +1096,7 @@ msgid_plural "Use Original Values" msgstr[0] "Użyj oryginalnej wartości" msgstr[1] "Użyj oryginalnych wartości" msgstr[2] "Użyj oryginalnych wartości" +msgstr[3] "Użyj oryginalnych wartości" #: picard/ui/passworddialog.py:35 #, python-format diff --git a/po/pt_BR.po b/po/pt_BR.po index 88b4fdad0..7f45de2e7 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -5,6 +5,7 @@ # Translators: # Alex Luís Silva , 2015 # André Aparecido Caniato , 2015 +# Daniel Biasotto , 2017 # FIRST AUTHOR , 2006 # Gleriston Sampaio , 2016 # Ivan Noleto , 2016 @@ -17,8 +18,8 @@ msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2017-01-23 14:00+0100\n" -"PO-Revision-Date: 2017-01-19 09:17+0000\n" -"Last-Translator: nikki\n" +"PO-Revision-Date: 2017-02-11 05:07+0000\n" +"Last-Translator: Marco Costa \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/musicbrainz/musicbrainz/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -54,7 +55,7 @@ msgstr "Enviando AcoustIDs ..." #: picard/acoustidmanager.py:103 #, python-format msgid "AcoustID submission failed with error '%(error)s': %(message)s" -msgstr "" +msgstr "O envio do AcoustID falhou com o erro '%(error)s': %(message)s" #: picard/acoustidmanager.py:111 msgid "AcoustIDs successfully submitted." @@ -153,7 +154,7 @@ msgstr "Remover" #: picard/config_upgrade.py:193 picard/ui/options/scripting.py:28 #, python-format msgid "My script %d" -msgstr "" +msgstr "Meu script %d" #: picard/file.py:541 #, python-format @@ -178,7 +179,7 @@ msgstr "Procurando metadados para o arquivo %(filename)s ..." #: picard/plugin.py:434 #, python-format msgid "Error loading plugins list: %(error)s" -msgstr "" +msgstr "Erro ao carregar lista de plugins: %(error)s" #: picard/releasegroup.py:53 picard/ui/searchdialog.py:515 msgid "Tracks" @@ -330,15 +331,15 @@ msgstr "Arquivo de Artes de Capa" #: picard/coverart/providers/caa_release_group.py:41 msgid "CAA Release Group" -msgstr "" +msgstr "Grupo de Álbum CAA" #: picard/coverart/providers/local.py:65 msgid "Local Files" -msgstr "" +msgstr "Arquivos Locais" #: picard/coverart/providers/whitelist.py:38 msgid "Whitelist" -msgstr "" +msgstr "Lista Branca" #: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:625 picard/util/tags.py:21 msgid "Album" @@ -397,21 +398,21 @@ msgstr "&Definir como pasta inicial" #: picard/ui/infodialog.py:46 msgid "Existing Cover" -msgstr "" +msgstr "Capa Existente" #: picard/ui/infodialog.py:46 picard/ui/infodialog.py:52 #: picard/ui/searchdialog.py:330 picard/ui/searchdialog.py:522 #: picard/ui/searchdialog.py:741 msgid "Type" -msgstr "" +msgstr "Tipo" #: picard/ui/infodialog.py:47 msgid "New Cover" -msgstr "" +msgstr "Nova Capa" #: picard/ui/infodialog.py:52 picard/ui/searchdialog.py:524 msgid "Cover" -msgstr "" +msgstr "Capa" #: picard/ui/infodialog.py:122 picard/ui/infodialog.py:237 #: picard/ui/options/interface.py:71 @@ -522,27 +523,27 @@ msgstr "Duração" #: picard/ui/itemviews.py:162 msgid "Bad match" -msgstr "" +msgstr "Correspondência muito ruim" #: picard/ui/itemviews.py:163 msgid "Poor match" -msgstr "" +msgstr "Correspondência ruim" #: picard/ui/itemviews.py:164 msgid "Ok match" -msgstr "" +msgstr "Correspondência razoável" #: picard/ui/itemviews.py:165 msgid "Good match" -msgstr "" +msgstr "Correspondência boa" #: picard/ui/itemviews.py:166 msgid "Great match" -msgstr "" +msgstr "Correspondência ótima" #: picard/ui/itemviews.py:167 msgid "Excellent match" -msgstr "" +msgstr "Correspondência excelente" #: picard/ui/itemviews.py:243 msgid "&Expand all" @@ -554,11 +555,11 @@ msgstr "Fe&char todos" #: picard/ui/itemviews.py:247 msgid "Select &all" -msgstr "" +msgstr "Selecionar &all" #: picard/ui/itemviews.py:249 msgid "Ctrl+A" -msgstr "" +msgstr "Ctrl+A" #: picard/ui/itemviews.py:315 msgid "&Other versions" @@ -602,27 +603,27 @@ msgstr "Erro" #: picard/ui/itemviews.py:698 msgid "Album modified and complete" -msgstr "" +msgstr "Álbum modificado e completo" #: picard/ui/itemviews.py:701 msgid "Album unchanged and complete" -msgstr "" +msgstr "Álbum inalterado e completo" #: picard/ui/itemviews.py:705 msgid "Album modified" -msgstr "" +msgstr "Álbum modificado" #: picard/ui/itemviews.py:708 msgid "Album unchanged" -msgstr "" +msgstr "Álbum inalterado" #: picard/ui/itemviews.py:811 msgid "Track saved" -msgstr "" +msgstr "Faixa salva" #: picard/ui/itemviews.py:813 picard/ui/itemviews.py:817 msgid "Pending" -msgstr "" +msgstr "Pendente" #: picard/ui/logview.py:109 msgid "Log" @@ -749,7 +750,7 @@ msgstr "Salvar os arquivos selecionados" #: picard/ui/mainwindow.py:363 msgid "S&ubmit AcoustIDs" -msgstr "" +msgstr "E%nviar AcoustIDs" #: picard/ui/mainwindow.py:364 msgid "Submit acoustic fingerprints" @@ -781,23 +782,23 @@ msgstr "Pesquisar o item selecionado no site MusicBrainz" #: picard/ui/mainwindow.py:383 msgid "Ctrl+Shift+L" -msgstr "" +msgstr "Ctrl+Shift+L" #: picard/ui/mainwindow.py:386 msgid "Search for similar albums..." -msgstr "" +msgstr "Procurar por álbums similares" #: picard/ui/mainwindow.py:387 msgid "View similar releases and optionally choose a different release" -msgstr "" +msgstr "Ver álbums similares e opcionalmente escolher um álbum diferente" #: picard/ui/mainwindow.py:390 msgid "Search for similar tracks..." -msgstr "" +msgstr "Procurar por faixas similares" #: picard/ui/mainwindow.py:391 msgid "View similar tracks and optionally choose a different release" -msgstr "" +msgstr "Ver faixas similares e opcionalmente escolher um álbum diferente" #: picard/ui/mainwindow.py:394 msgid "File &Browser" @@ -836,7 +837,7 @@ msgstr "&Verificar" msgid "" "Use AcoustID audio fingerprint to identify the files by the actual music, " "even if they have no metadata" -msgstr "" +msgstr "Usar impressões digitais de áudio AcoustID para identificar os arquivos pela música, mesmo que eles não tenham metadados" #: picard/ui/mainwindow.py:421 msgid "Ctrl+Y" @@ -848,7 +849,7 @@ msgstr "&Grupo" #: picard/ui/mainwindow.py:425 msgid "Cluster files into album clusters" -msgstr "" +msgstr "Agrupar arquivos em grupos de álbum" #: picard/ui/mainwindow.py:428 msgid "Ctrl+U" @@ -912,7 +913,7 @@ msgstr "Ver &histórico de atividades" #: picard/ui/mainwindow.py:483 msgid "Open in &Player" -msgstr "" +msgstr "Abrir no &Reprodutor" #: picard/ui/mainwindow.py:484 msgid "Play the file in your default media player" @@ -1056,15 +1057,15 @@ msgstr "Exibir alterações primeiro" #: picard/ui/metadatabox.py:190 msgid "Alt+Shift+A" -msgstr "" +msgstr "Alt+Shift+A" #: picard/ui/metadatabox.py:193 msgid "Alt+Shift+E" -msgstr "" +msgstr "Alt+Shift+E" #: picard/ui/metadatabox.py:195 msgid "Alt+Shift+R" -msgstr "" +msgstr "Alt+Shift+R" #: picard/ui/metadatabox.py:274 msgid "Edit..." @@ -1072,11 +1073,11 @@ msgstr "Editar..." #: picard/ui/metadatabox.py:282 msgid "Add to 'Preserve Tags' List" -msgstr "" +msgstr "Adicionar à Lista 'Preservar Etiquetas'" #: picard/ui/metadatabox.py:286 msgid "Remove from 'Preserve Tags' List" -msgstr "" +msgstr "Remover da Lista 'Preservar Etiquetas'" #: picard/ui/metadatabox.py:319 msgid "Use Original Value" @@ -1105,15 +1106,15 @@ msgstr "Usar sintaxe de consulta avançada" msgid "" " (Syntax " "Help)" -msgstr "" +msgstr " (Ajuda de Síntaxe)" #: picard/ui/searchdialog.py:228 msgid "Loading..." -msgstr "" +msgstr "Carregando..." #: picard/ui/searchdialog.py:259 msgid "Retry" -msgstr "" +msgstr "Tentar novamente" #: picard/ui/searchdialog.py:288 #, python-format @@ -1121,20 +1122,20 @@ msgid "" "Following error occurred while fetching " "results:

Network request error for %s:
%s (QT code %d, " "HTTP code %s)
" -msgstr "" +msgstr "Ocorreu o seguinte erro ao buscar resultados:

Erro de solicitação de rede para %s:
%s (Código QT %d, código HTTP %s)
" #: picard/ui/searchdialog.py:293 msgid "" "No results found. Please try a different search query." -msgstr "" +msgstr "Nenhum resultado encontrado. Por favor tente um termo de busca diferente." #: picard/ui/searchdialog.py:320 picard/ui/searchdialog.py:508 msgid "Load into Picard" -msgstr "" +msgstr "Carregar no Picard" #: picard/ui/searchdialog.py:322 msgid "Track Search Results" -msgstr "" +msgstr "Resultados de Busca da Faixa" #: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 #: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 @@ -1144,15 +1145,15 @@ msgstr "Nome" #: picard/ui/searchdialog.py:327 msgid "Release" -msgstr "" +msgstr "Álbum" #: picard/ui/searchdialog.py:435 msgid "Standalone Recording" -msgstr "" +msgstr "Gravação Solo" #: picard/ui/searchdialog.py:510 msgid "Album Search Results" -msgstr "" +msgstr "Resultados de Busca de Álbum" #: picard/ui/searchdialog.py:521 picard/util/tags.py:85 msgid "Language" @@ -1160,39 +1161,39 @@ msgstr "Idioma" #: picard/ui/searchdialog.py:523 picard/ui/ui_options_plugins.py:140 msgid "Status" -msgstr "" +msgstr "Status" #: picard/ui/searchdialog.py:737 msgid "Show in browser" -msgstr "" +msgstr "Mostrar no navegador" #: picard/ui/searchdialog.py:738 msgid "Artist Search Dialog" -msgstr "" +msgstr "Diálogo de Busca de Artista" #: picard/ui/searchdialog.py:742 msgid "Gender" -msgstr "" +msgstr "Gênero" #: picard/ui/searchdialog.py:743 msgid "Area" -msgstr "" +msgstr "Área" #: picard/ui/searchdialog.py:744 msgid "Begin" -msgstr "" +msgstr "Início" #: picard/ui/searchdialog.py:745 msgid "Begin Area" -msgstr "" +msgstr "Área de Início" #: picard/ui/searchdialog.py:746 msgid "End" -msgstr "" +msgstr "Término" #: picard/ui/searchdialog.py:747 msgid "End Area" -msgstr "" +msgstr "Área de Término" #: picard/ui/tagsfromfilenames.py:65 picard/ui/tagsfromfilenames.py:113 msgid "File Name" @@ -1262,28 +1263,28 @@ msgstr "Ignorar arquivos ocultos" #: picard/ui/ui_options_advanced.py:78 msgid "Recursively add files and folders from directory" -msgstr "" +msgstr "Adicionar recursivamente arquivos e pastas do diretório" #: picard/ui/ui_options_advanced.py:79 msgid "" "Ignore the following tracks when determining whether a release is complete" -msgstr "" +msgstr "Ignorar as seguintes faixas ao determinar se um álbum está completo" #: picard/ui/ui_options_advanced.py:80 msgid "Video tracks" -msgstr "" +msgstr "Faixas de vídeo" #: picard/ui/ui_options_advanced.py:81 msgid "Pregap tracks" -msgstr "" +msgstr "Faixas de pregap" #: picard/ui/ui_options_advanced.py:82 msgid "Data tracks" -msgstr "" +msgstr "Faixas de dados" #: picard/ui/ui_options_advanced.py:83 msgid "Silent tracks" -msgstr "" +msgstr "Faixas mudas" #: picard/ui/ui_options_cdlookup.py:43 msgid "CD-ROM device to use for lookups:" @@ -1319,7 +1320,7 @@ msgstr "Substituir o arquivo se já existir" #: picard/ui/ui_options_cover.py:85 msgid "Cover Art Providers" -msgstr "" +msgstr "Provedores de capa" #: picard/ui/ui_options_fingerprinting.py:86 msgid "Audio Fingerprinting" @@ -1339,7 +1340,7 @@ msgstr "Configurações do AcoustID" #: picard/ui/ui_options_fingerprinting.py:90 msgid "Ignore existing AcoustID fingerprints" -msgstr "" +msgstr "Ignorar impressões digitais AcoustID existentes" #: picard/ui/ui_options_fingerprinting.py:91 msgid "Fingerprint calculator:" @@ -1378,7 +1379,7 @@ msgstr "Use somente minhas tags" msgid "" "Fall back on album's artists tags if no tags are found for the release or " "release group" -msgstr "" +msgstr "Retornar às etiquetas do artista do álbum se não forem encontradas etiquetas para o álbum ou grupo de álbum" #: picard/ui/ui_options_folksonomy.py:119 msgid "Minimal tag usage:" @@ -1455,7 +1456,7 @@ msgstr "Permitir a seleção de várias pastas" #: picard/ui/ui_options_interface.py:125 msgid "Use builtin search rather than looking in browser" -msgstr "" +msgstr "Usar busca embutida em vez de procurar no navegador" #: picard/ui/ui_options_interface.py:127 msgid "Show a quit confirmation dialog for unsaved changes" @@ -1471,39 +1472,39 @@ msgstr "Interface de linguagem do usuário:" #: picard/ui/ui_options_interface.py:131 msgid "Customize Action Toolbar" -msgstr "" +msgstr "Personalizar Barra de Ferramentas de Ação" #: picard/ui/ui_options_interface.py:132 msgid "Add a new button to Toolbar" -msgstr "" +msgstr "Adicionar novo botão na Barra de Ferramentas" #: picard/ui/ui_options_interface.py:133 msgid "Add Action" -msgstr "" +msgstr "Adicionar Ação" #: picard/ui/ui_options_interface.py:134 msgid "Insert a separator" -msgstr "" +msgstr "Insira um separador" #: picard/ui/ui_options_interface.py:135 msgid "Add Separator" -msgstr "" +msgstr "Adicionar Separador" #: picard/ui/ui_options_interface.py:136 msgid "Move selected item up" -msgstr "" +msgstr "Mover item selecionado para cima" #: picard/ui/ui_options_interface.py:137 picard/ui/ui_options_interface.py:139 msgid "..." -msgstr "" +msgstr "..." #: picard/ui/ui_options_interface.py:138 msgid "Move selected item down" -msgstr "" +msgstr "Mover item selecionado para baixo" #: picard/ui/ui_options_interface.py:140 msgid "Remove button from toolbar" -msgstr "" +msgstr "Remover botão da barra de ferramentas" #: picard/ui/ui_options_matching.py:73 msgid "Thresholds" @@ -1609,7 +1610,7 @@ msgstr "Abrir o diretório de plugins" #: picard/ui/ui_options_plugins.py:143 msgid "Reload List of Plugins" -msgstr "" +msgstr "Recarregar Lista de Plugins" #: picard/ui/ui_options_plugins.py:144 msgid "Details" @@ -1657,15 +1658,15 @@ msgstr "Formatos preferidos de lançamento" #: picard/ui/ui_options_renaming.py:163 msgid "Move files when saving" -msgstr "" +msgstr "Mover arquivos ao salvar" #: picard/ui/ui_options_renaming.py:164 msgid "Destination directory:" -msgstr "" +msgstr "Diretório de destino" #: picard/ui/ui_options_renaming.py:166 msgid "Move additional files (case insensitive):" -msgstr "" +msgstr "Mover arquivos adicionais (não diferencia maiúsculas):" #: picard/ui/ui_options_renaming.py:167 msgid "Delete empty directories" @@ -1693,15 +1694,15 @@ msgstr "Exemplos" #: picard/ui/ui_options_script.py:98 msgid "Tagger Script(s)" -msgstr "" +msgstr "Script(s) de Etiquetador" #: picard/ui/ui_options_script.py:99 picard/ui/ui_options_script.py:100 msgid "Add new script" -msgstr "" +msgstr "Adicionar novo script" #: picard/ui/ui_options_script.py:101 msgid "Display Name" -msgstr "" +msgstr "Mostrar Nome" #: picard/ui/ui_options_tags.py:152 msgid "Write tags to files" @@ -1813,7 +1814,7 @@ msgstr "Tamanho completo" #: picard/ui/ui_provider_options_caa.py:92 msgid "Save only one front image as separate file" -msgstr "" +msgstr "Salvar apenas uma imagem frontal como arquivo separado" #: picard/ui/ui_provider_options_caa.py:93 msgid "Download only approved images" @@ -1827,14 +1828,14 @@ msgstr "Usar o primeiro tipo de imagem como o nome do arquivo. Isso não mudará #: picard/ui/ui_provider_options_local.py:64 msgid "Local cover art files match the following regular expression:" -msgstr "" +msgstr "Arquivos locais de capa correspondem à seguinte expressão regular:" #: picard/ui/ui_provider_options_local.py:66 msgid "" "First group in the regular expression, if any, will be used as type, ie. " "cover-back-spine.jpg will be set as types Back + Spine. If no type is found," " it will default to Front type." -msgstr "" +msgstr "O primeiro grupo na expressão regular, se existente, será usado como tipo, i.e. cover-back-spine.jpg será definido como tipos Verso + Espinha. Se nenhum tipo for encontrado, será usado o tipo padrão Frente." #: picard/ui/ui_tagsfromfilenames.py:50 msgid "Convert File Names to Tags" @@ -1892,7 +1893,7 @@ msgid "" "

Credits
\n" "Copyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin and others%(translator-credits)s

\n" "

Official website
%(picard-doc-url)s

\n" -msgstr "" +msgstr "

MusicBrainz Picard
\n\nVersão %(version)s

\n\n

\n\n %(third_parties_versions)s\n\n

\n\n

Formatos suportados
%(formats)s

\n\n

Por favor doe
\n\nObrigado por usar o Picard. Picard usa o banco de dados MusicBrainz, que é operado pela MetaBrainz Foundation com a ajuda de milhares de voluntários. Se você gostou desse programa, por favor considere fazer uma doação à MetaBrainz Foundation para manter o serviço rodando.

\n\n

Doe agora!

\n\n

Créditos
\n\nCopyright © 2004-2017 Robert Kaye, Lukáš Lalinský, Laurent Monin e outros%(translator-credits)s

\n\n

Página oficial
%(picard-doc-url)s

\n" #: picard/ui/options/advanced.py:30 msgid "Advanced" @@ -1904,35 +1905,35 @@ msgstr "Capa" #: picard/ui/options/dialog.py:82 msgid "&Restore all Defaults" -msgstr "" +msgstr "&Restaurar todos os Padrões" #: picard/ui/options/dialog.py:83 msgid "Reset all of Picard's settings" -msgstr "" +msgstr "Restaurar todas as configurações do Picard" #: picard/ui/options/dialog.py:84 msgid "Restore &Defaults" -msgstr "" +msgstr "Restaurar &Padrões" #: picard/ui/options/dialog.py:85 msgid "Reset all settings for current option page" -msgstr "" +msgstr "Restaurar todas as configurações para a página de opções atual" #: picard/ui/options/dialog.py:172 msgid "You are about to reset your options for this page." -msgstr "" +msgstr "Você está prestes a restaurar suas opções para esta página" #: picard/ui/options/dialog.py:176 msgid "Warning! This will reset all of your settings." -msgstr "" +msgstr "Aviso! Isso irá restaurar todas as suas configurações." #: picard/ui/options/dialog.py:183 msgid "Confirm Reset" -msgstr "" +msgstr "Confirmar Restauração" #: picard/ui/options/dialog.py:184 msgid "Are you sure?" -msgstr "" +msgstr "Você tem certeza?" #: picard/ui/options/fingerprinting.py:32 msgid "Fingerprinting" @@ -1941,11 +1942,11 @@ msgstr "Impressões digitais" #: picard/ui/options/fingerprinting.py:135 #: picard/ui/options/fingerprinting.py:139 msgid "Please select a valid fpcalc executable." -msgstr "" +msgstr "Por favor selecione um executável fpcalc válido." #: picard/ui/options/fingerprinting.py:139 msgid "Invalid fpcalc executable" -msgstr "" +msgstr "Executável fpcalc inválido" #: picard/ui/options/general.py:74 #, python-format @@ -1962,43 +1963,43 @@ msgstr "Interface de Usuário" #: picard/ui/options/interface.py:43 msgid "Add Folder" -msgstr "" +msgstr "Adicionar Pasta" #: picard/ui/options/interface.py:47 msgid "Add Files" -msgstr "" +msgstr "Adicionar Arquivos" #: picard/ui/options/interface.py:51 msgid "Cluster" -msgstr "" +msgstr "Agrupar" #: picard/ui/options/interface.py:55 msgid "Lookup" -msgstr "" +msgstr "Buscar" #: picard/ui/options/interface.py:59 msgid "Scan" -msgstr "" +msgstr "Escanear" #: picard/ui/options/interface.py:63 msgid "Lookup in Browser" -msgstr "" +msgstr "Buscar no Navegador" #: picard/ui/options/interface.py:67 msgid "Save" -msgstr "" +msgstr "Salvar" #: picard/ui/options/interface.py:79 msgid "Submit AcoustIDs" -msgstr "" +msgstr "Enviar AcoustIDs" #: picard/ui/options/interface.py:83 msgid "Open in Player" -msgstr "" +msgstr "Abrir no Reprodutor" #: picard/ui/options/interface.py:87 msgid "Lookup CD..." -msgstr "" +msgstr "Procurar CD" #: picard/ui/options/interface.py:125 msgid "System default" @@ -2016,11 +2017,11 @@ msgstr "Você mudou o idioma. Você precisa reiniciar o Picard para que as mudan #: picard/ui/options/interface.py:207 msgid "Drag and Drop to re-order" -msgstr "" +msgstr "Arraste e Solte para reordenar" #: picard/ui/options/interface.py:209 picard/ui/options/interface.py:291 msgid "label" -msgstr "" +msgstr "Gravadora" #: picard/ui/options/matching.py:28 msgid "Matching" @@ -2032,45 +2033,45 @@ msgstr "Rede" #: picard/ui/options/plugins.py:135 msgid "No plugins installed." -msgstr "" +msgstr "Não há plugins instalados." #: picard/ui/options/plugins.py:198 #, python-format msgid "The plugin '%s' is not compatible with this version of Picard." -msgstr "" +msgstr "O plugin '%s' não é compatível com esta versão do Picard." #: picard/ui/options/plugins.py:226 #, python-format msgid "The plugin '%s' will be upgraded to version %s on next run of Picard." -msgstr "" +msgstr "O plugin '%s' será atualizado para a versão %s na próxima execução do Picard." #: picard/ui/options/plugins.py:254 msgid "Update" -msgstr "" +msgstr "Atualizar" #: picard/ui/options/plugins.py:256 msgid "Install" -msgstr "" +msgstr "Instalar" #: picard/ui/options/plugins.py:271 msgid "Updated" -msgstr "" +msgstr "Atualizado" #: picard/ui/options/plugins.py:273 msgid "Installed" -msgstr "" +msgstr "Instalado" #: picard/ui/options/plugins.py:297 msgid "Restart Picard to upgrade to new version" -msgstr "" +msgstr "Reiniciar Picard para atualizar para a nova versão" #: picard/ui/options/plugins.py:299 msgid "New version available" -msgstr "" +msgstr "Nova versão disponível" #: picard/ui/options/plugins.py:305 msgid "Authors" -msgstr "" +msgstr "Autores" #: picard/ui/options/plugins.py:307 picard/util/tags.py:44 msgid "License" @@ -2079,11 +2080,11 @@ msgstr "Licença" #: picard/ui/options/plugins.py:338 #, python-format msgid "The plugin '%s' could not be downloaded." -msgstr "" +msgstr "O plugin '%s' não pode ser baixado." #: picard/ui/options/plugins.py:339 msgid "Please try again later." -msgstr "" +msgstr "Por favor tente novamente mais tarde." #: picard/ui/options/ratings.py:28 msgid "Ratings" @@ -2105,7 +2106,7 @@ msgstr "Nomeação de arquivos" msgid "" "Open Scripting Documentation in " "your browser" -msgstr "" +msgstr "Abrir Documentação de Scripting em seu navegador" #: picard/ui/options/renaming.py:188 msgid "The location to move files to must not be empty." @@ -2117,27 +2118,27 @@ msgstr "O formato para nomear arquivos não pode estar vazio." #: picard/ui/options/scripting.py:29 msgid "My script" -msgstr "" +msgstr "Meu script" #: picard/ui/options/scripting.py:128 msgid "Move script up" -msgstr "" +msgstr "Mover script para cima" #: picard/ui/options/scripting.py:132 msgid "Move script down" -msgstr "" +msgstr "Mover script para baixo" #: picard/ui/options/scripting.py:140 msgid "Other options" -msgstr "" +msgstr "Outras opções" #: picard/ui/options/scripting.py:142 msgid "Rename script" -msgstr "" +msgstr "Renomear script" #: picard/ui/options/scripting.py:143 msgid "Remove script" -msgstr "" +msgstr "Remover script" #: picard/ui/options/scripting.py:205 msgid "Scripting" @@ -2145,11 +2146,11 @@ msgstr "Scripts" #: picard/ui/options/scripting.py:293 msgid "Are you sure you want to remove this script?" -msgstr "" +msgstr "Tem certeza de que deseja remover este script?" #: picard/ui/options/scripting.py:294 msgid "Confirm Remove" -msgstr "" +msgstr "Confirmar Remoção" #: picard/ui/options/scripting.py:377 msgid "Script Error" @@ -2289,7 +2290,7 @@ msgstr "BPM" #: picard/util/tags.py:42 msgid "Key" -msgstr "" +msgstr "Tom" #: picard/util/tags.py:43 msgid "Copyright" From 195091fcaa9780501627beba35135d6f8e55288d Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Tue, 14 Feb 2017 14:00:46 +0530 Subject: [PATCH 029/173] Add Picard 1.4 release notes --- NEWS.txt | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 155 insertions(+), 3 deletions(-) diff --git a/NEWS.txt b/NEWS.txt index 5c2fa95ca..e279b4d30 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -1,6 +1,158 @@ -Version ? - ? - * Picard now requires at least Python 2.7 - * Task: Update Picard logo/icons. (PICARD-760) +Version 1.4 - 2017-02-14 + * Bugfix: AcoustID submission fails with code 299 (PICARD-82) + * Bugfix: Ignoring "hip hop rap" folksonomy tags also ignores "rap", "hip hop", etc. (PICARD-335) + * Bugfix: Picard downloads multiple 'front' images instead of just first one. (PICARD-350) + * Bugfix: Saving hidden file with only an extension drops the extension (PICARD-357) + * Bugfix: Add directory opens in "wrong" dir (PICARD-366) + * Bugfix: Picard should de-duplicate work lists (PICARD-375) + * Bugfix: Tree selector in Options window is partially obscured, pane too narrow (PICARD-408) + * Bugfix: tag acoustid_id can not be removed or deleted in script, renaming or plugin (PICARD-419) + * Bugfix: Can't remove value from field (PICARD-546) + * Bugfix: Can't open Options (PICARD-592) + * Bugfix: "Tags from filenames" action stays enabled even if it is unavailable. (PICARD-688) + * Bugfix: Using the first image type as filename changes the name of front images (PICARD-701) + * Bugfix: Fingerprint Submission Failes if AcoustID tags are present and/or invalid (PICARD-706) + * Bugfix: Picard moves into the selected folder (PICARD-726) + * Bugfix: Picard does not support (recording) relationship credits (PICARD-730) + * Bugfix: Picard repeats/duplicates field data (PICARD-748) + * Bugfix: Number of pending web requests is not decremented on exceptions in the handler (PICARD-751) + * Bugfix: Divide by zero error in _convert_folksonomy_tags_to_genre when no tag at the release/release group level ( PICARD-753) + * Bugfix: Directory tree (file browser) not sorted for non-system drives under Windows (PICARD-754) + * Bugfix: Crash when loading release with only zero count tags (PICARD-759) + * Bugfix: No name and no window grouping in gnome-shell Alt-Tab app switcher (PICARD-761) + * Bugfix: Lookup in Browser does not and can not load HTTPS version of musicbrainz.org (PICARD-764) + * Bugfix: Unable to login using oauth via Picard options with Server Port set to 443 (PICARD-766) + * Bugfix: "AttributeError: 'MetadataBox' object has no attribute 'resize_columns'" when enabling the cover art box ( PICARD-775) + * Bugfix: Pre-gap tracks are not counted in absolutetracknumber (PICARD-778) + * Bugfix: CAA cover art provider runs even if cover art has already been loaded (PICARD-780) + * Bugfix: Toggling Embed Cover Art in Tags and restarting doesn't have the expected behavior (PICARD-782) + * Bugfix: XMLWS redirects incorrectly (PICARD-788) + * Bugfix: Handle empty collection-list in web server response (PICARD-798) + * Bugfix: Amazon Cover Art provider does not work (and does not have a lot of debug logging enabled) (PICARD-799) + * Bugfix: Cover Art from CAA release group is skipped even though it exists (PICARD-801) + * Bugfix: Multiple instances of history and log dialogs (PICARD-804) + * Bugfix: Empty string lookup (PICARD-805) + * Bugfix: Will not load album information on any albums (PICARD-811) + * Bugfix: Redirect URL is not encoded which leads to http 400 error. (PICARD-814) + * Bugfix: Not compatible with latest Mutagen (PICARD-833) + * Bugfix: Can't save any files. Get: "error: invalid literal for int() with base 10" (PICARD-834) + * Bugfix: Picard 1.3.2 shows cleartext username & password on status line when errors occur (PICARD-839) + * Bugfix: Cannot fetch cover art from amazon link contains https scheme. (PICARD-848) + * Bugfix: media-optical-modified.png icon still displayed after release save when two files match one track (PICARD-851) + * Bugfix: Release that Picard will not load (due to disc with just data track?) (PICARD-853) + * Bugfix: ValueError in metadata.py (PICARD-855) + * Bugfix: Improper detection of Gnome as a desktop environment and no support for gnome 3 (PICARD-857) + * Bugfix: Apparent non-functional tagger button (PICARD-858) + * Bugfix: Picard does not read Ogg/Opus files with an ".ogg" file exension (PICARD-859) + * Bugfix: Setting a large value in in $num function as length causes picard to become unresponsive (PICARD-865) + * Bugfix: id3 deletion needs to be improved (PICARD-867) + * Bugfix: id3v2.3 does not properly handle TMOO ( mood tag) (PICARD-868) + * Bugfix: Coverart providers duplicates on reset (PICARD-870) + * Bugfix: Restore defaults broken for plugins page and tagger scripts page (PICARD-873) + * Bugfix: Coverart providers erroneous save (PICARD-874) + * Bugfix: The metadatabox doesn't correctly show the tag selected (PICARD-876) + * Bugfix: Length tag for ID3 is no longer displayed in the metadata box (PICARD-881) + * Bugfix: Removed tags are not removed from the metadatabox after saving the file (PICARD-882) + * Bugfix: File Browser pane doesn't check for path type( file or folder) when setting home path/move files here ( PICARD-884) + * Bugfix: mov files return a +ve score for mp4 container leading to errors (PICARD-885) + * Bugfix: "Restore defaults" doesn't log out the user (PICARD-888) + * Bugfix: Broken 'Restore Defaults' (PICARD-907) + * Bugfix: Messagebox wraps and displays title inappropriately (PICARD-911) + * Bugfix: An “empty” track shouldn’t get an “excellent match” tooltip. (PICARD-914) + * Bugfix: In plugins list, some plugins don't show description (PICARD-915) + * Bugfix: Plugin restore defaults broken (PICARD-916) + * Bugfix: Does not use UI language but locale on Windows (PICARD-917) + * Bugfix: Preserve scripting splitter position (PICARD-925) + * Bugfix: Having trouble submitting AcoustIDs (PICARD-926) + * Bugfix: Cluster double‐click opens the Info… panel (PICARD-931) + * Bugfix: Status bar not cleared when selection changed (PICARD-937) + * Bugfix: Open containing folder not working for shared files over network (PICARD-942) + * Bugfix: Warning: Plugin directory '…/python2.7/site-packages/contrib/plugins' doesn't exist (PICARD-945) + * Bugfix: Additionnal files aren't moved anymore (PICARD-946) + * Bugfix: Search window error message does not appear translated (PICARD-947) + * Bugfix: Open Containing Folder duplicates (PICARD-950) + * Bugfix: Errors when directory / file names contain unicode characters (PICARD-958) + * New Feature: AIF support (ID3) (PICARD-42) + * New Feature: Test and integrate support for "local" cover art into Picard (PICARD-137) + * New Feature: Display infos (album, artist, tracklist) for clusters without release match (PICARD-680) + * New Feature: Add download plugin functionality to existing UI (PICARD-691) + * New Feature: Fallback on album artist's tags if no tags are found for album (PICARD-738) + * New Feature: Add m2a as a supported extension (PICARD-743) + * New Feature: MusicBrainz/AcoustID entities should be hyperlinked in Picard (PICARD-756) + * New Feature: Support key tag (PICARD-769) + * New Feature: Export / import settings (PICARD-901) + * New Feature: Search releases from within a Picard dialog (PICARD-927) + * New Feature: Searching tracks and displaying similar tracks in a dialog box (PICARD-928) + * New Feature: Search for artists from dialog (PICARD-929) + * Task: Picard default name files script refinement (PICARD-717) + * Task: Update Picard logo/icons (PICARD-760) + * Task: Link to the Scripting documentation on the Scripting options page (PICARD-779) + * Task: Remove contrib/plugins from the repository (PICARD-835) + * Task: Raise the required mutagen version to 1.22 (PICARD-841) + * Task: Renaming save_only_front_images_to_tags option to something more appropriate (PICARD-861) + * Task: Allow translators to finalize translations before releasing Picard 1.4 (PICARD-895) + * Task: Raise the required Python version to 2.7. (PICARD-904) + * Task: Bump Picard’s copyright date (PICARD-912) + * Task: Add Norwegian to UI languages (PICARD-982) + * Task: Provide ~video variable for video tracks (PICARD-652) + * Task: Improve error logging on AcoustId submission (PICARD-708) + * Improvement: Link to Picard Scripting page under 'File Naming' (PICARD-22) + * Improvement: Restore default settings button/s (PICARD-116) + * Improvement: Speed of Ogg tag writing/updating (PICARD-133) + * Improvement: Allow adding/removing tags to be preserved from context menu in the tag diff pane (PICARD-207) + * Improvement: Make it easier to remove everything currently loaded in Picard (PICARD-210) + * Improvement: Bring back keyboard shortcuts for editing tags (PICARD-222) + * Improvement: Case sensitivity for "Move additional files" option (PICARD-229) + * Improvement: Metadata comparison box shows that it intends to write (and has written) tags unsupported by underlyingfile format (PICARD-253) + * Improvement: Add more descriptive tooltips to buttons (PICARD-267) + * Improvement: Allow musicip_puid and acoustid_id to be cleared from tags (PICARD-268) + * Improvement: Make it possible to remove existing tags without clearing all tags (PICARD-287) + * Improvement: Disable recurse subdirectories should be added (PICARD-291) + * Improvement: display how many "pending files" left on lookup (PICARD-305) + * Improvement: Handle MP3 TSST/TIT3 (subtitle) tags better with ID3v2.3 (PICARD-307) + * Improvement: Customisable toolbars (PICARD-353) + * Improvement: Ignore file extension and try to read anyway (PICARD-359) + * Improvement: Make it possible to unset all performer (etc) tags (PICARD-384) + * Improvement: Progress tracking (PICARD-388) + * Improvement: Add ability to handle multiple tagger scripts (PICARD-404) + * Improvement: the option "select all" to save (PICARD-476) + * Improvement: Option to load only audio tracks, i.e. not DVD-Video, CD-ROM tracks (PICARD-514) + * Improvement: Picard should use OAuth for authentication (PICARD-615) + * Improvement: Improvements to WMA tags (PICARD-648) + * Improvement: Only ask to "log in now" once per session (PICARD-678) + * Improvement: Show codec info for MP4 files (PICARD-683) + * Improvement: "Play File" button should be renamed to "Open in Player" (PICARD-692) + * Improvement: ID3 padding not reduced can result in large files (PICARD-695) + * Improvement: Set option 'caa_approved_only' disabled by default (PICARD-705) + * Improvement: Validate fpcalc executable in options (PICARD-707) + * Improvement: Improve File Naming options (PICARD-733) + * Improvement: Add --long-version/-V option, outputting third parties libs versions as well as Picard version PICARD-734) + * Improvement: missing info in the help file (PICARD-740) + * Improvement: Pass command-line arguments to QtApplication (PICARD-773) + * Improvement: Use the more detailed icons in more places on windows (PICARD-777) + * Improvement: Use .ini configuration file on all platforms (PICARD-794) + * Improvement: Use python2 shebang as of PEP 0394 (PICARD-806) + * Improvement: Display existing covers in File Info dialog (PICARD-808) + * Improvement: Use HTTPS for external links (PICARD-818) + * Improvement: Install a scalable icon (PICARD-838) + * Improvement: Use HTTPS for requests to the plugins API on picard.musicbrainz.org (PICARD-852) + * Improvement: Use magic numbers to determine the audio file types instead of relying on extensions (PICARD-864) + * Improvement: Multi-scripting UI is very basic (PICARD-883) + * Improvement: Allow scripting functions to have arbitrary number of arguments (PICARD-887) + * Improvement: The "Restore defaults" confirmation buttons should follow the quit confirmation dialog in style PICARD-890) + * Improvement: Replace submit icon with AcoustID logo (PICARD-896) + * Improvement: Rename "Submit" button to "Submit AcoustIDs" (PICARD-897) + * Improvement: Use UTF-8 for ID3v2.4 by default instead of UTF-16 (PICARD-898) + * Improvement: Restore defaults is slightly broken for tags option page (PICARD-902) + * Improvement: Rearrange the action toolbar icons from left to right according to the expected user-flow (PICARD-908) + * Improvement: Add tooltips to “Restore all Defaults” and “Restore Defaults” (PICARD-913) + * Improvement: Make PICARD-883 UI have adjustable widths for list of scripts and script content (PICARD-918) + * Improvement: Move Options/Advanced/Scripting to Options/Scripting (PICARD-919) + * Improvement: Move UI options page up the options tree (PICARD-921) + * Improvement: Add $startswith and $endswith string functions (PICARD-923) + * Improvement: Make list of scripts smaller than script text by default (PICARD-924) + * Improvement: Wait for save thread pool to be finished before exit (PICARD-944) + * Improvement: New guess format functionality should use explicit buffer size (PICARD-970) Version 1.3.2 - 2015-01-07 * Bugfix: Fixed tags from filename dialog not opening on new installations From 01c4e897134161bbf74bcfce91b9ac00ff19fb58 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Tue, 14 Feb 2017 12:51:47 +0100 Subject: [PATCH 030/173] Remove reference to contrib/ in setup.py regen_pot_file --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 895abb028..b634fe4e9 100755 --- a/setup.py +++ b/setup.py @@ -422,7 +422,7 @@ try: # cannot use super() with old-style parent class babel.extract_messages.initialize_options(self) self.output_file = 'po/picard.pot' - self.input_dirs = 'contrib, picard' + self.input_dirs = 'picard' if self.input_dirs and input_dirs_workaround: self._input_dirs = self.input_dirs From baab229df539733bf1d0949b62d1c952df8fbaa8 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Tue, 14 Feb 2017 12:57:05 +0100 Subject: [PATCH 031/173] Update .po files --- po/attributes/nb.po | 28 ++++++++++++++-------------- po/nb.po | 16 ++++++++-------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/po/attributes/nb.po b/po/attributes/nb.po index 0dfe5b4ef..9a05e11ce 100644 --- a/po/attributes/nb.po +++ b/po/attributes/nb.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-02-10 12:38+0000\n" +"PO-Revision-Date: 2017-02-14 11:49+0000\n" "Last-Translator: CatQuest, The Endeavouring Cat\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/musicbrainz/musicbrainz/language/nb/)\n" "MIME-Version: 1.0\n" @@ -973,7 +973,7 @@ msgstr "Blu-ray" #: DB:medium_format/name:35 msgctxt "medium_format" msgid "Blu-spec CD" -msgstr "" +msgstr "Blu-spec CD" #: DB:release_packaging/name:9 msgctxt "release_packaging" @@ -1118,7 +1118,7 @@ msgstr "CDV" #: DB:medium_format/name:60 msgctxt "medium_format" msgid "CED" -msgstr "" +msgstr "CED" #: DB:work_attribute_type_allowed_value/value:63 msgctxt "work_attribute_type_allowed_value" @@ -1153,7 +1153,7 @@ msgstr "" #: DB:medium_format/name:9 msgctxt "medium_format" msgid "Cartridge" -msgstr "" +msgstr "Kassett (generell)" #: DB:work_attribute_type_allowed_value/value:66 msgctxt "work_attribute_type_allowed_value" @@ -1163,7 +1163,7 @@ msgstr "Carturdaśa rāgamālika" #: DB:medium_format/name:8 msgctxt "medium_format" msgid "Cassette" -msgstr "Kassett" +msgstr "Musikkassett" #: DB:release_packaging/name:8 msgctxt "release_packaging" @@ -1244,7 +1244,7 @@ msgstr "" #: DB:medium_format/name:61 msgctxt "medium_format" msgid "Copy Control CD" -msgstr "" +msgstr "Copy Control CD" #: DB:medium_format/description:61 msgctxt "medium_format" @@ -1359,7 +1359,7 @@ msgstr "DJ-miks" #: DB:medium_format/name:44 msgctxt "medium_format" msgid "DTS CD" -msgstr "" +msgstr "DTS CD" #: DB:medium_format/name:2 msgctxt "medium_format" @@ -1379,22 +1379,22 @@ msgstr "DVD-Video" #: DB:medium_format/name:47 msgctxt "medium_format" msgid "DVDplus" -msgstr "" +msgstr "DVDplus" #: DB:medium_format/name:70 msgctxt "medium_format" msgid "DVDplus (CD side)" -msgstr "" +msgstr "DVDplus (CD side)" #: DB:medium_format/name:68 msgctxt "medium_format" msgid "DVDplus (DVD-Audio side)" -msgstr "" +msgstr "DVDplus (DVD-Audio side)" #: DB:medium_format/name:69 msgctxt "medium_format" msgid "DVDplus (DVD-Video side)" -msgstr "" +msgstr "DVDplus (DVD-Video side)" #: DB:work_attribute_type_allowed_value/value:343 msgctxt "work_attribute_type_allowed_value" @@ -1624,17 +1624,17 @@ msgstr "DualDisc" #: DB:medium_format/name:67 msgctxt "medium_format" msgid "DualDisc (CD side)" -msgstr "" +msgstr "DualDisc (CD side)" #: DB:medium_format/name:65 msgctxt "medium_format" msgid "DualDisc (DVD-Audio side)" -msgstr "" +msgstr "DualDisc (DVD-Audio side)" #: DB:medium_format/name:66 msgctxt "medium_format" msgid "DualDisc (DVD-Video side)" -msgstr "" +msgstr "DualDisc (DVD-Video side)" #: DB:work_attribute_type_allowed_value/value:612 msgctxt "work_attribute_type_allowed_value" diff --git a/po/nb.po b/po/nb.po index 41f6c63a8..3bb054d13 100644 --- a/po/nb.po +++ b/po/nb.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: MusicBrainz\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2017-01-23 14:00+0100\n" -"PO-Revision-Date: 2017-02-13 12:45+0000\n" +"PO-Revision-Date: 2017-02-14 09:27+0000\n" "Last-Translator: CatQuest, The Endeavouring Cat\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/musicbrainz/musicbrainz/language/nb/)\n" "MIME-Version: 1.0\n" @@ -851,7 +851,7 @@ msgstr "Ctrl+U" #: picard/ui/mainwindow.py:431 msgid "&Lookup" -msgstr "Opps&øk" +msgstr "MB &Søk" #: picard/ui/mainwindow.py:432 msgid "Lookup selected items in MusicBrainz" @@ -999,7 +999,7 @@ msgstr "%(filename)s (%(similarity)d%%)" #: picard/ui/mainwindow.py:961 msgid "Authentication Required" -msgstr "Godkjenning nødvendig" +msgstr "Autorisering nødvendig" #: picard/ui/mainwindow.py:962 msgid "" @@ -1035,7 +1035,7 @@ msgstr "Tagger" #: picard/ui/metadatabox.py:158 msgid "Original Value" -msgstr "Opprinnelig verdi" +msgstr "Uendret verdi" #: picard/ui/metadatabox.py:158 msgid "New Value" @@ -1220,15 +1220,15 @@ msgstr "Endre tagg" #: picard/ui/ui_edittagdialog.py:89 msgid "Edit value" -msgstr "Endre verdi" +msgstr "Endre" #: picard/ui/ui_edittagdialog.py:90 msgid "Add value" -msgstr "Legg til verdi" +msgstr "Legg til ny" #: picard/ui/ui_edittagdialog.py:91 msgid "Remove value" -msgstr "Fjern verdi" +msgstr "Fjern" #: picard/ui/ui_infodialog.py:71 msgid "A&rtwork" @@ -1969,7 +1969,7 @@ msgstr "Gruppér" #: picard/ui/options/interface.py:55 msgid "Lookup" -msgstr "Slå opp" +msgstr "MB Søk" #: picard/ui/options/interface.py:59 msgid "Scan" From 65dd3508d6fb0b9cec5858c67d6c6b994eac5c18 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Tue, 14 Feb 2017 12:57:09 +0100 Subject: [PATCH 032/173] Update pot file --- po/picard.pot | 85 +++++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/po/picard.pot b/po/picard.pot index 9af396e39..37f95e74b 100644 --- a/po/picard.pot +++ b/po/picard.pot @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: picard 1.4.0dev7\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-01-23 14:00+0100\n" +"POT-Creation-Date: 2017-02-14 12:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" #: picard/acoustid.py:111 #, python-format @@ -54,26 +54,26 @@ msgstr "" msgid "Unmatched Files" msgstr "" -#: picard/album.py:206 +#: picard/album.py:200 #, python-format msgid "[could not load album %s]" msgstr "" -#: picard/album.py:295 +#: picard/album.py:289 #, python-format msgid "Album %(id)s loaded: %(artist)s - %(album)s" msgstr "" -#: picard/album.py:338 +#: picard/album.py:332 #, python-format msgid "Loading album %(id)s ..." msgstr "" -#: picard/album.py:342 +#: picard/album.py:336 msgid "[loading album information]" msgstr "" -#: picard/album.py:527 +#: picard/album.py:521 #, python-format msgid "; %i image" msgid_plural "; %i images" @@ -95,30 +95,30 @@ msgstr "" msgid "Looking up the metadata for cluster %(album)s..." msgstr "" -#: picard/collection.py:64 +#: picard/collection.py:67 #, python-format msgid "Added %(count)i release to collection \"%(name)s\"" msgid_plural "Added %(count)i releases to collection \"%(name)s\"" msgstr[0] "" msgstr[1] "" -#: picard/collection.py:86 +#: picard/collection.py:89 #, python-format msgid "Removed %(count)i release from collection \"%(name)s\"" msgid_plural "Removed %(count)i releases from collection \"%(name)s\"" msgstr[0] "" msgstr[1] "" -#: picard/collection.py:100 +#: picard/collection.py:104 #, python-format msgid "Error loading collections: %(error)s" msgstr "" -#: picard/config_upgrade.py:58 picard/config_upgrade.py:71 +#: picard/config_upgrade.py:57 picard/config_upgrade.py:70 msgid "Various Artists file naming scheme removal" msgstr "" -#: picard/config_upgrade.py:59 +#: picard/config_upgrade.py:58 msgid "" "The separate file naming scheme for various artists albums has been " "removed in this version of Picard.\n" @@ -126,7 +126,7 @@ msgid "" " artist albums." msgstr "" -#: picard/config_upgrade.py:72 +#: picard/config_upgrade.py:71 msgid "" "The separate file naming scheme for various artists albums has been " "removed in this version of Picard.\n" @@ -136,36 +136,36 @@ msgid "" "single artist albums?" msgstr "" -#: picard/config_upgrade.py:78 +#: picard/config_upgrade.py:77 msgid "Merge" msgstr "" -#: picard/config_upgrade.py:78 picard/ui/metadatabox.py:314 -#: picard/ui/ui_options_interface.py:141 picard/ui/options/interface.py:75 +#: picard/config_upgrade.py:77 picard/ui/metadatabox.py:314 +#: picard/ui/options/interface.py:75 picard/ui/ui_options_interface.py:141 msgid "Remove" msgstr "" -#: picard/config_upgrade.py:193 picard/ui/options/scripting.py:28 +#: picard/config_upgrade.py:200 picard/ui/options/scripting.py:28 #, python-format msgid "My script %d" msgstr "" -#: picard/file.py:541 +#: picard/file.py:545 #, python-format msgid "No matching tracks for file '%(filename)s'" msgstr "" -#: picard/file.py:557 +#: picard/file.py:561 #, python-format msgid "No matching tracks above the threshold for file '%(filename)s'" msgstr "" -#: picard/file.py:564 +#: picard/file.py:568 #, python-format msgid "File '%(filename)s' identified!" msgstr "" -#: picard/file.py:584 +#: picard/file.py:588 #, python-format msgid "Looking up the metadata for file %(filename)s ..." msgstr "" @@ -272,6 +272,10 @@ msgstr "" msgid "Italian" msgstr "" +#: picard/const/languages.py:57 +msgid "Norwegian Bokmal" +msgstr "" + #: picard/const/languages.py:59 msgid "Dutch" msgstr "" @@ -964,41 +968,41 @@ msgstr "" msgid "Adding directory: '%(directory)s' ..." msgstr "" -#: picard/ui/mainwindow.py:801 +#: picard/ui/mainwindow.py:808 msgid "Configuration Required" msgstr "" -#: picard/ui/mainwindow.py:802 +#: picard/ui/mainwindow.py:809 msgid "" "Audio fingerprinting is not yet configured. Would you like to configure " "it now?" msgstr "" -#: picard/ui/mainwindow.py:902 +#: picard/ui/mainwindow.py:912 #, python-format msgid "%(filename)s (error: %(error)s)" msgstr "" -#: picard/ui/mainwindow.py:908 +#: picard/ui/mainwindow.py:918 #, python-format msgid "%(filename)s" msgstr "" -#: picard/ui/mainwindow.py:918 +#: picard/ui/mainwindow.py:928 #, python-format msgid "%(filename)s (%(similarity)d%%) (error: %(error)s)" msgstr "" -#: picard/ui/mainwindow.py:925 +#: picard/ui/mainwindow.py:935 #, python-format msgid "%(filename)s (%(similarity)d%%)" msgstr "" -#: picard/ui/mainwindow.py:961 +#: picard/ui/mainwindow.py:971 msgid "Authentication Required" msgstr "" -#: picard/ui/mainwindow.py:962 +#: picard/ui/mainwindow.py:972 msgid "" "Picard needs authorization to access your personal data on the " "MusicBrainz server. Would you like to log in now?" @@ -1108,7 +1112,7 @@ msgstr "" msgid "Retry" msgstr "" -#: picard/ui/searchdialog.py:288 +#: picard/ui/searchdialog.py:283 #, python-format msgid "" "Following error occurred while fetching " @@ -1128,9 +1132,9 @@ msgstr "" msgid "Track Search Results" msgstr "" -#: picard/ui/searchdialog.py:324 picard/ui/searchdialog.py:512 -#: picard/ui/searchdialog.py:740 picard/ui/ui_options_plugins.py:138 -#: picard/ui/options/plugins.py:303 +#: picard/ui/options/plugins.py:303 picard/ui/searchdialog.py:324 +#: picard/ui/searchdialog.py:512 picard/ui/searchdialog.py:740 +#: picard/ui/ui_options_plugins.py:138 msgid "Name" msgstr "" @@ -1190,8 +1194,9 @@ msgstr "" msgid "File Name" msgstr "" -#: picard/ui/ui_cdlookup.py:53 picard/ui/ui_options_cdlookup.py:42 -#: picard/ui/ui_options_cdlookup_select.py:49 picard/ui/options/cdlookup.py:38 +#: picard/ui/options/cdlookup.py:38 picard/ui/ui_cdlookup.py:53 +#: picard/ui/ui_options_cdlookup.py:42 +#: picard/ui/ui_options_cdlookup_select.py:49 msgid "CD Lookup" msgstr "" @@ -1353,7 +1358,7 @@ msgstr "" msgid "Get API key..." msgstr "" -#: picard/ui/ui_options_folksonomy.py:115 picard/ui/options/folksonomy.py:28 +#: picard/ui/options/folksonomy.py:28 picard/ui/ui_options_folksonomy.py:115 msgid "Folksonomy Tags" msgstr "" @@ -1408,7 +1413,7 @@ msgstr "" msgid "Server address:" msgstr "" -#: picard/ui/ui_options_general.py:95 picard/ui/options/general.py:88 +#: picard/ui/options/general.py:88 picard/ui/ui_options_general.py:95 msgid "MusicBrainz Account" msgstr "" @@ -1420,7 +1425,7 @@ msgstr "" msgid "Log out" msgstr "" -#: picard/ui/ui_options_general.py:98 picard/ui/options/general.py:33 +#: picard/ui/options/general.py:33 picard/ui/ui_options_general.py:98 msgid "General" msgstr "" @@ -1512,7 +1517,7 @@ msgstr "" msgid "Minimal similarity for cluster lookups:" msgstr "" -#: picard/ui/ui_options_metadata.py:101 picard/ui/options/metadata.py:29 +#: picard/ui/options/metadata.py:29 picard/ui/ui_options_metadata.py:101 msgid "Metadata" msgstr "" @@ -1582,7 +1587,7 @@ msgstr "" msgid "Listen only on localhost" msgstr "" -#: picard/ui/ui_options_plugins.py:137 picard/ui/options/plugins.py:68 +#: picard/ui/options/plugins.py:68 picard/ui/ui_options_plugins.py:137 msgid "Plugins" msgstr "" From 01ced0e8b513347589ea4e60e1085a77b1c45654 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Tue, 14 Feb 2017 12:57:09 +0100 Subject: [PATCH 033/173] Update version to 1.4 --- picard/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/__init__.py b/picard/__init__.py index 33d691a36..ffa08503b 100644 --- a/picard/__init__.py +++ b/picard/__init__.py @@ -22,7 +22,7 @@ import re PICARD_APP_NAME = "Picard" PICARD_ORG_NAME = "MusicBrainz" -PICARD_VERSION = (1, 4, 0, 'dev', 7) +PICARD_VERSION = (1, 4, 0, 'final', 0) # optional build version # it should be in the form '_' From b75c142a37794e13b9576b08183d22ce261e0b23 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Tue, 14 Feb 2017 12:57:10 +0100 Subject: [PATCH 034/173] Update version to 1.4.1 dev --- picard/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/__init__.py b/picard/__init__.py index ffa08503b..636ab4315 100644 --- a/picard/__init__.py +++ b/picard/__init__.py @@ -22,7 +22,7 @@ import re PICARD_APP_NAME = "Picard" PICARD_ORG_NAME = "MusicBrainz" -PICARD_VERSION = (1, 4, 0, 'final', 0) +PICARD_VERSION = (1, 4, 1, 'dev', 1) # optional build version # it should be in the form '_' From 93d9dd176ff5cfc09bfed0ed46c2c3ae2d183b45 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 15 Feb 2017 10:09:53 +0100 Subject: [PATCH 035/173] Catch IdentificationError exceptions Replace the generic catch with a catch for IdentificationError exceptions which is what we expect anyway and use try...except...else --- picard/ui/coverartbox.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index cf2409966..03ab1597f 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -191,10 +191,11 @@ class CoverArtBox(QtGui.QGroupBox): # Tests for image format obtained from file-magic try: mime = imageinfo.identify(fallback_data)[2] - log.warning("Trying the dropped %s data", mime) + except IdentificationError as e: + log.error("Unable to identify dropped data format: %s" % e) + else: + log.debug("Trying the dropped %s data", mime) self.load_remote_image(url, mime, fallback_data) - except: - log.error("Unable to identify dropped data format") From 1013cd5ed7b35e8a7b4a5de0a4a5b970978323ab Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Wed, 15 Feb 2017 11:38:35 +0100 Subject: [PATCH 036/173] Revert "PICARD-922: Fix inmulti behaviour with multi-values" --- picard/script.py | 32 ++++---------------------------- test/test_script.py | 34 ---------------------------------- 2 files changed, 4 insertions(+), 62 deletions(-) diff --git a/picard/script.py b/picard/script.py index 487d99b52..1fca623c0 100644 --- a/picard/script.py +++ b/picard/script.py @@ -387,33 +387,9 @@ def func_in(parser, text, needle): return "" -def func_inmulti(parser, haystack, needle, separator=MULTI_VALUED_JOINER): - """Searches for ``needle`` in ``haystack``, supporting a list variable for - ``haystack``. If a string is used instead, then a ``separator`` can be - used to split it. In both cases, it returns true if the resulting list - contains ``needle``.""" - - needle = needle.eval(parser) - if (isinstance(haystack, ScriptExpression) and - len(haystack) == 1 and - isinstance(haystack[0], ScriptVariable)): - haystack = haystack[0] - - if isinstance(haystack, ScriptVariable): - if haystack.name.startswith(u"_"): - name = u"~" + haystack.name[1:] - else: - name = haystack.name - values = parser.context.getall(name) - - return func_in(parser, values, needle) - - # I'm not sure if it is actually possible to continue in this code path, - # but just in case, it's better to have a fallback to correct behaviour - haystack = haystack.eval(parser) - return func_in(parser, - haystack.split(separator) if separator else [haystack], - needle) +def func_inmulti(parser, text, value, separator=MULTI_VALUED_JOINER): + """Splits ``text`` by ``separator``, and returns true if the resulting list contains ``value``.""" + return func_in(parser, text.split(separator) if separator else [text], value) def func_rreplace(parser, text, old, new): @@ -843,7 +819,7 @@ register_script_function(func_lte, "lte") register_script_function(func_gt, "gt") register_script_function(func_gte, "gte") register_script_function(func_in, "in") -register_script_function(func_inmulti, "inmulti", eval_args=False) +register_script_function(func_inmulti, "inmulti") register_script_function(func_copy, "copy") register_script_function(func_copymerge, "copymerge") register_script_function(func_len, "len") diff --git a/test/test_script.py b/test/test_script.py index c7102c581..35e45cffd 100644 --- a/test/test_script.py +++ b/test/test_script.py @@ -6,19 +6,15 @@ from picard.script import ScriptParser, ScriptError, register_script_function from picard.metadata import Metadata from picard.ui.options.renaming import _DEFAULT_FILE_NAMING_FORMAT - class ScriptParserTest(unittest.TestCase): def setUp(self): config.setting = { 'enabled_plugins': '', } - self.parser = ScriptParser() - def func_noargstest(parser): return "" - register_script_function(func_noargstest, "noargstest") def test_cmd_noop(self): @@ -374,33 +370,3 @@ class ScriptParserTest(unittest.TestCase): self.parser.eval("$unset(performer:*)", context) self.assertNotIn('performer:bar', context) self.assertNotIn('performer:foo', context) - - def test_cmd_inmulti(self): - context = Metadata() - self.parser.eval("$set(foo,First; Second; Third)", context) - self.assertEqual( - self.parser.eval("$in(%foo%,Second)", context), "1") - self.assertEqual( - self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") - self.assertEqual( - self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") - self.assertEqual( - self.parser.eval("$inmulti(%foo%,Second)", context), "") - self.assertEqual( - self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") - self.assertEqual( - self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "1") - - self.parser.eval("$setmulti(foo,First; Second; Third)", context) - self.assertEqual( - self.parser.eval("$in(%foo%,Second)", context), "1") - self.assertEqual( - self.parser.eval("$in(%foo%,irst; Second; Thi)", context), "1") - self.assertEqual( - self.parser.eval("$in(%foo%,First; Second; Third)", context), "1") - self.assertEqual( - self.parser.eval("$inmulti(%foo%,Second)", context), "1") - self.assertEqual( - self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "") - self.assertEqual( - self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "") From 1fdbdc5396d106cde46c8efd7c4e2ad36bc2ec3b Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 18:49:00 +0530 Subject: [PATCH 037/173] Introduce new cover-art thumbnail class --- picard/ui/coverartbox.py | 64 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 03ab1597f..ca674ec2a 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -71,6 +71,70 @@ class ActiveLabel(QtGui.QLabel): if accepted: event.acceptProposedAction() +class CoverArtThumbnail(ActiveLabel): + + def __init__(self, active=False, drops=False, *args, **kwargs): + super(CoverArtThumbnail, self).__init__(active, drops, *args, **kwargs) + self.data = None + self.shadow = QtGui.QPixmap(":/images/CoverArtShadow.png") + self.release = None + self.setPixmap(self.shadow) + self.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) + self.clicked.connect(self.open_release_page) + self.imageDropped.connect(self.fetch_remote_image) + + def show(self): + self.set_data(self.data, True) + + def set_data(self, data, force=False, pixmap=None): + if not force and self.data == data: + return + + self.data = data + if not force and self.parent().isHidden(): + return + + cover = self.shadow + if self.data: + if pixmap is None: + pixmap = QtGui.QPixmap() + pixmap.loadFromData(self.data.data) + if not pixmap.isNull(): + offx, offy, w, h = (1, 1, 121, 121) + cover = QtGui.QPixmap(self.shadow) + pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + painter = QtGui.QPainter(cover) + bgcolor = QtGui.QColor.fromRgb(0, 0, 0, 128) + painter.fillRect(QtCore.QRectF(offx, offy, w, h), bgcolor) + x = offx + (w - pixmap.width()) / 2 + y = offy + (h - pixmap.height()) / 2 + painter.drawPixmap(x, y, pixmap) + painter.end() + self.setPixmap(cover) + + def set_metadata(self, metadata): + data = None + if metadata and metadata.images: + for image in metadata.images: + if image.is_front_image(): + data = image + break + else: + # There's no front image, choose the first one available + data = metadata.images[0] + self.set_data(data) + release = None + if metadata: + release = metadata.get("musicbrainz_albumid", None) + if release: + self.setActive(True) + self.setToolTip(_(u"View release on MusicBrainz")) + else: + self.setActive(False) + self.setToolTip("") + self.release = release + + class CoverArtBox(QtGui.QGroupBox): From 49bd3bf42f0c0c6e58cb441eb4ddc66b9d342f5a Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 18:49:48 +0530 Subject: [PATCH 038/173] Connect events for CoverArtThumbnail class --- picard/ui/coverartbox.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index ca674ec2a..3dcebfd24 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -134,6 +134,12 @@ class CoverArtThumbnail(ActiveLabel): self.setToolTip("") self.release = release + def open_release_page(self): + lookup = self.tagger.get_file_lookup() + lookup.albumLookup(self.release) + + def fetch_remote_image(self, url): + return self.parent().fetch_remote_image(url) class CoverArtBox(QtGui.QGroupBox): From 80d64193aa4e0c209701776a641614661d0c6a17 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 18:50:52 +0530 Subject: [PATCH 039/173] Update coverartbox class to include new and original coverart --- picard/ui/coverartbox.py | 101 +++++++++++++-------------------------- 1 file changed, 32 insertions(+), 69 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 3dcebfd24..e1fc68785 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -141,88 +141,50 @@ class CoverArtThumbnail(ActiveLabel): def fetch_remote_image(self, url): return self.parent().fetch_remote_image(url) - class CoverArtBox(QtGui.QGroupBox): def __init__(self, parent): QtGui.QGroupBox.__init__(self, "") self.layout = QtGui.QVBoxLayout() - self.layout.setSpacing(0) + self.layout.setSpacing(6) # Kills off any borders self.setStyleSheet('''QGroupBox{background-color:none;border:1px;}''') self.setFlat(True) - self.release = None - self.data = None self.item = None - self.shadow = QtGui.QPixmap(":/images/CoverArtShadow.png") - self.coverArt = ActiveLabel(False, parent) - self.coverArt.setPixmap(self.shadow) - self.coverArt.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) - self.coverArt.clicked.connect(self.open_release_page) - self.coverArt.image_dropped.connect(self.fetch_remote_image) - self.layout.addWidget(self.coverArt, 0) + self.cover_art_label = QtGui.QLabel('Cover-Art') + self.cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) + self.cover_art = CoverArtThumbnail(False, True, parent) + self.orig_cover_art_label = QtGui.QLabel('') + self.orig_cover_art = CoverArtThumbnail(False, False, parent) + self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) + self.orig_cover_art.setHidden(True) + self.layout.addWidget(self.cover_art_label) + self.layout.addWidget(self.cover_art) + self.layout.addWidget(self.orig_cover_art_label) + self.layout.addWidget(self.orig_cover_art) self.setLayout(self.layout) + def _show(self): + if self.cover_art.data == self.orig_cover_art.data: + self.orig_cover_art.setHidden(True) + else: + self.orig_cover_art.setHidden(False) + self.cover_art_label.setText('New Cover-Art') + self.orig_cover_art_label.setText('Original Cover-Art') + def show(self): - self.__set_data(self.data, True) + self.cover_art.show() + if self.orig_cover_art.data: + self.orig_cover_art.show() + self._show() QtGui.QGroupBox.show(self) - def __set_data(self, data, force=False, pixmap=None): - if not force and self.data == data: - return - - self.data = data - if not force and self.isHidden(): - return - - cover = self.shadow - if self.data: - if pixmap is None: - pixmap = QtGui.QPixmap() - pixmap.loadFromData(self.data.data) - if not pixmap.isNull(): - offx, offy, w, h = (1, 1, 121, 121) - cover = QtGui.QPixmap(self.shadow) - pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - painter = QtGui.QPainter(cover) - bgcolor = QtGui.QColor.fromRgb(0, 0, 0, 128) - painter.fillRect(QtCore.QRectF(offx, offy, w, h), bgcolor) - x = offx + (w - pixmap.width()) / 2 - y = offy + (h - pixmap.height()) / 2 - painter.drawPixmap(x, y, pixmap) - painter.end() - self.coverArt.setPixmap(cover) - - def set_metadata(self, metadata, item): - self.item = item - data = None - if metadata and metadata.images: - for image in metadata.images: - if image.is_front_image(): - data = image - break - else: - # There's no front image, choose the first one available - data = metadata.images[0] - self.__set_data(data) - if item and metadata: - self.coverArt.setAcceptDrops(True) - else: - self.coverArt.setAcceptDrops(False) - release = None - if metadata: - release = metadata.get("musicbrainz_albumid", None) - if release: - self.coverArt.setActive(True) - self.coverArt.setToolTip(_(u"View release on MusicBrainz")) - else: - self.coverArt.setActive(False) - self.coverArt.setToolTip("") - self.release = release - - def open_release_page(self): - lookup = self.tagger.get_file_lookup() - lookup.albumLookup(self.release) + def set_metadata(self, metadata, orig_metadata, item): + self.cover_art.set_metadata(metadata) + self.orig_cover_art.set_metadata(orig_metadata) + self._show() + if item: + self.item = item def fetch_remote_image(self, url, fallback_data=None): if self.item is None: @@ -280,7 +242,8 @@ class CoverArtBox(QtGui.QGroupBox): return pixmap = QtGui.QPixmap() pixmap.loadFromData(data) - self.__set_data([mime, data], pixmap=pixmap) + self.cover_art.set_data([mime, data], pixmap=pixmap) + self._show() if isinstance(self.item, Album): album = self.item album.metadata.append_image(coverartimage) From ac21ba3a27e1b8fce768485f38238a1d4a16b945 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 18:53:26 +0530 Subject: [PATCH 040/173] Update labels in _show method --- picard/ui/coverartbox.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index e1fc68785..f4583468e 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -35,11 +35,11 @@ class ActiveLabel(QtGui.QLabel): clicked = QtCore.pyqtSignal() image_dropped = QtCore.pyqtSignal(QtCore.QUrl, QtCore.QByteArray) - def __init__(self, active=True, *args): + def __init__(self, active=True, drops=False, *args): QtGui.QLabel.__init__(self, *args) self.setMargin(0) self.setActive(active) - self.setAcceptDrops(False) + self.setAcceptDrops(drops) def setActive(self, active): self.active = active @@ -71,6 +71,7 @@ class ActiveLabel(QtGui.QLabel): if accepted: event.acceptProposedAction() + class CoverArtThumbnail(ActiveLabel): def __init__(self, active=False, drops=False, *args, **kwargs): @@ -141,6 +142,7 @@ class CoverArtThumbnail(ActiveLabel): def fetch_remote_image(self, url): return self.parent().fetch_remote_image(url) + class CoverArtBox(QtGui.QGroupBox): def __init__(self, parent): @@ -151,7 +153,7 @@ class CoverArtBox(QtGui.QGroupBox): self.setStyleSheet('''QGroupBox{background-color:none;border:1px;}''') self.setFlat(True) self.item = None - self.cover_art_label = QtGui.QLabel('Cover-Art') + self.cover_art_label = QtGui.QLabel('') self.cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.cover_art = CoverArtThumbnail(False, True, parent) self.orig_cover_art_label = QtGui.QLabel('') @@ -167,6 +169,8 @@ class CoverArtBox(QtGui.QGroupBox): def _show(self): if self.cover_art.data == self.orig_cover_art.data: self.orig_cover_art.setHidden(True) + self.cover_art_label.setText('') + self.orig_cover_art_label.setText('') else: self.orig_cover_art.setHidden(False) self.cover_art_label.setText('New Cover-Art') From f1fb79100cbce6b9bd844378b0a7c25ef519f8f4 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 18:54:15 +0530 Subject: [PATCH 041/173] Update mainwindow to display original coverart --- picard/ui/mainwindow.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index ca027dbea..de20f465f 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -900,6 +900,7 @@ class MainWindow(QtGui.QMainWindow): self.update_actions() metadata = None + orig_metadata = None obj = None # Clear any existing status bar messages @@ -909,6 +910,7 @@ class MainWindow(QtGui.QMainWindow): obj = list(objects)[0] if isinstance(obj, File): metadata = obj.metadata + orig_metadata = obj.orig_metadata if obj.state == obj.ERROR: msg = N_("%(filename)s (error: %(error)s)") mparms = { @@ -925,6 +927,7 @@ class MainWindow(QtGui.QMainWindow): metadata = obj.metadata if obj.num_linked_files == 1: file = obj.linked_files[0] + orig_metadata = file.orig_metadata if file.state == File.ERROR: msg = N_("%(filename)s (%(similarity)d%%) (error: %(error)s)") mparms = { @@ -945,7 +948,7 @@ class MainWindow(QtGui.QMainWindow): self.metadata_box.selection_dirty = True self.metadata_box.update() - self.cover_art_box.set_metadata(metadata, obj) + self.cover_art_box.set_metadata(metadata, orig_metadata, obj) self.selection_updated.emit(objects) def show_cover_art(self): From df1c71792b50d812b9eed2ed9db39eeae44ef6ce Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 19:20:35 +0530 Subject: [PATCH 042/173] Implement __eq__ method for CoverArtThumbnail and update _show() method --- picard/ui/coverartbox.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index f4583468e..4cf9fe7c9 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -84,6 +84,12 @@ class CoverArtThumbnail(ActiveLabel): self.clicked.connect(self.open_release_page) self.imageDropped.connect(self.fetch_remote_image) + def __eq__(self, other): + if self.data and other.data: + return self.data.data == other.data.data + else: + return False + def show(self): self.set_data(self.data, True) @@ -167,7 +173,9 @@ class CoverArtBox(QtGui.QGroupBox): self.setLayout(self.layout) def _show(self): - if self.cover_art.data == self.orig_cover_art.data: + # We want to show the 2 coverarts only if they are different + # and orig_cover_art is not None + if getattr(self.orig_cover_art, 'data', None) is None or self.cover_art == self.orig_cover_art: self.orig_cover_art.setHidden(True) self.cover_art_label.setText('') self.orig_cover_art_label.setText('') From ec694fadf34b3106b64467aba16fb71b3d6e771c Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 19:35:40 +0530 Subject: [PATCH 043/173] Add i18n support to coverart labels --- picard/ui/coverartbox.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 4cf9fe7c9..c8167959e 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -181,8 +181,8 @@ class CoverArtBox(QtGui.QGroupBox): self.orig_cover_art_label.setText('') else: self.orig_cover_art.setHidden(False) - self.cover_art_label.setText('New Cover-Art') - self.orig_cover_art_label.setText('Original Cover-Art') + self.cover_art_label.setText(_(u'New Cover-Art')) + self.orig_cover_art_label.setText(_(u'Original Cover-Art')) def show(self): self.cover_art.show() From 09c56f0e71c250d426360e4c498b48613fb25d1a Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 20:31:57 +0530 Subject: [PATCH 044/173] Add view coverart changes button --- picard/ui/coverartbox.py | 10 ++++++++++ picard/ui/mainwindow.py | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index c8167959e..33216dbb7 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -155,6 +155,7 @@ class CoverArtBox(QtGui.QGroupBox): QtGui.QGroupBox.__init__(self, "") self.layout = QtGui.QVBoxLayout() self.layout.setSpacing(6) + self.parent = parent # Kills off any borders self.setStyleSheet('''QGroupBox{background-color:none;border:1px;}''') self.setFlat(True) @@ -166,20 +167,29 @@ class CoverArtBox(QtGui.QGroupBox): self.orig_cover_art = CoverArtThumbnail(False, False, parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.orig_cover_art.setHidden(True) + self.view_changes_button = QtGui.QPushButton(_(u'View all changes'), self) + self.view_changes_button.setHidden(True) self.layout.addWidget(self.cover_art_label) self.layout.addWidget(self.cover_art) self.layout.addWidget(self.orig_cover_art_label) self.layout.addWidget(self.orig_cover_art) + self.layout.addWidget(self.view_changes_button) self.setLayout(self.layout) + self.view_changes_button.clicked.connect(self.show_cover_art_info) + + def show_cover_art_info(self): + self.parent.view_info(default_tab=1) def _show(self): # We want to show the 2 coverarts only if they are different # and orig_cover_art is not None if getattr(self.orig_cover_art, 'data', None) is None or self.cover_art == self.orig_cover_art: + self.view_changes_button.setHidden(True) self.orig_cover_art.setHidden(True) self.cover_art_label.setText('') self.orig_cover_art_label.setText('') else: + self.view_changes_button.setHidden(False) self.orig_cover_art.setHidden(False) self.cover_art_label.setText(_(u'New Cover-Art')) self.orig_cover_art_label.setText(_(u'Original Cover-Art')) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index de20f465f..286f32dd5 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -826,7 +826,7 @@ class MainWindow(QtGui.QMainWindow): dialog.show_similar_albums(obj) dialog.exec_() - def view_info(self): + def view_info(self, default_tab=0): if isinstance(self.selected_objects[0], Album): album = self.selected_objects[0] dialog = AlbumInfoDialog(album, self) @@ -836,6 +836,7 @@ class MainWindow(QtGui.QMainWindow): else: file = self.tagger.get_files_from_objects(self.selected_objects)[0] dialog = FileInfoDialog(file, self) + dialog.ui.tabWidget.setCurrentIndex(default_tab) dialog.exec_() def cluster(self): From 0ea05f72a9cccef266141d5159d735cc91cf8592 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 22 Jan 2017 20:33:01 +0530 Subject: [PATCH 045/173] Add spacer item to push coverartbox items to top --- picard/ui/coverartbox.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 33216dbb7..9e6516134 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -163,6 +163,7 @@ class CoverArtBox(QtGui.QGroupBox): self.cover_art_label = QtGui.QLabel('') self.cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.cover_art = CoverArtThumbnail(False, True, parent) + spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.orig_cover_art_label = QtGui.QLabel('') self.orig_cover_art = CoverArtThumbnail(False, False, parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) @@ -174,6 +175,7 @@ class CoverArtBox(QtGui.QGroupBox): self.layout.addWidget(self.orig_cover_art_label) self.layout.addWidget(self.orig_cover_art) self.layout.addWidget(self.view_changes_button) + self.layout.addSpacerItem(spacerItem) self.setLayout(self.layout) self.view_changes_button.clicked.connect(self.show_cover_art_info) From 53c1cf13357e5a8d9aefcc011c0a90e1212e92b9 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 16 Feb 2017 03:28:53 +0530 Subject: [PATCH 046/173] Fix coverart display string and compare datahashes instead of image data --- picard/coverart/image.py | 3 +++ picard/ui/coverartbox.py | 14 ++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/picard/coverart/image.py b/picard/coverart/image.py index 810a45deb..eacfb0093 100644 --- a/picard/coverart/image.py +++ b/picard/coverart/image.py @@ -67,6 +67,9 @@ class DataHash: finally: _datafile_mutex.unlock() + def __eq__(self, other): + return self._hash == other._hash + def delete_file(self): if self._filename: try: diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 9e6516134..94787cec4 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -86,7 +86,7 @@ class CoverArtThumbnail(ActiveLabel): def __eq__(self, other): if self.data and other.data: - return self.data.data == other.data.data + return self.data.datahash == other.data.datahash else: return False @@ -121,7 +121,9 @@ class CoverArtThumbnail(ActiveLabel): def set_metadata(self, metadata): data = None - if metadata and metadata.images: + # Check if metadata has any images. It might have images even if + # metadata's dictionary is None + if getattr(metadata, 'images', None): for image in metadata.images: if image.is_front_image(): data = image @@ -184,8 +186,8 @@ class CoverArtBox(QtGui.QGroupBox): def _show(self): # We want to show the 2 coverarts only if they are different - # and orig_cover_art is not None - if getattr(self.orig_cover_art, 'data', None) is None or self.cover_art == self.orig_cover_art: + # and orig_cover_art data is set and not the default cd shadow + if self.orig_cover_art.data is None or self.cover_art == self.orig_cover_art: self.view_changes_button.setHidden(True) self.orig_cover_art.setHidden(True) self.cover_art_label.setText('') @@ -193,8 +195,8 @@ class CoverArtBox(QtGui.QGroupBox): else: self.view_changes_button.setHidden(False) self.orig_cover_art.setHidden(False) - self.cover_art_label.setText(_(u'New Cover-Art')) - self.orig_cover_art_label.setText(_(u'Original Cover-Art')) + self.cover_art_label.setText(_(u'New Cover Art')) + self.orig_cover_art_label.setText(_(u'Original Cover Art')) def show(self): self.cover_art.show() From ab3674874a137ad38642334e36476360b0923e0b Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 16 Feb 2017 17:30:18 +0530 Subject: [PATCH 047/173] Add __eq__ method for faster comparison of CoverArtImage --- picard/coverart/image.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/picard/coverart/image.py b/picard/coverart/image.py index eacfb0093..25a000038 100644 --- a/picard/coverart/image.py +++ b/picard/coverart/image.py @@ -203,6 +203,12 @@ class CoverArtImage: def __str__(self): return unicode(self).encode('utf-8') + def __eq__(self, other): + if self and other: + return (self.datahash, self.types) == (other.datahash, other.types) + else: + return False + def set_data(self, data): """Store image data in a file, if data already exists in such file it will be re-used and no file write occurs From d809c6761c9ec6efa69e65edba6c905514bd13fd Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 16 Feb 2017 17:31:02 +0530 Subject: [PATCH 048/173] Add __nonzero__ method to metadata class when the metadata dict is empty but has related images --- picard/metadata.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/picard/metadata.py b/picard/metadata.py index 05e7bef8c..da7fd8133 100644 --- a/picard/metadata.py +++ b/picard/metadata.py @@ -49,6 +49,9 @@ class Metadata(dict): self.deleted_tags = set() self.length = 0 + def __nonzero__(self): + return len(self) or len(self.images) + def append_image(self, coverartimage): self.images.append(coverartimage) From dcdf6a621fcee9135937b0a54835f7dcea38a0c7 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 16 Feb 2017 17:31:34 +0530 Subject: [PATCH 049/173] Show the image-diff viewer even when images other than the front image have changed --- picard/ui/coverartbox.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 94787cec4..d2c4a51ab 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -83,12 +83,10 @@ class CoverArtThumbnail(ActiveLabel): self.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.clicked.connect(self.open_release_page) self.imageDropped.connect(self.fetch_remote_image) + self.related_images = list() def __eq__(self, other): - if self.data and other.data: - return self.data.datahash == other.data.datahash - else: - return False + return self.related_images == other.related_images def show(self): self.set_data(self.data, True) @@ -121,9 +119,8 @@ class CoverArtThumbnail(ActiveLabel): def set_metadata(self, metadata): data = None - # Check if metadata has any images. It might have images even if - # metadata's dictionary is None - if getattr(metadata, 'images', None): + if metadata and metadata.images: + self.related_images = metadata.images for image in metadata.images: if image.is_front_image(): data = image From f99abadd10531d7122d9c82487ffa9e188803777 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 16 Feb 2017 18:04:44 +0530 Subject: [PATCH 050/173] Show file changed status when CAA options changed --- picard/file.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/picard/file.py b/picard/file.py index 4b426ac84..d5cd09705 100644 --- a/picard/file.py +++ b/picard/file.py @@ -464,6 +464,9 @@ class File(QtCore.QObject, Item): self.similarity = 1.0 if self.state in (File.CHANGED, File.NORMAL): self.state = File.NORMAL + # Set the file state to changed if the cover art changes + if self.metadata.images != self.orig_metadata.images: + self.state = File.CHANGED if signal: log.debug("Updating file %r", self) if self.item: From 2f9e90a1cd5280e333e505032e6b948b4a0b1877 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Fri, 17 Feb 2017 16:14:14 +0530 Subject: [PATCH 051/173] Fix image drop set url --- picard/ui/coverartbox.py | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index d2c4a51ab..6be58d31a 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -82,11 +82,7 @@ class CoverArtThumbnail(ActiveLabel): self.setPixmap(self.shadow) self.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.clicked.connect(self.open_release_page) - self.imageDropped.connect(self.fetch_remote_image) - self.related_images = list() - - def __eq__(self, other): - return self.related_images == other.related_images + self.image_dropped.connect(self.fetch_remote_image) def show(self): self.set_data(self.data, True) @@ -120,7 +116,6 @@ class CoverArtThumbnail(ActiveLabel): def set_metadata(self, metadata): data = None if metadata and metadata.images: - self.related_images = metadata.images for image in metadata.images: if image.is_front_image(): data = image @@ -243,16 +238,14 @@ class CoverArtBox(QtGui.QGroupBox): else: log.warning("Can't load remote image with MIME-Type %s", mime) if fallback_data: - # Tests for image format obtained from file-magic - try: - mime = imageinfo.identify(fallback_data)[2] - except IdentificationError as e: - log.error("Unable to identify dropped data format: %s" % e) - else: - log.debug("Trying the dropped %s data", mime) - self.load_remote_image(url, mime, fallback_data) - - + # Tests for image format obtained from file-magic + try: + mime = imageinfo.identify(fallback_data)[2] + except imageinfo.IdentificationError as e: + log.error("Unable to identify dropped data format: %s" % e) + else: + log.debug("Trying the dropped %s data", mime) + self.load_remote_image(url, mime, fallback_data) def load_remote_image(self, url, mime, data): try: @@ -263,9 +256,7 @@ class CoverArtBox(QtGui.QGroupBox): except CoverArtImageError as e: log.warning("Can't load image: %s" % unicode(e)) return - pixmap = QtGui.QPixmap() - pixmap.loadFromData(data) - self.cover_art.set_data([mime, data], pixmap=pixmap) + self.cover_art.set_data(coverartimage) self._show() if isinstance(self.item, Album): album = self.item From a02125861c7ea9977424bbcac4cab559da536e0f Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Fri, 17 Feb 2017 16:48:11 +0530 Subject: [PATCH 052/173] Call file update after image is added through drag n drop --- picard/ui/coverartbox.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 6be58d31a..125ca3a78 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -83,6 +83,10 @@ class CoverArtThumbnail(ActiveLabel): self.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.clicked.connect(self.open_release_page) self.image_dropped.connect(self.fetch_remote_image) + self.related_images = list() + + def __eq__(self, other): + return self.related_images == other.related_images def show(self): self.set_data(self.data, True) @@ -116,6 +120,7 @@ class CoverArtThumbnail(ActiveLabel): def set_metadata(self, metadata): data = None if metadata and metadata.images: + self.related_images = metadata.images for image in metadata.images: if image.is_front_image(): data = image @@ -265,11 +270,14 @@ class CoverArtBox(QtGui.QGroupBox): track.metadata.append_image(coverartimage) for file in album.iterfiles(): file.metadata.append_image(coverartimage) + file.update() elif isinstance(self.item, Track): track = self.item track.metadata.append_image(coverartimage) for file in track.iterfiles(): file.metadata.append_image(coverartimage) + file.update() elif isinstance(self.item, File): file = self.item file.metadata.append_image(coverartimage) + file.update() From 9d9e37244c769a8196a506be57663f41c5dcb752 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sat, 18 Feb 2017 01:03:34 +0530 Subject: [PATCH 053/173] Fix __eq__ for CoverArtImage --- picard/coverart/image.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/picard/coverart/image.py b/picard/coverart/image.py index 25a000038..69fdd1157 100644 --- a/picard/coverart/image.py +++ b/picard/coverart/image.py @@ -206,6 +206,8 @@ class CoverArtImage: def __eq__(self, other): if self and other: return (self.datahash, self.types) == (other.datahash, other.types) + elif not self and not other: + return True else: return False From dcadefe403ec70b775c1f4a45fbd0e30ba07ee9c Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sat, 18 Feb 2017 01:04:10 +0530 Subject: [PATCH 054/173] Fix file icon status --- picard/file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/file.py b/picard/file.py index d5cd09705..e0904da6c 100644 --- a/picard/file.py +++ b/picard/file.py @@ -465,7 +465,7 @@ class File(QtCore.QObject, Item): if self.state in (File.CHANGED, File.NORMAL): self.state = File.NORMAL # Set the file state to changed if the cover art changes - if self.metadata.images != self.orig_metadata.images: + if self.metadata.images != self.orig_metadata.images and self.metadata.images: self.state = File.CHANGED if signal: log.debug("Updating file %r", self) From 317ae0994990afc96f0aa6fea7d400f1fd683e30 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sat, 18 Feb 2017 01:10:57 +0530 Subject: [PATCH 055/173] Show detailed cover-art image changes --- picard/ui/coverartbox.py | 29 +++++++++++++++++------------ picard/ui/mainwindow.py | 5 ++++- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 125ca3a78..bd55de879 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -86,7 +86,10 @@ class CoverArtThumbnail(ActiveLabel): self.related_images = list() def __eq__(self, other): - return self.related_images == other.related_images + if len(self.related_images) or len(other.related_images): + return self.related_images == other.related_images + else: + return True def show(self): self.set_data(self.data, True) @@ -167,7 +170,7 @@ class CoverArtBox(QtGui.QGroupBox): self.orig_cover_art = CoverArtThumbnail(False, False, parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.orig_cover_art.setHidden(True) - self.view_changes_button = QtGui.QPushButton(_(u'View all changes'), self) + self.view_changes_button = QtGui.QPushButton(_(u'Show more details'), self) self.view_changes_button.setHidden(True) self.layout.addWidget(self.cover_art_label) self.layout.addWidget(self.cover_art) @@ -185,27 +188,29 @@ class CoverArtBox(QtGui.QGroupBox): # We want to show the 2 coverarts only if they are different # and orig_cover_art data is set and not the default cd shadow if self.orig_cover_art.data is None or self.cover_art == self.orig_cover_art: - self.view_changes_button.setHidden(True) + self.view_changes_button.setHidden(len(self.cover_art.related_images) <= 1) self.orig_cover_art.setHidden(True) self.cover_art_label.setText('') self.orig_cover_art_label.setText('') else: - self.view_changes_button.setHidden(False) + if (isinstance(self.item, File) and isinstance(self.item.parent, Track) + or isinstance(self.item, Track) and self.item.is_linked()): + self.view_changes_button.setHidden(False) self.orig_cover_art.setHidden(False) self.cover_art_label.setText(_(u'New Cover Art')) self.orig_cover_art_label.setText(_(u'Original Cover Art')) def show(self): - self.cover_art.show() - if self.orig_cover_art.data: - self.orig_cover_art.show() - self._show() + self._show() QtGui.QGroupBox.show(self) def set_metadata(self, metadata, orig_metadata, item): - self.cover_art.set_metadata(metadata) + if not metadata or not metadata.images: + self.cover_art.set_metadata(orig_metadata) + else: + self.cover_art.set_metadata(metadata) self.orig_cover_art.set_metadata(orig_metadata) - self._show() + self.show() if item: self.item = item @@ -261,8 +266,6 @@ class CoverArtBox(QtGui.QGroupBox): except CoverArtImageError as e: log.warning("Can't load image: %s" % unicode(e)) return - self.cover_art.set_data(coverartimage) - self._show() if isinstance(self.item, Album): album = self.item album.metadata.append_image(coverartimage) @@ -281,3 +284,5 @@ class CoverArtBox(QtGui.QGroupBox): file = self.item file.metadata.append_image(coverartimage) file.update() + self.cover_art.set_metadata(self.item.metadata) + self.show() diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 286f32dd5..6747ede8c 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -836,7 +836,10 @@ class MainWindow(QtGui.QMainWindow): else: file = self.tagger.get_files_from_objects(self.selected_objects)[0] dialog = FileInfoDialog(file, self) - dialog.ui.tabWidget.setCurrentIndex(default_tab) + try: + dialog.ui.tabWidget.setCurrentIndex(default_tab) + except IndexError: + dialog.ui.tabWidget.setCurrentIndex(0) dialog.exec_() def cluster(self): From 8540afb67cf319abac7eb42e5fe82cf716dca392 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 00:46:41 +0530 Subject: [PATCH 056/173] Fix file icon status not updated on save --- picard/file.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/picard/file.py b/picard/file.py index e0904da6c..3ec135792 100644 --- a/picard/file.py +++ b/picard/file.py @@ -461,12 +461,12 @@ class File(QtCore.QObject, Item): self.state = File.CHANGED break else: - self.similarity = 1.0 - if self.state in (File.CHANGED, File.NORMAL): - self.state = File.NORMAL - # Set the file state to changed if the cover art changes - if self.metadata.images != self.orig_metadata.images and self.metadata.images: - self.state = File.CHANGED + if self.orig_metadata.images != self.metadata.images: + self.state = File.CHANGED + else: + self.similarity = 1.0 + if self.state in (File.CHANGED, File.NORMAL): + self.state = File.NORMAL if signal: log.debug("Updating file %r", self) if self.item: From 997a8a74ac3de59423255a0b397f24f46baacc0e Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 00:47:14 +0530 Subject: [PATCH 057/173] Remove try-except for IndexError --- picard/ui/mainwindow.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 6747ede8c..286f32dd5 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -836,10 +836,7 @@ class MainWindow(QtGui.QMainWindow): else: file = self.tagger.get_files_from_objects(self.selected_objects)[0] dialog = FileInfoDialog(file, self) - try: - dialog.ui.tabWidget.setCurrentIndex(default_tab) - except IndexError: - dialog.ui.tabWidget.setCurrentIndex(0) + dialog.ui.tabWidget.setCurrentIndex(default_tab) dialog.exec_() def cluster(self): From 7c4371faa46f631ef49b90308f3ca15d31c2014d Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 00:47:32 +0530 Subject: [PATCH 058/173] Fix coverart change display issues --- picard/ui/coverartbox.py | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index bd55de879..2cbc2044d 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -122,6 +122,7 @@ class CoverArtThumbnail(ActiveLabel): def set_metadata(self, metadata): data = None + self.related_images = [] if metadata and metadata.images: self.related_images = metadata.images for image in metadata.images: @@ -170,49 +171,42 @@ class CoverArtBox(QtGui.QGroupBox): self.orig_cover_art = CoverArtThumbnail(False, False, parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.orig_cover_art.setHidden(True) - self.view_changes_button = QtGui.QPushButton(_(u'Show more details'), self) - self.view_changes_button.setHidden(True) + self.show_details_button = QtGui.QPushButton(_(u'Show more details'), self) + self.show_details_button.setHidden(True) self.layout.addWidget(self.cover_art_label) self.layout.addWidget(self.cover_art) self.layout.addWidget(self.orig_cover_art_label) self.layout.addWidget(self.orig_cover_art) - self.layout.addWidget(self.view_changes_button) + self.layout.addWidget(self.show_details_button) self.layout.addSpacerItem(spacerItem) self.setLayout(self.layout) - self.view_changes_button.clicked.connect(self.show_cover_art_info) + self.show_details_button.clicked.connect(self.show_cover_art_info) def show_cover_art_info(self): self.parent.view_info(default_tab=1) - def _show(self): + def show(self): # We want to show the 2 coverarts only if they are different # and orig_cover_art data is set and not the default cd shadow if self.orig_cover_art.data is None or self.cover_art == self.orig_cover_art: - self.view_changes_button.setHidden(len(self.cover_art.related_images) <= 1) + self.show_details_button.setHidden(len(self.cover_art.related_images) <= 1) self.orig_cover_art.setHidden(True) self.cover_art_label.setText('') self.orig_cover_art_label.setText('') else: - if (isinstance(self.item, File) and isinstance(self.item.parent, Track) - or isinstance(self.item, Track) and self.item.is_linked()): - self.view_changes_button.setHidden(False) + self.show_details_button.setHidden(False) self.orig_cover_art.setHidden(False) self.cover_art_label.setText(_(u'New Cover Art')) self.orig_cover_art_label.setText(_(u'Original Cover Art')) - def show(self): - self._show() - QtGui.QGroupBox.show(self) - def set_metadata(self, metadata, orig_metadata, item): if not metadata or not metadata.images: self.cover_art.set_metadata(orig_metadata) else: self.cover_art.set_metadata(metadata) self.orig_cover_art.set_metadata(orig_metadata) + self.item = item self.show() - if item: - self.item = item def fetch_remote_image(self, url, fallback_data=None): if self.item is None: From a6120738b275f63b339a0835f2c30797536bfd62 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 03:49:22 +0530 Subject: [PATCH 059/173] Update the quick start link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9040b7016..227047107 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ MusicBrainz Picard Picard supports the majority of audio file formats, is capable of using audio fingerprints ([AcoustIDs](http://musicbrainz.org/doc/AcoustID)), performing CD lookups and [disc ID](http://musicbrainz.org/doc/Disc_ID) submissions, and it has excellent Unicode support. Additionally, there are several plugins available that extend Picard's features. -When tagging files, Picard uses an album-oriented approach. This approach allows it to utilize the MusicBrainz data as effectively as possible and correctly tag your music. For more information, [see the illustrated quick start guide to tagging](http://picard.musicbrainz.org/docs/guide/). +When tagging files, Picard uses an album-oriented approach. This approach allows it to utilize the MusicBrainz data as effectively as possible and correctly tag your music. For more information, [see the illustrated quick start guide to tagging](https://picard.musicbrainz.org/quick-start/). Picard is named after Captain Jean-Luc Picard from the TV series Star Trek: The Next Generation. From d0ad86f0e617e06630162954096ece899694add0 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 04:24:14 +0530 Subject: [PATCH 060/173] Update file icon status on save --- picard/file.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/picard/file.py b/picard/file.py index 3ec135792..cf20ed8cf 100644 --- a/picard/file.py +++ b/picard/file.py @@ -256,7 +256,8 @@ class File(QtCore.QObject, Item): for k, v in temp_info.items(): self.orig_metadata[k] = v self.error = None - self.clear_pending() + # Force update to ensure file status icon changes immediately after save + self.clear_pending(force_update=True) self._add_path_to_metadata(self.orig_metadata) if self.state != File.REMOVED: @@ -630,10 +631,12 @@ class File(QtCore.QObject, Item): self.state = File.PENDING self.update() - def clear_pending(self): + def clear_pending(self, force_update=False): if self.state == File.PENDING: self.state = File.NORMAL self.update() + elif force_update: + self.update() def iterfiles(self, save=False): yield self From 13ee5037f4bd60ce1cd8cd1a58a42257831ce999 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 15:07:13 +0530 Subject: [PATCH 061/173] Add debug info while dropping items --- picard/ui/itemviews.py | 1 + 1 file changed, 1 insertion(+) diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index eebe934ef..9a67455ab 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -467,6 +467,7 @@ class BaseTreeView(QtGui.QTreeWidget): files = [] new_files = [] for url in urls: + log.debug("Adding the URL: %r", url) if url.scheme() == "file" or not url.scheme(): # Dropping a file from iTunes gives a filename with a NULL terminator filename = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) From a2fdea1a418445b39a99769fa92c821056d213a6 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 15:30:03 +0530 Subject: [PATCH 062/173] PICARD-988: Extract file paths from NSURL --- picard/ui/itemviews.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index 9a67455ab..248f9f78e 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -19,6 +19,7 @@ import os import re +import sys from functools import partial from PyQt4 import QtCore, QtGui from picard import config, log @@ -467,10 +468,21 @@ class BaseTreeView(QtGui.QTreeWidget): files = [] new_files = [] for url in urls: - log.debug("Adding the URL: %r", url) + log.debug("Dropped the URL: %r", url.toString(QtCore.QUrl.RemoveUserInfo)) if url.scheme() == "file" or not url.scheme(): - # Dropping a file from iTunes gives a filename with a NULL terminator - filename = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) + # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 + # OSX Urls follow the NSURL scheme and need to be converted + if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): + try: + from Foundation import NSURL + except ImportError: + pass + else: + filename = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) + log.debug('OSX NSURL path detected. Dropped File is: %r', filename) + else: + # Dropping a file from iTunes gives a filename with a NULL terminator + filename = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) file = BaseTreeView.tagger.files.get(filename) if file: files.append(file) From e89c96b57a4c0c9266c25aefece365e5ea1528d1 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 15:33:52 +0530 Subject: [PATCH 063/173] Add debug log in case of import error --- picard/ui/itemviews.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index 248f9f78e..ac6b05f2c 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -476,7 +476,7 @@ class BaseTreeView(QtGui.QTreeWidget): try: from Foundation import NSURL except ImportError: - pass + log.debug("Unable to import NSURL") else: filename = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) log.debug('OSX NSURL path detected. Dropped File is: %r', filename) From 427632cc3432d8844336280753da958426787b31 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 19 Feb 2017 15:52:07 +0530 Subject: [PATCH 064/173] Move NSURL import to module level --- picard/ui/itemviews.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index ac6b05f2c..77232cfd2 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -32,6 +32,14 @@ from picard.plugin import ExtensionPoint from picard.ui.ratingwidget import RatingWidget from picard.ui.collectionmenu import CollectionMenu +if sys.platform == 'darwin': + try: + from Foundation import NSURL + NSURL_IMPORTED = True + except ImportError: + NSURL_IMPORTED = False + log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") + class BaseAction(QtGui.QAction): NAME = "Unknown" @@ -473,13 +481,11 @@ class BaseTreeView(QtGui.QTreeWidget): # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 # OSX Urls follow the NSURL scheme and need to be converted if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): - try: - from Foundation import NSURL - except ImportError: - log.debug("Unable to import NSURL") - else: + if NSURL_IMPORTED: filename = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) log.debug('OSX NSURL path detected. Dropped File is: %r', filename) + else: + log.error("Unable to get appropriate file path for %r", url.toString(QtCore.QUrl.RemoveUserInfo)) else: # Dropping a file from iTunes gives a filename with a NULL terminator filename = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) From 562266f0d1e78d8bf07d4d9cf05a8e953f6ef4ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sun, 19 Feb 2017 13:11:40 +0100 Subject: [PATCH 065/173] Note that we need pyobjc-framework-Cocoa to be installed --- scripts/package-osx.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/package-osx.md b/scripts/package-osx.md index a174d03a9..458f61b80 100644 --- a/scripts/package-osx.md +++ b/scripts/package-osx.md @@ -11,6 +11,10 @@ Download the required packages: Open the Qt DMG image, click on `Qt.mpkg` and proceed with the install using the defaults for everything. +Build PyObjC: + + pip install pyobjc-framework-Cocoa + Build SIP: tar -C /tmp -xf ~/Downloads/sip-4.19.tar.gz From ddc6b44d7e161f32ae01d39ab5b639fbf27a47ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sun, 19 Feb 2017 19:15:17 +0100 Subject: [PATCH 066/173] Don't exclude zipfile, it's needed by pyobjc, which is needed to get access to NSURL --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b634fe4e9..b0e929556 100755 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ exclude_modules = [ 'distutils', 'unittest', 'bdb', 'calendar', 'difflib', 'doctest', 'dummy_thread', 'gzip', 'optparse', 'pdb', 'plistlib', 'pyexpat', 'quopri', 'repr', - 'stringio', 'tarfile', 'uu', 'zipfile' + 'stringio', 'tarfile', 'uu' ] if do_py2app: From 7a4601f9c059cee8fc01a1c7682c8fd30512eeee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sun, 19 Feb 2017 19:30:38 +0100 Subject: [PATCH 067/173] Fix version number in the Windows installer' It should be the full version with current time for master builds, short version for tags. --- scripts/package-win.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/package-win.bat b/scripts/package-win.bat index fe260af83..7f5b4f2a8 100644 --- a/scripts/package-win.bat +++ b/scripts/package-win.bat @@ -26,7 +26,7 @@ set PATH=%CI_PROJECT_DIR%\e\scripts;%PATH% pip install mutagen==%MUTAGEN_VERSION% pip install discid==%PYTHON_DISCID_VERSION% -if NOT "%CI_BUILD_TAG%" == "" python setup.py patch_version --platform=win +if "%CI_BUILD_TAG%" == "" python setup.py patch_version --platform=win rmdir /S /Q dist build locale python setup.py clean From 5e2f6b888f3090a31f578da0d85c89e38ec5df00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20=E2=80=9CFreso=E2=80=9D=20S=2E=20Olesen?= Date: Sun, 26 Feb 2017 12:11:44 +0100 Subject: [PATCH 068/173] Add .mailmap file. Consolidate some of the mismatching author and committer name:email pairs in the logs. See https://git-scm.com/docs/git-shortlog#_mapping_authors --- .mailmap | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .mailmap diff --git a/.mailmap b/.mailmap new file mode 100644 index 000000000..170fd5550 --- /dev/null +++ b/.mailmap @@ -0,0 +1,5 @@ +Frederik “Freso” S. Olesen +Lukáš Lalinský +Sambhav Kothari +Sophist-UK +Suhas From ae93ca564620f544acb5e3092525d8586f051c61 Mon Sep 17 00:00:00 2001 From: tungol Date: Mon, 20 Feb 2017 11:54:30 -0800 Subject: [PATCH 069/173] Add build_TXXX function to ID3File class This allows plugins to subclass and customize TXXX behavior. --- picard/formats/id3.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/picard/formats/id3.py b/picard/formats/id3.py index d5d90b281..e8eee027d 100644 --- a/picard/formats/id3.py +++ b/picard/formats/id3.py @@ -175,6 +175,16 @@ class ID3File(File): 'TPOS': re.compile(r'^(?P\d+)(?:/(?P\d+))?$') } + def build_TXXX(self, encoding, desc, values): + """Construct and return a TXXX frame.""" + # This is here so that plugins can customize the behavior of TXXX + # frames in particular via subclassing. + # discussion: https://github.com/metabrainz/picard/pull/634 + # discussion: https://github.com/metabrainz/picard/pull/635 + # Used in the plugin "Compatible TXXX frames" + # PR: https://github.com/metabrainz/picard-plugins/pull/83 + return id3.TXXX(encoding=encoding, desc=desc, text=values) + def _load(self, filename): log.debug("Loading file %r", filename) file = self._get_file(encode_filename(filename)) @@ -365,7 +375,7 @@ class ID3File(File): if frameid == 'WCOP': # Only add WCOP if there is only one license URL, otherwise use TXXX:LICENSE if len(values) > 1 or not valid_urls: - tags.add(id3.TXXX(encoding=encoding, desc=self.__rtranslate_freetext[name], text=values)) + tags.add(self.build_TXXX(encoding, self.__rtranslate_freetext[name], values)) else: tags.add(id3.WCOP(url=values[0])) elif frameid == 'WOAR' and valid_urls: @@ -374,7 +384,7 @@ class ID3File(File): elif frameid.startswith('T'): if config.setting['write_id3v23']: if frameid == 'TMOO': - tags.add(id3.TXXX(encoding=encoding, desc='mood', text=values)) + tags.add(self.build_TXXX(encoding, 'mood', values)) # No need to care about the TMOO tag being added again as it is # automatically deleted by Mutagen if id2v23 is selected tags.add(getattr(id3, frameid)(encoding=encoding, text=values)) @@ -385,18 +395,18 @@ class ID3File(File): elif frameid == 'TSO2': tags.delall('TXXX:ALBUMARTISTSORT') elif name in self.__rtranslate_freetext: - tags.add(id3.TXXX(encoding=encoding, desc=self.__rtranslate_freetext[name], text=values)) + tags.add(self.build_TXXX(encoding, self.__rtranslate_freetext[name], values)) elif name.startswith('~id3:'): name = name[5:] if name.startswith('TXXX:'): - tags.add(id3.TXXX(encoding=encoding, desc=name[5:], text=values)) + tags.add(self.build_TXXX(encoding, name[5:], values)) else: frameclass = getattr(id3, name[:4], None) if frameclass: tags.add(frameclass(encoding=encoding, text=values)) # don't save private / already stored tags elif not name.startswith("~") and name not in self.__other_supported_tags: - tags.add(id3.TXXX(encoding=encoding, desc=name, text=values)) + tags.add(self.build_TXXX(encoding, name, values)) tags.add(tmcl) tags.add(tipl) From 2070d9f008f3ad9912ffc26df191503eee145e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Tue, 28 Feb 2017 15:29:23 +0200 Subject: [PATCH 070/173] Python 3.6 invalid escape sequence deprecation fixes https://docs.python.org/3/whatsnew/3.6.html#deprecated-python-behavior --- picard/__init__.py | 2 +- picard/coverart/providers/local.py | 2 +- picard/formats/apev2.py | 2 +- picard/formats/vorbis.py | 2 +- picard/script.py | 4 ++-- picard/similarity.py | 2 +- picard/ui/tagsfromfilenames.py | 6 +++--- picard/util/filenaming.py | 2 +- resources/makeqrc.py | 2 +- setup.py | 4 ++-- test/test_textencoding.py | 2 +- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/picard/__init__.py b/picard/__init__.py index 636ab4315..d41598752 100644 --- a/picard/__init__.py +++ b/picard/__init__.py @@ -58,7 +58,7 @@ def version_to_string(version, short=False): return version_str -_version_re = re.compile("(\d+)[._](\d+)(?:[._](\d+)[._]?(?:(dev|final)[._]?(\d+))?)?$") +_version_re = re.compile(r"(\d+)[._](\d+)(?:[._](\d+)[._]?(?:(dev|final)[._]?(\d+))?)?$") def version_from_string(version_str): diff --git a/picard/coverart/providers/local.py b/picard/coverart/providers/local.py index dac1dce74..b86698ec8 100644 --- a/picard/coverart/providers/local.py +++ b/picard/coverart/providers/local.py @@ -33,7 +33,7 @@ class ProviderOptionsLocal(ProviderOptions): Options for Local Files cover art provider """ - _DEFAULT_LOCAL_COVER_ART_REGEX = '^(?:cover|folder|albumart)(.*)\.(?:jpe?g|png|gif|tiff?)$' + _DEFAULT_LOCAL_COVER_ART_REGEX = r'^(?:cover|folder|albumart)(.*)\.(?:jpe?g|png|gif|tiff?)$' options = [ config.TextOption("setting", "local_cover_regex", diff --git a/picard/formats/apev2.py b/picard/formats/apev2.py index ff3e8198d..70d2a9465 100644 --- a/picard/formats/apev2.py +++ b/picard/formats/apev2.py @@ -175,7 +175,7 @@ class APEv2File(File): for tag in metadata.deleted_tags: real_name = str(self._get_tag_name(tag)) if real_name in ('Lyrics', 'Comment', 'Performer'): - tag_type = "\(%s\)" % tag.split(':', 1)[1] + tag_type = r"\(%s\)" % tag.split(':', 1)[1] for item in tags.get(real_name): if re.search(tag_type, item): tags.get(real_name).remove(item) diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py index 81d1a4600..fce8ea882 100644 --- a/picard/formats/vorbis.py +++ b/picard/formats/vorbis.py @@ -227,7 +227,7 @@ class VCommentFile(File): real_name = self._get_tag_name(tag) if real_name and real_name in tags: if real_name in ('performer', 'comment'): - tag_type = "\(%s\)" % tag.split(':', 1)[1] + tag_type = r"\(%s\)" % tag.split(':', 1)[1] for item in tags.get(real_name): if re.search(tag_type, item): tags.get(real_name).remove(item) diff --git a/picard/script.py b/picard/script.py index 1fca623c0..e3d532473 100644 --- a/picard/script.py +++ b/picard/script.py @@ -127,7 +127,7 @@ def isidentif(ch): class ScriptParser(object): - """Tagger script parser. + r"""Tagger script parser. Grammar: text ::= [^$%] | '\$' | '\%' | '\(' | '\)' | '\,' @@ -373,7 +373,7 @@ def func_pad(parser, text, length, char): def func_strip(parser, text): - return re.sub("\s+", " ", text).strip() + return re.sub(r"\s+", " ", text).strip() def func_replace(parser, text, old, new): diff --git a/picard/similarity.py b/picard/similarity.py index 6a0bdc9fd..94d06472f 100644 --- a/picard/similarity.py +++ b/picard/similarity.py @@ -40,7 +40,7 @@ def similarity(a1, b1): return astrcmp(a2, b2) -_split_words_re = re.compile('\W+', re.UNICODE) +_split_words_re = re.compile(r'\W+', re.UNICODE) def similarity2(a, b): diff --git a/picard/ui/tagsfromfilenames.py b/picard/ui/tagsfromfilenames.py index 34bb3d416..3b377b5da 100644 --- a/picard/ui/tagsfromfilenames.py +++ b/picard/ui/tagsfromfilenames.py @@ -70,7 +70,7 @@ class TagsFromFileNamesDialog(PicardDialog): item = QtGui.QTreeWidgetItem(self.ui.files) item.setText(0, os.path.basename(file.filename)) self.items.append(item) - self._tag_re = re.compile("(%\w+%)") + self._tag_re = re.compile(r"(%\w+%)") self.numeric_tags = ('tracknumber', 'totaltracks', 'discnumber', 'totaldiscs') def parse_format(self): @@ -82,9 +82,9 @@ class TagsFromFileNamesDialog(PicardDialog): name = part[1:-1] columns.append(name) if name in self.numeric_tags: - format_re.append('(?P<' + name + '>\d+)') + format_re.append('(?P<' + name + r'>\d+)') elif name in ('date'): - format_re.append('(?P<' + name + '>\d+(?:-\d+(?:-\d+)?)?)') + format_re.append('(?P<' + name + r'>\d+(?:-\d+(?:-\d+)?)?)') else: format_re.append('(?P<' + name + '>[^/]*?)') else: diff --git a/picard/util/filenaming.py b/picard/util/filenaming.py index 3262edd90..b5bf3ad97 100644 --- a/picard/util/filenaming.py +++ b/picard/util/filenaming.py @@ -155,7 +155,7 @@ def _shorten_to_utf16_ratio(text, ratio): def _make_win_short_filename(relpath, reserved=0): - """Shorten a relative file path according to WinAPI quirks. + r"""Shorten a relative file path according to WinAPI quirks. relpath: The file's path. reserved: Number of characters reserved for the parent path to be joined with, diff --git a/resources/makeqrc.py b/resources/makeqrc.py index 9337a4cd3..31bb8f211 100755 --- a/resources/makeqrc.py +++ b/resources/makeqrc.py @@ -18,7 +18,7 @@ def tryint(s): def natsort_key(s): - return [ tryint(c) for c in re.split('(\d+)', s) ] + return [ tryint(c) for c in re.split(r'(\d+)', s) ] def find_files(topdir, directory, patterns): diff --git a/setup.py b/setup.py index b0e929556..90e80607e 100755 --- a/setup.py +++ b/setup.py @@ -429,7 +429,7 @@ try: def finalize_options(self): babel.extract_messages.finalize_options(self) if input_dirs_workaround and self._input_dirs: - self.input_dirs = re.split(',\s*', self._input_dirs) + self.input_dirs = re.split(r',\s*', self._input_dirs) except ImportError: class picard_regen_pot_file(Command): @@ -707,7 +707,7 @@ try: py2exe.run(self) print("*** creating the NSIS setup script ***") - pathname = "installer\picard-setup.nsi" + pathname = r"installer\picard-setup.nsi" generate_file(pathname + ".in", pathname, {'name': 'MusicBrainz Picard', 'version': __version__, diff --git a/test/test_textencoding.py b/test/test_textencoding.py index a14d3fdff..e89238dcd 100644 --- a/test/test_textencoding.py +++ b/test/test_textencoding.py @@ -103,7 +103,7 @@ combinations_to = ( u"jLqdzdztslslzBDLuebdfmnprrstzthIpUbdfgklmnprsvx" u"zadeeiussSSLLllVvYy(C)(R)CECrFr.L.PtsTLRsRx,.x/.ddHhts" ) -ascii = u" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" +ascii = u" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" class CompatibilityTest(unittest.TestCase): From d28ce858b81682ff42f0c1e7f318dc4a718b4e9e Mon Sep 17 00:00:00 2001 From: Sophist Date: Fri, 3 Mar 2017 21:06:19 +0000 Subject: [PATCH 071/173] Avoid error on OSX invalid file path If file path is invalid we need to skip the rest of the code in the for loop since filename is not set. --- picard/ui/itemviews.py | 1 + 1 file changed, 1 insertion(+) diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index 77232cfd2..2c0e4d63f 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -486,6 +486,7 @@ class BaseTreeView(QtGui.QTreeWidget): log.debug('OSX NSURL path detected. Dropped File is: %r', filename) else: log.error("Unable to get appropriate file path for %r", url.toString(QtCore.QUrl.RemoveUserInfo)) + continue else: # Dropping a file from iTunes gives a filename with a NULL terminator filename = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) From 89002bdd1656f8906d68b16eb5e418d2a6eb3432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sat, 4 Mar 2017 23:22:05 +0100 Subject: [PATCH 072/173] Use the latest official Python package for the OS X build --- .gitlab-ci.yml | 1 + scripts/package-osx.md | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 49d40eb11..879501ebb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,6 +21,7 @@ package win: package osx: stage: package script: + - export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH - bash -xe ./scripts/package-osx.sh artifacts: paths: diff --git a/scripts/package-osx.md b/scripts/package-osx.md index 458f61b80..ee77ab9c9 100644 --- a/scripts/package-osx.md +++ b/scripts/package-osx.md @@ -1,25 +1,25 @@ # Build Mac OS X packages -This is tested on Mac OS X 10.7 with Xcode 4.6.3 installed. You need to download the Xcode package (file named `xcode4630916281a.dmg`) from the Apple Developer site. Xcode 4.6.3 is the last version that works on OS X 10.7. +This setup is tested on Mac OS X 10.7 (Lion). First you need to download Xcode and the command line tools for Xcode. +Xcode 4.6.3 is the latest version supported on 10.7. You can download both packages from the Apple Developer site: -Download the required packages: +https://developer.apple.com/download/more/ + +Download additional packages: cd ~/Downloads + curl -L -O https://www.python.org/ftp/python/2.7.13/python-2.7.13-macosx10.6.pkg curl -L -O https://download.qt.io/archive/qt/4.8/4.8.5/qt-mac-opensource-4.8.5.dmg curl -L -O https://sourceforge.net/projects/pyqt/files/sip/sip-4.19/sip-4.19.tar.gz curl -L -O https://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12/PyQt4_gpl_mac-4.12.tar.gz -Open the Qt DMG image, click on `Qt.mpkg` and proceed with the install using the defaults for everything. - -Build PyObjC: - - pip install pyobjc-framework-Cocoa +Manually install Python and Qt with the default options for everything. Build SIP: tar -C /tmp -xf ~/Downloads/sip-4.19.tar.gz cd /tmp/sip-4.19 - python configure.py --arch x86_64 + /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --arch x86_64 --deployment-target=10.6 make sudo make install @@ -27,13 +27,18 @@ Build PyQt4: tar -C /tmp -xf ~/Downloads/PyQt4_gpl_mac-4.12.tar.gz cd /tmp/PyQt4_gpl_mac-4.12 - python configure.py --use-arch x86_64 + /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --use-arch x86_64 make sudo make install +Install PyObjC: + + /Library/Frameworks/Python.framework/Versions/2.7/bin/pip install pyobjc-framework-Cocoa + Build Picard: cd /tmp git clone https://github.com/metabrainz/picard cd picard + export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH bash scripts/package-osx.sh From 57de4ce66dfb728ab574fe92cde8d0d305d827a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sat, 4 Mar 2017 23:29:23 +0100 Subject: [PATCH 073/173] We need gettext as well --- scripts/package-osx.md | 50 +++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/scripts/package-osx.md b/scripts/package-osx.md index ee77ab9c9..5d8a53783 100644 --- a/scripts/package-osx.md +++ b/scripts/package-osx.md @@ -5,36 +5,46 @@ Xcode 4.6.3 is the latest version supported on 10.7. You can download both packa https://developer.apple.com/download/more/ -Download additional packages: +Download and install Python 2.7.x and Qt 4.x to the default locations: - cd ~/Downloads curl -L -O https://www.python.org/ftp/python/2.7.13/python-2.7.13-macosx10.6.pkg curl -L -O https://download.qt.io/archive/qt/4.8/4.8.5/qt-mac-opensource-4.8.5.dmg - curl -L -O https://sourceforge.net/projects/pyqt/files/sip/sip-4.19/sip-4.19.tar.gz - curl -L -O https://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12/PyQt4_gpl_mac-4.12.tar.gz -Manually install Python and Qt with the default options for everything. +Install virtualenv: -Build SIP: - - tar -C /tmp -xf ~/Downloads/sip-4.19.tar.gz - cd /tmp/sip-4.19 - /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --arch x86_64 --deployment-target=10.6 - make - sudo make install - -Build PyQt4: - - tar -C /tmp -xf ~/Downloads/PyQt4_gpl_mac-4.12.tar.gz - cd /tmp/PyQt4_gpl_mac-4.12 - /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --use-arch x86_64 - make - sudo make install + /Library/Frameworks/Python.framework/Versions/2.7/bin/pip install virtualenv Install PyObjC: /Library/Frameworks/Python.framework/Versions/2.7/bin/pip install pyobjc-framework-Cocoa +Install SIP: + + curl -L -O https://sourceforge.net/projects/pyqt/files/sip/sip-4.19/sip-4.19.tar.gz + tar -xf sip-4.19.tar.gz + cd sip-4.19 + /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --arch x86_64 --deployment-target=10.6 + make + sudo make install + +Install PyQt4: + + curl -L -O https://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12/PyQt4_gpl_mac-4.12.tar.gz + tar -xf PyQt4_gpl_mac-4.12.tar.gz + cd PyQt4_gpl_mac-4.12 + /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --use-arch x86_64 + make + sudo make install + +Install gettext: + + curl -L -O http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.1.tar.gz + tar -xf gettext-0.19.8.1.tar.gz + cd gettext-0.19.8.1 + ./configure + make + sudo make install + Build Picard: cd /tmp From 98b39329e5cc02dde702f617d488408d96ea5fc3 Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Sun, 5 Mar 2017 09:59:32 +0100 Subject: [PATCH 074/173] Update picard.pot --- po/picard.pot | 186 +++++++++++++++++++++++++++----------------------- 1 file changed, 101 insertions(+), 85 deletions(-) diff --git a/po/picard.pot b/po/picard.pot index 37f95e74b..9893d3602 100644 --- a/po/picard.pot +++ b/po/picard.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: picard 1.4.0dev7\n" +"Project-Id-Version: picard 1.4.1dev1\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-02-14 12:57+0100\n" +"POT-Creation-Date: 2017-03-05 09:58+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -73,7 +73,7 @@ msgstr "" msgid "[loading album information]" msgstr "" -#: picard/album.py:521 +#: picard/album.py:523 #, python-format msgid "; %i image" msgid_plural "; %i images" @@ -150,22 +150,22 @@ msgstr "" msgid "My script %d" msgstr "" -#: picard/file.py:545 +#: picard/file.py:565 #, python-format msgid "No matching tracks for file '%(filename)s'" msgstr "" -#: picard/file.py:561 +#: picard/file.py:581 #, python-format msgid "No matching tracks above the threshold for file '%(filename)s'" msgstr "" -#: picard/file.py:568 +#: picard/file.py:588 #, python-format msgid "File '%(filename)s' identified!" msgstr "" -#: picard/file.py:588 +#: picard/file.py:608 #, python-format msgid "Looking up the metadata for file %(filename)s ..." msgstr "" @@ -208,23 +208,23 @@ msgstr "" msgid "[no release info]" msgstr "" -#: picard/tagger.py:405 picard/tagger.py:438 +#: picard/tagger.py:407 picard/tagger.py:440 #, python-format msgid "Adding %(count)d file from '%(directory)s' ..." msgid_plural "Adding %(count)d files from '%(directory)s' ..." msgstr[0] "" msgstr[1] "" -#: picard/tagger.py:597 +#: picard/tagger.py:599 #, python-format msgid "Removing album %(id)s: %(artist)s - %(album)s" msgstr "" -#: picard/tagger.py:613 +#: picard/tagger.py:615 msgid "CD Lookup Error" msgstr "" -#: picard/tagger.py:614 +#: picard/tagger.py:616 #, python-format msgid "" "Error while reading CD:\n" @@ -338,12 +338,12 @@ msgstr "" msgid "Whitelist" msgstr "" -#: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:625 picard/util/tags.py:21 +#: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:626 picard/util/tags.py:21 msgid "Album" msgstr "" -#: picard/ui/cdlookup.py:35 picard/ui/itemviews.py:96 -#: picard/ui/mainwindow.py:626 picard/ui/searchdialog.py:326 +#: picard/ui/cdlookup.py:35 picard/ui/itemviews.py:105 +#: picard/ui/mainwindow.py:627 picard/ui/searchdialog.py:326 #: picard/ui/searchdialog.py:513 picard/util/tags.py:22 msgid "Artist" msgstr "" @@ -377,10 +377,22 @@ msgid_plural "%s (%i releases)" msgstr[0] "" msgstr[1] "" -#: picard/ui/coverartbox.py:143 +#: picard/ui/coverartbox.py:141 msgid "View release on MusicBrainz" msgstr "" +#: picard/ui/coverartbox.py:174 +msgid "Show more details" +msgstr "" + +#: picard/ui/coverartbox.py:199 +msgid "New Cover Art" +msgstr "" + +#: picard/ui/coverartbox.py:200 +msgid "Original Cover Art" +msgstr "" + #: picard/ui/filebrowser.py:40 msgid "&Move Tagged Files Here" msgstr "" @@ -509,116 +521,116 @@ msgstr "" msgid "Pending requests" msgstr "" -#: picard/ui/itemviews.py:94 picard/util/tags.py:23 +#: picard/ui/itemviews.py:103 picard/util/tags.py:23 msgid "Title" msgstr "" -#: picard/ui/itemviews.py:95 picard/ui/searchdialog.py:325 +#: picard/ui/itemviews.py:104 picard/ui/searchdialog.py:325 #: picard/util/tags.py:87 msgid "Length" msgstr "" -#: picard/ui/itemviews.py:162 +#: picard/ui/itemviews.py:171 msgid "Bad match" msgstr "" -#: picard/ui/itemviews.py:163 +#: picard/ui/itemviews.py:172 msgid "Poor match" msgstr "" -#: picard/ui/itemviews.py:164 +#: picard/ui/itemviews.py:173 msgid "Ok match" msgstr "" -#: picard/ui/itemviews.py:165 +#: picard/ui/itemviews.py:174 msgid "Good match" msgstr "" -#: picard/ui/itemviews.py:166 +#: picard/ui/itemviews.py:175 msgid "Great match" msgstr "" -#: picard/ui/itemviews.py:167 +#: picard/ui/itemviews.py:176 msgid "Excellent match" msgstr "" -#: picard/ui/itemviews.py:243 +#: picard/ui/itemviews.py:252 msgid "&Expand all" msgstr "" -#: picard/ui/itemviews.py:245 +#: picard/ui/itemviews.py:254 msgid "&Collapse all" msgstr "" -#: picard/ui/itemviews.py:247 +#: picard/ui/itemviews.py:256 msgid "Select &all" msgstr "" -#: picard/ui/itemviews.py:249 +#: picard/ui/itemviews.py:258 msgid "Ctrl+A" msgstr "" -#: picard/ui/itemviews.py:315 +#: picard/ui/itemviews.py:324 msgid "&Other versions" msgstr "" -#: picard/ui/itemviews.py:318 +#: picard/ui/itemviews.py:327 msgid "Loading..." msgstr "" -#: picard/ui/itemviews.py:383 +#: picard/ui/itemviews.py:392 msgid "Collections" msgstr "" -#: picard/ui/itemviews.py:386 +#: picard/ui/itemviews.py:395 msgid "P&lugins" msgstr "" -#: picard/ui/itemviews.py:557 +#: picard/ui/itemviews.py:577 msgid "file view" msgstr "" -#: picard/ui/itemviews.py:558 +#: picard/ui/itemviews.py:578 msgid "Contains unmatched files and clusters" msgstr "" -#: picard/ui/itemviews.py:578 +#: picard/ui/itemviews.py:598 msgid "Clusters" msgstr "" -#: picard/ui/itemviews.py:587 +#: picard/ui/itemviews.py:607 msgid "album view" msgstr "" -#: picard/ui/itemviews.py:588 +#: picard/ui/itemviews.py:608 msgid "Contains albums and matched files" msgstr "" -#: picard/ui/itemviews.py:694 picard/ui/options/renaming.py:188 +#: picard/ui/itemviews.py:714 picard/ui/options/renaming.py:188 msgid "Error" msgstr "" -#: picard/ui/itemviews.py:698 +#: picard/ui/itemviews.py:718 msgid "Album modified and complete" msgstr "" -#: picard/ui/itemviews.py:701 +#: picard/ui/itemviews.py:721 msgid "Album unchanged and complete" msgstr "" -#: picard/ui/itemviews.py:705 +#: picard/ui/itemviews.py:725 msgid "Album modified" msgstr "" -#: picard/ui/itemviews.py:708 +#: picard/ui/itemviews.py:728 msgid "Album unchanged" msgstr "" -#: picard/ui/itemviews.py:811 +#: picard/ui/itemviews.py:831 msgid "Track saved" msgstr "" -#: picard/ui/itemviews.py:813 picard/ui/itemviews.py:817 +#: picard/ui/itemviews.py:833 picard/ui/itemviews.py:837 msgid "Pending" msgstr "" @@ -807,7 +819,7 @@ msgstr "" msgid "&Cover Art" msgstr "" -#: picard/ui/mainwindow.py:407 picard/ui/mainwindow.py:619 +#: picard/ui/mainwindow.py:407 picard/ui/mainwindow.py:620 #: picard/ui/searchdialog.py:71 msgid "Search" msgstr "" @@ -834,175 +846,179 @@ msgid "" " even if they have no metadata" msgstr "" -#: picard/ui/mainwindow.py:421 +#: picard/ui/mainwindow.py:420 +msgid "Identify the file using its AcoustID audio fingerprint" +msgstr "" + +#: picard/ui/mainwindow.py:422 msgid "Ctrl+Y" msgstr "" -#: picard/ui/mainwindow.py:424 +#: picard/ui/mainwindow.py:425 msgid "Cl&uster" msgstr "" -#: picard/ui/mainwindow.py:425 +#: picard/ui/mainwindow.py:426 msgid "Cluster files into album clusters" msgstr "" -#: picard/ui/mainwindow.py:428 +#: picard/ui/mainwindow.py:429 msgid "Ctrl+U" msgstr "" -#: picard/ui/mainwindow.py:431 +#: picard/ui/mainwindow.py:432 msgid "&Lookup" msgstr "" -#: picard/ui/mainwindow.py:432 +#: picard/ui/mainwindow.py:433 msgid "Lookup selected items in MusicBrainz" msgstr "" -#: picard/ui/mainwindow.py:437 +#: picard/ui/mainwindow.py:438 msgid "Ctrl+L" msgstr "" -#: picard/ui/mainwindow.py:440 +#: picard/ui/mainwindow.py:441 msgid "&Info..." msgstr "" -#: picard/ui/mainwindow.py:443 +#: picard/ui/mainwindow.py:444 msgid "Ctrl+I" msgstr "" -#: picard/ui/mainwindow.py:446 +#: picard/ui/mainwindow.py:447 msgid "&Refresh" msgstr "" -#: picard/ui/mainwindow.py:447 +#: picard/ui/mainwindow.py:448 msgid "Ctrl+R" msgstr "" -#: picard/ui/mainwindow.py:450 +#: picard/ui/mainwindow.py:451 msgid "&Rename Files" msgstr "" -#: picard/ui/mainwindow.py:455 +#: picard/ui/mainwindow.py:456 msgid "&Move Files" msgstr "" -#: picard/ui/mainwindow.py:460 +#: picard/ui/mainwindow.py:461 msgid "Save &Tags" msgstr "" -#: picard/ui/mainwindow.py:465 +#: picard/ui/mainwindow.py:466 msgid "Tags From &File Names..." msgstr "" -#: picard/ui/mainwindow.py:469 +#: picard/ui/mainwindow.py:470 msgid "&Open My Collections in Browser" msgstr "" -#: picard/ui/mainwindow.py:473 +#: picard/ui/mainwindow.py:474 msgid "View Error/Debug &Log" msgstr "" -#: picard/ui/mainwindow.py:476 +#: picard/ui/mainwindow.py:477 msgid "View Activity &History" msgstr "" -#: picard/ui/mainwindow.py:483 +#: picard/ui/mainwindow.py:484 msgid "Open in &Player" msgstr "" -#: picard/ui/mainwindow.py:484 +#: picard/ui/mainwindow.py:485 msgid "Play the file in your default media player" msgstr "" -#: picard/ui/mainwindow.py:488 +#: picard/ui/mainwindow.py:489 msgid "Open Containing &Folder" msgstr "" -#: picard/ui/mainwindow.py:489 +#: picard/ui/mainwindow.py:490 msgid "Open the containing folder in your file explorer" msgstr "" -#: picard/ui/mainwindow.py:518 +#: picard/ui/mainwindow.py:519 msgid "&File" msgstr "" -#: picard/ui/mainwindow.py:529 +#: picard/ui/mainwindow.py:530 msgid "&Edit" msgstr "" -#: picard/ui/mainwindow.py:535 +#: picard/ui/mainwindow.py:536 msgid "&View" msgstr "" -#: picard/ui/mainwindow.py:541 +#: picard/ui/mainwindow.py:542 msgid "&Options" msgstr "" -#: picard/ui/mainwindow.py:547 +#: picard/ui/mainwindow.py:548 msgid "&Tools" msgstr "" -#: picard/ui/mainwindow.py:558 picard/ui/util.py:35 +#: picard/ui/mainwindow.py:559 picard/ui/util.py:35 msgid "&Help" msgstr "" -#: picard/ui/mainwindow.py:586 +#: picard/ui/mainwindow.py:587 msgid "Actions" msgstr "" -#: picard/ui/mainwindow.py:627 +#: picard/ui/mainwindow.py:628 msgid "Track" msgstr "" -#: picard/ui/mainwindow.py:703 +#: picard/ui/mainwindow.py:704 msgid "All Supported Formats" msgstr "" -#: picard/ui/mainwindow.py:730 +#: picard/ui/mainwindow.py:731 #, python-format msgid "Adding multiple directories from '%(directory)s' ..." msgstr "" -#: picard/ui/mainwindow.py:735 +#: picard/ui/mainwindow.py:736 #, python-format msgid "Adding directory: '%(directory)s' ..." msgstr "" -#: picard/ui/mainwindow.py:808 +#: picard/ui/mainwindow.py:809 msgid "Configuration Required" msgstr "" -#: picard/ui/mainwindow.py:809 +#: picard/ui/mainwindow.py:810 msgid "" "Audio fingerprinting is not yet configured. Would you like to configure " "it now?" msgstr "" -#: picard/ui/mainwindow.py:912 +#: picard/ui/mainwindow.py:916 #, python-format msgid "%(filename)s (error: %(error)s)" msgstr "" -#: picard/ui/mainwindow.py:918 +#: picard/ui/mainwindow.py:922 #, python-format msgid "%(filename)s" msgstr "" -#: picard/ui/mainwindow.py:928 +#: picard/ui/mainwindow.py:933 #, python-format msgid "%(filename)s (%(similarity)d%%) (error: %(error)s)" msgstr "" -#: picard/ui/mainwindow.py:935 +#: picard/ui/mainwindow.py:940 #, python-format msgid "%(filename)s (%(similarity)d%%)" msgstr "" -#: picard/ui/mainwindow.py:971 +#: picard/ui/mainwindow.py:976 msgid "Authentication Required" msgstr "" -#: picard/ui/mainwindow.py:972 +#: picard/ui/mainwindow.py:977 msgid "" "Picard needs authorization to access your personal data on the " "MusicBrainz server. Would you like to log in now?" From 98b37b5a30f2c8064110a7a71890e8376688df9a Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Tue, 7 Mar 2017 00:41:46 +0530 Subject: [PATCH 075/173] PICARD-996: Fix cover art box show --- picard/ui/coverartbox.py | 1 + 1 file changed, 1 insertion(+) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 2cbc2044d..63c311f9e 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -198,6 +198,7 @@ class CoverArtBox(QtGui.QGroupBox): self.orig_cover_art.setHidden(False) self.cover_art_label.setText(_(u'New Cover Art')) self.orig_cover_art_label.setText(_(u'Original Cover Art')) + super(CoverArtBox, self).show() def set_metadata(self, metadata, orig_metadata, item): if not metadata or not metadata.images: From 75b9e53650ab889e2896d62ca5ac86e42ddfa026 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Tue, 7 Mar 2017 01:48:23 +0530 Subject: [PATCH 076/173] PICARD-998: Fix toolbar toggle action --- picard/ui/mainwindow.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 286f32dd5..24a1b2b9b 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -68,6 +68,7 @@ class MainWindow(QtGui.QMainWindow): config.Option("persist", "bottom_splitter_state", QtCore.QByteArray()), config.BoolOption("persist", "window_maximized", False), config.BoolOption("persist", "view_cover_art", True), + config.BoolOption("persist", "view_toolbar", True), config.BoolOption("persist", "view_file_browser", False), config.TextOption("persist", "current_directory", ""), ] @@ -192,6 +193,7 @@ class MainWindow(QtGui.QMainWindow): config.persist["window_size"] = self.size() config.persist["window_maximized"] = isMaximized config.persist["view_cover_art"] = self.show_cover_art_action.isChecked() + config.persist["view_toolbar"] = self.show_toolbar_action.isChecked() config.persist["view_file_browser"] = self.show_file_browser_action.isChecked() config.persist["bottom_splitter_state"] = self.centralWidget().saveState() self.file_browser.save_state() @@ -404,6 +406,12 @@ class MainWindow(QtGui.QMainWindow): self.show_cover_art_action.setChecked(True) self.show_cover_art_action.triggered.connect(self.show_cover_art) + self.show_toolbar_action = QtGui.QAction(_(u"&Actions"), self) + self.show_toolbar_action.setCheckable(True) + if config.persist["view_toolbar"]: + self.show_toolbar_action.setChecked(True) + self.show_toolbar_action.triggered.connect(self.show_toolbar) + self.search_action = QtGui.QAction(icontheme.lookup('system-search'), _(u"Search"), self) self.search_action.setEnabled(False) self.search_action.triggered.connect(self.search) @@ -537,7 +545,7 @@ class MainWindow(QtGui.QMainWindow): menu.addAction(self.show_file_browser_action) menu.addAction(self.show_cover_art_action) menu.addSeparator() - menu.addAction(self.toolbar_toggle_action) + menu.addAction(self.show_toolbar_action) menu.addAction(self.search_toolbar_toggle_action) menu = self.menuBar().addMenu(_(u"&Options")) menu.addAction(self.enable_renaming_action) @@ -586,7 +594,6 @@ class MainWindow(QtGui.QMainWindow): self.removeToolBar(self.toolbar) self.toolbar = toolbar = QtGui.QToolBar(_(u"Actions")) self.insertToolBar(self.search_toolbar, self.toolbar) - self.toolbar_toggle_action = self.toolbar.toggleViewAction() self.update_toolbar_style() toolbar.setObjectName("main_toolbar") @@ -615,6 +622,7 @@ class MainWindow(QtGui.QMainWindow): button.setMenu(self.cd_lookup_menu) elif action == 'separator': toolbar.addSeparator() + self.show_toolbar() def create_search_toolbar(self): self.search_toolbar = toolbar = self.addToolBar(_(u"Search")) @@ -959,6 +967,13 @@ class MainWindow(QtGui.QMainWindow): else: self.cover_art_box.hide() + def show_toolbar(self): + """Show/hide the Action toolbar.""" + if self.show_toolbar_action.isChecked(): + self.toolbar.show() + else: + self.toolbar.hide() + def show_file_browser(self): """Show/hide the file browser.""" if self.show_file_browser_action.isChecked(): From e74af213ccd5050d9c8d2c4fc80749ab93d5cab0 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Tue, 7 Mar 2017 20:05:58 +0530 Subject: [PATCH 077/173] PICARD-223: Allow Unmatched Files to be removable --- picard/cluster.py | 3 +++ picard/tagger.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/picard/cluster.py b/picard/cluster.py index 174d7e9d0..290ec2a41 100644 --- a/picard/cluster.py +++ b/picard/cluster.py @@ -295,6 +295,9 @@ class UnmatchedFiles(Cluster): def can_view_info(self): return False + def can_remove(self): + return True + class ClusterList(list, Item): diff --git a/picard/tagger.py b/picard/tagger.py index d017c85e5..bd54dcd98 100644 --- a/picard/tagger.py +++ b/picard/tagger.py @@ -604,6 +604,8 @@ class Tagger(QtGui.QApplication): } ) self.remove_album(obj) + elif isinstance(obj, UnmatchedFiles): + files.extend(list(obj.files)) elif isinstance(obj, Cluster): self.remove_cluster(obj) if files: From 14655187c83694b01c8cd1efcf4717cf1030e92b Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Wed, 8 Mar 2017 13:46:54 +0530 Subject: [PATCH 078/173] PICARD-1005: Fix drag'n'drop behaviour on blank targets In case a cluster is moved to the RHS of the windows, it gets moved to unmatched files. The cluster should instead stay as is since the target is invalid. --- picard/tagger.py | 2 ++ picard/ui/itemviews.py | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/tagger.py b/picard/tagger.py index bd54dcd98..5495a32c7 100644 --- a/picard/tagger.py +++ b/picard/tagger.py @@ -336,6 +336,8 @@ class Tagger(QtGui.QApplication): self.analyze([file]) def move_files(self, files, target): + if target is None: + return if isinstance(target, (Track, Cluster)): for file in files: file.move(target) diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index 2c0e4d63f..decab0ffb 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -529,8 +529,6 @@ class BaseTreeView(QtGui.QTreeWidget): # text/uri-list urls = data.urls() if urls: - if target is None: - target = self.tagger.unmatched_files self.drop_urls(urls, target) handled = True # application/picard.album-list From 440715631036bb36f65da89fb776aa0192565026 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Wed, 8 Mar 2017 16:47:03 +0530 Subject: [PATCH 079/173] Add debug information when aborting drop --- picard/tagger.py | 1 + 1 file changed, 1 insertion(+) diff --git a/picard/tagger.py b/picard/tagger.py index 5495a32c7..46cf7b42e 100644 --- a/picard/tagger.py +++ b/picard/tagger.py @@ -337,6 +337,7 @@ class Tagger(QtGui.QApplication): def move_files(self, files, target): if target is None: + log.debug("Aborting move since target is invalid") return if isinstance(target, (Track, Cluster)): for file in files: From b47f42d559555d5ac2f907c220a7aef3367de6ad Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Wed, 8 Mar 2017 19:57:59 +0530 Subject: [PATCH 080/173] Add get_file_path method for OSX NSURL work around --- picard/util/__init__.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/picard/util/__init__.py b/picard/util/__init__.py index b573cda41..8f62f7e60 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -31,8 +31,17 @@ from PyQt4 import QtCore from string import Template # Required for compatibility with lastfmplus which imports this from here rather than loading it direct. from functools import partial +from picard import log from picard.const import MUSICBRAINZ_SERVERS +if sys.platform == 'darwin': + try: + from Foundation import NSURL + NSURL_IMPORTED = True + except ImportError: + NSURL_IMPORTED = False + log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") + class LockableObject(QtCore.QObject): @@ -436,3 +445,19 @@ def union_sorted_lists(list1, list2): union.extend(list1[i:]) return union + + +def get_file_path(url): + # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 + # OSX Urls follow the NSURL scheme and need to be converted + file_path = "" + if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): + if NSURL_IMPORTED: + file_path = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) + log.debug('OSX NSURL path detected. Dropped File is: %r', file_path) + else: + log.error("Unable to get appropriate file path for %r", url.toString(QtCore.QUrl.RemoveUserInfo)) + else: + # Dropping a file from iTunes gives a filename with a NULL terminator + file_path = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) + return file_path From 4901cffb849ea436ca39164bfb809e8ad2537a85 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Wed, 8 Mar 2017 19:58:28 +0530 Subject: [PATCH 081/173] Use get_file_path to fetch appropriate files from URLs --- picard/ui/coverartbox.py | 6 +++--- picard/ui/itemviews.py | 25 ++++--------------------- 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 63c311f9e..4095f4695 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -25,7 +25,7 @@ from picard.album import Album from picard.coverart.image import CoverArtImage, CoverArtImageError from picard.track import Track from picard.file import File -from picard.util import encode_filename, imageinfo +from picard.util import encode_filename, imageinfo, get_file_path class ActiveLabel(QtGui.QLabel): @@ -225,8 +225,8 @@ class CoverArtBox(QtGui.QGroupBox): xml=False, priority=True, important=True) elif url.scheme() == 'file': - path = encode_filename(unicode(url.toLocalFile())) - if os.path.exists(path): + path = get_file_path(url) + if path and os.path.exists(path): mime = 'image/png' if path.lower().endswith('.png') else 'image/jpeg' with open(path, 'rb') as f: data = f.read() diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index decab0ffb..d5a2f5f99 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -27,19 +27,11 @@ from picard.album import Album, NatAlbum from picard.cluster import Cluster, ClusterList, UnmatchedFiles from picard.file import File from picard.track import Track, NonAlbumTrack -from picard.util import encode_filename, icontheme +from picard.util import encode_filename, icontheme, get_file_path from picard.plugin import ExtensionPoint from picard.ui.ratingwidget import RatingWidget from picard.ui.collectionmenu import CollectionMenu -if sys.platform == 'darwin': - try: - from Foundation import NSURL - NSURL_IMPORTED = True - except ImportError: - NSURL_IMPORTED = False - log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") - class BaseAction(QtGui.QAction): NAME = "Unknown" @@ -478,18 +470,9 @@ class BaseTreeView(QtGui.QTreeWidget): for url in urls: log.debug("Dropped the URL: %r", url.toString(QtCore.QUrl.RemoveUserInfo)) if url.scheme() == "file" or not url.scheme(): - # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 - # OSX Urls follow the NSURL scheme and need to be converted - if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): - if NSURL_IMPORTED: - filename = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) - log.debug('OSX NSURL path detected. Dropped File is: %r', filename) - else: - log.error("Unable to get appropriate file path for %r", url.toString(QtCore.QUrl.RemoveUserInfo)) - continue - else: - # Dropping a file from iTunes gives a filename with a NULL terminator - filename = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) + filename = get_file_path(url) + if not filename: + continue file = BaseTreeView.tagger.files.get(filename) if file: files.append(file) From 538cdcc22d22c3ba3c50552274add3ebde07170e Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 9 Mar 2017 00:00:23 +0530 Subject: [PATCH 082/173] Move picard.log import to block level to avoid circular dependencies --- picard/util/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/picard/util/__init__.py b/picard/util/__init__.py index 8f62f7e60..dd13ba230 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -31,7 +31,6 @@ from PyQt4 import QtCore from string import Template # Required for compatibility with lastfmplus which imports this from here rather than loading it direct. from functools import partial -from picard import log from picard.const import MUSICBRAINZ_SERVERS if sys.platform == 'darwin': @@ -40,6 +39,7 @@ if sys.platform == 'darwin': NSURL_IMPORTED = True except ImportError: NSURL_IMPORTED = False + from picard import log log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") @@ -450,6 +450,8 @@ def union_sorted_lists(list1, list2): def get_file_path(url): # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 # OSX Urls follow the NSURL scheme and need to be converted + from picard import log + file_path = "" if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): if NSURL_IMPORTED: From f228f4381f557e5cecab1b5301b0473b8c5322f9 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 9 Mar 2017 15:09:55 +0530 Subject: [PATCH 083/173] Set sip api version sip api version to be set in setup.py as it causes api conflicts in OSX tests --- setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.py b/setup.py index 90e80607e..56f467775 100755 --- a/setup.py +++ b/setup.py @@ -8,6 +8,11 @@ import os import re import sys import subprocess +import sip + +sip.setapi("QString", 2) +sip.setapi("QVariant", 2) + from picard import __version__, compat if sys.version_info < (2, 7): From 43848a2c9161746ff33648f94f420d0c96a7eadb Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 9 Mar 2017 15:10:49 +0530 Subject: [PATCH 084/173] Add OSX tests and a build matrix for different linux envs --- .travis.yml | 34 +++++++++++++++++++++++++++++----- scripts/setup-osx.sh | 11 +++++++++++ 2 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 scripts/setup-osx.sh diff --git a/.travis.yml b/.travis.yml index 7e49b3042..220d42b4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,33 @@ -sudo: required -services: - - docker +os: linux +language: python +python: "2.7" +virtualenv: + system_site_packages: true +cache: + - apt + - pip +env: + global: + - PIP_INSTALL="pip install" + matrix: + - DISCID="" MUTAGEN="$PIP_INSTALL mutagen>=1.23" + - DISCID="$PIP_INSTALL discid" MUTAGEN="$PIP_INSTALL mutagen>=1.23" + - MUTAGEN="$PIP_INSTALL mutagen==1.34" +matrix: + include: + - os: osx + osx_image: xcode8.1 + language: generic before_install: - - docker build -t picard . -script: "docker run picard" + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then bash scripts/setup-osx.sh; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get update -qq && sudo apt-get install -qq python-qt4 libdiscid0 libdiscid0-dev; $MUTAGEN; $DISCID; fi +install: + # Set up Picard + - python setup.py build_ext -i + - python setup.py build_locales -i +# Run the tests! +script: "python setup.py test" + # Tell people that tests were run notifications: irc: "chat.freenode.net#metabrainz" diff --git a/scripts/setup-osx.sh b/scripts/setup-osx.sh new file mode 100644 index 000000000..c5dfac244 --- /dev/null +++ b/scripts/setup-osx.sh @@ -0,0 +1,11 @@ +brew tap cartr/qt4 +brew tap-pin cartr/qt4 +brew install gettext +brew link gettext --force +brew install qt +brew install pyqt +brew install libdiscid +pip install mutagen +pip install discid +pip install py2app +pip install pyobjc-framework-Cocoa From 8bc493fe1017185675c74d9138c744b001234d67 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Fri, 10 Mar 2017 02:50:43 +0530 Subject: [PATCH 085/173] Revert "OS X package env rebuild" --- .gitlab-ci.yml | 1 - scripts/package-osx.md | 53 +++++++++++++++--------------------------- 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 879501ebb..49d40eb11 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,7 +21,6 @@ package win: package osx: stage: package script: - - export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH - bash -xe ./scripts/package-osx.sh artifacts: paths: diff --git a/scripts/package-osx.md b/scripts/package-osx.md index 5d8a53783..458f61b80 100644 --- a/scripts/package-osx.md +++ b/scripts/package-osx.md @@ -1,47 +1,33 @@ # Build Mac OS X packages -This setup is tested on Mac OS X 10.7 (Lion). First you need to download Xcode and the command line tools for Xcode. -Xcode 4.6.3 is the latest version supported on 10.7. You can download both packages from the Apple Developer site: +This is tested on Mac OS X 10.7 with Xcode 4.6.3 installed. You need to download the Xcode package (file named `xcode4630916281a.dmg`) from the Apple Developer site. Xcode 4.6.3 is the last version that works on OS X 10.7. -https://developer.apple.com/download/more/ +Download the required packages: -Download and install Python 2.7.x and Qt 4.x to the default locations: - - curl -L -O https://www.python.org/ftp/python/2.7.13/python-2.7.13-macosx10.6.pkg + cd ~/Downloads curl -L -O https://download.qt.io/archive/qt/4.8/4.8.5/qt-mac-opensource-4.8.5.dmg - -Install virtualenv: - - /Library/Frameworks/Python.framework/Versions/2.7/bin/pip install virtualenv - -Install PyObjC: - - /Library/Frameworks/Python.framework/Versions/2.7/bin/pip install pyobjc-framework-Cocoa - -Install SIP: - curl -L -O https://sourceforge.net/projects/pyqt/files/sip/sip-4.19/sip-4.19.tar.gz - tar -xf sip-4.19.tar.gz - cd sip-4.19 - /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --arch x86_64 --deployment-target=10.6 - make - sudo make install - -Install PyQt4: - curl -L -O https://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12/PyQt4_gpl_mac-4.12.tar.gz - tar -xf PyQt4_gpl_mac-4.12.tar.gz - cd PyQt4_gpl_mac-4.12 - /Library/Frameworks/Python.framework/Versions/2.7/bin/python configure.py --use-arch x86_64 + +Open the Qt DMG image, click on `Qt.mpkg` and proceed with the install using the defaults for everything. + +Build PyObjC: + + pip install pyobjc-framework-Cocoa + +Build SIP: + + tar -C /tmp -xf ~/Downloads/sip-4.19.tar.gz + cd /tmp/sip-4.19 + python configure.py --arch x86_64 make sudo make install -Install gettext: +Build PyQt4: - curl -L -O http://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.1.tar.gz - tar -xf gettext-0.19.8.1.tar.gz - cd gettext-0.19.8.1 - ./configure + tar -C /tmp -xf ~/Downloads/PyQt4_gpl_mac-4.12.tar.gz + cd /tmp/PyQt4_gpl_mac-4.12 + python configure.py --use-arch x86_64 make sudo make install @@ -50,5 +36,4 @@ Build Picard: cd /tmp git clone https://github.com/metabrainz/picard cd picard - export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH bash scripts/package-osx.sh From d74332960958dbb299f99fb99f2945e273ec6899 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Fri, 10 Mar 2017 21:53:01 +0530 Subject: [PATCH 086/173] Dissolve the get_file_path method It seems to be causing build errors with OSX. Moved the required LoC to both itemviews and coverartbox --- picard/ui/coverartbox.py | 24 ++++++++++++++++++++++-- picard/ui/itemviews.py | 25 +++++++++++++++++++++---- picard/util/__init__.py | 27 --------------------------- 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 4095f4695..766f2d7ff 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -18,6 +18,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import os +import sys from functools import partial from PyQt4 import QtCore, QtGui, QtNetwork from picard import config, log @@ -25,7 +26,15 @@ from picard.album import Album from picard.coverart.image import CoverArtImage, CoverArtImageError from picard.track import Track from picard.file import File -from picard.util import encode_filename, imageinfo, get_file_path +from picard.util import encode_filename, imageinfo + +if sys.platform == 'darwin': + try: + from Foundation import NSURL + NSURL_IMPORTED = True + except ImportError: + NSURL_IMPORTED = False + log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") class ActiveLabel(QtGui.QLabel): @@ -225,7 +234,18 @@ class CoverArtBox(QtGui.QGroupBox): xml=False, priority=True, important=True) elif url.scheme() == 'file': - path = get_file_path(url) + log.debug("Dropped the URL: %r", url.toString(QtCore.QUrl.RemoveUserInfo)) + if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): + # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 + # OSX Urls follow the NSURL scheme and need to be converted + if NSURL_IMPORTED: + path = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) + log.debug('OSX NSURL path detected. Dropped File is: %r', path) + else: + log.error("Unable to get appropriate file path for %r", url.toString(QtCore.QUrl.RemoveUserInfo)) + else: + # Dropping a file from iTunes gives a path with a NULL terminator + path = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) if path and os.path.exists(path): mime = 'image/png' if path.lower().endswith('.png') else 'image/jpeg' with open(path, 'rb') as f: diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py index d5a2f5f99..f08cda2b0 100644 --- a/picard/ui/itemviews.py +++ b/picard/ui/itemviews.py @@ -27,11 +27,19 @@ from picard.album import Album, NatAlbum from picard.cluster import Cluster, ClusterList, UnmatchedFiles from picard.file import File from picard.track import Track, NonAlbumTrack -from picard.util import encode_filename, icontheme, get_file_path +from picard.util import encode_filename, icontheme from picard.plugin import ExtensionPoint from picard.ui.ratingwidget import RatingWidget from picard.ui.collectionmenu import CollectionMenu +if sys.platform == 'darwin': + try: + from Foundation import NSURL + NSURL_IMPORTED = True + except ImportError: + NSURL_IMPORTED = False + log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") + class BaseAction(QtGui.QAction): NAME = "Unknown" @@ -470,9 +478,18 @@ class BaseTreeView(QtGui.QTreeWidget): for url in urls: log.debug("Dropped the URL: %r", url.toString(QtCore.QUrl.RemoveUserInfo)) if url.scheme() == "file" or not url.scheme(): - filename = get_file_path(url) - if not filename: - continue + if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): + # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 + # OSX Urls follow the NSURL scheme and need to be converted + if NSURL_IMPORTED: + filename = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) + log.debug('OSX NSURL path detected. Dropped File is: %r', filename) + else: + log.error("Unable to get appropriate file path for %r", url.toString(QtCore.QUrl.RemoveUserInfo)) + continue + else: + # Dropping a file from iTunes gives a filename with a NULL terminator + filename = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) file = BaseTreeView.tagger.files.get(filename) if file: files.append(file) diff --git a/picard/util/__init__.py b/picard/util/__init__.py index dd13ba230..b573cda41 100644 --- a/picard/util/__init__.py +++ b/picard/util/__init__.py @@ -33,15 +33,6 @@ from string import Template from functools import partial from picard.const import MUSICBRAINZ_SERVERS -if sys.platform == 'darwin': - try: - from Foundation import NSURL - NSURL_IMPORTED = True - except ImportError: - NSURL_IMPORTED = False - from picard import log - log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") - class LockableObject(QtCore.QObject): @@ -445,21 +436,3 @@ def union_sorted_lists(list1, list2): union.extend(list1[i:]) return union - - -def get_file_path(url): - # Workaround for https://bugreports.qt.io/browse/QTBUG-40449 - # OSX Urls follow the NSURL scheme and need to be converted - from picard import log - - file_path = "" - if sys.platform == 'darwin' and unicode(url.path()).startswith('/.file/id='): - if NSURL_IMPORTED: - file_path = os.path.normpath(os.path.realpath(unicode(NSURL.URLWithString_(str(url.toString())).filePathURL().path()).rstrip("\0"))) - log.debug('OSX NSURL path detected. Dropped File is: %r', file_path) - else: - log.error("Unable to get appropriate file path for %r", url.toString(QtCore.QUrl.RemoveUserInfo)) - else: - # Dropping a file from iTunes gives a filename with a NULL terminator - file_path = os.path.normpath(os.path.realpath(unicode(url.toLocalFile()).rstrip("\0"))) - return file_path From 418b081869397d858890c9c41ef8046f2d07ab7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Fri, 10 Mar 2017 19:51:46 +0100 Subject: [PATCH 087/173] Fix py2app version --- .gitlab-ci.yml | 1 + scripts/package-osx.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 49d40eb11..b99fb4d17 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ variables: DISCID_VERSION: "0.6.1" PYTHON_DISCID_VERSION: "1.1.1" MUTAGEN_VERSION: "1.36" + PY2APP_VERSION: "0.11" package win: stage: package diff --git a/scripts/package-osx.sh b/scripts/package-osx.sh index be230e8e1..cde79f326 100644 --- a/scripts/package-osx.sh +++ b/scripts/package-osx.sh @@ -16,7 +16,7 @@ virtualenv -p python2.7 --system-site-packages e pip install mutagen==$MUTAGEN_VERSION pip install discid==$PYTHON_DISCID_VERSION -pip install py2app +pip install py2app==$PY2APP_VERSION perl -pi -e 's{plugin_dir = (.*)$}{plugin_dir = "/Developer/Applications/Qt/plugins"}' e/lib/python2.7/site-packages/py2app/recipes/sip.py From 659c2a3a5bfbf684f677db8f2a5bac454d1ae1b3 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 16 Feb 2017 11:47:02 +0100 Subject: [PATCH 088/173] Store cover images in the album original metadata --- picard/album.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/picard/album.py b/picard/album.py index 6cc225553..e332ee2aa 100644 --- a/picard/album.py +++ b/picard/album.py @@ -58,6 +58,7 @@ class Album(DataObject, Item): def __init__(self, id, discid=None): DataObject.__init__(self, id) self.metadata = Metadata() + self.orig_metadata = Metadata() self.tracks = [] self.loaded = False self.load_task = None @@ -382,6 +383,10 @@ class Album(DataObject, Item): def _add_file(self, track, file): self._files += 1 self.update(update_tracks=False) + # Fixme: The next lines can probably be moved to update() + for image in file.orig_metadata.images: + if image not in self.orig_metadata.images: + self.orig_metadata.append_image(image) def _remove_file(self, track, file): self._files -= 1 From d5e91efb94d0ef4fbaa3b4a96886798b2bbfdad7 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 16 Feb 2017 11:47:54 +0100 Subject: [PATCH 089/173] Store cover images in the cluster metadata --- picard/cluster.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/picard/cluster.py b/picard/cluster.py index 290ec2a41..546cfe834 100644 --- a/picard/cluster.py +++ b/picard/cluster.py @@ -69,6 +69,9 @@ class Cluster(QtCore.QObject, Item): self.metadata.length += file.metadata.length file._move(self) file.update(signal=False) + cover = file.metadata.get_single_front_image() + if cover and cover[0] not in self.metadata.images: + self.metadata.append_image(cover[0]) self.files.extend(files) self.metadata['totaltracks'] = len(self.files) self.item.add_files(files) @@ -79,6 +82,9 @@ class Cluster(QtCore.QObject, Item): self.metadata['totaltracks'] = len(self.files) file._move(self) file.update(signal=False) + cover = file.metadata.get_single_front_image() + if cover and cover[0] not in self.metadata.images: + self.metadata.append_image(cover[0]) self.item.add_file(file) def remove_file(self, file): From 876a3055b0b6a8d6a8397fe460c137a992f8409c Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 16 Feb 2017 11:49:33 +0100 Subject: [PATCH 090/173] Add debug information This will be removed later, but it's useful to see the actual metadata arriving to CoverArtBox. --- picard/ui/coverartbox.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 766f2d7ff..8205c3bfe 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -83,9 +83,10 @@ class ActiveLabel(QtGui.QLabel): class CoverArtThumbnail(ActiveLabel): - def __init__(self, active=False, drops=False, *args, **kwargs): + def __init__(self, active=False, drops=False, name=None, *args, **kwargs): super(CoverArtThumbnail, self).__init__(active, drops, *args, **kwargs) self.data = None + self.name = name self.shadow = QtGui.QPixmap(":/images/CoverArtShadow.png") self.release = None self.setPixmap(self.shadow) @@ -134,6 +135,8 @@ class CoverArtThumbnail(ActiveLabel): self.related_images = [] if metadata and metadata.images: self.related_images = metadata.images + print("%s using images:" % (self.name), metadata.images) + # TODO: Combine all images to show there are different images in use instead of getting the first one for image in metadata.images: if image.is_front_image(): data = image @@ -174,10 +177,10 @@ class CoverArtBox(QtGui.QGroupBox): self.item = None self.cover_art_label = QtGui.QLabel('') self.cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) - self.cover_art = CoverArtThumbnail(False, True, parent) + self.cover_art = CoverArtThumbnail(False, True, "new cover", parent) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.orig_cover_art_label = QtGui.QLabel('') - self.orig_cover_art = CoverArtThumbnail(False, False, parent) + self.orig_cover_art = CoverArtThumbnail(False, False, "original cover", parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.orig_cover_art.setHidden(True) self.show_details_button = QtGui.QPushButton(_(u'Show more details'), self) From 3dab58c22e703e2de0b205ce7c700c634c540f47 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 16 Feb 2017 22:59:26 +0100 Subject: [PATCH 091/173] Draw stack of covers when metadata contains multiple images Now CoverArtThumbnails uses all images in metadata to draw a stack of covers so when a release contains files with different original metadata covers that will be overwritten, the user can intuitively see that. --- picard/ui/coverartbox.py | 65 +++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 8205c3bfe..a6be172f6 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -104,6 +104,19 @@ class CoverArtThumbnail(ActiveLabel): def show(self): self.set_data(self.data, True) + def decorate_cover(self, pixmap): + offx, offy, w, h = (1, 1, 121, 121) + cover = QtGui.QPixmap(self.shadow) + pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + painter = QtGui.QPainter(cover) + bgcolor = QtGui.QColor.fromRgb(0, 0, 0, 128) + painter.fillRect(QtCore.QRectF(offx, offy, w, h), bgcolor) + x = offx + (w - pixmap.width()) / 2 + y = offy + (h - pixmap.height()) / 2 + painter.drawPixmap(x, y, pixmap) + painter.end() + return cover + def set_data(self, data, force=False, pixmap=None): if not force and self.data == data: return @@ -114,36 +127,46 @@ class CoverArtThumbnail(ActiveLabel): cover = self.shadow if self.data: + w, h, displacements = (121, 121, 20) if pixmap is None: - pixmap = QtGui.QPixmap() - pixmap.loadFromData(self.data.data) - if not pixmap.isNull(): - offx, offy, w, h = (1, 1, 121, 121) - cover = QtGui.QPixmap(self.shadow) - pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - painter = QtGui.QPainter(cover) - bgcolor = QtGui.QColor.fromRgb(0, 0, 0, 128) - painter.fillRect(QtCore.QRectF(offx, offy, w, h), bgcolor) - x = offx + (w - pixmap.width()) / 2 - y = offy + (h - pixmap.height()) / 2 - painter.drawPixmap(x, y, pixmap) - painter.end() - self.setPixmap(cover) + if len(self.data) == 1: + pixmap = QtGui.QPixmap() + pixmap.loadFromData(self.data[0].data) + else: + stack_width, stack_height = (w+displacements*(len(self.data)-1), h+displacements*(len(self.data)-1)) + pixmap = QtGui.QPixmap(stack_width, stack_height) + bgcolor = self.palette().color(QtGui.QPalette.Window) + painter = QtGui.QPainter(pixmap) + painter.fillRect(QtCore.QRectF(0, 0, stack_width, stack_height), bgcolor) + x = w / 2 + y = h / 2 + for image in self.data: + thumb = QtGui.QPixmap() + thumb.loadFromData(image.data) + thumb = self.decorate_cover( thumb ) + painter.drawPixmap(x - thumb.width()/2, y - thumb.height()/2, thumb) + x += displacements + y += displacements + painter.end() + pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + self.setPixmap(pixmap) + pixmap = None + + if pixmap and not pixmap.isNull(): + cover = self.decorate_cover( pixmap ) + self.setPixmap(cover) def set_metadata(self, metadata): data = None self.related_images = [] if metadata and metadata.images: self.related_images = metadata.images - print("%s using images:" % (self.name), metadata.images) + log.debug("%s using images:" % (self.name), metadata.images) # TODO: Combine all images to show there are different images in use instead of getting the first one - for image in metadata.images: - if image.is_front_image(): - data = image - break - else: + data = [ image for image in metadata.images if image.is_front_image() ] + if not data: # There's no front image, choose the first one available - data = metadata.images[0] + data = [ metadata.images[0] ] self.set_data(data) release = None if metadata: From 14e2639e1a5d491959e452fb9f4b825a037740f4 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 16 Feb 2017 23:31:11 +0100 Subject: [PATCH 092/173] Replace front images instead of appending them When an image is dropped, replace the front image with the dropped one. Appending front covers is counterintuitive --- picard/metadata.py | 5 +++++ picard/ui/coverartbox.py | 16 +++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/picard/metadata.py b/picard/metadata.py index da7fd8133..afbb51026 100644 --- a/picard/metadata.py +++ b/picard/metadata.py @@ -55,6 +55,11 @@ class Metadata(dict): def append_image(self, coverartimage): self.images.append(coverartimage) + def set_front_image(self, coverartimage): + # First remove all front images + self.images[:] = [ img for img in self.images if not img.is_front_image() ] + self.images.append(coverartimage) + @property def images_to_be_saved_to_tags(self): if not config.setting["save_images_to_tags"]: diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index a6be172f6..555bdf39d 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -302,6 +302,7 @@ class CoverArtBox(QtGui.QGroupBox): try: coverartimage = CoverArtImage( url=url.toString(), + types=[u'front'], data=data ) except CoverArtImageError as e: @@ -309,21 +310,18 @@ class CoverArtBox(QtGui.QGroupBox): return if isinstance(self.item, Album): album = self.item - album.metadata.append_image(coverartimage) + album.metadata.set_front_image(coverartimage) for track in album.tracks: - track.metadata.append_image(coverartimage) + track.metadata.set_front_image(coverartimage) for file in album.iterfiles(): - file.metadata.append_image(coverartimage) - file.update() + file.metadata.set_front_image(coverartimage) elif isinstance(self.item, Track): track = self.item - track.metadata.append_image(coverartimage) + track.metadata.set_front_image(coverartimage) for file in track.iterfiles(): - file.metadata.append_image(coverartimage) - file.update() + file.metadata.set_front_image(coverartimage) elif isinstance(self.item, File): file = self.item - file.metadata.append_image(coverartimage) - file.update() + file.metadata.set_front_image(coverartimage) self.cover_art.set_metadata(self.item.metadata) self.show() From b4bfaed65fd2668a877f1c0e7d54e9fc4f883d96 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 16 Feb 2017 23:50:09 +0100 Subject: [PATCH 093/173] Update album images when an album is to be shown When a user drops different images to be used as covers of different tracks of the same album, the album's metadata.images list didn't reflect these changes. This commit updates the list of images so CoverArtBox always shows the correct values --- picard/album.py | 13 +++++++++++++ picard/ui/mainwindow.py | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/picard/album.py b/picard/album.py index e332ee2aa..4d85ba9b0 100644 --- a/picard/album.py +++ b/picard/album.py @@ -557,6 +557,19 @@ class Album(DataObject, Item): self.tagger.albums[mbid] = self self.load(priority=True, refresh=True) + def update_metadata_images(self): + new_images = [] + for track in self.tracks: + for file in list(track.linked_files): + for image in file.metadata.images: + if image not in new_images: + new_images.append(image) + for file in list(self.unmatched_files.files): + for image in file.metadata.images: + if image not in new_images: + new_images.append(image) + self.metadata.images = new_images + class NatAlbum(Album): diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 24a1b2b9b..a9f23a0ae 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -952,6 +952,10 @@ class MainWindow(QtGui.QMainWindow): } self.set_statusbar_message(msg, mparms, echo=None, history=None) + elif isinstance(obj, Album): + obj.update_metadata_images() + metadata = obj.metadata + orig_metadata = obj.orig_metadata elif obj.can_edit_tags(): metadata = obj.metadata From d86d7f205b2b35af396edf429d77a57047522d08 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Sun, 5 Mar 2017 19:06:18 +0100 Subject: [PATCH 094/173] Fix update of album original images When the tracks of an album change their original images (for example, because the tracks are saved and the original images change) then them album also has to update its original images --- picard/album.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/picard/album.py b/picard/album.py index 4d85ba9b0..d2dbb276a 100644 --- a/picard/album.py +++ b/picard/album.py @@ -383,10 +383,6 @@ class Album(DataObject, Item): def _add_file(self, track, file): self._files += 1 self.update(update_tracks=False) - # Fixme: The next lines can probably be moved to update() - for image in file.orig_metadata.images: - if image not in self.orig_metadata.images: - self.orig_metadata.append_image(image) def _remove_file(self, track, file): self._files -= 1 @@ -559,16 +555,24 @@ class Album(DataObject, Item): def update_metadata_images(self): new_images = [] + orig_images = [] for track in self.tracks: for file in list(track.linked_files): for image in file.metadata.images: if image not in new_images: new_images.append(image) + for image in file.orig_metadata.images: + if image not in orig_images: + orig_images.append(image) for file in list(self.unmatched_files.files): for image in file.metadata.images: if image not in new_images: new_images.append(image) + for image in file.orig_metadata.images: + if image not in orig_images: + orig_images.append(image) self.metadata.images = new_images + self.orig_metadata.images = orig_images class NatAlbum(Album): From 0c7e2a0ecd27ec78e2c81b0010932871ff5f13af Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Sun, 5 Mar 2017 19:09:21 +0100 Subject: [PATCH 095/173] PEP8 fixes --- picard/ui/coverartbox.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 555bdf39d..1fca3dea8 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -133,7 +133,7 @@ class CoverArtThumbnail(ActiveLabel): pixmap = QtGui.QPixmap() pixmap.loadFromData(self.data[0].data) else: - stack_width, stack_height = (w+displacements*(len(self.data)-1), h+displacements*(len(self.data)-1)) + stack_width, stack_height = (w + displacements * (len(self.data) - 1), h + displacements * (len(self.data) - 1)) pixmap = QtGui.QPixmap(stack_width, stack_height) bgcolor = self.palette().color(QtGui.QPalette.Window) painter = QtGui.QPainter(pixmap) @@ -143,8 +143,8 @@ class CoverArtThumbnail(ActiveLabel): for image in self.data: thumb = QtGui.QPixmap() thumb.loadFromData(image.data) - thumb = self.decorate_cover( thumb ) - painter.drawPixmap(x - thumb.width()/2, y - thumb.height()/2, thumb) + thumb = self.decorate_cover(thumb) + painter.drawPixmap(x - thumb.width() / 2, y - thumb.height() / 2, thumb) x += displacements y += displacements painter.end() @@ -153,7 +153,7 @@ class CoverArtThumbnail(ActiveLabel): pixmap = None if pixmap and not pixmap.isNull(): - cover = self.decorate_cover( pixmap ) + cover = self.decorate_cover(pixmap) self.setPixmap(cover) def set_metadata(self, metadata): @@ -162,11 +162,10 @@ class CoverArtThumbnail(ActiveLabel): if metadata and metadata.images: self.related_images = metadata.images log.debug("%s using images:" % (self.name), metadata.images) - # TODO: Combine all images to show there are different images in use instead of getting the first one - data = [ image for image in metadata.images if image.is_front_image() ] + data = [image for image in metadata.images if image.is_front_image()] if not data: # There's no front image, choose the first one available - data = [ metadata.images[0] ] + data = [metadata.images[0]] self.set_data(data) release = None if metadata: From cb07b7874e6aa5b4e9d22f2b48f505c8d476a327 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Sun, 5 Mar 2017 20:00:52 +0100 Subject: [PATCH 096/173] Set the default empty cover art when there's no cover art to show When there's no data, we should show the empty cover art box --- picard/ui/coverartbox.py | 59 +++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 1fca3dea8..5622cb7dc 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -126,35 +126,38 @@ class CoverArtThumbnail(ActiveLabel): return cover = self.shadow - if self.data: - w, h, displacements = (121, 121, 20) - if pixmap is None: - if len(self.data) == 1: - pixmap = QtGui.QPixmap() - pixmap.loadFromData(self.data[0].data) - else: - stack_width, stack_height = (w + displacements * (len(self.data) - 1), h + displacements * (len(self.data) - 1)) - pixmap = QtGui.QPixmap(stack_width, stack_height) - bgcolor = self.palette().color(QtGui.QPalette.Window) - painter = QtGui.QPainter(pixmap) - painter.fillRect(QtCore.QRectF(0, 0, stack_width, stack_height), bgcolor) - x = w / 2 - y = h / 2 - for image in self.data: - thumb = QtGui.QPixmap() - thumb.loadFromData(image.data) - thumb = self.decorate_cover(thumb) - painter.drawPixmap(x - thumb.width() / 2, y - thumb.height() / 2, thumb) - x += displacements - y += displacements - painter.end() - pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - self.setPixmap(pixmap) - pixmap = None + if not self.data: + self.setPixmap(self.shadow) + return - if pixmap and not pixmap.isNull(): - cover = self.decorate_cover(pixmap) - self.setPixmap(cover) + w, h, displacements = (121, 121, 20) + if pixmap is None: + if len(self.data) == 1: + pixmap = QtGui.QPixmap() + pixmap.loadFromData(self.data[0].data) + else: + stack_width, stack_height = (w + displacements * (len(self.data) - 1), h + displacements * (len(self.data) - 1)) + pixmap = QtGui.QPixmap(stack_width, stack_height) + bgcolor = self.palette().color(QtGui.QPalette.Window) + painter = QtGui.QPainter(pixmap) + painter.fillRect(QtCore.QRectF(0, 0, stack_width, stack_height), bgcolor) + x = w / 2 + y = h / 2 + for image in self.data: + thumb = QtGui.QPixmap() + thumb.loadFromData(image.data) + thumb = self.decorate_cover(thumb) + painter.drawPixmap(x - thumb.width() / 2, y - thumb.height() / 2, thumb) + x += displacements + y += displacements + painter.end() + pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) + self.setPixmap(pixmap) + pixmap = None + + if pixmap and not pixmap.isNull(): + cover = self.decorate_cover(pixmap) + self.setPixmap(cover) def set_metadata(self, metadata): data = None From c67decd47e84bf0d67b3fee407b912ee5be22f1b Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Fri, 17 Feb 2017 10:16:29 +0100 Subject: [PATCH 097/173] Update file status after dropping images --- picard/ui/coverartbox.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 5622cb7dc..4aac2d1a0 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -317,13 +317,16 @@ class CoverArtBox(QtGui.QGroupBox): track.metadata.set_front_image(coverartimage) for file in album.iterfiles(): file.metadata.set_front_image(coverartimage) + file.update() elif isinstance(self.item, Track): track = self.item track.metadata.set_front_image(coverartimage) for file in track.iterfiles(): file.metadata.set_front_image(coverartimage) + file.update() elif isinstance(self.item, File): file = self.item file.metadata.set_front_image(coverartimage) + file.update() self.cover_art.set_metadata(self.item.metadata) self.show() From 42dad8031a729470b80dcb19bddd007feb6a3947 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 09:05:00 +0100 Subject: [PATCH 098/173] Move duplicate code to a common private function --- picard/album.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/picard/album.py b/picard/album.py index d2dbb276a..6315c926c 100644 --- a/picard/album.py +++ b/picard/album.py @@ -556,21 +556,21 @@ class Album(DataObject, Item): def update_metadata_images(self): new_images = [] orig_images = [] - for track in self.tracks: - for file in list(track.linked_files): - for image in file.metadata.images: - if image not in new_images: - new_images.append(image) - for image in file.orig_metadata.images: - if image not in orig_images: - orig_images.append(image) - for file in list(self.unmatched_files.files): + + def process_file_images(file): for image in file.metadata.images: if image not in new_images: new_images.append(image) for image in file.orig_metadata.images: if image not in orig_images: orig_images.append(image) + + for track in self.tracks: + for file in list(track.linked_files): + process_file_images(file) + for file in list(self.unmatched_files.files): + process_file_images(file) + self.metadata.images = new_images self.orig_metadata.images = orig_images From fdb3ae4e4437a88a39ba31bb54aa6c83ea2fa6c4 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 10:19:29 +0100 Subject: [PATCH 099/173] Implement CoverArtImage.__hash__ This make CoverArtImage objects hashable --- picard/coverart/image.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/picard/coverart/image.py b/picard/coverart/image.py index 69fdd1157..cb036cd47 100644 --- a/picard/coverart/image.py +++ b/picard/coverart/image.py @@ -70,6 +70,9 @@ class DataHash: def __eq__(self, other): return self._hash == other._hash + def hash(self): + return self._hash + def delete_file(self): if self._filename: try: @@ -211,6 +214,11 @@ class CoverArtImage: else: return False + def __hash__(self): + if self.datahash is None: + return 0 + return hash(self.datahash.hash()) + def set_data(self, data): """Store image data in a file, if data already exists in such file it will be re-used and no file write occurs From b1520c155f74da001448418e5bd47525fc8b093c Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 10:22:19 +0100 Subject: [PATCH 100/173] Cache generated pixmaps in CoverArtThumbnail This commit implements a LRU cache for generated pixmaps so they're not generated each time the function is called (saving a lot of I/O and CPU). The cache is shared by cover_art and orig_cover_art objects and currently is configured to contain a maximum of 40 pixmaps. --- picard/ui/coverartbox.py | 54 ++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 4aac2d1a0..b46bbd1d5 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -37,6 +37,36 @@ if sys.platform == 'darwin': log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") +class LRUCache(dict): + + def __init__(self, max_size): + self._ordered_keys = [] + self._max_size = max_size + + def __getitem__(self, key): + if key in self: + self._ordered_keys.remove(key) + self._ordered_keys.insert(0, key) + return super(LRUCache, self).__getitem__(key) + + def __setitem__(self, key, value): + if key in self: + self._ordered_keys.remove(key) + self._ordered_keys.insert(0, key) + + r = super(LRUCache, self).__setitem__(key, value) + + if len(self) > self._max_size: + item = self._ordered_keys.pop() + super(LRUCache, self).__delitem__(item) + + return r + + def __delitem__(self, key): + self._ordered_keys.remove(key) + super(LRUCache, self).__delitem__(key) + + class ActiveLabel(QtGui.QLabel): """Clickable QLabel.""" @@ -83,7 +113,7 @@ class ActiveLabel(QtGui.QLabel): class CoverArtThumbnail(ActiveLabel): - def __init__(self, active=False, drops=False, name=None, *args, **kwargs): + def __init__(self, active=False, drops=False, name=None, pixmap_cache=None, *args, **kwargs): super(CoverArtThumbnail, self).__init__(active, drops, *args, **kwargs) self.data = None self.name = name @@ -94,6 +124,7 @@ class CoverArtThumbnail(ActiveLabel): self.clicked.connect(self.open_release_page) self.image_dropped.connect(self.fetch_remote_image) self.related_images = list() + self._pixmap_cache = pixmap_cache def __eq__(self, other): if len(self.related_images) or len(other.related_images): @@ -117,7 +148,7 @@ class CoverArtThumbnail(ActiveLabel): painter.end() return cover - def set_data(self, data, force=False, pixmap=None): + def set_data(self, data, force=False): if not force and self.data == data: return @@ -125,16 +156,19 @@ class CoverArtThumbnail(ActiveLabel): if not force and self.parent().isHidden(): return - cover = self.shadow if not self.data: self.setPixmap(self.shadow) return w, h, displacements = (121, 121, 20) - if pixmap is None: + key = hash(tuple(sorted(self.data))) + try: + pixmap = self._pixmap_cache[key] + except KeyError: if len(self.data) == 1: pixmap = QtGui.QPixmap() pixmap.loadFromData(self.data[0].data) + pixmap = self.decorate_cover(pixmap) else: stack_width, stack_height = (w + displacements * (len(self.data) - 1), h + displacements * (len(self.data) - 1)) pixmap = QtGui.QPixmap(stack_width, stack_height) @@ -152,12 +186,9 @@ class CoverArtThumbnail(ActiveLabel): y += displacements painter.end() pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) - self.setPixmap(pixmap) - pixmap = None + self._pixmap_cache[key] = pixmap - if pixmap and not pixmap.isNull(): - cover = self.decorate_cover(pixmap) - self.setPixmap(cover) + self.setPixmap(pixmap) def set_metadata(self, metadata): data = None @@ -200,12 +231,13 @@ class CoverArtBox(QtGui.QGroupBox): self.setStyleSheet('''QGroupBox{background-color:none;border:1px;}''') self.setFlat(True) self.item = None + self.pixmap_cache = LRUCache(40) self.cover_art_label = QtGui.QLabel('') self.cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) - self.cover_art = CoverArtThumbnail(False, True, "new cover", parent) + self.cover_art = CoverArtThumbnail(False, True, "new cover", self.pixmap_cache, parent) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.orig_cover_art_label = QtGui.QLabel('') - self.orig_cover_art = CoverArtThumbnail(False, False, "original cover", parent) + self.orig_cover_art = CoverArtThumbnail(False, False, "original cover", self.pixmap_cache, parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.orig_cover_art.setHidden(True) self.show_details_button = QtGui.QPushButton(_(u'Show more details'), self) From b3726f255abcdd95e74cc62b8da1822c44be32dd Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 10:36:50 +0100 Subject: [PATCH 101/173] Remove unuseful/broken debug message --- picard/ui/coverartbox.py | 1 - 1 file changed, 1 deletion(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index b46bbd1d5..8916754f3 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -195,7 +195,6 @@ class CoverArtThumbnail(ActiveLabel): self.related_images = [] if metadata and metadata.images: self.related_images = metadata.images - log.debug("%s using images:" % (self.name), metadata.images) data = [image for image in metadata.images if image.is_front_image()] if not data: # There's no front image, choose the first one available From a6614eec77505b9c972fb88a3da2917160bd45a0 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 16:47:28 +0100 Subject: [PATCH 102/173] Allow to open an info dialog of a track with no linked file Instead of raising an exception, now it's possible to see all images of tracks with no linked file. --- picard/ui/infodialog.py | 17 ++++++++++++++++- picard/ui/mainwindow.py | 10 +++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/picard/ui/infodialog.py b/picard/ui/infodialog.py index b4a90a2c0..0414b90df 100644 --- a/picard/ui/infodialog.py +++ b/picard/ui/infodialog.py @@ -104,7 +104,8 @@ class InfoDialog(PicardDialog): isinstance(obj, Track): # Display existing artwork only if selected object is track object # or linked to a track object - self.display_existing_artwork = True + if getattr(obj, 'orig_metadata', None) is not None: + self.display_existing_artwork = True self.ui.setupUi(self) self.ui.buttonBox.accepted.connect(self.accept) @@ -296,6 +297,20 @@ class AlbumInfoDialog(InfoDialog): tabWidget.setTabText(tab_index, _("&Info")) self.tab_hide(tab) +class TrackInfoDialog(InfoDialog): + + def __init__(self, track, parent=None): + InfoDialog.__init__(self, track, parent) + self.setWindowTitle(_("Track Info")) + + def _display_info_tab(self): + tab = self.ui.info_tab + track = self.obj + tabWidget = self.ui.tabWidget + tab_index = tabWidget.indexOf(tab) + tabWidget.setTabText(tab_index, _("&Info")) + self.tab_hide(tab) + class ClusterInfoDialog(InfoDialog): diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index a9f23a0ae..16eafca6a 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -33,7 +33,7 @@ from picard.ui.metadatabox import MetadataBox from picard.ui.filebrowser import FileBrowser from picard.ui.tagsfromfilenames import TagsFromFileNamesDialog from picard.ui.options.dialog import OptionsDialog -from picard.ui.infodialog import FileInfoDialog, AlbumInfoDialog, ClusterInfoDialog +from picard.ui.infodialog import FileInfoDialog, AlbumInfoDialog, TrackInfoDialog, ClusterInfoDialog from picard.ui.infostatus import InfoStatus from picard.ui.passworddialog import PasswordDialog, ProxyDialog from picard.ui.logview import LogView, HistoryView @@ -842,8 +842,12 @@ class MainWindow(QtGui.QMainWindow): cluster = self.selected_objects[0] dialog = ClusterInfoDialog(cluster, self) else: - file = self.tagger.get_files_from_objects(self.selected_objects)[0] - dialog = FileInfoDialog(file, self) + files = self.tagger.get_files_from_objects(self.selected_objects) + if not files and isinstance(self.selected_objects[0], Track): + track = self.selected_objects[0] + dialog = TrackInfoDialog(track, self) + else: + dialog = FileInfoDialog(files[0], self) dialog.ui.tabWidget.setCurrentIndex(default_tab) dialog.exec_() From 53afbb51be90010b899c33de945d48b02097338f Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 16:59:25 +0100 Subject: [PATCH 103/173] Fix album cover art for album with no files Retrieve the images from tracks, since an album that doesn't have any linked file, can still have images defined in its tracks. --- picard/album.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/picard/album.py b/picard/album.py index 6315c926c..5934dc85b 100644 --- a/picard/album.py +++ b/picard/album.py @@ -561,11 +561,15 @@ class Album(DataObject, Item): for image in file.metadata.images: if image not in new_images: new_images.append(image) - for image in file.orig_metadata.images: - if image not in orig_images: - orig_images.append(image) + try: + for image in file.orig_metadata.images: + if image not in orig_images: + orig_images.append(image) + except AttributeError: + pass for track in self.tracks: + process_file_images(track) for file in list(track.linked_files): process_file_images(file) for file in list(self.unmatched_files.files): From 9ff5434dd73fa561f1fa464d5731aa3bb0994333 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 17:25:42 +0100 Subject: [PATCH 104/173] Remove CoverArtThumbnail.name variable which is not used anymore --- picard/ui/coverartbox.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 8916754f3..a637f3ff7 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -113,10 +113,9 @@ class ActiveLabel(QtGui.QLabel): class CoverArtThumbnail(ActiveLabel): - def __init__(self, active=False, drops=False, name=None, pixmap_cache=None, *args, **kwargs): + def __init__(self, active=False, drops=False, pixmap_cache=None, *args, **kwargs): super(CoverArtThumbnail, self).__init__(active, drops, *args, **kwargs) self.data = None - self.name = name self.shadow = QtGui.QPixmap(":/images/CoverArtShadow.png") self.release = None self.setPixmap(self.shadow) @@ -233,10 +232,10 @@ class CoverArtBox(QtGui.QGroupBox): self.pixmap_cache = LRUCache(40) self.cover_art_label = QtGui.QLabel('') self.cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) - self.cover_art = CoverArtThumbnail(False, True, "new cover", self.pixmap_cache, parent) + self.cover_art = CoverArtThumbnail(False, True, self.pixmap_cache, parent) spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.orig_cover_art_label = QtGui.QLabel('') - self.orig_cover_art = CoverArtThumbnail(False, False, "original cover", self.pixmap_cache, parent) + self.orig_cover_art = CoverArtThumbnail(False, False, self.pixmap_cache, parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) self.orig_cover_art.setHidden(True) self.show_details_button = QtGui.QPushButton(_(u'Show more details'), self) From 7370819ddba028d19c7077df3c5cfe2aebb4c95c Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 17:49:10 +0100 Subject: [PATCH 105/173] Move LRUCache to picard/utils/lrucache.py Moved the LRUCache class to its own module in utils, in case it's useful in other parts of the code. --- picard/ui/coverartbox.py | 34 +---------------- picard/util/lrucache.py | 79 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 32 deletions(-) create mode 100644 picard/util/lrucache.py diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index a637f3ff7..1c593c676 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -26,7 +26,8 @@ from picard.album import Album from picard.coverart.image import CoverArtImage, CoverArtImageError from picard.track import Track from picard.file import File -from picard.util import encode_filename, imageinfo +from picard.util import encode_filename, imageinfo, get_file_path +from picard.util.lrucache import LRUCache if sys.platform == 'darwin': try: @@ -37,38 +38,7 @@ if sys.platform == 'darwin': log.warning("Unable to import NSURL, file drag'n'drop might not work correctly") -class LRUCache(dict): - - def __init__(self, max_size): - self._ordered_keys = [] - self._max_size = max_size - - def __getitem__(self, key): - if key in self: - self._ordered_keys.remove(key) - self._ordered_keys.insert(0, key) - return super(LRUCache, self).__getitem__(key) - - def __setitem__(self, key, value): - if key in self: - self._ordered_keys.remove(key) - self._ordered_keys.insert(0, key) - - r = super(LRUCache, self).__setitem__(key, value) - - if len(self) > self._max_size: - item = self._ordered_keys.pop() - super(LRUCache, self).__delitem__(item) - - return r - - def __delitem__(self, key): - self._ordered_keys.remove(key) - super(LRUCache, self).__delitem__(key) - - class ActiveLabel(QtGui.QLabel): - """Clickable QLabel.""" clicked = QtCore.pyqtSignal() diff --git a/picard/util/lrucache.py b/picard/util/lrucache.py new file mode 100644 index 000000000..72261b8cf --- /dev/null +++ b/picard/util/lrucache.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2017 Antonio Larrosa +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +Helper class to cache items using a Least Recently Used policy. + +It's originally used to cache generated pixmaps in the CoverArtBox object +but it's generic enough to be used for other purposes if necessary. +The cache will never hold more than max_size items and the item least +recently used will be discarded. + +>>> cache = LRUCache(3) +>>> cache['item1'] = 'some value' +>>> cache['item2'] = 'some other value' +>>> cache['item3'] = 'yet another value' +>>> cache['item1'] +'some value' +>>> cache['item4'] = 'This will push item 2 out of the cache' +>>> cache['item2'] +Traceback (most recent call last): + File "", line 1, in + File "lrucache.py", line 48, in __getitem__ + return super(LRUCache, self).__getitem__(key) +KeyError: 'item2' +>>> cache['item5'] = 'This will push item3 out of the cache' +>>> cache['item3'] +Traceback (most recent call last): + File "", line 1, in + File "lrucache.py", line 48, in __getitem__ + return super(LRUCache, self).__getitem__(key) +KeyError: 'item3' +>>> cache['item1'] +'some value' +""" + + +class LRUCache(dict): + def __init__(self, max_size): + self._ordered_keys = [] + self._max_size = max_size + + def __getitem__(self, key): + if key in self: + self._ordered_keys.remove(key) + self._ordered_keys.insert(0, key) + return super(LRUCache, self).__getitem__(key) + + def __setitem__(self, key, value): + if key in self: + self._ordered_keys.remove(key) + self._ordered_keys.insert(0, key) + + r = super(LRUCache, self).__setitem__(key, value) + + if len(self) > self._max_size: + item = self._ordered_keys.pop() + super(LRUCache, self).__delitem__(item) + + return r + + def __delitem__(self, key): + self._ordered_keys.remove(key) + super(LRUCache, self).__delitem__(key) From 77fbaaee43ac2e4727cee624324a52f7ec104016 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 18:36:20 +0100 Subject: [PATCH 106/173] Cleanup the calculations --- picard/ui/coverartbox.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 1c593c676..57c050feb 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -139,7 +139,8 @@ class CoverArtThumbnail(ActiveLabel): pixmap.loadFromData(self.data[0].data) pixmap = self.decorate_cover(pixmap) else: - stack_width, stack_height = (w + displacements * (len(self.data) - 1), h + displacements * (len(self.data) - 1)) + offset = displacements * (len(self.data) - 1) + stack_width, stack_height = (w + offset, h + offset) pixmap = QtGui.QPixmap(stack_width, stack_height) bgcolor = self.palette().color(QtGui.QPalette.Window) painter = QtGui.QPainter(pixmap) From 269b7f07e38483d51b136f4b5eb8b5cf250e98e8 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 18:56:40 +0100 Subject: [PATCH 107/173] PEP8 fixes Remove spaces at start/end of braces --- picard/metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/metadata.py b/picard/metadata.py index afbb51026..09c0dda4f 100644 --- a/picard/metadata.py +++ b/picard/metadata.py @@ -57,7 +57,7 @@ class Metadata(dict): def set_front_image(self, coverartimage): # First remove all front images - self.images[:] = [ img for img in self.images if not img.is_front_image() ] + self.images[:] = [img for img in self.images if not img.is_front_image()] self.images.append(coverartimage) @property From 1982d0353580121b2cfd980e1b3dabeac89f76d0 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 19:51:07 +0100 Subject: [PATCH 108/173] Enable cover artwork diff for albums And remove an unused variable in TrackInfoDialog --- picard/ui/infodialog.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/ui/infodialog.py b/picard/ui/infodialog.py index 0414b90df..86a04dbb3 100644 --- a/picard/ui/infodialog.py +++ b/picard/ui/infodialog.py @@ -24,6 +24,7 @@ from PyQt4 import QtGui, QtCore from picard import log from picard.file import File from picard.track import Track +from picard.album import Album from picard.coverart.image import CoverArtImageIOError from picard.util import format_time, encode_filename, bytes2human, webbrowser2, union_sorted_lists from picard.ui import PicardDialog @@ -101,7 +102,7 @@ class InfoDialog(PicardDialog): self.ui = Ui_InfoDialog() self.display_existing_artwork = False if isinstance(obj, File) and isinstance(obj.parent, Track) or \ - isinstance(obj, Track): + isinstance(obj, Track) or isinstance(obj, Album): # Display existing artwork only if selected object is track object # or linked to a track object if getattr(obj, 'orig_metadata', None) is not None: @@ -305,7 +306,6 @@ class TrackInfoDialog(InfoDialog): def _display_info_tab(self): tab = self.ui.info_tab - track = self.obj tabWidget = self.ui.tabWidget tab_index = tabWidget.indexOf(tab) tabWidget.setTabText(tab_index, _("&Info")) From 5e14e084bfcb7a46bd487cf5a1e415a2f8e40bef Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Tue, 7 Mar 2017 20:04:04 +0100 Subject: [PATCH 109/173] Slightly improve the readability of the code --- picard/ui/infodialog.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/picard/ui/infodialog.py b/picard/ui/infodialog.py index 86a04dbb3..8a2b86df3 100644 --- a/picard/ui/infodialog.py +++ b/picard/ui/infodialog.py @@ -101,8 +101,8 @@ class InfoDialog(PicardDialog): self.obj = obj self.ui = Ui_InfoDialog() self.display_existing_artwork = False - if isinstance(obj, File) and isinstance(obj.parent, Track) or \ - isinstance(obj, Track) or isinstance(obj, Album): + if (isinstance(obj, File) and isinstance(obj.parent, Track) or + isinstance(obj, (Track, Album))): # Display existing artwork only if selected object is track object # or linked to a track object if getattr(obj, 'orig_metadata', None) is not None: From f9befdd0af0cf6325f5462a9cb84d8cdf6b5638c Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 07:05:48 +0100 Subject: [PATCH 110/173] Move documentation inside class definition --- picard/util/lrucache.py | 64 ++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/picard/util/lrucache.py b/picard/util/lrucache.py index 72261b8cf..42c147970 100644 --- a/picard/util/lrucache.py +++ b/picard/util/lrucache.py @@ -17,40 +17,40 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -""" -Helper class to cache items using a Least Recently Used policy. - -It's originally used to cache generated pixmaps in the CoverArtBox object -but it's generic enough to be used for other purposes if necessary. -The cache will never hold more than max_size items and the item least -recently used will be discarded. - ->>> cache = LRUCache(3) ->>> cache['item1'] = 'some value' ->>> cache['item2'] = 'some other value' ->>> cache['item3'] = 'yet another value' ->>> cache['item1'] -'some value' ->>> cache['item4'] = 'This will push item 2 out of the cache' ->>> cache['item2'] -Traceback (most recent call last): - File "", line 1, in - File "lrucache.py", line 48, in __getitem__ - return super(LRUCache, self).__getitem__(key) -KeyError: 'item2' ->>> cache['item5'] = 'This will push item3 out of the cache' ->>> cache['item3'] -Traceback (most recent call last): - File "", line 1, in - File "lrucache.py", line 48, in __getitem__ - return super(LRUCache, self).__getitem__(key) -KeyError: 'item3' ->>> cache['item1'] -'some value' -""" - class LRUCache(dict): + """ + Helper class to cache items using a Least Recently Used policy. + + It's originally used to cache generated pixmaps in the CoverArtBox object + but it's generic enough to be used for other purposes if necessary. + The cache will never hold more than max_size items and the item least + recently used will be discarded. + + >>> cache = LRUCache(3) + >>> cache['item1'] = 'some value' + >>> cache['item2'] = 'some other value' + >>> cache['item3'] = 'yet another value' + >>> cache['item1'] + 'some value' + >>> cache['item4'] = 'This will push item 2 out of the cache' + >>> cache['item2'] + Traceback (most recent call last): + File "", line 1, in + File "lrucache.py", line 48, in __getitem__ + return super(LRUCache, self).__getitem__(key) + KeyError: 'item2' + >>> cache['item5'] = 'This will push item3 out of the cache' + >>> cache['item3'] + Traceback (most recent call last): + File "", line 1, in + File "lrucache.py", line 48, in __getitem__ + return super(LRUCache, self).__getitem__(key) + KeyError: 'item3' + >>> cache['item1'] + 'some value' + """ + def __init__(self, max_size): self._ordered_keys = [] self._max_size = max_size From 0710a0d7a14a80d9ac7cd486b03e6339f2bcbc11 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 08:02:59 +0100 Subject: [PATCH 111/173] Rename file variable to obj I changed it in e9fa6c887f94306c1aee3f3eb90f9db05951cb97 so a track is passed to that function some times, so better reflect that in the variable name too. --- picard/album.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/picard/album.py b/picard/album.py index 5934dc85b..d7151f8e7 100644 --- a/picard/album.py +++ b/picard/album.py @@ -557,23 +557,23 @@ class Album(DataObject, Item): new_images = [] orig_images = [] - def process_file_images(file): - for image in file.metadata.images: + def process_images(obj): + for image in obj.metadata.images: if image not in new_images: new_images.append(image) try: - for image in file.orig_metadata.images: + for image in obj.orig_metadata.images: if image not in orig_images: orig_images.append(image) except AttributeError: pass for track in self.tracks: - process_file_images(track) + process_images(track) for file in list(track.linked_files): - process_file_images(file) + process_images(file) for file in list(self.unmatched_files.files): - process_file_images(file) + process_images(file) self.metadata.images = new_images self.orig_metadata.images = orig_images From cba798505afa26503b2586881cb077b8709aaa12 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 09:57:33 +0100 Subject: [PATCH 112/173] Small refactorization of TrackInfoDialog In order to fix tracks without files not having the info button available, I changed it to allow 0, 1 or multiple files. If the track doesn't have any linked file, only the cover art is shown (if available). If the track has n files, the info tab shows information from the all the files. --- picard/track.py | 2 +- picard/ui/coverartbox.py | 2 +- picard/ui/infodialog.py | 28 ++++++++++++++++++++++------ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/picard/track.py b/picard/track.py index 8cfbb1956..3130f3f5f 100644 --- a/picard/track.py +++ b/picard/track.py @@ -110,7 +110,7 @@ class Track(DataObject, Item): return True def can_view_info(self): - return self.num_linked_files == 1 + return self.num_linked_files == 1 or self.metadata.images def column(self, column): m = self.metadata diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 57c050feb..80226a4ce 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -227,7 +227,7 @@ class CoverArtBox(QtGui.QGroupBox): # We want to show the 2 coverarts only if they are different # and orig_cover_art data is set and not the default cd shadow if self.orig_cover_art.data is None or self.cover_art == self.orig_cover_art: - self.show_details_button.setHidden(len(self.cover_art.related_images) <= 1) + self.show_details_button.setHidden(len(self.cover_art.related_images) == 0) self.orig_cover_art.setHidden(True) self.cover_art_label.setText('') self.orig_cover_art_label.setText('') diff --git a/picard/ui/infodialog.py b/picard/ui/infodialog.py index 8a2b86df3..f5db09e46 100644 --- a/picard/ui/infodialog.py +++ b/picard/ui/infodialog.py @@ -102,11 +102,13 @@ class InfoDialog(PicardDialog): self.ui = Ui_InfoDialog() self.display_existing_artwork = False if (isinstance(obj, File) and isinstance(obj.parent, Track) or - isinstance(obj, (Track, Album))): + isinstance(obj, Track)): # Display existing artwork only if selected object is track object # or linked to a track object if getattr(obj, 'orig_metadata', None) is not None: self.display_existing_artwork = True + elif isinstance(obj, Album) and obj.get_num_total_files() > 0: + self.display_existing_artwork = True self.ui.setupUi(self) self.ui.buttonBox.accepted.connect(self.accept) @@ -238,8 +240,8 @@ class FileInfoDialog(InfoDialog): InfoDialog.__init__(self, file, parent) self.setWindowTitle(_("Info") + " - " + file.base_filename) - def _display_info_tab(self): - file = self.obj + @staticmethod + def format_file_info(file): info = [] info.append((_('Filename:'), file.filename)) if '~format' in file.orig_metadata: @@ -267,9 +269,13 @@ class FileInfoDialog(InfoDialog): else: ch = str(ch) info.append((_('Channels:'), ch)) - text = '
'.join(map(lambda i: '%s
%s' % + return '
'.join(map(lambda i: '%s
%s' % (cgi.escape(i[0]), cgi.escape(i[1])), info)) + + def _display_info_tab(self): + file = self.obj + text = FileInfoDialog.format_file_info(file) self.ui.info.setText(text) @@ -298,18 +304,28 @@ class AlbumInfoDialog(InfoDialog): tabWidget.setTabText(tab_index, _("&Info")) self.tab_hide(tab) -class TrackInfoDialog(InfoDialog): +class TrackInfoDialog(FileInfoDialog): def __init__(self, track, parent=None): InfoDialog.__init__(self, track, parent) self.setWindowTitle(_("Track Info")) def _display_info_tab(self): + track = self.obj tab = self.ui.info_tab tabWidget = self.ui.tabWidget tab_index = tabWidget.indexOf(tab) + if track.num_linked_files == 0: + tabWidget.setTabText(tab_index, _("&Info")) + self.tab_hide(tab) + return + tabWidget.setTabText(tab_index, _("&Info")) - self.tab_hide(tab) + text = ungettext("%i file in this track", "%i files in this track", + track.num_linked_files) % track.num_linked_files + info_files = [FileInfoDialog.format_file_info(file) for file in track.linked_files] + text += '
' + '
'.join(info_files) + self.ui.info.setText(text) class ClusterInfoDialog(InfoDialog): From 0dd1e8d6aa078f6c55cd5a2dcb0b8e0495339c95 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 10:13:31 +0100 Subject: [PATCH 113/173] Start the correct InfoDialog I forgot to add the changes from this file to the previous commit (654490053ab038c27a628510c9f921ba2bf1be02) --- picard/ui/mainwindow.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 16eafca6a..1b4a72ec9 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -841,13 +841,12 @@ class MainWindow(QtGui.QMainWindow): elif isinstance(self.selected_objects[0], Cluster): cluster = self.selected_objects[0] dialog = ClusterInfoDialog(cluster, self) + elif isinstance(self.selected_objects[0], Track): + track = self.selected_objects[0] + dialog = TrackInfoDialog(track, self) else: - files = self.tagger.get_files_from_objects(self.selected_objects) - if not files and isinstance(self.selected_objects[0], Track): - track = self.selected_objects[0] - dialog = TrackInfoDialog(track, self) - else: - dialog = FileInfoDialog(files[0], self) + file = self.tagger.get_files_from_objects(self.selected_objects)[0] + dialog = FileInfoDialog(file, self) dialog.ui.tabWidget.setCurrentIndex(default_tab) dialog.exec_() From e2e2ca39a69f735d190b01fff2e25149c5089e35 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 11:03:03 +0100 Subject: [PATCH 114/173] Update album metadata images when Files/Tracks emit signal Add a signal to Files/Tracks that gets emitted when the images change (or might have changed), and update the album's metadata images on such signals instead of each time the album is selected in the user interface. --- picard/album.py | 11 +++++++++++ picard/file.py | 3 +++ picard/track.py | 3 +++ picard/ui/coverartbox.py | 5 +++++ picard/ui/mainwindow.py | 1 - 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/picard/album.py b/picard/album.py index d7151f8e7..81da90d25 100644 --- a/picard/album.py +++ b/picard/album.py @@ -72,6 +72,7 @@ class Album(DataObject, Item): self.errors = [] self.status = None self._album_artists = [] + self.update_metadata_images_enabled = True def __repr__(self): return '' % (self.id, self.metadata[u"album"]) @@ -255,6 +256,7 @@ class Album(DataObject, Item): self._tracks_loaded = True if not self._requests: + self.update_metadata_images_enabled = False # Prepare parser for user's script if config.setting["enable_tagger_scripts"]: for s_pos, s_name, s_enabled, s_text in config.setting["list_of_scripts"]: @@ -276,6 +278,7 @@ class Album(DataObject, Item): self._new_metadata.strip_whitespace() for track in self.tracks: + track.metadata_images_changed.connect(self.update_metadata_images) for file in list(track.linked_files): file.move(self.unmatched_files) self.metadata = self._new_metadata @@ -285,6 +288,7 @@ class Album(DataObject, Item): self.loaded = True self.status = None self.match_files(self.unmatched_files.files) + self.update_metadata_images_enabled = True self.update() self.tagger.window.set_statusbar_message( N_('Album %(id)s loaded: %(artist)s - %(album)s'), @@ -379,14 +383,19 @@ class Album(DataObject, Item): def update(self, update_tracks=True): if self.item: self.item.update(update_tracks) + self.update_metadata_images() def _add_file(self, track, file): self._files += 1 self.update(update_tracks=False) + file.metadata_images_changed.connect(self.update_metadata_images) + self.update_metadata_images() def _remove_file(self, track, file): self._files -= 1 self.update(update_tracks=False) + file.metadata_images_changed.disconnect(self.update_metadata_images) + self.update_metadata_images() def match_files(self, files, use_recordingid=True): """Match files to tracks on this album, based on metadata similarity or recordingid.""" @@ -554,6 +563,8 @@ class Album(DataObject, Item): self.load(priority=True, refresh=True) def update_metadata_images(self): + if not self.update_metadata_images_enabled: + return new_images = [] orig_images = [] diff --git a/picard/file.py b/picard/file.py index cf20ed8cf..d2097259b 100644 --- a/picard/file.py +++ b/picard/file.py @@ -54,6 +54,8 @@ from picard.const import QUERY_LIMIT class File(QtCore.QObject, Item): + metadata_images_changed = QtCore.pyqtSignal() + UNDEFINED = -1 PENDING = 0 NORMAL = 1 @@ -156,6 +158,7 @@ class File(QtCore.QObject, Item): if acoustid: self.metadata["acoustid_id"] = acoustid + self.metadata_images_changed.emit() def has_error(self): return self.state == File.ERROR diff --git a/picard/track.py b/picard/track.py index 3130f3f5f..c1e33d1d4 100644 --- a/picard/track.py +++ b/picard/track.py @@ -19,6 +19,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. from functools import partial +from PyQt4 import QtCore from picard import config, log from picard.metadata import Metadata, run_track_metadata_processors from picard.dataobj import DataObject @@ -44,6 +45,8 @@ class TrackArtist(DataObject): class Track(DataObject, Item): + metadata_images_changed = QtCore.pyqtSignal() + def __init__(self, id, album=None): DataObject.__init__(self, id) self.album = album diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 80226a4ce..f7e7580b4 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -316,18 +316,23 @@ class CoverArtBox(QtGui.QGroupBox): album.metadata.set_front_image(coverartimage) for track in album.tracks: track.metadata.set_front_image(coverartimage) + track.metadata_images_changed.emit() for file in album.iterfiles(): file.metadata.set_front_image(coverartimage) + file.metadata_images_changed.emit() file.update() elif isinstance(self.item, Track): track = self.item track.metadata.set_front_image(coverartimage) + track.metadata_images_changed.emit() for file in track.iterfiles(): file.metadata.set_front_image(coverartimage) + file.metadata_images_changed.emit() file.update() elif isinstance(self.item, File): file = self.item file.metadata.set_front_image(coverartimage) + file.metadata_images_changed.emit() file.update() self.cover_art.set_metadata(self.item.metadata) self.show() diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 1b4a72ec9..2ae7bf465 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -956,7 +956,6 @@ class MainWindow(QtGui.QMainWindow): self.set_statusbar_message(msg, mparms, echo=None, history=None) elif isinstance(obj, Album): - obj.update_metadata_images() metadata = obj.metadata orig_metadata = obj.orig_metadata elif obj.can_edit_tags(): From 270b07d08a634cffdd9cc3bfa2199efce4fdd741 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 11:18:23 +0100 Subject: [PATCH 115/173] Reduce the number of metadata image updates when dropping an image Disable/enable the update of images also before/after setting a dropped image --- picard/album.py | 9 +++++++-- picard/ui/coverartbox.py | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/picard/album.py b/picard/album.py index 81da90d25..42ffde220 100644 --- a/picard/album.py +++ b/picard/album.py @@ -85,6 +85,11 @@ class Album(DataObject, Item): for file in self.unmatched_files.iterfiles(): yield file + def enable_update_metadata_images(self, enabled): + self.update_metadata_images_enabled = enabled + if enabled: + self.update_metadata_images() + def append_album_artist(self, id): """Append artist id to the list of album artists and return an AlbumArtist instance""" @@ -256,7 +261,7 @@ class Album(DataObject, Item): self._tracks_loaded = True if not self._requests: - self.update_metadata_images_enabled = False + self.enable_update_metadata_images(False) # Prepare parser for user's script if config.setting["enable_tagger_scripts"]: for s_pos, s_name, s_enabled, s_text in config.setting["list_of_scripts"]: @@ -288,8 +293,8 @@ class Album(DataObject, Item): self.loaded = True self.status = None self.match_files(self.unmatched_files.files) - self.update_metadata_images_enabled = True self.update() + self.enable_update_metadata_images(True) self.tagger.window.set_statusbar_message( N_('Album %(id)s loaded: %(artist)s - %(album)s'), { diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index f7e7580b4..c44b13852 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -313,7 +313,7 @@ class CoverArtBox(QtGui.QGroupBox): return if isinstance(self.item, Album): album = self.item - album.metadata.set_front_image(coverartimage) + album.enable_update_metadata_images(False) for track in album.tracks: track.metadata.set_front_image(coverartimage) track.metadata_images_changed.emit() @@ -321,14 +321,17 @@ class CoverArtBox(QtGui.QGroupBox): file.metadata.set_front_image(coverartimage) file.metadata_images_changed.emit() file.update() + album.enable_update_metadata_images(True) elif isinstance(self.item, Track): track = self.item + track.album.enable_update_metadata_images(False) track.metadata.set_front_image(coverartimage) track.metadata_images_changed.emit() for file in track.iterfiles(): file.metadata.set_front_image(coverartimage) file.metadata_images_changed.emit() file.update() + track.album.enable_update_metadata_images(True) elif isinstance(self.item, File): file = self.item file.metadata.set_front_image(coverartimage) From 3599f74f1634dcf9c369d4b7b43e31113e808907 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 12:36:18 +0100 Subject: [PATCH 116/173] Show cover stack from front-to-bottom and from bottom-left to top-right --- picard/ui/coverartbox.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index c44b13852..c51cbe35f 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -145,14 +145,14 @@ class CoverArtThumbnail(ActiveLabel): bgcolor = self.palette().color(QtGui.QPalette.Window) painter = QtGui.QPainter(pixmap) painter.fillRect(QtCore.QRectF(0, 0, stack_width, stack_height), bgcolor) - x = w / 2 + x = stack_width - w / 2 y = h / 2 - for image in self.data: + for image in reversed(self.data): thumb = QtGui.QPixmap() thumb.loadFromData(image.data) thumb = self.decorate_cover(thumb) painter.drawPixmap(x - thumb.width() / 2, y - thumb.height() / 2, thumb) - x += displacements + x -= displacements y += displacements painter.end() pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) From 63908e861933adc7bc6e302e589f2fe44e4a8931 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 18:44:46 +0100 Subject: [PATCH 117/173] Make front cover glow when there are no common images among tracks If all tracks/files have a common set of images, show the stack of cover art images as usual. If any track/file has a different set of images, the front image is painted with a darkgoldenrod glow (the same color used for the MetadataBox for tags with different values). Also, fixed the draw of the stack so the bottom cover is drawn correctly. --- picard/album.py | 53 +++++++++++++++++++++++++++------------- picard/ui/coverartbox.py | 34 ++++++++++++++++++-------- 2 files changed, 60 insertions(+), 27 deletions(-) diff --git a/picard/album.py b/picard/album.py index 42ffde220..273fd5870 100644 --- a/picard/album.py +++ b/picard/album.py @@ -570,29 +570,48 @@ class Album(DataObject, Item): def update_metadata_images(self): if not self.update_metadata_images_enabled: return - new_images = [] - orig_images = [] - def process_images(obj): - for image in obj.metadata.images: - if image not in new_images: - new_images.append(image) - try: - for image in obj.orig_metadata.images: - if image not in orig_images: - orig_images.append(image) - except AttributeError: - pass + class State: + new_images = [] + orig_images = [] + has_common_new_images = True + has_common_orig_images = True + first_new_obj = True + first_orig_obj = True + + state = State() + + def process_images(state, obj): + # Check new images + if state.first_new_obj: + state.new_images = obj.metadata.images[:] + state.first_new_obj = False + else: + if state.new_images != obj.metadata.images: + state.has_common_new_images = False + state.new_images.extend([image for image in obj.metadata.images if image not in state.new_images]) + if isinstance(obj, Track): + return + # Check orig images, but not for Tracks (which don't have orig_metadata) + if state.first_orig_obj: + state.orig_images = obj.orig_metadata.images[:] + state.first_orig_obj = False + else: + if state.orig_images != obj.orig_metadata.images: + state.has_common_orig_images = False + state.orig_images.extend([image for image in obj.orig_metadata.images if image not in state.orig_images]) for track in self.tracks: - process_images(track) + process_images(state, track) for file in list(track.linked_files): - process_images(file) + process_images(state, file) for file in list(self.unmatched_files.files): - process_images(file) + process_images(state, file) - self.metadata.images = new_images - self.orig_metadata.images = orig_images + self.metadata.images = state.new_images + self.metadata.has_common_images = state.has_common_new_images + self.orig_metadata.images = state.orig_images + self.orig_metadata.has_common_images = state.has_common_orig_images class NatAlbum(Album): diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index c51cbe35f..da13646d9 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -117,7 +117,7 @@ class CoverArtThumbnail(ActiveLabel): painter.end() return cover - def set_data(self, data, force=False): + def set_data(self, data, force=False, has_common_images=True): if not force and self.data == data: return @@ -129,8 +129,8 @@ class CoverArtThumbnail(ActiveLabel): self.setPixmap(self.shadow) return - w, h, displacements = (121, 121, 20) - key = hash(tuple(sorted(self.data))) + w, h, displacements = (128, 128, 20) + key = hash(tuple(sorted(self.data)) + (has_common_images,)) try: pixmap = self._pixmap_cache[key] except KeyError: @@ -145,15 +145,28 @@ class CoverArtThumbnail(ActiveLabel): bgcolor = self.palette().color(QtGui.QPalette.Window) painter = QtGui.QPainter(pixmap) painter.fillRect(QtCore.QRectF(0, 0, stack_width, stack_height), bgcolor) - x = stack_width - w / 2 - y = h / 2 + cx = stack_width - w / 2 + cy = h / 2 for image in reversed(self.data): thumb = QtGui.QPixmap() thumb.loadFromData(image.data) - thumb = self.decorate_cover(thumb) - painter.drawPixmap(x - thumb.width() / 2, y - thumb.height() / 2, thumb) - x -= displacements - y += displacements + thumb = self.decorate_cover(thumb) # QtGui.QColor("darkgoldenrod") + x, y = (cx - thumb.width() / 2, cy - thumb.height() / 2) + painter.drawPixmap(x, y, thumb) + cx -= displacements + cy += displacements + if not has_common_images: + color = QtGui.QColor("darkgoldenrod") + border_length = 10 + for k in range(border_length): + color.setAlpha(255 - k * 255 / border_length) + painter.setPen(color) + painter.drawLine(x, y - k - 1, x + 121 + k + 1, y - k - 1) + painter.drawLine(x + 121 + k + 2, y - 1 - k, x + 121 + k + 2, y + 121 + 4) + for k in range(5): + bgcolor.setAlpha(80 + k * 255 / 7) + painter.setPen(bgcolor) + painter.drawLine(x + 121 + 2, y + 121 + 2 + k, x + 121 + border_length + 2, y + 121 + 2 + k) painter.end() pixmap = pixmap.scaled(w, h, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) self._pixmap_cache[key] = pixmap @@ -169,7 +182,8 @@ class CoverArtThumbnail(ActiveLabel): if not data: # There's no front image, choose the first one available data = [metadata.images[0]] - self.set_data(data) + has_common_images = getattr(metadata, 'has_common_images', True) + self.set_data(data, has_common_images=has_common_images) release = None if metadata: release = metadata.get("musicbrainz_albumid", None) From 8057f2bed02f15ca95b44051b8c665479ea8db85 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 19:01:16 +0100 Subject: [PATCH 118/173] Add information about common/different images on tooltip --- picard/ui/coverartbox.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index da13646d9..a5897b75c 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -189,7 +189,14 @@ class CoverArtThumbnail(ActiveLabel): release = metadata.get("musicbrainz_albumid", None) if release: self.setActive(True) - self.setToolTip(_(u"View release on MusicBrainz")) + text = _(u"View release on MusicBrainz") + if hasattr(metadata, 'has_common_images'): + text += '
' + if has_common_images: + text += _(u'Common images on all tracks') + else: + text += _(u'Tracks contain different images') + self.setToolTip(text) else: self.setActive(False) self.setToolTip("") From f5c82adfbda26eab0367b4941a088b1c47f7b80e Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Wed, 8 Mar 2017 21:22:39 +0100 Subject: [PATCH 119/173] Limit the number of images to draw in a stack to 4 If there are more than 4 images, draw only three and a kind of "grey stack of covers" that can be easily identified with "and more covers" --- picard/ui/coverartbox.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index a5897b75c..462f5ba7c 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -139,7 +139,13 @@ class CoverArtThumbnail(ActiveLabel): pixmap.loadFromData(self.data[0].data) pixmap = self.decorate_cover(pixmap) else: - offset = displacements * (len(self.data) - 1) + limited = len(self.data) > 4 + if limited: + data_to_paint = data[:3] + offset = displacements * len(data_to_paint) + else: + data_to_paint = data + offset = displacements * (len(data_to_paint) - 1) stack_width, stack_height = (w + offset, h + offset) pixmap = QtGui.QPixmap(stack_width, stack_height) bgcolor = self.palette().color(QtGui.QPalette.Window) @@ -147,9 +153,23 @@ class CoverArtThumbnail(ActiveLabel): painter.fillRect(QtCore.QRectF(0, 0, stack_width, stack_height), bgcolor) cx = stack_width - w / 2 cy = h / 2 - for image in reversed(self.data): - thumb = QtGui.QPixmap() - thumb.loadFromData(image.data) + if limited: + x, y = (cx - self.shadow.width() / 2, cy - self.shadow.height() / 2) + for i in range(3): + painter.drawPixmap(x, y, self.shadow) + x -= displacements / 3 + y += displacements / 3 + cx -= displacements + cy += displacements + else: + cx = stack_width - w / 2 + cy = h / 2 + for image in reversed(data_to_paint): + if isinstance(image, QtGui.QPixmap): + thumb = image + else: + thumb = QtGui.QPixmap() + thumb.loadFromData(image.data) thumb = self.decorate_cover(thumb) # QtGui.QColor("darkgoldenrod") x, y = (cx - thumb.width() / 2, cy - thumb.height() / 2) painter.drawPixmap(x, y, thumb) From 65499261eccc6433aa9b5e26cc1a30492b5ba59b Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 9 Mar 2017 12:28:11 +0100 Subject: [PATCH 120/173] Small fixes Add a constant to hold the maximum number of covers to draw in a stack. Extract html tags out of a translated message. Reformat an if expression to move overators to front. Remove an unneeded comment. --- picard/ui/coverartbox.py | 13 +++++++------ picard/ui/infodialog.py | 5 +++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 462f5ba7c..1b9cb7864 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -82,6 +82,7 @@ class ActiveLabel(QtGui.QLabel): class CoverArtThumbnail(ActiveLabel): + MAX_COVERS_TO_STACK = 4 def __init__(self, active=False, drops=False, pixmap_cache=None, *args, **kwargs): super(CoverArtThumbnail, self).__init__(active, drops, *args, **kwargs) @@ -139,9 +140,9 @@ class CoverArtThumbnail(ActiveLabel): pixmap.loadFromData(self.data[0].data) pixmap = self.decorate_cover(pixmap) else: - limited = len(self.data) > 4 + limited = len(self.data) > self.MAX_COVERS_TO_STACK if limited: - data_to_paint = data[:3] + data_to_paint = data[:self.MAX_COVERS_TO_STACK - 1] offset = displacements * len(data_to_paint) else: data_to_paint = data @@ -170,7 +171,7 @@ class CoverArtThumbnail(ActiveLabel): else: thumb = QtGui.QPixmap() thumb.loadFromData(image.data) - thumb = self.decorate_cover(thumb) # QtGui.QColor("darkgoldenrod") + thumb = self.decorate_cover(thumb) x, y = (cx - thumb.width() / 2, cy - thumb.height() / 2) painter.drawPixmap(x, y, thumb) cx -= displacements @@ -211,11 +212,11 @@ class CoverArtThumbnail(ActiveLabel): self.setActive(True) text = _(u"View release on MusicBrainz") if hasattr(metadata, 'has_common_images'): - text += '
' if has_common_images: - text += _(u'Common images on all tracks') + note = _(u'Common images on all tracks') else: - text += _(u'Tracks contain different images') + note = _(u'Tracks contain different images') + text += '
%s' % note self.setToolTip(text) else: self.setActive(False) diff --git a/picard/ui/infodialog.py b/picard/ui/infodialog.py index f5db09e46..5496f205b 100644 --- a/picard/ui/infodialog.py +++ b/picard/ui/infodialog.py @@ -101,8 +101,9 @@ class InfoDialog(PicardDialog): self.obj = obj self.ui = Ui_InfoDialog() self.display_existing_artwork = False - if (isinstance(obj, File) and isinstance(obj.parent, Track) or - isinstance(obj, Track)): + if (isinstance(obj, File) + and isinstance(obj.parent, Track) + or isinstance(obj, Track)): # Display existing artwork only if selected object is track object # or linked to a track object if getattr(obj, 'orig_metadata', None) is not None: From 0992a6cb7ea45934c34fdab5c583d2e7cca3e3ac Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 9 Mar 2017 12:59:01 +0100 Subject: [PATCH 121/173] Move MAX_COVERS_TO_STACK to picard.const --- picard/const/__init__.py | 3 +++ picard/ui/coverartbox.py | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/picard/const/__init__.py b/picard/const/__init__.py index 5f22eb3dc..878765398 100644 --- a/picard/const/__init__.py +++ b/picard/const/__init__.py @@ -113,3 +113,6 @@ PLUGINS_API = { # Default query limit QUERY_LIMIT = 25 + +# Maximum number of covers to draw in a stack in CoverArtThumbnail +MAX_COVERS_TO_STACK = 4 diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 1b9cb7864..bb359fef9 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -28,6 +28,7 @@ from picard.track import Track from picard.file import File from picard.util import encode_filename, imageinfo, get_file_path from picard.util.lrucache import LRUCache +from picard.const import MAX_COVERS_TO_STACK if sys.platform == 'darwin': try: @@ -82,7 +83,6 @@ class ActiveLabel(QtGui.QLabel): class CoverArtThumbnail(ActiveLabel): - MAX_COVERS_TO_STACK = 4 def __init__(self, active=False, drops=False, pixmap_cache=None, *args, **kwargs): super(CoverArtThumbnail, self).__init__(active, drops, *args, **kwargs) @@ -140,9 +140,9 @@ class CoverArtThumbnail(ActiveLabel): pixmap.loadFromData(self.data[0].data) pixmap = self.decorate_cover(pixmap) else: - limited = len(self.data) > self.MAX_COVERS_TO_STACK + limited = len(self.data) > MAX_COVERS_TO_STACK if limited: - data_to_paint = data[:self.MAX_COVERS_TO_STACK - 1] + data_to_paint = data[:MAX_COVERS_TO_STACK - 1] offset = displacements * len(data_to_paint) else: data_to_paint = data From 855784522b528a6de1d56c3857b7ca93043af77e Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Sun, 12 Mar 2017 20:34:53 +0530 Subject: [PATCH 122/173] PICARD-1010: Fix display/hide logic for Coverart box Earlier when the display for Cover art box was toggled, it only hid the cover art box on trigger. On selection update a super().show() was called which again caused the cover art box to be visible. This fixes the flawed display logic due to PR#643. See: https://tickets.metabrainz.org/browse/PICARD-1010 --- picard/ui/coverartbox.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index 766f2d7ff..a188a1e50 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -179,9 +179,7 @@ class CoverArtBox(QtGui.QGroupBox): self.orig_cover_art_label = QtGui.QLabel('') self.orig_cover_art = CoverArtThumbnail(False, False, parent) self.orig_cover_art_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter) - self.orig_cover_art.setHidden(True) self.show_details_button = QtGui.QPushButton(_(u'Show more details'), self) - self.show_details_button.setHidden(True) self.layout.addWidget(self.cover_art_label) self.layout.addWidget(self.cover_art) self.layout.addWidget(self.orig_cover_art_label) @@ -189,12 +187,25 @@ class CoverArtBox(QtGui.QGroupBox): self.layout.addWidget(self.show_details_button) self.layout.addSpacerItem(spacerItem) self.setLayout(self.layout) + self.orig_cover_art.setHidden(True) + self.show_details_button.setHidden(True) self.show_details_button.clicked.connect(self.show_cover_art_info) def show_cover_art_info(self): self.parent.view_info(default_tab=1) - def show(self): + def update_display(self, force=False): + if self.isHidden(): + if not force: + # If the Cover art box is hidden and selection is updated + # we should not update the display of child widgets + return + else: + # Coverart box display was toggled. + # Update the pixmaps and display them + self.cover_art.show() + self.orig_cover_art.show() + # We want to show the 2 coverarts only if they are different # and orig_cover_art data is set and not the default cd shadow if self.orig_cover_art.data is None or self.cover_art == self.orig_cover_art: @@ -207,6 +218,9 @@ class CoverArtBox(QtGui.QGroupBox): self.orig_cover_art.setHidden(False) self.cover_art_label.setText(_(u'New Cover Art')) self.orig_cover_art_label.setText(_(u'Original Cover Art')) + + def show(self): + self.update_display(True) super(CoverArtBox, self).show() def set_metadata(self, metadata, orig_metadata, item): @@ -216,7 +230,7 @@ class CoverArtBox(QtGui.QGroupBox): self.cover_art.set_metadata(metadata) self.orig_cover_art.set_metadata(orig_metadata) self.item = item - self.show() + self.update_display() def fetch_remote_image(self, url, fallback_data=None): if self.item is None: From 879a86e51c974626abb51afd5110bf52ea24c952 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Sun, 12 Mar 2017 19:07:52 +0100 Subject: [PATCH 123/173] Fix unneeded broken import from a bad rebase merge --- picard/ui/coverartbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py index bb359fef9..40fb800cd 100644 --- a/picard/ui/coverartbox.py +++ b/picard/ui/coverartbox.py @@ -26,7 +26,7 @@ from picard.album import Album from picard.coverart.image import CoverArtImage, CoverArtImageError from picard.track import Track from picard.file import File -from picard.util import encode_filename, imageinfo, get_file_path +from picard.util import encode_filename, imageinfo from picard.util.lrucache import LRUCache from picard.const import MAX_COVERS_TO_STACK From 38bbe977dbced14962ec48e11be9bdd7a024322e Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Mon, 13 Mar 2017 00:10:56 +0530 Subject: [PATCH 124/173] PICARD-1012: Change QToolButtons to QPushButtons for GUI uniformity QToolButtons in User Interface and Scripting looked smalled in comparison to the rest of the UI. See: https://tickets.metabrainz.org/browse/PICARD-1012 --- picard/ui/ui_options_interface.py | 8 +++---- picard/ui/ui_options_script.py | 11 +++++---- ui/options_interface.ui | 8 +++---- ui/options_script.ui | 39 ++++++++++++++++++++----------- 4 files changed, 40 insertions(+), 26 deletions(-) diff --git a/picard/ui/ui_options_interface.py b/picard/ui/ui_options_interface.py index 2f5cff954..cbbf1eeb4 100644 --- a/picard/ui/ui_options_interface.py +++ b/picard/ui/ui_options_interface.py @@ -93,13 +93,13 @@ class Ui_InterfaceOptionsPage(object): self.edit_box_layout = QtGui.QHBoxLayout(self.edit_button_box) self.edit_box_layout.setMargin(0) self.edit_box_layout.setObjectName(_fromUtf8("edit_box_layout")) - self.add_button = QtGui.QToolButton(self.edit_button_box) + self.add_button = QtGui.QPushButton(self.edit_button_box) self.add_button.setObjectName(_fromUtf8("add_button")) self.edit_box_layout.addWidget(self.add_button) - self.insert_separator_button = QtGui.QToolButton(self.edit_button_box) + self.insert_separator_button = QtGui.QPushButton(self.edit_button_box) self.insert_separator_button.setObjectName(_fromUtf8("insert_separator_button")) self.edit_box_layout.addWidget(self.insert_separator_button) - spacerItem1 = QtGui.QSpacerItem(60, 20, QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Minimum) + spacerItem1 = QtGui.QSpacerItem(50, 20, QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Minimum) self.edit_box_layout.addItem(spacerItem1) self.up_button = QtGui.QToolButton(self.edit_button_box) self.up_button.setArrowType(QtCore.Qt.UpArrow) @@ -109,7 +109,7 @@ class Ui_InterfaceOptionsPage(object): self.down_button.setArrowType(QtCore.Qt.DownArrow) self.down_button.setObjectName(_fromUtf8("down_button")) self.edit_box_layout.addWidget(self.down_button) - self.remove_button = QtGui.QToolButton(self.edit_button_box) + self.remove_button = QtGui.QPushButton(self.edit_button_box) self.remove_button.setObjectName(_fromUtf8("remove_button")) self.edit_box_layout.addWidget(self.remove_button) self.verticalLayout.addWidget(self.edit_button_box) diff --git a/picard/ui/ui_options_script.py b/picard/ui/ui_options_script.py index c13f2e4dd..65b58a577 100644 --- a/picard/ui/ui_options_script.py +++ b/picard/ui/ui_options_script.py @@ -44,11 +44,14 @@ class Ui_ScriptingOptionsPage(object): self.verticalLayout_3.setMargin(0) self.verticalLayout_3.setSpacing(6) self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) - self.add_script = QtGui.QToolButton(self.groupBox) - self.add_script.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly) - self.add_script.setAutoRaise(False) + self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) + self.add_script = QtGui.QPushButton(self.groupBox) self.add_script.setObjectName(_fromUtf8("add_script")) - self.verticalLayout_3.addWidget(self.add_script) + self.horizontalLayout.addWidget(self.add_script) + spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.verticalLayout_3.addLayout(self.horizontalLayout) self.splitter = QtGui.QSplitter(self.groupBox) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setChildrenCollapsible(False) diff --git a/ui/options_interface.ui b/ui/options_interface.ui index 4ca160c09..191c7e475 100644 --- a/ui/options_interface.ui +++ b/ui/options_interface.ui @@ -151,7 +151,7 @@ 0 - + Add a new button to Toolbar @@ -161,7 +161,7 @@ - + Insert a separator @@ -180,7 +180,7 @@ - 60 + 50 20 @@ -213,7 +213,7 @@ - + Remove button from toolbar diff --git a/ui/options_script.ui b/ui/options_script.ui index 9eb25c7a4..4d5e6cf19 100644 --- a/ui/options_script.ui +++ b/ui/options_script.ui @@ -63,20 +63,31 @@ 0 - - - Add new script - - - Add new script - - - Qt::ToolButtonTextOnly - - - false - - + + + + + Add new script + + + Add new script + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + From fa18ef3046f873bf2210918cff66867185cbeeac Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Mon, 13 Mar 2017 01:48:37 +0530 Subject: [PATCH 125/173] PICARD-1011: Set action toolbar tab order according to custom order With #567 support for customizable toolbars was added. This commit changes the set_tab_order function to correspond with the custom toolbar layout dynamically. See: https://tickets.metabrainz.org/browse/PICARD-1011 --- picard/ui/mainwindow.py | 33 ++++++++++++++++++--------------- picard/ui/options/interface.py | 1 + 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index 24a1b2b9b..84f75bad2 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -647,27 +647,30 @@ class MainWindow(QtGui.QMainWindow): hbox.addWidget(self.search_button) toolbar.addWidget(search_panel) - def set_tab_order(self): tab_order = self.setTabOrder tw = self.toolbar.widgetForAction + prev_action = None + current_action = None + # Setting toolbar widget tab-orders for accessibility + for action in config.setting['toolbar_layout']: + if action != 'separator': + try: + current_action = tw(getattr(self, action)) + except AttributeError: + # No need to log warnings since we have already + # done it once in create_toolbar + pass - # toolbar - tab_order(tw(self.add_directory_action), tw(self.add_files_action)) - tab_order(tw(self.add_files_action), tw(self.play_file_action)) - tab_order(tw(self.play_file_action), tw(self.save_action)) - tab_order(tw(self.save_action), tw(self.submit_acoustid_action)) - tab_order(tw(self.submit_acoustid_action), tw(self.cd_lookup_action)) - tab_order(tw(self.cd_lookup_action), tw(self.cluster_action)) - tab_order(tw(self.cluster_action), tw(self.autotag_action)) - tab_order(tw(self.autotag_action), tw(self.analyze_action)) - tab_order(tw(self.analyze_action), tw(self.view_info_action)) - tab_order(tw(self.view_info_action), tw(self.remove_action)) - tab_order(tw(self.remove_action), tw(self.browser_lookup_action)) - tab_order(tw(self.browser_lookup_action), self.search_combo) + if prev_action is not None and prev_action != current_action: + tab_order(prev_action, current_action) + + prev_action = current_action + + tab_order(prev_action, self.search_combo) tab_order(self.search_combo, self.search_edit) tab_order(self.search_edit, self.search_button) - # panels + # Panels tab_order(self.search_button, self.file_browser) tab_order(self.file_browser, self.panel.views[0]) tab_order(self.panel.views[0], self.panel.views[1]) diff --git a/picard/ui/options/interface.py b/picard/ui/options/interface.py index 554d9f4bc..f890a1024 100644 --- a/picard/ui/options/interface.py +++ b/picard/ui/options/interface.py @@ -274,6 +274,7 @@ class InterfaceOptionsPage(OptionsPage): widget = widget.parent() # Call the main window's create toolbar method widget.create_action_toolbar() + widget.set_tab_order() class ToolbarListItem(QtGui.QListWidgetItem): From 32dc32de2f28b7ff894ea6c5ac2c1bfc681032bb Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Mon, 13 Mar 2017 13:07:45 +0100 Subject: [PATCH 126/173] Update attributes translations --- po/attributes/es.po | 10 +++--- po/attributes/nl.po | 3 +- po/attributes/zh_CN.po | 81 +++++++++++++++++++++--------------------- 3 files changed, 48 insertions(+), 46 deletions(-) diff --git a/po/attributes/es.po b/po/attributes/es.po index e5ef08470..6edb74cdc 100644 --- a/po/attributes/es.po +++ b/po/attributes/es.po @@ -27,8 +27,8 @@ msgid "" msgstr "" "Project-Id-Version: MusicBrainz\n" -"PO-Revision-Date: 2017-01-16 20:46+0000\n" -"Last-Translator: Laurent Monin \n" +"PO-Revision-Date: 2017-03-08 06:20+0000\n" +"Last-Translator: Abby Zla \n" "Language-Team: Spanish (http://www.transifex.com/musicbrainz/musicbrainz/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -230,7 +230,7 @@ msgid "" "A place whose main purpose is to host outdoor sport events, typically " "consisting of a pitch surrounded by a structure for spectators with no roof," " or a roof which can be retracted." -msgstr "" +msgstr "Un lugar cuyo principal propósito es acoger eventos deportivos al aire libre, consiste típicamente en un campo rodeado por una estructura para los espectadores sin techo, o un techo que puede ser replegado." #: DB:work_type/description:28 msgctxt "work_type" @@ -513,7 +513,7 @@ msgctxt "event_type" msgid "" "An individual concert by a single artist or collaboration, often with " "supporting artists who perform before the main act." -msgstr "" +msgstr "Un concierto individual por un solo artista o en colaboración, frecuentemente con artistas de apoyo que se presentan antes del acto principal." #: DB:work_type/description:10 msgctxt "work_type" @@ -546,7 +546,7 @@ msgid "" "An unofficial/underground release that was not sanctioned by the artist " "and/or the record company. This includes unofficial live recordings and " "pirated releases." -msgstr "" +msgstr "Una edición no oficial/ oculta que no fue autorizada por el artista y/o la compañía discográfica. Esto incluye grabaciones no oficiales o ediciones piratas." #: DB:work_type/description:20 msgctxt "work_type" diff --git a/po/attributes/nl.po b/po/attributes/nl.po index 5e3238e69..f0323cafc 100644 --- a/po/attributes/nl.po +++ b/po/attributes/nl.po @@ -1,5 +1,6 @@ # Translators: # Translators: +# reneweesp , 2017 # Maurits Meulenbelt