Merge branch 'master' of github.com:musicbrainz/picard into oauth

This commit is contained in:
Lukáš Lalinský
2014-06-01 12:25:30 +02:00
108 changed files with 34444 additions and 27993 deletions

View File

@@ -45,6 +45,11 @@
* Add integrated functions $eq_any, $ne_all, $eq_all, $ne_any, $swapprefix and $delprefix.
* Add %_performance_attributes%, containing performance attributes for the work e.g. live, cover, medley etc.
Use $inmulti in file naming scripts i.e. ...$if($inmulti(%_performance_attributes%,medley), (Medley),)
* Add optional `priority` parameter to `register_album_metadata_processor()` and `register_track_metadata_processor()`
Default priority is `PluginPriority.NORMAL`, plugins registered with `PluginPriority.HIGH` will be run first,
plugins registered with `PluginPriority.LOW` will run last
* Add Standardise Performers plugin to convert e.g. Performer [piano and guitar] into
Performer [piano] and Performer [guitar].
Version 1.2 - 2013-03-30

View File

@@ -63,14 +63,23 @@ class ReplayGain(BaseAction):
self._add_file_to_queue(obj)
def _calculate_replaygain(self, file):
self.tagger.window.set_statusbar_message(N_('Calculating replay gain for "%s"...'), file.filename)
self.tagger.window.set_statusbar_message(
N_('Calculating replay gain for "%(filename)s"...'),
{'filename': file.filename}
)
calculate_replay_gain_for_files([file], file.NAME, self.tagger)
def _replaygain_callback(self, file, result=None, error=None):
if not error:
self.tagger.window.set_statusbar_message(N_('Replay gain for "%s" successfully calculated.'), file.filename)
self.tagger.window.set_statusbar_message(
N_('Replay gain for "%(filename)s" successfully calculated.'),
{'filename': file.filename}
)
else:
self.tagger.window.set_statusbar_message(N_('Could not calculate replay gain for "%s".'), file.filename)
self.tagger.window.set_statusbar_message(
N_('Could not calculate replay gain for "%(filename)s".'),
{'filename': file.filename}
)
class AlbumGain(BaseAction):
NAME = N_("Calculate album &gain...")
@@ -100,7 +109,10 @@ class AlbumGain(BaseAction):
return files_by_format
def _calculate_albumgain(self, album):
self.tagger.window.set_statusbar_message(N_('Calculating album gain for "%s"...'), album.metadata["album"])
self.tagger.window.set_statusbar_message(
N_('Calculating album gain for "%(album)s"...'),
{'album': album.metadata["album"]}
)
filelist = [t.linked_files[0] for t in album.tracks if t.is_linked()]
for format, files in self.split_files_by_type(filelist).iteritems():
@@ -108,7 +120,10 @@ class AlbumGain(BaseAction):
def _calculate_natgain(self, natalbum):
"""Calculates the replaygain"""
self.tagger.window.set_statusbar_message(N_('Calculating album gain for "%s"...'), natalbum.metadata["album"])
self.tagger.window.set_statusbar_message(
N_('Calculating album gain for "%(album)s"...'),
{'album': natalbum.metadata["album"]}
)
filelist = [t.linked_files[0] for t in natalbum.tracks if t.is_linked()]
for file_ in filelist:
@@ -116,9 +131,15 @@ class AlbumGain(BaseAction):
def _albumgain_callback(self, album, result=None, error=None):
if not error:
self.tagger.window.set_statusbar_message(N_('Album gain for "%s" successfully calculated.'), album.metadata["album"])
self.tagger.window.set_statusbar_message(
N_('Album gain for "%(album)s" successfully calculated.'),
{'album': album.metadata["album"]}
)
else:
self.tagger.window.set_statusbar_message(N_('Could not calculate album gain for "%s".'), album.metadata["album"])
self.tagger.window.set_statusbar_message(
N_('Could not calculate album gain for "%(album)s".'),
{'album': album.metadata["album"]}
)
class ReplayGainOptionsPage(OptionsPage):

View File

@@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
PLUGIN_NAME = _(u'Standardise Performers')
PLUGIN_AUTHOR = u'Sophist'
PLUGIN_DESCRIPTION = u'''Splits multi-instrument performer tags into single
instruments and combines names so e.g. (from 10cc by 10cc track 1):
<pre>
Performer [acoustic guitar, bass, dobro, electric guitar and tambourine]: Graham Gouldman
Performer [acoustic guitar, electric guitar, grand piano and synthesizer]: Lol Creme
Performer [electric guitar, moog and slide guitar]: Eric Stewart
</pre>
becomes:
<pre>
Performer [acoustic guitar]: Graham Gouldman; Lol Creme
Performer [bass]: Graham Gouldman
Performer [dobro]: Graham Gouldman
Performer [electric guitar]: Eric Stewart; Graham Gouldman; Lol Creme
Performer [grand piano]: Lol Creme
Performer [moog]: Eric Stewart
Performer [slide guitar]: Eric Stewart
Performer [synthesizer]: Lol Creme
Performer [tambourine]: Graham Gouldman
</pre>
'''
PLUGIN_VERSION = '0.2'
PLUGIN_API_VERSIONS = ["0.15.0", "0.15.1", "0.16.0", "1.0.0", "1.1.0", "1.2.0", "1.3.0"]
import re
from picard import log
from picard.metadata import register_track_metadata_processor
standardise_performers_split = re.compile(r", | and ").split
def standardise_performers(album, metadata, *args):
for key, values in metadata.rawitems():
if not key.startswith('performer:') \
and not key.startswith('~performersort:'):
continue
mainkey, subkey = key.split(':', 1)
if not subkey:
continue
instruments = standardise_performers_split(subkey)
if len(instruments) == 1:
continue
log.debug("%s: Splitting Performer [%s] into separate performers",
PLUGIN_NAME,
subkey,
)
for instrument in instruments:
newkey = '%s:%s' % (mainkey, instrument)
for value in values:
metadata.add_unique(newkey, value)
del metadata[key]
try:
from picard.plugin import PluginPriority
register_track_metadata_processor(standardise_performers,
priority=PluginPriority.HIGH)
except ImportError:
log.warning(
"Running %r plugin on this Picard version may not work as you expect. "
"Any other plugins that run before it will get the old performers "
"rather than the standardized performers.", PLUGIN_NAME
)
register_track_metadata_processor(standardise_performers)

View File

@@ -58,11 +58,15 @@ def version_to_string(version, short=False):
return version_str
_version_re = re.compile("(\d+)[._](\d+)[._](\d+)[._]?(dev|final)[._]?(\d+)$")
_version_re = re.compile("(\d+)[._](\d+)(?:[._](\d+)[._]?(?:(dev|final)[._]?(\d+))?)?$")
def version_from_string(version_str):
m = _version_re.search(version_str)
if m:
g = m.groups()
if g[2] is None:
return (int(g[0]), int(g[1]), 0, 'final', 0)
if g[3] is None:
return (int(g[0]), int(g[1]), int(g[2]), 'final', 0)
return (int(g[0]), int(g[1]), int(g[2]), g[3], int(g[4]))
raise VersionError("String '%s' do not match regex '%s'" % (version_str,
_version_re.pattern))
@@ -78,4 +82,13 @@ else:
__version__ = PICARD_VERSION_STR
PICARD_FANCY_VERSION_STR = PICARD_VERSION_STR_SHORT
api_versions = ["0.15.0", "0.15.1", "0.16.0", "1.0.0", "1.1.0", "1.2.0", "1.3.0"]
# Keep those ordered
api_versions = [
"0.15.0",
"0.15.1",
"0.16.0",
"1.0.0",
"1.1.0",
"1.2.0",
"1.3.0",
]

View File

@@ -98,8 +98,18 @@ class AcoustIDClient(QtCore.QObject):
recording_list_el = acoustid_el.append_child('recording_list')
if error:
log.error("AcoustID: Lookup network error for '%s': %r", file.filename, unicode(http.errorString()))
self.tagger.window.set_statusbar_message(N_("AcoustID lookup network error for '%s'!"), file.filename)
mparms = {
'error': unicode(http.errorString()),
'filename': file.filename,
}
log.error(
"AcoustID: Lookup network error for '%(filename)s': %(error)r" %
mparms)
self.tagger.window.set_statusbar_message(
N_("AcoustID lookup network error for '%(filename)s'!"),
mparms,
echo=None
)
else:
status = document.response[0].status[0].text
if status == 'ok':
@@ -112,9 +122,18 @@ class AcoustIDClient(QtCore.QObject):
parse_recording(recording)
log.debug("AcoustID: Lookup successful for '%s'", file.filename)
else:
error_message = document.response[0].error[0].message[0].text
log.error("AcoustID: Lookup error for '%s': %r", file.filename, error_message)
self.tagger.window.set_statusbar_message(N_("AcoustID lookup failed for '%s'!"), file.filename)
mparms = {
'error': document.response[0].error[0].message[0].text,
'filename': file.filename
}
log.error(
"AcoustID: Lookup error for '%(filename)s': %(error)r" %
mparms)
self.tagger.window.set_statusbar_message(
N_("AcoustID lookup failed for '%(filename)s'!"),
mparms,
echo=None
)
next(doc, http, error)
@@ -124,12 +143,30 @@ class AcoustIDClient(QtCore.QObject):
except KeyError:
# The file has been removed. do nothing
return
mparms = {
'filename': file.filename
}
if not result:
self.tagger.window.set_statusbar_message(N_("Acoustid lookup returned no result for file '%s'"), file.filename)
log.debug(
"AcoustID: lookup returned no result for file '%(filename)s'" %
mparms
)
self.tagger.window.set_statusbar_message(
N_("AcoustID lookup returned no result for file '%(filename)s'"),
mparms,
echo=None
)
file.clear_pending()
return
log.debug(
"AcoustID: looking up the fingerprint for file '%(filename)s'" %
mparms
)
self.tagger.window.set_statusbar_message(
N_("Looking up the fingerprint for file %s..."), file.filename)
N_("Looking up the fingerprint for file '%(filename)s' ..."),
mparms,
echo=None
)
params = dict(meta='recordings releasegroups releases tracks compress')
if result[0] == 'fingerprint':
type, fingerprint, length = result
@@ -179,7 +216,7 @@ class AcoustIDClient(QtCore.QObject):
def _on_fpcalc_error(self, next, filename, error):
process = self.sender()
finished = process.property('picard_finished').toBool()
finished = process.property('picard_finished')
if finished:
return
process.setProperty('picard_finished', True)

View File

@@ -19,6 +19,7 @@
from functools import partial
from PyQt4 import QtCore
from picard import log
class Submission(object):
@@ -75,17 +76,34 @@ class AcoustIDManager(QtCore.QObject):
if not fingerprints:
self._check_unsubmitted()
return
self.tagger.window.set_statusbar_message(N_('Submitting AcoustIDs...'))
log.debug("AcoustID: submitting ...")
self.tagger.window.set_statusbar_message(
N_('Submitting AcoustIDs ...'),
echo=None
)
self.tagger.xmlws.submit_acoustid_fingerprints(fingerprints, partial(self.__fingerprint_submission_finished, fingerprints))
def __fingerprint_submission_finished(self, fingerprints, document, http, error):
if error:
mparms = {
'error': unicode(http.errorString())
}
log.error(
"AcoustID: submission failed with error '%(error)s'" %
mparms)
self.tagger.window.set_statusbar_message(
N_("AcoustID submission failed with error '%s'"),
unicode(http.errorString()),
timeout=3000)
N_("AcoustID submission failed with error '%(error)s'"),
mparms,
echo=None,
timeout=3000
)
else:
self.tagger.window.set_statusbar_message(N_('AcoustIDs successfully submitted.'), timeout=3000)
log.debug('AcoustID: successfully submitted')
self.tagger.window.set_statusbar_message(
N_('AcoustIDs successfully submitted.'),
echo=None,
timeout=3000
)
for submission in fingerprints:
submission.orig_recordingid = submission.recordingid
self._check_unsubmitted()

View File

@@ -64,6 +64,7 @@ class Album(DataObject, Item):
self._after_load_callbacks = []
self.unmatched_files = Cluster(_("Unmatched Files"), special=True, related_album=self, hide_if_empty=True)
self.errors = []
self.status = None
def __repr__(self):
return '<Album %s %r>' % (self.id, self.metadata[u"album"])
@@ -185,7 +186,7 @@ class Album(DataObject, Item):
def _finalize_loading(self, error):
if error:
self.metadata.clear()
self.metadata['album'] = _("[could not load album %s]") % self.id
self.status = _("[could not load album %s]") % self.id
del self._new_metadata
del self._new_tracks
self.update()
@@ -271,14 +272,18 @@ class Album(DataObject, Item):
del self._new_metadata
del self._new_tracks
self.loaded = True
self.status = None
self.match_files(self.unmatched_files.files)
self.update()
self.tagger.window.set_statusbar_message(
_('Album %s loaded: %s - %s'),
self.id,
self.metadata['albumartist'],
self.metadata['album'],
timeout=3000)
N_('Album %(id)s loaded: %(artist)s - %(album)s'),
{
'id': self.id,
'artist': self.metadata['albumartist'],
'album': self.metadata['album']
},
timeout=3000
)
for func in self._after_load_callbacks:
func()
self._after_load_callbacks = []
@@ -287,14 +292,17 @@ class Album(DataObject, Item):
if self._requests:
log.info("Not reloading, some requests are still active.")
return
self.tagger.window.set_statusbar_message('Loading album %s ...', self.id)
self.tagger.window.set_statusbar_message(
N_('Loading album %(id)s ...'),
{'id': self.id}
)
self.loaded = False
self.status = _("[loading album information]")
if self.release_group:
self.release_group.loaded = False
self.release_group.folksonomy_tags.clear()
self.metadata.clear()
self.folksonomy_tags.clear()
self.metadata['album'] = _("[loading album information]")
self.update()
self._new_metadata = Metadata()
self._new_tracks = []
@@ -456,12 +464,17 @@ class Album(DataObject, Item):
def column(self, column):
if column == 'title':
if self.status is not None:
title = self.status
else:
title = self.metadata['album']
if self.tracks:
linked_tracks = 0
for track in self.tracks:
if track.is_linked():
linked_tracks += 1
text = u'%s\u200E (%d/%d' % (self.metadata['album'], linked_tracks, len(self.tracks))
text = u'%s\u200E (%d/%d' % (title, linked_tracks, len(self.tracks))
unmatched = self.get_num_unmatched_files()
if unmatched:
text += '; %d?' % (unmatched,)
@@ -472,7 +485,7 @@ class Album(DataObject, Item):
len(self.metadata.images)) % len(self.metadata.images)
return text + ')'
else:
return self.metadata['album']
return title
elif column == '~length':
length = self.metadata.length
if length:

View File

@@ -19,6 +19,9 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import re
import os
import ntpath
import sys
from operator import itemgetter
from heapq import heappush, heappop
from PyQt4 import QtCore
@@ -26,7 +29,7 @@ from picard import config
from picard.metadata import Metadata
from picard.similarity import similarity
from picard.ui.item import Item
from picard.util import format_time
from picard.util import format_time, album_artist_from_path
class Cluster(QtCore.QObject, Item):
@@ -145,12 +148,17 @@ class Cluster(QtCore.QObject, Item):
except (AttributeError, IndexError):
releases = None
mparms = {
'album': self.metadata['album']
}
# no matches
if not releases:
self.tagger.window.set_statusbar_message(
N_("No matching releases for cluster %s"),
self.metadata['album'],
timeout=3000)
N_("No matching releases for cluster %(album)s"),
mparms,
timeout=3000
)
return
# multiple matches -- calculate similarities to each of them
@@ -160,18 +168,26 @@ class Cluster(QtCore.QObject, Item):
if match[0] < config.setting['cluster_lookup_threshold']:
self.tagger.window.set_statusbar_message(
N_("No matching releases for cluster %s"),
self.metadata['album'],
timeout=3000)
N_("No matching releases for cluster %(album)s"),
mparms,
timeout=3000
)
return
self.tagger.window.set_statusbar_message(N_("Cluster %s identified!"), self.metadata['album'], timeout=3000)
self.tagger.window.set_statusbar_message(
N_("Cluster %(album)s identified!"),
mparms,
timeout=3000
)
self.tagger.move_files_to_album(self.files, match[1].id)
def lookup_metadata(self):
"""Try to identify the cluster using the existing metadata."""
if self.lookup_task:
return
self.tagger.window.set_statusbar_message(N_("Looking up the metadata for cluster %s..."), self.metadata['album'])
self.tagger.window.set_statusbar_message(
N_("Looking up the metadata for cluster %(album)s..."),
{'album': self.metadata['album']}
)
self.lookup_task = self.tagger.xmlws.find_releases(self._lookup_finished,
artist=self.metadata['albumartist'],
release=self.metadata['album'],
@@ -191,6 +207,12 @@ class Cluster(QtCore.QObject, Item):
for file in files:
artist = file.metadata["albumartist"] or file.metadata["artist"]
album = file.metadata["album"]
# Improve clustering from directory structure if no existing tags
# Only used for grouping and to provide cluster title / artist - not added to file tags.
filename = file.filename
if config.setting["windows_compatibility"] or sys.platform == "win32":
filename = ntpath.splitdrive(filename)[1]
album, artist = album_artist_from_path(filename, album, artist)
# For each track, record the index of the artist and album within the clusters
tracks.append((artistDict.add(artist),
albumDict.add(album)))

View File

@@ -19,7 +19,7 @@
from functools import partial
from PyQt4 import QtCore
from picard import config
from picard import config, log
user_collections = {}
@@ -55,10 +55,19 @@ class Collection(QtCore.QObject):
self.releases.update(ids)
self.size += count
callback()
mparms = {
'count': count,
'name': self.name
}
log.debug('Added %(count)i releases to collection "%(name)s"' % mparms)
self.tagger.window.set_statusbar_message(
ungettext('Added %i release to collection "%s"',
'Added %i releases to collection "%s"', count) % (count, self.name))
ungettext('Added %(count)i release to collection "%(name)s"',
'Added %(count)i releases to collection "%(name)s"',
count),
mparms,
translate=None,
echo=None
)
def _remove_finished(self, ids, callback, document, reply, error):
self.pending.difference_update(ids)
@@ -67,18 +76,31 @@ class Collection(QtCore.QObject):
self.releases.difference_update(ids)
self.size -= count
callback()
mparms = {
'count': count,
'name': self.name
}
log.debug('Removed %(count)i releases from collection "%(name)s"' %
mparms)
self.tagger.window.set_statusbar_message(
ungettext('Removed %i release from collection "%s"',
'Removed %i releases from collection "%s"', count) % (count, self.name))
ungettext('Removed %(count)i release from collection "%(name)s"',
'Removed %(count)i releases from collection "%(name)s"',
count),
mparms,
translate=None,
echo=None
)
def load_user_collections(callback=None):
tagger = QtCore.QObject.tagger
def request_finished(document, reply, error):
if error:
tagger.window.set_statusbar_message(_("Error loading collections: %s"), unicode(reply.errorString()))
tagger.window.set_statusbar_message(
N_("Error loading collections: %(error)s"),
{'error': unicode(reply.errorString())},
echo=log.error
)
return
collection_list = document.metadata[0].collection_list[0]
if "collection" in collection_list.children:

View File

@@ -6,6 +6,7 @@
# Copyright (C) 2007, 2010, 2011 Lukáš Lalinský
# Copyright (C) 2011 Michael Wiencek
# Copyright (C) 2011-2012 Wieland Hoffmann
# Copyright (C) 2013-2014 Laurent Monin
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -21,267 +22,184 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import json
import re
import traceback
from picard.coverartproviders import cover_art_providers, CoverArtProvider
from functools import partial
from picard import config, log
from picard.metadata import Image, is_front_image
from picard.util import mimetype, parse_amazon_url
from picard.const import CAA_HOST, CAA_PORT
from PyQt4.QtCore import QUrl, QObject
# amazon image file names are unique on all servers and constructed like
# <ASIN>.<ServerNumber>.[SML]ZZZZZZZ.jpg
# A release sold on amazon.de has always <ServerNumber> = 03, for example.
# Releases not sold on amazon.com, don't have a "01"-version of the image,
# so we need to make sure we grab an existing image.
AMAZON_SERVER = {
"amazon.jp": {
"server": "ec1.images-amazon.com",
"id": "09",
},
"amazon.co.jp": {
"server": "ec1.images-amazon.com",
"id": "09",
},
"amazon.co.uk": {
"server": "ec1.images-amazon.com",
"id": "02",
},
"amazon.de": {
"server": "ec2.images-amazon.com",
"id": "03",
},
"amazon.com": {
"server": "ec1.images-amazon.com",
"id": "01",
},
"amazon.ca": {
"server": "ec1.images-amazon.com",
"id": "01", # .com and .ca are identical
},
"amazon.fr": {
"server": "ec1.images-amazon.com",
"id": "08"
},
}
AMAZON_IMAGE_PATH = '/images/P/%s.%s.%sZZZZZZZ.jpg'
from picard.coverartimage import (CoverArtImageIOError,
CoverArtImageIdentificationError)
from PyQt4.QtCore import QObject
def _coverart_http_error(album, http):
album.error_append(u'Coverart error: %s' % (unicode(http.errorString())))
class CoverArt:
def _coverart_downloaded(album, metadata, release, try_list, coverinfos, data, http, error):
album._requests -= 1
def __init__(self, album, metadata, release):
self._queue_new()
self.album = album
self.metadata = metadata
self.release = release
self.front_image_found = False
if error or len(data) < 1000:
if error:
_coverart_http_error(album, http)
else:
QObject.tagger.window.set_statusbar_message(
N_("Cover art of type '%s' downloaded for %s from %s"),
coverinfos['type'].title(), album.id, coverinfos['host'])
mime = mimetype.get_from_data(data, default="image/jpeg")
def __repr__(self):
return "CoverArt for %r" % (self.album)
try:
metadata.make_and_add_image(mime, data,
imagetype=coverinfos['type'],
comment=coverinfos['desc'])
for track in album._new_tracks:
track.metadata.make_and_add_image(mime, data,
imagetype=coverinfos['type'],
comment=coverinfos['desc'])
except (IOError, OSError) as e:
album.error_append(e.message)
album._finalize_loading(error=True)
# It doesn't make sense to store/download more images if we can't
# save them in the temporary folder, abort.
def retrieve(self):
"""Retrieve available cover art images for the release"""
if (not config.setting["save_images_to_tags"] and not
config.setting["save_images_to_files"]):
log.debug("Cover art disabled by user options.")
return
# If the image already was a front image, there might still be some
# other front images in the try_list - remove them.
if is_front_image(coverinfos):
for item in try_list[:]:
if is_front_image(item) and 'archive.org' not in item['host']:
# Hosts other than archive.org only provide front images
try_list.remove(item)
_walk_try_list(album, metadata, release, try_list)
self.providers = cover_art_providers()
self.download_next_in_queue()
def _coverart_downloaded(self, coverartimage, data, http, error):
"""Handle finished download, save it to metadata"""
self.album._requests -= 1
def _caa_json_downloaded(album, metadata, release, try_list, data, http, error):
album._requests -= 1
caa_front_found = False
if error:
_coverart_http_error(album, http)
else:
try:
caa_data = json.loads(data)
except ValueError:
log.debug("Invalid JSON: %s", http.url().toString())
if error:
self.album.error_append(u'Coverart error: %s' % (unicode(http.errorString())))
elif len(data) < 1000:
log.warning("Not enough data, skipping %s" % coverartimage)
else:
caa_types = config.setting["caa_image_types"]
caa_types = map(unicode.lower, caa_types)
for image in caa_data["images"]:
if config.setting["caa_approved_only"] and not image["approved"]:
continue
if not image["types"] and "unknown" in caa_types:
image["types"] = [u"Unknown"]
imagetypes = map(unicode.lower, image["types"])
for imagetype in imagetypes:
if imagetype == "front":
caa_front_found = True
if imagetype in caa_types:
_caa_append_image_to_trylist(try_list, image)
break
self._message(
N_("Cover art of type '%(type)s' downloaded for %(albumid)s from %(host)s"),
{
'type': coverartimage.types_as_string(),
'albumid': self.album.id,
'host': coverartimage.host
},
echo=None
)
try:
coverartimage.set_data(data)
if coverartimage.can_be_saved_to_metadata:
log.debug("Cover art image downloaded: %r [%s]" %
(
coverartimage,
coverartimage.imageinfo_as_string()
)
)
self.metadata.append_image(coverartimage)
for track in self.album._new_tracks:
track.metadata.append_image(coverartimage)
# If the image already was a front image,
# there might still be some other non-CAA front
# images in the queue - ignore them.
if not self.front_image_found:
self.front_image_found = coverartimage.is_front_image()
else:
log.debug("Thumbnail for cover art image downloaded: %r [%s]" %
(
coverartimage,
coverartimage.imageinfo_as_string()
)
)
except CoverArtImageIOError as e:
self.album.error_append(unicode(e))
self.album._finalize_loading(error=True)
# It doesn't make sense to store/download more images if we can't
# save them in the temporary folder, abort.
return
except CoverArtImageIdentificationError as e:
self.album.error_append(unicode(e))
if error or not caa_front_found:
_fill_try_list(album, release, try_list)
_walk_try_list(album, metadata, release, try_list)
self.download_next_in_queue()
_CAA_THUMBNAIL_SIZE_MAP = {
0: "small",
1: "large",
}
def download_next_in_queue(self):
"""Downloads next item in queue.
If there are none left, loading of album will be finalized.
"""
if self.album.id not in self.album.tagger.albums:
# album removed
return
if (self.front_image_found and
config.setting["save_images_to_tags"] and not
config.setting["save_images_to_files"] and
config.setting["save_only_front_images_to_tags"]):
# no need to continue
self.album._finalize_loading(None)
return
if self._queue_empty():
if self.providers:
# requeue from next provider
provider, name = self.providers.pop(0)
ret = CoverArtProvider._STARTED
try:
p = provider(self)
if p.enabled():
log.debug("Trying cover art provider %s ..." % name)
ret = p.queue_downloads()
else:
log.debug("Skipping cover art provider %s ..." % name)
finally:
if ret != CoverArtProvider.WAIT:
self.download_next_in_queue()
return
else:
# nothing more to do
self.album._finalize_loading(None)
return
# We still have some items to try!
coverartimage = self._queue_get()
if not coverartimage.support_types and self.front_image_found:
# we already have one front image, no need to try other type-less
# sources
log.debug("Skipping %r, one front image is already available",
coverartimage)
self.download_next_in_queue()
return
self._message(
N_("Downloading cover art of type '%(type)s' for %(albumid)s from %(host)s ..."),
{
'type': coverartimage.types_as_string(),
'albumid': self.album.id,
'host': coverartimage.host
},
echo=None
)
log.debug("Downloading %r" % coverartimage)
self.album.tagger.xmlws.download(
coverartimage.host,
coverartimage.port,
coverartimage.path,
partial(self._coverart_downloaded, coverartimage),
priority=True,
important=False
)
self.album._requests += 1
def queue_put(self, coverartimage):
"Add an image to queue"
log.debug("Queing %r for download", coverartimage)
self.__queue.append(coverartimage)
def _queue_get(self):
"Get next image and remove it from queue"
return self.__queue.pop(0)
def _queue_empty(self):
"Returns True if the queue is empty"
return not self.__queue
def _queue_new(self):
"Initialize the queue"
self.__queue = []
def _message(self, *args, **kwargs):
"""Display message to status bar"""
QObject.tagger.window.set_statusbar_message(*args, **kwargs)
def _caa_append_image_to_trylist(try_list, imagedata):
"""Adds URLs to `try_list` depending on the users CAA image size settings."""
imagesize = config.setting["caa_image_size"]
thumbsize = _CAA_THUMBNAIL_SIZE_MAP.get(imagesize, None)
if thumbsize is None:
url = QUrl(imagedata["image"])
else:
url = QUrl(imagedata["thumbnails"][thumbsize])
extras = {
'type': imagedata["types"][0].lower(), # FIXME: we pass only 1 type
'desc': imagedata["comment"],
'front': imagedata['front'], # front image indicator from CAA
}
_try_list_append_image_url(try_list, url, extras)
def coverart(album, metadata, release, try_list=None):
""" Gets all cover art URLs from the metadata and then attempts to
def coverart(album, metadata, release):
"""Gets all cover art URLs from the metadata and then attempts to
download the album art. """
# try_list will be None for the first call
if try_list is None:
try_list = []
# MB web service indicates if CAA has artwork
# http://tickets.musicbrainz.org/browse/MBS-4536
has_caa_artwork = False
caa_types = map(unicode.lower, config.setting["caa_image_types"])
if 'cover_art_archive' in release.children:
caa_node = release.children['cover_art_archive'][0]
has_caa_artwork = (caa_node.artwork[0].text == 'true')
if len(caa_types) == 2 and ('front' in caa_types or 'back' in caa_types):
# The OR cases are there to still download and process the CAA
# JSON file if front or back is enabled but not in the CAA and
# another type (that's neither front nor back) is enabled.
# For example, if both front and booklet are enabled and the
# CAA only has booklet images, the front element in the XML
# from the webservice will be false (thus front_in_caa is False
# as well) but it's still necessary to download the booklet
# images by using the fact that back is enabled but there are
# no back images in the CAA.
front_in_caa = caa_node.front[0].text == 'true' or 'front' not in caa_types
back_in_caa = caa_node.back[0].text == 'true' or 'back' not in caa_types
has_caa_artwork = has_caa_artwork and (front_in_caa or back_in_caa)
elif len(caa_types) == 1 and ('front' in caa_types or 'back' in caa_types):
front_in_caa = caa_node.front[0].text == 'true' and 'front' in caa_types
back_in_caa = caa_node.back[0].text == 'true' and 'back' in caa_types
has_caa_artwork = has_caa_artwork and (front_in_caa or back_in_caa)
if config.setting['ca_provider_use_caa'] and has_caa_artwork\
and len(caa_types) > 0:
log.debug("There are suitable images in the cover art archive for %s"
% release.id)
album._requests += 1
album.tagger.xmlws.download(
CAA_HOST, CAA_PORT, "/release/%s/" %
metadata["musicbrainz_albumid"],
partial(_caa_json_downloaded, album, metadata, release, try_list),
priority=True, important=False)
else:
log.debug("There are no suitable images in the cover art archive for %s"
% release.id)
_fill_try_list(album, release, try_list)
_walk_try_list(album, metadata, release, try_list)
def _fill_try_list(album, release, try_list):
"""Fills ``try_list`` by looking at the relationships in ``release``."""
try:
if 'relation_list' in release.children:
for relation_list in release.relation_list:
if relation_list.target_type == 'url':
for relation in relation_list.relation:
# Use the URL of a cover art link directly
if config.setting['ca_provider_use_whitelist']\
and (relation.type == 'cover art link' or
relation.type == 'has_cover_art_at'):
_try_list_append_image_url(try_list, QUrl(relation.target[0].text))
elif config.setting['ca_provider_use_amazon']\
and (relation.type == 'amazon asin' or
relation.type == 'has_Amazon_ASIN'):
_process_asin_relation(try_list, relation)
except AttributeError:
album.error_append(traceback.format_exc())
def _walk_try_list(album, metadata, release, try_list):
"""Downloads each item in ``try_list``. If there are none left, loading of
``album`` will be finalized."""
if len(try_list) == 0:
album._finalize_loading(None)
elif album.id not in album.tagger.albums:
return
else:
# We still have some items to try!
album._requests += 1
coverinfos = try_list.pop(0)
QObject.tagger.window.set_statusbar_message(
N_("Downloading cover art of type '%s' for %s from %s ..."),
coverinfos['type'], album.id, coverinfos['host'])
album.tagger.xmlws.download(
coverinfos['host'], coverinfos['port'], coverinfos['path'],
partial(_coverart_downloaded, album, metadata, release, try_list, coverinfos),
priority=True, important=False)
def _process_asin_relation(try_list, relation):
amz = parse_amazon_url(relation.target[0].text)
if amz is not None:
if amz['host'] in AMAZON_SERVER:
serverInfo = AMAZON_SERVER[amz['host']]
else:
serverInfo = AMAZON_SERVER['amazon.com']
host = serverInfo['server']
path_l = AMAZON_IMAGE_PATH % (amz['asin'], serverInfo['id'], 'L')
path_m = AMAZON_IMAGE_PATH % (amz['asin'], serverInfo['id'], 'M')
_try_list_append_image_url(try_list, QUrl("http://%s:%s" % (host, path_l)))
_try_list_append_image_url(try_list, QUrl("http://%s:%s" % (host, path_m)))
def _try_list_append_image_url(try_list, parsedUrl, extras=None):
path = str(parsedUrl.encodedPath())
if parsedUrl.hasQuery():
path += '?' + parsedUrl.encodedQuery()
coverinfos = {
'host': str(parsedUrl.host()),
'port': parsedUrl.port(80),
'path': str(path),
'type': 'front',
'desc': ''
}
if extras is not None:
coverinfos.update(extras)
log.debug("Adding %s image %s", coverinfos['type'], parsedUrl.toString())
try_list.append(coverinfos)
coverart = CoverArt(album, metadata, release)
log.debug("New %r", coverart)
coverart.retrieve()

View File

@@ -18,6 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from picard.attributes import MB_ATTRIBUTES
from picard.i18n import ugettext_attr
# list of types from http://musicbrainz.org/doc/Cover_Art/Types
# order of declaration is preserved in selection box
@@ -28,3 +29,13 @@ for k, v in sorted(MB_ATTRIBUTES.items(), key=lambda (k,v): k):
# pseudo type, used for the no type case
CAA_TYPES.append({'name': "unknown", 'title': N_(u"Unknown")})
CAA_TYPES_TR = {}
for t in CAA_TYPES:
CAA_TYPES_TR[t['name']] = t['title']
def translate_caa_type(name):
if name == 'unknown':
return _(CAA_TYPES_TR[name])
else:
return ugettext_attr(CAA_TYPES_TR[name], u"cover_art_type")

391
picard/coverartimage.py Normal file
View File

@@ -0,0 +1,391 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2007 Oliver Charles
# Copyright (C) 2007-2011 Philipp Wolfer
# Copyright (C) 2007, 2010, 2011 Lukáš Lalinský
# Copyright (C) 2011 Michael Wiencek
# Copyright (C) 2011-2012 Wieland Hoffmann
# Copyright (C) 2013-2014 Laurent Monin
#
# 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.
import os
import shutil
import sys
import tempfile
from hashlib import md5
from PyQt4.QtCore import QUrl, QObject, QMutex
from picard import config, log
from picard.coverartarchive import translate_caa_type
from picard.util import (
encode_filename,
replace_win32_incompat,
imageinfo
)
from picard.util.textencoding import (
replace_non_ascii,
unaccent,
)
_datafiles = dict()
_datafile_mutex = QMutex(QMutex.Recursive)
class DataHash:
def __init__(self, data, prefix='picard', suffix=''):
self._filename = None
_datafile_mutex.lock()
try:
m = md5()
m.update(data)
self._hash = m.hexdigest()
if self._hash not in _datafiles:
(fd, self._filename) = tempfile.mkstemp(prefix=prefix, suffix=suffix)
QObject.tagger.register_cleanup(self.delete_file)
with os.fdopen(fd, "wb") as imagefile:
imagefile.write(data)
_datafiles[self._hash] = self._filename
log.debug("Saving image data %s to %r" % (self._hash, self._filename))
else:
self._filename = _datafiles[self._hash]
finally:
_datafile_mutex.unlock()
def delete_file(self):
if self._filename:
try:
os.unlink(self._filename)
except:
pass
else:
_datafile_mutex.lock()
try:
self._filename = None
del _datafiles[self._hash]
self._hash = None
finally:
_datafile_mutex.unlock()
@property
def data(self):
if self._filename:
with open(self._filename, "rb") as imagefile:
return imagefile.read()
return None
@property
def filename(self):
return self._filename
class CoverArtImageError(Exception):
pass
class CoverArtImageIOError(CoverArtImageError):
pass
class CoverArtImageIdentificationError(CoverArtImageError):
pass
class CoverArtImage:
# Indicate if types are provided by the source, ie. CAA or certain file
# formats may have types associated with cover art, but some other sources
# don't provide such information
support_types = False
# `is_front` has to be explicitely set, it is used to handle CAA is_front
# indicator
is_front = None
sourceprefix = "URL"
def __init__(self, url=None, types=[], comment='', data=None):
if url is not None:
self.parse_url(url)
else:
self.url = None
self.types = types
self.comment = comment
self.datahash = None
# thumbnail is used to link to another CoverArtImage, ie. for PDFs
self.thumbnail = None
self.can_be_saved_to_tags = True
self.can_be_saved_to_disk = True
self.can_be_saved_to_metadata = True
if data is not None:
self.set_data(data)
def parse_url(self, url):
self.url = QUrl(url)
self.host = str(self.url.host())
self.port = self.url.port(80)
self.path = str(self.url.encodedPath())
if self.url.hasQuery():
self.path += '?' + str(self.url.encodedQuery())
@property
def source(self):
if self.url is not None:
return u"%s: %s" % (self.sourceprefix, self.url.toString())
else:
return u"%s" % self.sourceprefix
def is_front_image(self):
"""Indicates if image is considered as a 'front' image.
It depends on few things:
- if `is_front` was set, it is used over anything else
- if `types` was set, search for 'front' in it
- if `support_types` is False, default to True for any image
- if `support_types` is True, default to False for any image
"""
if not self.can_be_saved_to_metadata:
# ignore thumbnails
return False
if self.is_front is not None:
return self.is_front
if u'front' in self.types:
return True
return (self.support_types == False)
def imageinfo_as_string(self):
if self.datahash is None:
return ""
return "w=%d h=%d mime=%s ext=%s datalen=%d file=%s" % (self.width,
self.height,
self.mimetype,
self.extension,
self.datalength,
self.tempfile_filename)
def __repr__(self):
p = []
if self.url is not None:
p.append("url=%r" % self.url.toString())
if self.types:
p.append("types=%r" % self.types)
if self.is_front is not None:
p.append("is_front=%r" % self.is_front)
if self.comment:
p.append("comment=%r" % self.comment)
return "%s(%s)" % (self.__class__.__name__, ", ".join(p))
def __unicode__(self):
p = [u'Image']
if self.url is not None:
p.append(u"from %s" % self.url.toString())
if self.types:
p.append(u"of type %s" % u','.join(self.types))
if self.comment:
p.append(u"and comment '%s'" % self.comment)
return u' '.join(p)
def __str__(self):
return unicode(self).encode('utf-8')
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
"""
if self.datahash:
self.datahash.delete_file()
self.datahash = None
try:
(self.width, self.height, self.mimetype, self.extension,
self.datalength) = imageinfo.identify(data)
except imageinfo.IdentificationError as e:
raise CoverArtImageIdentificationError(e)
try:
self.datahash = DataHash(data, suffix=self.extension)
except (OSError, IOError) as e:
raise CoverArtImageIOError(e)
@property
def maintype(self):
"""Returns one type only, even for images having more than one type set.
This is mostly used when saving cover art to tags because most formats
don't support multiple types for one image.
Images coming from CAA can have multiple types (ie. 'front, booklet').
"""
if self.is_front_image() or not self.types or u'front' in self.types:
return u'front'
# TODO: do something better than randomly using the first in the list
return self.types[0]
def _make_image_filename(self, filename, dirname, metadata):
if config.setting["ascii_filenames"]:
if isinstance(filename, unicode):
filename = unaccent(filename)
filename = replace_non_ascii(filename)
if not filename:
filename = "cover"
if not os.path.isabs(filename):
filename = os.path.join(dirname, filename)
# replace incompatible characters
if config.setting["windows_compatibility"] or sys.platform == "win32":
filename = replace_win32_incompat(filename)
# remove null characters
filename = filename.replace("\x00", "")
return encode_filename(filename)
def save(self, dirname, metadata, counters):
"""Saves this image.
:dirname: The name of the directory that contains the audio file
:metadata: A metadata object
:counters: A dictionary mapping filenames to the amount of how many
images with that filename were already saved in `dirname`.
"""
if not self.can_be_saved_to_disk:
return
if config.setting["caa_image_type_as_filename"]:
filename = self.maintype
log.debug("Make cover filename from types: %r -> %r",
self.types, filename)
else:
filename = config.setting["cover_image_filename"]
log.debug("Using default cover image filename %r", filename)
filename = self._make_image_filename(filename, dirname, metadata)
overwrite = config.setting["save_images_overwrite"]
ext = self.extension
image_filename = self._next_filename(filename, counters)
while os.path.exists(image_filename + ext) and not overwrite:
if not self._is_write_needed(image_filename + ext):
break
image_filename = self._next_filename(filename, counters)
else:
new_filename = image_filename + ext
# Even if overwrite is enabled we don't need to write the same
# image multiple times
if not self._is_write_needed(new_filename):
return
log.debug("Saving cover image to %r", new_filename)
try:
new_dirname = os.path.dirname(new_filename)
if not os.path.isdir(new_dirname):
os.makedirs(new_dirname)
shutil.copyfile(self.tempfile_filename, new_filename)
except (OSError, IOError) as e:
raise CoverArtImageIOError(e)
def _next_filename(self, filename, counters):
if counters[filename]:
new_filename = "%s (%d)" % (filename, counters[filename])
else:
new_filename = filename
counters[filename] += 1
return new_filename
def _is_write_needed(self, filename):
if (os.path.exists(filename)
and os.path.getsize(filename) == self.datalength):
log.debug("Identical file size, not saving %r", filename)
return False
return True
@property
def data(self):
"""Reads the data from the temporary file created for this image.
May raise CoverArtImageIOError
"""
try:
return self.datahash.data
except (OSError, IOError) as e:
raise CoverArtImageIOError(e)
@property
def tempfile_filename(self):
return self.datahash.filename
def types_as_string(self, translate=True, separator=', '):
if self.types:
types = self.types
elif self.is_front_image():
types = [u'front']
else:
types = [u'-']
if translate:
types = [translate_caa_type(type) for type in types]
return separator.join(types)
class CaaCoverArtImage(CoverArtImage):
"""Image from Cover Art Archive"""
support_types = True
sourceprefix = u"CAA"
def __init__(self, url, types=[], is_front=False, comment='', data=None):
CoverArtImage.__init__(self, url=url, types=types, comment=comment,
data=data)
self.is_front = is_front
class CaaThumbnailCoverArtImage(CaaCoverArtImage):
"""Used for thumbnails of CaaCoverArtImage objects, together with thumbnail
property"""
def __init__(self, url, types=[], is_front=False, comment='', data=None):
CaaCoverArtImage.__init__(self, url=url, types=types, comment=comment,
data=data)
self.is_front = False
self.can_be_saved_to_disk = False
self.can_be_saved_to_tags = False
self.can_be_saved_to_metadata = False
class TagCoverArtImage(CoverArtImage):
"""Image from file tags"""
def __init__(self, file, tag=None, types=[], is_front=None,
support_types=False, comment='', data=None):
CoverArtImage.__init__(self, url=None, types=types, comment=comment,
data=data)
self.sourcefile = file
self.tag = tag
self.support_types = support_types
if is_front is not None:
self.is_front = is_front
@property
def source(self):
if self.tag:
return u'Tag %s from %s' % (self.tag, self.sourcefile)
else:
return u'File %s' % (self.sourcefile)
def __repr__(self):
p = []
p.append('%r' % self.sourcefile)
if self.tag is not None:
p.append("tag=%r" % self.tag)
if self.types:
p.append("types=%r" % self.types)
if self.is_front is not None:
p.append("is_front=%r" % self.is_front)
p.append('support_types=%r' % self.support_types)
if self.comment:
p.append("comment=%r" % self.comment)
return "%s(%s)" % (self.__class__.__name__, ", ".join(p))

View File

@@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2014 Laurent Monin
#
# 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.
from picard.plugin import ExtensionPoint
_cover_art_providers = ExtensionPoint()
def register_cover_art_provider(provider):
_cover_art_providers.register(provider.__module__, provider)
def cover_art_providers():
providers = []
for p in _cover_art_providers:
providers.append((p, p.NAME))
return providers
class CoverArtProvider:
"""Subclasses of this class need to reimplement at least `queue_downloads()`.
`__init__()` does not have to do anything.
`queue_downloads()` will be called if `enabled()` returns `True`.
`queue_downloads()` must return `FINISHED` when it finished to queue
potential cover art downloads (using `queue_put(<CoverArtImage object>).
If `queue_downloads()` delegates the job of queuing downloads to another
method (asynchronous) it should return `WAIT` and the other method has to
explicitely call `next_in_queue()`.
If `FINISHED` is returned, `next_in_queue()` will be automatically called
by CoverArt object.
"""
# default state, internal use
_STARTED = 0
# returned by queue_downloads():
# next_in_queue() will be automatically called
FINISHED = 1
# returned by queue_downloads():
# next_in_queue() has to be called explicitely by provider
WAIT = 2
def __init__(self, coverart):
self.coverart = coverart
self.release = coverart.release
self.metadata = coverart.metadata
self.album = coverart.album
def enabled(self):
return True
def queue_downloads(self):
# this method has to return CoverArtProvider.FINISHED or
# CoverArtProvider.WAIT
raise NotImplementedError
def error(self, msg):
self.coverart.album.error_append(msg)
def queue_put(self, what):
self.coverart.queue_put(what)
def next_in_queue(self):
# must be called by provider if queue_downloads() returns WAIT
self.coverart.download_next_in_queue()
def match_url_relations(self, relation_types, func):
"""Execute `func` for each relation url matching type in
`relation_types`
"""
try:
if 'relation_list' in self.release.children:
for relation_list in self.release.relation_list:
if relation_list.target_type == 'url':
for relation in relation_list.relation:
if relation.type in relation_types:
func(relation.target[0].text)
except AttributeError:
self.error(traceback.format_exc())
from picard.coverartproviders.caa import CoverArtProviderCaa
from picard.coverartproviders.amazon import CoverArtProviderAmazon
from picard.coverartproviders.whitelist import CoverArtProviderWhitelist
register_cover_art_provider(CoverArtProviderCaa)
register_cover_art_provider(CoverArtProviderAmazon)
register_cover_art_provider(CoverArtProviderWhitelist)

View File

@@ -0,0 +1,121 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2007 Oliver Charles
# Copyright (C) 2007-2011 Philipp Wolfer
# Copyright (C) 2007, 2010, 2011 Lukáš Lalinský
# Copyright (C) 2011 Michael Wiencek
# Copyright (C) 2011-2012 Wieland Hoffmann
# Copyright (C) 2013-2014 Laurent Monin
#
# 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.
import traceback
from picard import config, log
from picard.util import parse_amazon_url
from picard.coverartproviders import CoverArtProvider
from picard.coverartimage import CoverArtImage
# amazon image file names are unique on all servers and constructed like
# <ASIN>.<ServerNumber>.[SML]ZZZZZZZ.jpg
# A release sold on amazon.de has always <ServerNumber> = 03, for example.
# Releases not sold on amazon.com, don't have a "01"-version of the image,
# so we need to make sure we grab an existing image.
AMAZON_SERVER = {
"amazon.jp": {
"server": "ec1.images-amazon.com",
"id": "09",
},
"amazon.co.jp": {
"server": "ec1.images-amazon.com",
"id": "09",
},
"amazon.co.uk": {
"server": "ec1.images-amazon.com",
"id": "02",
},
"amazon.de": {
"server": "ec2.images-amazon.com",
"id": "03",
},
"amazon.com": {
"server": "ec1.images-amazon.com",
"id": "01",
},
"amazon.ca": {
"server": "ec1.images-amazon.com",
"id": "01", # .com and .ca are identical
},
"amazon.fr": {
"server": "ec1.images-amazon.com",
"id": "08"
},
}
AMAZON_IMAGE_PATH = '/images/P/%(asin)s.%(serverid)s.%(size)s.jpg'
# First item in the list will be tried first
AMAZON_SIZES = (
# huge size option is only available for items
# that have a ZOOMing picture on its amazon web page
# and it doesn't work for all of the domain names
#'_SCRM_', # huge size
'LZZZZZZZ', # large size, option format 1
#'_SCLZZZZZZZ_', # large size, option format 3
'MZZZZZZZ', # default image size, format 1
#'_SCMZZZZZZZ_', # medium size, option format 3
#'TZZZZZZZ', # medium image size, option format 1
#'_SCTZZZZZZZ_', # small size, option format 3
#'THUMBZZZ', # small size, option format 1
)
class CoverArtProviderAmazon(CoverArtProvider):
"""Use Amazon ASIN Musicbrainz relationships to get cover art"""
NAME = "Amazon"
def enabled(self):
if not config.setting['ca_provider_use_amazon']:
log.debug("Cover art from Amazon disabled by user")
return False
return not self.coverart.front_image_found
def queue_downloads(self):
self.match_url_relations(('amazon asin', 'has_Amazon_ASIN'),
self._queue_from_asin_relation)
return CoverArtProvider.FINISHED
def _queue_from_asin_relation(self, url):
"""Queue cover art images from Amazon"""
amz = parse_amazon_url(url)
if amz is None:
return
log.debug("Found ASIN relation : %s %s", amz['host'], amz['asin'])
if amz['host'] in AMAZON_SERVER:
serverInfo = AMAZON_SERVER[amz['host']]
else:
serverInfo = AMAZON_SERVER['amazon.com']
host = serverInfo['server']
for size in AMAZON_SIZES:
path = AMAZON_IMAGE_PATH % {
'asin': amz['asin'],
'serverid': serverInfo['id'],
'size': size
}
self.queue_put(CoverArtImage("http://%s:%s" % (host, path)))

View File

@@ -0,0 +1,176 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2007 Oliver Charles
# Copyright (C) 2007-2011 Philipp Wolfer
# Copyright (C) 2007, 2010, 2011 Lukáš Lalinský
# Copyright (C) 2011 Michael Wiencek
# Copyright (C) 2011-2012 Wieland Hoffmann
# Copyright (C) 2013-2014 Laurent Monin
#
# 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.
import json
import traceback
from picard import config, log
from picard.const import CAA_HOST, CAA_PORT
from picard.coverartproviders import CoverArtProvider
from picard.coverartimage import CaaCoverArtImage, CaaThumbnailCoverArtImage
_CAA_THUMBNAIL_SIZE_MAP = {
0: "small",
1: "large",
}
class CoverArtProviderCaa(CoverArtProvider):
"""Get cover art from Cover Art Archive using release mbid"""
NAME = "Cover Art Archive"
def __init__(self, coverart):
CoverArtProvider.__init__(self, coverart)
self.caa_types = map(unicode.lower, config.setting["caa_image_types"])
self.len_caa_types = len(self.caa_types)
def enabled(self):
"""Check if CAA artwork has to be downloaded"""
if not config.setting['ca_provider_use_caa']:
log.debug("Cover Art Archive disabled by user")
return False
if not self.len_caa_types:
log.debug("User disabled all Cover Art Archive types")
return False
# MB web service indicates if CAA has artwork
# http://tickets.musicbrainz.org/browse/MBS-4536
if 'cover_art_archive' not in self.release.children:
log.debug("No Cover Art Archive information for %s"
% self.release.id)
return False
caa_node = self.release.children['cover_art_archive'][0]
caa_has_suitable_artwork = caa_node.artwork[0].text == 'true'
if not caa_has_suitable_artwork:
log.debug("There are no images in the Cover Art Archive for %s"
% self.release.id)
return False
want_front = 'front' in self.caa_types
want_back = 'back' in self.caa_types
caa_has_front = caa_node.front[0].text == 'true'
caa_has_back = caa_node.back[0].text == 'true'
if self.len_caa_types == 2 and (want_front or want_back):
# The OR cases are there to still download and process the CAA
# JSON file if front or back is enabled but not in the CAA and
# another type (that's neither front nor back) is enabled.
# For example, if both front and booklet are enabled and the
# CAA only has booklet images, the front element in the XML
# from the webservice will be false (thus front_in_caa is False
# as well) but it's still necessary to download the booklet
# images by using the fact that back is enabled but there are
# no back images in the CAA.
front_in_caa = caa_has_front or not want_front
back_in_caa = caa_has_back or not want_back
caa_has_suitable_artwork = front_in_caa or back_in_caa
elif self.len_caa_types == 1 and (want_front or want_back):
front_in_caa = caa_has_front and want_front
back_in_caa = caa_has_back and want_back
caa_has_suitable_artwork = front_in_caa or back_in_caa
if not caa_has_suitable_artwork:
log.debug("There are no suitable images in the Cover Art Archive for %s"
% self.release.id)
else:
log.debug("There are suitable images in the Cover Art Archive for %s"
% self.release.id)
return caa_has_suitable_artwork
def queue_downloads(self):
self.album.tagger.xmlws.download(
CAA_HOST,
CAA_PORT,
"/release/%s/" % self.metadata["musicbrainz_albumid"],
self._caa_json_downloaded,
priority=True,
important=False
)
self.album._requests += 1
# we will call next_in_queue() after json parsing
return CoverArtProvider.WAIT
def _caa_json_downloaded(self, data, http, error):
"""Parse CAA JSON file and queue CAA cover art images for download"""
self.album._requests -= 1
if error:
self.error(u'CAA JSON error: %s' % (unicode(http.errorString())))
else:
try:
caa_data = json.loads(data)
except ValueError:
self.error("Invalid JSON: %s", http.url().toString())
else:
imagesize = config.setting["caa_image_size"]
thumbsize = _CAA_THUMBNAIL_SIZE_MAP.get(imagesize, None)
for image in caa_data["images"]:
if config.setting["caa_approved_only"] and not image["approved"]:
continue
is_pdf = image["image"].endswith('.pdf')
if is_pdf and not config.setting["save_images_to_files"]:
log.debug("Skipping pdf cover art : %s" %
image["image"])
continue
# if image has no type set, we still want it to match
# pseudo type 'unknown'
if not image["types"]:
image["types"] = [u"unknown"]
else:
image["types"] = map(unicode.lower, image["types"])
# only keep enabled caa types
types = set(image["types"]).intersection(
set(self.caa_types))
if types:
if thumbsize is None or is_pdf:
url = image["image"]
else:
url = image["thumbnails"][thumbsize]
coverartimage = CaaCoverArtImage(
url,
types=image["types"],
is_front=image['front'],
comment=image["comment"],
)
if is_pdf:
# thumbnail will be used to "display" PDF in info
# dialog
thumbnail = CaaThumbnailCoverArtImage(
url=image["thumbnails"]['small'],
types=image["types"],
is_front=image['front'],
comment=image["comment"],
)
self.queue_put(thumbnail)
coverartimage.thumbnail = thumbnail
# PDFs cannot be saved to tags (as 2014/05/29)
coverartimage.can_be_saved_to_tags = False
self.queue_put(coverartimage)
self.next_in_queue()

View File

@@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2007 Oliver Charles
# Copyright (C) 2007-2011 Philipp Wolfer
# Copyright (C) 2007, 2010, 2011 Lukáš Lalinský
# Copyright (C) 2011 Michael Wiencek
# Copyright (C) 2011-2012 Wieland Hoffmann
# Copyright (C) 2013-2014 Laurent Monin
#
# 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.
import traceback
from picard import config, log
from picard.coverartproviders import CoverArtProvider
from picard.coverartimage import CoverArtImage
class CoverArtProviderWhitelist(CoverArtProvider):
"""Use cover art link and has_cover_art_at MusicBrainz relationships to get
cover art"""
NAME = "Whitelist"
def enabled(self):
if not config.setting['ca_provider_use_whitelist']:
log.debug("Cover art from white list disabled by user")
return False
return not self.coverart.front_image_found
def queue_downloads(self):
self.match_url_relations(('cover art link', 'has_cover_art_at'),
self._queue_from_whitelist)
return CoverArtProvider.FINISHED
def _queue_from_whitelist(self, url):
log.debug("Found cover art link in whitelist")
self.queue_put(CoverArtImage(url))

View File

@@ -36,7 +36,6 @@ from picard.util import (
decode_filename,
encode_filename,
format_time,
mimetype,
pathcmp,
replace_win32_incompat,
sanitize_filename,
@@ -122,7 +121,13 @@ class File(QtCore.QObject, Item):
if 'tracknumber' not in metadata:
tracknumber = tracknum_from_filename(self.base_filename)
if tracknumber != -1:
metadata['tracknumber'] = str(tracknumber)
tracknumber = str(tracknumber)
metadata['tracknumber'] = tracknumber
if metadata['title'] == filename:
stripped_filename = filename.lstrip('0')
tnlen = len(tracknumber)
if stripped_filename[:tnlen] == tracknumber:
metadata['title'] = stripped_filename[tnlen:].lstrip()
self.orig_metadata = metadata
self.metadata.copy(metadata)
@@ -490,7 +495,11 @@ class File(QtCore.QObject, Item):
# no matches
if not tracks:
self.tagger.window.set_statusbar_message(N_("No matching tracks for file %s"), self.filename, timeout=3000)
self.tagger.window.set_statusbar_message(
N_("No matching tracks for file '%(filename)s'"),
{'filename': self.filename},
timeout=3000
)
self.clear_pending()
return
@@ -503,12 +512,17 @@ class File(QtCore.QObject, Item):
threshold = config.setting['file_lookup_threshold']
if match[0] < threshold:
self.tagger.window.set_statusbar_message(
N_("No matching tracks above the threshold for file %s"),
self.filename,
timeout=3000)
N_("No matching tracks above the threshold for file '%(filename)s'"),
{'filename': self.filename},
timeout=3000
)
self.clear_pending()
return
self.tagger.window.set_statusbar_message(N_("File %s identified!"), self.filename, timeout=3000)
self.tagger.window.set_statusbar_message(
N_("File '%(filename)s' identified!"),
{'filename': self.filename},
timeout=3000
)
self.clear_pending()
rg, release, track = match[1:]
@@ -524,7 +538,10 @@ class File(QtCore.QObject, Item):
"""Try to identify the file using the existing metadata."""
if self.lookup_task:
return
self.tagger.window.set_statusbar_message(N_("Looking up the metadata for file %s..."), self.filename)
self.tagger.window.set_statusbar_message(
N_("Looking up the metadata for file %(filename)s ..."),
{'filename': self.filename}
)
self.clear_lookup_task()
metadata = self.metadata
self.lookup_task = self.tagger.xmlws.find_tracks(partial(self._lookup_finished, 'metadata'),

View File

@@ -24,9 +24,10 @@ import mutagen.wavpack
import mutagen.optimfrog
import mutagenext.tak
from picard import config, log
from picard.coverartimage import TagCoverArtImage, CoverArtImageError
from picard.file import File
from picard.metadata import Metadata, save_this_image_to_tags
from picard.util import encode_filename, sanitize_date, mimetype
from picard.metadata import Metadata
from picard.util import encode_filename, sanitize_date
from os.path import isfile
@@ -62,8 +63,18 @@ class APEv2File(File):
if origname.lower().startswith("cover art") and values.kind == mutagen.apev2.BINARY:
if '\0' in values.value:
descr, data = values.value.split('\0', 1)
mime = mimetype.get_from_data(data, descr, 'image/jpeg')
metadata.make_and_add_image(mime, data)
try:
coverartimage = TagCoverArtImage(
file=filename,
tag=origname,
data=data,
)
except CoverArtImageError as e:
log.error('Cannot load image from %r: %s' %
(filename, e))
else:
metadata.append_image(coverartimage)
# skip EXTERNAL and BINARY values
if values.kind != mutagen.apev2.TEXT:
continue
@@ -108,7 +119,7 @@ class APEv2File(File):
tags = mutagen.apev2.APEv2()
if config.setting["clear_existing_tags"]:
tags.clear()
elif config.setting['save_images_to_tags'] and metadata.images:
elif metadata.images_to_be_saved_to_tags:
for name, value in tags.items():
if name.lower().startswith('cover art') and value.kind == mutagen.apev2.BINARY:
del tags[name]
@@ -145,15 +156,12 @@ class APEv2File(File):
temp.setdefault(name, []).append(value)
for name, values in temp.items():
tags[str(name)] = values
if config.setting['save_images_to_tags']:
for image in metadata.images:
if not save_this_image_to_tags(image):
continue
cover_filename = 'Cover Art (Front)'
cover_filename += mimetype.get_extension(image.mimetype, '.jpg')
tags['Cover Art (Front)'] = mutagen.apev2.APEValue(cover_filename + '\0' + image.data, mutagen.apev2.BINARY)
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_to_be_saved_to_tags:
cover_filename = 'Cover Art (Front)'
cover_filename += image.extension
tags['Cover Art (Front)'] = mutagen.apev2.APEValue(cover_filename + '\0' + image.data, mutagen.apev2.BINARY)
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))

View File

@@ -18,10 +18,11 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from picard import config, log
from picard.coverartimage import TagCoverArtImage, CoverArtImageError
from picard.file import File
from picard.formats.id3 import image_type_from_id3_num, image_type_as_id3_num
from picard.formats.id3 import types_from_id3, image_type_as_id3_num
from picard.util import encode_filename
from picard.metadata import Metadata, save_this_image_to_tags
from picard.metadata import Metadata
from mutagen.asf import ASF, ASFByteArrayAttribute
import struct
@@ -141,8 +142,21 @@ class ASFFile(File):
if name == 'WM/Picture':
for image in values:
(mime, data, type, description) = unpack_image(image.value)
metadata.make_and_add_image(mime, data, comment=description,
imagetype=image_type_from_id3_num(type))
try:
coverartimage = TagCoverArtImage(
file=filename,
tag=name,
types=types_from_id3(type),
comment=description,
support_types=True,
data=data,
)
except CoverArtImageError as e:
log.error('Cannot load image from %r: %s' %
(filename, e))
else:
metadata.append_image(coverartimage)
continue
elif name not in self.__RTRANS:
continue
@@ -162,17 +176,14 @@ class ASFFile(File):
if config.setting['clear_existing_tags']:
file.tags.clear()
if config.setting['save_images_to_tags']:
cover = []
for image in metadata.images:
if not save_this_image_to_tags(image):
continue
tag_data = pack_image(image.mimetype, image.data,
image_type_as_id3_num(image.imagetype),
image.description)
cover.append(ASFByteArrayAttribute(tag_data))
if cover:
file.tags['WM/Picture'] = cover
cover = []
for image in metadata.images_to_be_saved_to_tags:
tag_data = pack_image(image.mimetype, image.data,
image_type_as_id3_num(image.maintype),
image.comment)
cover.append(ASFByteArrayAttribute(tag_data))
if cover:
file.tags['WM/Picture'] = cover
for name, values in metadata.rawitems():
if name.startswith('lyrics:'):

View File

@@ -24,7 +24,8 @@ import re
from collections import defaultdict
from mutagen import id3
from picard import config, log
from picard.metadata import Metadata, save_this_image_to_tags, MULTI_VALUED_JOINER
from picard.coverartimage import TagCoverArtImage, CoverArtImageError
from picard.metadata import Metadata
from picard.file import File
from picard.formats.mutagenext import compatid3
from picard.util import encode_filename, sanitize_date
@@ -92,6 +93,10 @@ def image_type_as_id3_num(texttype):
return __ID3_IMAGE_TYPE_MAP.get(texttype, 0)
def types_from_id3(id3type):
return [unicode(image_type_from_id3_num(id3type))]
class ID3File(File):
"""Generic ID3-based file."""
@@ -255,8 +260,19 @@ class ID3File(File):
else:
log.error("Invalid %s value '%s' dropped in %r", frameid, frame.text[0], filename)
elif frameid == 'APIC':
metadata.make_and_add_image(frame.mime, frame.data, comment=frame.desc,
imagetype=image_type_from_id3_num(frame.type))
try:
coverartimage = TagCoverArtImage(
file=filename,
tag=frameid,
types=types_from_id3(frame.type),
comment=frame.desc,
support_types=True,
data=frame.data,
)
except CoverArtImageError as e:
log.error('Cannot load image from %r: %s' % (filename, e))
else:
metadata.append_image(coverartimage)
elif frameid == 'POPM':
# Rating in ID3 ranges from 0 to 255, normalize this to the range 0 to 5
if frame.email == config.setting['rating_user_email']:
@@ -281,7 +297,7 @@ class ID3File(File):
if config.setting['clear_existing_tags']:
tags.clear()
if config.setting['save_images_to_tags'] and metadata.images:
if metadata.images_to_be_saved_to_tags:
tags.delall('APIC')
if config.setting['write_id3v1']:
@@ -304,27 +320,24 @@ class ID3File(File):
text = metadata['discnumber']
tags.add(id3.TPOS(encoding=0, text=text))
if config.setting['save_images_to_tags']:
# 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 = desctag = image.description
if not save_this_image_to_tags(image):
continue
if counters[desc] > 0:
if desc:
desctag = "%s (%i)" % (desc, counters[desc])
else:
desctag = "(%i)" % counters[desc]
counters[desc] += 1
tags.add(id3.APIC(encoding=0,
mime=image.mimetype,
type=image_type_as_id3_num(image.imagetype),
desc=desctag,
data=image.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_to_be_saved_to_tags:
desc = desctag = image.comment
if counters[desc] > 0:
if desc:
desctag = "%s (%i)" % (desc, counters[desc])
else:
desctag = "(%i)" % counters[desc]
counters[desc] += 1
tags.add(id3.APIC(encoding=0,
mime=image.mimetype,
type=image_type_as_id3_num(image.maintype),
desc=desctag,
data=image.data))
tmcl = mutagen.id3.TMCL(encoding=encoding, people=[])
tipl = mutagen.id3.TIPL(encoding=encoding, people=[])

View File

@@ -19,8 +19,9 @@
from mutagen.mp4 import MP4, MP4Cover
from picard import config, log
from picard.coverartimage import TagCoverArtImage, CoverArtImageError
from picard.file import File
from picard.metadata import Metadata, save_this_image_to_tags
from picard.metadata import Metadata
from picard.util import encode_filename
@@ -140,10 +141,20 @@ class MP4File(File):
metadata["totaldiscs"] = str(values[0][1])
elif name == "covr":
for value in values:
if value.imageformat == value.FORMAT_JPEG:
metadata.make_and_add_image("image/jpeg", value)
elif value.imageformat == value.FORMAT_PNG:
metadata.make_and_add_image("image/png", value)
if value.imageformat not in (value.FORMAT_JPEG,
value.FORMAT_PNG):
continue
try:
coverartimage = TagCoverArtImage(
file=filename,
tag=name,
data=value,
)
except CoverArtImageError as e:
log.error('Cannot load image from %r: %s' %
(filename, e))
else:
metadata.append_image(coverartimage)
self._info(metadata, file)
return metadata
@@ -189,18 +200,14 @@ class MP4File(File):
else:
file.tags["disk"] = [(int(metadata["discnumber"]), 0)]
if config.setting['save_images_to_tags']:
covr = []
for image in metadata.images:
if not save_this_image_to_tags(image):
continue
mime = image.mimetype
if mime == "image/jpeg":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_JPEG))
elif mime == "image/png":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_PNG))
if covr:
file.tags["covr"] = covr
covr = []
for image in metadata.images_to_be_saved_to_tags:
if image.mimetype == "image/jpeg":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_JPEG))
elif image.mimetype == "image/png":
covr.append(MP4Cover(image.data, MP4Cover.FORMAT_PNG))
if covr:
file.tags["covr"] = covr
file.save()

View File

@@ -31,9 +31,10 @@ except ImportError:
OggOpus = None
with_opus = False
from picard import config, log
from picard.coverartimage import TagCoverArtImage, CoverArtImageError
from picard.file import File
from picard.formats.id3 import image_type_from_id3_num, image_type_as_id3_num
from picard.metadata import Metadata, save_this_image_to_tags
from picard.formats.id3 import types_from_id3, image_type_as_id3_num
from picard.metadata import Metadata
from picard.util import encode_filename, sanitize_date
@@ -96,24 +97,54 @@ class VCommentFile(File):
name = "totaldiscs"
elif name == "metadata_block_picture":
image = mutagen.flac.Picture(base64.standard_b64decode(value))
metadata.make_and_add_image(image.mime, image.data,
comment=image.desc,
imagetype=image_type_from_id3_num(image.type))
try:
coverartimage = TagCoverArtImage(
file=filename,
tag=name,
types=types_from_id3(image.type),
comment=image.desc,
support_types=True,
data=image.data,
)
except CoverArtImageError as e:
log.error('Cannot load image from %r: %s' % (filename, e))
else:
metadata.append_image(coverartimage)
continue
elif name in self.__translate:
name = self.__translate[name]
metadata.add(name, value)
if self._File == mutagen.flac.FLAC:
for image in file.pictures:
metadata.make_and_add_image(image.mime, image.data, comment=image.desc,
imagetype=image_type_from_id3_num(image.type))
try:
coverartimage = TagCoverArtImage(
file=filename,
tag='FLAC/PICTURE',
types=types_from_id3(image.type),
comment=image.desc,
support_types=True,
data=image.data,
)
except CoverArtImageError as e:
log.error('Cannot load image from %r: %s' % (filename, e))
else:
metadata.append_image(coverartimage)
# Read the unofficial COVERART tags, for backward compatibillity only
if not "metadata_block_picture" in file.tags:
try:
for index, data in enumerate(file["COVERART"]):
metadata.make_and_add_image(file["COVERARTMIME"][index],
base64.standard_b64decode(data)
)
for data in file["COVERART"]:
try:
coverartimage = TagCoverArtImage(
file=filename,
tag='COVERART',
data=base64.standard_b64decode(data)
)
except CoverArtImageError as e:
log.error('Cannot load image from %r: %s' % (filename, e))
else:
metadata.append_image(coverartimage)
except KeyError:
pass
self._info(metadata, file)
@@ -122,14 +153,14 @@ class VCommentFile(File):
def _save(self, filename, metadata):
"""Save metadata to the file."""
log.debug("Saving file %r", filename)
is_flac = self._File == mutagen.flac.FLAC
file = self._File(encode_filename(filename))
if file.tags is None:
file.add_tags()
if config.setting["clear_existing_tags"]:
file.tags.clear()
if self._File == mutagen.flac.FLAC and (
config.setting["clear_existing_tags"] or
(config.setting['save_images_to_tags'] and metadata.images)):
if (is_flac and (config.setting["clear_existing_tags"] or
metadata.images_to_be_saved_to_tags)):
file.clear_pictures()
tags = {}
for name, value in metadata.items():
@@ -165,23 +196,21 @@ class VCommentFile(File):
if "totaldiscs" in metadata:
tags.setdefault(u"DISCTOTAL", []).append(metadata["totaldiscs"])
if config.setting['save_images_to_tags']:
for image in metadata.images:
if not save_this_image_to_tags(image):
continue
picture = mutagen.flac.Picture()
picture.data = image.data
picture.mime = image.mimetype
picture.desc = image.description
picture.type = image_type_as_id3_num(image.imagetype)
if self._File == mutagen.flac.FLAC:
file.add_picture(picture)
else:
tags.setdefault(u"METADATA_BLOCK_PICTURE", []).append(
base64.standard_b64encode(picture.write()))
for image in metadata.images_to_be_saved_to_tags:
picture = mutagen.flac.Picture()
picture.data = image.data
picture.mime = image.mimetype
picture.desc = image.comment
picture.type = image_type_as_id3_num(image.maintype)
if self._File == mutagen.flac.FLAC:
file.add_picture(picture)
else:
tags.setdefault(u"METADATA_BLOCK_PICTURE", []).append(
base64.standard_b64encode(picture.write()))
file.tags.update(tags)
kwargs = {}
if self._File == mutagen.flac.FLAC and config.setting["remove_id3_from_flac"]:
if is_flac and config.setting["remove_id3_from_flac"]:
kwargs["deleteid3"] = True
try:
file.save(**kwargs)

View File

@@ -17,147 +17,18 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
import os.path
import shutil
import sys
import tempfile
import traceback
from hashlib import md5
from os import fdopen, unlink
from PyQt4.QtCore import QObject
from picard import config, log
from picard.plugin import ExtensionPoint
from picard.plugin import PluginFunctions, PluginPriority
from picard.similarity import similarity2
from picard.util import (
encode_filename,
mimetype as mime,
replace_win32_incompat,
)
from picard.util.textencoding import (
replace_non_ascii,
unaccent,
linear_combination_of_weights,
)
from picard.mbxml import artist_credit_from_node
MULTI_VALUED_JOINER = '; '
def is_front_image(image):
# CAA has a flag for "front" image, use it in priority
caa_front = image.get('front', None)
if caa_front is None:
# no caa front flag, use type instead
return (image['type'] == 'front')
return caa_front
def save_this_image_to_tags(image):
if not config.setting["save_only_front_images_to_tags"]:
return True
return image.is_front_image
class Image(object):
"""Wrapper around images. Instantiating an object of this class can raise
an IOError or OSError due to the usage of tempfiles underneath.
"""
def __init__(self, data, mimetype="image/jpeg", imagetype="front",
comment="", filename=None, datahash=""):
self.description = comment
(fd, self._tempfile_filename) = tempfile.mkstemp(prefix="picard")
with fdopen(fd, "wb") as imagefile:
imagefile.write(data)
log.debug("Saving image (hash=%s) to %r" % (datahash,
self._tempfile_filename))
self.datalength = len(data)
self.extension = mime.get_extension(mime, ".jpg")
self.filename = filename
self.imagetype = imagetype
self.is_front_image = imagetype == "front"
self.mimetype = mimetype
def _make_image_filename(self, filename, dirname, metadata):
if config.setting["ascii_filenames"]:
if isinstance(filename, unicode):
filename = unaccent(filename)
filename = replace_non_ascii(filename)
if not filename:
filename = "cover"
if not os.path.isabs(filename):
filename = os.path.join(dirname, filename)
# replace incompatible characters
if config.setting["windows_compatibility"] or sys.platform == "win32":
filename = replace_win32_incompat(filename)
# remove null characters
filename = filename.replace("\x00", "")
return encode_filename(filename)
def save(self, dirname, metadata, counters):
"""Saves this image.
:dirname: The name of the directory that contains the audio file
:metadata: A metadata object
:counters: A dictionary mapping filenames to the amount of how many
images with that filename were already saved in `dirname`.
"""
if self.filename is not None:
log.debug("Using the custom file name %s", self.filename)
filename = self.filename
elif config.setting["caa_image_type_as_filename"]:
log.debug("Using image type %s", self.imagetype)
filename = self.imagetype
else:
log.debug("Using default file name %s",
config.setting["cover_image_filename"])
filename = config.setting["cover_image_filename"]
filename = self._make_image_filename(filename, dirname, metadata)
overwrite = config.setting["save_images_overwrite"]
ext = self.extension
image_filename = filename
if counters[filename] > 0:
image_filename = "%s (%d)" % (filename, counters[filename])
counters[filename] = counters[filename] + 1
while os.path.exists(image_filename + ext) and not overwrite:
if os.path.getsize(image_filename + ext) == self.datalength:
log.debug("Identical file size, not saving %r", image_filename)
break
image_filename = "%s (%d)" % (filename, counters[filename])
counters[filename] = counters[filename] + 1
else:
new_filename = image_filename + ext
# Even if overwrite is enabled we don't need to write the same
# image multiple times
if (os.path.exists(new_filename) and
os.path.getsize(new_filename) == self.datalength):
log.debug("Identical file size, not saving %r", image_filename)
return
log.debug("Saving cover images to %r", image_filename)
new_dirname = os.path.dirname(image_filename)
if not os.path.isdir(new_dirname):
os.makedirs(new_dirname)
shutil.copyfile(self._tempfile_filename, new_filename)
@property
def data(self):
"""Reads the data from the temporary file created for this image. May
raise IOErrors or OSErrors.
"""
with open(self._tempfile_filename, "rb") as imagefile:
return imagefile.read()
def _delete(self):
log.debug("Unlinking %s", self._tempfile_filename)
try:
unlink(self._tempfile_filename)
except OSError as e:
log.error(traceback.format_exc())
class Metadata(dict):
"""List of metadata items with dict-like access."""
@@ -177,42 +48,31 @@ class Metadata(dict):
self.images = []
self.length = 0
def make_and_add_image(self, mime, data, filename=None, comment="",
imagetype="front"):
"""Build a new image object from ``data`` and adds it to this Metadata
object. If an image with the same MD5 hash has already been added to
any Metadata object, that file will be reused.
def append_image(self, coverartimage):
self.images.append(coverartimage)
Arguments:
mime -- The mimetype of the image
data -- The image data
filename -- The image filename, without an extension
comment -- image description or comment, default to ''
imagetype -- main type as a string, default to 'front'
"""
m = md5()
m.update(data)
datahash = m.hexdigest()
QObject.tagger.images.lock()
image = QObject.tagger.images[datahash]
if image is None:
image = Image(data, mime, imagetype, comment, filename,
datahash=datahash)
QObject.tagger.images[datahash] = image
QObject.tagger.images.unlock()
self.images.append(image)
@property
def images_to_be_saved_to_tags(self):
if not config.setting["save_images_to_tags"]:
return ()
images = [img for img in self.images if img.can_be_saved_to_tags]
if config.setting["save_only_front_images_to_tags"]:
# FIXME : rename option at some point
# Embed only ONE front image
for img in images:
if img.is_front_image():
return [img]
return images
def remove_image(self, index):
self.images.pop(index)
def compare(self, other):
parts = []
total = 0
if self.length and other.length:
score = 1.0 - min(abs(self.length - other.length), 30000) / 30000.0
parts.append((score, 8))
total += 8
for name, weight in self.__weights:
a = self[name]
@@ -229,27 +89,28 @@ class Metadata(dict):
else:
score = similarity2(a, b)
parts.append((score, weight))
total += weight
return reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0)
def compare_to_release(self, release, weights, return_parts=False):
return linear_combination_of_weights(parts)
def compare_to_release(self, release, weights):
"""
Compare metadata to a MusicBrainz release. Produces a probability as a
linear combination of weights that the metadata matches a certain album.
"""
total = 0.0
parts = self.compare_to_release_parts(release, weights)
return (linear_combination_of_weights(parts), release)
def compare_to_release_parts(self, release, weights):
parts = []
if "album" in self:
b = release.title[0].text
parts.append((similarity2(self["album"], b), weights["album"]))
total += weights["album"]
if "albumartist" in self and "albumartist" in weights:
a = self["albumartist"]
b = artist_credit_from_node(release.artist_credit[0])[0]
parts.append((similarity2(a, b), weights["albumartist"]))
total += weights["albumartist"]
if "totaltracks" in self:
a = int(self["totaltracks"])
@@ -259,7 +120,6 @@ class Metadata(dict):
b = int(release.medium_list[0].track_count[0].text)
score = 0.0 if a > b else 0.3 if a < b else 1.0
parts.append((score, weights["totaltracks"]))
total += weights["totaltracks"]
preferred_countries = config.setting["preferred_release_countries"]
preferred_formats = config.setting["preferred_release_formats"]
@@ -299,50 +159,44 @@ class Metadata(dict):
else:
score = 0.0
parts.append((score, weights["releasetype"]))
total += weights["releasetype"]
rg = QObject.tagger.get_release_group_by_id(release.release_group[0].id)
if release.id in rg.loaded_albums:
parts.append((1.0, 6))
return (total, parts) if return_parts else \
(reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0), release)
return parts
def compare_to_track(self, track, weights):
total = 0.0
parts = []
if 'title' in self:
a = self['title']
b = track.title[0].text
parts.append((similarity2(a, b), weights["title"]))
total += weights["title"]
if 'artist' in self:
a = self['artist']
b = artist_credit_from_node(track.artist_credit[0])[0]
parts.append((similarity2(a, b), weights["artist"]))
total += weights["artist"]
a = self.length
if a > 0 and 'length' in track.children:
b = int(track.length[0].text)
score = 1.0 - min(abs(a - b), 30000) / 30000.0
parts.append((score, weights["length"]))
total += weights["length"]
releases = []
if "release_list" in track.children and "release" in track.release_list[0].children:
releases = track.release_list[0].release
if not releases:
sim = reduce(lambda x, y: x + y[0] * y[1] / total, parts, 0.0)
sim = linear_combination_of_weights(parts)
return (sim, None, None, track)
result = (-1,)
for release in releases:
t, p = self.compare_to_release(release, weights, return_parts=True)
sim = reduce(lambda x, y: x + y[0] * y[1] / (total + t), parts + p, 0.0)
release_parts = self.compare_to_release_parts(release, weights)
sim = linear_combination_of_weights(parts + release_parts)
if sim > result[0]:
rg = release.release_group[0] if "release_group" in release.children else None
result = (sim, rg, release, track)
@@ -439,25 +293,23 @@ class Metadata(dict):
self.apply_func(lambda s: s.strip())
_album_metadata_processors = ExtensionPoint()
_track_metadata_processors = ExtensionPoint()
_album_metadata_processors = PluginFunctions()
_track_metadata_processors = PluginFunctions()
def register_album_metadata_processor(function):
def register_album_metadata_processor(function, priority=PluginPriority.NORMAL):
"""Registers new album-level metadata processor."""
_album_metadata_processors.register(function.__module__, function)
_album_metadata_processors.register(function.__module__, function, priority)
def register_track_metadata_processor(function):
def register_track_metadata_processor(function, priority=PluginPriority.NORMAL):
"""Registers new track-level metadata processor."""
_track_metadata_processors.register(function.__module__, function)
_track_metadata_processors.register(function.__module__, function, priority)
def run_album_metadata_processors(tagger, metadata, release):
for processor in _album_metadata_processors:
processor(tagger, metadata, release)
_album_metadata_processors.run(tagger, metadata, release)
def run_track_metadata_processors(tagger, metadata, release, track):
for processor in _track_metadata_processors:
processor(tagger, metadata, track, release)
_track_metadata_processors.run(tagger, metadata, track, release)

View File

@@ -18,12 +18,17 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from PyQt4 import QtCore
from collections import defaultdict
import imp
import os.path
import shutil
import picard.plugins
import traceback
from picard import config, log
from picard import (config,
log,
version_from_string,
version_to_string,
VersionError)
from picard.const import USER_PLUGIN_DIR
from picard.util import os_path_samefile
@@ -31,6 +36,8 @@ from picard.util import os_path_samefile
_suffixes = [s[0] for s in imp.get_suffixes()]
_package_entries = ["__init__.py", "__init__.pyc", "__init__.pyo"]
_extension_points = []
_PLUGIN_MODULE_PREFIX = "picard.plugins."
_PLUGIN_MODULE_PREFIX_LEN = len(_PLUGIN_MODULE_PREFIX)
def _plugin_name_from_path(path):
@@ -61,8 +68,8 @@ class ExtensionPoint(object):
_extension_points.append(self)
def register(self, module, item):
if module.startswith("picard.plugins."):
module = module[15:]
if module.startswith(_PLUGIN_MODULE_PREFIX):
module = module[_PLUGIN_MODULE_PREFIX_LEN:]
else:
module = None
self.__items.append((module, item))
@@ -79,10 +86,11 @@ class ExtensionPoint(object):
class PluginWrapper(object):
def __init__(self, module, plugindir):
def __init__(self, module, plugindir, file=None):
self.module = module
self.compatible = False
self.dir = plugindir
self._file = file
def __get_name(self):
try:
@@ -93,8 +101,8 @@ class PluginWrapper(object):
def __get_module_name(self):
name = self.module.__name__
if name.startswith("picard.plugins"):
name = name[15:]
if name.startswith(_PLUGIN_MODULE_PREFIX):
name = name[_PLUGIN_MODULE_PREFIX_LEN:]
return name
module_name = property(__get_module_name)
@@ -127,7 +135,10 @@ class PluginWrapper(object):
api_versions = property(__get_api_versions)
def __get_file(self):
return self.module.__file__
if not self._file:
return self.module.__file__
else:
return self._file
file = property(__get_file)
@@ -138,23 +149,25 @@ class PluginManager(QtCore.QObject):
def __init__(self):
QtCore.QObject.__init__(self)
self.plugins = []
self._api_versions = set([version_from_string(v) for v in picard.api_versions])
def load_plugindir(self, plugindir):
plugindir = os.path.normpath(plugindir)
if not os.path.isdir(plugindir):
log.debug("Plugin directory %r doesn't exist", plugindir)
log.warning("Plugin directory %r doesn't exist", plugindir)
return
log.debug("Looking for plugins in directory: %r", plugindir)
names = set()
for path in [os.path.join(plugindir, file) for file in os.listdir(plugindir)]:
name = _plugin_name_from_path(path)
if name:
names.add(name)
for name in names:
log.debug("Looking for plugins in directory %r, %d names found",
plugindir,
len(names))
for name in sorted(names):
self.load_plugin(name, plugindir)
def load_plugin(self, name, plugindir):
log.debug("Loading plugin %r", name)
try:
info = imp.find_module(name, [plugindir])
except ImportError:
@@ -166,29 +179,40 @@ class PluginManager(QtCore.QObject):
index = None
for i, p in enumerate(self.plugins):
if name == p.module_name:
log.warning("Module %r conflict: unregistering previously" \
" loaded %r version %s from %r",
p.module_name,
p.name,
p.version,
p.file)
_unregister_module_extensions(name)
index = i
break
plugin_module = imp.load_module("picard.plugins." + name, *info)
plugin = PluginWrapper(plugin_module, plugindir)
for version in list(plugin.api_versions):
for api_version in picard.api_versions:
if api_version.startswith(version):
plugin.compatible = True
setattr(picard.plugins, name, plugin_module)
if index:
self.plugins[index] = plugin
else:
self.plugins.append(plugin)
break
plugin_module = imp.load_module(_PLUGIN_MODULE_PREFIX + name, *info)
plugin = PluginWrapper(plugin_module, plugindir, file=info[1])
versions = [version_from_string(v) for v in
list(plugin.api_versions)]
compatible_versions = list(set(versions) & self._api_versions)
if compatible_versions:
log.debug("Loading plugin %r version %s, compatible with API: %s",
plugin.name,
plugin.version,
", ".join([version_to_string(v, short=True) for v in
sorted(compatible_versions)]))
plugin.compatible = True
setattr(picard.plugins, name, plugin_module)
if index:
self.plugins[index] = plugin
else:
continue
break
self.plugins.append(plugin)
else:
log.info("Plugin '%s' from '%s' is not compatible"
" with this version of Picard." % (plugin.name, plugin.file))
log.warning("Plugin '%s' from '%s' is not compatible"
" with this version of Picard."
% (plugin.name, plugin.file))
except VersionError as e:
log.error("Plugin %r has an invalid API version string : %s", name, e)
except:
log.error(traceback.format_exc())
log.error("Plugin %r : %s", name, traceback.format_exc())
if info[0] is not None:
info[0].close()
return plugin
@@ -209,7 +233,41 @@ class PluginManager(QtCore.QObject):
if plugin is not None:
self.plugin_installed.emit(plugin, False)
except (OSError, IOError):
log.debug("Unable to copy %s to plugin folder %s" % (path, USER_PLUGIN_DIR))
log.warning("Unable to copy %s to plugin folder %s" % (path, USER_PLUGIN_DIR))
def enabled(self, name):
return True
class PluginPriority:
"""
Define few priority values for plugin functions execution order
Those with higher values are executed first
Default priority is PluginPriority.NORMAL
"""
HIGH = 100
NORMAL = 0
LOW = -100
class PluginFunctions:
"""
Store ExtensionPoint in a defaultdict with priority as key
run() method will execute entries with higher priority value first
"""
def __init__(self):
self.functions = defaultdict(ExtensionPoint)
def register(self, module, item, priority=PluginPriority.NORMAL):
self.functions[priority].register(module, item)
def run(self, *args, **kwargs):
"Execute registered functions with passed parameters honouring priority"
for priority, functions in sorted(self.functions.iteritems(),
key=lambda (k, v): k,
reverse=True):
for function in functions:
function(*args, **kwargs)

View File

@@ -78,7 +78,6 @@ from picard.util import (
check_io_encoding,
uniqify,
is_hidden_path,
LockableDefaultDict
)
from picard.webservice import XmlWebService
@@ -195,10 +194,17 @@ class Tagger(QtGui.QApplication):
self.albums = {}
self.release_groups = {}
self.mbid_redirects = {}
self.images = LockableDefaultDict(lambda: None)
self.unmatched_files = UnmatchedFiles()
self.nats = None
self.window = MainWindow()
self.exit_cleanup = []
def register_cleanup(self, func):
self.exit_cleanup.append(func)
def run_cleanup(self):
for f in self.exit_cleanup:
f()
def debug(self, debug):
if self._debug == debug:
@@ -248,12 +254,13 @@ class Tagger(QtGui.QApplication):
def exit(self):
log.debug("exit")
map(lambda i: i._delete(), self.images.itervalues())
self.stopping = True
self._acoustid.done()
self.thread_pool.waitForDone()
self.browser_integration.stop()
self.xmlws.stop()
for f in self.exit_cleanup:
f()
def _run_init(self):
if self._args:
@@ -321,7 +328,6 @@ class Tagger(QtGui.QApplication):
def add_files(self, filenames, target=None):
"""Add files to the tagger."""
log.debug("Adding files %r", filenames)
ignoreregex = None
pattern = config.setting['ignore_regex']
if pattern:
@@ -342,6 +348,7 @@ class Tagger(QtGui.QApplication):
self.files[filename] = file
new_files.append(file)
if new_files:
log.debug("Adding files %r", new_files)
new_files.sort(key=lambda x: x.filename)
if target is None or target is self.unmatched_files:
self.unmatched_files.add_files(new_files)
@@ -360,7 +367,21 @@ class Tagger(QtGui.QApplication):
else:
number_of_files = len(files)
if number_of_files:
self.window.set_statusbar_message(N_("Adding %d files from '%s' ..."), number_of_files, root)
mparms = {
'count': number_of_files,
'directory': root,
}
log.debug("Adding %(count)d files from '%(directory)s'" %
mparms)
self.window.set_statusbar_message(
ungettext(
"Adding %(count)d file from '%(directory)s' ...",
"Adding %(count)d files from '%(directory)s' ...",
number_of_files),
mparms,
translate=None,
echo=None
)
return (os.path.join(root, f) for f in files)
def process(result=None, error=None):
@@ -495,10 +516,13 @@ class Tagger(QtGui.QApplication):
files.extend(obj.linked_files)
elif isinstance(obj, Album):
self.window.set_statusbar_message(
N_("Removing album %s: %s - %s"),
obj.id,
obj.metadata['albumartist'],
obj.metadata['album'])
N_("Removing album %(id)s: %(artist)s - %(album)s"),
{
'id': obj.id,
'artist': obj.metadata['albumartist'],
'album': obj.metadata['album']
}
)
self.remove_album(obj)
elif isinstance(obj, Cluster):
self.remove_cluster(obj)
@@ -596,7 +620,8 @@ class Tagger(QtGui.QApplication):
def refresh(self, objs):
for obj in objs:
obj.load(priority=True, refresh=True)
if obj.can_refresh():
obj.load(priority=True, refresh=True)
@classmethod
def instance(cls):

View File

@@ -18,9 +18,11 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import os
from functools import partial
from PyQt4 import QtCore, QtGui, QtNetwork
from picard import config, log
from picard.album import Album
from picard.coverartimage import CoverArtImage, CoverArtImageError
from picard.track import Track
from picard.file import File
from picard.util import webbrowser2, encode_filename
@@ -122,7 +124,7 @@ class CoverArtBox(QtGui.QGroupBox):
data = None
if metadata and metadata.images:
for image in metadata.images:
if image.is_front_image:
if image.is_front_image():
data = image
break
else:
@@ -158,7 +160,8 @@ class CoverArtBox(QtGui.QGroupBox):
if url.hasQuery():
path += '?' + url.encodedQuery()
self.tagger.xmlws.get(url.encodedHost(), url.port(80), path,
self.on_remote_image_fetched, xml=False,
partial(self.on_remote_image_fetched, url),
xml=False,
priority=True, important=True)
elif url.scheme() == 'file':
path = encode_filename(unicode(url.toLocalFile()))
@@ -167,12 +170,12 @@ class CoverArtBox(QtGui.QGroupBox):
mime = 'image/png' if path.lower().endswith('.png') else 'image/jpeg'
data = f.read()
f.close()
self.load_remote_image(mime, data)
self.load_remote_image(url, mime, data)
def on_remote_image_fetched(self, data, reply, error):
def on_remote_image_fetched(self, url, data, reply, error):
mime = reply.header(QtNetwork.QNetworkRequest.ContentTypeHeader)
if mime in ('image/jpeg', 'image/png'):
self.load_remote_image(mime, data)
self.load_remote_image(url, mime, data)
elif reply.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"))
@@ -180,24 +183,30 @@ class CoverArtBox(QtGui.QGroupBox):
else:
log.warning("Can't load image with MIME-Type %s", mime)
def load_remote_image(self, mime, data):
pixmap = QtGui.QPixmap()
if not pixmap.loadFromData(data):
log.warning("Can't load image")
def load_remote_image(self, url, mime, data):
try:
coverartimage = CoverArtImage(
url=url.toString(),
data=data
)
except CoverArtImageError as e:
log.warning("Can't load image: %s" % unicode(e))
return
pixmap = QtGui.QPixmap()
pixmap.loadFromData(data)
self.__set_data([mime, data], pixmap=pixmap)
if isinstance(self.item, Album):
album = self.item
album.metadata.make_and_add_image(mime, data)
album.metadata.append_image(coverartimage)
for track in album.tracks:
track.metadata.make_and_add_image(mime, data)
track.metadata.append_image(coverartimage)
for file in album.iterfiles():
file.metadata.make_and_add_image(mime, data)
file.metadata.append_image(coverartimage)
elif isinstance(self.item, Track):
track = self.item
track.metadata.make_and_add_image(mime, data)
track.metadata.append_image(coverartimage)
for file in track.iterfiles():
file.metadata.make_and_add_image(mime, data)
file.metadata.append_image(coverartimage)
elif isinstance(self.item, File):
file = self.item
file.metadata.make_and_add_image(mime, data)
file.metadata.append_image(coverartimage)

View File

@@ -19,7 +19,11 @@
import os.path
import cgi
import traceback
from PyQt4 import QtGui, QtCore
from picard import log
from picard.coverartarchive import translate_caa_type
from picard.coverartimage import CoverArtImageIOError
from picard.util import format_time, encode_filename, bytes2human
from picard.ui import PicardDialog
from picard.ui.ui_infodialog import Ui_InfoDialog
@@ -49,22 +53,37 @@ class InfoDialog(PicardDialog):
return
for image in images:
data = None
try:
data = image.data
except (OSError, IOError) as e:
if image.thumbnail:
try:
data = image.thumbnail.data
except CoverArtImageIOError as e:
log.warning(unicode(e))
pass
else:
data = image.data
except CoverArtImageIOError:
log.error(traceback.format_exc())
continue
size = len(data)
item = QtGui.QListWidgetItem()
pixmap = QtGui.QPixmap()
pixmap.loadFromData(data)
icon = QtGui.QIcon(pixmap)
item.setIcon(icon)
s = "%s (%s)\n%d x %d" % (bytes2human.decimal(size),
bytes2human.binary(size),
pixmap.width(),
pixmap.height())
item.setText(s)
if data is not None:
pixmap = QtGui.QPixmap()
pixmap.loadFromData(data)
icon = QtGui.QIcon(pixmap)
item.setIcon(icon)
infos = []
infos.append(image.types_as_string())
if image.comment:
infos.append(image.comment)
infos.append(u"%s (%s)" %
(bytes2human.decimal(image.datalength),
bytes2human.binary(image.datalength)))
if image.width and image.height:
infos.append(u"%d x %d" % (image.width, image.height))
infos.append(image.mimetype)
item.setText(u"\n".join(infos))
item.setToolTip(image.source)
self.ui.artwork_list.addItem(item)
def tab_hide(self, widget):
@@ -109,8 +128,8 @@ class FileInfoDialog(InfoDialog):
ch = str(ch)
info.append((_('Channels:'), ch))
text = '<br/>'.join(map(lambda i: '<b>%s</b><br/>%s' %
(QtCore.Qt.escape(i[0]),
QtCore.Qt.escape(i[1])), info))
(cgi.escape(i[0]),
cgi.escape(i[1])), info))
self.ui.info.setText(text)

View File

@@ -245,19 +245,52 @@ class MainWindow(QtGui.QMainWindow):
self.listening_label.setVisible(False)
def set_statusbar_message(self, message, *args, **kwargs):
"""Set the status bar message."""
"""Set the status bar message.
*args are passed to % operator, if args[0] is a mapping it is used for
named place holders values
>>> w.set_statusbar_message("File %(filename)s", {'filename': 'x.txt'})
Keyword arguments:
`echo` parameter defaults to `log.debug`, called before message is
translated, it can be disabled passing None or replaced by ie.
`log.error`. If None, skipped.
`translate` is a method called on message before it is sent to history
log and status bar, it defaults to `_()`. If None, skipped.
`timeout` defines duration of the display in milliseconds
`history` is a method called with translated message as argument, it
defaults to `log.history_info`. If None, skipped.
Empty messages are never passed to echo and history functions but they
are sent to status bar (ie. to clear it).
"""
def isdict(obj):
return hasattr(obj, 'keys') and hasattr(obj, '__getitem__')
echo = kwargs.get('echo', log.debug)
# _ is defined using __builtin__.__dict__, so setting it as default named argument
# value doesn't work as expected
translate = kwargs.get('translate', _)
timeout = kwargs.get('timeout', 0)
history = kwargs.get('history', log.history_info)
if len(args) == 1 and isdict(args[0]):
# named place holders
mparms = args[0]
else:
# simple place holders, ensure compatibility
mparms = args
if message:
try:
log.debug(repr(message.replace('%%s', '%%r')), *args)
except:
pass
if args:
message = _(message) % args
else:
message = _(message)
log.history_info(message)
thread.to_main(self.statusBar().showMessage, message,
kwargs.get("timeout", 0))
if echo:
echo(message % mparms)
if translate:
message = translate(message)
message = message % mparms
if history:
history(message)
thread.to_main(self.statusBar().showMessage, message, timeout)
def _on_submit(self):
if self.tagger.use_acoustid:
@@ -658,11 +691,17 @@ class MainWindow(QtGui.QMainWindow):
if len(dir_list) == 1:
config.persist["current_directory"] = dir_list[0]
self.set_statusbar_message(N_("Adding directory: '%s' ..."), dir_list[0])
self.set_statusbar_message(
N_("Adding directory: '%(directory)s' ..."),
{'directory': dir_list[0]}
)
elif len(dir_list) > 1:
(parent, dir) = os.path.split(str(dir_list[0]))
config.persist["current_directory"] = parent
self.set_statusbar_message(N_("Adding multiple directories from: '%s' ..."), parent)
self.set_statusbar_message(
N_("Adding multiple directories from '%(directory)s' ..."),
{'directory': parent}
)
for directory in dir_list:
directory = unicode(directory)
@@ -799,30 +838,49 @@ class MainWindow(QtGui.QMainWindow):
self.update_actions()
metadata = None
statusbar = u""
obj = None
if len(objects) == 1:
obj = list(objects)[0]
if isinstance(obj, File):
metadata = obj.metadata
statusbar = obj.filename
if obj.state == obj.ERROR:
statusbar += _(" (Error: %s)") % obj.error
msg = N_("%(filename)s (error: %(error)s)")
mparms = {
'filename': obj.filename,
'error': obj.error
}
else:
msg = N_("%(filename)s")
mparms = {
'filename': obj.filename,
}
self.set_statusbar_message(msg, mparms, echo=None, history=None)
elif isinstance(obj, Track):
metadata = obj.metadata
if obj.num_linked_files == 1:
file = obj.linked_files[0]
statusbar = "%s (%d%%)" % (file.filename, file.similarity * 100)
if file.state == File.ERROR:
statusbar += _(" (Error: %s)") % file.error
msg = N_("%(filename)s (%(similarity)d%%) (error: %(error)s)")
mparms = {
'filename': file.filename,
'similarity': file.similarity * 100,
'error': file.error
}
else:
msg = N_("%(filename)s (%(similarity)d%%)")
mparms = {
'filename': file.filename,
'similarity': file.similarity * 100,
}
self.set_statusbar_message(msg, mparms, echo=None,
history=None)
elif obj.can_edit_tags():
metadata = obj.metadata
self.metadata_box.selection_dirty = True
self.metadata_box.update()
self.cover_art_box.set_metadata(metadata, obj)
self.set_statusbar_message(statusbar)
self.selection_updated.emit(objects)
def show_cover_art(self):

View File

@@ -21,8 +21,7 @@ from PyQt4 import QtCore, QtGui
from picard import config
from picard.ui.options import OptionsPage, register_options_page
from picard.ui.ui_options_cover import Ui_CoverOptionsPage
from picard.coverartarchive import CAA_TYPES
from picard.i18n import ugettext_attr
from picard.coverartarchive import CAA_TYPES, translate_caa_type
class CAATypesSelector(object):
@@ -40,10 +39,7 @@ class CAATypesSelector(object):
def _add_item(self, typ, enabled=False):
item = QtGui.QListWidgetItem(self.widget)
if typ['name'] == 'unknown':
title = _(typ['title'])
else:
title = ugettext_attr(typ['title'], u"cover_art_type")
title = translate_caa_type(typ['name'])
item.setText(title)
tooltip = u"CAA: %(name)s" % typ
item.setToolTip(tooltip)

View File

@@ -40,14 +40,19 @@ class TagsFromFileNamesDialog(PicardDialog):
self.ui = Ui_TagsFromFileNamesDialog()
self.ui.setupUi(self)
items = [
"%artist%/%album%/%title%",
"%artist%/%album%/%tracknumber% %title%",
"%artist%/%album%/%tracknumber% - %title%",
"%artist%/%album - %tracknumber% - %title%",
"%artist%/%album% - %tracknumber% - %title%",
"%artist% - %album%/%title%",
"%artist% - %album%/%tracknumber% %title%",
"%artist% - %album%/%tracknumber% - %title%",
]
format = config.persist["tags_from_filenames_format"]
if format and format not in items:
items.insert(0, format)
self.ui.format.addItems(items)
self.ui.format.setCurrentIndex(items.index(format))
self.ui.buttonbox.addButton(StandardButton(StandardButton.OK), QtGui.QDialogButtonBox.AcceptRole)
self.ui.buttonbox.addButton(StandardButton(StandardButton.CANCEL), QtGui.QDialogButtonBox.RejectRole)
self.ui.buttonbox.accepted.connect(self.accept)
@@ -62,6 +67,7 @@ class TagsFromFileNamesDialog(PicardDialog):
item.setText(0, os.path.basename(file.filename))
self.items.append(item)
self._tag_re = re.compile("(%\w+%)")
self.numeric_tags = ('tracknumber', 'totaltracks', 'discnumber', 'totaldiscs')
def parse_format(self):
format = unicode(self.ui.format.currentText())
@@ -71,7 +77,7 @@ class TagsFromFileNamesDialog(PicardDialog):
if part.startswith('%') and part.endswith('%'):
name = part[1:-1]
columns.append(name)
if name in ('tracknumber', 'totaltracks', 'discnumber', 'totaldiscs'):
if name in self.numeric_tags:
format_re.append('(?P<' + name + '>\d+)')
elif name in ('date'):
format_re.append('(?P<' + name + '>\d+(?:-\d+(?:-\d+)?)?)')
@@ -79,16 +85,18 @@ class TagsFromFileNamesDialog(PicardDialog):
format_re.append('(?P<' + name + '>[^/]*?)')
else:
format_re.append(re.escape(part))
format_re.append('\\.(\\w+)$')
format_re.append(r'\.(\w+)$')
format_re = re.compile("".join(format_re))
return format_re, columns
def match_file(self, file, format):
match = format.search('/'.join(os.path.split(file.filename)))
match = format.search(file.filename.replace('\\','/'))
if match:
result = {}
for name, value in match.groupdict().iteritems():
value = value.strip()
if name in self.numeric_tags:
value = value.lstrip("0")
if self.ui.replace_underscores.isChecked():
value = value.replace('_', ' ')
result[name] = value

View File

@@ -19,6 +19,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import os
import ntpath
import re
import sys
import unicodedata
@@ -30,19 +31,6 @@ from functools import partial
from collections import defaultdict
class LockableDefaultDict(defaultdict):
def __init__(self, default):
defaultdict.__init__(self, default)
self.__lock = QtCore.QReadWriteLock()
def lock(self):
self.__lock.lockForWrite()
def unlock(self):
self.__lock.unlock()
class LockableObject(QtCore.QObject):
"""Read/write lockable object."""
@@ -142,7 +130,9 @@ _re_win32_incompat = re.compile(r'["*:<>?|]', re.UNICODE)
def replace_win32_incompat(string, repl=u"_"):
"""Replace win32 filename incompatible characters from ``string`` by
``repl``."""
return _re_win32_incompat.sub(repl, string)
# Don't replace : with _ for windows drive
drive, rest = ntpath.splitdrive(string)
return drive + _re_win32_incompat.sub(repl, rest)
_re_non_alphanum = re.compile(r'\W+', re.UNICODE)
@@ -297,15 +287,16 @@ def tracknum_from_filename(base_filename):
n = int(match.group(1))
if n > 0:
return n
# find all numbers between 1 and 99
# 4-digit or more numbers are very unlikely to be a track number
# smaller number is prefered in any case
# find all numbers between 1 and 99
# 4-digit or more numbers are very unlikely to be a track number
# smaller number is preferred in any case
numbers = sorted([int(n) for n in re.findall(r'\d+', filename) if
int(n) <= 99 and int(n) > 0])
if numbers:
return numbers[0]
return -1
# Provide os.path.samefile equivalent which is missing in Python under Windows
if sys.platform == 'win32':
def os_path_samefile(p1, p2):
@@ -320,3 +311,47 @@ def is_hidden_path(path):
"""Returns true if at least one element of the path starts with a dot"""
path = os.path.normpath(path) # we need to ignore /./ and /a/../ cases
return any(s.startswith('.') for s in path.split(os.sep))
def linear_combination_of_weights(parts):
"""Produces a probability as a linear combination of weights
Parts should be a list of tuples in the form:
[(v0, w0), (v1, w1), ..., (vn, wn)]
where vn is a value between 0.0 and 1.0
and wn corresponding weight as a positive number
"""
total = 0.0
sum_of_products = 0.0
for value, weight in parts:
if value < 0.0:
raise ValueError, "Value must be greater than or equal to 0.0"
if value > 1.0:
raise ValueError, "Value must be lesser than or equal to 1.0"
if weight < 0:
raise ValueError, "Weight must be greater than or equal to 0.0"
total += weight
sum_of_products += value * weight
return sum_of_products / total
def album_artist_from_path(filename, album, artist):
"""If album is not set, try to extract album and artist from path
"""
if not album:
dirs = os.path.dirname(filename).replace('\\','/').lstrip('/').split('/')
if len(dirs) == 0:
return album, artist
# Strip disc subdirectory from list
if len(dirs) > 0:
if re.search(r'(^|\s)(CD|DVD|Disc)\s*\d+(\s|$)', dirs[-1], re.I):
del dirs[-1]
if len(dirs) > 0:
# For clustering assume %artist%/%album%/file or %artist% - %album%/file
album = dirs[-1]
if ' - ' in album:
new_artist, album = album.split(' - ', 1)
if not artist:
artist = new_artist
elif not artist and len(dirs) >= 2:
artist = dirs[-2]
return album, artist

122
picard/util/imageinfo.py Normal file
View File

@@ -0,0 +1,122 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2014 Laurent Monin
#
# 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.
import StringIO
import struct
class IdentificationError(Exception):
pass
class NotEnoughData(IdentificationError):
pass
class UnrecognizedFormat(IdentificationError):
pass
class UnexpectedError(IdentificationError):
pass
def identify(data):
"""Parse data for jpg, gif, png metadata
If successfully recognized, it returns a tuple with:
- width
- height
- mimetype
- extension
- data length
Exceptions:
- `NotEnoughData` if data has less than 16 bytes.
- `UnrecognizedFormat` if data isn't recognized as a known format.
- `UnexpectedError` if unhandled cases (shouldn't happen).
- `IdentificationError` is parent class for all preceding exceptions.
"""
datalen = len(data)
if datalen < 16:
raise NotEnoughData('Not enough data')
w = -1
h = -1
mime = ''
extension = ''
# http://en.wikipedia.org/wiki/Graphics_Interchange_Format
if data[:6] in ('GIF87a', 'GIF89a'):
w, h = struct.unpack('<HH', data[6:10])
mime = 'image/gif'
extension = '.gif'
# http://en.wikipedia.org/wiki/Portable_Network_Graphics
# http://www.w3.org/TR/PNG/#11IHDR
elif data[:8] == '\x89PNG\x0D\x0A\x1A\x0A' and data[12:16] == 'IHDR':
w, h = struct.unpack('>LL', data[16:24])
mime = 'image/png'
extension = '.png'
# http://en.wikipedia.org/wiki/JPEG
elif data[:2] == '\xFF\xD8': # Start Of Image (SOI) marker
jpeg = StringIO.StringIO(data)
# skip SOI
jpeg.read(2)
b = jpeg.read(1)
try:
while (b and ord(b) != 0xDA): # Start Of Scan (SOS)
while (ord(b) != 0xFF):
b = jpeg.read(1)
while (ord(b) == 0xFF):
b = jpeg.read(1)
if ord(b) in (0xC0, 0xC1, 0xC2, 0xC5, 0xC6, 0xC7,
0xC9, 0xCA, 0xCB, 0xCD, 0xCE, 0xCF):
jpeg.read(2) # parameter length (2 bytes)
jpeg.read(1) # data precision (1 byte)
h, w = struct.unpack('>HH', jpeg.read(4))
mime = 'image/jpeg'
extension = '.jpg'
break
else:
# read 2 bytes as integer
length = int(struct.unpack('>H', jpeg.read(2))[0])
# skip data
jpeg.read(length - 2)
b = jpeg.read(1)
except struct.error:
pass
except ValueError:
pass
# PDF
elif data[:4] == '%PDF':
h, w = 0, 0
mime = 'application/pdf'
extension = '.pdf'
else:
raise UnrecognizedFormat('Unrecognized image data')
# this shouldn't happen
if w == -1 or h == -1 or mime == '' or extension == '':
raise UnexpectedError("Unexpected error: w=%d h=%d mime=%s extension=%s"
% (w, h, mime, extension))
return (int(w), int(h), mime, extension, datalen)

View File

@@ -1,56 +0,0 @@
# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
# Copyright (C) 2009 Philipp Wolfer
#
# 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.
import os
MIME_TYPE_EXTENSION_MAP = {
'image/jpeg': '.jpg',
'image/png': '.png',
'image/gif': '.gif',
'image/tiff': '.tiff',
}
EXTENSION_MIME_TYPE_MAP = dict([(b, a) for a, b in MIME_TYPE_EXTENSION_MAP.items()])
def get_from_data(data, filename=None, default=None):
"""Tries to determine the mime type from the given data."""
if data.startswith('\xff\xd8\xff'):
return 'image/jpeg'
elif data.startswith('\x89PNG\x0d\x0a\x1a\x0a'):
return 'image/png'
elif data.startswith('GIF87a') or data.startswith('GIF89a'):
return 'image/gif'
elif data.startswith('MM\x00*') or data.startswith('II*\x00'):
return 'image/tiff'
elif filename:
return get_from_filename(filename, default)
else:
return default
def get_from_filename(filename, default=None):
"""Tries to determine the mime type from the given filename."""
name, ext = os.path.splitext(os.path.basename(filename))
return EXTENSION_MIME_TYPE_MAP.get(ext, default)
def get_extension(mimetype, default=None):
"""Returns the file extension for a given mime type."""
return MIME_TYPE_EXTENSION_MAP.get(mimetype, default)

View File

@@ -28,6 +28,7 @@ import re
import time
import os.path
import platform
import math
from collections import deque, defaultdict
from functools import partial
from PyQt4 import QtCore, QtNetwork
@@ -336,7 +337,7 @@ class XmlWebService(QtCore.QObject):
d = request_delay
queue.popleft()()
else:
d = request_delay - last_ms
d = int(math.ceil(request_delay - last_ms))
log.debug("Waiting %d ms before starting another request to %s", d, key)
if d < delay:
delay = d

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Greek (http://www.transifex.com/projects/p/musicbrainz/language/el/)\n"
"MIME-Version: 1.0\n"
@@ -67,11 +67,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Δίσκος"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -112,6 +127,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Βιβλίο ήχου"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -142,6 +162,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -367,6 +392,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -497,6 +527,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -632,6 +667,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -702,6 +742,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -872,11 +917,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -947,6 +1022,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1227,6 +1307,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1322,6 +1407,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1522,6 +1612,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Άλλο"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1542,6 +1637,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1652,6 +1752,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1662,6 +1767,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Παραγωγή επανακυκλοφορίας"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1732,11 +1847,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1769,7 +1894,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Συμβουλή αναζήτησης"
@@ -1779,6 +1905,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1829,6 +1960,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Κύκλος τραγουδιών"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1859,6 +1997,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Αυτοκόλλητο"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2114,6 +2257,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Κύλινδρος κεριού"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: English (Canada) (http://www.transifex.com/projects/p/musicbrainz/language/en_CA/)\n"
"MIME-Version: 1.0\n"
@@ -65,11 +65,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -110,6 +125,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Audiobook"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -140,6 +160,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -365,6 +390,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "Cassette Case"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -495,6 +525,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -630,6 +665,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -700,6 +740,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -870,11 +915,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -945,6 +1020,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1225,6 +1305,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1320,6 +1405,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr "Municipality"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1520,6 +1610,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Other"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1540,6 +1635,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1650,6 +1750,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1660,6 +1765,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Reissue Production"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1730,11 +1845,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr "SHM-CD"
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1767,7 +1892,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Search hint"
@@ -1777,6 +1903,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1827,6 +1958,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Song-cycle"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1857,6 +1995,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Sticker"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2112,6 +2255,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Wax Cylinder"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/musicbrainz/language/en_GB/)\n"
"MIME-Version: 1.0\n"
@@ -63,11 +63,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -108,6 +123,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Audiobook"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -138,6 +158,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -363,6 +388,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -493,6 +523,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -628,6 +663,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -698,6 +738,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -868,11 +913,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -943,6 +1018,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1223,6 +1303,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1318,6 +1403,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1518,6 +1608,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Other"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1538,6 +1633,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1648,6 +1748,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1658,6 +1763,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Reissue Production"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1728,11 +1843,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1765,7 +1890,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Search hint"
@@ -1775,6 +1901,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1825,6 +1956,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Song-cycle"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1855,6 +1993,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Sticker"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2110,6 +2253,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Wax Cylinder"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Esperanto (http://www.transifex.com/projects/p/musicbrainz/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -64,11 +64,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Albumo"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -109,6 +124,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Aŭdlibro"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -139,6 +159,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -364,6 +389,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -494,6 +524,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -629,6 +664,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -699,6 +739,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -869,11 +914,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -944,6 +1019,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1224,6 +1304,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1319,6 +1404,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1519,6 +1609,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr ""
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1539,6 +1634,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1649,6 +1749,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1659,6 +1764,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Reeldona Produktado"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1729,11 +1844,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SAKD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1766,7 +1891,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Serĉasistado"
@@ -1776,6 +1902,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1826,6 +1957,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Kant-ciklo"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1856,6 +1994,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr ""
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2111,6 +2254,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Vaksa cilindro"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -18,7 +18,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/musicbrainz/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -77,11 +77,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Álbum"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -122,6 +137,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Audiolibro"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -152,6 +172,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -377,6 +402,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "Caja de cinta"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -507,6 +537,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -642,6 +677,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -712,6 +752,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -882,11 +927,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -957,6 +1032,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1237,6 +1317,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1332,6 +1417,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr "Municipio"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1532,6 +1622,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Otro"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1552,6 +1647,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1662,6 +1762,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1672,6 +1777,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Producción de reediciones"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1742,11 +1857,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr "SHM-CD"
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1779,7 +1904,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Ayuda de búsqueda"
@@ -1789,6 +1915,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1839,6 +1970,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Ciclo de canciones"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1869,6 +2007,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Pegatina"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2124,6 +2267,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Cilindro de fonógrafo"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-04-17 03:31+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Estonian (http://www.transifex.com/projects/p/musicbrainz/language/et/)\n"
"MIME-Version: 1.0\n"
@@ -66,18 +66,23 @@ msgstr "ais-moll"
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
msgstr "APRA ID"
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
msgstr "ASCAP ID"
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr "Lubab seeria iga elemendi järjestuse käsitsi määrata."
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -118,6 +123,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "heliraamat"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr "automaatne"
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -151,7 +161,7 @@ msgstr "b-moll"
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
msgstr "BMI ID"
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
@@ -378,6 +388,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "kassetikarp"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -511,7 +526,7 @@ msgstr "Darbārī kānaḍa"
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
msgstr "demo"
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
@@ -648,6 +663,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr "Elektrooniline pill"
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -721,7 +741,7 @@ msgstr "gis-moll"
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
msgstr "GEMA ID"
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
@@ -893,11 +913,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr "imprint"
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr "Määrab, et seeria koosneb salvestistest."
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr "Määrab, et seeria koosneb väljalaskerühmadest."
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr "Määrab, et seeria koosneb väljalasetest."
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr "Määrab, et seeria koosneb teostest."
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr "sisehall"
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr "instrumendi nimi"
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -971,7 +1021,7 @@ msgstr "Jōnpuri"
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
msgstr "KOMCA ID"
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
@@ -1253,6 +1303,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr "Mandāri"
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr "käsitsi"
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1351,7 +1406,7 @@ msgstr "vald"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
msgstr "MÜST ID"
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
@@ -1553,6 +1608,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "muu"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr "Muu pill"
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1573,6 +1633,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr "Paṭdīp"
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr "Löökpill"
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1683,6 +1748,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr "Ravicandrika"
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr "salvestis"
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1693,6 +1763,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "kordusväljaannete tootmine"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr "väljalase"
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr "väljalaskerühm"
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1766,7 +1846,7 @@ msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
msgstr "SESAC ID"
#: DB:medium_format/name:36
msgctxt "medium_format"
@@ -1776,7 +1856,7 @@ msgstr "SHM-CD"
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
msgstr "SOCAN ID"
#: DB:medium_format/name:23
msgctxt "medium_format"
@@ -1810,7 +1890,8 @@ msgstr "Saurāṣtraṁ"
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "otsinguvihje"
@@ -1820,6 +1901,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr "Sencuruṭṭi"
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr "seeria pealkiri"
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1870,6 +1956,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "laulutsükkel"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr "Seeria elemendid järjestatakse automaatselt nende järjekorranumbri järgi, kasutades loomulikku sortimisjärjestust."
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1900,6 +1993,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "kleeps"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr "Keelpill"
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2155,6 +2253,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "vaharull"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr "Õhkpill"
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr "teos"
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -12,8 +12,8 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-04-10 16:11+0000\n"
"Last-Translator: Phonebox\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Finnish (http://www.transifex.com/projects/p/musicbrainz/language/fi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -71,11 +71,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Albumi"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -116,6 +131,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Äänikirja"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -146,6 +166,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -371,6 +396,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "Kasettikotelo"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -501,6 +531,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -636,6 +671,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -706,6 +746,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -876,11 +921,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr "Valmistajamerkki"
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -951,6 +1026,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1231,6 +1311,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1326,6 +1411,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr "Hallinnollinen alue"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1526,6 +1616,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Muu"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1546,6 +1641,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1656,6 +1756,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1666,6 +1771,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Uudelleenjulkaisutuotanto"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1736,11 +1851,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "Super Audio CD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr "SHM-CD"
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1773,7 +1898,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Hakuvihje"
@@ -1783,6 +1909,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1833,6 +1964,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Laulusarja"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1863,6 +2001,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Tarra"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2118,6 +2261,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Fonografisylinteri"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -17,7 +17,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-04-17 03:36+0000\n"
"PO-Revision-Date: 2014-05-21 13:40+0000\n"
"Last-Translator: Alain-Olivier Breysse\n"
"Language-Team: French (http://www.transifex.com/projects/p/musicbrainz/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -91,6 +91,11 @@ msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr "Permet de définir manuellement la position de chaque élément dans la série."
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -131,6 +136,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Livre audio"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr "Automatique"
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -391,6 +401,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "Boîtier de cassette"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr "Catalogue"
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -564,7 +579,7 @@ msgstr "Digipak"
#: DB:medium_format/name:12
msgctxt "medium_format"
msgid "Digital Media"
msgstr "Média numérique"
msgstr "Support numérique"
#: DB:release_packaging/name:13
msgctxt "release_packaging"
@@ -661,6 +676,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr "Instrument électronique"
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -906,11 +926,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr "Marque d'éditeur"
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr "Indique que la série est un catalogue dœuvres."
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr "Indique que c'est une série d'enregistrements."
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr "Indique que c'est une série de groupes de parution."
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr "Indique que c'est une série de parutions."
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr "Indique que c'est une série dœuvres."
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr "Stade couvert"
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr "Nom de l'instrument"
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -1266,6 +1316,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr "Mandāri"
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr "Manuel"
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1294,7 +1349,7 @@ msgstr "Maṭhya"
#: DB:cover_art_archive.art_type/name:4
msgctxt "cover_art_type"
msgid "Medium"
msgstr "Milieu"
msgstr "Support"
#: DB:work_attribute_type_allowed_value/value:176
msgctxt "work_attribute_type_allowed_value"
@@ -1566,6 +1621,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Autre"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr "Autre instrument"
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1586,6 +1646,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr "Paṭdīp"
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr "Instrument de percussion"
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1696,6 +1761,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr "Ravicandrika"
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr "Enregistrement"
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1706,6 +1776,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Production de réédition"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr "Parution"
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr "Groupe de parution"
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1823,7 +1903,8 @@ msgstr "Saurāṣtraṁ"
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Indice de recherche"
@@ -1833,6 +1914,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr "Sencuruṭṭi"
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr "Nom de la série"
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1883,6 +1969,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Série de chansons"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr "Trie les éléments de la série automatiquement par leurs attributs de numéro, en utilisant un ordre de tri naturel."
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1913,6 +2006,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Autocollant"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr "Instruments à cordes"
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2168,6 +2266,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Cylindre de cire"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr "Instruments à vent"
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr "Œuvre"
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

2404
po/attributes/hr.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -9,8 +9,8 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-04-17 05:16+0000\n"
"Last-Translator: Luca Salini <salo.rock@gmail.com>\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/musicbrainz/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -83,6 +83,11 @@ msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr "Permette di impostare manualmente la posizione di ogni elemento della serie."
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -123,6 +128,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Audiolibro"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr "Automatico"
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -383,6 +393,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "Custodia per audiocassetta"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -653,6 +668,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr "Strumento elettronico"
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -898,11 +918,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr "Casa discografica"
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr "Indica che si tratta di una serie di registrazioni."
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr "Indica che si tratta di una serie di gruppi di pubblicazioni."
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr "Indica che si tratta di una serie di pubblicazioni."
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr "Indica che si tratta di una serie di opere."
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr "Arena coperta"
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr "Nome strumento"
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -1258,6 +1308,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr "Mandāri"
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr "Manuale"
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1558,6 +1613,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Altro"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr "Altro strumento"
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1578,6 +1638,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr "Paṭdīp"
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr "Strumento a percussione"
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1688,6 +1753,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr "Ravicandrika"
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr "Registrazione"
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1698,6 +1768,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Produzione di riedizioni"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr "Pubblicazione"
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr "Gruppo di pubblicazioni"
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1815,7 +1895,8 @@ msgstr "Saurāṣtraṁ"
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Suggerimento per ricerca"
@@ -1825,6 +1906,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr "Sencuruṭṭi"
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr "Nome serie"
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1875,6 +1961,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Ciclo di canzoni"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr "Ordina automaticamente gli elementi della serie in base al loro numero ordinale, utilizzando un ordinamento naturale."
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1905,6 +1998,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Adesivo"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr "Strumento a corda"
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2160,6 +2258,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Cilindro fonografico"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr "Strumento ad aria"
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr "Opera"
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Japanese (http://www.transifex.com/projects/p/musicbrainz/language/ja/)\n"
"MIME-Version: 1.0\n"
@@ -65,11 +65,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr "嬰イ短調"
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "アルバム"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -110,6 +125,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "オーディオブック"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -140,6 +160,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr "変ロ短調"
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -365,6 +390,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "カセットケース"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -495,6 +525,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -630,6 +665,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -700,6 +740,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr "嬰ト短調"
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -870,11 +915,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -945,6 +1020,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1225,6 +1305,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1320,6 +1405,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr "市制"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1520,6 +1610,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "その他"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1540,6 +1635,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1650,6 +1750,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1660,6 +1765,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "再販品"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1730,11 +1845,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1767,7 +1892,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "検索ヒント"
@@ -1777,6 +1903,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1827,6 +1958,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "ソングサイクル"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1857,6 +1995,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "ステッカー"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2112,6 +2255,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "ワックスシリンダー"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-04-17 03:31+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"PO-Revision-Date: 2014-05-21 11:52+0000\n"
"Last-Translator: Maurits Meulenbelt <mfmeulenbelt@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/musicbrainz/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -70,18 +70,23 @@ msgstr "Ais kleine terts"
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
msgstr "APRA ID"
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
msgstr "ASCAP ID"
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr "Maakt het mogelijk om de positie van ieder object in een serie handmatig in te stellen."
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -122,6 +127,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Luisterboek"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr "Automatisch"
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -155,7 +165,7 @@ msgstr "Bes kleine terts"
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
msgstr "BMI ID"
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
@@ -360,7 +370,7 @@ msgstr "Cantate"
#: DB:release_packaging/name:4
msgctxt "release_packaging"
msgid "Cardboard/Paper Sleeve"
msgstr "Kartonnnen / papieren hoes"
msgstr "Kartonnen / papieren hoes"
#: DB:medium_format/name:9
msgctxt "medium_format"
@@ -382,6 +392,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "Cassettedoosje"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr "Catalogus"
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -515,7 +530,7 @@ msgstr "Darbārī kānaḍa"
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
msgstr "Demo"
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
@@ -652,6 +667,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr "Elektronisch instrument"
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -725,7 +745,7 @@ msgstr "Gis kleine terts"
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
msgstr "GEMA ID"
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
@@ -897,11 +917,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr "Imprint"
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr "Geeft aan dat de serie een compositiecatalogus is."
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr "Geeft aan dat de serie opnames bevat."
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr "Geeft aan dat de serie uitgavegroepen bevat."
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr "Geeft aan dat de serie uitgaves bevat."
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr "Geeft aan dat de serie composities bevat."
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr "Indoor arena"
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr "Naam van het instrument"
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -975,7 +1025,7 @@ msgstr "Jōnpuri"
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
msgstr "KOMCA ID"
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
@@ -1257,6 +1307,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr "Mandāri"
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr "Handmatig"
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1355,7 +1410,7 @@ msgstr "Gemeente"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
msgstr "MÜST ID"
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
@@ -1557,6 +1612,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Overig"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr "Overig instrument"
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1577,6 +1637,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr "Paṭdīp"
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr "Percussie-instrument"
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1687,6 +1752,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr "Ravicandrika"
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr "Opname"
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1697,6 +1767,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Heruitgaveproductie"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr "Uitgave"
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr "Uitgavegroep"
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1770,7 +1850,7 @@ msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
msgstr "SESAC ID"
#: DB:medium_format/name:36
msgctxt "medium_format"
@@ -1780,7 +1860,7 @@ msgstr "SHM-CD"
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
msgstr "SOCAN ID"
#: DB:medium_format/name:23
msgctxt "medium_format"
@@ -1814,7 +1894,8 @@ msgstr "Saurāṣtraṁ"
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Zoektip"
@@ -1824,6 +1905,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr "Sencuruṭṭi"
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr "Serienaam"
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1874,6 +1960,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Liedcyclus"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr "Sorteert de objecten in een serie automatisch aan de hand van de nummereigenschappen. Maakt hierbij gebruik van een natuurlijke volgorde."
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1904,6 +1997,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Sticker"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr "Snaarinstrument"
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2159,6 +2257,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Wascilinder"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr "Blaasinstrument"
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr "Compositie"
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/musicbrainz/language/pl/)\n"
"MIME-Version: 1.0\n"
@@ -67,11 +67,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -112,6 +127,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Audiobook"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -142,6 +162,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -367,6 +392,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -497,6 +527,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -632,6 +667,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -702,6 +742,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -872,11 +917,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -947,6 +1022,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1227,6 +1307,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1322,6 +1407,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1522,6 +1612,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr ""
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1542,6 +1637,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1652,6 +1752,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1662,6 +1767,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr ""
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1732,11 +1847,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr ""
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1769,7 +1894,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr ""
@@ -1779,6 +1905,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1829,6 +1960,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr ""
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1859,6 +1997,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr ""
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2114,6 +2257,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr ""
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -12,7 +12,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/musicbrainz/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
@@ -71,11 +71,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -116,6 +131,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Audiobook"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -146,6 +166,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -371,6 +396,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -501,6 +531,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -636,6 +671,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -706,6 +746,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -876,11 +921,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -951,6 +1026,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1231,6 +1311,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1326,6 +1411,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr "Municipalidade"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1526,6 +1616,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Outro"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1546,6 +1641,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1656,6 +1756,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1666,6 +1771,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr ""
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1736,11 +1851,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1773,7 +1898,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Pesquisar dica"
@@ -1783,6 +1909,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1833,6 +1964,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr ""
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1863,6 +2001,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr ""
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2118,6 +2261,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr ""
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Romanian (http://www.transifex.com/projects/p/musicbrainz/language/ro/)\n"
"MIME-Version: 1.0\n"
@@ -63,11 +63,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -108,6 +123,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Carte audio"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -138,6 +158,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -363,6 +388,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -493,6 +523,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -628,6 +663,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -698,6 +738,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -868,11 +913,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -943,6 +1018,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1223,6 +1303,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1318,6 +1403,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1518,6 +1608,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "altele"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1538,6 +1633,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1648,6 +1748,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1658,6 +1763,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Producție Reemitere"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1728,11 +1843,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1765,7 +1890,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Indiciu căutare "
@@ -1775,6 +1901,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1825,6 +1956,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Ciclu melodie"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1855,6 +1993,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Autocolant"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2110,6 +2253,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Cilindru de ceară"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

2407
po/attributes/ru.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Slovak (http://www.transifex.com/projects/p/musicbrainz/language/sk/)\n"
"MIME-Version: 1.0\n"
@@ -64,11 +64,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -109,6 +124,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Audiokniha"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -139,6 +159,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -364,6 +389,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -494,6 +524,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -629,6 +664,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -699,6 +739,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -869,11 +914,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -944,6 +1019,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1224,6 +1304,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1319,6 +1404,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1519,6 +1609,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr ""
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1539,6 +1634,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1649,6 +1749,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1659,6 +1764,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr ""
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1729,11 +1844,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1766,7 +1891,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr ""
@@ -1776,6 +1902,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1826,6 +1957,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr ""
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1856,6 +1994,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr ""
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2111,6 +2254,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Voskový valec"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -4,7 +4,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/musicbrainz/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -63,11 +63,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Album"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -108,6 +123,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "Ljudbok"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -138,6 +158,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -363,6 +388,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -493,6 +523,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -628,6 +663,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "EP"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -698,6 +738,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -868,11 +913,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -943,6 +1018,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1223,6 +1303,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1318,6 +1403,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1518,6 +1608,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Övriga"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1538,6 +1633,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1648,6 +1748,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1658,6 +1763,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "Återutgivningsproduktion"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1728,11 +1843,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1765,7 +1890,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Sök hint"
@@ -1775,6 +1901,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1825,6 +1956,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "Sång-cykel"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1855,6 +1993,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr "Klistermärke"
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2110,6 +2253,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "Fonografcylinder"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/musicbrainz/language/tr/)\n"
"MIME-Version: 1.0\n"
@@ -66,11 +66,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "Albüm"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -111,6 +126,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr ""
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -141,6 +161,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -366,6 +391,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr ""
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -496,6 +526,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -631,6 +666,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr ""
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -701,6 +741,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -871,11 +916,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -946,6 +1021,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1226,6 +1306,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1321,6 +1406,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr ""
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1521,6 +1611,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "Diğer"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1541,6 +1636,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1651,6 +1751,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1661,6 +1766,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr ""
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1731,11 +1846,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "SACD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1768,7 +1893,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "Arama ipucu"
@@ -1778,6 +1904,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1828,6 +1959,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr ""
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1858,6 +1996,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr ""
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2113,6 +2256,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr ""
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

View File

@@ -16,7 +16,7 @@
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-03-31 21:30+0000\n"
"PO-Revision-Date: 2014-05-20 19:03+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/musicbrainz/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -75,11 +75,26 @@ msgctxt "work_attribute_type_allowed_value"
msgid "A-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:13
msgctxt "work_attribute_type"
msgid "APRA ID"
msgstr ""
#: DB:work_attribute_type/name:6
msgctxt "work_attribute_type"
msgid "ASCAP ID"
msgstr ""
#: DB:release_group_primary_type/name:1
msgctxt "release_group_primary_type"
msgid "Album"
msgstr "专辑"
#: DB:series_ordering_type/description:2
msgctxt "series_ordering_type"
msgid "Allows for manually setting the position of each item in the series."
msgstr ""
#: DB:work_attribute_type_allowed_value/value:40
msgctxt "work_attribute_type_allowed_value"
msgid "Amṛtavarṣiṇi"
@@ -120,6 +135,11 @@ msgctxt "release_group_secondary_type"
msgid "Audiobook"
msgstr "有声读物"
#: DB:series_ordering_type/name:1
msgctxt "series_ordering_type"
msgid "Automatic"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:45
msgctxt "work_attribute_type_allowed_value"
msgid "Aṭāna"
@@ -150,6 +170,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "B-flat minor"
msgstr ""
#: DB:work_attribute_type/name:7
msgctxt "work_attribute_type"
msgid "BMI ID"
msgstr ""
#: DB:cover_art_archive.art_type/name:2
msgctxt "cover_art_type"
msgid "Back"
@@ -375,6 +400,11 @@ msgctxt "release_packaging"
msgid "Cassette Case"
msgstr "磁带包装"
#: DB:series_type/name:5
msgctxt "series_type"
msgid "Catalogue"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:291
msgctxt "work_attribute_type_allowed_value"
msgid "Caturaśra-jāti jhaṁpe"
@@ -505,6 +535,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Darbārī kānaḍa"
msgstr ""
#: DB:release_group_secondary_type/name:10
msgctxt "release_group_secondary_type"
msgid "Demo"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:79
msgctxt "work_attribute_type_allowed_value"
msgid "Devāmṛtavarṣiṇi"
@@ -640,6 +675,11 @@ msgctxt "release_group_primary_type"
msgid "EP"
msgstr "细碟"
#: DB:instrument_type/name:4
msgctxt "instrument_type"
msgid "Electronic instrument"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:17
msgctxt "work_attribute_type_allowed_value"
msgid "F major"
@@ -710,6 +750,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "G-sharp minor"
msgstr ""
#: DB:work_attribute_type/name:9
msgctxt "work_attribute_type"
msgid "GEMA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:88
msgctxt "work_attribute_type_allowed_value"
msgid "Gamakakriya"
@@ -880,11 +925,41 @@ msgctxt "label_type"
msgid "Imprint"
msgstr ""
#: DB:series_type/description:5
msgctxt "series_type"
msgid "Indicates that the series is a work catalogue."
msgstr ""
#: DB:series_type/description:3
msgctxt "series_type"
msgid "Indicates that the series is of recordings."
msgstr ""
#: DB:series_type/description:1
msgctxt "series_type"
msgid "Indicates that the series is of release groups."
msgstr ""
#: DB:series_type/description:2
msgctxt "series_type"
msgid "Indicates that the series is of releases."
msgstr ""
#: DB:series_type/description:4
msgctxt "series_type"
msgid "Indicates that the series is of works."
msgstr ""
#: DB:place_type/name:5
msgctxt "place_type"
msgid "Indoor arena"
msgstr ""
#: DB:instrument_alias_type/name:1
msgctxt "alias_type"
msgid "Instrument name"
msgstr ""
#: DB:release_group_secondary_type/name:4
msgctxt "release_group_secondary_type"
msgid "Interview"
@@ -955,6 +1030,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Jōnpuri"
msgstr ""
#: DB:work_attribute_type/name:11
msgctxt "work_attribute_type"
msgid "KOMCA ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:128
msgctxt "work_attribute_type_allowed_value"
msgid "Kalgaḍa"
@@ -1235,6 +1315,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Mandāri"
msgstr ""
#: DB:series_ordering_type/name:2
msgctxt "series_ordering_type"
msgid "Manual"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:172
msgctxt "work_attribute_type_allowed_value"
msgid "Manōranjani"
@@ -1330,6 +1415,11 @@ msgctxt "area_type"
msgid "Municipality"
msgstr "自治区"
#: DB:work_attribute_type/name:12
msgctxt "work_attribute_type"
msgid "MÜST ID"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:167
msgctxt "work_attribute_type_allowed_value"
msgid "Mānavati"
@@ -1530,6 +1620,11 @@ msgctxt "cover_art_type"
msgid "Other"
msgstr "其他"
#: DB:instrument_type/name:5
msgctxt "instrument_type"
msgid "Other instrument"
msgstr ""
#: DB:work_type/name:12
msgctxt "work_type"
msgid "Overture"
@@ -1550,6 +1645,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Paṭdīp"
msgstr ""
#: DB:instrument_type/name:3
msgctxt "instrument_type"
msgid "Percussion instrument"
msgstr ""
#: DB:artist_type/name:1
msgctxt "artist_type"
msgid "Person"
@@ -1660,6 +1760,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Ravicandrika"
msgstr ""
#: DB:series_type/name:3
msgctxt "series_type"
msgid "Recording"
msgstr ""
#: DB:medium_format/name:10
msgctxt "medium_format"
msgid "Reel-to-reel"
@@ -1670,6 +1775,16 @@ msgctxt "label_type"
msgid "Reissue Production"
msgstr "重新发行的产品"
#: DB:series_type/name:2
msgctxt "series_type"
msgid "Release"
msgstr ""
#: DB:series_type/name:1
msgctxt "series_type"
msgid "Release group"
msgstr ""
#: DB:release_group_secondary_type/name:7
msgctxt "release_group_secondary_type"
msgid "Remix"
@@ -1740,11 +1855,21 @@ msgctxt "medium_format"
msgid "SACD"
msgstr "超级音频CD"
#: DB:work_attribute_type/name:8
msgctxt "work_attribute_type"
msgid "SESAC ID"
msgstr ""
#: DB:medium_format/name:36
msgctxt "medium_format"
msgid "SHM-CD"
msgstr ""
#: DB:work_attribute_type/name:10
msgctxt "work_attribute_type"
msgid "SOCAN ID"
msgstr ""
#: DB:medium_format/name:23
msgctxt "medium_format"
msgid "SVCD"
@@ -1777,7 +1902,8 @@ msgstr ""
#: DB:artist_alias_type/name:3 DB:label_alias_type/name:2
#: DB:place_alias_type/name:2 DB:work_alias_type/name:2
#: DB:area_alias_type/name:3
#: DB:area_alias_type/name:3 DB:instrument_alias_type/name:2
#: DB:series_alias_type/name:2
msgctxt "alias_type"
msgid "Search hint"
msgstr "搜索提示"
@@ -1787,6 +1913,11 @@ msgctxt "work_attribute_type_allowed_value"
msgid "Sencuruṭṭi"
msgstr ""
#: DB:series_alias_type/name:1
msgctxt "alias_type"
msgid "Series name"
msgstr ""
#: DB:work_attribute_type_allowed_value/value:236
msgctxt "work_attribute_type_allowed_value"
msgid "Simhavāhini"
@@ -1837,6 +1968,13 @@ msgctxt "work_type"
msgid "Song-cycle"
msgstr "组歌"
#: DB:series_ordering_type/description:1
msgctxt "series_ordering_type"
msgid ""
"Sorts the items in the series automatically by their number attributes, "
"using a natural sort order."
msgstr ""
#: DB:work_type/name:22
msgctxt "work_type"
msgid "Soundtrack"
@@ -1867,6 +2005,11 @@ msgctxt "cover_art_type"
msgid "Sticker"
msgstr ""
#: DB:instrument_type/name:2
msgctxt "instrument_type"
msgid "String instrument"
msgstr ""
#: DB:place_type/name:1
msgctxt "place_type"
msgid "Studio"
@@ -2122,6 +2265,16 @@ msgctxt "medium_format"
msgid "Wax Cylinder"
msgstr "蜡筒"
#: DB:instrument_type/name:1
msgctxt "instrument_type"
msgid "Wind instrument"
msgstr ""
#: DB:series_type/name:4
msgctxt "series_type"
msgid "Work"
msgstr ""
#: DB:work_alias_type/name:1
msgctxt "alias_type"
msgid "Work name"

1182
po/bg.po

File diff suppressed because it is too large Load Diff

1254
po/ca.po

File diff suppressed because it is too large Load Diff

1304
po/countries/hr.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,11 +4,12 @@
# greycat <greycat.na.kor@gmail.com>, 2012
# Nikolai Prokoschenko <nikolai@prokoschenko.de>, 2011
# dubwai <o0wd8jx@lavabit.com>, 2012
# Дмитрий Яковлев <sema19689@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-01-12 12:58+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"PO-Revision-Date: 2014-05-04 10:11+0000\n"
"Last-Translator: Дмитрий Яковлев <sema19689@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/musicbrainz/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -144,7 +145,7 @@ msgstr "Бутан"
#. iso.code:BO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:26
msgid "Bolivia"
msgstr ""
msgstr "Боливия"
#. iso.code:BQ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:258
@@ -179,12 +180,12 @@ msgstr "Британская территория в Индийском океа
#. iso.code:VG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:230
msgid "British Virgin Islands"
msgstr ""
msgstr "Британские Виргинские острова"
#. iso.code:BN
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:32
msgid "Brunei"
msgstr ""
msgstr "Бруней"
#. iso.code:BG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:33
@@ -309,7 +310,7 @@ msgstr "Чехия"
#. iso.code:XC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:245
msgid "Czechoslovakia"
msgstr ""
msgstr "Чехословакия"
#. iso.code:CI
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:52
@@ -319,7 +320,7 @@ msgstr "Кот-д'Ивуар"
#. iso.code:CD
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:236
msgid "Democratic Republic of the Congo"
msgstr ""
msgstr "Демократическая Республика Конго"
#. iso.code:DK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:57
@@ -344,7 +345,7 @@ msgstr "Доминиканская Республика"
#. iso.code:XG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:244
msgid "East Germany"
msgstr ""
msgstr "Восточная Германия"
#. iso.code:EC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:62
@@ -389,7 +390,7 @@ msgstr "Европа"
#. iso.code:FK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:69
msgid "Falkland Islands"
msgstr ""
msgstr "Фолклендские острова"
#. iso.code:FO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:70
@@ -549,7 +550,7 @@ msgstr "Индонезия"
#. iso.code:IR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:101
msgid "Iran"
msgstr ""
msgstr "Иран"
#. iso.code:IQ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:102
@@ -614,7 +615,7 @@ msgstr "Кирибати"
#. iso.code:XK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:2358
msgid "Kosovo"
msgstr ""
msgstr "Косово"
#. iso.code:KW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:114
@@ -629,7 +630,7 @@ msgstr "Киргизия"
#. iso.code:LA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:116
msgid "Laos"
msgstr ""
msgstr "Лаос"
#. iso.code:LV
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:117
@@ -679,7 +680,7 @@ msgstr "Макао"
#. iso.code:MK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:126
msgid "Macedonia"
msgstr ""
msgstr "Македония"
#. iso.code:MG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:127
@@ -749,7 +750,7 @@ msgstr "Микронезия"
#. iso.code:MD
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:140
msgid "Moldova"
msgstr ""
msgstr "Молдова"
#. iso.code:MC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:141
@@ -809,7 +810,7 @@ msgstr "Нидерланды"
#. iso.code:AN
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:151
msgid "Netherlands Antilles"
msgstr ""
msgstr "Нидерландские Антильские острова"
#. iso.code:NC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:152
@@ -849,7 +850,7 @@ msgstr "Остров Норфолк"
#. iso.code:KP
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:112
msgid "North Korea"
msgstr ""
msgstr "Северная Корея"
#. iso.code:MP
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:159
@@ -879,7 +880,7 @@ msgstr "Палау"
#. iso.code:PS
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:249
msgid "Palestine"
msgstr ""
msgstr "Палестина"
#. iso.code:PA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:164
@@ -1019,7 +1020,7 @@ msgstr "Сербия"
#. iso.code:CS
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:242
msgid "Serbia and Montenegro"
msgstr ""
msgstr "Сербия и Черногория"
#. iso.code:SC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:186
@@ -1074,7 +1075,7 @@ msgstr "Южная Георгия и Южные Сандвичевы остро
#. iso.code:KR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:113
msgid "South Korea"
msgstr ""
msgstr "Южная Корея"
#. iso.code:SS
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:257
@@ -1084,7 +1085,7 @@ msgstr "Южный Судан"
#. iso.code:SU
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:243
msgid "Soviet Union"
msgstr ""
msgstr "Советский Союз"
#. iso.code:ES
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:194
@@ -1129,7 +1130,7 @@ msgstr "Швейцария"
#. iso.code:SY
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:204
msgid "Syria"
msgstr ""
msgstr "Сирия"
#. iso.code:TW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:205
@@ -1144,7 +1145,7 @@ msgstr "Таджикистан"
#. iso.code:TZ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:207
msgid "Tanzania"
msgstr ""
msgstr "Танзания"
#. iso.code:TH
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:208
@@ -1204,7 +1205,7 @@ msgstr "Тувалу"
#. iso.code:VI
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:231
msgid "U.S. Virgin Islands"
msgstr ""
msgstr "Американские Виргинские острова"
#. iso.code:UG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:218
@@ -1259,12 +1260,12 @@ msgstr "Ватикан"
#. iso.code:VE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:228
msgid "Venezuela"
msgstr ""
msgstr "Венесуэла"
#. iso.code:VN
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:229
msgid "Vietnam"
msgstr ""
msgstr "Вьетнам"
#. iso.code:WF
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:232
@@ -1284,7 +1285,7 @@ msgstr "Йемен"
#. iso.code:YU
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:235
msgid "Yugoslavia"
msgstr ""
msgstr "Югославия"
#. iso.code:ZM
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:237

View File

@@ -2,13 +2,14 @@
# Translators:
# ym syserror <cilek.kocak@gmail.com>, 2012
# Nikolai Prokoschenko <nikolai@prokoschenko.de>, 2011
# secgin <secgink.57@gmail.com>, 2014
# zeugma <sunder67@hotmail.com>, 2012
# portik <yetmisbeskere75@hotmail.com>, 2012
msgid ""
msgstr ""
"Project-Id-Version: MusicBrainz\n"
"PO-Revision-Date: 2014-01-12 12:58+0000\n"
"Last-Translator: Ian McEwen <ianmcorvidae@ianmcorvidae.net>\n"
"PO-Revision-Date: 2014-05-23 09:29+0000\n"
"Last-Translator: secgin <secgink.57@gmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/projects/p/musicbrainz/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -49,17 +50,17 @@ msgstr "Angola"
#. iso.code:AI
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:7
msgid "Anguilla"
msgstr ""
msgstr "Anguilla"
#. iso.code:AQ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:8
msgid "Antarctica"
msgstr ""
msgstr "Antarktika"
#. iso.code:AG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:9
msgid "Antigua and Barbuda"
msgstr ""
msgstr "Antigua ve Barbuda"
#. iso.code:AR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:10
@@ -74,7 +75,7 @@ msgstr "Ermenistan"
#. iso.code:AW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:12
msgid "Aruba"
msgstr ""
msgstr "Aruba"
#. iso.code:AU
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:13
@@ -139,7 +140,7 @@ msgstr "Bermuda"
#. iso.code:BT
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:25
msgid "Bhutan"
msgstr ""
msgstr "Bhutan"
#. iso.code:BO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:26
@@ -149,7 +150,7 @@ msgstr ""
#. iso.code:BQ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:258
msgid "Bonaire, Sint Eustatius and Saba"
msgstr ""
msgstr "Bonaire, Sint Eustatius ve Saba"
#. iso.code:BA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:27
@@ -159,12 +160,12 @@ msgstr "Bosna-Hersek"
#. iso.code:BW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:28
msgid "Botswana"
msgstr ""
msgstr "Botsvana"
#. iso.code:BV
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:29
msgid "Bouvet Island"
msgstr ""
msgstr "Bouvet Adası"
#. iso.code:BR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:30
@@ -174,17 +175,17 @@ msgstr "Brezilya"
#. iso.code:IO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:31
msgid "British Indian Ocean Territory"
msgstr ""
msgstr "Britanya Hint Okyanusu Toprakları"
#. iso.code:VG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:230
msgid "British Virgin Islands"
msgstr ""
msgstr "Britanya Virjin Adaları"
#. iso.code:BN
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:32
msgid "Brunei"
msgstr ""
msgstr "Brunei"
#. iso.code:BG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:33
@@ -219,12 +220,12 @@ msgstr "Kanada"
#. iso.code:CV
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:39
msgid "Cape Verde"
msgstr ""
msgstr "Yeşil Burun Adaları"
#. iso.code:KY
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:40
msgid "Cayman Islands"
msgstr ""
msgstr "Cayman Adaları"
#. iso.code:CF
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:41
@@ -249,12 +250,12 @@ msgstr "Çin"
#. iso.code:CX
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:45
msgid "Christmas Island"
msgstr ""
msgstr "Christmas Adası"
#. iso.code:CC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:46
msgid "Cocos (Keeling) Islands"
msgstr ""
msgstr "Cocos (Keyling) Adaları"
#. iso.code:CO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:47
@@ -264,17 +265,17 @@ msgstr "Kolombiya"
#. iso.code:KM
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:48
msgid "Comoros"
msgstr ""
msgstr "Komorlar"
#. iso.code:CG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:49
msgid "Congo"
msgstr ""
msgstr "Kongo"
#. iso.code:CK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:50
msgid "Cook Islands"
msgstr ""
msgstr "Cook Adaları"
#. iso.code:CR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:51
@@ -294,7 +295,7 @@ msgstr "Küba"
#. iso.code:CW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:259
msgid "Curaçao"
msgstr ""
msgstr "Curaçao"
#. iso.code:CY
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:55
@@ -309,7 +310,7 @@ msgstr "Çek Cumhuriyeti"
#. iso.code:XC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:245
msgid "Czechoslovakia"
msgstr ""
msgstr "Çekoslovakya"
#. iso.code:CI
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:52
@@ -319,7 +320,7 @@ msgstr "Fildişi Sahili"
#. iso.code:CD
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:236
msgid "Democratic Republic of the Congo"
msgstr ""
msgstr "Demokratik Kongo Cumhuriyeti"
#. iso.code:DK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:57
@@ -334,17 +335,17 @@ msgstr "Cibuti"
#. iso.code:DM
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:59
msgid "Dominica"
msgstr ""
msgstr "Dominika"
#. iso.code:DO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:60
msgid "Dominican Republic"
msgstr ""
msgstr "Dominik Cumhuriyeti"
#. iso.code:XG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:244
msgid "East Germany"
msgstr ""
msgstr "Doğu Almanya"
#. iso.code:EC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:62
@@ -359,12 +360,12 @@ msgstr "Mısır"
#. iso.code:SV
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:64
msgid "El Salvador"
msgstr ""
msgstr "El Salvador"
#. iso.code:GQ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:65
msgid "Equatorial Guinea"
msgstr ""
msgstr "Ekvator Ginesi"
#. iso.code:ER
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:66
@@ -379,87 +380,87 @@ msgstr "Estonya"
#. iso.code:ET
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:68
msgid "Ethiopia"
msgstr ""
msgstr "Etiyopya"
#. iso.code:XE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:241
msgid "Europe"
msgstr ""
msgstr "Avrupa"
#. iso.code:FK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:69
msgid "Falkland Islands"
msgstr ""
msgstr "Falkland Adaları"
#. iso.code:FO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:70
msgid "Faroe Islands"
msgstr ""
msgstr "Faroe Adaları"
#. iso.code:FJ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:71
msgid "Fiji"
msgstr ""
msgstr "Fiji"
#. iso.code:FI
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:72
msgid "Finland"
msgstr ""
msgstr "Finlandiya"
#. iso.code:FR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:73
msgid "France"
msgstr ""
msgstr "Fransa"
#. iso.code:GF
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:75
msgid "French Guiana"
msgstr ""
msgstr "Fransız Guyanası"
#. iso.code:PF
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:76
msgid "French Polynesia"
msgstr ""
msgstr "Fransız Polinezyası"
#. iso.code:TF
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:77
msgid "French Southern Territories"
msgstr ""
msgstr "Fransız Güney Toprakları"
#. iso.code:GA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:78
msgid "Gabon"
msgstr ""
msgstr "Gabon"
#. iso.code:GM
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:79
msgid "Gambia"
msgstr ""
msgstr "Gambiya"
#. iso.code:GE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:80
msgid "Georgia"
msgstr ""
msgstr "Gürcistan"
#. iso.code:DE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:81
msgid "Germany"
msgstr ""
msgstr "Almanya"
#. iso.code:GH
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:82
msgid "Ghana"
msgstr ""
msgstr "Gana"
#. iso.code:GI
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:83
msgid "Gibraltar"
msgstr ""
msgstr "Cebelitarık"
#. iso.code:GR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:84
msgid "Greece"
msgstr ""
msgstr "Yunanistan"
#. iso.code:GL
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:85
@@ -549,7 +550,7 @@ msgstr "Endonezya"
#. iso.code:IR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:101
msgid "Iran"
msgstr ""
msgstr "İran"
#. iso.code:IQ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:102
@@ -589,7 +590,7 @@ msgstr "Japonya"
#. iso.code:JE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:253
msgid "Jersey"
msgstr ""
msgstr "Jersey"
#. iso.code:JO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:108
@@ -614,7 +615,7 @@ msgstr ""
#. iso.code:XK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:2358
msgid "Kosovo"
msgstr ""
msgstr "Kosova"
#. iso.code:KW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:114
@@ -629,7 +630,7 @@ msgstr "Kırgızistan"
#. iso.code:LA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:116
msgid "Laos"
msgstr ""
msgstr "Laos"
#. iso.code:LV
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:117
@@ -679,7 +680,7 @@ msgstr ""
#. iso.code:MK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:126
msgid "Macedonia"
msgstr ""
msgstr "Makedonya"
#. iso.code:MG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:127
@@ -749,7 +750,7 @@ msgstr ""
#. iso.code:MD
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:140
msgid "Moldova"
msgstr ""
msgstr "Moldova"
#. iso.code:MC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:141
@@ -809,7 +810,7 @@ msgstr ""
#. iso.code:AN
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:151
msgid "Netherlands Antilles"
msgstr ""
msgstr "Hollanda Antilleri"
#. iso.code:NC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:152
@@ -879,7 +880,7 @@ msgstr ""
#. iso.code:PS
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:249
msgid "Palestine"
msgstr ""
msgstr "Filistin"
#. iso.code:PA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:164
@@ -1019,7 +1020,7 @@ msgstr "Sırbistan"
#. iso.code:CS
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:242
msgid "Serbia and Montenegro"
msgstr ""
msgstr "Sırbistan-Karadağ"
#. iso.code:SC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:186
@@ -1069,12 +1070,12 @@ msgstr "Güney Afrika"
#. iso.code:GS
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:248
msgid "South Georgia and the South Sandwich Islands"
msgstr ""
msgstr "Güney Georgia ve Güney Sandwich Adaları"
#. iso.code:KR
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:113
msgid "South Korea"
msgstr ""
msgstr "Güney Kore"
#. iso.code:SS
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:257
@@ -1084,7 +1085,7 @@ msgstr "Güney Sudan"
#. iso.code:SU
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:243
msgid "Soviet Union"
msgstr ""
msgstr "Sovyetler Birliği"
#. iso.code:ES
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:194
@@ -1109,12 +1110,12 @@ msgstr "Surinam"
#. iso.code:SJ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:200
msgid "Svalbard and Jan Mayen"
msgstr ""
msgstr "Svalbard ve Jan Mayen Adaları"
#. iso.code:SZ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:201
msgid "Swaziland"
msgstr ""
msgstr "Svaziland"
#. iso.code:SE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:202
@@ -1129,7 +1130,7 @@ msgstr "İsviçre"
#. iso.code:SY
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:204
msgid "Syria"
msgstr ""
msgstr "Suriye"
#. iso.code:TW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:205
@@ -1144,7 +1145,7 @@ msgstr "Tacikistan"
#. iso.code:TZ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:207
msgid "Tanzania"
msgstr ""
msgstr "Tanzanya"
#. iso.code:TH
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:208
@@ -1154,7 +1155,7 @@ msgstr "Tayland"
#. iso.code:TL
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:61
msgid "Timor-Leste"
msgstr ""
msgstr "Doğu Timor"
#. iso.code:TG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:209
@@ -1164,17 +1165,17 @@ msgstr "Togo"
#. iso.code:TK
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:210
msgid "Tokelau"
msgstr ""
msgstr "Tokelau"
#. iso.code:TO
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:211
msgid "Tonga"
msgstr ""
msgstr "Tonga"
#. iso.code:TT
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:212
msgid "Trinidad and Tobago"
msgstr ""
msgstr "Trinidad ve Tobago"
#. iso.code:TN
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:213
@@ -1189,119 +1190,119 @@ msgstr "Türkiye"
#. iso.code:TM
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:215
msgid "Turkmenistan"
msgstr ""
msgstr "Türkmenistan"
#. iso.code:TC
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:216
msgid "Turks and Caicos Islands"
msgstr ""
msgstr "Turks ve Caicos Adaları"
#. iso.code:TV
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:217
msgid "Tuvalu"
msgstr ""
msgstr "Tuvalu"
#. iso.code:VI
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:231
msgid "U.S. Virgin Islands"
msgstr ""
msgstr "ABD Virjin Adaları"
#. iso.code:UG
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:218
msgid "Uganda"
msgstr ""
msgstr "Uganda"
#. iso.code:UA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:219
msgid "Ukraine"
msgstr ""
msgstr "Ukrayna"
#. iso.code:AE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:220
msgid "United Arab Emirates"
msgstr ""
msgstr "Birleşik Arap Emirlikleri"
#. iso.code:GB
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:221
msgid "United Kingdom"
msgstr ""
msgstr "Birleşik Krallık"
#. iso.code:US
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:222
msgid "United States"
msgstr ""
msgstr "Amerika Birleşik Devletleri"
#. iso.code:UM
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:223
msgid "United States Minor Outlying Islands"
msgstr ""
msgstr "ABD Küçük Dış Adaları"
#. iso.code:UY
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:224
msgid "Uruguay"
msgstr ""
msgstr "Uruguay"
#. iso.code:UZ
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:225
msgid "Uzbekistan"
msgstr ""
msgstr "Özbekistan"
#. iso.code:VU
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:226
msgid "Vanuatu"
msgstr ""
msgstr "Vanuatu"
#. iso.code:VA
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:227
msgid "Vatican City State (Holy See)"
msgstr ""
msgstr "Vatikan Şehir Devleti"
#. iso.code:VE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:228
msgid "Venezuela"
msgstr ""
msgstr "Venezuela"
#. iso.code:VN
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:229
msgid "Vietnam"
msgstr ""
msgstr "Vietnam"
#. iso.code:WF
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:232
msgid "Wallis and Futuna"
msgstr ""
msgstr "Wallis ve Futuna"
#. iso.code:EH
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:233
msgid "Western Sahara"
msgstr ""
msgstr "Batı Sahra"
#. iso.code:YE
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:234
msgid "Yemen"
msgstr ""
msgstr "Yemen"
#. iso.code:YU
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:235
msgid "Yugoslavia"
msgstr ""
msgstr "Yugoslavya"
#. iso.code:ZM
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:237
msgid "Zambia"
msgstr ""
msgstr "Zambiya"
#. iso.code:ZW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:238
msgid "Zimbabwe"
msgstr ""
msgstr "Zimbabve"
#. iso.code:XW
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:240
msgid "[Worldwide]"
msgstr ""
msgstr "[Dünya Çapında]"
#. iso.code:AX
#: DBarea JOIN iso_3166_1 iso on iso.area = area.id/area.name:250
msgid "Åland Islands"
msgstr ""
msgstr "Åland"

1263
po/cs.po

File diff suppressed because it is too large Load Diff

1208
po/cy.po

File diff suppressed because it is too large Load Diff

1302
po/da.po

File diff suppressed because it is too large Load Diff

1279
po/de.po

File diff suppressed because it is too large Load Diff

1236
po/el.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1188
po/eo.po

File diff suppressed because it is too large Load Diff

751
po/es.po

File diff suppressed because it is too large Load Diff

779
po/et.po

File diff suppressed because it is too large Load Diff

1286
po/fi.po

File diff suppressed because it is too large Load Diff

1186
po/fo.po

File diff suppressed because it is too large Load Diff

755
po/fr.po

File diff suppressed because it is too large Load Diff

1168
po/fy.po

File diff suppressed because it is too large Load Diff

1236
po/gl.po

File diff suppressed because it is too large Load Diff

1236
po/he.po

File diff suppressed because it is too large Load Diff

1238
po/hu.po

File diff suppressed because it is too large Load Diff

1205
po/id.po

File diff suppressed because it is too large Load Diff

1236
po/is.po

File diff suppressed because it is too large Load Diff

747
po/it.po

File diff suppressed because it is too large Load Diff

1257
po/ja.po

File diff suppressed because it is too large Load Diff

1189
po/ko.po

File diff suppressed because it is too large Load Diff

1190
po/mr.po

File diff suppressed because it is too large Load Diff

1313
po/nb.po

File diff suppressed because it is too large Load Diff

781
po/nl.po

File diff suppressed because it is too large Load Diff

1236
po/oc.po

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: picard 1.3.0dev4\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2014-04-19 10:12+0200\n"
"POT-Creation-Date: 2014-05-24 18:36+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,6 +33,10 @@ msgstr ""
msgid "Remove specific release information..."
msgstr ""
#: contrib/plugins/standardise_performers.py:3
msgid "Standardise Performers"
msgstr ""
#: contrib/plugins/lastfm/ui_options_lastfm.py:99
msgid "Last.fm"
msgstr ""
@@ -84,39 +88,39 @@ msgstr ""
msgid "Calculate replay &gain..."
msgstr ""
#: contrib/plugins/replaygain/__init__.py:66
#: contrib/plugins/replaygain/__init__.py:67
#, python-format
msgid "Calculating replay gain for \"%s\"..."
msgid "Calculating replay gain for \"%(filename)s\"..."
msgstr ""
#: contrib/plugins/replaygain/__init__.py:71
#: contrib/plugins/replaygain/__init__.py:75
#, python-format
msgid "Replay gain for \"%s\" successfully calculated."
msgid "Replay gain for \"%(filename)s\" successfully calculated."
msgstr ""
#: contrib/plugins/replaygain/__init__.py:73
#: contrib/plugins/replaygain/__init__.py:80
#, python-format
msgid "Could not calculate replay gain for \"%s\"."
msgid "Could not calculate replay gain for \"%(filename)s\"."
msgstr ""
#: contrib/plugins/replaygain/__init__.py:76
#: contrib/plugins/replaygain/__init__.py:85
msgid "Calculate album &gain..."
msgstr ""
#: contrib/plugins/replaygain/__init__.py:103
#: contrib/plugins/replaygain/__init__.py:111
#: contrib/plugins/replaygain/__init__.py:113
#: contrib/plugins/replaygain/__init__.py:124
#, python-format
msgid "Calculating album gain for \"%s\"..."
msgid "Calculating album gain for \"%(album)s\"..."
msgstr ""
#: contrib/plugins/replaygain/__init__.py:119
#: contrib/plugins/replaygain/__init__.py:135
#, python-format
msgid "Album gain for \"%s\" successfully calculated."
msgid "Album gain for \"%(album)s\" successfully calculated."
msgstr ""
#: contrib/plugins/replaygain/__init__.py:121
#: contrib/plugins/replaygain/__init__.py:140
#, python-format
msgid "Could not calculate album gain for \"%s\"."
msgid "Could not calculate album gain for \"%(album)s\"."
msgstr ""
#: contrib/plugins/replaygain/ui_options_replaygain.py:59
@@ -173,96 +177,101 @@ msgstr ""
msgid "Value"
msgstr ""
#: picard/acoustid.py:102
#: picard/acoustid.py:109
#, python-format
msgid "AcoustID lookup network error for '%s'!"
msgid "AcoustID lookup network error for '%(filename)s'!"
msgstr ""
#: picard/acoustid.py:117
#: picard/acoustid.py:133
#, python-format
msgid "AcoustID lookup failed for '%s'!"
msgid "AcoustID lookup failed for '%(filename)s'!"
msgstr ""
#: picard/acoustid.py:128
#: picard/acoustid.py:155
#, python-format
msgid "Acoustid lookup returned no result for file '%s'"
msgid "AcoustID lookup returned no result for file '%(filename)s'"
msgstr ""
#: picard/acoustid.py:132
#: picard/acoustid.py:166
#, python-format
msgid "Looking up the fingerprint for file %s..."
msgid "Looking up the fingerprint for file '%(filename)s' ..."
msgstr ""
#: picard/acoustidmanager.py:78
msgid "Submitting AcoustIDs..."
#: picard/acoustidmanager.py:81
msgid "Submitting AcoustIDs ..."
msgstr ""
#: picard/acoustidmanager.py:84
#: picard/acoustidmanager.py:95
#, python-format
msgid "AcoustID submission failed with error '%s'"
msgid "AcoustID submission failed with error '%(error)s'"
msgstr ""
#: picard/acoustidmanager.py:88
#: picard/acoustidmanager.py:103
msgid "AcoustIDs successfully submitted."
msgstr ""
#: picard/album.py:65 picard/cluster.py:242
#: picard/album.py:65 picard/cluster.py:264
msgid "Unmatched Files"
msgstr ""
#: picard/album.py:188
#: picard/album.py:189
#, python-format
msgid "[could not load album %s]"
msgstr ""
#: picard/album.py:277
#: picard/album.py:279
#, python-format
msgid "Album %s loaded: %s - %s"
msgid "Album %(id)s loaded: %(artist)s - %(album)s"
msgstr ""
#: picard/album.py:297
#: picard/album.py:296
#, python-format
msgid "Loading album %(id)s ..."
msgstr ""
#: picard/album.py:300
msgid "[loading album information]"
msgstr ""
#: picard/album.py:472
#: picard/album.py:485
#, python-format
msgid "; %i image"
msgid_plural "; %i images"
msgstr[0] ""
msgstr[1] ""
#: picard/cluster.py:151 picard/cluster.py:163
#: picard/cluster.py:158 picard/cluster.py:171
#, python-format
msgid "No matching releases for cluster %s"
msgid "No matching releases for cluster %(album)s"
msgstr ""
#: picard/cluster.py:167
#: picard/cluster.py:177
#, python-format
msgid "Cluster %s identified!"
msgid "Cluster %(album)s identified!"
msgstr ""
#: picard/cluster.py:174
#: picard/cluster.py:188
#, python-format
msgid "Looking up the metadata for cluster %s..."
msgid "Looking up the metadata for cluster %(album)s..."
msgstr ""
#: picard/collection.py:60
#: picard/collection.py:64
#, python-format
msgid "Added %i release to collection \"%s\""
msgid_plural "Added %i releases to collection \"%s\""
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:72
#: picard/collection.py:86
#, python-format
msgid "Removed %i release from collection \"%s\""
msgid_plural "Removed %i releases from collection \"%s\""
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:81
#: picard/collection.py:100
#, python-format
msgid "Error loading collections: %s"
msgid "Error loading collections: %(error)s"
msgstr ""
#: picard/config_upgrade.py:58 picard/config_upgrade.py:71
@@ -351,38 +360,38 @@ msgstr ""
msgid "Swedish"
msgstr ""
#: picard/coverart.py:85
#: picard/coverart.py:197
#, python-format
msgid "Cover art of type '%s' downloaded for %s from %s"
msgid "Cover art of type '%(type)s' downloaded for %(albumid)s from %(host)s"
msgstr ""
#: picard/coverart.py:251
#: picard/coverart.py:357
#, python-format
msgid "Downloading cover art of type '%s' for %s from %s ..."
msgid "Downloading cover art of type '%(type)s' for %(albumid)s from %(host)s ..."
msgstr ""
#: picard/coverartarchive.py:30
#: picard/coverartarchive.py:31
msgid "Unknown"
msgstr ""
#: picard/file.py:493
#: picard/file.py:499
#, python-format
msgid "No matching tracks for file %s"
msgid "No matching tracks for file '%(filename)s'"
msgstr ""
#: picard/file.py:506
#: picard/file.py:515
#, python-format
msgid "No matching tracks above the threshold for file %s"
msgid "No matching tracks above the threshold for file '%(filename)s'"
msgstr ""
#: picard/file.py:511
#: picard/file.py:522
#, python-format
msgid "File %s identified!"
msgid "File '%(filename)s' identified!"
msgstr ""
#: picard/file.py:527
#: picard/file.py:542
#, python-format
msgid "Looking up the metadata for file %s..."
msgid "Looking up the metadata for file %(filename)s ..."
msgstr ""
#: picard/releasegroup.py:53
@@ -417,21 +426,23 @@ msgstr ""
msgid "[no release info]"
msgstr ""
#: picard/tagger.py:363
#: picard/tagger.py:377
#, python-format
msgid "Adding %d files from '%s' ..."
msgid "Adding %(count)d file from '%(directory)s' ..."
msgid_plural "Adding %(count)d files from '%(directory)s' ..."
msgstr[0] ""
msgstr[1] ""
#: picard/tagger.py:519
#, python-format
msgid "Removing album %(id)s: %(artist)s - %(album)s"
msgstr ""
#: picard/tagger.py:498
#, python-format
msgid "Removing album %s: %s - %s"
msgstr ""
#: picard/tagger.py:511
#: picard/tagger.py:535
msgid "CD Lookup Error"
msgstr ""
#: picard/tagger.py:512
#: picard/tagger.py:536
#, python-format
msgid ""
"Error while reading CD:\n"
@@ -439,12 +450,12 @@ msgid ""
"%s"
msgstr ""
#: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:564 picard/util/tags.py:21
#: picard/ui/cdlookup.py:35 picard/ui/mainwindow.py:597 picard/util/tags.py:21
msgid "Album"
msgstr ""
#: picard/ui/cdlookup.py:35 picard/ui/itemviews.py:96
#: picard/ui/mainwindow.py:565 picard/util/tags.py:22
#: picard/ui/mainwindow.py:598 picard/util/tags.py:22
msgid "Artist"
msgstr ""
@@ -475,7 +486,7 @@ msgid_plural "%s (%i releases)"
msgstr[0] ""
msgstr[1] ""
#: picard/ui/coverartbox.py:141
#: picard/ui/coverartbox.py:143
msgid "View release on MusicBrainz"
msgstr ""
@@ -491,59 +502,59 @@ msgstr ""
msgid "&Set as starting directory"
msgstr ""
#: picard/ui/infodialog.py:37 picard/ui/infodialog.py:80
#: picard/ui/infodialog.py:40 picard/ui/infodialog.py:89
msgid "Info"
msgstr ""
#: picard/ui/infodialog.py:85
#: picard/ui/infodialog.py:94
msgid "Filename:"
msgstr ""
#: picard/ui/infodialog.py:87
#: picard/ui/infodialog.py:96
msgid "Format:"
msgstr ""
#: picard/ui/infodialog.py:91
#: picard/ui/infodialog.py:100
msgid "Size:"
msgstr ""
#: picard/ui/infodialog.py:95
#: picard/ui/infodialog.py:104
msgid "Length:"
msgstr ""
#: picard/ui/infodialog.py:97
#: picard/ui/infodialog.py:106
msgid "Bitrate:"
msgstr ""
#: picard/ui/infodialog.py:99
#: picard/ui/infodialog.py:108
msgid "Sample rate:"
msgstr ""
#: picard/ui/infodialog.py:101
#: picard/ui/infodialog.py:110
msgid "Bits per sample:"
msgstr ""
#: picard/ui/infodialog.py:105
#: picard/ui/infodialog.py:114
msgid "Mono"
msgstr ""
#: picard/ui/infodialog.py:107
#: picard/ui/infodialog.py:116
msgid "Stereo"
msgstr ""
#: picard/ui/infodialog.py:110
#: picard/ui/infodialog.py:119
msgid "Channels:"
msgstr ""
#: picard/ui/infodialog.py:121
#: picard/ui/infodialog.py:130
msgid "Album Info"
msgstr ""
#: picard/ui/infodialog.py:129
#: picard/ui/infodialog.py:138
msgid "&Errors"
msgstr ""
#: picard/ui/infodialog.py:139 picard/ui/ui_infodialog.py:73
#: picard/ui/infodialog.py:148 picard/ui/ui_infodialog.py:73
msgid "&Info"
msgstr ""
@@ -615,15 +626,15 @@ msgstr ""
msgid "Contains albums and matched files"
msgstr ""
#: picard/ui/logview.py:92
#: picard/ui/logview.py:109
msgid "Log"
msgstr ""
#: picard/ui/logview.py:95
#: picard/ui/logview.py:113
msgid "Debug mode"
msgstr ""
#: picard/ui/logview.py:107
#: picard/ui/logview.py:134
msgid "Activity History"
msgstr ""
@@ -666,283 +677,298 @@ msgstr ""
msgid " Listening on port %(port)d "
msgstr ""
#: picard/ui/mainwindow.py:266
#: picard/ui/mainwindow.py:299
msgid "Submission Error"
msgstr ""
#: picard/ui/mainwindow.py:267
#: picard/ui/mainwindow.py:300
msgid ""
"You need to configure your AcoustID API key before you can submit "
"fingerprints."
msgstr ""
#: picard/ui/mainwindow.py:272
#: picard/ui/mainwindow.py:305
msgid "&Options..."
msgstr ""
#: picard/ui/mainwindow.py:276
#: picard/ui/mainwindow.py:309
msgid "&Cut"
msgstr ""
#: picard/ui/mainwindow.py:281
#: picard/ui/mainwindow.py:314
msgid "&Paste"
msgstr ""
#: picard/ui/mainwindow.py:286
#: picard/ui/mainwindow.py:319
msgid "&Help..."
msgstr ""
#: picard/ui/mainwindow.py:290
#: picard/ui/mainwindow.py:323
msgid "&About..."
msgstr ""
#: picard/ui/mainwindow.py:294
#: picard/ui/mainwindow.py:327
msgid "&Donate..."
msgstr ""
#: picard/ui/mainwindow.py:297
#: picard/ui/mainwindow.py:330
msgid "&Report a Bug..."
msgstr ""
#: picard/ui/mainwindow.py:300
#: picard/ui/mainwindow.py:333
msgid "&Support Forum..."
msgstr ""
#: picard/ui/mainwindow.py:303
#: picard/ui/mainwindow.py:336
msgid "&Add Files..."
msgstr ""
#: picard/ui/mainwindow.py:304
#: picard/ui/mainwindow.py:337
msgid "Add files to the tagger"
msgstr ""
#: picard/ui/mainwindow.py:309
#: picard/ui/mainwindow.py:342
msgid "A&dd Folder..."
msgstr ""
#: picard/ui/mainwindow.py:310
#: picard/ui/mainwindow.py:343
msgid "Add a folder to the tagger"
msgstr ""
#: picard/ui/mainwindow.py:312
#: picard/ui/mainwindow.py:345
msgid "Ctrl+D"
msgstr ""
#: picard/ui/mainwindow.py:315
#: picard/ui/mainwindow.py:348
msgid "&Save"
msgstr ""
#: picard/ui/mainwindow.py:316
#: picard/ui/mainwindow.py:349
msgid "Save selected files"
msgstr ""
#: picard/ui/mainwindow.py:322
#: picard/ui/mainwindow.py:355
msgid "S&ubmit"
msgstr ""
#: picard/ui/mainwindow.py:323
#: picard/ui/mainwindow.py:356
msgid "Submit acoustic fingerprints"
msgstr ""
#: picard/ui/mainwindow.py:327
#: picard/ui/mainwindow.py:360
msgid "E&xit"
msgstr ""
#: picard/ui/mainwindow.py:330
#: picard/ui/mainwindow.py:363
msgid "Ctrl+Q"
msgstr ""
#: picard/ui/mainwindow.py:333
#: picard/ui/mainwindow.py:366
msgid "&Remove"
msgstr ""
#: picard/ui/mainwindow.py:334
#: picard/ui/mainwindow.py:367
msgid "Remove selected files/albums"
msgstr ""
#: picard/ui/mainwindow.py:338
#: picard/ui/mainwindow.py:371
msgid "Lookup in &Browser"
msgstr ""
#: picard/ui/mainwindow.py:339
#: picard/ui/mainwindow.py:372
msgid "Lookup selected item on MusicBrainz website"
msgstr ""
#: picard/ui/mainwindow.py:343
#: picard/ui/mainwindow.py:376
msgid "File &Browser"
msgstr ""
#: picard/ui/mainwindow.py:347
#: picard/ui/mainwindow.py:380
msgid "Ctrl+B"
msgstr ""
#: picard/ui/mainwindow.py:350
#: picard/ui/mainwindow.py:383
msgid "&Cover Art"
msgstr ""
#: picard/ui/mainwindow.py:356 picard/ui/mainwindow.py:558
#: picard/ui/mainwindow.py:389 picard/ui/mainwindow.py:591
msgid "Search"
msgstr ""
#: picard/ui/mainwindow.py:359
#: picard/ui/mainwindow.py:392
msgid "Lookup &CD..."
msgstr ""
#: picard/ui/mainwindow.py:360
#: picard/ui/mainwindow.py:393
msgid "Lookup the details of the CD in your drive"
msgstr ""
#: picard/ui/mainwindow.py:362
#: picard/ui/mainwindow.py:395
msgid "Ctrl+K"
msgstr ""
#: picard/ui/mainwindow.py:365
#: picard/ui/mainwindow.py:398
msgid "&Scan"
msgstr ""
#: picard/ui/mainwindow.py:368
#: picard/ui/mainwindow.py:401
msgid "Ctrl+Y"
msgstr ""
#: picard/ui/mainwindow.py:371
#: picard/ui/mainwindow.py:404
msgid "Cl&uster"
msgstr ""
#: picard/ui/mainwindow.py:374
#: picard/ui/mainwindow.py:407
msgid "Ctrl+U"
msgstr ""
#: picard/ui/mainwindow.py:377
#: picard/ui/mainwindow.py:410
msgid "&Lookup"
msgstr ""
#: picard/ui/mainwindow.py:378
#: picard/ui/mainwindow.py:411
msgid "Lookup selected items in MusicBrainz"
msgstr ""
#: picard/ui/mainwindow.py:383
#: picard/ui/mainwindow.py:416
msgid "Ctrl+L"
msgstr ""
#: picard/ui/mainwindow.py:386
#: picard/ui/mainwindow.py:419
msgid "&Info..."
msgstr ""
#: picard/ui/mainwindow.py:389
#: picard/ui/mainwindow.py:422
msgid "Ctrl+I"
msgstr ""
#: picard/ui/mainwindow.py:392
#: picard/ui/mainwindow.py:425
msgid "&Refresh"
msgstr ""
#: picard/ui/mainwindow.py:393
#: picard/ui/mainwindow.py:426
msgid "Ctrl+R"
msgstr ""
#: picard/ui/mainwindow.py:396
#: picard/ui/mainwindow.py:429
msgid "&Rename Files"
msgstr ""
#: picard/ui/mainwindow.py:401
#: picard/ui/mainwindow.py:434
msgid "&Move Files"
msgstr ""
#: picard/ui/mainwindow.py:406
#: picard/ui/mainwindow.py:439
msgid "Save &Tags"
msgstr ""
#: picard/ui/mainwindow.py:411
#: picard/ui/mainwindow.py:444
msgid "Tags From &File Names..."
msgstr ""
#: picard/ui/mainwindow.py:414
#: picard/ui/mainwindow.py:447
msgid "&Open My Collections in Browser"
msgstr ""
#: picard/ui/mainwindow.py:418
#: picard/ui/mainwindow.py:451
msgid "View Error/Debug &Log"
msgstr ""
#: picard/ui/mainwindow.py:421
#: picard/ui/mainwindow.py:454
msgid "View Activity &History"
msgstr ""
#: picard/ui/mainwindow.py:428
#: picard/ui/mainwindow.py:461
msgid "&Play file"
msgstr ""
#: picard/ui/mainwindow.py:429
#: picard/ui/mainwindow.py:462
msgid "Play the file in your default media player"
msgstr ""
#: picard/ui/mainwindow.py:433
#: picard/ui/mainwindow.py:466
msgid "Open Containing &Folder"
msgstr ""
#: picard/ui/mainwindow.py:434
#: picard/ui/mainwindow.py:467
msgid "Open the containing folder in your file explorer"
msgstr ""
#: picard/ui/mainwindow.py:459
#: picard/ui/mainwindow.py:492
msgid "&File"
msgstr ""
#: picard/ui/mainwindow.py:470
#: picard/ui/mainwindow.py:503
msgid "&Edit"
msgstr ""
#: picard/ui/mainwindow.py:476
#: picard/ui/mainwindow.py:509
msgid "&View"
msgstr ""
#: picard/ui/mainwindow.py:482
#: picard/ui/mainwindow.py:515
msgid "&Options"
msgstr ""
#: picard/ui/mainwindow.py:488
#: picard/ui/mainwindow.py:521
msgid "&Tools"
msgstr ""
#: picard/ui/mainwindow.py:499 picard/ui/util.py:35
#: picard/ui/mainwindow.py:532 picard/ui/util.py:35
msgid "&Help"
msgstr ""
#: picard/ui/mainwindow.py:520
#: picard/ui/mainwindow.py:553
msgid "Actions"
msgstr ""
#: picard/ui/mainwindow.py:566
#: picard/ui/mainwindow.py:599
msgid "Track"
msgstr ""
#: picard/ui/mainwindow.py:629
#: picard/ui/mainwindow.py:662
msgid "All Supported Formats"
msgstr ""
#: picard/ui/mainwindow.py:661
#: picard/ui/mainwindow.py:695
#, python-format
msgid "Adding directory: '%s' ..."
msgid "Adding directory: '%(directory)s' ..."
msgstr ""
#: picard/ui/mainwindow.py:665
#: picard/ui/mainwindow.py:702
#, python-format
msgid "Adding multiple directories from: '%s' ..."
msgid "Adding multiple directories from '%(directory)s' ..."
msgstr ""
#: picard/ui/mainwindow.py:728
#: picard/ui/mainwindow.py:767
msgid "Configuration Required"
msgstr ""
#: picard/ui/mainwindow.py:729
#: picard/ui/mainwindow.py:768
msgid ""
"Audio fingerprinting is not yet configured. Would you like to configure "
"it now?"
msgstr ""
#: picard/ui/mainwindow.py:811 picard/ui/mainwindow.py:818
#: picard/ui/mainwindow.py:848
#, python-format
msgid " (Error: %s)"
msgid "%(filename)s (error: %(error)s)"
msgstr ""
#: picard/ui/mainwindow.py:854
#, python-format
msgid "%(filename)s"
msgstr ""
#: picard/ui/mainwindow.py:864
#, python-format
msgid "%(filename)s (%(similarity)d%%) (error: %(error)s)"
msgstr ""
#: picard/ui/mainwindow.py:871
#, python-format
msgid "%(filename)s (%(similarity)d%%)"
msgstr ""
#: picard/ui/metadatabox.py:82
@@ -1011,7 +1037,7 @@ msgid ""
"password."
msgstr ""
#: picard/ui/tagsfromfilenames.py:56 picard/ui/tagsfromfilenames.py:101
#: picard/ui/tagsfromfilenames.py:61 picard/ui/tagsfromfilenames.py:109
msgid "File Name"
msgstr ""
@@ -1611,11 +1637,7 @@ msgstr ""
msgid "Regex Error"
msgstr ""
#: picard/ui/options/cover.py:44
msgid "title"
msgstr ""
#: picard/ui/options/cover.py:68
#: picard/ui/options/cover.py:64
msgid "Cover Art"
msgstr ""

1283
po/pl.po

File diff suppressed because it is too large Load Diff

1226
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1199
po/ro.po

File diff suppressed because it is too large Load Diff

1436
po/ru.po

File diff suppressed because it is too large Load Diff

1281
po/sk.po

File diff suppressed because it is too large Load Diff

1262
po/sl.po

File diff suppressed because it is too large Load Diff

1260
po/sv.po

File diff suppressed because it is too large Load Diff

1188
po/te.po

File diff suppressed because it is too large Load Diff

1363
po/tr.po

File diff suppressed because it is too large Load Diff

1241
po/uk.po

File diff suppressed because it is too large Load Diff

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