mirror of
https://github.com/fergalmoran/picard.git
synced 2026-05-07 11:36:11 +00:00
Merge branch 'master' of github.com:musicbrainz/picard into oauth
This commit is contained in:
5
NEWS.txt
5
NEWS.txt
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
||||
67
contrib/plugins/standardise_performers.py
Normal file
67
contrib/plugins/standardise_performers.py
Normal 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)
|
||||
@@ -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",
|
||||
]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)))
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
391
picard/coverartimage.py
Normal 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))
|
||||
104
picard/coverartproviders/__init__.py
Normal file
104
picard/coverartproviders/__init__.py
Normal 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)
|
||||
121
picard/coverartproviders/amazon.py
Normal file
121
picard/coverartproviders/amazon.py
Normal 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)))
|
||||
176
picard/coverartproviders/caa.py
Normal file
176
picard/coverartproviders/caa.py
Normal 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()
|
||||
52
picard/coverartproviders/whitelist.py
Normal file
52
picard/coverartproviders/whitelist.py
Normal 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))
|
||||
@@ -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'),
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
|
||||
@@ -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:'):
|
||||
|
||||
@@ -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=[])
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
116
picard/plugin.py
116
picard/plugin.py
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
122
picard/util/imageinfo.py
Normal 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)
|
||||
@@ -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)
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
2404
po/attributes/hr.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
2407
po/attributes/ru.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
1304
po/countries/hr.po
Normal file
1304
po/countries/hr.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
1264
po/en_CA.po
1264
po/en_CA.po
File diff suppressed because it is too large
Load Diff
1278
po/en_GB.po
1278
po/en_GB.po
File diff suppressed because it is too large
Load Diff
356
po/picard.pot
356
po/picard.pot
@@ -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 ""
|
||||
|
||||
|
||||
1246
po/pt_BR.po
1246
po/pt_BR.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
Reference in New Issue
Block a user