diff --git a/picard/coverart.py b/picard/coverart.py
index 20dbed870..51476b5b8 100644
--- a/picard/coverart.py
+++ b/picard/coverart.py
@@ -89,8 +89,10 @@ AMAZON_SERVER = {
AMAZON_IMAGE_PATH = '/images/P/%s.%s.%sZZZZZZZ.jpg'
AMAZON_ASIN_URL_REGEX = re.compile(r'^http://(?:www.)?(.*?)(?:\:[0-9]+)?/.*/([0-9B][0-9A-Z]{9})(?:[^0-9A-Z]|$)')
-def _coverart_downloaded(album, metadata, release, try_list, imagetype, data, http, error):
+def _coverart_downloaded(album, metadata, release, try_list, imagedata, data, http, error):
album._requests -= 1
+ imagetype = imagedata["type"]
+
if error or len(data) < 1000:
if error:
album.log.error(str(http.errorString()))
@@ -101,9 +103,11 @@ def _coverart_downloaded(album, metadata, release, try_list, imagetype, data, ht
filename = None
if imagetype != 'front' and QObject.config.setting["caa_image_type_as_filename"]:
filename = imagetype
- metadata.add_image(mime, data, filename)
+ metadata.add_image(mime, data, filename, imagedata["description"],
+ imagetype)
for track in album._new_tracks:
- track.metadata.add_image(mime, data, filename)
+ track.metadata.add_image(mime, data, filename,
+ imagedata["description"], imagetype)
# If the image already was a front image, there might still be some
# other front images in the try_list - remove them.
@@ -157,7 +161,7 @@ def _caa_append_image_to_trylist(try_list, imagedata):
url = QUrl(imagedata["image"])
else:
url = QUrl(imagedata["thumbnails"][thumbsize])
- _try_list_append_image_url(try_list, url, imagedata["types"][0])
+ _try_list_append_image_url(try_list, url, imagedata["types"][0], imagedata["comment"])
def coverart(album, metadata, release, try_list=None):
""" Gets all cover art URLs from the metadata and then attempts to
@@ -210,7 +214,7 @@ def _walk_try_list(album, metadata, release, try_list):
album.tagger.xmlws.download(
url['host'], url['port'], url['path'],
partial(_coverart_downloaded, album, metadata, release,
- try_list, url['type']),
+ try_list, url),
priority=True, important=True)
else:
album._finalize_loading(None)
@@ -252,7 +256,7 @@ def _process_asin_relation(try_list, relation):
})
-def _try_list_append_image_url(try_list, parsedUrl, imagetype="front"):
+def _try_list_append_image_url(try_list, parsedUrl, imagetype="front", description=""):
QObject.log.debug("Adding %s image %s", imagetype, parsedUrl)
path = str(parsedUrl.encodedPath())
if parsedUrl.hasQuery():
@@ -261,6 +265,7 @@ def _try_list_append_image_url(try_list, parsedUrl, imagetype="front"):
'host': str(parsedUrl.host()),
'port': parsedUrl.port(80),
'path': str(path),
- 'type': imagetype.lower()
+ 'type': imagetype.lower(),
+ 'description': description,
})
diff --git a/picard/file.py b/picard/file.py
index fc6d36c27..dfd6d4b79 100644
--- a/picard/file.py
+++ b/picard/file.py
@@ -329,7 +329,10 @@ class File(QtCore.QObject, Item):
settings["cover_image_filename"], dirname, metadata, settings)
overwrite = settings["save_images_overwrite"]
counters = defaultdict(lambda: 0)
- for mime, data, filename in metadata.images:
+ for image in metadata.images:
+ filename = image["filename"]
+ data = image["data"]
+ mime = image["mime"]
if filename is None:
filename = default_filename
else:
diff --git a/picard/formats/apev2.py b/picard/formats/apev2.py
index 60793c5ab..1d930a43f 100644
--- a/picard/formats/apev2.py
+++ b/picard/formats/apev2.py
@@ -141,12 +141,13 @@ class APEv2File(File):
for name, values in temp.items():
tags[str(name)] = values
if settings['save_images_to_tags']:
- for mime, data, _fname in metadata.images:
- cover_filename = 'Cover Art (Front)'
- cover_filename += mimetype.get_extension(mime, '.jpg')
- tags['Cover Art (Front)'] = cover_filename + '\0' + data
- break # can't save more than one item with the same name
- # (mp3tags does this, but it's against the specs)
+ for image in metadata.images:
+ if "front" == image["type"]:
+ cover_filename = 'Cover Art (Front)'
+ cover_filename += mimetype.get_extension(image["mime"], '.jpg')
+ tags['Cover Art (Front)'] = cover_filename + '\0' + image["data"]
+ break # can't save more than one item with the same name
+ # (mp3tags does this, but it's against the specs)
tags.save(encode_filename(filename))
class MusepackFile(APEv2File):
diff --git a/picard/formats/asf.py b/picard/formats/asf.py
index 1008074e6..58c0e4f2f 100644
--- a/picard/formats/asf.py
+++ b/picard/formats/asf.py
@@ -18,6 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from picard.file import File
+from picard.formats.id3 import ID3_IMAGE_TYPE_MAP, ID3_REVERSE_IMAGE_TYPE_MAP
from picard.util import encode_filename
from picard.metadata import Metadata
from mutagen.asf import ASF, ASFByteArrayAttribute
@@ -47,7 +48,7 @@ def unpack_image(data):
pos += 2
pos += 2
image_data = data[pos:pos+size]
- return (mime.decode("utf-16-le"), image_data, type)
+ return (mime.decode("utf-16-le"), image_data, type, description.decode("utf-16-le"))
def pack_image(mime, data, type=3, description=""):
"""
@@ -128,9 +129,10 @@ class ASFFile(File):
for name, values in file.tags.items():
if name == 'WM/Picture':
for image in values:
- (mime, data, type) = unpack_image(image.value)
- if type == 3: # Only cover images
- metadata.add_image(mime, data)
+ (mime, data, type, description) = unpack_image(image.value)
+ imagetype = ID3_REVERSE_IMAGE_TYPE_MAP.get(type, "other")
+ metadata.add_image(mime, data, description=description,
+ type_=imagetype)
continue
elif name not in self.__RTRANS:
continue
@@ -152,8 +154,12 @@ class ASFFile(File):
file.tags.clear()
if settings['save_images_to_tags']:
cover = []
- for mime, data, _fname in metadata.images:
- tag_data = pack_image(mime, data, 3)
+ for image in metadata.images:
+ if self.config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
+ continue
+ imagetype = ID3_IMAGE_TYPE_MAP.get(image["type"], 0)
+ tag_data = pack_image(image["mime"], image["data"], imagetype,
+ image["description"])
cover.append(ASFByteArrayAttribute(tag_data))
if cover:
file.tags['WM/Picture'] = cover
diff --git a/picard/formats/id3.py b/picard/formats/id3.py
index 0d2ab45df..c2933bfe5 100644
--- a/picard/formats/id3.py
+++ b/picard/formats/id3.py
@@ -20,6 +20,7 @@
import mutagen.apev2
import mutagen.mp3
import mutagen.trueaudio
+from collections import defaultdict
from mutagen import id3
from picard.metadata import Metadata
from picard.file import File
@@ -34,8 +35,7 @@ from urlparse import urlparse
def patched_EncodedTextSpec_write(self, frame, value):
try:
enc, term = self._encodings[frame.encoding]
- except AttributeError:
- enc, term = self.encodings[frame.encoding]
+ except AttributeError: enc, term = self.encodings[frame.encoding]
return value.encode(enc, 'ignore') + term
id3.EncodedTextSpec.write = patched_EncodedTextSpec_write
@@ -61,6 +61,20 @@ id3.MultiSpec.write = patched_MultiSpec_write
id3.TCMP = compatid3.TCMP
id3.TSO2 = compatid3.TSO2
+ID3_IMAGE_TYPE_MAP = {
+ "other": 0,
+ "obi": 0,
+ "tray": 0,
+ "spine": 0,
+ "sticker": 0,
+ "front": 3,
+ "back": 4,
+ "booklet": 5,
+ "medium": 6,
+ "track": 6,
+ }
+
+ID3_REVERSE_IMAGE_TYPE_MAP = dict([(v,k) for k, v in ID3_IMAGE_TYPE_MAP.iteritems()])
class ID3File(File):
"""Generic ID3-based file."""
@@ -200,7 +214,9 @@ class ID3File(File):
else:
metadata['discnumber'] = value[0]
elif frameid == 'APIC':
- metadata.add_image(frame.mime, frame.data)
+ imagetype = ID3_REVERSE_IMAGE_TYPE_MAP.get(frame.type, "other")
+ metadata.add_image(frame.mime, frame.data,
+ description=frame.desc, type_=imagetype)
elif frameid == 'POPM':
# Rating in ID3 ranges from 0 to 255, normalize this to the range 0 to 5
if frame.email == self.config.setting['rating_user_email']:
@@ -247,8 +263,24 @@ class ID3File(File):
tags.add(id3.TPOS(encoding=0, text=text))
if settings['save_images_to_tags']:
- for mime, data, _fname in metadata.images:
- tags.add(id3.APIC(encoding=0, mime=mime, type=3, desc='', data=data))
+ # This is necessary because mutagens HashKey for APIC frames only
+ # includes the FrameID (APIC) and description - it's basically
+ # impossible to save two images, even of different types, without
+ # any description.
+ counters = defaultdict(lambda: 0)
+ for image in metadata.images:
+ desc = image["description"]
+ if self.config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
+ continue
+ type_ = ID3_IMAGE_TYPE_MAP.get(image["type"], 0)
+ if counters[desc] > 0:
+ if desc:
+ image["description"] = "%s (%i)" % (desc, counters[desc])
+ else:
+ image["description"] = "(%i)" % counters[desc]
+ counters[desc] += 1
+ tags.add(id3.APIC(encoding=0, mime=image["mime"], type=type_,
+ desc=image["description"], data=image["data"]))
tmcl = mutagen.id3.TMCL(encoding=encoding, people=[])
tipl = mutagen.id3.TIPL(encoding=encoding, people=[])
diff --git a/picard/formats/mp4.py b/picard/formats/mp4.py
index 4f7487b85..24039cad2 100644
--- a/picard/formats/mp4.py
+++ b/picard/formats/mp4.py
@@ -187,11 +187,14 @@ class MP4File(File):
if settings['save_images_to_tags']:
covr = []
- for mime, data, _fname in metadata.images:
+ for image in metadata.images:
+ if self.config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
+ continue
+ mime = image["mime"]
if mime == "image/jpeg":
- covr.append(MP4Cover(data, MP4Cover.FORMAT_JPEG))
+ covr.append(MP4Cover(image["data"], MP4Cover.FORMAT_JPEG))
elif mime == "image/png":
- covr.append(MP4Cover(data, MP4Cover.FORMAT_PNG))
+ covr.append(MP4Cover(image["data"], MP4Cover.FORMAT_PNG))
if covr:
file.tags["covr"] = covr
diff --git a/picard/formats/vorbis.py b/picard/formats/vorbis.py
index 88746d71d..8b2fbd936 100644
--- a/picard/formats/vorbis.py
+++ b/picard/formats/vorbis.py
@@ -25,6 +25,7 @@ import mutagen.oggspeex
import mutagen.oggtheora
import mutagen.oggvorbis
from picard.file import File
+from picard.formats.id3 import ID3_IMAGE_TYPE_MAP, ID3_REVERSE_IMAGE_TYPE_MAP
from picard.metadata import Metadata
from picard.util import encode_filename, sanitize_date
@@ -78,12 +79,17 @@ class VCommentFile(File):
name = "totaldiscs"
elif name == "metadata_block_picture":
image = mutagen.flac.Picture(base64.standard_b64decode(value))
- metadata.add_image(image.mime, image.data)
+ imagetype = ID3_REVERSE_IMAGE_TYPE_MAP.get(image.type, "other")
+ metadata.add_image(image.mime, image.data,
+ description=image.desc,
+ type_=imagetype)
continue
metadata.add(name, value)
if self._File == mutagen.flac.FLAC:
for image in file.pictures:
- metadata.add_image(image.mime, image.data)
+ imagetype = ID3_REVERSE_IMAGE_TYPE_MAP.get(image.type, "other")
+ metadata.add_image(image.mime, image.data,
+ description=image.desc, type_=imagetype)
# Read the unofficial COVERART tags, for backward compatibillity only
if not "metadata_block_picture" in file.tags:
try:
@@ -139,16 +145,19 @@ class VCommentFile(File):
tags.setdefault(u"DISCTOTAL", []).append(metadata["totaldiscs"])
if settings['save_images_to_tags']:
- for mime, data, filename in metadata.images:
- image = mutagen.flac.Picture()
- image.type = 3 # Cover image
- image.data = data
- image.mime = mime
+ for image in metadata.images:
+ if self.config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
+ continue
+ picture = mutagen.flac.Picture()
+ picture.data = image["data"]
+ picture.mime = image["mime"]
+ picture.desc = image["description"]
+ picture.type = ID3_IMAGE_TYPE_MAP.get(image["type"], 0)
if self._File == mutagen.flac.FLAC:
- file.add_picture(image)
+ file.add_picture(picture)
else:
tags.setdefault(u"METADATA_BLOCK_PICTURE", []).append(
- base64.standard_b64encode(image.write()))
+ base64.standard_b64encode(picture.write()))
file.tags.update(tags)
kwargs = {}
if self._File == mutagen.flac.FLAC and settings["remove_id3_from_flac"]:
diff --git a/picard/metadata.py b/picard/metadata.py
index 3864109ba..8a05b7a19 100644
--- a/picard/metadata.py
+++ b/picard/metadata.py
@@ -42,8 +42,23 @@ class Metadata(dict):
self.images = []
self.length = 0
- def add_image(self, mime, data, filename=None):
- self.images.append((mime, data, filename))
+ def add_image(self, mime, data, filename=None, description="", type_="front"):
+ """Adds the image ``data`` to this Metadata object.
+
+ Arguments:
+ mime -- The mimetype of the image
+ data -- The image data
+ filename -- The image filename, without an extension
+ description -- A description for the image
+ type_ -- The image type - this should be a lower-cased name from
+ http://musicbrainz.org/doc/Cover_Art/Types
+ """
+ imagedict = {'mime': mime,
+ 'data': data,
+ 'filename': filename,
+ 'description': description,
+ 'type': type_}
+ self.images.append(imagedict)
def remove_image(self, index):
self.images.pop(index)
diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py
index b99c3ca2e..8f21a7f10 100644
--- a/picard/ui/coverartbox.py
+++ b/picard/ui/coverartbox.py
@@ -99,7 +99,7 @@ class CoverArtBox(QtGui.QGroupBox):
if self.data:
if pixmap is None:
pixmap = QtGui.QPixmap()
- pixmap.loadFromData(self.data[1])
+ pixmap.loadFromData(self.data["data"])
if not pixmap.isNull():
cover = QtGui.QPixmap(self.shadow)
pixmap = pixmap.scaled(121, 121, QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.SmoothTransformation)
@@ -112,7 +112,13 @@ class CoverArtBox(QtGui.QGroupBox):
self.item = item
data = None
if metadata and metadata.images:
- data = metadata.images[0]
+ for image in metadata.images:
+ if image["type"] == "front":
+ 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:
diff --git a/picard/ui/infodialog.py b/picard/ui/infodialog.py
index ca8d6125f..7afbe8327 100644
--- a/picard/ui/infodialog.py
+++ b/picard/ui/infodialog.py
@@ -69,7 +69,8 @@ class InfoDialog(QtGui.QDialog):
text = '
'.join(map(lambda i: '%s
%s' % i, info))
self.ui.info.setText(text)
- for mime, data, _fname in file.metadata.images:
+ for image in file.metadata.images:
+ data = image["data"]
item = QtGui.QListWidgetItem()
pixmap = QtGui.QPixmap()
pixmap.loadFromData(data)
diff --git a/picard/ui/options/cover.py b/picard/ui/options/cover.py
index 5f27d9f53..1f661b700 100644
--- a/picard/ui/options/cover.py
+++ b/picard/ui/options/cover.py
@@ -33,6 +33,7 @@ class CoverOptionsPage(OptionsPage):
options = [
BoolOption("setting", "save_images_to_tags", True),
+ BoolOption("setting", "save_only_front_images_to_tags", False),
BoolOption("setting", "save_images_to_files", False),
TextOption("setting", "cover_image_filename", "cover"),
BoolOption("setting", "save_images_overwrite", False),
@@ -55,6 +56,7 @@ class CoverOptionsPage(OptionsPage):
def load(self):
self.ui.save_images_to_tags.setChecked(self.config.setting["save_images_to_tags"])
+ self.ui.cb_embed_front_only.setChecked(self.config.setting["save_only_front_images_to_tags"])
self.ui.save_images_to_files.setChecked(self.config.setting["save_images_to_files"])
self.ui.cover_image_filename.setText(self.config.setting["cover_image_filename"])
self.ui.save_images_overwrite.setChecked(self.config.setting["save_images_overwrite"])
@@ -75,6 +77,7 @@ class CoverOptionsPage(OptionsPage):
def save(self):
self.config.setting["save_images_to_tags"] = self.ui.save_images_to_tags.isChecked()
+ self.config.setting["save_only_front_images_to_tags"] = self.ui.cb_embed_front_only.isChecked()
self.config.setting["save_images_to_files"] = self.ui.save_images_to_files.isChecked()
self.config.setting["cover_image_filename"] = unicode(self.ui.cover_image_filename.text())
self.config.setting["ca_provider_use_amazon"] =\
diff --git a/picard/ui/ui_infodialog.py b/picard/ui/ui_infodialog.py
index decc7c321..c4118a611 100644
--- a/picard/ui/ui_infodialog.py
+++ b/picard/ui/ui_infodialog.py
@@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/infodialog.ui'
#
-# Created: Tue May 29 19:44:14 2012
-# by: PyQt4 UI code generator 4.8.3
+# Created: Sat Oct 6 19:08:31 2012
+# by: PyQt4 UI code generator 4.9.4
#
# WARNING! All changes made in this file will be lost!
@@ -43,7 +43,7 @@ class Ui_InfoDialog(object):
self.artwork_list.setIconSize(QtCore.QSize(170, 170))
self.artwork_list.setMovement(QtGui.QListView.Static)
self.artwork_list.setFlow(QtGui.QListView.LeftToRight)
- self.artwork_list.setProperty(_fromUtf8("isWrapping"), False)
+ self.artwork_list.setProperty("isWrapping", False)
self.artwork_list.setResizeMode(QtGui.QListView.Fixed)
self.artwork_list.setSpacing(10)
self.artwork_list.setViewMode(QtGui.QListView.IconMode)
diff --git a/picard/ui/ui_options_cover.py b/picard/ui/ui_options_cover.py
index b961e36ab..8c44909f3 100644
--- a/picard/ui/ui_options_cover.py
+++ b/picard/ui/ui_options_cover.py
@@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/options_cover.ui'
#
-# Created: Sun Sep 30 11:21:59 2012
-# by: PyQt4 UI code generator 4.8.3
+# Created: Sat Oct 6 19:08:31 2012
+# by: PyQt4 UI code generator 4.9.4
#
# WARNING! All changes made in this file will be lost!
@@ -17,7 +17,7 @@ except AttributeError:
class Ui_CoverOptionsPage(object):
def setupUi(self, CoverOptionsPage):
CoverOptionsPage.setObjectName(_fromUtf8("CoverOptionsPage"))
- CoverOptionsPage.resize(524, 502)
+ CoverOptionsPage.resize(525, 526)
self.verticalLayout = QtGui.QVBoxLayout(CoverOptionsPage)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.rename_files = QtGui.QGroupBox(CoverOptionsPage)
@@ -29,6 +29,9 @@ class Ui_CoverOptionsPage(object):
self.save_images_to_tags = QtGui.QCheckBox(self.rename_files)
self.save_images_to_tags.setObjectName(_fromUtf8("save_images_to_tags"))
self.vboxlayout.addWidget(self.save_images_to_tags)
+ self.cb_embed_front_only = QtGui.QCheckBox(self.rename_files)
+ self.cb_embed_front_only.setObjectName(_fromUtf8("cb_embed_front_only"))
+ self.vboxlayout.addWidget(self.cb_embed_front_only)
self.save_images_to_files = QtGui.QCheckBox(self.rename_files)
self.save_images_to_files.setObjectName(_fromUtf8("save_images_to_files"))
self.vboxlayout.addWidget(self.save_images_to_files)
@@ -111,6 +114,7 @@ class Ui_CoverOptionsPage(object):
self.verticalLayout.addItem(spacerItem1)
self.retranslateUi(CoverOptionsPage)
+ QtCore.QObject.connect(self.save_images_to_tags, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.cb_embed_front_only.setEnabled)
QtCore.QMetaObject.connectSlotsByName(CoverOptionsPage)
CoverOptionsPage.setTabOrder(self.save_images_to_tags, self.save_images_to_files)
CoverOptionsPage.setTabOrder(self.save_images_to_files, self.cover_image_filename)
@@ -118,6 +122,7 @@ class Ui_CoverOptionsPage(object):
def retranslateUi(self, CoverOptionsPage):
self.rename_files.setTitle(_("Location"))
self.save_images_to_tags.setText(_("Embed cover images into tags"))
+ self.cb_embed_front_only.setText(_("Embed only front images"))
self.save_images_to_files.setText(_("Save cover images as separate files"))
self.label_3.setText(_("Use the following file name for images:"))
self.save_images_overwrite.setText(_("Overwrite the file if it already exists"))
diff --git a/po/picard.pot b/po/picard.pot
index e065ad707..5759d5bc1 100644
--- a/po/picard.pot
+++ b/po/picard.pot
@@ -8,123 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-09-30 11:45+0200\n"
+"POT-Creation-Date: 2012-10-09 15:16+0200\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 0.9.4\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
-#, python-format
-msgid ""
-"Error while opening file:\n"
-"\n"
-"%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
-#, python-format
-msgid "Calculating replay gain for \"%s\"..."
-msgstr ""
-
-#: contrib/plugins/replaygain/__init__.py:70
-#, python-format
-msgid "Replay gain for \"%s\" successfully calculated."
-msgstr ""
-
-#: contrib/plugins/replaygain/__init__.py:72
-#, python-format
-msgid "Could not calculate replay gain for \"%s\"."
-msgstr ""
-
-#: contrib/plugins/replaygain/__init__.py:75
-msgid "Calculate album &gain..."
-msgstr ""
-
-#: contrib/plugins/replaygain/__init__.py:98
-#, python-format
-msgid "Calculating album gain for \"%s\"..."
-msgstr ""
-
-#: contrib/plugins/replaygain/__init__.py:106
-#, python-format
-msgid "Album gain for \"%s\" successfully calculated."
-msgstr ""
-
-#: contrib/plugins/replaygain/__init__.py:108
-#, python-format
-msgid "Could not calculate album gain for \"%s\"."
-msgstr ""
+"Generated-By: Babel 0.9.6\n"
#: picard/acoustid.py:118
#, python-format
@@ -189,1212 +80,1212 @@ msgstr ""
msgid "Looking up the metadata for cluster %s..."
msgstr ""
-#: picard/const.py:39
+#: picard/const.py:33
msgid "CD"
msgstr ""
-#: picard/const.py:40
+#: picard/const.py:34
msgid "CD-R"
msgstr ""
-#: picard/const.py:41
+#: picard/const.py:35
msgid "HDCD"
msgstr ""
-#: picard/const.py:42
+#: picard/const.py:36
msgid "8cm CD"
msgstr ""
-#: picard/const.py:43
+#: picard/const.py:37
msgid "Vinyl"
msgstr ""
-#: picard/const.py:44
+#: picard/const.py:38
msgid "7\" Vinyl"
msgstr ""
-#: picard/const.py:45
+#: picard/const.py:39
msgid "10\" Vinyl"
msgstr ""
-#: picard/const.py:46
+#: picard/const.py:40
msgid "12\" Vinyl"
msgstr ""
-#: picard/const.py:47
+#: picard/const.py:41
msgid "Digital Media"
msgstr ""
-#: picard/const.py:48
+#: picard/const.py:42
msgid "USB Flash Drive"
msgstr ""
-#: picard/const.py:49
+#: picard/const.py:43
msgid "slotMusic"
msgstr ""
-#: picard/const.py:50
+#: picard/const.py:44
msgid "Cassette"
msgstr ""
-#: picard/const.py:51
+#: picard/const.py:45
msgid "DVD"
msgstr ""
-#: picard/const.py:52
+#: picard/const.py:46
msgid "DVD-Audio"
msgstr ""
-#: picard/const.py:53
+#: picard/const.py:47
msgid "DVD-Video"
msgstr ""
-#: picard/const.py:54
+#: picard/const.py:48
msgid "SACD"
msgstr ""
-#: picard/const.py:55
+#: picard/const.py:49
msgid "DualDisc"
msgstr ""
-#: picard/const.py:56
+#: picard/const.py:50
msgid "MiniDisc"
msgstr ""
-#: picard/const.py:57
+#: picard/const.py:51
msgid "Blu-ray"
msgstr ""
-#: picard/const.py:58
+#: picard/const.py:52
msgid "HD-DVD"
msgstr ""
-#: picard/const.py:59
+#: picard/const.py:53
msgid "Videotape"
msgstr ""
-#: picard/const.py:60
+#: picard/const.py:54
msgid "VHS"
msgstr ""
-#: picard/const.py:61
+#: picard/const.py:55
msgid "Betamax"
msgstr ""
-#: picard/const.py:62
+#: picard/const.py:56
msgid "VCD"
msgstr ""
-#: picard/const.py:63
+#: picard/const.py:57
msgid "SVCD"
msgstr ""
-#: picard/const.py:64
+#: picard/const.py:58
msgid "UMD"
msgstr ""
-#: picard/const.py:65 picard/ui/ui_options_releases.py:226
+#: picard/const.py:59 picard/ui/ui_options_releases.py:226
msgid "Other"
msgstr ""
-#: picard/const.py:66
+#: picard/const.py:60
msgid "LaserDisc"
msgstr ""
-#: picard/const.py:67
+#: picard/const.py:61
msgid "Cartridge"
msgstr ""
-#: picard/const.py:68
+#: picard/const.py:62
msgid "Reel-to-reel"
msgstr ""
-#: picard/const.py:69
+#: picard/const.py:63
msgid "DAT"
msgstr ""
-#: picard/const.py:70
+#: picard/const.py:64
msgid "Wax Cylinder"
msgstr ""
-#: picard/const.py:71
+#: picard/const.py:65
msgid "Piano Roll"
msgstr ""
-#: picard/const.py:72
+#: picard/const.py:66
msgid "DCC"
msgstr ""
-#: picard/const.py:77
+#: picard/const.py:71
msgid "Bangladesh"
msgstr ""
-#: picard/const.py:78
+#: picard/const.py:72
msgid "Belgium"
msgstr ""
-#: picard/const.py:79
+#: picard/const.py:73
msgid "Burkina Faso"
msgstr ""
-#: picard/const.py:80
+#: picard/const.py:74
msgid "Bulgaria"
msgstr ""
-#: picard/const.py:81
+#: picard/const.py:75
msgid "Barbados"
msgstr ""
-#: picard/const.py:82
+#: picard/const.py:76
msgid "Wallis and Futuna Islands"
msgstr ""
-#: picard/const.py:83
+#: picard/const.py:77
msgid "Bermuda"
msgstr ""
-#: picard/const.py:84
+#: picard/const.py:78
msgid "Brunei Darussalam"
msgstr ""
-#: picard/const.py:85
+#: picard/const.py:79
msgid "Bolivia"
msgstr ""
-#: picard/const.py:86
+#: picard/const.py:80
msgid "Bahrain"
msgstr ""
-#: picard/const.py:87
+#: picard/const.py:81
msgid "Burundi"
msgstr ""
-#: picard/const.py:88
+#: picard/const.py:82
msgid "Benin"
msgstr ""
-#: picard/const.py:89
+#: picard/const.py:83
msgid "Bhutan"
msgstr ""
-#: picard/const.py:90
+#: picard/const.py:84
msgid "Jamaica"
msgstr ""
-#: picard/const.py:91
+#: picard/const.py:85
msgid "Bouvet Island"
msgstr ""
-#: picard/const.py:92
+#: picard/const.py:86
msgid "Botswana"
msgstr ""
-#: picard/const.py:93
+#: picard/const.py:87
msgid "Samoa"
msgstr ""
-#: picard/const.py:94
+#: picard/const.py:88
msgid "Brazil"
msgstr ""
-#: picard/const.py:95
+#: picard/const.py:89
msgid "Bahamas"
msgstr ""
-#: picard/const.py:96
+#: picard/const.py:90
msgid "Belarus"
msgstr ""
-#: picard/const.py:97
+#: picard/const.py:91
msgid "Belize"
msgstr ""
-#: picard/const.py:98
+#: picard/const.py:92
msgid "Russian Federation"
msgstr ""
-#: picard/const.py:99
+#: picard/const.py:93
msgid "Rwanda"
msgstr ""
-#: picard/const.py:100
+#: picard/const.py:94
msgid "Reunion"
msgstr ""
-#: picard/const.py:101
+#: picard/const.py:95
msgid "Turkmenistan"
msgstr ""
-#: picard/const.py:102
+#: picard/const.py:96
msgid "Tajikistan"
msgstr ""
-#: picard/const.py:103
+#: picard/const.py:97
msgid "Romania"
msgstr ""
-#: picard/const.py:104
+#: picard/const.py:98
msgid "Tokelau"
msgstr ""
-#: picard/const.py:105
+#: picard/const.py:99
msgid "Guinea-Bissa"
msgstr ""
-#: picard/const.py:106
+#: picard/const.py:100
msgid "Guam"
msgstr ""
-#: picard/const.py:107
+#: picard/const.py:101
msgid "Guatemala"
msgstr ""
-#: picard/const.py:108
+#: picard/const.py:102
msgid "Greece"
msgstr ""
-#: picard/const.py:109
+#: picard/const.py:103
msgid "Equatorial Guinea"
msgstr ""
-#: picard/const.py:110
+#: picard/const.py:104
msgid "Guadeloupe"
msgstr ""
-#: picard/const.py:111
+#: picard/const.py:105
msgid "Japan"
msgstr ""
-#: picard/const.py:112
+#: picard/const.py:106
msgid "Guyana"
msgstr ""
-#: picard/const.py:113
+#: picard/const.py:107
msgid "French Guiana"
msgstr ""
-#: picard/const.py:114
+#: picard/const.py:108
msgid "Georgia"
msgstr ""
-#: picard/const.py:115
+#: picard/const.py:109
msgid "Grenada"
msgstr ""
-#: picard/const.py:116
+#: picard/const.py:110
msgid "United Kingdom"
msgstr ""
-#: picard/const.py:117
+#: picard/const.py:111
msgid "Gabon"
msgstr ""
-#: picard/const.py:118
+#: picard/const.py:112
msgid "El Salvador"
msgstr ""
-#: picard/const.py:119
+#: picard/const.py:113
msgid "Guinea"
msgstr ""
-#: picard/const.py:120
+#: picard/const.py:114
msgid "Gambia"
msgstr ""
-#: picard/const.py:121
+#: picard/const.py:115
msgid "Greenland"
msgstr ""
-#: picard/const.py:122
+#: picard/const.py:116
msgid "Gibraltar"
msgstr ""
-#: picard/const.py:123
+#: picard/const.py:117
msgid "Ghana"
msgstr ""
-#: picard/const.py:124
+#: picard/const.py:118
msgid "Oman"
msgstr ""
-#: picard/const.py:125
+#: picard/const.py:119
msgid "Tunisia"
msgstr ""
-#: picard/const.py:126
+#: picard/const.py:120
msgid "Jordan"
msgstr ""
-#: picard/const.py:127
+#: picard/const.py:121
msgid "Haiti"
msgstr ""
-#: picard/const.py:128
+#: picard/const.py:122
msgid "Hungary"
msgstr ""
-#: picard/const.py:129
+#: picard/const.py:123
msgid "Hong Kong"
msgstr ""
-#: picard/const.py:130
+#: picard/const.py:124
msgid "Honduras"
msgstr ""
-#: picard/const.py:131
+#: picard/const.py:125
msgid "Heard and Mc Donald Islands"
msgstr ""
-#: picard/const.py:132
+#: picard/const.py:126
msgid "Venezuela"
msgstr ""
-#: picard/const.py:133
+#: picard/const.py:127
msgid "Puerto Rico"
msgstr ""
-#: picard/const.py:134
+#: picard/const.py:128
msgid "Palau"
msgstr ""
-#: picard/const.py:135
+#: picard/const.py:129
msgid "Portugal"
msgstr ""
-#: picard/const.py:136
+#: picard/const.py:130
msgid "Svalbard and Jan Mayen Islands"
msgstr ""
-#: picard/const.py:137
+#: picard/const.py:131
msgid "Paraguay"
msgstr ""
-#: picard/const.py:138
+#: picard/const.py:132
msgid "Iraq"
msgstr ""
-#: picard/const.py:139
+#: picard/const.py:133
msgid "Panama"
msgstr ""
-#: picard/const.py:140
+#: picard/const.py:134
msgid "French Polynesia"
msgstr ""
-#: picard/const.py:141
+#: picard/const.py:135
msgid "Papua New Guinea"
msgstr ""
-#: picard/const.py:142
+#: picard/const.py:136
msgid "Peru"
msgstr ""
-#: picard/const.py:143
+#: picard/const.py:137
msgid "Pakistan"
msgstr ""
-#: picard/const.py:144
+#: picard/const.py:138
msgid "Philippines"
msgstr ""
-#: picard/const.py:145
+#: picard/const.py:139
msgid "Pitcairn"
msgstr ""
-#: picard/const.py:146
+#: picard/const.py:140
msgid "Poland"
msgstr ""
-#: picard/const.py:147
+#: picard/const.py:141
msgid "St. Pierre and Miquelon"
msgstr ""
-#: picard/const.py:148
+#: picard/const.py:142
msgid "Zambia"
msgstr ""
-#: picard/const.py:149
+#: picard/const.py:143
msgid "Western Sahara"
msgstr ""
-#: picard/const.py:150
+#: picard/const.py:144
msgid "Estonia"
msgstr ""
-#: picard/const.py:151
+#: picard/const.py:145
msgid "Egypt"
msgstr ""
-#: picard/const.py:152
+#: picard/const.py:146
msgid "South Africa"
msgstr ""
-#: picard/const.py:153
+#: picard/const.py:147
msgid "Ecuador"
msgstr ""
-#: picard/const.py:154
+#: picard/const.py:148
msgid "Italy"
msgstr ""
-#: picard/const.py:155
+#: picard/const.py:149
msgid "Viet Nam"
msgstr ""
-#: picard/const.py:156
+#: picard/const.py:150
msgid "Solomon Islands"
msgstr ""
-#: picard/const.py:157
+#: picard/const.py:151
msgid "Ethiopia"
msgstr ""
-#: picard/const.py:158
+#: picard/const.py:152
msgid "Somalia"
msgstr ""
-#: picard/const.py:159
+#: picard/const.py:153
msgid "Zimbabwe"
msgstr ""
-#: picard/const.py:160
+#: picard/const.py:154
msgid "Saudi Arabia"
msgstr ""
-#: picard/const.py:161
+#: picard/const.py:155
msgid "Spain"
msgstr ""
-#: picard/const.py:162
+#: picard/const.py:156
msgid "Eritrea"
msgstr ""
-#: picard/const.py:163
+#: picard/const.py:157
msgid "Moldova, Republic of"
msgstr ""
-#: picard/const.py:164
+#: picard/const.py:158
msgid "Madagascar"
msgstr ""
-#: picard/const.py:165
+#: picard/const.py:159
msgid "Morocco"
msgstr ""
-#: picard/const.py:166
+#: picard/const.py:160
msgid "Monaco"
msgstr ""
-#: picard/const.py:167
+#: picard/const.py:161
msgid "Uzbekistan"
msgstr ""
-#: picard/const.py:168
+#: picard/const.py:162
msgid "Myanmar"
msgstr ""
-#: picard/const.py:169
+#: picard/const.py:163
msgid "Mali"
msgstr ""
-#: picard/const.py:170
+#: picard/const.py:164
msgid "Macau"
msgstr ""
-#: picard/const.py:171
+#: picard/const.py:165
msgid "Mongolia"
msgstr ""
-#: picard/const.py:172
+#: picard/const.py:166
msgid "Marshall Islands"
msgstr ""
-#: picard/const.py:173
+#: picard/const.py:167
msgid "Macedonia, The Former Yugoslav Republic of"
msgstr ""
-#: picard/const.py:174
+#: picard/const.py:168
msgid "Mauritius"
msgstr ""
-#: picard/const.py:175
+#: picard/const.py:169
msgid "Malta"
msgstr ""
-#: picard/const.py:176
+#: picard/const.py:170
msgid "Malawi"
msgstr ""
-#: picard/const.py:177
+#: picard/const.py:171
msgid "Maldives"
msgstr ""
-#: picard/const.py:178
+#: picard/const.py:172
msgid "Martinique"
msgstr ""
-#: picard/const.py:179
+#: picard/const.py:173
msgid "Northern Mariana Islands"
msgstr ""
-#: picard/const.py:180
+#: picard/const.py:174
msgid "Montserrat"
msgstr ""
-#: picard/const.py:181
+#: picard/const.py:175
msgid "Mauritania"
msgstr ""
-#: picard/const.py:182
+#: picard/const.py:176
msgid "Uganda"
msgstr ""
-#: picard/const.py:183
+#: picard/const.py:177
msgid "Malaysia"
msgstr ""
-#: picard/const.py:184
+#: picard/const.py:178
msgid "Mexico"
msgstr ""
-#: picard/const.py:185
+#: picard/const.py:179
msgid "Israel"
msgstr ""
-#: picard/const.py:186
+#: picard/const.py:180
msgid "France"
msgstr ""
-#: picard/const.py:187
+#: picard/const.py:181
msgid "British Indian Ocean Territory"
msgstr ""
-#: picard/const.py:188
+#: picard/const.py:182
msgid "St. Helena"
msgstr ""
-#: picard/const.py:189
+#: picard/const.py:183
msgid "Finland"
msgstr ""
-#: picard/const.py:190
+#: picard/const.py:184
msgid "Fiji"
msgstr ""
-#: picard/const.py:191
+#: picard/const.py:185
msgid "Falkland Islands (Malvinas)"
msgstr ""
-#: picard/const.py:192
+#: picard/const.py:186
msgid "Micronesia, Federated States of"
msgstr ""
-#: picard/const.py:193
+#: picard/const.py:187
msgid "Faroe Islands"
msgstr ""
-#: picard/const.py:194
+#: picard/const.py:188
msgid "Nicaragua"
msgstr ""
-#: picard/const.py:195
+#: picard/const.py:189
msgid "Netherlands"
msgstr ""
-#: picard/const.py:196
+#: picard/const.py:190
msgid "Norway"
msgstr ""
-#: picard/const.py:197
+#: picard/const.py:191
msgid "Namibia"
msgstr ""
-#: picard/const.py:198
+#: picard/const.py:192
msgid "Vanuatu"
msgstr ""
-#: picard/const.py:199
+#: picard/const.py:193
msgid "New Caledonia"
msgstr ""
-#: picard/const.py:200
+#: picard/const.py:194
msgid "Niger"
msgstr ""
-#: picard/const.py:201
+#: picard/const.py:195
msgid "Norfolk Island"
msgstr ""
-#: picard/const.py:202
+#: picard/const.py:196
msgid "Nigeria"
msgstr ""
-#: picard/const.py:203
+#: picard/const.py:197
msgid "New Zealand"
msgstr ""
-#: picard/const.py:204
+#: picard/const.py:198
msgid "Zaire"
msgstr ""
-#: picard/const.py:205
+#: picard/const.py:199
msgid "Nepal"
msgstr ""
-#: picard/const.py:206
+#: picard/const.py:200
msgid "Nauru"
msgstr ""
-#: picard/const.py:207
+#: picard/const.py:201
msgid "Niue"
msgstr ""
-#: picard/const.py:208
+#: picard/const.py:202
msgid "Cook Islands"
msgstr ""
-#: picard/const.py:209
+#: picard/const.py:203
msgid "Cote d'Ivoire"
msgstr ""
-#: picard/const.py:210
+#: picard/const.py:204
msgid "Switzerland"
msgstr ""
-#: picard/const.py:211
+#: picard/const.py:205
msgid "Colombia"
msgstr ""
-#: picard/const.py:212
+#: picard/const.py:206
msgid "China"
msgstr ""
-#: picard/const.py:213
+#: picard/const.py:207
msgid "Cameroon"
msgstr ""
-#: picard/const.py:214
+#: picard/const.py:208
msgid "Chile"
msgstr ""
-#: picard/const.py:215
+#: picard/const.py:209
msgid "Cocos (Keeling) Islands"
msgstr ""
-#: picard/const.py:216
+#: picard/const.py:210
msgid "Canada"
msgstr ""
-#: picard/const.py:217
+#: picard/const.py:211
msgid "Congo"
msgstr ""
-#: picard/const.py:218
+#: picard/const.py:212
msgid "Central African Republic"
msgstr ""
-#: picard/const.py:219
+#: picard/const.py:213
msgid "Czech Republic"
msgstr ""
-#: picard/const.py:220
+#: picard/const.py:214
msgid "Cyprus"
msgstr ""
-#: picard/const.py:221
+#: picard/const.py:215
msgid "Christmas Island"
msgstr ""
-#: picard/const.py:222
+#: picard/const.py:216
msgid "Costa Rica"
msgstr ""
-#: picard/const.py:223
+#: picard/const.py:217
msgid "Cape Verde"
msgstr ""
-#: picard/const.py:224
+#: picard/const.py:218
msgid "Cuba"
msgstr ""
-#: picard/const.py:225
+#: picard/const.py:219
msgid "Swaziland"
msgstr ""
-#: picard/const.py:226
+#: picard/const.py:220
msgid "Syrian Arab Republic"
msgstr ""
-#: picard/const.py:227
+#: picard/const.py:221
msgid "Kyrgyzstan"
msgstr ""
-#: picard/const.py:228
+#: picard/const.py:222
msgid "Kenya"
msgstr ""
-#: picard/const.py:229
+#: picard/const.py:223
msgid "Suriname"
msgstr ""
-#: picard/const.py:230
+#: picard/const.py:224
msgid "Kiribati"
msgstr ""
-#: picard/const.py:231
+#: picard/const.py:225
msgid "Cambodia"
msgstr ""
-#: picard/const.py:232
+#: picard/const.py:226
msgid "Saint Kitts and Nevis"
msgstr ""
-#: picard/const.py:233
+#: picard/const.py:227
msgid "Comoros"
msgstr ""
-#: picard/const.py:234
+#: picard/const.py:228
msgid "Sao Tome and Principe"
msgstr ""
-#: picard/const.py:235
+#: picard/const.py:229
msgid "Slovenia"
msgstr ""
-#: picard/const.py:236
+#: picard/const.py:230
msgid "Kuwait"
msgstr ""
-#: picard/const.py:237
+#: picard/const.py:231
msgid "Senegal"
msgstr ""
-#: picard/const.py:238
+#: picard/const.py:232
msgid "San Marino"
msgstr ""
-#: picard/const.py:239
+#: picard/const.py:233
msgid "Sierra Leone"
msgstr ""
-#: picard/const.py:240
+#: picard/const.py:234
msgid "Seychelles"
msgstr ""
-#: picard/const.py:241
+#: picard/const.py:235
msgid "Kazakhstan"
msgstr ""
-#: picard/const.py:242
+#: picard/const.py:236
msgid "Cayman Islands"
msgstr ""
-#: picard/const.py:243
+#: picard/const.py:237
msgid "Singapore"
msgstr ""
-#: picard/const.py:244
+#: picard/const.py:238
msgid "Sweden"
msgstr ""
-#: picard/const.py:245
+#: picard/const.py:239
msgid "Sudan"
msgstr ""
-#: picard/const.py:246
+#: picard/const.py:240
msgid "Dominican Republic"
msgstr ""
-#: picard/const.py:247
+#: picard/const.py:241
msgid "Dominica"
msgstr ""
-#: picard/const.py:248
+#: picard/const.py:242
msgid "Djibouti"
msgstr ""
-#: picard/const.py:249
+#: picard/const.py:243
msgid "Denmark"
msgstr ""
-#: picard/const.py:250
+#: picard/const.py:244
msgid "Virgin Islands (British)"
msgstr ""
-#: picard/const.py:251
+#: picard/const.py:245
msgid "Germany"
msgstr ""
-#: picard/const.py:252
+#: picard/const.py:246
msgid "Yemen"
msgstr ""
-#: picard/const.py:253
+#: picard/const.py:247
msgid "Algeria"
msgstr ""
-#: picard/const.py:254
+#: picard/const.py:248
msgid "United States"
msgstr ""
-#: picard/const.py:255
+#: picard/const.py:249
msgid "Uruguay"
msgstr ""
-#: picard/const.py:256
+#: picard/const.py:250
msgid "Mayotte"
msgstr ""
-#: picard/const.py:257
+#: picard/const.py:251
msgid "United States Minor Outlying Islands"
msgstr ""
-#: picard/const.py:258
+#: picard/const.py:252
msgid "Lebanon"
msgstr ""
-#: picard/const.py:259
+#: picard/const.py:253
msgid "Saint Lucia"
msgstr ""
-#: picard/const.py:260
+#: picard/const.py:254
msgid "Lao People's Democratic Republic"
msgstr ""
-#: picard/const.py:261
+#: picard/const.py:255
msgid "Tuvalu"
msgstr ""
-#: picard/const.py:262
+#: picard/const.py:256
msgid "Taiwan"
msgstr ""
-#: picard/const.py:263
+#: picard/const.py:257
msgid "Trinidad and Tobago"
msgstr ""
-#: picard/const.py:264
+#: picard/const.py:258
msgid "Turkey"
msgstr ""
-#: picard/const.py:265
+#: picard/const.py:259
msgid "Sri Lanka"
msgstr ""
-#: picard/const.py:266
+#: picard/const.py:260
msgid "Liechtenstein"
msgstr ""
-#: picard/const.py:267
+#: picard/const.py:261
msgid "Latvia"
msgstr ""
-#: picard/const.py:268
+#: picard/const.py:262
msgid "Tonga"
msgstr ""
-#: picard/const.py:269
+#: picard/const.py:263
msgid "Lithuania"
msgstr ""
-#: picard/const.py:270
+#: picard/const.py:264
msgid "Luxembourg"
msgstr ""
-#: picard/const.py:271
+#: picard/const.py:265
msgid "Liberia"
msgstr ""
-#: picard/const.py:272
+#: picard/const.py:266
msgid "Lesotho"
msgstr ""
-#: picard/const.py:273
+#: picard/const.py:267
msgid "Thailand"
msgstr ""
-#: picard/const.py:274
+#: picard/const.py:268
msgid "French Southern Territories"
msgstr ""
-#: picard/const.py:275
+#: picard/const.py:269
msgid "Togo"
msgstr ""
-#: picard/const.py:276
+#: picard/const.py:270
msgid "Chad"
msgstr ""
-#: picard/const.py:277
+#: picard/const.py:271
msgid "Turks and Caicos Islands"
msgstr ""
-#: picard/const.py:278
+#: picard/const.py:272
msgid "Libyan Arab Jamahiriya"
msgstr ""
-#: picard/const.py:279
+#: picard/const.py:273
msgid "Vatican City State (Holy See)"
msgstr ""
-#: picard/const.py:280
+#: picard/const.py:274
msgid "Saint Vincent and The Grenadines"
msgstr ""
-#: picard/const.py:281
+#: picard/const.py:275
msgid "United Arab Emirates"
msgstr ""
-#: picard/const.py:282
+#: picard/const.py:276
msgid "Andorra"
msgstr ""
-#: picard/const.py:283
+#: picard/const.py:277
msgid "Antigua and Barbuda"
msgstr ""
-#: picard/const.py:284
+#: picard/const.py:278
msgid "Afghanistan"
msgstr ""
-#: picard/const.py:285
+#: picard/const.py:279
msgid "Anguilla"
msgstr ""
-#: picard/const.py:286
+#: picard/const.py:280
msgid "Virgin Islands (U.S.)"
msgstr ""
-#: picard/const.py:287
+#: picard/const.py:281
msgid "Iceland"
msgstr ""
-#: picard/const.py:288
+#: picard/const.py:282
msgid "Iran (Islamic Republic of)"
msgstr ""
-#: picard/const.py:289
+#: picard/const.py:283
msgid "Armenia"
msgstr ""
-#: picard/const.py:290
+#: picard/const.py:284
msgid "Albania"
msgstr ""
-#: picard/const.py:291
+#: picard/const.py:285
msgid "Angola"
msgstr ""
-#: picard/const.py:292
+#: picard/const.py:286
msgid "Netherlands Antilles"
msgstr ""
-#: picard/const.py:293
+#: picard/const.py:287
msgid "Antarctica"
msgstr ""
-#: picard/const.py:294
+#: picard/const.py:288
msgid "American Samoa"
msgstr ""
-#: picard/const.py:295
+#: picard/const.py:289
msgid "Argentina"
msgstr ""
-#: picard/const.py:296
+#: picard/const.py:290
msgid "Australia"
msgstr ""
-#: picard/const.py:297
+#: picard/const.py:291
msgid "Austria"
msgstr ""
-#: picard/const.py:298
+#: picard/const.py:292
msgid "Aruba"
msgstr ""
-#: picard/const.py:299
+#: picard/const.py:293
msgid "India"
msgstr ""
-#: picard/const.py:300
+#: picard/const.py:294
msgid "Tanzania, United Republic of"
msgstr ""
-#: picard/const.py:301
+#: picard/const.py:295
msgid "Azerbaijan"
msgstr ""
-#: picard/const.py:302
+#: picard/const.py:296
msgid "Ireland"
msgstr ""
-#: picard/const.py:303
+#: picard/const.py:297
msgid "Indonesia"
msgstr ""
-#: picard/const.py:304
+#: picard/const.py:298
msgid "Ukraine"
msgstr ""
-#: picard/const.py:305
+#: picard/const.py:299
msgid "Qatar"
msgstr ""
-#: picard/const.py:306
+#: picard/const.py:300
msgid "Mozambique"
msgstr ""
-#: picard/const.py:307
+#: picard/const.py:301
msgid "Bosnia and Herzegovina"
msgstr ""
-#: picard/const.py:308
+#: picard/const.py:302
msgid "Congo, The Democratic Republic of the"
msgstr ""
-#: picard/const.py:309
+#: picard/const.py:303
msgid "Serbia and Montenegro (historical, 2003-2006)"
msgstr ""
-#: picard/const.py:310
+#: picard/const.py:304
msgid "Serbia"
msgstr ""
-#: picard/const.py:311
+#: picard/const.py:305
msgid "Montenegro"
msgstr ""
-#: picard/const.py:312
+#: picard/const.py:306
msgid "Croatia"
msgstr ""
-#: picard/const.py:313
+#: picard/const.py:307
msgid "Korea (North), Democratic People's Republic of"
msgstr ""
-#: picard/const.py:314
+#: picard/const.py:308
msgid "Korea (South), Republic of"
msgstr ""
-#: picard/const.py:315
+#: picard/const.py:309
msgid "Slovakia"
msgstr ""
-#: picard/const.py:316
+#: picard/const.py:310
msgid "Soviet Union (historical, 1922-1991)"
msgstr ""
-#: picard/const.py:317
+#: picard/const.py:311
msgid "East Timor"
msgstr ""
-#: picard/const.py:318
+#: picard/const.py:312
msgid "Czechoslovakia (historical, 1918-1992)"
msgstr ""
-#: picard/const.py:319
+#: picard/const.py:313
msgid "Europe"
msgstr ""
-#: picard/const.py:320
+#: picard/const.py:314
msgid "East Germany (historical, 1949-1990)"
msgstr ""
-#: picard/const.py:321
+#: picard/const.py:315
msgid "[Unknown Country]"
msgstr ""
-#: picard/const.py:322
+#: picard/const.py:316
msgid "[Worldwide]"
msgstr ""
-#: picard/const.py:323
+#: picard/const.py:317
msgid "Yugoslavia (historical, 1918-1992)"
msgstr ""
-#: picard/const.py:335
+#: picard/const.py:329
msgid "Danish"
msgstr ""
-#: picard/const.py:336
+#: picard/const.py:330
msgid "German"
msgstr ""
-#: picard/const.py:338
+#: picard/const.py:332
msgid "English"
msgstr ""
-#: picard/const.py:339
+#: picard/const.py:333
msgid "English (Canada)"
msgstr ""
-#: picard/const.py:340
+#: picard/const.py:334
msgid "English (UK)"
msgstr ""
-#: picard/const.py:342
+#: picard/const.py:336
msgid "Spanish"
msgstr ""
-#: picard/const.py:343
+#: picard/const.py:337
msgid "Estonian"
msgstr ""
-#: picard/const.py:345
+#: picard/const.py:339
msgid "Finnish"
msgstr ""
-#: picard/const.py:347
+#: picard/const.py:341
msgid "French"
msgstr ""
-#: picard/const.py:356
+#: picard/const.py:350
msgid "Italian"
msgstr ""
-#: picard/const.py:363
+#: picard/const.py:357
msgid "Dutch"
msgstr ""
-#: picard/const.py:365
+#: picard/const.py:359
msgid "Polish"
msgstr ""
-#: picard/const.py:367
+#: picard/const.py:361
msgid "Brazilian Portuguese"
msgstr ""
-#: picard/const.py:374
+#: picard/const.py:368
msgid "Swedish"
msgstr ""
-#: picard/coverart.py:98
+#: picard/coverart.py:100
#, python-format
msgid "Coverart %s downloaded"
msgstr ""
-#: picard/coverart.py:208
+#: picard/coverart.py:213
#, python-format
msgid "Downloading http://%s:%i%s"
msgstr ""
-#: picard/file.py:520
+#: picard/file.py:523
#, python-format
msgid "No matching tracks for file %s"
msgstr ""
-#: picard/file.py:532
+#: picard/file.py:535
#, python-format
msgid "No matching tracks above the threshold for file %s"
msgstr ""
-#: picard/file.py:535
+#: picard/file.py:538
#, python-format
msgid "File %s identified!"
msgstr ""
-#: picard/file.py:549
+#: picard/file.py:552
#, python-format
msgid "Looking up the metadata for file %s..."
msgstr ""
@@ -1450,7 +1341,7 @@ msgstr ""
msgid "Barcode"
msgstr ""
-#: picard/ui/coverartbox.py:122
+#: picard/ui/coverartbox.py:128
msgid "View release on MusicBrainz"
msgstr ""
@@ -1925,14 +1816,14 @@ msgid_plural "Use Original Values"
msgstr[0] ""
msgstr[1] ""
-#: picard/ui/passworddialog.py:38
+#: picard/ui/passworddialog.py:37
#, 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:75
#, python-format
msgid ""
"The proxy %s requires you to login. Please enter your username and "
@@ -2000,79 +1891,83 @@ msgstr ""
msgid "Default CD-ROM drive to use for lookups:"
msgstr ""
-#: picard/ui/ui_options_cover.py:119
+#: picard/ui/ui_options_cover.py:123
msgid "Location"
msgstr ""
-#: picard/ui/ui_options_cover.py:120
+#: picard/ui/ui_options_cover.py:124
msgid "Embed cover images into tags"
msgstr ""
-#: picard/ui/ui_options_cover.py:121
-msgid "Save cover images as separate files"
-msgstr ""
-
-#: picard/ui/ui_options_cover.py:122
-msgid "Use the following file name for images:"
-msgstr ""
-
-#: picard/ui/ui_options_cover.py:123
-msgid "Overwrite the file if it already exists"
-msgstr ""
-
-#: picard/ui/ui_options_cover.py:124
-msgid "Coverart Providers"
-msgstr ""
-
#: picard/ui/ui_options_cover.py:125
-msgid "Amazon"
+msgid "Embed only front images"
msgstr ""
#: picard/ui/ui_options_cover.py:126
-msgid "CD Baby"
+msgid "Save cover images as separate files"
msgstr ""
-#: picard/ui/ui_options_cover.py:127 picard/ui/ui_options_cover.py:130
-msgid "Cover Art Archive"
+#: picard/ui/ui_options_cover.py:127
+msgid "Use the following file name for images:"
msgstr ""
#: picard/ui/ui_options_cover.py:128
-msgid "Jamendo"
+msgid "Overwrite the file if it already exists"
msgstr ""
#: picard/ui/ui_options_cover.py:129
-msgid "Sites on the whitelist"
+msgid "Coverart Providers"
+msgstr ""
+
+#: picard/ui/ui_options_cover.py:130
+msgid "Amazon"
msgstr ""
#: picard/ui/ui_options_cover.py:131
-msgid "Only use images of the following size:"
+msgid "CD Baby"
msgstr ""
-#: picard/ui/ui_options_cover.py:132
-msgid "250 px"
+#: picard/ui/ui_options_cover.py:132 picard/ui/ui_options_cover.py:135
+msgid "Cover Art Archive"
msgstr ""
#: picard/ui/ui_options_cover.py:133
-msgid "500 px"
+msgid "Jamendo"
msgstr ""
#: picard/ui/ui_options_cover.py:134
-msgid "Full size"
-msgstr ""
-
-#: picard/ui/ui_options_cover.py:135
-msgid "Download only images of the following types:"
+msgid "Sites on the whitelist"
msgstr ""
#: picard/ui/ui_options_cover.py:136
-msgid "Types are separated by spaces, and are not case-sensitive."
+msgid "Only use images of the following size:"
msgstr ""
#: picard/ui/ui_options_cover.py:137
-msgid "Download only approved images"
+msgid "250 px"
msgstr ""
#: picard/ui/ui_options_cover.py:138
+msgid "500 px"
+msgstr ""
+
+#: picard/ui/ui_options_cover.py:139
+msgid "Full size"
+msgstr ""
+
+#: picard/ui/ui_options_cover.py:140
+msgid "Download only images of the following types:"
+msgstr ""
+
+#: picard/ui/ui_options_cover.py:141
+msgid "Types are separated by spaces, and are not case-sensitive."
+msgstr ""
+
+#: picard/ui/ui_options_cover.py:142
+msgid "Download only approved images"
+msgstr ""
+
+#: picard/ui/ui_options_cover.py:143
msgid ""
"Use the first image type as the filename. This will not change the "
"filename of front images."
@@ -2119,14 +2014,45 @@ msgstr ""
msgid "Folksonomy Tags"
msgstr ""
+#: picard/ui/ui_options_folksonomy.py:107
+#: contrib/plugins/lastfm/ui_options_lastfm.py:119
+msgid "Ignore tags:"
+msgstr ""
+
#: picard/ui/ui_options_folksonomy.py:108
msgid "Only use my tags"
msgstr ""
+#: picard/ui/ui_options_folksonomy.py:109
+#: contrib/plugins/lastfm/ui_options_lastfm.py:123
+msgid "Minimal tag usage:"
+msgstr ""
+
+#: 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
+#: contrib/plugins/lastfm/ui_options_lastfm.py:124
+msgid " %"
+msgstr ""
+
#: picard/ui/ui_options_folksonomy.py:111
msgid "Maximum number of tags:"
msgstr ""
+#: picard/ui/ui_options_folksonomy.py:112
+#: contrib/plugins/lastfm/ui_options_lastfm.py:120
+msgid "Join multiple tags with:"
+msgstr ""
+
+#: picard/ui/ui_options_folksonomy.py:113
+#: contrib/plugins/lastfm/ui_options_lastfm.py:121
+msgid " / "
+msgstr ""
+
+#: picard/ui/ui_options_folksonomy.py:114
+#: contrib/plugins/lastfm/ui_options_lastfm.py:122
+msgid ", "
+msgstr ""
+
#: picard/ui/ui_options_general.py:92
msgid "MusicBrainz Server"
msgstr ""
@@ -2544,7 +2470,7 @@ msgstr ""
msgid "Cover Art"
msgstr ""
-#: picard/ui/options/fingerprinting.py:31
+#: picard/ui/options/fingerprinting.py:32
msgid "Fingerprinting"
msgstr ""
@@ -2606,6 +2532,10 @@ msgstr ""
msgid "Script Error"
msgstr ""
+#: picard/ui/options/tags.py:30 contrib/plugins/lastfm/ui_options_lastfm.py:118
+msgid "Tags"
+msgstr ""
+
#: picard/util/tags.py:25
msgid "Original Release Date"
msgstr ""
@@ -2850,3 +2780,77 @@ msgid ""
"%s"
msgstr ""
+#: 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
+#, python-format
+msgid ""
+"Error while opening file:\n"
+"\n"
+"%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/replaygain/__init__.py:48
+msgid "Calculate replay &gain..."
+msgstr ""
+
+#: contrib/plugins/replaygain/__init__.py:65
+#, python-format
+msgid "Calculating replay gain for \"%s\"..."
+msgstr ""
+
+#: contrib/plugins/replaygain/__init__.py:70
+#, python-format
+msgid "Replay gain for \"%s\" successfully calculated."
+msgstr ""
+
+#: contrib/plugins/replaygain/__init__.py:72
+#, python-format
+msgid "Could not calculate replay gain for \"%s\"."
+msgstr ""
+
+#: contrib/plugins/replaygain/__init__.py:75
+msgid "Calculate album &gain..."
+msgstr ""
+
+#: contrib/plugins/replaygain/__init__.py:98
+#, python-format
+msgid "Calculating album gain for \"%s\"..."
+msgstr ""
+
+#: contrib/plugins/replaygain/__init__.py:106
+#, python-format
+msgid "Album gain for \"%s\" successfully calculated."
+msgstr ""
+
+#: contrib/plugins/replaygain/__init__.py:108
+#, python-format
+msgid "Could not calculate album gain for \"%s\"."
+msgstr ""
+
diff --git a/ui/options_cover.ui b/ui/options_cover.ui
index 666034f21..972e2f926 100644
--- a/ui/options_cover.ui
+++ b/ui/options_cover.ui
@@ -6,8 +6,8 @@
0
0
- 524
- 502
+ 525
+ 526
@@ -30,6 +30,13 @@
+ -
+
+
+ Embed only front images
+
+
+
-
@@ -220,5 +227,22 @@
cover_image_filename
-
+
+
+ save_images_to_tags
+ clicked(bool)
+ cb_embed_front_only
+ setEnabled(bool)
+
+
+ 266
+ 44
+
+
+ 266
+ 67
+
+
+
+