puddletag-1.0.2/0000755000175000001440000000000012236755734013764 5ustar keithusers00000000000000puddletag-1.0.2/NEWS0000655000175000001440000006106312236755654014474 0ustar keithusers000000000000007 November 2013 - 1.0.2 Fixed: Escaped chars in functions weren't being escaped correctly. Check your functions if they make use of this odd behaviour. Added: Opus support. Artwork windows list JPG + PNG's at the same time. 14 July 2013 - 1.0.2 RC1 Added: Dropdown in Extended Tags that works like Tag Panel. Useful for editing multiple valued fields. You can now submit your tags containing MusicBrainz IDs to AcoustID. I suggest you do this. Russian and Czech translations. Compiled translations are also included in default install. __total can be edited in Tag Panel and other places. Fixed: MP4 tagging not working at all. I cannot believe no one picked this up. Discogs didn't return all album info. 31 August 2012 Fixes: Issue 189. puddletag.desktop file installation error with deb package. Python2.6 incompatibility. Changed: AcoustID tag source is not loaded if fpcalc binary not found. 21 August 2012 Fixes: Cutting tags wasn't working. If multiple files were selected in file-view and edited. When changing focus, the new cell would be opened and would remain with the value as before after the change. Changed: Updated icon Updated .desktop file as per issue 186. Added: Russian translation by Viktor Yu. Kovalskiy German translation by Ralf Sarholz 9 June 2012 Fixes: Loading a new directory would sometimes not unload previously loaded directory. Mp3tag tag source are more compatible. AcoustID support without extra depencies except one. Changes: Filesystem panel will not update if hidden. 18 April 2012 Fixes: Fixed issues with deb not un/installing. Fixed issue with dropping album art on Artwork window. Invalid files would still affect the files that have been loaded. Fixed error in parser where it wouldn't detect syntax errors correctly. Changed: Added translations to source tarball. 11 April 2012 - 1.0.0beta5 Fixes: MusicBrainz works. Discogs works better with regards to VA albums. Amazon works again. New Features __md5_sig field for FLAC. regex scripting function. Dutch Translation by Fabian Bakkum. Added AcoustID support, but not for general use yet due to the heavy dependency load. Do not try to make it work unless you're an 'advanced' user. 18 January 2012 - 1.0.0beta1 Masstagging improvements with regards to both matching (courtesy of beets) and searching. $ceiling, $eql, $floor, $round scripting functions. Full support for Mp3tag tag sources. Support for MusicBrainz and Discogs new APIs. More than one file can be written to at a time in the file-view. Just select more than one file, write to a field and Bob's your aunt. 6 June 2011 - 0.10.6 Fix for freezes if Update empty fields and 'Retrieve exact matches.' checked in Tag Sources dialog. 4 June 2011 - 0.10.5 Fixed broken tag sources in release. 3 June 2011 - 0.10.4 News: French translation contributed by Raphael Como. Man page added. New logo created. Added data files to source tarball. Added documentation to source tarball. Added changelog. New Features: Much improved masstagging. Save artwork to file Function. Filter that behaves like Mp3tag's. In Discogs tag source: Added the ability to retrieve track artists for Various Artist albums. This required that the involvedpeople field be renamed to involvedpeople_album as a list of involved people were returned for each track too. These people are added to the involvedpeople_track field. Tag to filename and Tag->Dir functions handle patterns like '../%artist%' and './%artist%/%album%' correctly. Options for setting the pattern used in saving covers to file dialogs. Fixes: Multiple value handling for ID3v2.3 When editing actions, if a field not in the current list of fields was used, then the list of saved fields would contain only that field. Undoing renaming of dirs. Patterns that use scripting functions like $validate(arg1,,arg3) will work correctly in that the second argument will evaluate to an empty string instead of being discarded. Issue 132: Images weren't being added to list of fields to undo. For Discogs Tag Source: Images were being retrieved even if disabled when using textual searches. Changing file in Extended Tags changes the selection in File-View, thereby ensuring changes are written to the correct file. Changes: Unicode support for Replace with Regular Expression function. peformersortorder has been renamed to performersortorder in ID3 tags. Renaming dirs hooks into Tag->Dir function now. The lyrics_us field is now unsyncedlyrics. Functions dialog restores last used function upon first load. A couple related to the QuodLibet library handling. Proper error messages differentiating whether the error occurred while writing to files or renaming dirs, files. The semi-colon character(';') has been removed from the list of invalid filename chars. 23 March 2011 - 0.10.3 Fixes: Deleting tags containing mapped fields. Functions operating on multiple values like Merge Field were broken. peformersortorder is spelt correctly as performersortorder for ID3 tags. Renaming directories when intermediate directories are to be created. 20 March 2011 - 0.10.2 Contains a fix for bug discovered in 0.10.1 where the default dir for saving artwork defaults to home directory. 20 March 2011 - 0.10.1 New Features: Loading subfolders can be turned on/off using the Filesystem Window. USLT Frame support for ID3. A bunch of new fields. Stored Tags window shows the values of all tags found in file. Experimental ID3 support. Don't use unless you really need to. Fixes: Retrieving PUIDS using the MusicBrainz tag source. Adding album art from Tag Source was defective. The Tag Panel not updating with 'previewed' values. Properties window not showing. Changes: Values in the Stored Tags window aren't emboldened anymore due to performance reasons. 8 March 2011 - 0.10.0 puddletag is now licensed under the GPLv3 New Features: Album art for all formats (except ASF) Loading master releases in the Discogs.com tag source. Changes: For ID3 tags, UFID frames are now only loaded if the data can be decoded to UTF8. MusicBrainz artist search retrieves 100 albums by default. The initial reading of a directory can be canceled now. Fixes: Uncaught errors for Tag Sources shouldn't 'freeze' the Tag Sources window anymore. Discogs artist/albums are parsed correctly instead of being mostly junk. Amazon keyword search wasn't working at all. Having periods in the Tag->Dir function were causing problems. 9 February 2011 - 0.9.12 puddletag is now fully translatable. Changes: Users stuck using python-musicbrainz2 < 0.7.0 shouldn't have problems with puddletag crashing on startup. Nor is python-musicbrainz2 a hard dependency any more. The default user agent now set to puddletag/0.9.12. New users will be able to use the Discogs Tag Source 'out of the box'. Fixes include, but are not limited to: Editing __dirname and __dirpath while using QuodLibet library is now possible + tons of Music Library related bugs. Editing Actions sometimes didn't work. The Load Artwork function didn't work as advertised. %__total_files% and %__counter% not working when used within scripting functions. The Artwork Window is floating by default. Fixes an issue whereby the puddletag window would be larger than the screen. 20 December 2010 - 0.9.11 Another bug where the Tag Sources dialog would freeze when retrieving albums is fixed. 18 December 2010 - 0.9.9 A bug was discovered in Discogs that'd make it fail on the vast majority of albums (just not the ones I tested with). This release is to fix that. But I've included the following to: New Features: Discogs uses the Discogs ID field (which you can define) if it's found in your files. You can use your own Amazon and Discogs API keys. __counter and __total_files which you can use in Functions and Actions. Fixes: Case Sensitivity for field names is handled better. 16 December 2010 - 0.9.8 New Features: Translations A new Function to correct incorrectly encoded files contributed by Stjujsckij Nickolaj. MoveUp and MoveDown shortcuts that move the selected files Up/Down in file-view. The folowing fields were added to the MusicBrainz tag source: mbrainz_rating, label, country, isrcs, musicip_puid, asin, barcode Select all in Dir has been removed. I've added two new menu items. Select Next in Dir and Select Previous Dir. Support for GUI plugins. A Discogs Tag Source that uses Discogs.com's XML service. I'm not sure how complete this tag source is since Discogs.com's documentation is woefully impcomplete. Set a user-agent in order to use it. Tag->Dir Using Default theme icons. Changes: The Replace with Regular Expression function now starts from $1 instead of $0. I had to do this in order for Mp3tag's Tag Sources to work. Please update your actions. Previews in the Functions now show previews. Action Shortcuts settings have been moved from Preferences to the Actions dialog. Tools->Sort Selected is now Tools->Sort By. The last sort option is now saved inbetween sessions/loads. Fixes: MP4 mappings and handling of unicode fields in MP4 files. ID3's rating didn't handle missing parameters well. Crashes due to renaming many directories at once. Undo errors while in Preview Mode. Quick Actions weren't working at all. Bug in Amazon Tag Source while retrieving small images. Loading playlist's with any contained file's having commas. Tag Panel not saving if genre isn't present. 30 October 2010 - 0.9.7 New Features: The Autonumbering wizard is now a Function. Fields are now case-insensitive. Which means that if a file contains a field named 'album', writing to 'ALBUM' will rename 'album' to 'ALBUM'. You can add your actions as shortcuts to the Actions menu. See the tooltip for Create Shortcut in Actions dialog for details. Bugs: Just a couple were fixed, but nothing noteworthy. Changes: Filenames are now written using the filesystem's encoding instead of UTF-8 (though you should be using UTF-8 anyway ;). A new logo cause the old one was getting a bit long in the tooth. Functions now save their state. 13 October 2010 - 0.9.6 Major bug fixed where the fields weren't being shown in the Functions dialog. 9 October 2010 - 0.9.5 New Features: Actions and Functions now operate and write multiple-valued fields. A bunch of new Functions, see the [Functions](functions.html) page for a listing. Two new scripting functions copied straight from Mp3tag, $meta_sep and $meta. A new icon. This one designed by Yianni Pappas-Acreman. A new Tag Tools menu, with which you can remove ID3 and APEv2 tags from files where they don't belong. Configurable confirmations. Like when you want to Rename Directories, etc. A __dirname field. Modify this field to rename the directory. UFID frames for ID3v2 Tags. Monkey's Audio File's are now supported. The Actions and Functions dialogs can now be tool windows too (See Windows Menu). All documentation has been updated. Fixes: If it was broken before, it probably works now. The one major fix is that you can load files with messed up encodings now, instead of having puddletag choke on them. Changes: Files that have previews now have a green background while in Preview Mode (Configurable in Edit->Preferences). The configuration for the MusicBrainz Tag Source has been removed. Instead I've opted to return MusicBrainz fields (Album ID, Artist ID, Track ID) by default in mbrainz_track_id, mbrainz_album_id and mbrainz_artist_id. I've also set up default mappings, so that these fields are written to the correct field for each format. Remove ~/.puddletag/mappings to get these. 25 August 2010 - 0.9.4 New Features: Profiles were added to MassTagging, which means now you can do a configuration once and use that forever. Renaming files is now possible within Preview Mode. A new Function called 'Remove Fields' that does exactly that. A new scripting function (contributed by Erik Reckase) that'll convert unicode strings to ASCII. The plugin interface for tag sources is now public. See the docs [here](extending.html). Right click on any directory. Click the refresh button to refresh it. You can now change the shortcut for any menu item. Edit->Preferences->Shortcuts to configure. Also, you can now sort selected tracks using predefined fields. Some defaults are in Tools->Sort Selected. Configure using the 'Edit sort options' button in Preferences. I've finally added a RSS Feed to the website. Bugs: Some bugs related to Preview Mode not working correctly. A bunch of others that aren't really worth mentioning. Changes: I've changed the way Tag Sources store their settings, so you'll need to reconfigure them. 11 August 2010 (0.9.3) New Features: WavPack, MusePack, and basic WMA support (only common fields, not including artwork are supported.) Masstagging, which'll allow you to tag files from multiple tag sources automatically. Preview Mode, wherein you can do all your editing and write to files only once. A 'Load Artwork' Function with which you can load artwork from the file's directory. The plugin interface is now public for functions. Tag sources will be available in the next release. Converting filenames to tags can now take the directory name into account. Bugs: Some Tag Panel Bugs, including entries being replaced if an autocompletion was found of differing case. Genres always being Acapella and when adding entries like Blues\\Rock not being separated properly. And puddletag crashing on loading non-ASCII genres. Copy/Paste not working correctly sometimes. (Sorry that this one slipped by.) Saving artwork using Extended tags would clear the artwork instead if the cover differed between files. Duplicate entries in comboboxes for the Functions dialog are now removed. 4 July 2010 (0.9.2) New features: FreeDB and Amazon tag sources were added. And puddletag can now use the MusicBrainz ArtistID if it's in a file's tag instead of searching for one. Still need to enable it for releases. Tag mappings for tag sources, see the tooltip in Preferences/Mappings for more info. And the ability to load only files based on their extension (Preferences/Tags to configure.) A new applicication icon created by Evan himself. 11 June 2010 (0.90) puddletag now has only two known bugs (and many unknown). That is all. There's some UI changes some new features too for those interested. 11 May 2010 (0.8.8) Fixed some regressions with writing artwork and allowed saving of pictures in jpeg too. 1 May 2010 (0.8.7) New Features: Amazon tag sources plus a bunch of small stuff. Fixes: Very many. 14 April 2010 New Features Multiple tag sources support. Musicbrainz only for now, will add more over the coming week. Tag mappings. Map a tag to whatever you want to. Some tags were changed. See the puddletag.sourceforge.net/tags.html More ID3 tags are supported. Unicode in MP4 tags is supported. Library code has been rewritten. Currently only QuodLibet is supported. Will add more week after next. Some of the scripting functions with odd names (if_, not_, etc.) have been renamed to what they're supposed to be. All icons not created by me are from the Oxygen icon set for KDE. As soon as I found out how to detect if GNOME is running, I'll add some Ubuntu icons. Fixes: Far too many to list. 5 November 2009 New Features: The only new feature for this release is that the musicbrainz dialog now allows you to select individual tracks. I like it better now. Fixes: Some bugs with loading directories were fixed. 11 October 2009 New Features: A Stored Tags dialog that shows the current tags of the selected file as stored on disk. Useful for when editing libraries and the tag differs from the tag on disk. I added an option to allow retrieval of duplicates via a specific tag. This can speed things up for some searches. And finally, a setup script. Fixes: There were a lot but the major ones are: Duplicates can retrieve more than 300 at a time. (My fault for not checking.) Musicbrainz now works for all cases (it gave an error when retrieving via 'album'). There ain't no more barfing of errors while editing text in the pattern combo. Reloading works again (didn't even know it was broken). Changes: Instead of changing the background colour of a row, the Musicbrainz dialog now just bold the text that's to be written. 9 September 2009 (0.7.8) New Features: A duplicates finder, which is super useful. It's not as well tested as I'd like so I'll make that a priority for the next release. Rudimentary file-editing support had been added to the filesystem view. Bugs were fixed where needed (I seriously need to remember to log this stuff) Note that I haven't added any progress bars for these features (due in a week) so just have patience when using them (and keep an eye on the command line for errors). Changes: I've changed the config system to use ConfigObj as PyQt4's too buggy and Python's built in library too sucky. The website looks a lot better. 4 June 2009 (0.7.0) New Features: Loading times are improved by a couple of miliseconds. Showing duplicates can now be slightly fuzzy by adding : in front of the tag that's to be used. Added an :artist fuzzy compare listing to the libary view. Fixes: Sorting or doing anything else while some rows are higlighted is fixed. Other little stuff that I can't remember. Changes: The user interface has been modified just a tad, to be me 'aligned.' 1 May 2009 (0.6.5) New Features: Cut, copy, paste. All Functions now have a saved history. The current selection is now preserved when sorting. Saving and loading is a lot faster. On par with Mp3tag. Changes: Because, of the cut, copy, paste actions being added. All window menus, were move to a new Windows Menu. A progress indicator is shown when loading a music library. An error message is shown (on the console) if a file failed to load. puddletag settings are now stored in ~/.puddletag Fixes: Saving or changing the image type now works in both the tag editor and Extended tags dialog. Also, the image controls being enabled or disabled depending on the file now works properly. Clicking Cancel while loading or saving works instantly. 11 April 2009 (0.6.0) Bugs wrt to tagging were fixed, like: Saving pictures on an mp3 file with the same description. No more 'copy method' doesn't exist errors. Flickering of the >> and << buttons belowe images were removed. Buttons on the image editor are enabled or disabled depending on file. 10 April 2009 (0.5.9) Mp4 support was added (Mutagen > 1.9 is needed and Mutagen <= 1.9 isn't supported anymore.) Bugs wrt FLAC are sorted. And a console version was added. At the moment it's pretty basic, but as time goes on, it'll become better. 23 March 2009 (0.5.4) More bugfixes, especially related with the library treeview. The In Library and Show Dupes action now change the colors of the rows that match instead of hiding those that don't. The Rename Dir action now works with library files. Keep in mind though that it only works for files loaded in the file-view and any other files that happen to reside in the same directory will not be updated. 10 March 2009 (0.5.3) A couple of bugfixes. Actions sometimes behaved unexpectedly in that they didn't take the currently edited values into account. The show dupes button now works. A search was added button to the library window, so that slow searches(like prokyon) don't suck as much. A bug where strings such as '%artist% - %title%.lower(%__ext%) didn't work as expected, because the last part wasn't matched properly. 8 March 2009 Nope, still don't got no console version(next release, definitely). Anyway, some changes from the last release include: The abilitiy to search the music libraries(Albeit slowly). A totally revamped parsing system(though it'll look the same from the users point of view). Like Mp3tag, Actions are now stored separately instead of in one big file. Two extra toolbar buttons, "In library" and 'Show Dupes". If a library is loaded then "In library?" hides all the files that are not in the library. "Show Dupes" hides all the files in the file-view that doesn't have a duplicate(in the file-view). For the next release I'll concentrate on supporting the rest of Mutagen's supported formats, fixing bugs and smoothing the user interface(progress when loading a library, faster search, etc.). Expect some interim updates over the next couple of days and a complete release in about a month(1 April 2009). 5 February 2009 This is basically a bugfix release. The were far too many to list here, but some of the major ones were unicode related like: Unicode support in prokyon, amarok and rhythmbox libraries was fixed. UTF-8 is used for everything. puddletag's unicode issues were sorted(e.g. If the last folder you visited contained non-ascii characters, puddletag would give you a big F-U. Changing a picture using the extended tags dialog now works. Some other interesting stuff include: The user interface has changed. This includes the look of the icons have improved (they're still shitty, but still) If you wanna, you can use the __image tag to show the currently selected file's cover in the Tag Editor (Go to Preferences -> Tag Editor to add it) Hmmm, most of the other changes have to do with code quality and refactoring, which I doubt you'll wanna hear. The only thing I have for the next release is more powerful scripting and (maybe not, but probably) a console version. 20 January 2009 Added Music library support for Amarok, Prokyon and Rhythmbox. Currently, it's kinda sucky, but I'll spend some time on it and fix it as best I can. The extended tags dialog now support editing and saving images. It also acts a bit more like Mp3tag's with options to move to the next and previous file in the file-view. The tag editor and filesystem editors have been converted to tool windows to allow more interface customization. Multiple tags are now available. I've followed Mp3tag's style of allowing the user to create multiple tags by using '\\' in the tag editor and removing multiple tags if the tag was edited in the file view. Nasty bug that deleted any tags not recognized by puddletag was removed. Any bugs to do with the extended tags dialog has been fixed(I hope) I modified much of the loading and saving code to be independent of PyQt so that users using PyQt 4.4.3 don't get those save and loading errors anymore. ...Can't remember what else I did, cause I forgot to update the log. 3 December 2008 Interface stuff: The musicbrainz dialog doesn't freeze anymore. Added a splash screen for the long loading times at the beginning. Genres are now available too 2 December 2008 Just two things Added shortcuts -> Just press Ctrl+W to switch between the file-view, pattern combo and tag combos. Fixed niggling things like some controls not having accelerators. puddletag-1.0.2/puddletag0000755000175000001440000002052312161432626015652 0ustar keithusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- #import psyco #psyco.full() import sys, os from optparse import OptionParser def check_libs(): """Check for required libs. If some not found, show/print a message. Exit if requirements aren't met.""" _libs = [('mutagen', '(usually python-mutagen or just mutagen)', 'http://code.google.com/p/mutagen/'), ('configobj', '(usually python-configobj)', 'http://code.google.com/p/configobj/'), ('pyparsing', '(python-pyparsing or python-parsing in most distros)', 'http://pyparsing.wikispaces.com/'), ('PyQt4', '(python-qt4 usually)', 'http://www.riverbankcomputing.co.uk/software/pyqt/intro')] found = True errors = [] msg = "Error: The %s module wasn't found. Please check that it's installed " \ "properly. Download it from your distro's repository" \ " %s or directly from %s \n" for lib in _libs: try: __import__(lib[0]) except ImportError: print msg % lib errors.append(msg % lib) found = False msg = "Error: %s module wasn't found. %s. Please check that it's " \ "installed properly. You can download it from your distro's " \ "repository (%s), or download directly from %s.\n" try: if not found: from PyQt4.QtGui import QApplication, QMessageBox app = QApplication([]) QMessageBox.critical(None, 'puddletag', '\n'.join(errors)) except: pass if not found: sys.exit(1) def create_log(): """Creates a log file. Redirects sys.stderr sys.stdout output to it.""" join = os.path.join rename = os.rename exists = os.path.exists from puddlestuff.constants import SAVEDIR if not os.path.exists(SAVEDIR): os.mkdir(SAVEDIR) for i in reversed(range(1, 5)): filename = join(SAVEDIR, 'log%d.log' % i) if exists(filename): rename(filename, join(SAVEDIR, 'log%d.log' % (i + 1))) log_file = join(SAVEDIR, 'log.log') if exists(log_file): rename(log_file, join(SAVEDIR, 'log1.log')) f = open(log_file, 'w') sys.stdout = StdOut(sys.stdout.write, f.write) sys.stderr = StdOut(sys.stderr.write, f.write) def init(options, qapp): """Initializes things that need to be initialized. Parses command line options. Loads Translations. Sets fontsize.""" if options.version: #It's already printed. exit() #create_log() if options.debug: logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) load_language(qapp, options.langfile) if options.fontsize: try: size = int(options.fontsize) font = qapp.font() font.setPointSize(size) app.setFont(font) except IndexError: print 'No fontsize specified.' except ValueError: print 'Invalid fontsize specified.' def load_language(qapp, langfile=None): """Loads the language file to be used by puddletag. app => QApplication object. langfile => If None, then the last option the user chose will be used. Should be a path to a Qt translation file (.qm).""" TRANSDIR = puddlestuff.constants.TRANSDIR global translators #Needs to live throughout app. translators = [] if langfile: if not langfile.endswith('.qm'): print translate('Defaults', 'Invalid translation file.') langargs = None else: langargs = os.path.basename(langfile), os.path.dirname(langfile) else: langargs = None if not langargs: cparser = PuddleConfig() lang = cparser.get('main', 'lang', u'auto') langs = get_languages([TRANSDIR]) if lang != 'auto': if lang in langs: f = langs[lang] langargs = os.path.basename(f), os.path.dirname(f) if not langargs and lang != 'default': locale = unicode(QLocale.system().name()) if locale in langs: f = langs[locale] langargs = os.path.basename(f), os.path.dirname(f) if langargs and langargs != 'default': translator = QTranslator() translator.load("qt_" + QLocale.system().name(), QLibraryInfo.location(QLibraryInfo.TranslationsPath)) translators.append(translator) if 'puddletag_' in langargs[0]: translator = QTranslator() locale = langargs[0][len('puddletag_'):-len('.qm')] translator.load("qt_" + locale, QLibraryInfo.location(QLibraryInfo.TranslationsPath)) print "Locale: " + locale translators.append(translator) translator = QTranslator() if translator.load(*langargs): translators.append(translator) elif langargs != 'default': translator = QTranslator() translator.load("qt_" + QLocale.system().name(), QLibraryInfo.location(QLibraryInfo.TranslationsPath)) print "Locale: " + unicode(QLocale.system().name()) translators.append(translator) else: print "Loading default (ie. no) translation." for t in reversed(translators): qapp.installTranslator(t) puddlestuff.constants.trans_strings() puddlestuff.puddleobjects.trans_imagetypes() def parse_cmd_options(): usage = "Usage: %prog [options] [directory path]" parser = OptionParser(usage=usage) parser.add_option("--langfile", dest="langfile", default='', help="Path to a translation (.qm) file.", metavar="LANGFILE") parser.add_option("--fontsize", type='float', dest="fontsize", help="Default fontsize to use (in points).") parser.add_option("-d", "--debug", action="store_true", dest="debug", default=False, help="Show (useless) debug messages.") parser.add_option("-v", "--version", action="store_true", dest="version", default=False, help="Show version info and exit.") return parser.parse_args() def print_info(): """Print program info.""" from puddlestuff import version_string, changeset if changeset: print translate('Defaults', 'puddletag Version: %1, Changeset: %2').arg( version_string).arg(changeset) else: print translate('Defaults', 'puddletag Version: %s' % version_string) class StdOut(object): """Class to redirect stdout/in/err.""" def __init__(self, old_write, new_write): """old_write should be the original sys.stdout.out new_write is a function is what sys.stdout.out will be replaced with. Text will be passed to both functions.""" self._old_write = old_write self._new_write = new_write def write(self, text): self._old_write(text) try: self._new_write(text) except: pass if __name__ == '__main__': check_libs() from PyQt4.QtGui import QApplication, QPixmap, QSplashScreen, QIcon from PyQt4.QtCore import (pyqtRemoveInputHook, QTranslator, QLibraryInfo, QLocale) import pdb, logging pyqtRemoveInputHook() #Load puddletag modules. from puddlestuff import resource #Needs to be first as other modules use it. import puddlestuff.constants from puddlestuff.puddleobjects import get_languages, PuddleConfig from puddlestuff.translations import translate #Init. print_info() app = QApplication(sys.argv) options, filenames = parse_cmd_options() init(options, app) #Depends on init being called first. from puddlestuff.puddletag import MainWin from puddlestuff.puddlesettings import load_gen_settings app.setWindowIcon(QIcon(":/appicon.png")) pixmap = QPixmap(':/puddlelogo.png') app.setOrganizationName("Puddle Inc.") app.setApplicationName("puddletag") splash = QSplashScreen(pixmap) splash.show() app.processEvents() win = MainWin() splash.close() win.setVisible(True) app.processEvents() #Check if dirnames passed on command line. if filenames: dirname = filenames[0] if dirname and os.path.exists(dirname): win.openDir(dirname, False) elif load_gen_settings([('&Load last folder at startup', False)])[0][1]: if win._lastdir and os.path.exists(win._lastdir[0]): win.openDir(win._lastdir[0], False) app.exec_()puddletag-1.0.2/TODO0000644000175000001440000000113311764714347014452 0ustar keithusers00000000000000Add ability to cancel a tag source lookup. Ability not to save artwork to tag, or to tag & file or just file or not at all. The only big things I can think about are: Rhythmbox and mpd library support. Library stuff, like finding duplicates, maybe some stats (I hate that most programs don't provide good lib stats) A better console version. It shouldn't do much besides editing tags, running functions/actions. Integrating the logging thing with the whole app and having logs for most everything. Massive, massive code cleanup. Docs for everything that needs it like plugins and all the new stuff.puddletag-1.0.2/README0000644000175000001440000000761711612773575014657 0ustar keithusers00000000000000What it is ========= puddletag is a audio tag editor for GNU/Linux similar to Windows program Mp3tag (http://www.mp3tag.de). Unlike most taggers for GNU/Linux, it uses a spreadsheet-like layout so that all the tags you want to edit by hand are visible and easily editable. The usual tag editor features are supported like extracting tag information from filenames, renaming files based on their tags by using patterns (that you define, not crappy, uneditable ones). Then there're Functions, which can do things like replace text, trim, change the case of tags, etc. Actions can automate repetitive tasks. You can import your QuodLibet library, lookup tags using MusicBrainz, FreeDB or Amazon (though it's only good for cover art) and more, but I've reached my comma quota. Supported formats: ID3v1, ID3v2 (mp3), MP4 (mp4, m4a, etc.), VorbisComments (ogg, flac), Musepack (mpc), Monkey's Audio (.ape) and WavPack (wv). Why it is ========= Keeping an XP partition just for Mp3tag just wasn't feasible anymore. How it's different ================== To Mp3tag, not that much. It has more or less the same UI and functionality. You'll feel right at home here for the most part. However, puddletag isn't a clone, so check the skim the docs section on the puddletag website (puddletag.sourceforge.net) for more details. What you need ============= At least Python 2.5 available from http://python.org. PyQt4 (4.5 or greater) (http://www.riverbankcomputing.co.uk/software/pyqt/intro) for the GUI. PyParsing (1.5.1 or greater) (http://pyparsing.wikispaces.com) takes care of the parsing... Mutagen (1.20 recommended, 1.14 required) (http://code.google.com/p/mutagen/) is used as the tagging lib and... ConfigObj (4.5.0 or greater) (http://code.google.com/p/configobj/) takes care of saving settings. The following are recommended python-musicbrainz2 (0.6.0 or better) (http://musicbrainz.org/doc/python-musicbrainz2) for MusicBrainz support. QuodLibet must be installed in order to edit a QuodLibet library. Downloading/Installing ====================== From source: Install the dependencies listed above. For Debian-based distros, run the following as root to install them aptitude install python-qt4 python-pyparsing python-mutagen python-configobj python-musicbrainz2 python-imaging Download the source tarball from http://puddletag.sourceforge.net. (If this file came from that tarball, ignore everything on this line.) Unzip it. You can run puddletag from that directory by typing ./puddletag in your console. Alternatively install it by running python setup.py install as root in the unzipped directory. puddletag should appear in your Multimedia (or Sounds etc.) menu. If not run 'desktop-file-install puddletag.desktop' as root in the unzipped directory. Installing from the Debian package. This package has been created on and for Ubuntu 10.04, but has been reported to work on Ubuntu 10.10, Sabayon and Debian Squeeze. Download the package from http://puddletag.sourceforge.net. Install using your distros preferred method (usually double clicking should suffice). Or: Run as root dpkg -i /path/to/puddletag-deb. Install dependencies using your favourite tool. Run puddletag from your Multimedia menu. Development builds are available via svn: svn co https://puddletag.svn.sourceforge.net/svnroot/puddletag puddletag License ======= puddletag licensed under the GPLv3, which you can find in its entirety at http://www.gnu.org/licenses/gpl-3.0.html Updates ======= Release usually go out about once a month. Subscribe to the RSS feed at the website if you want to be updated. Support ======= Bugs go to the issue tracker at Google Code (http://code.google.com/p/puddletag/issues). Feature requests and things of general concern go on the forum (http://sourceforge.net/apps/phpbb/puddletag). For anything else I can be contacted via email at concentricpuddle@gmail.com. puddletag-1.0.2/changelog0000644000175000001440000002606412236755457015650 0ustar keithusers000000000000007 November 2014 - 1.0.2 Fixed: Escaped chars in functions weren't being escaped correctly. Check your functions if they make use of this odd behaviour. Added: Opus support. Added: Artwork windows list JPG + PNG's at the same time. 14 July 2013 - 1.0.2 RC1 Added: Multiple-valued fields can be added using '\\' in extended tags. Added: Czech translation by Pavel Fric. Fixed: MP4 tagging not working at all. Added: Dropdown in Extended Tags that works like Tag Panel. Fixed: Directory renaming not stripping invalid chars. Fixed: $validate scripting function failing when '/' in arguments. Fixed: Unable to delete fields if __total populated. Added: __total can be edited in Tag Panel and other places. Fixed: Album art can be dragged from browser. If link can be resolved, image will be loaded. Added: Confirmation dialog if copying large amounts of data. Added: In field selection dialog for columns, fields are listed in combo box. Added: Support for MusicBrainz cover art. Fixed: Search by ID for MusicBrainz tag source. Added: Directory modified date is force-changed if files are modified. Added: disambiguation to album title for MusiBrainz so that album titles would be "Somaro (Deluxe Edition)" instead of just "Somaro". Added: Tags can be submitted to AcoustID. Added: Russian translation. Fixed: Removed invalid files from puddletag.pro for translations. Changed: Column settings take ordering made by user (by dragging, etc) into account. Fixed: checked Actions being overwritten by check Quick Actions selections. Added: catno field to Discogs tag source. Fixed: Discogs didn't return all album info. Changed: Discogs multiple artists are concatenated using &. Added: __total can be added to Tag Panel and edited. 31 August 2012 - 1.0.1 Changed: AcoustID tag source is not loaded if fpcalc binary not found. Fixed: Issue 189. Fixed: puddletag.desktop file installation error with .deb file. Fixed: python2.6 incompatibility. 21 August 2012 - 1.0.0 Added: Updated icon Fixed: Cutting tags wasn't working. Added: Russian translation by Viktor Yu. Kovalskiy Fixed: If multiple files were selected in file-view and edited. When changing focus, the new cell would be opened and would remain with the value as before after the change. Added: German translation by Ralf Sarholz Changed: Updated .desktop file as per issue 186. Fixed: Encoding is added for genre field. Fixes http://sourceforge.net/apps/phpbb/puddletag/viewtopic.php?f=4&p=699&sid=10751cabefe27ffcd74eea2dde7663f8#p699 Fixed: Filter wasn't working with filename fields like __filename. Added: To .desktop file, options that'll make it possible to right click in FM and open in puddletag. 9 June 2012 - 1.0.0RC1 Fixed: Issue 183 where the Tag Sources dialog wouldn't unfreeze for invalid results. Added: Copy/Paste now copies the data as JSON to clipboard. Fixed: Masstagging was discarding albums with same name. Fixed: Issue 181. regex function wasn't working on Python 2.6. Fixed: Edge cases with Mp3tag tag sources. Fixed: Undoing filename related changes weren't being effected. Fixed: Issue 180 where directories weren't unloaded when loading a new one. Added: Status message for Mp3tag tag sources. Fixed: Creating new actions duplicated old ones. Added: Made it impossible to save Functions with invalid field names. Fixed: AcoustID doesn't have as many dependencies. Only chromaprint as included sampsyo's pyacoustid source and wrote supporting libs to contain only needed code. Changed: Filesystem panel will not update if hidden. Works for loading large directories so puddletag won't freeze for an extended period. Added: AcoustID tag source also returns acoustid_fingerprint field. Changed: If directory was created when removing a file, that directory will be removed if change is undone. 18 April 2012 - 1.0.0beta6 Fixed issues with deb not un/installing. Fixed issue with dropping album art on Artwork window. Invalid files would still affect the files that have been loaded. Fixed error in parser where it wouldn't detect syntax errors correctly. Added translations to source tarball. 10 April 2012 - 1.0.0beta5 Added AcoustID support. Not complete as yet. Featuring artist in MusicBrainz tag source are parsed correctly. Rate limiting for FreeDB as too many requests at once causes errors. Restart numbering checkbox in Autonumbering wizard now hides the Total spinbox so that track numbering is generated for each directory. $num function uses the length for the track number only and not the total. Massively updated parser. ID3v2.3 frames are written in same order as Mp3tag's. $regex function added. Fixed Amazon tag source as now requires AssociateTag to do lookups. Added parameter to $num function to use track separators or not (default not) For functions like $meta_sep to not use parsed patterns as things like \\\\ were being parsed as one separator instead of two. VA album lookups for Discogs. Dutch Translation by Fabian Bakkum. Added __md5_sig field that lists internal MD5 signature of FLAC files. For Discogs, fixed albums where tracks don't have lengths weren't being loaded. Fixes issue 174, where if scrollbar shown in Functions dialog, it sometimes hides text. 12 February 2012 - 1.0.0beta4 Helpful menu items added to about menu. Updated documentation. Fixed centering of images in docs. When Discogs returned no results there'd be an error. 24 January 2012 - 1.0.0beta3 Fixes for issue 171. 23 January 2012 - 1.0.0beta2 Fixed MusicBrainz not working (issue 170). 22 January 2012 - 1.0.0beta1 Improved masstagging for albums with weird track numbers. Mastagging matching improved (courtesy of beets) Masstagging ignores stuff inbetween brackets like "this name (disc 1)" and retries the search. Mastagging checks all files and rearranges for best matches instead finding the best match for one file and putting that match out of the running for checking with later files. $round, $ceiling and $floor scripting functions. Mp3tag tag sources are fully supported. Files containing APEv2 tags are loaded even if the file is not a valid audio file. Confirmations when exiting/loading dirs if file's still contain previews. If writing previews to files fails, then those files' previews are kept. $eql scripting function. Fixed a bug whereby if a file has an invalid picture type, puddletag would not start up. https://sourceforge.net/apps/phpbb/puddletag/viewtopic.php?f=4&p=542#p542 If changed field for one file and multiple files selected, all will be update. Plus others. Quickactions and actions' checked settings are now stored in different keys in config. Plugins are sorted in plugin chooser widget. Support for MusicBrainz's new API. Update Discogs tag source to use new Discogs API as per http://www.discogs.com/help/forums/topic/234138. An error would be raised when trying to save invalid picture data. Data is discarded now upon saving. Issue 167 --version command line option. Request to check log to for more info in error messages. 24 August 2011 - 0.10.6.3 Did modifications for inclusion into Debian. 21 August 2011 - 0.10.6-2 No source changes. Added missing files required for Debian packaging. 6 June 2011 - 0.10.6 Fix for freezes if Update empty fields and 'Retrieve exact matches.' checked in Tag Sources dialog. 4 June 2011 - 0.10.5 Tag Sources were broken in the release. 3 June 2011 - 0.10.4 News: Man page added. New logo created. Added data files to source tarball. Added documentation to source tarball. French translation contributed by Raphaël Rochet. Added changelog. New Features: Much improved masstagging. Save artwork to file Function. Filter that behaves like Mp3tag's. In Discogs tag source: Added the ability to retrieve track artists for Various Artist albums. This required that the involvedpeople field be renamed to involvedpeople_album as a list of involved people were returned for each track too. These people are added to the involvedpeople_track field. URL links for albums in Tag Sources dialog are shown for all Tag Sources (except FreeDB). Tag to filename and Tag->Dir functions handle patterns like '../%artist%' and './%artist%/%album%' correctly. Options for setting the pattern used in saving covers to file dialogs. Ability to drag and drop folders on file-view. Fixes: Lines that contain '/' being parsed incorrectly in Import Text File dialog. FreeDB tag source artist/album parsing. Undoing renaming of dirs. MusicBrainz Tag Source ratings error. Tag->Dir creating subfolders when it shouldn't. Issue 132: Images weren't being added to list of fields to undo. Numbering of COMM frames (and others like it) to have frames with the same description being number 0,1,2,3 instead of 0,01,002, etc. When editing actions, if a field not in the current list of fields was used, then the list of saved fields would contain only that field. If a file contained an ID3v2.2 tag than that tag would be shown twice in the Stored Tags window. Patterns that use scripting functions like $validate(arg1,,arg3) will work correctly in that the second argument will evaluate to an empty string instead of being discarded. For Discogs Tag Source: Images were being retrieved even if disabled when using textual searches. Changing files in Extended Tags changes the selection in File-View, thereby ensuring changes are written to the correct file. Editing colour in Extended Tags remaining green even if changed. Multiple value handling for ID3v2.3 Changes: Unicode support for Replace with Regular Expression function. Overhaul of Masstagging internals. peformersortorder has been renamed to performersortorder in ID3 tags. Images can be removed when the Cover Varies in Extended Tags. The semi-colon character(';') has been removed from the list of invalid filename chars. Renaming dirs hooks into Tag->Dir function now. lyrics_us is now unsyncedlyrics Proper error messages differentiating whether the error occurred. while writing to files or renaming dirs, files. Subfolder checkbox in the Filesystem window being enabled when it had no reason to be. If last loaded dir is not found on startup, then all parents of that dir (still existing) will be expanded. Functions dialog restores last used function upon first load. In QuodLibet Library: Changes the fields: _rating to rating, _skipcount to __skipcount, _playcount to playcount. All fields are caseless. Fixed the loading of fields with numbers for values. Added the __tag and __tag_read fields. puddletag-1.0.2/PKG-INFO0000644000175000001440000000131212236755734015056 0ustar keithusers00000000000000Metadata-Version: 1.1 Name: puddletag Version: 1.0.2 Summary: An simple, powerful audio tag editor. Home-page: http://puddletag.sourceforge.net Author: concentricpuddle Author-email: concentricpuddle@gmail.com License: GNU General Public License v2 Download-URL: https://sourceforge.net/projects/puddletag/files/latest Description: UNKNOWN Keywords: tagging ogg mp3 apev2 mp4 id3 Platform: UNKNOWN Classifier: Development Status :: 2 - Unstable Classifier: Intended Audience :: Users Classifier: Natural Language :: English Classifier: Operating System :: GNU/Linux Classifier: Programming Language :: Python :: 2.6 Classifier: License :: OSI Approved :: GNU General Public License v3 Classifier: Topic :: Tagging puddletag-1.0.2/HACKING0000644000175000001440000000120411612773575014750 0ustar keithusers00000000000000Some things people have said about the puddletag code: 'Holy sh**' - some atheist after viewing the library code. 'Can somebody blind me, cause I don't think I'll be able to forget what I just saw if I still have sight.' - An experienced coder after opening a random puddletag source file. 'This thing runs?' - Some guy. 'Suddenly, I'm in the mood for spaghetti.' - Some guy's buddy after checking to see what his buddy was exclaiming about. Feel free to knock out an email to concentricpuddle@gmail.com if you want to contribute or say anything about the code. (Give me at least a week to reply though, I don't check my email every day.) puddletag-1.0.2/setup.py0000644000175000001440000000256512236752374015503 0ustar keithusers00000000000000# -*- coding: utf-8 -*- # from setuptools import setup from distutils.core import setup # try: # from setuptools import setup # except ImportError: # from distutils.core import setup import puddlestuff setup( name='puddletag', version=puddlestuff.version_string, author='concentricpuddle', author_email='concentricpuddle@gmail.com', url='http://puddletag.sourceforge.net', download_url='https://sourceforge.net/projects/puddletag/files/latest', description='An simple, powerful audio tag editor.', packages = ['puddlestuff', 'puddlestuff.mainwin', 'puddlestuff.libraries', 'puddlestuff.audioinfo', 'puddlestuff.tagsources', 'puddlestuff.tagsources.mp3tag', 'puddlestuff.masstag', 'puddlestuff.plugins'], keywords='tagging ogg mp3 apev2 mp4 id3', license='GNU General Public License v2', classifiers=['Development Status :: 2 - Unstable', 'Intended Audience :: Users', 'Natural Language :: English', 'Operating System :: GNU/Linux', 'Programming Language :: Python :: 2.6', 'License :: OSI Approved :: GNU General Public License v3', 'Topic :: Tagging', ], scripts = ['puddletag'], data_files=[('share/pixmaps/', ('puddletag.png',)), ('share/applications/', ('puddletag.desktop',)), ('share/man/man1/', ('puddletag.1',))] ) puddletag-1.0.2/puddletag.png0000664000175000001440000013077111774632374016456 0ustar keithusers00000000000000PNG  IHDR\rfsBIT|d pHYsjtEXtSoftwarewww.inkscape.org< IDATxygy{Z{}F3eFKo[el8` !,'9 $'d=ߕ|NcWi$/ xe[4f齻zill}]}i]U]]U~?+RDa~BO B>D ByHD0)1"!q}Ky}WVH0.`oasB)>(nu] 3eo^=>]pe&gQ(ND*эLҞTX6ݽ"_[24)o[nY89]W,j}eCO!B걔V;~ɰ2-[u/uM|oŸ6/) w} v[Yd|!r4 ]_S_~j!ײX#6\/GD8 r^6%wi/M ُiׯ;ZN>b.~#/d~%_6)c[wZ ~߶mX/+>wն 9i/ڿ>f i?DNמiIK/[/UҨ䰛N{R8JOIbG*ˤߥC2Mㆍ7|_u޼`> }?FutՋFJ) @i6ART:ud?B(C:9L7 !w :'uͦ$ߺaƃ@$غuˊBE~iK+,YB0Va1R`y=qesÆ^߸-lm<-=kU{ _Aljoՠ bukm>K lxF+N:~N3^8Esr\rUPC~ضmX<_̶]%' p`&Pf 6P.*e!*5f ܱx\ű"ti(6o_^?3*'fǗw?,KhaG R }% Ԫ+̏@{?=d5Cf)J!{OًWG@s+M~'9uK,f_~F ߀u`xxr/|?,xriJ+pe Lr(Ud !0 M}ˆN 8m9Edzb&'@İZ~u_|mE63x_0M|:moTg 6_a"_[_>=)zu׬ReG4{yVG~R8NqY ml8V*I}A%J p8T<8+̽ێRH5eׯ8/mfܘNϼwNO<{7^ ]בR.AcJ)+fu53ϲ39YֹX ȗ 4 ݈P˒ GT_qG0H#nPgR/a.嶺/o0O)_m6 ڬ<[$0 KytO[Ua0ޟgb^C9*Ln{1SE*eam2tJ+ޅiWLV㩬ή䨳SkTR TwT_*hQGS((][q-gToo7^_;D݀l:ܓf2nzr?GJQ~q}~չLϬr"ٞcj`ntͣ+x"C~)8$~ Ñ.6@ !V.7pUFH/x7/46O\hPByտii"| MjStA~^i4^wgr"}v5T*"[yT*e@iZ0-4*0HVY(W_sfgCd߃ -i% nR2H OE$ g4B\!䦰](I}jbNrZ aOz>KotHh]B@|Aчg4~2oԽjS?oKGG"R$lݺesIs7=,tGKVXߍ˻b'VI#5`2ҽ?4yT 'E]Y`b*c`@Ll0vj#}LSJpXi h4b@^\ (Uo"$]#x&CiIW?̻]ħ~ ضmXf2\ו2n0s7F ]DpU^%\ܚFnVԞg}V uDZ,wY5ٻiKI&3cx`OI"ܧ g(W Me`B[č]Qw W.,}/x(' SLb{<0b> !&`MgMgU -yiw\Ep|b,KV$iWTc0/5KQqq]:@ÿoy7n4GB$l#7C=7sp"l (6{<ݱζPb\e)J 6!-9 1_vK v+>;‰]:~r4{!R'BHKpb'-L/*:J<㹜Ƴ9%ɤ#I!b=P}7/rm]ot~"?[UΛ>WKſ[O5 2`m 94dJm΍MZfi)%(?HMaûw ~ +qGfHPM̯&z#M7MB_ɇTgF WTA/9~RP!_Oɷb]yO[o^g3!4-$t,|  i,~IFX s/ Ǎ9, |?Ljkd89u jP1a@c{ib -W Y1fOg5jRԘ@*^ċ?D>X pvЕXNooϟ\zq]w~sӣ>\oT*(+΁Y|!\Ѥ _ Au;?B]S+vc荘z,m3g=& 2Sw:"|&aC€Ky\Tf04- w܀n3*#pw#0{ƥ9mcLT'\U*z\o[i7nWs" n߷>wَGo`8uWΪo?#xG^!fK@. |W GE9翭xTS=9#޹sg|hz(V X{7>H7&iK5;_ (V: Ggtj)B.Ԯh5-$#R<(3 zkR * ,JaYչrÆ{=?^)7-gc-߿nBy.CW5vR|:/n_ո,ma'׃&G] }e/PeEp>Q/x>L[be 9^B"T_vPureHA\NB5 .oJJy/%I&SmmQR0J\lݺ=wwˏ_AׇuH)ʇg ?a&q ?Pt6NdV ВׄR|r,/W,kP]~.A*Zm )v`m2f0<FBM =.+#t&T]JeEĊwcZV_ymM?!//pA> ]Pql`glJwWYѺ.(~wrh7D +\`g=Ir7fqGy ee)[2 Hi!z-?I!AU>X ,3Ӝ6@*@As܀BI:`4nbn OSxjWo J qKAww׷.~Sq"RUspcnJxJu0Z\y8bjM#'X𙾗.x3Yo9J!傏4GBPh{{W]˕ۋ%}{0XetgGa:PzÓ:LaAdu0Cgʜ?̚,@(WŲ ,4L{+8Tդ3ϫM%kh=q#ݰ !=ܴzC'pa+͛/?⬳g;Ap3?Ԗ<ug]sT{3G_X:ʺ7Q!' n аZ>=8BO[#o"-j7%E_,~ "WZ64s>8MB# t!DL6fR NjڷꊋZ\:Ho+7Ai1EhLT\Y/Y~xM]`?ez8pmtwwq%ܓ:1omé|xNIv!chfi^CT*~!>bY9՚om5}`[ { 3Ԅ2_Zgqdv'{*CCeֵN)J3+{m&*o(\>౱k +8!_6 K+l0y[(Ɇ&,WrEatb9/c9Vcɘ#H*࿞iB=|3$um.\ŊqLnٲW6Ƨƾ1U7Ug}Ș>+piz\'&72CտbGȪ!BĢvdD//C*5)yCE'BodW~e*F/3vFU /44!nI֞z\+M%G,6TbDS`J:̚tV 1z{':OfPզ1 } BcR!L!?)gFO7p2;/уc̫;nwpE?Nw"; QT(<սC!,"yީj>xC`etx"SvwĬ!&y,m󬻐oZ|} v53 f^fE#]tUZ0CG .pf)2ppRa'0zg':)7?oՊ4z0gPJQ^JQ^ɵtMolM `۶a=/<}O5 ß@L3RˡOWp6ޫB)6ѵA^7U5Ĕ\[Y +as#‡iHSܯ(}QRp$;?m=|mwWC 5'85ׇaSܰ"M @ڂ3חCP3у3YVgj<SL ]f-iZ?"! :R|b ÅR'^V299-ox}v{mp*ͽxg, v3>Y]pLò,m-㌧-t`GA3a"/$ЬlXm LWsZúUqq4]>u C ՜'Țzym"-^SN]r9WwKeE}Od4bW a`S{wu#+Tx/m4U*G0Z\1i>Ket.SmtږUeżƁ pb"Vw* yz?>q5,E&ѶmÝa}Zl6g?*_);?Yۨ%e.i8!u܉¿ t lH{uz0!k( >:TbK<&Bفyڇe6ьq!3P-AVo87yY.~?axF#f#X~!qApaF^+>i; s$ Wu MnSgmaPχ' @Z+ QzaAG[mʋ(b*Zg9ov(ڝrzj[69t\L "&ʹxsՄY!'q]5G IDAT 5F,Ʉ#x"!X@ֻY{e Ҕt]/,;e wbYk &n X (PΆG ],AP)ip̨U=6qC1viC޿40p0IXj~ ]Y`+J(^N`^6rzC=wlٲ\9O8qmϔ~dG%EpY"Pv}- x ʮeƒzEݢɲ˴?]hFmSPpiwT\O~6Ov:|zEHS˘I{:9^%PV ~sY9!b^[#VkF\2$(0⋙T:75xܹpus:3tǛ˪!r@xB3a2q%(JnT]X"nK 6N~4Jr~EiBq~ܩ'Ȟu_`(gf&mۆ֯X~8q\*;rL"($0_^n &8cPjf}L07BAD0K`Yb8]],#S0llFM }L f }VݮPˤ8mIb;V敂 zO(MA{ \ןcd\%|+Vt~0fY%B’lY]=㼵;wԂ@kbX)&bJ+P)] -L*Ă+N"`z@ pJ2G[K6;ƞ>Ln'8Ϳ8ApcqCJD՞cǝزkM?zo¥ iiG v+%_0R7 [0w+FeR:me[)5y2A``C{x/706Du{w@P,H{ ߬o$W ,i vW$_o5']<@"&8J7MMo4\% )J\?ime"g੖*9Hp,y~Rc_IDR p\)[7l$f Nu'#pNyG4ښ'%2ZZ撖 +NF0tI:0ݐY\" N3]. F8h!t-$.,Y$r34]|3 +1@9ぐ_QMM,P (}FoB7 )1DX:{aL.%0b]h1'xp:l}>Tn| ԗ G$5xQ -T 1MqR甔ϚX2dhO .Nw[~PH}BW9cǕ+w@>Y%1m .@XMft0RP )xk[Th=щ l4__)oYeM̀O@UTyvZkmFح`)F%f-ŠB %xd" aoS:p^`6ka= b\c qVlnV݄gs<9Wi!(UMRB!xy^ ScxҨSky`eWo Og@Y5b |j)-8B+/ɨ3Z<2bz-hkʁǬUFŤ* 0<ԩ?o]@, uA 3Nl 0DT 䬇vb[K.Wrl<)x F  bbebMGh7m–P.: v5v$1d[?`{^c{^P8'%]঩ny=Ygrir|K7ntx48.@X^I$xpokǭ>߁ų?ïL"%fTaj +A͏pj?zA4%p+mNڒ€8'!'-bڭ*hӆ+zrt$Ð"W b56 U*1caތS9h6}U"P|zi8BOTVxB*loNvbewF*+aW وs /BHK*No81$ϱby" p"~ /Lԙ..DTyVag1)wt־ 4COj_.W [l~g&]y) eƬPKG8{F_k,l๜Vu+q)6|V{&QНG+`QHx8bgQV-R5B;1xǼ(r .?'p$Z1nvC>y=m$[ИSv pJ'OC>_ tJ41y-9kaBFaڸ`s).W3WT)@2+ή/Zw5{]vBf,?7}o >qNS6e%0<ֹe,I(/J<3Ig5ϦvVxCފ0"afH$\|o36ЄRTB@C/FZA$Z N_ Wf%ຮt]_zC'&16o\w^?P=?cP_݌3;}ƯŒB|[~ʳ0c06wj3i<_a:P3Uy ]ݡMg3Z8mګR>mVg+]EɁVݚrnO B <YT^ ;=F$i +FA= C.'_nYЩĠ.庁ֵ7:WkIAr_cA)mģ"%1t.8/"^fu *B%0%Y'] ?'BwF)&RoT*'@ o'Qk)$$o` KmKŚf#.gk0KAI^*/)Appn9 TZ/h wLTA:gc%,n7%ڶɘ ]ʅC<+Njy;ƛ]h$3q6U}e|mpdyP$'M |`fUX|9LWB.TpsJ]e. Ȧ`)k{Jl[:t/g.ON Aiq1~ Q’mۆێaǬضmX5s(o?s=x 0Dx5 T ո> ,=C%HÕ=SRPX FXN<2pAu(h:+˽(Ly1)֘# PBm4իjZ|4 xՖ({ioh}]T\mtz¬hX"Ug5λXW'Y>哋%\@OaŻ? ۞iJo@rA,4%΅;LG&!y[u4w,垃IZ-FIKOl / >>7!Yy'\ۧ D7+ܧ? I_4eY @جbm<;KƜYxf5=/g pY& 4ԲԆഔKO*! 3=զci9z 70F6y.;&%i3aϻpހeSt&ti-Hb_IΪԸB>s!t(°Z/xpZi}U^3-wcY1_=)rQ:Z .=8IXo4> jLwK7pJ rD qjF2.fX*E7@m^ o<˓!-_20t I@+>؇*rBBӓ pRpnGk"(Yt{&˯!ۥ-׉&Ljy\?XAU%AȖ;)o!@&1Mg432K¿ ۦ eSMD 0OY(sPa1(CG$9ͤ\LN.;8c=xA}f Ok}_˕ι1cغuxT*&v? ه9!py A푴KfyhmFfxuqIV^z8c{^V5`(V XxY F0VNlf N6ǰ̪:rV K=a3`[y:EuQw+d6o1OPc|jnVt8İ@H߽e'!a!iY}FvB,ѮDH/ЙlƽJc%lp#jKn/w||U83J2.r9Ҏ:7>: 0*3X^NṪٔ`}Vl+V+F[ﲫS %QKZ3ʿ?j.# %}.^0Flx:ӈpAҮцd\0`|g;3XUͣ&M5J&cmgоW ZDsKꌔ{xp*3rQ((ppCY=mW<=:[ pއmsƆ==~fxxj1n^ZfjE nװ$ E]iw$Yz),ױw _=LXl:mR jF IڇBaŻx"L?Z(ig 0֙uPf)z|%-;9D7;X(s)312fnkŻyGK=P9a L8gًH]qmNRɦh& , #S;~w}}yff2GGǞݺu&1 o9of&sc=] WCvv S]OôpL7| tڥ9T[Gٹ5b*V& ڮwPv :Z}zONl:IHmL8mV낷vzBlMV}}LAW2n2w--.СM!ub;ƍ:HUT1E8'g@}h+LI^)h`K ->D'3b+2EV?i#[ +ɧ,frf]mG1UD!4 ]CYS/ԓU' ]vۭmۺQe=OLLຮxGx'Œ4ⷼ꾆kYs#0^o¡JsHvXM/6؃+G?'$ {?Z}Y%Ps_7,|{8㝇ysά*j (En8m?E?6Ml(-VDdD)ǛÝ3)sNv@V{+Z+bG4GFIg.Y )V,BA@]iL{K^021bemK՚B0҄P RkJcܵ.Bjtx!?,{jFn+z~}ؒnN,rvZG')n~t8Kk6FMgscxZuz)uw`F 3Ο#<5|)l^<.K_2 {r]7?ɿ>YV>o|-ퟬ瞣8(n܎-3|?eЄ/ɡߴx8 xMD}$K%>`5tSv:J}>{׌ӬU8 IDATF3=1 W4Nou]4f/`*ilI*\W5d2}m~pw.25nW7,%ОGjm~Yj"5k+Oxd;Qtʼn4A‹FtZI[a|LK'iMyq>!ݬ5 n[8TOpd NJ9>#a‡"58}y>yv]ZqU˿~_ DRر^G۝N&Os.z % jszЫqa'M(B`d:aԯ^fvt4ZH/ϩ 45}v9[@8[/%Ijtlm[7p\YQQlu_v?x~ÈoljZ,vA[E<|rf>b݂@D4)f9MK0Q9hQ~өYէofc\/B_>I61Po>;mn {+kB7X}g?;fm}Z/{8翎D(5VA?w<Y/,}˸3`&"sވD6{F(K8  JZr!0_V1!?mW+| #M6R(X E&PRA5PMxa-<o :2^eY)ѨR/>˔ ]%UwO$:T` /m3twzL!"H&: Q3=O]CVcVکU؈@ h;ܿrC}09#1c#圃#N|qugm x;W<rݕWM\{gb?OmV{7w ih{v:9ݷ@[?nR}p%My9_h\mi msT{-]WR`+JJkʾ$TMW3gE[=G|U>-g͈ܲK'nwz<|Vs?03cE HCa f[a17ACeֻ`Q5Sp ȟYWqoعAEs\*Zk:=F½y^i1ZitRR+yvՍSLٔi/h]+|tf\xQַVxYs{NCkQנ^3''?8yX?9]S/Wo)ftrꮻ|;Q]wӏlO˜߇X| - -kч^y "xTĀ 5]g$g 'X i?w0~>jy1gnBio, ^@e),ol YƯ\;)k9A&neuYO.T8ё%Cn7&.G|3cq9WOWⷎJ3=3x63ѐty4ޅXԴGFSKa>/k$(~`ȯDaAm߆jS_B8x[F}ؾ~FUo^Ǣv{ZyM7RS |=w_yn#9G WxOMc$aH$]7|zӣM3&c f?{vU@DY`1>PBHK,U3'Abʋ ^@2nśwmSUyF⠌\w6ʃT<ҭ'&dY-pVY<‰ll /]sB9۱}NiOW_tT' mQwu9w@a^#^U;MŰ&ڻǷ&ް~ر=.%5> 0IH5?H򶏢_׮ x!Cg쫙TTEyQN! 8ڛp"TÄo&( g*tEli"V$[$(lܳ=>3C6jYWh}xf[dJmrx[aUƹaZl@L`SBe1&E(W=Usj@M~uoχ_~ ~۝_rA={lEu/Nc{Qo~\=eVZ+Kb6tL2P*Iy(FY~;A5;w-N> @HT,=mw VܾDicRh".Ytbc"fi{xlI [d̙y[wrŘַ4nmYPm3%ȸUWZ &?SnݬmB/[`~,:4s~}.;nY#{HӊOuև̦?ZᕳCGZU\U5^z۟^adڼ{{\mo`رom|kW_C\|p{?ڞ|\3^RrwȖqI5/u}mKJ#ca10+cNԧ!@wQ8n-dd& ;*{7u){72з}s^RxvPb0C/2 G)ȖYLawx<吴ћn&ҳMrRũ`ia^ył iȹf+^0lMg 'AHX]\(rK*nkTc+ 07~8/i"ѿ~j~Oh`ɏ]Y.ı{^h ~wD>ij,MM/PHi>zwH )09Ԡ .W@cCv"OAO+Eĉe%> 3L*3!?u|Uk'JfX<܉M'H ZT93y4f4,imq#;6wsh;}"gG^0> C6km~ߢH=cj1[kEh4)mV f!YEj4 ʶB;,ȞyVF"%Paz@C(_Ps.M=;]Q޷?Q Ż-%, M^6'7&I9< ^k،^Ibʡێ`t\=G~|93ɋeD8v>zO\4t<>^:dkrQZ3ՊF6N#n6LJa^ B+QF-&G Srtȴ;(5AA='/۹u5ŏyVzg_po>0;.&[XE16/?\hVi ;()z7PŒsD~OowDMkʅ@1kv3VPJ@8i$Pؘ5)fp}H -ꌹ}~e)3 :/qY NG~=PJїYHU.!Njv^fý HKi%Vd;\+pfMv'G̀HUmfR⺲"E&A\VT!hT2)ǬR`ҧ{S& l&鰱iR5w?'@vqݱ#Q"A!Tl8tOwsZ8JR$h*6cٜeЯFsS*WWFLW'-6IL}z+lOAVgyn>#S4(} aNτja@@S8t<7J T)]墔]m6rDdE.,4Bzd6$:^xntub+ slEHa˩Ok 4Ȇqwi%VY_e,T}r[b5,w |ϖS3I!|oMe[X%Z⨃>t z,lqӕt:o|KoKsѝuһ r<86YT_7!˒Z̿7̵Rl ʛ6WaSQy kNHx9o\LwS⥏FK?"~w QP-˜꩓r.ʽ+u[SqoUve arL򉘛6/Tg=>xfo׶p +h^>gߦ]udE[>un$~غ dX)B)Q|!]<*1f}+VM $I2MYzg\ѣwd/Ѿ-O)8@o_1?sā@ 1YB@Ew'rOL2\2'\0ehڹ H M(i[y$1 2D0 픧Ald[хZR+ab'X IDATm@hd|V%"aWeLЊEɵ„*X<k%ao=%xmGpE5ff<"}s/BM ~u2ij6$g/Ͱlžv[d(21嘗\,iY\yWrst5r?V=JkEHM,ǜ}P0'޾-h!9խ!ANu?\+$tȅŽ# A[_OǚXp^+:{G|ݱ%p(6Xx}8lû4\Ⱥ4Ed0;B.o$,Bq3م&߀\\5^I$li ٌoT\<5RA7v5RCiV{J稫 ޡA > sbt)Pa՚Ov&iۯ|ny^q~ļzٻis.߮?7UZ=`'q=Hյ{}lFu㥛l+nY\JOAVI[Wɒ-:eA\׬R+d8JzcND5eD J$*T.r^G4Jża&*Q[&'/w.޲#()=i~vS1AgQcN) o6J׌􃃂J 1khue2qHV*]$Nk,$~VUpEnU<۰V}RxbUw}[.Ҟ瞻z3̽`he+Ad"ꬰ0EZu(\zr ¦^J،q"b&SE=RhW"[V$*1)Bdqlau e&ثfϧfԜޖ$284)8Y[դGFVuQw5e(~ybg4ap`D/9ky >ɘx.I$>vaM74$u5W q˳;TO­2VIa]ʀr]m*mQ,XJW f+){gۧB[؂THw~:`*GACOa-XJFJKraQ$:4!@cŗIYY迯+rvj3h\(7 \Lj(CQ;:SMaj5$ RHXlb_^~19PwJٔfQo5[&/vګ06Uh>ƻwe%ε񈰷f" NjڦFkh$;&B.?>Ϳ=+ƞbrٱ,/!CK>yj.;~+Zo Mꆽn4A'y`϶Y/x焃@1RLo]}t#ӝ䅝C+TwR=?A*CI <h0l}9 0 o؊<6R>|D:A"[217Њ]DAt*tQWz9,?UtK'?6R u˂4Ik[4oHD!2bE `'〙.Q{u':Aɻ xjsuHDV 'L4^X`ƾJ \7?<zK'u^T|ݑߨ7?Ȫͬ$ͤ\;cRsG. 4^@w GpE ?!bP J1d3_U8*L ]BoCq_s0hWs tB^0W[m c5gxq%Dtz@4Nگ$4H,#@y1hmWiUڐHU%01)RfUBYfD \L+*r C8ёMە̈́6TOgb?_ՏP ^i|mkvoҨIֻ񸺙8H<Յ/8XVm/wMΤ*z&`xz\][(i ]?tԲwʘQWÖ))H:\HOϢ 2%˴aI/P6=WQ;NLfb;Q@鎤mߥY(f@a#}xxl³"zp9?;+|lyOq8_xZt^s; ?`D62:DHI< {{^2˙k͍(letG,֊4kUo܎v)|< {L))L`Q&6 Yµٌg !u];=}U֚3>s)R =+~ߛYm; cEz)zRɿ X͇Cu$J,w9`$OߨI8`/ 'RƻOAkiKXP%Aw %޽߉$Oxl m(Ntz/l&xL0KrrH(;XZ'wf<&,/v&Ԛi&(haZ,J4_i*{׬*o'*ڞ,CQ?'_ 57欄4 ::񛹰_Ld_bv"΋O^|ptDYYTںk0<ʵ^+&ci´MG37!(&$Һ'ff}jgI5m=W r}& n%>~ۖCbKq)ʛ,ݷATH-W+0~)46rо@*L5Dii;RGҩP r2L7N`Mfᦎ2^d'bPayOR:u+Khkaz^~z]L>6E͖yQM2D+~.ِ3}0lЬj5'VT$f'YI].ڬ>#fs 66$+9)H==d #pyf&+-l/#< ߀u7⨗i-SšsyPIDn)y選qXsOur (1x1!ӎR=&g i$'9 M}*O>5X! s췕Ķ;*gM*iRj$Fr] ½ۉiz$6MY}K}>p4Irۓm3?04 @4-xw27 GfzawULft tDZPuֲ1lSDǡmR 6ȱ5ZAg'BR?'ĩL<&'kP=z!f&T$$7Mżpqp<,𿺠YMū&c~pm!㓥S)lV~\9AhWEs>#|ii:y* #,{ o Ӄ5Eeϱ 7B"[׍$$ y[aܜɚƔyեs'&%U[3ʁZR,] i6 :9$eLT`K#PBOШA7Ղ>8\FC΀4'UM!TTW'?r1Bޤ_{8/fm#]H8ӕĿh=jES:hL昣+&͒p %m6xxE*5JbM GFdQMG|eÅ@GG;lQMry#;B>~G S5e{YZhĨ ϳjЬMGNَĘT3.a"Sc,tzJvՕ|\oHScTOI.k儢Qu|Ĕhi>Z[`LG'd =#K~4iczPq6av5`"BRvO Z8cjjyq䩁׾= @u9Dg뮪x$+{F%6OI| 452#x`_%u]%ah 6@DFhI% SRtѢ:SD2/qӗx24,>S@z2DlC s)v)Z Xs,UUMtkc i%}͋ƬokmFYX7#%L67ͯyxӍ'xtC|.6z;w EVT,wY#ф}5m0"lar MasW=(o3WzԝY?>9FWf_Z&SԽ_jГp'~X̘1:]Sd愽'͵¤Wf- U@rŴY.D.Ϥ)[U>5عܞBNLͳ@˪J;+ȎI[lH-TJȽciM3IӞMBs=񜄺 ;NXӝfSfZٶ@On`c1$pħ2!pd!)6 )k(|c{ȥK®>^6Ss5ڒǂ]Q[cd e -`b}rTlq )x%/+||0{Ҭ?# xKY$h_ h/uNQ'YcfB{p?>=/?z>V 웦b4"Vp۹q6 c1Z+ n+5I1\4t{ts/O@d-j:3J B|p!EɫV+:=bi֯7߲T٩,$WFa ᦯93Aq"Xp\'`*`9J:63 6L?> W8ӅpU~=B3OPp"g9FHrc#Ԝkc6'%d'{l8lw*kƠ5̓kК8; Etb=m8R1ܳ1{. 瘫ռzc+OordHYF x\MsnwoVwdisM`rL030;ev"`v"fz*[>vf}w-Lt~{"+ɘ I]mvems!R@9ݞĦt { OR;6wf#ݨӾH#)y  }I@k_ScMG6NL7(V+gvO5 }gAˁ j4[lfð2ӬǂI6]Fjf5bJ]Pf~{摑GHK⸀Hl y _Rg|u͡mVֺRQLǡь7מ lCہfe^9g)2a± zʘ[qbjudo~ΌDŽ 0q(RyܳrցQDhxx̻}d]"|~ ZAra}uMMkt{zXل/wO>xX%r߽,/yl;ɔͦv^&Sy쵯v$! Ljz}T8 3$8Z+ci!Y^257*J$[ kL*[ᦩۖ ( H(0@7fTOǘ+W5Ml 7{~_ qB+rx&捓q-X"kb.u{3V,v$Cq|‚Yז:M*fВ&ܢç\>v厳(ybMݥ\2ܪN3e 3ͣ LW2:rXV·x'S+\+UK7Mh31j꫋MrҒE/k$Lzf-W4l^j^3b<cVOm뫟`g>6x |9 Ǒ-l1vk=etUԶYi~) 4@ zˁP9B`EnQvp$KB8@`O9%'0Bx!lP=9pcCFI)+>9Ah\GX5־nY[d4ƖW,1WQZiV;.w.Ĩ h_*5L[Ɵ[py`s.ӎMIq*M WgG!څ:.q$!=.ֹ(8 Kxx3s".]i0/S̿v~~-1 _"m25f8"mg6oT%q5/k]+[v'F;hut-G&|i5 4pN$Y-"Xl*_?4fl9kڟ>˄f9 nWJGv1I8qĭt[ҳ g# (z*MZuk_8@q B$Z%N4$DǥmK={N_t^JרͺH#)<'&h/f!_4ZsNN*xl'bXmG |}-_x\LzLy8Os x\7#fvNPknfקt뗌T$S-{lM"24+*^2nOZ#p| N[=pq3=`Yǚǖ~eӻkR aD|dw=oGuI)I5&1g#e]1P t2y.8UB8c#5y1s}}e-5 @Ie±"{vkL&JU7FB1j=9ZY5bS_5ih֔TB#WyCNNsW#_4ek''Z}X}ӾqΩ+:A.a{IxMg|:k(Es)3 mŐNcBќTGk04f愢Xt׷NP =-YN!u][fDsW4ݻsܰBwKiA~BQ ZpP)޽PDnh1*B\n |;?Pg j_vlwLm~́#е}lWf: Aə; _atIIrpΠW @xn-vǕy-HYD{y=O(8=Ш䙭}k':.M 5 Ѽ@wީ6w 2.ezs:S%/.3,e^z @M8AN\xHmŐWg#.DH)2Ճ 2QhJJ"-͕Q-~!4BHv{d+l2hGPd\}n~gɮ+NwO\Jibo.[uӼ~\l rry||ݦ4"+7m s]o }o$_R2~kr9X觾`Ϟ ݷqT꧂ޕVf!η%'=OY_*#ͩ w,.5y}͡V1ڨ᛽a]t;l8thTǤ:]߇, n\eWבL GO~$;{h8T 2Ns=c]X̕,>ur'!^4=!Ȣݧ/R dp)Wk5O.It..\Ŝ,gY*[f`J&Eth?xV|:1R82cQ~>{jVE 5/̤͵S'e{ONNe?qH»|=]?%qM|pEIEJ>ܿ^Xӥ9RfP>)̻.ij2QhGF  l f+ ȮT<A'je0qK%u"}| Jˊ>6Ӡв,hV9f.hݡγ[קv̀PJ wv;8忴Onx8fy*C;k5$ٽ/FkhwB)8hGék4פ[e/|30h)c Zᑲh aIx}+2I^g^@rcN rMqj O|8ngrl?׶yߴ/:4~T`I?:Iv!Ɂ`M]RJ:Gyviwx{Ox4*&g/7ؖUl۴/As\_9ß,rq?)7tdM.f9YH7M\9d߬Suŀ(P̙iZ>PJՓךU)\UX,~i~ыx{%ǟ;v8vt:#;y uH¯67J L RM3.]錹zds~0&UR1?Y×xX@wMcX3k}5f%_9a,&>?<;}譬//(~6?Q Qu|򗫊/,l壧7֤&5gmm2B'H&$W]>2mEWJ%xx@~H?M`a  Q*+{WX> ⡏wC(z{.(w=0;cyaf3۳>,[ߋM˰knTkOV-hk8$TA2jkmr')5_+ul)/d{Ca9^hZ,UtZh3*#}-r!Moz=!KmR P3T vk 47pe :re-*ʘQu]d] hp,!lvt Tk R&rmuwvfLR%R ,k\8vY UoJkxXJ!5aS H: tsi)OS MN)fu; XL?Avmas WPL  p5a(뤺~y㯗gy6x&n.|`sr3n}!Q\N*~~G|r K 6|r+u}LQ67ȥ,',ͦz`s@\.~mS~[η._WMq3Oo47]} O>{v5ԣ)cH0̌dre4eTh`+SXg)̍QRkƞDe̊beJ),R[o(c$\A3H`lݨsvBl)zb*;0iC.sE9UcˮyrÎlTm2i]UH(ÕN|R"Mɥy%_I8+A@bH%-H["2\KvO^ץL(R{LX~U!(3Ęb֤鉨)A+ {જ !󎉀Y[i`3dۤ}?-+kXc;_tSFOtX{7hb䳒+ ,-e" ɤy3i)ihE?8:jEZ'd<-3&}n GE|hQ3v9oz/%O.=ɤq~exUΝ;|["931{5{jXrF~ZT"ۧimFpyAj|nIn/_ }Fm[itͦpͷXc< ZNH{^!Z0ΰo3XwHz\^u[;5Z(%XS}-qF@d9Pp4rh$8060RBr2*psvآ&e-45BFB2Sf֤"m谳BZ LNwʓ]aGճ ug-!* rɳkIhnC?dw#4ɀ() ]ъ.^`u;R ᷖgB௖fXkٽ/Ɵ0dQ(/ݽ²ǫ.NMvZO\郏 ^4,Q^T!椹X/4-PbxܵyVG#"G5<ή"NMHP^?UdIZ{Wu0\>j *ulX1tj[rCHqպBY)׻N ̚r$`kW PQ-mB-ܱq%fW|,̮^¢{\_r 259SsZb G2U8?L^"kШ5׍cD$8N>ġuϿGmMϼ}y㏍޾g]^!0;z/(nsO;' l8m~7 Ć Dvpbc Z&b ,i/Nmuc߯4%;>I++1҂Bڂ' 6klK韨V)22Qdng_ iQfk&ϓUz$>A‘V-ȳ5F6tܑQ\1&dٔⱚi4ޮWj ,ضNIYr7"@$ٝ\@ၕmS Rؾ}c;\Jc%<#lIM:H'>yôGWTB%ži>:? ؔ]Ot`ۨT uM8As%_;/!uaMA{|f 7G1P~aOwrf4HQz";:XՏe?]S/I؍{5=};NW۶<#v"Z%uB(~,y@P - ǶDҒ;4աI;.u,5ɤb<(ΩR\=Cv"&34Q #Mj@㇚JKZFx4ŗW X+r0^)2)`KR[:1&rbN΍qO7v<ӓ|z)us,='a;F䪆[=,`=Qlu]AMlznX,\{]s/^BV|_=.|Q?p2 C͠ǯ]L_O,0<= Tc؋R )tG8'΂+IZK[DJXp}Ϟ1ٌQmr%nb:|`ԁ64ql.xܽ` 0gOJA9Fdg𑄙!;~w/;#5Aq mݺ&n*mc)U48(eQt8OLT3 w0@BR8tnFЌ謙]78w::3 /0-Nsliٱ^N I )Os^RYY6fV|X`(5z)~: #T -P~``{(a}{ 73P$!5t<,#>w7΁@љ)Tz}Be6{Mwo:E!Ke;o2H5_:IDAT VJa;J;{Zj7CZ+5mj rd'awAcGd^r6ی6#,?80guH o#D+lgF#v{;v>¾f.B 8фmpc>ZkF'8~ Q_Z=,F!goZk0$"cn5:ޖ|Hƹ}^vw\瞯ڳKkR^vq~ĉo Vyo0Ͻ!$򙤔ضm^rDiˈ6݀R/){)tXãcպVU2%yj/FpxݡfvK ~yЊ$5G{BCds9CQpBJBGz:5>0jp; wܞ-Qp1x[A/9 MɉE2]_13>lSLy]ѠMYtZe 2#y`'NNQҘcmvQ_i- kǐdQ|)R{3<_&w;yk`pMoMoKU&zWõ~ZZgoʵӈgKb~:Z=zK AeYJRJwC] R\Ğ"#|PrwCZ%p2g;Β/G1j*}j]Y_~ 0_'\c X*[x-<[ؼw^琱4oٛc,;jINS+8ڲxa @ |=j1C_'=ͤk'\՟raBbx !u?l!DYdm:CzXȇ;=o@O_oo>;/zW_>څr`8Dc\EJ\?Dc\R=.D (Ȩp[_r+t۷$Pg%.{.!΄Gpf>f 7{L˾SeRIm'ƫ@vv3谴KME缹/ƈyuIrИ0ҔMbۉ8W%OV8T6Xz,,=,A"FPF)G%G^8i26~ɫ^ȶdM]\z䉷޽##s}^Y?W(,0E=AϷoE>V`XF4Esc; .f (@:^z;}V(iyhY/\hF=э"""o[&fҒW_~!g_ܲk2 \~p✙/G;R52~sN0 T-GqK啡iXq5!y xbqkݨmrYXz<2j- ZH%LEMߌN_^RL9 g%ީDۯ׫͏8}R7*TJ]ElEQ+Gv] WڕE#|P886ݨѪҩ.ז K%t}q 0 g "`T 0j@O^={'rtrP{T?8{M:b;`~aګ=n˖yhU|#l喙.lsg[p-`={sՉU8=e}B&8 W{y[FѼn{k O77sG^zۑ-URmE>X.PݿH#*X!+fJ)S!=}=ə-:\y[Ldyqm{w~{Ni47;{*gK92뙿>8ү3PCO^_}m]?5!֎qdkZبD(hRDv3S[b:ʸsKv]ێceY=sN*g?gS1kP_D)h.CsJww@gmtwwf+o$8($,ؖlZ`:GNumSwu%ξ}0>OgrbO|_Z9,AN ͣ af ZZB6aFt-t~X]cX)\V:rr[+v [/:9B4 5hJK͹1Eze.OFk˶/XBGXٷozc'=ñM+Q&,K"lDتᦴIuakKoky2l&dXMȰBJv泲yh*?T1??'?Ѩ^o(\]ћfUNdP9N|ٚCx)}vR:5ju?*9 ge&,uCF63N%=qhҩm[ؽ_ s~cn^z]`s. (Fɨ0nՔ2484jmF$13ݷwS|*TtJh F DcB#QX(PXh,YV3e-/d0g!)Xw=@̫}/ijMZkZZ'M۶Y|NJRʇ@LU G,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60 &f L,bb60ʃ About puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). puddletag ist ein Audio-Tag-Editor für GNU/Linux ähnlich dem Windowsprogramm Mp3tag. <br /><br />Features sind: Stapelverarbeitung von Tags, Umbennenung von Dateien mit Hilfe der Tags, Bezug der Tags aus Dateinamen, Verwendung von Aktionen zum Automatisieren sich wiederholender Aufgaben, Import Ihrer Musiksammlung und viele weitere Funktionen <br /><br /> Unterstützte Formate: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Besuchen Sie die puddletag-Website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) für Hilfe und Aktualisierungen.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Lizensiert unter der GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> French translation by <b>Raphaël Rochet</b>.<br /> Dutch (Nederlands) translation by <b>Fabian Bakkum</b>.<br /><br /> To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> für seine vielen, vielen tollen Ideen und dafür, dass er sich um mehr Bugs kümmerte als menschenmöglich.<br /><br /> Französische Übersetzung von <b>Raphaël Rochet</b>.<br /> Niederländische tÜbersetzung von <b>Fabian Bakkum</b>.<br /><br /> Dank an die Programmierer der Bibliotheken auf denen puddletag basiert (ohne die ich vielleicht nur einen id3-Leser greschrieben hätte).<br /><br /> <b>Paul McGuire</b> für PyParsing.<br /> <b>Michael Urman</b> und <b>Joe Wreschnig</b> für Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> und jedem Verantwortlichem für PyQt4.<br /> <b>Michael Foord</b> und <b>Nicola Larosa</b> für ConfigObj (seriously, they should replace ConfigParser with this).<br /> Dem <b>Oxygen team</b> für die Oxygen icons. About puddletag Über puddletag <h2>puddletag %1 (Changeset %2)</h2> %3 <h2>puddletag %1</h2> %2 &About &Über &Thanks &Danksagungen puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2008-2012 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv3 (<a href="www.gnu.org/licenses/gpl-3.0.html">www.gnu.org/licenses/gpl-3.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> First off, a big thanks to **Evan Devetzis** for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. Thanks to <b>Raphaël Rochet</b>, <b>Fabian Bakkum</b>, <b>Alan Gomes</b> and others for contributing translations. To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. AcoustID Calculating ID Berechne ID Retrieving AcoustID data: %1 of %2. Empfange AkkustikID-Daten: %1 von %2. Retrieving MB album data: %1 Empfange MB Album-Daten: %1 Error generating fingerprint: %1 Fehler beim Generieren des Fingerabdrucks: %1 Error retrieving data: %1 Fehler beim Empfang der Daten: %1 Minimum Score Parsing Data Error submitting data: %1 Submitting data to AcoustID: %1 to %2 of %3. Found AcoustID in file. File #%1: %2 AcoustID Key Please enter AcoustID user key in settings. Actions Enter a name for the shortcut. Geben Sie einen Namen für die Tastenkombination ein. Error: Using <b>__selected</b> in Actions is not allowed. Fehler: Die Verwendung von <b>__selected</b> in Aktionen ist nicht erlaubt. Please enter some fields to write to. Bitte geben Sie Felder an, in die geschrieben werden soll. Modify Action Aktion bearbeiten Actions Aktionen Assign &Shortcut Ta&stenkombination festlegen <p>Creates a shortcut for the checked actions on the Actions menu. Use Edit Shortcuts (found by pressing down on this button) to edit shortcuts after the fact.</p> <p>Erstellt eine Tastenkombination für die ausgewählte Aktion im Aktionsmenu. Verwenden Sie Tastenkombinationen bearbeiten (dazu hier klicken) um Tastenkombinationen nachträglich festzulegen.</p> Edit Shortcuts Tastenkombinationen bearbeiten New Action Neue Aktion Enter a name for the new action. Geben Sie einen Namen für die neue Aktion ein. Add Action: Aktion hinzufügen: Edit Action: Aktion bearbeiten: Edit Action: %s Aktion bearbeiten: %s Amazon Invalid Access or Secret Key Ungültiger Benutzername oder Zugangscode Retrieving search results for keywords: %s Empfange Suchergebnisse: %s Invalid XML returned. No tracks listed. Ungültiges XML empfangen. Keine Tracks enthalten. %s at Amazon.com %s auf Amazon.com Retrieving using ASIN: %s Empfange unter Verwendung von ASIN: %s Retrieving XML: %1 - %2 Empfange XML: %1 - %2 Retrieving cover: %s Empfange Cover: %s <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do an Amazon album search using those keywords.</li> </ul> <p>Suchbegriffe hier eingeben. Ohne Eingabe werden die ausgewählten Dateien verwendet.</p> <ul> <li><b>artist;album</b> Sucht nach einer spezifischen Album/Interpret Kombination.</li> <li>Um die Alben eines Interpreten zu suchen, das Album weglassen, aber das Semikolon eingeben (z.B.. <b>Ratatat;</b>). Um nur nach einem Album zu suchen, den Interpreten weglassen, so wie in <b>;Resurrection.</li> <li>Das Eingeben von Suchbegriffen <b>ohne Semikolon (;)</b> sucht ein Amazon Album mit diesen Begriffen.</li> </ul> Retrieve Cover Emfpange Cover Cover size to retrieve Covergröße einstellen Small klein Medium mittel Large groß Access Key (Stored as plain-text. Leave empty for default.) Benutzername (Wird als Text abgelegt. Freilassen für Standard.) Secret Key (Stored as plain-text. Leave empty for default.) Passwort (Wird als Text abgelegt. Freilassen für Standard.) Original Size Artwork Enter a description Geben Sie eine Beschreibung ein <p>Enter a description for the current cover.</p><p>For ID3 tags the description has to be different for each cover as per the ID3 spec. If they don't differ then spaces are appended to the description when the tag is saved.</p> <p>Geben Sie eine Beschreibung für das aktuelle Cover ein.</p><p>Für ID3 Tags sollte die Beschreibung für jedes Cover unterschiedlich sein. Wenn sie sich nicht unterscheiden, werden beim Speichern Leerzeichen der Beschreibung zugefügt.</p> &Description &Beschreibung &Type &Typ <p>Select a cover type for the artwork.</p> <p>Wählen Sie einen Covertyp für das Artwork.</p> &Save cover to file Cover in Datei &speichern &Add cover &Cover hinzufügen &Remove cover Cover entfe&rnen &Change cover Cover austaus&chen Select Image... Bild auswählen... JPEG Images (*.jpg);;PNG Images (*.png);;All Files(*.*) Save artwork as... Speichere Artwork als... Writing to <b>%1</b> failed. Fehler beim Speichern in <b>%1</b>. Enter description Beschreibung eingeben Artwork Context %1/%2 Cover Varies Coverauswahl No Images Keine Bilder Autonumbering Wizard &Start: Max length after padding with zeroes: Max. Länge nach Auffüllen mit Nullen: &Restart numbering at each directory. Nummerierung in jedem Ordner neu sta&rten. Autonumbering Wizard Nummerierungsassistent Add track &separator ['/']: Number of tracks &Trenner hinzufügen ['/']: Anzahl der Tracks Add track &separator ['/'] &Tracktrenner hinzufügen ['/'] Colour Settings <p>Below are the backgrounds used for various controls in puddletag. <br /> Double click the desired action to change its colour.</p> <p>Dies sind die Hintergrundfarben für verschiedene Elemente in puddletag. <br /> Klicken Sie die betreffende Aktion an, um die Farbe zu ändern.</p> Row selected in file-view. ausgewählte Zeile in Dateiansicht. Row colour for files with previews. Zeilenfarbe für Dateien mit Vorschau. Field added in Extended Tags. hinzugefügtes Feld in erweiterten Tags. Field edited in Extended Tags. bearbeitetes Feld in erweiterten Tags. Field removed in Extended Tags. entferntes Feld in erweiterten Tags. Column Settings Title Titel Columns Spalten Adjust visibility of columns. Sichtbarkeit der Spalten anpassen. &Select Columns Spalten au&swählen Combo Box Remove current item. Aktuelles Element entfernen. Confirmations Confirm when exiting preview mode. Verlassen des Vorschaumodus bestätigen. Confirm when deleting files. Löschen von Dateien bestätigen. Cover Type Other Andere O A File Icon Dateisymbol I D Other File Icon Anderes Dateisymbol OI AS Cover (front) CF Cover (back) CB Leaflet page Innenseite LF IS Media (e.g. label side of CD) Medien (z.B. CD-Label) M Lead artist Albuminterpret LA HK Artist Interpret A K Conductor Dirigent C D Band Band B Composer Komponist CP KP Lyricist Texter L T Recording Location Aufnahmeort RL AO During recording Aufnahmedauer DR AD During performance DP Movie/video screen capture MC A bright coloured fish F Illustration P Band/artist logotype Band-/Interpretenlogo BL Publisher/Studio logotype Studiologo PL Defaults &Fields &Felder Yes Ja No Nein <blank> <leer> <keep> <behalten> Various Verschiedene MusicBrainz SYNTAX ERROR in $%1: %2 SYNTAX ERROR: %s expects a number at argument %d. SYNTAX ERROR: %s erwartet eine Nummer beim Argument %d. Various Artists function does not exist. Funktion nicht existent. Appl&y &Anwenden Filter: Go Starten Title Titel Field Feld An error occured while writing to <b>%1</b>. (%2) Es ist ein Fehler beim Schreiben von <b>%1</b>. (%2) aufgetreten Fields: Felder: Error Fehler <br /> Do you want to continue? <br /> Wollen Sie fortfahren? OK Cancel Abbrechen Writing Schreibe &Yes &Ja &No &Nein Reading Directory: %1 Lese Ordner: %1 Reading Directory: %1 + others Lese Ordner: %1 + andere Reading Dir Lese Ordner Loading Lade <p>An error occured while renaming the directory <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b><br />File used: %4</p> <p>Ein Fehler ist beim Umbenennen des Ordners <b>%1</b> to <i>%2</i>aufgetreten.</p><p>Grund: <b>%3</b><br />Datei verwendet: %4</p> <p>An error occured while renaming the file <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b></p> <p>Ein Fehler ist beim Umbenennen der Datei<b>%1</b> to <i>%2</i>aufgetreten.</p><p>Grund: <b>%3</b></p> <p>An error occured while writing to <b>%1</b>.</p><p>Reason: <b>%2</b> (<i>See ~/.puddletag/log.log for debug info.</i>)</p> <p>Ein Fehler ist beim Schreiben von <b>%1</b>aufgetreten.</p><p>Grund: <b>%2</b> (<i>Siehe ~/.puddletag/log.log für weitere Informationen.</i>)</p> %s images %s Bilder &Edit &Bearbeiten Never show this message again. Connection Error: %s Dialogs Album Art Albumcover Tag Panel Tag Artwork Cover Filesystem Dateisystem Filter Tag Sources Tagquellen Stored Tags Gespeicherte Tags Logs Mass Tagging Stapelverarbeitung Functions Funktionen Actions Aktionen Dir Renaming Rename: <b>%1</b> to: <i>%2</i> Benenne <b>%1</b> in: <i>%2</i> um An error occured while renaming <b>%1</b> to <b>%2</b>. (%3) Ein Fehler ist beim Umbenennen von <b>%1</b> in <b>%2</b>. (%3) aufgetreten Renaming Umbenennen I couldn't rename: <i>%1</i> to <b>%2</b> (%3) Umbenennen von <i>%1</i> in <b>%2</b> (%3) nicht möglich Dirview Refresh Directory Aktualisiere Ordner Show Header Überschrift anzeigen Hide Header Überschrift verstecken Open in File Manager Öffnen im Dateimanager Subfolders Unterordner einbeziehen Discogs Retrieving search results for keywords: %s Empfange Suchergebnisse für: %s %s at Discogs.com %s auf Discogs.com Retrieving using Release ID: %s Empfange Ergebnisse für Release ID: %s Retrieving album %s Empfange Album %s Retrieving cover: %s Empfange Cover: %s Error retrieving image: Fehler beim Empfang des Bildes: <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Using <b>:r id</b> will retrieve the album with Discogs ID <b>id</b>.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do a Discogs album search using those keywords.</li> </ul> <p>Suchbegriffe hier eingeben. Ohne Eingabe werden die ausgewählten Dateien verwendet.</p> <ul> <li><b>artist;album</b> Sucht nach einer spezifischen Album/Interpret Kombination.</li> <li>Um die Alben eines Interpreten zu suchen, das Album weglassen, aber das Semikolon eingeben (z.B.. <b>Ratatat;</b>). Um nur nach einem Album zu suchen, den Interpreten weglassen, so wie in <b>;Resurrection.</li> <li>Das Eingeben von Suchbegriffen <b>ohne Semikolon (;)</b> sucht ein Discogs Album mit diesen Begriffen.</li> </ul> Retrieve Cover Empfange Cover Cover size to retrieve Covergröße Small klein Large groß Field to use for discogs_id zu benutzendes Feld für Discogs-id API Key (Stored as plain-text.Leave empty to use default.) API Schlüssel (Wird als Text abgelegt. Freilassen für Standard.) Invalid Discogs Release ID Ungültige Discogs Release ID Checking tracks for Discogs Album ID. Überprüfe Tracks für Discogs Album ID. No Discogs ID found in tracks. Keine Discogs ID in Tracks gefunden. Found Discogs ID: %s Discogs ID gefunden: %s Edit Field Edit Field Feld bearbeiten &Field &Feld &Value &Wert A&dd &Hinzufügen E&dit &Bearbeiten Errors No closing bracket found. Abschließende Klammer fehlt. Couldn't create intermediate directory: %s Kann temporären Ordner %s nicht erzeugen Cannot move directory to a subdirectory within itself. Kann Ordner nicht sein eigenes Unterverzeichnis verschieben. Your filesystem encoding was detected as <b>ASCII</b>. <br />You won't be able to rename files using accented, <br /> cyrillic or any characters outside the ASCII alphabet. Extended Tags Field Feld Value Wert Resets the selected fields to their original value. Ausgewählte Felder auf Originaleinträge zurücksetzen. Different files. Verschiedene Dateien. Fields Filename Dateiname Artist Interpret Title Titel Album Album Track Track Length Länge Year Jahr Bitrate Bitrate Genre Genre Comment Kommentar Dirpath Pfad FreeDB <b>FreeDB does not support text-based searches.</b> <b>FreeDB unterstützt keine textbasierten Suchanfragen.</b> Functions At most %1 arguments expected. %2 given. Höchstens %1 Argument erwartet. %2 gegeben. At least %1 arguments expected. %2 given. Mindestens %1 Argument erwartet. %2 gegeben. Tag->File: $1 Tag->Dateiname: $1 Tag to filename Tag nach Dateiname &Pattern &Vorlagen Replace $0: '$1' -> '$2', Match Case: $3, Words Only: $4 Ersetze $0: '$1' -> '$2', Groß-/Kleinschreibung: $3, Nur ganze Wörter: $4 Replace Ersetzen &Replace E&rsetzen w&ith: m&it: Match c&ase: &Groß-/Kleinschreibung: only as &whole word Nur ganze &Wörter Update from $2, Fields: $1 Aktualisiere aus $2, Felder: $1 Update from tag Aktualisiere aus Tag &Field list (; separated): &Tabelle (; getrennt): &Tag &Tag APEv2 ID3 Trim $0 Trimme $0 Trim whitespace Trimme Leerzeichen RegReplace $0: RegExp '$1' with '$2', Match Case: $3 RegErsetzen $0: regulärer Ausdruck '$1' durch '$2', Groß-Kleinschreibung: $3 Replace with RegExp Ersetzen duch regulären Ausdruck &Regular Expression &Regulärer Ausdruck Replace &matches with: Ersetze &Treffer durch: Match &Case &Groß-/Kleinschreibung Export Art: pattern='$1' Exportiere Bild: pattern='$1' Export artwork to file Exportiere Cover in Datei &Pattern (extension not required) &Vorlagen (Erweiterung nicht erforderlich) folder_%img_counter% Autonumbering: $0, Start: $1, Restart for dir: $2, Padding: $3 Nummerierung: $0, Start: $1, Neustart für Ordner: $2, Auffüllen: $3 Autonumbering Nummerieung oi 1 aoeu False Falsch au Sort $0, order='$1', Match Case='$2' Sortiere $0, Reihenfolge='$1', Groß-/Kleinschreibung='$2' Sort values Einträge sortieren &Order &Auftrag Ascending Aufsteigend Descending Absteigend Tag->Dir: $1 Tag->Ordner: $1 Tag to Dir Tag nach Ordner &Pattern (can be relative path) &Vorlage (auch relativer Pfad) %artist% - %album% Format $0 using $1 Format value Formatwert &Format string &Format Zeichenfolge Artwork: Filenames='$1', Description='$2', Case Sensitive=$3 Cover: Dateinamen='$1', Beschreibung='$2', Groß-/Kleinschreibung=$3 Load Artwork Lade Cover &Filenames to check (;-separated, shell wildcards [eg. *] allowed) &Dateinamen überprüfen (;-getrennt, Platzhalter [z.B.. *] erlaubt) &Default description (can be pattern): &Standardbeschreibung (kann Vorlage sein): Match filename's &case: &Groß-/Kleinschreibung der Dateinamen: Merge field: $0, sep='$1' Verbinde Feld: $0, Trenner='$1' Merge field Verbinde Feld &Separator &Trenner ; Remove Dupes: $0, Match Case $1 Entferne Duplikate: $0, Treffer $1 Remove duplicate values Doppelte Einträge entfernen Text File: $0, '$1' Textdatei: $0, '$1' Import text file Text importieren lyrics.txt Remove fields except: $1 Entferne Felder außer: $1 Remove all fields except Entferne alle Felder außer <blank> $0 <leer> $0 Remove Fields Entferne Felder Convert Case: $0: $1 Konvertiere Groß-/Kleinbuchstaben: $0: $1 Case conversion Groß- / Kleinschreibung &Type &Typ Mixed Case Gemischtschreibung UPPER CASE GROßBUCHSTABEN lower case kleinbuchstaben For &Mixed Case, after any of: Ge&mischtschreibung, nach einem: ., ! Convert to encoding: $0, Encoding: $1 Konvertierung zu Kodierung: $0, Kodiere: $1 Convert from non-standard encoding Konvertierung einer nicht-standard Kodierung &Encoding &Kodierung cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 Text to Tag: $0 -> $1, $2 Text zu Tag: $0 -> $1, $2 Text to Tag Text zu Tag &Text &Output &Ausgabe Split using separator $0: sep='$1' Aufteilen nach Trenner $0: Trennungen='$1' Split fields using separator Teile Felder nach Trenner File->Tag '$1' Dateiname-> Tag '$1' Filename to Tag Dateiname nach Tag Functions Dialog <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells. It is not allowed when creating an action.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> <p>Felder in die geschrieben wird.</p> <ul> <li>Geben Sie eine Liste von kommagetrennten an z.B. <b>artist, title, album</b></li> <li>Verwenden Sie <b>__selected</b> um nur in die ausgewählten Felder zu schreiben. Es ist nicht erlaubt bei der Erstellung von Aktionen.</li> <li>Kombinationen wie <b>__selected, artist, title</b> sind erlaubt.</li> <li>Aber die Verwendung von <b>__selected</b> in Aktionen ist <b>nicht</b>erlaubt.</li> <li>'~' wird in alle diesem Feld folgenden Felder schreiben . z.B. <b>~artist, title</b> wird die in den Dateien gefundenen Daten in alle Felder außer Interpret und Titel schreiben.<li> </ul> <b>No change.</b> <b>Keine Änderung.</b> No preview for is shown for this function. Für diese Funktion wird keine Vorschau angezeigt. <b>No change</b> <b>Keine Änderung.</b> Functions Funktionen GenSettings &Edit sort options &Sortierungsregeln bearbeiten <Autodetect> Default Language (Requires a restart) Sprache (benötigt Neustart) Su&bfolders &Unterordner einbeziehen Show &gridlines Tabellen&linien anzeigen Show tooltips in file-view: Tooltips in der Dateiansich anzeigen: Show &row numbers Zeilennumme&rn anzeigen Automatically resize columns to contents Automatische Spaltenbreite &Preserve file modification times &Dateiänderungszeit beibehalten Program to &play files with: Wiedergabe&programm: &Load last folder at startup &Letzten Ordner beim Start laden List Buttons Add Hinzufügen Remove Entfernen Move Up Auf Move Down Ab Edit Bearbeiten Duplicate Duplizieren &>> &<< Logs &Copy &Kopieren &Clear &Löschen Main Window puddletag: %1 + others puddletag: %1 + andere puddletag: %1 Import directory... Importiere Ordner... Mapping Settings <ul><li>Tag is the format that the mapping applies to. One of <b>ID3, APEv2, MP4, or VorbisComment</b>. </li><li>Fields will be mapped from Source to Target, meaning that if Source is found in a tag, it'll be editable in puddletag using Target.</li> <li>Eg. For <b>Tag=VorbisComment, Source=organization, and Target=publisher</b> means that writing to the publisher field for VorbisComments in puddletag will in actuality write to the organization field.</li><li>Mappings for tag sources are also supported, just use the name of the tag source as Tag, eg. <b>Tag=MusicBrainz, Source=artist,Target=performer</b>.</li></ul> Tag Original Field Originalfeld Target Ziel <b>A restart is required to apply these settings.</b> <b>Ein Neustart ist erforderlich um die Einstellungen anzuwenden.</b> Source Quelle Masstagging Continue Fortsetzen Stop Stopp Combine and continue Verbinden und fortfahren Replace and continue Ersetzen und fortfahren Combine and stop Verbinden und anhalten Replace and stop Ersetzen und anhalten Use best match Verwende größte Übereinstimmung Do nothing and continue Nichts ändern und weiter Default Profile Default Profil <b>Polling: %s</b> <b>Abfrage: %s</b> Retrieving matching album. <b>%1 - %2</b> Empfange passendes Album. <b>%1 - %2</b> Retrieving matching album. Artist=<b>%1</b> Empfange passendes Album. Interpret=<b>%1</b> Retrieving matching album. Album=<b>%1</b> Empfange passendes Album. Album=<b>%1</b> Retrieving matching album. Empfange passendes Album. Starting search for: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> Starte Suche nach: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> Starting search for: <br />artist=<b>%1</b><br />album=No album name found. Starte Suche nach: <br />Interpret=<b>%1</b><br />Album=Kein Albumname gefunden. Starting search for: <br />album=<b>%1</b><br />artist=No artist found. Starte Suche nach: <br />Album=<b>%1</b><br />Interpret=Kein Interpret gefunden. No artist or album info found in files. Starting search. Kein Interpret oder Album in Dateien gefunden. Starte Suche. <b>%d</b> results found. <b>%d</b> Ergebnisse gefunden. <b>No results were found.</b> <b>Keine Ergebnisse wurden gefunden.</b> <b>One</b> result found. <b>Ein</b> Ergebnis gefunden. <b>%d</b> possibly matching albums found. <b>%d</b> möglicherweise passende Alben gefunden. <b>One</b> possibly matching album found. <b>One</b> möglicherweise passendes Album gefunden. No matches found for tag source <b>%s</b> Keine Treffer in der Quelle gefunden <b>%s</b> Previously retrieved result does not match. Retrieving next matching album. Vorherige Ergebnisse passen nicht. Empfange nächstes passendes Album. <br />Rechecking with results from <b>%s</b>.<br /> <br />Überprüfe mit den Ergebnissen von <b>%s</b>.<br /> <br />Valid matches were found for the album. <br />Es wurden Treffer für das Album gefunden.. <b>No valid matches were found for the album.</b> <b>Es wurden keine passenden Ergebnisse für das Album gefunden.</b> Rechecking Überprüfen Retrying search with album name: <b>%s</b> Wiederholte Suche mit Albumname: <b>%s</b> An error occured during the search: <b>%s</b> Ein Fehler ist während der Suche aufgetreten: <b>%s</b> An error occured during album retrieval: <b>%s</b> Ein Fehler ist während des Empfangs der Albumdaten aufgetreten: <b>%s</b> Mass Tagging Stapelverarbeitung &Search &Suche &Configure Profiles &Profileinstellungen &Write Previews &Vorschau speichern Clear &Preview Vorschau &rückgängig &Profile: &Profil: &Stop &Stopp <b>Lookups completed.</b> <b>Suche abgeschlossen.</b> Menus Enabl&e Preview Mode &Vorschau aktivieren Disabl&e Preview Mode &Vorschau deaktivieren Help Hilfe Online &Documentation Online &Dokumentation &Forum &Bug tracker &Bug Tracker About puddletag Über puddletag About Qt Über Qt Toolbar Symbolleiste Clear Selected &Files Vorschau au&fheben &Write Previews Vorschau &übernehmen &Undo Last Clear &Aufhebung rückgängig Sort &By Sortieren &nach Clear Selected &Cells &Zellenauswahl aufheben &Plugins &Open Folder &Ordner öffnen Select a directory to import into puddletag. Ordner in puddletag importieren. &Add Folder Ordner &hinzufügen Append a directory to current file-view. Ordner zur aktuellen Ansicht hinzufügen. Load &playlist Wiedergabe&liste öffnen Import an m3u playlist into puddletag. m3u-Wiedergabeliste in Puddletag importieren. Sa&ve playlist Wiedergabeliste s&peichern Save all files to m3u playlist. Alle Dateien in m3u-Wiedergabeliste speichern. &Refresh &Aktualisieren Refresh current file-view. Dateiansicht aktualisieren. &Save &Speichern &Play &Wiedergabe Plays the selected files in the predefined music player. Ausgewählte Dateien im vorgegebenen Programm wiedergeben. &File->Tag &Dateiname->Tag Convert filename to tag using the pattern. Konvertiert Dateiname in Tag. &Undo &Rückgängig Autonumbering &Wizard... &Nummmerierungsassistent... &Unload Everything Alle s&chließen &Format &Text File->Tag &Textdatei-Tag &Import Music Library... Musiksammlung &importieren... &Actions &Aktionen &Preferences &Einstellungen &Functions &Funktionen &QuickActions &Schnellaktionen &Rename Directories Ordner &umbenennen &Exit Schließen &Tag->File &Tag->Dateiname &Increase Font Schrift ver&größern &Decrease Font Schrift ver&kleinern &Clipboard->Tag &Zwischenablage->Tag Select &All &Alles auswählen &Invert Selection Auswahl &umkehren &Select Column &Spalte auswählen &Cut Aus&chneiden &Copy Selection Kopieren &Paste Einfügen &Remove Tag Tag &löschen E&xtended Tags Erweiterte &Tags &Delete Löschen &Properties &Eigenschaften Paste &Onto Selection In Auswahl einfügen &Lock Layout &Layout sperren Select &Next Directory &Nächstes Verzeichnis auswählen Copy All &Fields Alle &Felder kopieren Delete &Without Confirmation Löschen ohne Bestätigung In &Library In Bibiliothek Replace... Ersetzen... Remove &APEv2 Tag APEv2 Tag entfe&rnen Remove All &ID3 Tags Alle &ID3-Tags entfernen Move Selected &Up Auswahl h&ochschieben Move Selected Do&wn Auswahl her&unterschieben Select &Previous Directory &Vorheriges Verzeichnis auswählen Select all files belonging to the directories of those selected. Otherwise (if only a single directory is selected) selects all the files in the previous directory. Auswahl aller Dateien in den ausgwählten Ordnern. Wenn nur ein Ordner gewählt ist, Auswahl aller Dateien im vorhergenden Ordner. Remove ID3v&2 Tag ID3v&2 Tag entfernen Remove ID3v&1 Tag ID3v&1 Tag entfernen Refresh &Selected Auswahl a&ktualisieren Reloads directories of selected files. Ordner der ausgewählten Dateien neu laden. &File &Datei &Edit &Bearbeiten &Convert &Konverter &Tools &Werkzeuge &Preview Mode &Vorschaumodus Ta&g Tools Ta&g-Tools &Windows &Fenster Messages That's a large amount of data to copy. It may cause your system to lock up. Do you want to go ahead? Copy without images. Mp3tag Retrieving search page: %s Empfange Suchseite: %s Retrieving search page... Empfange Suchseite... Parsing search page. Analysiere Suchseite. Parsing search page... Analysiere Suchseite... Retrieving album page: %s Empfange Albumsseite: %s Retrieving album page... Empfange Albumsseite... Parsing album page. Analysiere Albumseite. Parsing album page... Analysiere Albumseite... MusicBrainz <b>Error:</b> While retrieving %1: %2 <b>Fehler:</b> beim Emfpang von %1: %2 <b>Error:</b> While retrieving Album ID %1 (%2) <b>Fehler:</b> beim Empfang von Album ID %1 (%2) Found album id %s in tracks. Retrieving Album-ID %s in Tracks gefunden. Empfange Retrieving cover: %s Empfange Cover: %s No images exist for this album. Invalid UUID Invalid query sent. You have exceeded your rate limit. Image does not exist. Retrieving image %s Retrieve Cover Cover size to retrieve: Amount of images to retrieve: Just the front cover All (can take a while) Error retrieving image: %s MusicLib No libraries found Keine Bibliotheken gefunden Load a lib first. Lese eine Bibliothek zum ersten mal. No supported music libraries were found. Most likely the required dependencies aren't installed. Visit the puddletag website, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> for more details. Keine unterstützten Musikbibliotheken gefunden. Meistens sind erforderliche Abhängigkeiten nicht installiert. Besuchen Sie die puddletag-Webseite, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a>für weitere Einzelheiten. Import Music Library Importiere Musikbibliothek Invalid library Ungültige Musikbibliothek Error loading %1: %2 Ladefehler %1: %2 Anonymous Library Unbekannte Musikbibliothek Description was left out. Beschreibung fehlt. Anonymous author. Unbekannter Autor. Loading music library... Lese Musikbibliothek... An error occured while loading the %1 library: <b>%2</b> Ein Fehler ist beim Lesen der %1 Musikbibliothek aufgetreten: <b>%2</b> Music Library Musikbibliothek &Search &Suche Saving music library... Speichere Musikbibliothek... Library Artists Interpret in der Musikbibliothek Pattern Settings &Sort &Sortieren Enter a pattern Geben Sie eine Vorlage ein Playlist Select m3u file... Wählen Sie eine m3u-Datei... An error occured while reading <b>%1</b> (%2) Ein Fehler ist beim Lesen von <b>%1</b> (%2) aufgetreten Save Playlist... Speichere Wiedergabeliste... Playlist Settings &Write extended info Er&weiterte Informationen schreiben Entries &relative to working directory Einträge mit &relativem Pfad speichern &Filename pattern. &Dateinamenvorlage. Plugin Settings Name Author Autor Description Beschreibung Version <b>Loading/unloading plugins requires a restart.</b> <b>Laden/Beenden von Plugins benötigt einen Neustart.</b> Previews Some files have uncommited previews. Changes will be lost once you load a directory. <br />Do you still want to load a new directory?<br /> Einige Dateien haben eine unbestätigte Voschau. Änderungen gehen verloren wenn Sie einen Ordner einlesen. <br />Wollen Sie wirklich einen neuen Ordner einlesen?<br /> Disable Preview Mode first to enable tag deletion. Deaktivieren Sie zuerst den Vorschaumodus um das Löschen von Tags zu ermöglichen. Some files have uncommited previews. These changes will be lost once you exit puddletag. <br />Do you want to exit without writing those changes?<br /> Einige Dateien haben eine unbestätigte Voschau. Änderungen gehen verloren wenn Sie puddletag beenden. <br />Wollen Sie das Programm beenden ohne die Änderungen zu speichern?<br /> Preview Mode: Off Vorschaumodus: Aus <b>Preview Mode: On</b> <b>Vorschaumodus: Ein</b> Do you want to exit Preview Mode? Wollen Sie den Vorschaumodus beenden? Clea&r preview Vo&rschau löschen Profile Config Configure Mass Tagging Profiles Stapelverarbeitungsprofile konfigurieren Masstagging Profiles Stapelverarbeitungsprofile Profile Editor Edit Masstagging Profile Stapelverarbeitungsprofile bearbeiten Masstagging Profile Stapelverarbeitungsprofile <p>If no tag information is found in a file, the tags retrieved using this pattern will be used instead.</p> <p>Wenn keine Tag-Information in einer Datei gefunden wird, werden die Tags anhand der Vorlage erstellt.</p> <p>The artist and album fields will be used in determining whether an album matches the retrieved one. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater or equal than what you specify here it'll be considered to match.</p> <p>Das Interpret- und das Albumfeld werden verwendet, um Suchergebnisse mit dem Album zu vergleichen. Jedes Feld wird mit Hilfe eines Fuzzy-Al­go­rith­mus verglichen. Wenn die prozentuale Übereinstimmungswahrscheinlichkeit dem hier eingegebenen Wert entspricht oder höher ist, wird das Suchergebnis berücksichtigt.</p> <p>The fields listed here will be used in determining whether a file matches a retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Das hier angegebenen Felder werden verwendet, um Suchergebnisse mit der Datei zu vergleichen. Jedes Feld wird mit Hilfe eines Fuzzy-Al­go­rith­mus verglichen. Wenn die prozentuale Übereinstimmungswahrscheinlichkeit höher ist als der hier eingegebene Wert, wird das Suchergebnis berücksichtigt.</p> Brute force unmatched files. 'Brute Force' für nicht übereinstimmende Dateien anwenden. <p>Check to enable brute forcing matches. If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Brute Force verwenden um Entsprechungen zu erzwingen. Wenn eine für eine Datei kein unmittelbare Übereinstimmung gefunden werden kann, werden die Dateien und die Suchergebnisse nach Dateinamen sortiert und entsprechenden Tracks zugeordnet.</p> Update empty fields only. Nur leere Felder aktualisieren. &Name: &Description &Beschreibung Pattern to match filenames against. Vorlage zum Abgleich mit Dateinamen. Minimum percentage required for album matches. Mindestübereinstimmung bei Albumsuche. Match tracks using fields: Suche Tracks nach Feld: Minimum percentage required for track match. Mindestübereinstimmung bei Tracksuche. Edit Tag Source Config Bearbeite Tagquellenkonfiguration <p>Enter a comma-seperated list of fields to retrieve. Leave empty to retrieve all available fields/values. <br /><br />Eg. <b>artist, album, title</b> will only retrieve the artist, album and title fields of from the Tag Source. <br /><br />Start the list with the tilde (~) character to write all retrieved fields , but the ones listed. Eg the field list <b>~composer,__image</b> will write all fields but the composer and __image (aka cover art) fields.</p><p>If a field has been retrieved in a previous Tag Source the values will be combined if they differ. Eg. If genre=<b>Rock</b> for the first tag source polled and genre=<b>Alternative</b> for the tag source polled second then the resulting field will have multiple-values ie. genre=<b>Rock\\Rap</b> <p>Geben Sie eine kommagetrennte Aufzählung von abzurufenden Feldern ein. Lassen Sie den Eintrag frei um alle verfügbaren Felder abzurufen.<br /><br />Z.B. <b>artist, album, title</b> ruft nur Interpret, Album und Titel von der Tagquelle ab.<br /><br />Wenn sie die Aufzählung mit einer Tilde (~) beginnen, werden alle Felder abgerufen außer die aufgeführten. Z.B. Die Aufzählung <b>~composer,__image</b> wird alle Felder abrufen außer dem Komponisten und dem Cover.</p><p>Wen ein Feld aus einer vorhergehenden Tagquelle abgerufen wurde, werden die Einträge kombiniert sofern sie unterschiedlich sind. Z.B. Wenn Genre=<b>Rock</b> in der ersten abgerufenen Tagquelle und Genre=<b>Alternative</b> in der zweiten abgerufenen Tagquelle dann wird endgültige Feld mehrere Einträge haben zB.. genre=<b>Rock\\Rap</b> Fields to replace: zu ersetzende Felder: Enter a comma-separated lists of fields that'll replace any retrieved from previously polled tag sources. <br />Start the list with the tilde (~) character to replace all but the fields you list. <br /><b>NB: Fields listed here must also be listed in the list of fields to retrieve.</b><br /><br />Eg. Assume you have two Tag Sources. The first retrieves <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. The second source gets <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. For the second Tag Source, setting just <b>artist</b> as the list of fields to replace will overwrite the artist field retrieved from the first tag source. The resulting retrieved fields/values as shown in puddletag will then be <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. Geben Sie eine kommagetrennte Aufzählung von Felder die ersetzt und von der vorherigen Tagquelle abgerufen werden sollen. <br />Beginnen Sie ihre Eingabe mit einer Tilde (~) um alle außer die angegebenen Felder zu ersetzen. <br /><b>NB: Hier angegebene Felder müssen auch in der Liste der abzurufenden Felder aufgeführt werden. </b><br /><br />z.B..Angenommen Sie verwenden zwei Tagquellen. Die erste ergibt <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. Die zweite Quelle ergibt <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. Geben Sie für die zweite Quelle nur <b>artist</b> als zu ersetzendes Feld ein. Dies wird das Interpretenfeld aus der ersten Quelle überschreiben. Dann werden folgende Einträge in puddletag angezeigt: <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. &Source &Quelle &If no results found: &Wenn keine Ergebnisse gefunden werden: <p><b>Continue</b>: The lookup for the current album will continue by checking the other tag sources if no matching results were found for this tag source.</p><p><b>Stop:</b> The lookup for the current album will stop and any previously retrieved results will be used.</p> <p><b>Fortsetzen</b>: Die Suche nach dem aktuellen Album wird in den anderen Tagquellen fortgesetzt wenn in dieser Tagquelle keine passenden Suchergebnisse gefunden werden.</p><p><b>Stopp:</b> Die Suche nach dem aktuellen Album wird angehalten und vorherige Suchergebnisse werden verwendet.</p> <p>If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Wenn für eine Datei kein passendes Suchergebnis gefunden wird, werden sowohl die Dateien als auch die Suchergebnisse nach Dateinamen sortiert. Sich entsprechende Tracks werden angepasst.</p> <p>The fields listed here will be used in determining whether a track matches the retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Die hier angegebenen Felder werden verwendet, um einen Track mit einem Suchergebnis abzugleichen. Jedes Feld wird mit Hilfe eines Fuzzy-Al­go­rith­mus verglichen. Wenn die prozentuale Übereinstimmungswahrscheinlichkeit höher ist als der hier eingegebene Wert, wird das Suchergebnis berücksichtigt.</p> Minimum &percentage required for album matches. &Mindestübereinstimmung bei Albumsuche. Match tracks using &fields: Ordne Track nach folgenden &Feldern zu: Progress Dialog Please Wait... Bitte warten... %1%2 of %3... %1%2 von %3... QuodLibet &Library Path &Bibliothekspfad ... Select QuodLibet library file... Wähle QuodLibet Bibliothek... %1 (%2) %1 is an invalid QuodLibet music library file. %1 ist eine ungültige QuodLibet Musikbibliothek. Settings Patterns Vorlagen Tag Panel Tag-Panel General Allgemein Confirmations Bestätigungen Mappings Feldzuordnungen Playlist Wiedergabeliste Colours Farben Genres Tags Plugins Shortcuts Tastenkombinationen An error occurred while saving the settings of <b>%1</b>: %2 Ein Fehler ist während des Speicherns der Einstellungen von <b>%1</b> aufgetreten : %2 &Windows &Fenster Tag Sources Tagquellen Shortcut Editor Enter a key sequence for the shortcut. Legen Sie eine Tastenkombination fest. &Don't assign keyboard shortcut. &Tastenkombination nicht festlegen. Shortcut Settings <b>Double click a cell in the Shortcut Column to <br />modify the key sequence.</b> <b>Doppelklicken Sie ein Feld der Tabelle um die Tastenkombination zu bearbeiten.</b> Description Beschreibung Shortcut Tastenkombination Edit Shortcuts Tastenkombinationen bearbeiten File Properties Dateieigenschaften Shortcuts &Clear &Aufheben Invalid shortcut sequence. Ungültige Tastenkombination. (Deleted) (Gelöscht) Status Bar <b>%s</b> New Filename: <b>%1</b> Neuer Dateiname: <b>%1</b> Table Preview: %1 Real: %2 Vorschau: %1 Tatsächlich: %2 Disable Preview Mode first to enable tag deletion. Deaktivieren Sie zuerst den Vorschaumodus um die Löschung von Tags einzuschalten. An error occurred while deleting the tag of %1: <b>%2</b> Ein Fehler ist bei der Löschung des folgenden Tags aufgetreten: %1: <b>%2</b> There was an error deleting the tag of %1: <b>Tag deletion isn't supportedfor %2 files.</b> Es ist ein Fehler beim Löschen des Tag von %1 aufgetreten: <b>Taglöschung für %2-Dateien wird nicht unterstützt.</b> Deleting tag... Lösche Tag... Are you sure you want to delete the selected files? Wollen Sie die ausgewählten Datein wirklich löschen? Deleting Löschen An error occurred while trying to play the selected files: <b>%1</b> <br />Does the music player you defined (<b>%2</b>) exist? Ein Fehler ist beim Versuch die Datei <b>%1</b> wiederzugeben aufgetreten. <br />Ist das eingestellte Wiedergabeprogramm (<b>%2</b>) installiert? It wasn't possible to play the selected files, because the music player you defined (<b>%1</b>) does not exist. Es ist nicht möglich, die ausgewählten Dateien wiederzugeben, weil das eingestellte Wiedergabeprogramm (<b>%1</b>) nicht installiert ist. Tag Panel Settings Row Zeile All row numbers must be integers. Alle Zeilennummern müssen ganzzahlig sein. Tag Settings &Restrict incoming files to (eg. "*.mp3; *.ogg; *.aac") Einlesen neuer Dateien besch&ränken (z.B. "*.mp3; *.ogg; *.aac") Remove ID3v1 tag. ID3v1 tag entfernen. Update the ID3v1 tag's values only if an ID3v1 tag is present. Einträge des ID3v1 Tags nur aktualisieren, wenn ein ID3v1 Tag vorhanden ist. Create an ID3v1 tag if it's not present. Otherwise update it. ID3v1 Tag erzeugen wenn keiner vorhanden ist. Sonst aktualisieren. puddletag writes only &ID3v2 tags.<br />What should be done with the ID3v1 tag upon saving? puddletag schreibt nur &ID3v2 Tags.<br />Wie soll beim Speichern mit den ID3v1 Tags verfahren werden? Default &pattern to use when saving artwork. Standardvorlage beim S&peichern von Covern. ID3 Options ID3 Einstellungen Write ID3v2.&4 Schreibe ID3v2.&4 Write ID3v2.&3 Schreibe ID3v2.&3 Tag Sources <b>Error parsing artist/album combinations.</b> <b>Fehler beim parsen der Interpret/Album-Kombination.</b> Retrieving cover: %s Empfange Cover: %s HTTPError 403: Forbidden Page doesn't exist Seite existiert nicht Text File -> Tag Import tags from text file Importiere Tags aus Textdatei Text Tag preview Tagvorschau &Select File Au&sgewählte Datei &Paste Clipboard &Zwischenablage einfügen The file <b>%1</b> couldn't be loaded.<br /> Do you want to choose another? Die Datei <b>%1</b> konnte nicht geladen werden.<br /> Wollen Sie eine andere Datei auswählen? Error Fehler &Yes &Ja &No &Nein WebDB Retrieved Albums (sorted by %s) Abgerufene Alben (sortiert nach %s) <b>Error in pattern</b> <b>Fehler in Vorlage</b> Retrieved Albums Abgerufene Alben An error occured: %1 Ein Fehler ist aufgetreten: %1 An unhandled error occured: %1 Ein unbekannter Fehler ist aufgetreten: %1 Retrieving album tracks... Albumtracks abrufen... Retrieval complete. Abruf komplett. Retrieving tracks... Tracks abrufen... No matching albums were found. Keine übereinstimmenden Alben wurden gefunden. More than one album matches. None will be retrieved. Mehr als eine Übereinstimmung. Es wird keine Information abgerufen. Retrieving album. Album abrufen. Enter search parameters here. If empty, the selected files are used. <ul><li><b>artist;album</b> searches for a specific album/artist combination.</li><li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li></ul> Geben Sie hier Suchbegriffe ein. Wenn Sie diese Feld leer lassen, werden die Dateinamen als Suchbegriffe verwendet. <ul><li><b>artist;album</b> sucht nach einer bestimmten Interpret-Albumkombination.</li><li>Um die Alben eines Interpreten anzuzeigen, geben Sie kein Album ein, behalten das Semikolon bei. (z.B. <b>Ratatat;</b>). Für eine Albumsuche geben Sie keinen Interpreten ein, z.B. <b>;Resurrection.</li></ul> Enter a comma seperated list of fields to write. <br /><br />Eg. <b>artist, album, title</b> will only write the artist, album and title fields of the retrieved tags. <br /><br />If you want to exclude some fields, but write all others start the list the tilde (~) character. Eg <b>~composer, __image</b> will write all fields but the composer and __image fields. Geben Sie eine kommagetrennte Aufzählung von Felder ein, in die geschrieben werden soll. <br /><br />z.B.. <b>artist, album, title</b> schreibt abgerufene Suchergebnisse nur in das Interpreten-, Album- und das Titelfeld. <br /><br />Wenn Sie bestimmte Felder ausschließen aber in alle anderen Felder schreiben wollen, beginnen Sie die Aufzählung mit einer Tilde (~). Z.B. <b>~composer, __image</b> schreibt in alle Felder außer das Komponisten- und Coverfeld. <b>Nothing to display.</b> <b>Keine Information.</b> Couldn't load Mp3tag Tag Source %s Kann Mp3Tag Tagquelle nicht laden %s Configure: %s Konfiguriere: %s Add sort option Sortierreihenfolge hinzufügen Enter a sorting option (a comma-separated list of fields. Eg. "artist, title") Geben Sie eine Sortierreihenfolge ein (eine kommagetrennte Aufzählung von Feldern. Z.B. "artist, title") Edit sort option Sortierreihenfolge bearbeiten &Display format for individual tracks. Format für einzelnen &Tracks anzeigen. Display format for &retrieved albums Format für abgerufene &Alben anzeigen Sort retrieved albums using order: Alben anhand folgender Reihenfolge sortieren: User-Agent to when accessing web sites. Benutzerkennung beim Websitenzugriff. Automatic retrieval options Automatische Empfangsoptionen Sour&ce: &Quelle: Configure Konfiguration &Search &Suche &Write &Schreibe Select files and click on Search to retrieve metadata. Wählen Sie Dateien und klicken Sie auf Suche um Metadaten abzurufen. Update empty fields only. Nur leere Felder aktualisieren. Automatically retrieve matches. Übereinstimmungen automatisch abrufen. Searching complete. Suche abgeschlossen. Searching... Suche... <b>Select some files or enter search paramaters.</b> <b>Wählen Sie Dateien oder geben Sie Suchbegriffe ein.</b> An unhandled error occurred: %1 Ein unbekannter Fehler ist aufgetreten: %1 <b>Tags were written.</b> <b>Tags werden geschrieben.</b> Retrying search with %s S&ubmit Tags Submission completed. puddletag-1.0.2/translations/puddletag_nl-nl.ts0000644000175000001440000051253412170511246022121 0ustar keithusers00000000000000 About puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). puddletag is een audio tag editor voor GNU/Linux vergelijkbaar met het Windows programma Mp3tag. <br /><br />Functies zijn: Batch bewerking van tags, bestanden hernoemen door gebruik te maken van tags, tags verkrijgen uit de bestandsnaam, gebruik maken van Acties om repitieve taken te autmatiseren, uw muziek-bibliotheek importeren en talloze andere gave funties. <br /><br /> Ondersteunde formaten: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) en APEv2 (.ape) <br />< br /> Bezoek de website van puddletag (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) voor hulp en updates.<br /><br /> &copy; 2010 contentricpuddle (contentricpuddle@gmail.com) <br /> Gelicenseerd door de GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>).¶ <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> voor zijn vele goede ideeën en kwam met meer bugs dan wat voor een mens mogelijk zou zijn.<br /><br /> Aan de programmeurs die de benodigde bibliotheken waar puddletag van af hangt geschreven hebben (die waarschijlijk nog bezig zijn met het schrijven van een id3-reader).<br /><br /> <b>Paul McGuire</b> voor PyParsing.<br /> <b>Michael Urman</b> en <b>Joe Wreschnig</b> voor Mutagen (Het Is Geweldig).<br /> <b>Phil Thomson</b> en iedereen die verantwoordelijk is voor PyQt4<br /> <b>Michael Foord</b> en <b>Nicola Larosa</b> voor ConfigObj (serieus, ze zouden ConfigParser moeten vervangen voor ConfigObj).<br /> Het <br>Oxygen team</b> voor de Oxygen iconen. About puddletag Over puddletag <h2>puddletag %1 (Changeset %2)</h2> %3 <h2>puddletag %1 (Changeset %2)<h2> %3 <h2>puddletag %1</h2> %2 <h2>puddletag %1</h2> %2 &About &Over &Thanks &Bedankt puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2008-2012 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv3 (<a href="www.gnu.org/licenses/gpl-3.0.html">www.gnu.org/licenses/gpl-3.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> First off, a big thanks to **Evan Devetzis** for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. Thanks to <b>Raphaël Rochet</b>, <b>Fabian Bakkum</b>, <b>Alan Gomes</b> and others for contributing translations. To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. AcoustID Calculating ID Retrieving AcoustID data: %1 of %2. Retrieving MB album data: %1 Error generating fingerprint: %1 Error retrieving data: %1 Minimum Score Parsing Data Error submitting data: %1 Submitting data to AcoustID: %1 to %2 of %3. Found AcoustID in file. File #%1: %2 AcoustID Key Please enter AcoustID user key in settings. Actions Enter a name for the shortcut. Vul een naam in voor de snelkoppeling. Modify Action Acties wijzigen Actions Acties Assign &Shortcut Snelkoppeling &Toewijzen <p>Creates a shortcut for the checked actions on the Actions menu. Use Edit Shortcuts (found by pressing down on this button) to edit shortcuts after the fact.</p> <p>Maakt een snelkoppeling voor de gecontrolleerde acties in het Acties menu Gebruik Bewerk Snelkoppelingen (worden gevonden door op dit menu te klikken) om snelkoppelingen te bewerken na de feiten.</p> Edit Shortcuts Snelkoppelingen wijzigen New Action Nieuwe actie Enter a name for the new action. Vul een naam in voor de nieuwe actie. Edit Action: Actie wijzigen: Edit Action: %s Actie wijzigen: %s Error: Using <b>__selected</b> in Actions is not allowed. Please enter some fields to write to. Add Action: Amazon Invalid Access or Secret Key Ongeldige toegang of geheime-sleutel Retrieving search results for keywords: %s Bezig met het ophalen van de zoekresultaten, van de zoekwoorden: %s Invalid XML returned. Ongeldige XML ontvangen. %s at Amazon.com %s op Amazon.com Retrieving using ASIN: %s Bezig met ophalen door gebruik te maken van ASIN: %s Retrieving XML: %1 - %2 Bezig met ophalen van het XML-bestand: %1 - %2 Retrieving cover: %s Bezig met het ophalen van de cover: %s <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do an Amazon album search using those keywords.</li> </ul> <p>Vul de zoekparameter hier in. Indien leeg, worden de geselecteerde bestanden gebruikt.</p> <ul> <li><b>artiest;album</b> zoekt voor een gespecificeerde album/artiest combinatie.</li> <li>Om albums door de zelfde artiest te catalogiseren, laat dan het album weg, maar behoud de puntkomma (bijv. <b>Ratatat;</b>) Om alleen een album te zoeken laat dan de artiest weg zoals <b>;Resurrection.</li> <li>Door zoekwoorden in te vullen <b>zonder puntkomma (;)</b> zal zorgen voor een Amazon album zoekopdracht met gebruik van deze sleutelwoorden.</li> </ul> Retrieve Cover Cover ophalen Cover size to retrieve Grootte van de cover om te ophalen Small Klein Medium Middelmatig Large Groot Access Key (Stored as plain-text. Leave empty for default.) Toegangssleutel (Opgelagen als plain-text. Laat deze standaard leeg.) Secret Key (Stored as plain-text. Leave empty for default.) Geheime sleutel (Bewaart als plain-text. Laat deze standaard leeg.) Invalid XML returned. No tracks listed. Original Size Artwork Enter a description Voer een beschrijving in <p>Enter a description for the current cover.</p><p>For ID3 tags the description has to be different for each cover as per the ID3 spec. If they don't differ then spaces are appended to the description when the tag is saved.</p> <p>Vul een beschrijving in voor de huidige cover.</p><p>Voor ID3 tags moet de beschrijving verschillen voor elke cover per ID3 specificatie. Als deze niet verschillen zullen de lege ruimtes toevoegen aan de beschrijving nadat de tag opgeslagen is.</p> &Description &Beschrijving &Type &Soort <p>Select a cover type for the artwork.</p> <p>Selecteer een cover soort voor de hoes</p> &Save cover to file &Cover opslaan als bestand &Add cover &Cover toevoegen &Remove cover &Cover verwijderen &Change cover &Cover wijzigen Select Image... Selecteer een afbeelding... JPEG Images (*.jpg);;PNG Images (*.png);;All Files(*.*) JPEG afbeeldingen. (*.jpg);;;PNG afbeeldingen (*.pmg);;;Alle bestanden(*.*) Save artwork as... Cover opslaan als... Writing to <b>%1</b> failed. Schrijven naar <br>%1</b> is mislukt. Enter description Beschrijving invullen Artwork Context %1/%2 %1/%2 Cover Varies De covers variëren No Images Geen afbeeldingen Autonumbering Wizard Autonumbering Wizard Automatische nummerings wizard &Start: &Start: Max length after padding with zeroes: Maximale lengte na vulling met nullen: Add track &separator ['/']: Number of tracks &Scheidingsteken toevoegen aan nummers ['/']: Aantal nummers &Restart numbering at each directory. &Herstart de opsomming in elke map. Add track &separator ['/'] Colour Settings <p>Below are the backgrounds used for various controls in puddletag. <br /> Double click the desired action to change its colour.</p> <p>Hier onder staan verschillende achtergronden die gebruikt worden voor de besturing in puddletag. <b /> Dubbelklik op de gewenste actie om de kleur te wijzigen.</p> Row selected in file-view. De geselecteerde lijst in bestandsoverzicht. Row colour for files with previews. Lijstkleur voor bestanden met voorbeelden. Field added in Extended Tags. Veld toegevoegd in Verlengde Tags. Field edited in Extended Tags. Veld gewijzigd in Verlengde Tags. Field removed in Extended Tags. Veld verwijderd in Verlengde Tags. Column Settings Title Titel Columns Kolommen Adjust visibility of columns. De doorzichtigheid van de kolommen wijzigen. &Select Columns &Selecteer kolommen Combo Box Remove current item. Huidige object verwijderen. Confirmations Confirm when exiting preview mode. Bevestigen wanneer de voorbeeldweergave gesloten wordt. Confirm when deleting files. Bevestiging wanneer er bestanden verwijderd worden. Cover Type Other Anders O O File Icon Bestands icoon I I Other File Icon Ander bestand icoon OI OI Cover (front) Cover (voorkant) CF CF Cover (back) Cover (achterkant) CB CB Leaflet page Brochure pagina LF LF Media (e.g. label side of CD) Media (bijv. label aan de zijkant van de CD) M M Lead artist Leidende artiest LA LA Artist Artiest A A Conductor Dirigent C C Band Band B B Composer Componist CP CP Lyricist Tekstschrijver L L Recording Location Opname locatie RL RL During recording Tijdens de opname DR DR During performance Tijdens het optrede DP DP Movie/video screen capture Film/opname van het scherm MC MC A bright coloured fish Een felgekleurde vis F F Illustration Illustratie P P Band/artist logotype Band/artiest logotype BL BL Publisher/Studio logotype Uitgever/Studio logotype PL PL Defaults &Fields &Velden Yes Ja No Nee <blank> <wissen> <keep> <houden> Various Varierende MusicBrainz MusicBrainz SYNTAX ERROR in $%1: %2 SYNTAX ERROR in $%1: %2 SYNTAX ERROR: %s expects a number at argument %d. SYNTAX ERROR: %s verwacht een nummer bij het argument %d. Various Artists Varierende artiesten Error Fout <br /> Do you want to continue? <br /> Wilt u doorgaan? Field Veld OK Akkoord Cancel Sluiten Writing Schrijven &Yes &Ja &No &Nee Reading Directory: %1 Bezig met lezen van map: %1 Reading Directory: %1 + others Bezig met lezen van map: %1 +andere Reading Dir Map aan het lezen Loading Laden &Edit &Bewerken Appl&y Toepasse&n Filter: Filer: Go Gaan Title Titel An error occured while writing to <b>%1</b>. (%2) Er is een fout opgetreden tijdens het schrijven naar <b>%1</b>. (%2) Fields: Velden: <p>An error occured while renaming the directory <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b><br />File used: %4</p> <p>Er is een fout opgetreden tijdens het hernoemen van de map <b>%1</b>naar<i>%2</i>.</p><p>Reden: <b>%3</b><br />Bestand gebruikte %4</p> <p>An error occured while renaming the file <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b></p> <p>Er is een fout opgetreden tijdens het hernoemen van het bestand <b>%1</b> naar <i>%2</i>.</p><p>Reden: <b>%3</b></p> <p>An error occured while writing to <b>%1</b>.</p><p>Reason: <b>%2</b> (<i>See ~/.puddletag/log.log for debug info.</i>)</p> <p>Er is een fout opgetreden tijdens het schrijven naar <b>%1</b>.</p><p>Reden: <b>%2</b> (<i>Bekijk ~/.puddletag/log.log voor debug informatie</i>)</p> %s images %s afbeeldingen function does not exist. Never show this message again. Connection Error: %s Dialogs Album Art Cover Tag Panel Tag paneel Artwork Cover Filesystem Bestandssysteem Filter Filter Tag Sources Tagbronnen Stored Tags Opgeslagen tags Logs Logs Mass Tagging Massaal taggen Functions Functies Actions Acties Dir Renaming An error occured while renaming <b>%1</b> to <b>%2</b>. (%3) Er is een fout opgetreden tijdens het hernoemen van <b>%1</b> naar <b>%2</b>. (%3) Renaming Hernoemen I couldn't rename: <i>%1</i> to <b>%2</b> (%3) Ik kon: <i>%1</i> niet naar <b>%2</b> (%3) hernoemen Rename: <b>%1</b> to: <i>%2</i> Hernoem: <b>%1</b> naar:<i>%2</i> Dirview Refresh Directory Map vernieuwen Show Header Laat rubriek zien Hide Header Verberg rubriek Open in File Manager Openen in de bestandsbeheerder Subfolders Submap Discogs Retrieving search results for keywords: %s Bezig met ophalen van de zoekresultaten met de zoekwoorden: %s %s at Discogs.com %s bij Discogs.com Retrieving using Release ID: %s Bezig met ophalen van Release ID: %s Retrieving album %s Bezig met ophalen van album %s Retrieving cover: %s Bezig met ophalen van cover: %s Error retrieving image: Een fout is opgetreden tijdens het ophalen van de afbeelding: <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Using <b>:r id</b> will retrieve the album with Discogs ID <b>id</b>.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do a Discogs album search using those keywords.</li> </ul> <p>Vul een zoekparameter hier in, indien leeg, worden de geselecteerde bestanden gebruikt.</p> <ul> <li><b>artiest;album</b> zoekt voor een specifieke album/artiest zoekcombinatie.</li> <li>Om een een lijst te catalogiseren van albums van de zelfde artiest, laat het album dan weg, maar behoud de puntkomma (bijv. <b>Ratatat</b>. Om alleen een album te zoeken, laat dan het artiest gedeelte zo <b>;Resurrection.</li> <li>Door gebruik te maken van <b>:r id</b> zal het album worden ontvangen van Discogs ID <b>id</b> </li> <li>Door zoekwoorden <b>zonder puntkomma (;)</b> zal zorgen voor een Discogs-album zoekactie met de aangegeven zoekwoorden.</li> </ul> Retrieve Cover Cover ophalen Cover size to retrieve Covergrootte om op te halen Small Klein Large Groot Field to use for discogs_id Te gebruiken veld voor discogs_id API Key (Stored as plain-text.Leave empty to use default.) API Sleutel (Bewaart als plain-text. Laat deze standaard leeg.) Invalid Discogs Release ID Ongeldige Losgelaten Discogs ID Checking tracks for Discogs Album ID. Bezig met zoeken naar Discogs Album ID in de nummers. No Discogs ID found in tracks. Geen Discogs ID gevonden in de nummers. Found Discogs ID: %s Discogs ID: %s is gevonden Edit Field Edit Field Veld bewerken &Field &Veld &Value &Waarde A&dd Toevoege&n E&dit Bewerke&n Errors Couldn't create intermediate directory: %s Kon de tussenliggende map: %s niet aanmaken Cannot move directory to a subdirectory within itself. U kunt de map niet verplaatsen naar de submap in de zelfde map. No closing bracket found. Your filesystem encoding was detected as <b>ASCII</b>. <br />You won't be able to rename files using accented, <br /> cyrillic or any characters outside the ASCII alphabet. Extended Tags Field Veld Value Waarde Resets the selected fields to their original value. Hiermee worden de geselecteerde velden hersteld naar de originele waarde. Different files. Verschillende bestanden. Fields Filename Bestandsnaam Artist Artiest Title Titel Album Album Track Nummer Length Lengte Year Jaar Bitrate Bitrate Genre Genre Comment Commentaar Dirpath Maplocatie FreeDB <b>FreeDB does not support text-based searches.</b> <b>FeeDB ondersteund geen op tekst gebaseerde zoekopdrachten.</b> Functions At most %1 arguments expected. %2 given. De meeste %1 argumenten worden als verwacht. %2 meegegeven. At least %1 arguments expected. %2 given. In ieder geval %1 agumenten verwacht. %2 meegegeven. Tag->File: $1 Tag->bestand: $1 Tag to filename Tag naar bestandsnaam &Pattern &Patroon Replace $0: '$1' -> '$2', Match Case: $3, Words Only: $4 Vervang $0: '$1' -> '$2', Overeengekomen: $3, Alleen woorden: $4 Replace Vervang &Replace &Vervangen w&ith: b&reedte: Match c&ase: Overeengekomen g&evallen: only as &whole word alleen als &heel woord Update from $2, Fields: $1 Updaten vanaf $2, Velden: $1 Update from tag Updaten van tag &Field list (; separated): &Veld lijst (;gescheiden): &Tag &Tag APEv2 APEv2 ID3 ID3 Trim $0 Versier $0 Trim whitespace Versier met witte ruimte Export Art: pattern='$1' Cover exporteren: patroon='$1' Export artwork to file Exporteer cover naar een bestand &Pattern (extension not required) &Patroon (extensie is niet vereist) folder_%img_counter% map_%afbeelding_teller% Autonumbering: $0, Start: $1, Restart for dir: $2, Padding: $3 Automatische nummering: $0, Start: $1, Herstart bij map: $2, Aanvulling $3 Autonumbering Automatische nummering oi oi 1 1 aoeu aoeu False Onjuist au au Sort $0, order='$1', Match Case='$2' Sorteer $0, bestelling='$1', Overeengekomen='$2' Sort values Waarden sorteren &Order &Bestelling Ascending Oplopende Descending Aflopende Match &Case Overeengekomen &geval Tag->Dir: $1 Tag->Map: $1 Tag to Dir Tag naar map &Pattern (can be relative path) &Patroon (kan een aangekoppelde locatie zijn) %artist% - %album% %artiest% - %album% Format $0 using $1 Formaat $0 gebruikt $1 Format value Formaat waarde &Format string String &formateren RegReplace $0: RegExp '$1' with '$2', Match Case: $3 RegReplace $0: RegExp '$1' met '$2'. Overeengekomen: 3 Replace with RegExp Vervangen door RegExp &Regular Expression &Regular Expression Replace &matches with: Vervang &overeenkomsten met : Artwork: Filenames='$1', Description='$2', Case Sensitive=$3 Coever: bestandsnamen='$1', Beschrijving='$2', Hoofdlettergevoeligheid=$3 Load Artwork Cover laden &Filenames to check (;-separated, shell wildcards [eg. *] allowed) &Bestandsnamen om te controleren (; gescheiden met jokertekens [bijv. *] is toegestaan) &Default description (can be pattern): &Standaard beschrijving (kan een patroon zijn): Match filename's &case: Overeengekomen &bestandsnamen: Merge field: $0, sep='$1' Velden samenvoegen: $0, sep='$1' Merge field Veld samenvoegen &Separator &Scheidingsteken ; ; Remove Dupes: $0, Match Case $1 Dubbele verwijderen: $0, Overeengekomen resultaat $1 Remove duplicate values Dubbele waardes verwijderen Text File: $0, '$1' Tekstbestand: $0, '$1' Import text file Tekstbestand importeren lyrics.txt liedtekst.txt Remove fields except: $1 Deze velden verwijderen behalve: $1 Remove all fields except Alle velden verwijderen behalve <blank> $0 <blank> $0 Remove Fields Velden verwijderen Convert Case: $0: $1 Geval converteren: $0: $1 Case conversion Hoes conversie &Type &Type Mixed Case Verschillende hoesjes UPPER CASE HOOFDLETTER lower case kleine letters For &Mixed Case, after any of: Voor &verschillende hoezen, na elke van: ., ! ., ! Convert to encoding: $0, Encoding: $1 Converteren naar encodering: $0, Encodering: $1 Convert from non-standard encoding Converteren naar niet-standaard encodering &Encoding &Encoderen cp1250 cp1250 cp1251 cp1251 cp1252 cp1252 cp1253 cp1253 cp1254 cp1254 cp1255 cp1255 cp1256 cp1256 cp1257 cp1257 cp1258 cp1258 Text to Tag: $0 -> $1, $2 Tekst naar Tag: $0 -> $1, $2 Text to Tag Tekst naar Tag &Text &Tekst &Output &Uitkomst Split using separator $0: sep='$1' Splitsen met scheidingsteken $0: sep='1' Split fields using separator Velden splitsen met scheidingsteken File->Tag '$1' Bestand-> Tag '$1' Filename to Tag Bestandsnaam naar Tag Functions Dialog <b>No change.</b> <b>Geen veranderingen.</b> <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> <p>Velden waarnaar geschreven zullenl worden.</p> <ul> <li>Vul een lijst in waarbij de velden gescheiden zijn met een komma bijv. <b>artiest, titel, album</b></li> <li>Gebruik de <b>__geselecteerde</b> voor slechts de geselecteerde kolommen.</li> <li>Combinaties zoals <b>__geselecteerde, artiest, titel</b> zijn toegestaan</li> <li>Maar gebruik maken van <b>__geselecteerde</b> in Acties is dat<b>niet</b></li> <li>'~' zal worden geschreven naar alle velden met uitzondering op bijv. <b>~artiest, titel</b> die zullen geschreven worden naar alle bestanden, maar de artiestnaam en titel velden gevonden in de geselecteerde bestanden.</li> </ul> No preview for is shown for this function. Er is geen voorbeeld getoond voor deze functie. <b>No change</b> <b>Geen veranderingen</b> Functions Functies <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells. It is not allowed when creating an action.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> GenSettings &Edit sort options &Sorteeropties bewerken <Autodetect> <Detecteren> Default Standaard Language (Requires a restart) Taal (Vereist een herstart) Su&bfolders Su&bmappen Show &gridlines Toon &rasterlijnen Show tooltips in file-view: Tooltips in bestandsweergave tonen: Show &row numbers &Rijnummers tonen Automatically resize columns to contents Automatisch het formaat van de kolommen wijzigen op basis van de inhoud &Preserve file modification times Wijzigingstijden &bewaren Program to &play files with: Muziekspeler om uw muziekbestanden mee af te &spelen: &Load last folder at startup Laatst gebruikte map &laden bij start List Buttons Add Toevoegen Remove Verwijderen Move Up Omhoog verplaatsen Move Down Omlaag verplaatsen Edit Bewerken Duplicate Dupliceren &>> &>> &<< &<< Logs &Copy &Kopiëren &Clear &Opschonen Main Window puddletag: %1 + others puddletag %1 + andere puddletag: %1 puddletag: %1 Import directory... Map importeren... Mapping Settings <ul><li>Tag is the format that the mapping applies to. One of <b>ID3, APEv2, MP4, or VorbisComment</b>. </li><li>Fields will be mapped from Source to Target, meaning that if Source is found in a tag, it'll be editable in puddletag using Target.</li> <li>Eg. For <b>Tag=VorbisComment, Source=organization, and Target=publisher</b> means that writing to the publisher field for VorbisComments in puddletag will in actuality write to the organization field.</li><li>Mappings for tag sources are also supported, just use the name of the tag source as Tag, eg. <b>Tag=MusicBrainz, Source=artist,Target=performer</b>.</li></ul> <ul><li>Tag is het formaat dat het in kaart brengen van toepassing is. Een van <b> ID3, APEv2, MP4, of vorbiscomment </b>.</li> velden worden in kaart gebracht van bron tot Target, wat betekent dat als bron wordt gevonden in een tag, het zalbewerkbare in puddletag met behulp van Target. </li> <li>Bijvoorbeeld Voor <b>Tag=VorbisComment, Source=organisatie, en Target=uitgever</b> betekent dat als je naar het uitgeverveld schrijft, voor de VorbisComments in puddletag er eigenlijk geschreven zal worden naar het organisatieveld.</li><li>Tagbronnen die in kaart gebracht zijn, worden ook ondersteund, gebruik slechts de naam van de tagbron zoals Tag, bijvoorbeeld <b>Tag=MusicBrainz, Bron=artiest, Target=artiest</b> </li></ul> Tag Tag Original Field Origineel veld Target Doelgebied <b>A restart is required to apply these settings.</b> <b>Een herstart is vereist om deze opties toe te passen.</b> Source Bron Masstagging An error occured during the search: <b>%s</b> Er is een fout opgetreden tijdens het zoeken: <b>%s</b> An error occured during album retrieval: <b>%s</b> Er is een fout opgetreden tijdens het ontvangen van de albuminformatie:<b>%s</b> Mass Tagging Massataggen &Search &Zoeken &Configure Profiles Profiel &configureren &Write Previews &Voorbeelden schrijven Clear &Preview &Voorbeelden wissen &Profile: &Profiel: &Stop &Stop <b>Lookups completed.</b> <b>Succesvol nagegaan</b> Continue Doorgaan Stop Stop Combine and continue Combineren en doorgaan Replace and continue Vervangen en doorgaan Combine and stop Combineren en stoppen Replace and stop Vervangen en stoppen Use best match Gebruik het beste resultaat Do nothing and continue Niets doen en doorgaan Default Profile Standaard profiel <b>Polling: %s</b> <b>Bevragen: %s</b> Retrieving matching album. <b>%1 - %2</b> Bezig met ophalen van zoekresultaten. <b>%1 - %2</b> Retrieving matching album. Artist=<b>%1</b> Bezig met ophalen van overeengekomen Artiest. <b>%1</b> Retrieving matching album. Album=<b>%1</b> Bezig met ophalen van overeengekomen album. Album=<b>%1</b> Retrieving matching album. Bezig met ophalen van overeengekomen album. Starting search for: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> Begonnen met zoeken naar: <br />artiest=<b>%1</b> <br />album=<b>%2</b><br /> Starting search for: <br />artist=<b>%1</b><br />album=No album name found. Bezig met zoeken naar: <br />artiest=<b>%1</b><br />album=Geen albumnaam gevonden. Starting search for: <br />album=<b>%1</b><br />artist=No artist found. Begonnen met zoeken naar:<br />album=<b>%1</b> <br />artiest=Geen artiest gevonden. No artist or album info found in files. Starting search. Geen artiest- of albuminformatie gevonden in de bestanden. Begonnen met zoeken. <b>%d</b> results found. <b>%d</b> resultaten gevonden. <b>No results were found.</b> <b>Geen resultaten gevonden.</b> <b>One</b> result found. <b>Één</b> resultaat gevonden. <b>%d</b> possibly matching albums found. <b>%d</b> mogelijk overeengekomen albums gevonden. <b>One</b> possibly matching album found. <b>Één</b> mogelijk overeengekomen album gevonden. No matches found for tag source <b>%s</b> Geen resultaat gevonden bij de tagbron <b>%s</b> Previously retrieved result does not match. Retrieving next matching album. Het zojuist ontvangen resultaat komt niet overeen. Bezig met ontvangen van volgende overeengekomen album. <br />Rechecking with results from <b>%s</b>.<br /> <br />Opnieuw controleren met resultaten van<b>%s</b> <br /> <br />Valid matches were found for the album. <br />Er zijn geldige resultaten gevonden voor dit album. <b>No valid matches were found for the album.</b> <b>Er zijn geen geldige resultaten gevonden voor dit album.</b> Rechecking Opnieuw controleren Retrying search with album name: <b>%s</b> Opnieuw proberen te zoeken met de albumnaam:<b>%s</b> Menus Help Hulp About puddletag Over puddletag About Qt Ovet Qt Toolbar Gereedschap Enabl&e Preview Mode Voorbeeldmodus inschakele&n Clear Selected &Files Geselecteerde &bestanden wissen &Write Previews Voorbeelden &schrijven &Undo Last Clear &Laatste ongedaan maken Sort &By Sorteren &op Clear Selected &Cells Geselecteerde &cellen opschonen &Plugins &Invoegtoepassingen &Open Folder &Map openen Select a directory to import into puddletag. Selecteer een map om te importeren in puddletag. &Add Folder Map &toevoegen Append a directory to current file-view. Map toevoegen aan huidige bestandsweergave. Load &playlist Afspeellijst &laden Import an m3u playlist into puddletag. Een m3u afspeellijst importeren in puddletag. Sa&ve playlist Afspeellijst &opslaan Save all files to m3u playlist. Alle bestanden opslaan als m3u afspeellijst. &Refresh &Vernieuwen Refresh current file-view. De huidige bestandsweergave vernieuwen. &Save &Opslaan &Play &Afspelen Plays the selected files in the predefined music player. Speel de geselecteerde bestanden in voorgedifinieerde muziekspeler. &File->Tag &Bestand->Tag Convert filename to tag using the pattern. Bestandsnaam converteren door gebruik te maken van het patroon. &Undo &Ongedaan maken Autonumbering &Wizard... Automatische nummerings &assistent... &Clear &Opschonen &Format &Formaat &Text File->Tag &Tekstbestand->Tag &Import Music Library... &Muziekbibliotheek importeren... &Actions &Acties &Preferences &Voorkeuren &Functions &Functies &QuickActions &Snelle Acties &Rename Directories &Mappen hernoemen &Exit &Afsluiten &Tag->File &Tag->Bestand &Increase Font &Lettertype vergroten &Decrease Font &Letterype verkleinen &Clipboard->Tag &Klembord->Tag Select &All &Alles selecteren &Invert Selection Selectie &omkeren &Select Column Kolom &selecteren &Cut &Knippen &Copy Selection Selectie &kopiëren &Paste &Plakken &Remove Tag Tag &verwijderen E&xtended Tags &Uitgebreide Tags &Delete &Verwijderen &Properties &Eigenschappen Paste &Onto Selection Plakken &in selectie &Lock Layout Weergave &vergrendelen Select &Next Directory Selecteer &volgende map Copy All &Fields Alle &velden kopiëren Delete &Without Confirmation Verwijderen &zonder bevestiging In &Library In &bibliotheek Replace... Vervangen... Remove &APEv2 Tag &APEv2 Tag verwijderen Remove All &ID3 Tags Alle &ID3 Tags verwijderen Move Selected &Up Verplaats de selectie &omhoog Move Selected Do&wn Verplaats de selectie &omlaag Select &Previous Directory Selecteer &vorige map Select all files belonging to the directories of those selected. Otherwise (if only a single directory is selected) selects all the files in the previous directory. Selecteer alle bestanden die tot deze mappen behoren van de selectie. Anders (als er slechts een enkele map is geselecteerd) word alles geselecteerd in de vorige map. Remove ID3v&2 Tag ID3v&2 Tag verwijderen Remove ID3v&1 Tag ID3v&1 Tag verwijderen &File &Bestand &Edit &Bewerken &Convert &Converteren &Tools &Gereedschap &Preview Mode &Voorbeeldmodus Ta&g Tools Ta&g gereedschap &Windows &Vensters Disabl&e Preview Mode Voorbeeldmodus &uitschakelen Online &Documentation &Forum &Bug tracker &Unload Everything Refresh &Selected Reloads directories of selected files. Messages That's a large amount of data to copy. It may cause your system to lock up. Do you want to go ahead? Copy without images. Mp3tag Retrieving search page: %s Retrieving search page... Parsing search page. Parsing search page... Retrieving album page: %s Retrieving album page... Parsing album page. Parsing album page... MusicBrainz <b>Error:</b> While retrieving %1: %2 <b>Fout:</b> Tijdens het ophalen van %1: %2 <b>Error:</b> While retrieving Album ID %1 (%2) <b>Fout:</b> Tijdens ophalen van Album ID %1 (%2) Retrieving cover: %s No images exist for this album. Invalid UUID Invalid query sent. You have exceeded your rate limit. Image does not exist. Retrieving image %s Retrieve Cover Cover ophalen Cover size to retrieve: Amount of images to retrieve: Just the front cover All (can take a while) Found album id %s in tracks. Retrieving Error retrieving image: %s MusicLib Import Music Library Muziekbibliotheek importeren Invalid library Ongeldige bibliotheek Error loading %1: %2 Fout tijdens het laden van %1: %2 Anonymous Library Anonieme bibliotheek Description was left out. Beschrijving is weggelaten. Anonymous author. Anonieme auteur. Loading music library... Muziekbibliotheek laden... An error occured while loading the %1 library: <b>%2</b> Er is een fout opgetreden tijdens het laden van de %1 bibliotheek: <b>%2</b> Music Library Muziekbibliotheek &Search &Zoeken Saving music library... Muziekbibliotheek aan het opslaan... Library Artists Bibliotheek artiesten No libraries found Geen bibliotheken gevonden Load a lib first. Eerst een lib laden. No supported music libraries were found. Most likely the required dependencies aren't installed. Visit the puddletag website, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> for more details. Er zijn geen ondersteunde bibliotheek gevonden. Waarschijnlijk zijn de benodigde componenten niet geïnstalleerd. Bezoek de puddletag website, <a href="http://puddletag.sourceforge.net>puddletag.sourceforge.net</a> voor meer details. Pattern Settings &Sort &Sorteren Enter a pattern Voer een patroon in Playlist Select m3u file... M3U bestand selecteren... An error occured while reading <b>%1</b> (%2) Er is een fout opgetreden tijdens het lezen <b>%1</b> (%2) Save Playlist... Afspeellijst opslaan... Playlist Settings &Write extended info &Uitgebreide informatie schrijven Entries &relative to working directory Locatie &relatief aan werkmap &Filename pattern. &Bestandsnaam patroon. Plugin Settings Name Naam Author Auteur Description Bschrijving Version Versie <b>Loading/unloading plugins requires a restart.</b> <b>Laden van plugins vereist een herstart.</b> Previews Some files have uncommited previews. These changes will be lost once you exit puddletag. <br />Do you want to exit without writing those changes?<br /> Sommige bestanden hebben niet toegepaste wijzigingen. Deze veranderingen zullen verloren gaan als u puddletag verlaat. <br />Wilt u afsluiten zonder de veranderingen op te slaan?<br /> Preview Mode: Off Voorbeeldmodus: Uit <b>Preview Mode: On</b> <b>Voorbeeldmodus: Aan</b> Do you want to exit Preview Mode? Wilt u de voorbeeldmodus verlaten? Clea&r preview Voorbeelde&n opschonen Some files have uncommited previews. Changes will be lost once you load a directory. <br />Do you still want to load a new directory?<br /> Sommige bestanden hebben geen machtiging tot voorbeelden. Veranderingen zullen verloren gaan zodra u een nieuwe map laad. <br />Weet u zeker dat u een nieuwe map wilt laden?<br /> Disable Preview Mode first to enable tag deletion. Schakel de voorbeeldmodus eerst uit om de tag te kunnen te verwijderen. Profile Config Configure Mass Tagging Profiles Massatag profielen configureren Masstagging Profiles Massatag profielen Profile Editor Brute force unmatched files. Brute force gebruiken op onovereengekomen bestanden. <p>If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Als er geen redelijk resultaat is gevonden voor een bestand, worden de bestanden gesorteerd op bestandsnaam. De onovereengekomen nummers worden vervolgens op elkaar afgestemd.</p> <p>The fields listed here will be used in determining whether a track matches the retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>De velden, hier in een lijst angeduid, zullen daarmee beslist worden of deze nummers daadwerkelijk overeenkomen met de opgehaalde nummerinformatie. Elk veld zal worden vergeleken door het "fuzzy matching" algoritme. Als het gemiddelde hoger is dan "Het minimale percentage" zal hij worden gebruikt.</p> <p>The artist and album fields will be used in determining whether an album matches the retrieved one. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater or equal than what you specify here it'll be considered to match.</p> <p>Het artiest en album veld zullen worden gebruikt om vast te stellen of een album overeenkomt met het opgehaalde exemplaar. Elk veld zal worden vergeleken door een vaag algoritme. Als het gemiddelde hoger is dan "Het minimale percentage" zal hij worden gebruikt.</p> Minimum &percentage required for album matches. Het minimale behaalde &percentage voordat albums overeenkomen. Match tracks using &fields: Zoek nummers door gebruik te maken van deze &velden: Minimum percentage required for track match. Minimale percentage benodigd voor overeengekomen nummers. Edit Masstagging Profile Massatag profiel bewerken Masstagging Profile Massatag profiel <p>If no tag information is found in a file, the tags retrieved using this pattern will be used instead.</p> <p>Als er geen tag informatie gevonden word in een bestand, worden de tags opgehaald door dit patroon.</p> <p>The fields listed here will be used in determining whether a file matches a retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>De velden hier onder weegegeven in een lijst, zal worden gebruikt voor het vaststellen of de bestanden overeenkomen met het opgehaalde nummer. Elk veld zal worden vergeleken door een vaag algoritme. Als het gemiddelde hoger is dan "Het mininame percentage" zal hij worden gebruikt.</p> <p>Check to enable brute forcing matches. If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Vink aan om door middel van brute force overeenkomsten te vinden. Als er redelijke resultaten worden gevonden voor een bestand worden de bestanden gesorteerd op bestandsnaam, de tags worden vervolgens afgestemd op het bestand.</p> Update empty fields only. Alleen de lege velden updaten. &Name: &Naam: &Description &Beschrijving Pattern to match filenames against. Patroon voor overeengekomen bestandsnamen. Minimum percentage required for album matches. Minimale percentage dat benodigd is voor overeengekomen albums. Match tracks using fields: Zoek overeenkomsten met de gebruikte velden: Edit Tag Source Config Tagbron configuratie bewerken <p>Enter a comma-seperated list of fields to retrieve. Leave empty to retrieve all available fields/values. <br /><br />Eg. <b>artist, album, title</b> will only retrieve the artist, album and title fields of from the Tag Source. <br /><br />Start the list with the tilde (~) character to write all retrieved fields , but the ones listed. Eg the field list <b>~composer,__image</b> will write all fields but the composer and __image (aka cover art) fields.</p><p>If a field has been retrieved in a previous Tag Source the values will be combined if they differ. Eg. If genre=<b>Rock</b> for the first tag source polled and genre=<b>Alternative</b> for the tag source polled second then the resulting field will have multiple-values ie. genre=<b>Rock\\Rap</b> <p>Voer een door komma's gescheiden lijst met velden in om op te halen. Laat leeg om allen beschikbare velden/waarden op te halen. <br /><br /> Voorbeeld: <b>artiest, album, titel</b> haalt alleen de artiest, het album en de titel velden op van de Tagbron. <br /><br />Begin de lijst met het tilde (~) teken om alle opgehaalde velden in te voeren, behalve onderstaande. Voorbeeld: <b>~componist, _afbeelding</b> zal alle velden behalve de componist en _afbeelding (cover) velden overschrijven.</p><p>Als een veld al ontvangen in in een vorige tagbron, zullen de waardes worden vergelijkt, als deze verschillen. Bijvoorbeeld Als genre=<b>Rock</b> bij de eerste tagbron en genre=<b>Alternative</b> dan zal het resulterende velt meerdere waardes krijgen bijvoorbeeld: genre=<b>Rock\\Rap</b> Fields to replace: Velden om te vervangen: Enter a comma-separated lists of fields that'll replace any retrieved from previously polled tag sources. <br />Start the list with the tilde (~) character to replace all but the fields you list. <br /><b>NB: Fields listed here must also be listed in the list of fields to retrieve.</b><br /><br />Eg. Assume you have two Tag Sources. The first retrieves <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. The second source gets <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. For the second Tag Source, setting just <b>artist</b> as the list of fields to replace will overwrite the artist field retrieved from the first tag source. The resulting retrieved fields/values as shown in puddletag will then be <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. Voer een bij komma gesorteerde lijst van velden in dat alle ontvangen tags zal vervangen door de vorige. <br />Begin de lijst met een tilde (~) symbool om alles te vervangen behalve de velden die u heeft ingevoerd. <br /><b>NB: Velden hier onder zullen ook in de velden voor de ontvangst moeten worden ingevuld.</b><br /><br />Bijvoorbeeld, ga er van uit dat er twee tagbronnen zijn. De eerste ontvangt. <b>artiest=Freshlyground, album=Nomvula, genre=Afro Pop</b> De tweede bron krijgt <b>artiest=Freshlyground, album=Nomvula, genre=Afro Pop</b>. Voor de instellingen van de tweede tagbron doe slechts <b>artiest</b> als de lijst van velden het artiest gedeelte vind zal hij het overschrijven vanuit de eerste tagbron. De ontvangen resulterende velden/waardes, weergegeven in puddletag zal dan <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b> worden. &Source &Bron &If no results found: &Als er geen resultaat voor gevonden wordt: <p><b>Continue</b>: The lookup for the current album will continue by checking the other tag sources if no matching results were found for this tag source.</p><p><b>Stop:</b> The lookup for the current album will stop and any previously retrieved results will be used.</p> <p><b>Verder</b>: Het opzoeken voor het huidige album zal doorgaan door het checken van de andere tag bronnen, als er geen passende resultaten gevonden worden voor deze tag bron.</p><p><b>Stop:</b> Het opzoeken voor het huidige album zal stopen en alle voorheen opgehaalde resultaten zullen gebruikt worden.</p> Progress Dialog Please Wait... Een ogenblik geduld... %1%2 of %3... %1%2 van %3... QuodLibet &Library Path &Bibliotheeklocatie ... ... Select QuodLibet library file... Selecteer QuodLibet bibliotheekbestand... %1 (%2) %1 (%2) %1 is an invalid QuodLibet music library file. %1 is een ongeldig QuodLibet muziek bibliotheekbestand. Settings General Algemeen Confirmations Bevestigingen Mappings Koppelingen Playlist Afspeellijst Colours Kleuren Genres Genres Tags Tags Plugins Invoegtoepassing Shortcuts Snelkoppelingen An error occurred while saving the settings of <b>%1</b>: %2 Er is een fout opgetreden tijdens het opslaan van de instellingen van <b>%1</b>: %2 &Windows &Vensters Tag Sources Tagbronnen Patterns Patronen Tag Panel Tag paneel Shortcut Editor Enter a key sequence for the shortcut. Voer een toetsencombinatie in voor de snelkoppeling. &Don't assign keyboard shortcut. &Wijs geen toetsenbord snelkoppelingen aan. Shortcut Settings File Properties Bestandseigenschappen <b>Double click a cell in the Shortcut Column to <br />modify the key sequence.</b> <b>Dubbelklik in een een snelkoppelings kolom om <br />de toetsencombinatie te wijzigen.</b> Description Beschrijving Shortcut Snelkoppeling Edit Shortcuts Snelkoppelingen bewerken Shortcuts &Clear &Opschonen Invalid shortcut sequence. Ongeldige combinatie voor de snelkoppeling. (Deleted) (Verwijderd) Status Bar <b>%s</b> <b>%s</b> New Filename: <b>%1</b> Nieuwe bestandsnaam: <b>%1</b> Table Preview: %1 Real: %2 Voorbeeld: %1 Echt: %2 Disable Preview Mode first to enable tag deletion. Schakel eerst de voorbeeldmodus uit om de tags te kunnen verwijderen. An error occurred while deleting the tag of %1: <b>%2</b> Er is een fout opgetreden tijdens het verwijderen van de tag van %1: <b>%2</b> There was an error deleting the tag of %1: <b>Tag deletion isn't supportedfor %2 files.</b> Er is een fout opgetreden tijdens het verwijderen van de tag van %1:<b>Tag verwijdering is niet toegestaan bij %2 bestanden.</b> Deleting tag... Bezig met verwijderen van de tag... Are you sure you want to delete the selected files? Weet u zeker dat u de geselecteerde bestanden wilt verwijderen? Deleting Verwijderen An error occurred while trying to play the selected files: <b>%1</b> <br />Does the music player you defined (<b>%2</b>) exist? Er is een probleem opgetreden tijdens het proberen af te spelen van de geselecteerde bestanden: <b>%1</b> <br />Bestaat de muziekspeler (<b>%2</b>) die u heeft opgegeven? It wasn't possible to play the selected files, because the music player you defined (<b>%1</b>) does not exist. Het was niet mogelijk om de geselecteerde bestanden af te spelen, omdat de muziekspeler (<b>%1</b>) die u heeft opgegeven niet bestaat. Tag Panel Settings Row Rij All row numbers must be integers. Alle rijnummers moeten hele nummers bevatten. Tag Settings &Restrict incoming files to (eg. "*.mp3; *.ogg; *.aac") &Inkomende bestandsformaten beperken naar (bijv. "*.mp3; *.ogg; *.aac") Remove ID3v1 tag. ID3v1 tag verwijderen. Update the ID3v1 tag's values only if an ID3v1 tag is present. ID3v1 tag's waardes alleen updaten als er een ID3v1 word aangeboden. Create an ID3v1 tag if it's not present. Otherwise update it. ID3v1 tag aanmaken als deze niet word weergegeven. Anders updaten. puddletag writes only &ID3v2 tags.<br />What should be done with the ID3v1 tag upon saving? puddletag kan alleen &ID3v2 tags schrijven. <br /> Wat moet er bij het opslaan met de ID3v1-tag gebeuren? Default &pattern to use when saving artwork. Standaard te gebruiken &patroon tijdens het opslaan van de covers. ID3 Options ID3 Opties Write ID3v2.&4 ID3v2.&4 schrijven Write ID3v2.&3 (Experimental) ID3v2.&3 schrijven (Experimenteel) Write ID3v2.&3 Tag Sources <b>Error parsing artist/album combinations.</b> <b>De album/artiest combinatie komt niet voor.</b> Retrieving cover: %s Bezig met ophalen van cover: %s HTTPError 403: Forbidden HTTPError 403: Toegang geweigerd Page doesn't exist Pagina bestaat niet Text File -> Tag Import tags from text file Tags importeren uit een tekstbestand Text Tekst Tag preview Tag voorbeeld &Select File &Bestand selecteren &Paste Clipboard &Plakken The file <b>%1</b> couldn't be loaded.<br /> Do you want to choose another? Het bestand <b>%1</b> kan niet geladen worden.<br />Wilt u een ander bestand kiezen? Error Fout &Yes &Ja &No &Nee WebDB <b>Error in pattern</b> <b>Fout in patroon</b> Retrieved Albums Albums ophalen An error occured: %1 Er is een fout opgetreden: %1 An unhandled error occured: %1 Een onafgehandelde fout is opgetreden: %1 Retrieving album tracks... Bezig met ontvangen van album nummers... Retrieval complete. Ophalen is voltooit. Retrieving tracks... Nummers ophalen... No matching albums were found. Geen overeenkomende albums gevonden. More than one album matches. None will be retrieved. Meer dan één album komt overeen. Geen zal worden opgehaald. Retrieving album. Album aan het ophalen. Enter search parameters here. If empty, the selected files are used. <ul><li><b>artist;album</b> searches for a specific album/artist combination.</li><li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li></ul> Voer hier de zoek parameters in. Als er niks is ingoevoerd, zullen de geselecteerde bestanden gebruikt worden. <ul><li><b>artiest;album</b>zoekt voor een specifieke album/artiest combinatie.</li><li>Om de albums te sorteren op artiest dient het album deel leeg gelaten te worden, maar behoud de puntkomma (bijv. <b>Ratatat;</b>). Voor een album dient alleen het artiest deel ingevoerd te worden. Voorbeeld:<b>;Resurrection.</li></ul> Enter a comma seperated list of fields to write. <br /><br />Eg. <b>artist, album, title</b> will only write the artist, album and title fields of the retrieved tags. <br /><br />If you want to exclude some fields, but write all others start the list the tilde (~) character. Eg <b>~composer, __image</b> will write all fields but the composer and __image fields. Vul een door komma's gescheiden veld in om wijzigingen door te voeren.<br /><br />Voorbeeld <b>artiest, album, titel</b> zal alleen de artiest, het album en de titelvelden vervangen door de opgehaalde tags. <br /><br />Als u een paar velden wil negeren, maar alle andere wel wijzigen, begint u de lijst met het tilde (~) karakter. Voorbeeld: <b>~componist, __image</b> zal alle velden invullen behalve de componist en de __image velden. <b>Nothing to display.</b> <b>Niets om weer te geven.</b> Couldn't load Mp3tag Tag Source %s Kon de Mp3tag Tagbronnen niet laden %s Configure: %s Configureren: %s Add sort option Sorteer optie toevoegen Enter a sorting option (a comma-separated list of fields. Eg. "artist, title") Vul een sorteringsoptie in (een lijst gescheiden met komma. bv. "artiest, titel") Edit sort option Sorteringsoptie bewerken &Display format for individual tracks. &Bestandsformaat weergeven voor alle bestanden. Display format for &retrieved albums Formaat weergeven voor &ontvangen albums Sort retrieved albums using order: Ontvangen albums sorteren op deze volgorde: User-Agent to when accessing web sites. User Agent voor het bezoeken van websites. Automatic retrieval options Opties voor automatisch ophalen Sour&ce: Bro&n: Configure Configureren &Search &Zoeken &Write &Schrijven Select files and click on Search to retrieve metadata. Selecteer bestanden en klik vervolgens op Zoek om de metadata te ontvangen. Update empty fields only. Alleen lege velden updaten. Automatically retrieve matches. Automatisch overeenkomsten ontvangen. Searching complete. Zoekactie is voltooid. Searching... Bezig met zoeken... <b>Select some files or enter search paramaters.</b> <b>Selecteer enkele bestanden of begin een zoekopdracht.</b> An unhandled error occurred: %1 Er is een onafgehandelde fout opgetreden: %1 <b>Tags were written.</b> <b>Tags zijn geschreven.</b> Retrieved Albums (sorted by %s) Retrying search with %s S&ubmit Tags Submission completed. puddletag-1.0.2/translations/puddletag_ru_RU.ts0000644000175000001440000056233212170511246022136 0ustar keithusers00000000000000 About puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). puddletag реадктор тегов с открытым кодом для GNU/Linux похожий на Windows программу Mp3tag. <br /><br />Особенности: Пакетное редактирование тегов, переименование файлов с использованием тегов, получение тегов из имён файлов, использование Actions для автоматизации повторяющихся заданий, загрузка вашей музыкальной библиотеки и загрузка другого удивительных вещей. <br /><br /> Поддерживаемые форматы: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) и APEv2 (.ape) <br />< br /> Посетите puddletag веб-сайт (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) для поддержки и обновлений.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Распространяется под лицензией GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> за его многочисленные и прекрассные идеи и за его нечеловеческое терпение к многоичсленным ошибкам.<br /><br /> Разработчикам используемых puddletag библиотек (без которых я возможно писал бы до сих пор id3 reader).<br /><br /> <b>Paul McGuire</b> за PyParsing.<br /> <b>Michael Urman</b> и <b>Joe Wreschnig</b> за Mutagen (Это восхительно).<br /> <b>Phil Thomson</b> и всем связанным с PyQt4.<br /> <b>Michael Foord</b> и <b>Nicola Larosa</b> за ConfigObj (Серьёзно, seriously, они должны заменить ConfigParser этим).<br /> The <b>Oxygen team</b> за набор иконок Oxygen. About puddletag О puddletag <h2>puddletag %1 (Changeset %2)</h2> %3 <h2>puddletag %1 (Changeset %2)</h2> %3 <h2>puddletag %1</h2> %2 <h2>puddletag %1</h2> %2 &About &О программе &Thanks &Благодарности <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> French translation by <b>Raphaël Rochet</b>.<br /> Dutch (Nederlands) translation by <b>Fabian Bakkum</b>.<br /><br /> To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> за его многочисленные и прекрассные идеи и за его нечеловеческое терпение к многоичсленным ошибкам.<br /><br /> Перевод на французский <b>Raphaël Rochet</b>.<br /> Перевод на голландский <b>Fabian Bakkum</b>.<br /><br /> Разработчикам используемых puddletag библиотек (без которых я возможно писал бы до сих пор id3 reader).<br /><br /> <b>Paul McGuire</b> за PyParsing.<br /> <b>Michael Urman</b> и <b>Joe Wreschnig</b> за Mutagen (Это восхительно).<br /> <b>Phil Thomson</b> и всем связанным с PyQt4.<br /> <b>Michael Foord</b> и <b>Nicola Larosa</b> за ConfigObj (Серьёзно, они должны заменить ConfigParser этим).<br /> The <b>Oxygen team</b> за набор иконок Oxygen. puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2008-2012 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv3 (<a href="www.gnu.org/licenses/gpl-3.0.html">www.gnu.org/licenses/gpl-3.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> First off, a big thanks to **Evan Devetzis** for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. Thanks to <b>Raphaël Rochet</b>, <b>Fabian Bakkum</b>, <b>Alan Gomes</b> and others for contributing translations. To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. AcoustID Calculating ID Вычисление ID Retrieving AcoustID data: %1 of %2. Получение AcousticID данных: %1 из %2. Retrieving MB album data: %1 Получение MB данных альбома: %1 Error generating fingerprint: %1 Ошибка при генерации отпечатка: %1 Error retrieving data: %1 Ошибка при получении данных: %1 Minimum Score Минимальная оценка Parsing Data Анализ данных Error submitting data: %1 Submitting data to AcoustID: %1 to %2 of %3. Found AcoustID in file. File #%1: %2 AcoustID Key Please enter AcoustID user key in settings. Actions Enter a name for the shortcut. Введите имя для ярлыка. Modify Action Изменить действие Actions Действия Assign &Shortcut Связать &ярлык <p>Creates a shortcut for the checked actions on the Actions menu. Use Edit Shortcuts (found by pressing down on this button) to edit shortcuts after the fact.</p> <p>Создаёт ярлык для проверенных действий в меню Действия. Используйте Редактировать Ярлыки (может быть найдено нажатием кнопки вниз на этой кнопке) для редактирования ярлыков после этого.</p> Edit Shortcuts Редактировать Ярлыки New Action Новое действие Enter a name for the new action. Введите имя для нового действия. Edit Action: Редактировать Действие: Edit Action: %s Редактировать Дествие: %s Error: Using <b>__selected</b> in Actions is not allowed. Ошибка: Использование <b>_seected</b> в Действиях не поддреживается. Please enter some fields to write to. Пожалуйтса, введите нельско полей для записи. Add Action: Добавить действие: Amazon Invalid Access or Secret Key Неверный ключ доступа или секретный ключ Retrieving search results for keywords: %s Получение результатов поиска для ключевых слов: %s Invalid XML returned. Получен неверный XML. %s at Amazon.com %s на Amazon.com Retrieving using ASIN: %s Получение используя ASIN: %s Retrieving XML: %1 - %2 Получение XML: %1 - %2 Retrieving cover: %s Получение обложки: %s <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do an Amazon album search using those keywords.</li> </ul> <p>Введите здесь параметры поиска. Если не указано, то будут использоваться выбранные файлы.</p> <ul> <li><b>артист;альбомbum</b> поиск определённой комбинации альбом/артист.</li> <li>Чтобы вывести список альбомов артиста, оставьте пустой поле альбома, но оставьте точку с запятой (например. <b>Ratatat;</b>). Для поиска только альбома оставьте поле артиста как в примере <b>;Resurrection.</li> <li>Введение ключевых слов <b>без точки с запятой (;)</b> запустит поиск альбома на Amazon с использованием этих ключевых слов.</li> </ul> Retrieve Cover Получить обложку Cover size to retrieve Размер обложки Small Маленький Medium Средний Large Большой Access Key (Stored as plain-text. Leave empty for default.) Ключ доступа (Хранится как обычный текст. Оставьте пустым для ключа по умолчанию.) Secret Key (Stored as plain-text. Leave empty for default.) Секретный ключ (Хранится как обычный текст. Оставьте пустым для ключа по умолчанию.) Invalid XML returned. No tracks listed. Неверный XML получен. Ни одного трека не перечислено. Original Size Artwork Enter a description Введите описание <p>Enter a description for the current cover.</p><p>For ID3 tags the description has to be different for each cover as per the ID3 spec. If they don't differ then spaces are appended to the description when the tag is saved.</p> <p>Введите описание для данной обложки.</p><p>Для ID3 тегов описание должно отличаться для каждой обложки по спецификации ID3. Если описания не отличаются, то пробелы будут добавлены во время сохранения тега.</p> &Description &Описание &Type &Тип <p>Select a cover type for the artwork.</p> <p>Выберите тип обложки для рисунка.</p> &Save cover to file &Сохранить обложку в файл &Add cover &Добавить обложку &Remove cover &Удалить обложку &Change cover &Изменить обложку Select Image... Выбрать изображение... JPEG Images (*.jpg);;PNG Images (*.png);;All Files(*.*) Изображения JPEG (*.jpg);;Изображения PNG (*.png);;Все файлы(*.*) Save artwork as... Сохранить рисунок как... Writing to <b>%1</b> failed. Запись <b>%1</b> не удалась. Enter description Введите описание Artwork Context %1/%2 %1/%2 Cover Varies Обложка отличается No Images Нет изображений Autonumbering Wizard Autonumbering Wizard Мастер автонумерации &Start: &Начало: Max length after padding with zeroes: Максимальная длина после заполнения нулями: Add track &separator ['/']: Number of tracks Добаить &разделить треков ['/']: Число треков &Restart numbering at each directory. &Начинать нумерацию в каждой директории. Add track &separator ['/'] Добавить &разделитель ['/'] Colour Settings <p>Below are the backgrounds used for various controls in puddletag. <br /> Double click the desired action to change its colour.</p> <p>Ниже перечислены фоновые изображения, используемые для различных элементов управления puddletag. <br /> Дважды щёлкните на желаемое действие, чтобы изменить его цвет.</p> Row selected in file-view. Строка выбранная в просмотре файлов. Row colour for files with previews. Цвет строки для файлов с предпросмотром. Field added in Extended Tags. Поле добавленное в Расширенные теги. Field edited in Extended Tags. Поле отредактированное в Расширенных тегах. Field removed in Extended Tags. Поле удалённое в Расширенных тегах. Column Settings Title Заголовок Columns Колонки Adjust visibility of columns. Настроить видимость колонок. &Select Columns &Выбрать колонки Combo Box Remove current item. Удалить данный элемент. Confirmations Confirm when exiting preview mode. Подтверждать выход из режима предпросмотра. Confirm when deleting files. Подтверждать удаление файлов. Cover Type Other Другой O File Icon Иконка файла I Other File Icon Другая иконка файла OI Cover (front) Передняя обложка CF Cover (back) Задняя обложка CB Leaflet page Страница буклета LF Media (e.g. label side of CD) Медиа (например, сторона лейбла CD) M Lead artist Основной артист LA Artist Артист A Conductor Дирижёр C Band Группа B Composer Композитор CP Lyricist Автор текстов L Recording Location Расположение звукозаписи RL During recording Длительность записи DR During performance Длительность выступления DP Movie/video screen capture Снимок кино/видео экрана MC A bright coloured fish Яркая раскрашенная рыба F Illustration Иллюстрация P Band/artist logotype Логотип группы/артиста BL Publisher/Studio logotype Логотип издателя/студии PL Defaults &Fields &Поля Yes Да No Нет <blank> <blank> <keep> <keep> Various Разные MusicBrainz MusicBrainz SYNTAX ERROR in $%1: %2 Ошибка синтаксиса в $%1: %2 SYNTAX ERROR: %s expects a number at argument %d. Ошибка синтаксиса: %s ожидает число в аргументе %d. Various Artists Разные артисты function does not exist. функция не существует. Error Ошибка <br /> Do you want to continue? <br /> Вы хотите продолжить? Field Поле OK Да Cancel Отмена Writing Запись &Yes &Да &No &Нет Reading Directory: %1 Чтение директории: %1 Reading Directory: %1 + others Чтение директории: %1 + другие Reading Dir Чтение директории Loading Загрузка &Edit &Правка Appl&y При&менить Filter: Фильтр: Go Перейти Title Заголовок An error occured while writing to <b>%1</b>. (%2) Произошла ошибка во время записи в <b>%1</b>. (%2) Fields: Поля: <p>An error occured while renaming the directory <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b><br />File used: %4</p> <p>Произошла ошибка во ремя переименования директории <b>%1</b> в <i>%2</i>.</p><p>Причина: <b>%3</b><br />Используемый файл: %4</p> <p>An error occured while renaming the file <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b></p> <p>Произошла ошибка во ремя переименования файла <b>%1</b> в <i>%2</i>.</p><p>Причина: <b>%3</b><br /> <p>An error occured while writing to <b>%1</b>.</p><p>Reason: <b>%2</b> (<i>See ~/.puddletag/log.log for debug info.</i>)</p> <p>Ошибка во время записи в <b>%1</b>.</p><p>Причина: <b>%2</b> (<i>Смотрите ~/.puddletag/log.log для дебаг информации.</i>)</p> %s images %s изображения Never show this message again. Никогда не показывать это сообщение снова. Connection Error: %s Dialogs Album Art Обложка альбома Tag Panel Панель тегов Artwork Изображения Filesystem Файлы Filter Фильтр Tag Sources Исходные данные тегов Stored Tags Сохранённые теги Logs Логи Mass Tagging Массовая запись тегов Functions Функции Actions Действия Dir Renaming An error occured while renaming <b>%1</b> to <b>%2</b>. (%3) Произошла ошибка во время переименования <b>%1</b> в <b>%2</b>. (%3) Renaming Переименование I couldn't rename: <i>%1</i> to <b>%2</b> (%3) Не могу переименовать:<i>%1</i> в <b>%2</b> (%3) Rename: <b>%1</b> to: <i>%2</i> Переименовать: <b>%1</b> to: <i>%2</i> Dirview Refresh Directory Перечитать директорию Show Header Показать заголовок Hide Header Скрыть заголовок Open in File Manager Открыть в файловом менеджере Subfolders Поддиректории Discogs Retrieving search results for keywords: %s Получение результатов поиска для ключевых слов: %s %s at Discogs.com %s на Discogs.com Retrieving using Release ID: %s Получение данных, используя Release ID: %s Retrieving album %s Получение альбома: %s Retrieving cover: %s Получение обложки: %s Error retrieving image: Ошибка получения изображения: <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Using <b>:r id</b> will retrieve the album with Discogs ID <b>id</b>.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do a Discogs album search using those keywords.</li> </ul> <p>Введите здесь параметры поиска. Если не указано, то будут использоваться выбранные файлы.</p> <ul> <li><b>артист;альбомbum</b> поиск определённой комбинации альбом/артист.</li> <li>Чтобы вывести список альбомов артиста, оставьте пустой поле альбома, но оставьте точку с запятой (например. <b>Ratatat;</b>). Для поиска только альбома оставьте поле артиста как в примере <b>;Resurrection.</li> <li>Введение ключевых слов <b>без точки с запятой (;)</b> запустит поиск альбома на Discogs с использованием этих ключевых слов.</li> </ul> Retrieve Cover Получить обложку Cover size to retrieve Размер обложки Small Маленький Large Большой Field to use for discogs_id Поле для discogs_id API Key (Stored as plain-text.Leave empty to use default.) API ключ (Хранится как обычный текст. Оставьте пустым для ключа по умолчанию.) Invalid Discogs Release ID Неверный Discogs Release ID Checking tracks for Discogs Album ID. Проверка треков для Discogs Album ID. No Discogs ID found in tracks. Ни одного Discogs ID не найдено в треках. Found Discogs ID: %s Найден Discogs ID: %s Edit Field Edit Field Редактировать Поле &Field &Поле &Value &Значение A&dd &Добавить E&dit &Редактировать Errors No closing bracket found. Закрывающая скобка не найдена. Couldn't create intermediate directory: %s Невозможно создать промежуточную директорию: %s Cannot move directory to a subdirectory within itself. Невозможно переместить директорию в собственную поддиректорию. Your filesystem encoding was detected as <b>ASCII</b>. <br />You won't be able to rename files using accented, <br /> cyrillic or any characters outside the ASCII alphabet. Кодировка вашей файловой системы была определена как <b>ASCII</b>. <br />Вы не сможете использовать в имени файлов символы не входящие в ASCII алфавит, <br />такие как диакритические знаки, кириллические или другие символы. Extended Tags Field Поле Value Значение Resets the selected fields to their original value. Сбросить выбранные значения к их оригинальному значению. Different files. Различные файлы. Fields Filename Имя файла Artist Артист Title Заголовок Album Альбом Track Трек Length Длительность Year Год Bitrate Битрейт Genre Жанр Comment Комментарий Dirpath Директория FreeDB <b>FreeDB does not support text-based searches.</b> <b>FreeDB не поддерживает текстовый поиск.</b> Functions At most %1 arguments expected. %2 given. Не более %1 аргументов ожидалось. Получено %2. At least %1 arguments expected. %2 given. Не менее %1 аргументов ожидалось. %2 получено. Tag->File: $1 Тег->Файл: $1 Tag to filename Тег в имя файла &Pattern &Шаблон Replace $0: '$1' -> '$2', Match Case: $3, Words Only: $4 Заменить $0: '$1' -> '$2', С учётом регистра: $3, Только слова: $4 Replace Заменить &Replace &Заменить w&ith: &с: Match c&ase: С учётом р&егистра: only as &whole word Слово &целиком Update from $2, Fields: $1 Обновить, используя $2, Поля: $1 Update from tag Обновить из тега &Field list (; separated): &Список полей (разделённый ;): &Tag &Тег APEv2 APEv2 ID3 ID3 Trim $0 Убрать $0 Trim whitespace Убрать лишние пробелы RegReplace $0: RegExp '$1' with '$2', Match Case: $3 Регулярная замена $0: Регулярное выражение '$1' заменить '$2', С учётом регистра: $3 Replace with RegExp Замена с регулярным выражением &Regular Expression &Регулярное выражение Replace &matches with: Заменить &совпадения с: Match &Case С учётом &регистра Export Art: pattern='$1' Экспорт рисунка: шаблон='$1' Export artwork to file Экспорт рисунка в файл &Pattern (extension not required) &Шаблон (расширение не требуется) folder_%img_counter% директория_%счётчик_изображений% Autonumbering: $0, Start: $1, Restart for dir: $2, Padding: $3 Автонумерация: $0, Старт: $1, Начать сначала для директории: $2, Заполнение: $3 Autonumbering Автонумерация oi oi 1 1 aoeu aoeu False Ложь au au Sort $0, order='$1', Match Case='$2' Сортировать $0, порядок='$1', С учётом регистра='$2' Sort values Сортировать значения &Order &Порядок Ascending По возрастанию Descending По убыванию Tag->Dir: $1 Тег->Директория: $1 Tag to Dir Тег в имя директории &Pattern (can be relative path) &Шаблон (может быть относительный путь) %artist% - %album% %artist% - %album% Format $0 using $1 Формат $0 использует $1 Format value Форматированное значение &Format string &Форматированная строка Artwork: Filenames='$1', Description='$2', Case Sensitive=$3 Обложка: Имя файла='$1', Описание='$2', Регистрозависимый=$3 Load Artwork Загрузить рисунок &Filenames to check (;-separated, shell wildcards [eg. *] allowed) &Имена файлов для проверки (разделённые ; можно использовать шаблоны [например, *]) &Default description (can be pattern): &Описание по умолчанию (может быть шаблон): Match filename's &case: Учитывать &регистр имени файла: Merge field: $0, sep='$1' Поле слияния: $0, sep='$1' Merge field Поле слияния &Separator &Разделитель ; ; Remove Dupes: $0, Match Case $1 Удалить дупликаты: $0, С учётом регистра $1 Remove duplicate values Удалить повторяющиеся занчения Text File: $0, '$1' Текстовый файл: $0, '$1' Import text file Импортировать текстовый файл lyrics.txt lyrics.txt Remove fields except: $1 Удалить поля, кроме: $1 Remove all fields except Удалить все поля, кроме <blank> $0 <blank> $0 Remove Fields Удалить поля Convert Case: $0: $1 Изменить регистр: $0: $1 Case conversion Измененить регистр &Type &Тип Mixed Case Смешанный регистр UPPER CASE ВЕРХНИЙ РЕГИСТР lower case нижний регистр For &Mixed Case, after any of: Для &смешанного порядка, после всех: ., ! ., ! Convert to encoding: $0, Encoding: $1 Конвертировать в кодировку: $0, Кодировка: $1 Convert from non-standard encoding Изменить из нестандартной кодировки &Encoding &Кодировка cp1250 cp1250 cp1251 cp1251 cp1252 cp1252 cp1253 cp1253 cp1254 cp1254 cp1255 cp1255 cp1256 cp1256 cp1257 cp1257 cp1258 cp1258 Text to Tag: $0 -> $1, $2 Текст в Тег: $0 -> $1, $2 Text to Tag Текст в Тег &Text &Текст &Output &Выходной файл Split using separator $0: sep='$1' Разделить, используя разделитель $0; разделитель='$1' Split fields using separator Разделить поля использую разделитель File->Tag '$1' Файл->Тег '$1' Filename to Tag Имя файла в тег Functions Dialog <b>No change.</b> <b>Без изменений.</b> <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> <p>Поля, которые будут записаны.</p> <ul> <li>Введите список через запятую, например, <b>артист, заголовок, альбом</b></li> <li>Используйте <b>__selected</b>, чтобы записать только в выбранные поля.</li> <li>Комбинации как <b>__selected, артист, заголовок</b> допускаются. allowed.</li> <li>Но использование <b>__selected</b> в Действиях <b>не допускается</b>.</li> <li>'~' запись будет вестись во все поля, кроме тех, что следует за ним . Например, <b>~артист, заголовок</b> будет вестись запись всюду, кроме артиста, и заголовок будет записан в выбранных файлах.<li> </ul> No preview for is shown for this function. Нет предварительного просмотра для данной функции. <b>No change</b> <b>Без изменений</b> Functions Функции <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells. It is not allowed when creating an action.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> <p>Поля, которые будут записаны.</p> <ul> <li>Введите список через запятую, например, <b>артист, заголовок, альбом</b></li> <li>Используйте <b>__selected</b>, чтобы записать только в выбранные поля.</li> Не позволяется использование при созданиии Действий. <li>Комбинации как <b>__selected, артист, заголовок</b> допускаются. allowed.</li> <li>Но использование <b>__selected</b> в Действиях <b>не допускается</b>.</li> <li>'~' запись будет вестись во все поля, кроме тех, что следует за ним . Например, <b>~артист, заголовок</b> будет вестись запись всюду, кроме артиста, и заголовок будет записан в выбранных файлах.<li> </ul> GenSettings &Edit sort options &Редактировать опции сортировки <Autodetect> <Автоопределение> Default По умолчанию Language (Requires a restart) Язык (Требуется перезапуск) Su&bfolders Под&директории Show &gridlines Показать &сетку Show tooltips in file-view: Показывать подсказки при обзоре файлов: Show &row numbers Показать &номера строк Automatically resize columns to contents Автоматически увеличивать столбцы по содержимому &Preserve file modification times &Сохранить количество модификаций файла Program to &play files with: Программа &воспроизведения файлов: &Load last folder at startup &Загружать последнюю директорию при старте List Buttons Add Добавить Remove Удалить Move Up Передвинуть вверх Move Down Передвинуть вниз Edit Редактировать Duplicate Дублировать &>> &>> &<< &<< Logs &Copy &Копировать &Clear &Очистить Main Window puddletag: %1 + others puddletag: %1 + другие puddletag: %1 puddletag: %1 Import directory... Импортирование директории... Mapping Settings <ul><li>Tag is the format that the mapping applies to. One of <b>ID3, APEv2, MP4, or VorbisComment</b>. </li><li>Fields will be mapped from Source to Target, meaning that if Source is found in a tag, it'll be editable in puddletag using Target.</li> <li>Eg. For <b>Tag=VorbisComment, Source=organization, and Target=publisher</b> means that writing to the publisher field for VorbisComments in puddletag will in actuality write to the organization field.</li><li>Mappings for tag sources are also supported, just use the name of the tag source as Tag, eg. <b>Tag=MusicBrainz, Source=artist,Target=performer</b>.</li></ul> <ul><li>Тег - это формат отображения информации. Такие как <b>ID3, APEv2, MP4, или VorbisComment</b>. </li><li>Поля будут отображаться от источника к цели, в том смысле, что если источник будет найден в теге, то он будет редактируемым в puddletag с использованием цели.</li> <li>Например, Для <b>Тега=VorbisComment, Источник=организация, и Цель=Издатель</b> означает, что для записи в поле издатель для VorbisComments в puddletag будет на самом деле записано в поле организации.</li><li>Отображения для источников тега также поддерживается, только используется имя источника тега как Тег, например, <b>Тег=MusicBrainz, Исходник=артист,Цель=создатель</b>.</li></ul> Tag Тег Original Field Оригинальное поле Target Назначение <b>A restart is required to apply these settings.</b> <b>Перезапуск требуется для применения этих настроек.</b> Source Источник Masstagging An error occured during the search: <b>%s</b> Произошла ошибка во время поиска: <b>%s</b> An error occured during album retrieval: <b>%s</b> Произошла ошибка во время получения альбома: <b>%s</b> Mass Tagging Массовое теггирование &Search &Поиск &Configure Profiles &Настройка профилей &Write Previews &Запись предпросмотров Clear &Preview Очистка &Предпросмотра &Profile: &Профиль: &Stop &Стоп <b>Lookups completed.</b> <b>Поиск завершён.</b> Continue Продолжить Stop Стоп Combine and continue Объединить и продолжить Replace and continue Заменить и продолжить Combine and stop Объединить и остановиться Replace and stop Заменить и остановиться Use best match Использовать лучшее совпадение Do nothing and continue Пропустить и продолжить Default Profile Профиль по умолчанию <b>Polling: %s</b> <b>Выбор:</b> Retrieving matching album. <b>%1 - %2</b> Получение подходящего альбома. <b>%1 - %2</b> Retrieving matching album. Artist=<b>%1</b> Получение подходящего альбома. Артист=<b>%1</b> Retrieving matching album. Album=<b>%1</b> Получение подходящего альбома. Альбом=<b>%1</b> Retrieving matching album. Получение подходящего альбома. Starting search for: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> Начать поиск для: <br />артист=<b>%1</b> <br />альбом=<b>%2</b></br /> Starting search for: <br />artist=<b>%1</b><br />album=No album name found. Начать поиск для: <br>артист=<b>%1</b><br />альбом=Ни одного альбома не найдено. Starting search for: <br />album=<b>%1</b><br />artist=No artist found. Начать поиск для: <br>альбом=<b>%1</b><br />артист=Ни одного артиста не найдено. No artist or album info found in files. Starting search. Не найдено информации об артисте и альбоме. Начинаем поиск. <b>%d</b> results found. <b>%d</b> результатов найдено. <b>No results were found.</b> <b>Ничего не найдено.</b> <b>One</b> result found. <b>Один</b> результат найден. <b>%d</b> possibly matching albums found. <b>%d</b> возможно подходящих альбомов найдено. <b>One</b> possibly matching album found. <b>Один</b> возможно подходящий альбом найден. No matches found for tag source <b>%s</b> Ничего не было найдено для тега <b>%s</b> Previously retrieved result does not match. Retrieving next matching album. Ранее полученные результаты не совпадают. Получение следующего подходящего альбома. <br />Rechecking with results from <b>%s</b>.<br /> <br />Перепрвоерка с данными из <b>%s</b><br /> <br />Valid matches were found for the album. <br />Верные результаты были найдены для альбома. <b>No valid matches were found for the album.</b> <b>Не было найдено подходящих для альбома.</b> Rechecking Перепроверка Retrying search with album name: <b>%s</b> Повторение поиска для альбома: <b>%s</b> Menus Help Помощь Online &Documentation Он-лайн &Документация &Forum &Форум &Bug tracker &Баг-трекер About puddletag О puddletag About Qt О Qt Toolbar Тулбар Enabl&e Preview Mode Вк&лючить Предпросмотр Clear Selected &Files Очистить выбранные &файлы &Write Previews &Записать предпросмотры &Undo Last Clear &Отменить последнюю чистку Sort &By Сортировать&по Clear Selected &Cells Очистить выбранные &ячейки &Plugins &Плагины &Open Folder &Открыть папку Select a directory to import into puddletag. Выбрать директорию для импорта в puddletag. &Add Folder &Добавить папку Append a directory to current file-view. Добавить папку в текущий просмотр файлов. Load &playlist Загрузить &плейлист Import an m3u playlist into puddletag. Импортировать m3u плейлист в puddletag. Sa&ve playlist &Сохранить плейлист Save all files to m3u playlist. Сохранить всех файлов в m3u плейлист. &Refresh &Обновить Refresh current file-view. Обновить текущий просмотр файлов. &Save &Сохранить &Play &Воспроизвести Plays the selected files in the predefined music player. Проиграть выбранные файлы в выбранном музыкальном плеере. &File->Tag &Файл->Тег Convert filename to tag using the pattern. Преобразовать имя файла в тег используя шаблон. &Undo &Отменить Autonumbering &Wizard... &Мастер автонумерации... &Clear &Очистить &Format &Формат &Text File->Tag &Текстовый файл->Тег &Import Music Library... &Импортирование музыкальной библиотеки... &Actions &Действия &Preferences &Настройки &Functions &Функции &QuickActions &Быстрые действия &Rename Directories &Переименовать директории &Exit &Выход &Tag->File &Тег->Файл &Increase Font &Увеличить шрифт &Decrease Font &Уменьшить шрифт &Clipboard->Tag &Буфер обмена->Тег Select &All Выбрать &Все &Invert Selection &Инвертировать выбор &Select Column &Выбрать столбец &Cut &Вырезать &Copy Selection &Копировать выбранное &Paste &Вставить &Remove Tag &Удалить тег E&xtended Tags Рас&ширенные теги &Delete &Удалить &Properties &Свойства Paste &Onto Selection &Вставить в выделение &Lock Layout &Заблокировать набор инструментов Select &Next Directory выбрать &Следующую директорию Copy All &Fields Копировать все &поля Delete &Without Confirmation Удалить без &подтверждения In &Library В &библиотеке Replace... Заменить... Remove &APEv2 Tag Удалить &APEv2 тег Remove All &ID3 Tags Удалить все &ID3 теги Move Selected &Up Переместить выбранное &вверх Move Selected Do&wn Переместить выбранное в&низ Select &Previous Directory Выбрать &предыдущую директорию Select all files belonging to the directories of those selected. Otherwise (if only a single directory is selected) selects all the files in the previous directory. Выбрать все файлы, находящиеся в выбранных каталогах. В противном случае (если одна директория выбрана) выбрать все файлы в предыдущей директории. Remove ID3v&2 Tag Удалить ID3v&2 тег Remove ID3v&1 Tag Удалить ID3v&1 тег &File &Файл &Edit &Правка &Convert &Преобразовать &Tools &Инструменты &Preview Mode &Режим предпросмотра Ta&g Tools &Тег инструменты &Windows &Окна Disabl&e Preview Mode От&менить режим предпросмотра &Unload Everything &Выгрузить Всё Refresh &Selected Обновить &Выбранное Reloads directories of selected files. Перечитать директории выбранных файлов. Messages That's a large amount of data to copy. It may cause your system to lock up. Do you want to go ahead? Copy without images. Mp3tag Retrieving search page: %s Получение страницы поиска: %s Retrieving search page... Получение страницы поиска... Parsing search page. Анализ страницы поиска. Parsing search page... Анализ страницы поиска... Retrieving album page: %s Получение страницы альбома: %s Retrieving album page... Получение страницы альбома... Parsing album page. Анализ страницы альбома. Parsing album page... Анализ страницы альбома... MusicBrainz <b>Error:</b> While retrieving %1: %2 <b>Ошибка:</b> Во время получения %1: %2 <b>Error:</b> While retrieving Album ID %1 (%2) <b>Ошибка:</b> Во время получения ID альбома %1 (%2) Found album id %s in tracks. Retrieving Найден id альбома %s в треках. Получение Retrieving cover: %s Получение обложки: %s No images exist for this album. Invalid UUID Invalid query sent. You have exceeded your rate limit. Image does not exist. Retrieving image %s Retrieve Cover Получить обложку Cover size to retrieve: Amount of images to retrieve: Just the front cover All (can take a while) Error retrieving image: %s MusicLib Import Music Library Импортировать музыкальную библиотеку Invalid library Неверная библиотека Error loading %1: %2 Ошибка при загрузке %1: %2 Anonymous Library Анонимная библиотека Description was left out. Описание отсутствует. Anonymous author. Анонимный автор. Loading music library... Загрузка музыкальной библиотеки... An error occured while loading the %1 library: <b>%2</b> Произошла ошибка во время загрузки библиотеки %1: <b>%2</b> Music Library Музыкальная библиотека &Search &Поиск Saving music library... Сохранение музыкальной библиотеки... Library Artists Артисты библиотеки No libraries found Библиотеки не найдены Load a lib first. Загрузить сначала библиотеку. No supported music libraries were found. Most likely the required dependencies aren't installed. Visit the puddletag website, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> for more details. Не было найдено ни одной поддерживаемой библиотеки. Скорее всего требуемые зависимости не установлены. Посетите веб-сайт puddletag, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> для дополнительной информации. Pattern Settings &Sort &Сортировать Enter a pattern Введите шаблон Playlist Select m3u file... Выбрать m3u файл... An error occured while reading <b>%1</b> (%2) Произошла ошибка во время чтения <b>%1</b> (%2) Save Playlist... Сохранить плейлист... Playlist Settings &Write extended info &Записать расширенную информацию Entries &relative to working directory Записи &относительно рабочей директории &Filename pattern. &Шаблон имени файлов. Plugin Settings Name Имя Author Автор Description Описание Version Версия <b>Loading/unloading plugins requires a restart.</b> <b>Требуется перезапуск для включения/выключения плагинов.</b> Previews Some files have uncommited previews. These changes will be lost once you exit puddletag. <br />Do you want to exit without writing those changes?<br /> Некоторые файлы имеют неподтверждённые предпросмотры. Эти изменения будут потеряны, если вы выйдите из puddletag. <br />вы действительно хотите выйти без записи этих изменений?<br /> Preview Mode: Off Режим предпросмотра: выключен <b>Preview Mode: On</b> <b>Режим предпросмотра: включён</b> Do you want to exit Preview Mode? Вы хотите выйти из режима предпросмотра? Clea&r preview О&чистить Предпросмотр Some files have uncommited previews. Changes will be lost once you load a directory. <br />Do you still want to load a new directory?<br /> Некоторые файлы имеют незаписанные предпросмотры. Изменения будут потеряны как только вы загрузите директорию. <br />Вы всё ещё хотите загрузить новую директорию?<br /> Disable Preview Mode first to enable tag deletion. Выключить Режим предпросмотра сначала чтобы включить уделение тегов. Profile Config Configure Mass Tagging Profiles Настройка профиля массового теггирования Masstagging Profiles Профили массового теггирования Profile Editor Brute force unmatched files. Подобрать неопределённые файлы. <p>If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Если подходящего значения не было найдено, то файлы будут отсортированы по имени файла, полученные теги будут остортированы по имени файла и соотвтетствующие (незаполненные) поля будут заполнены..</p> <p>The fields listed here will be used in determining whether a track matches the retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Этот список полей будет использоваться для определения совпадение между треком и полученым треком. Каждое поле будет сравниваться с использованием нечёткого алгоритма. Если результирующий средний полученный процент больше чем "Минимальный процент", то будет считаться, что это одно и тоже.</p> <p>The artist and album fields will be used in determining whether an album matches the retrieved one. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater or equal than what you specify here it'll be considered to match.</p> <p>Поля исполнитель и альбом будут использваться для определения того, что альбом соответствует полученному. Каждое поле будет сравниваться с использованием нечёткого алгоритма сравнения. Если результирующий средний процент совпадений больше или равен тому, что вы определили здесь, то будет принято совпадение.</p> Minimum &percentage required for album matches. Минимальный &процент совпадений требуется для распознания названий альбомов. Match tracks using &fields: &Распознать треки, используя поля: Minimum percentage required for track match. Минимальный процент совпадений требуется для распознания названий треков. Edit Masstagging Profile Редактировать Masstagging профиль Masstagging Profile Masstagging профиль <p>If no tag information is found in a file, the tags retrieved using this pattern will be used instead.</p> <p>Если не будет найдено тегов в файле, то будут использоваться теги полученные, используя этот шаблон.</p> <p>The fields listed here will be used in determining whether a file matches a retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Этот список полей будет использоваться для определения совпадение между треком и полученым треком. Каждое поле будет сравниваться с использованием нечёткого алгоритма. Если результирующий средний полученный процент больше чем "Минимальный процент", то будет считаться, что это одно и тоже.</p> <p>Check to enable brute forcing matches. If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Отметьте галочкой, чтобы включить перебор совпадений. Если подходящее совпадение не найдено для данного файла, то файлы будут остортированы по имени файла, полученные теги будут отсортированы по имени файла и соотвтетствующие (незаполненные) треки будут заполнены.</p> Update empty fields only. Обновить только пустые поля. &Name: &Имя: &Description &Описание Pattern to match filenames against. Следовать шаблону имён файлов несмотря ни на что. Minimum percentage required for album matches. Минимальный процент совпадений требуется для распознания названий альбомов. Match tracks using fields: Распознать треки, используя поля: Edit Tag Source Config Редактировать конфигурационный файл источника тегов <p>Enter a comma-seperated list of fields to retrieve. Leave empty to retrieve all available fields/values. <br /><br />Eg. <b>artist, album, title</b> will only retrieve the artist, album and title fields of from the Tag Source. <br /><br />Start the list with the tilde (~) character to write all retrieved fields , but the ones listed. Eg the field list <b>~composer,__image</b> will write all fields but the composer and __image (aka cover art) fields.</p><p>If a field has been retrieved in a previous Tag Source the values will be combined if they differ. Eg. If genre=<b>Rock</b> for the first tag source polled and genre=<b>Alternative</b> for the tag source polled second then the resulting field will have multiple-values ie. genre=<b>Rock\\Rap</b> <p>Введите разделённый запятыми список полей для заполнения. Оставьте пустыми, чтобы заполнить всеми доступными полями/значениями. <br></br>Например, указав <b>исполнитель, альбом, название</b>, будут заполнены только поля исполнитель, альбом и название из источника тегов. <br /><br />Начните список с тильды (~), чтобы записать все полученные поля, кроме тех, что в списке. Например, список содержащий <b>~композитор, _изображение</b> запишет все поля, кроме полей композитор и _изображение (обложка).</p><p>Если поле было заполнено в предыдущем источнике тегов, значения будут объединены, если они отличаются. Например, если жанр=<b>Rock</b>для первого источника тегов и жанр=<b>Alternative</b> для второго источника, тогда результирующий тег будет иметь несколько значений, т.е. жанр=<b>Rock\\Rap</b></p> Fields to replace: Поля для замены: Enter a comma-separated lists of fields that'll replace any retrieved from previously polled tag sources. <br />Start the list with the tilde (~) character to replace all but the fields you list. <br /><b>NB: Fields listed here must also be listed in the list of fields to retrieve.</b><br /><br />Eg. Assume you have two Tag Sources. The first retrieves <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. The second source gets <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. For the second Tag Source, setting just <b>artist</b> as the list of fields to replace will overwrite the artist field retrieved from the first tag source. The resulting retrieved fields/values as shown in puddletag will then be <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. Введите разделённый запятыми список полей, которые будут заменены любыми полученными ранее данными из использваонных источников тегов. <br />Начните список с тильды (~), чтобы заменить все поля, кроме указанных в списке. <br /><b>Примечание: Поля приведённые здесь должны быть также присутствовать в списке полей для получения.<b><br /><br />Например, предположим у вас есть два источника тегов. В первом: <b>исполнитель=Freshlyground, альбом=Nomvula, жанр=Afro pop</b>. Во втором: <b>артист=Freshly Ground, альбом=Nomvula, жанр=Pop</b>. Для второго источника тегов установив только <b>исполнитель</b> в качестве списка полей для замены, будет заменено только поле исполнитель полученное из первого источника тегов. В результате полученные поля/значения, как показано в puddletag, ,будут <b>исполнитель=Freshly Ground, альбом=Nomvula, жанр=Afro Pop\\Pop</b>. &Source &Источник &If no results found: &Если не найдено ни одного результата, то: <p><b>Continue</b>: The lookup for the current album will continue by checking the other tag sources if no matching results were found for this tag source.</p><p><b>Stop:</b> The lookup for the current album will stop and any previously retrieved results will be used.</p> <p><b>Продолжать</b>: Поиск для текущего альбома будет продолжен с использованием другого источника тегов, если будет не найдено подходящих результатов для этого источника тегов.</p><p><b>Остановиться:</b> Поиск для текущего альбома будет остановлен и будут использованы другие ранее полученные результаты.</p> Progress Dialog Please Wait... Пожалуйста, ждите... %1%2 of %3... %1%2 из %3... QuodLibet &Library Path &Библиотека ... ... Select QuodLibet library file... Выберите файл библиотеки QuodLibet... %1 (%2) %1 (%2) %1 is an invalid QuodLibet music library file. %1 неправильный файл музыкальной библиотеки QuodLibet. Settings General Основные Confirmations Подтверждения Mappings Соответствия Playlist Плейлист Colours Цвета Genres Жанры Tags Теги Plugins Плагины Shortcuts Ярлыки An error occurred while saving the settings of <b>%1</b>: %2 Произошла ошибка во время сохранения настроек <b>%1</b>: %2 &Windows &Окна Tag Sources Источники тегов Patterns Шаблоны Tag Panel Панель тегов Shortcut Editor Enter a key sequence for the shortcut. Введите комбинацию клавиш для ярлыка. &Don't assign keyboard shortcut. &Не следует назначать клавиши быстрого доступа. Shortcut Settings File Properties Свойства файла <b>Double click a cell in the Shortcut Column to <br />modify the key sequence.</b> <b>Дважды кликните на ячейку в колонке ярлыков, <br />чтобы изменить клавиатурное сочетание.</b> Description Описание Shortcut Ярлык Edit Shortcuts Редактировать Ярлыки Shortcuts &Clear &Очистить Invalid shortcut sequence. Неверное сочетание клавиш. (Deleted) (Удалено) Status Bar <b>%s</b> <b>%s</b> New Filename: <b>%1</b> Новое имя файла: <b>%1</b> Table Preview: %1 Real: %2 Превью: %1 На самом деле: %2 Disable Preview Mode first to enable tag deletion. Выключить Режим предпросмотра сначала, чтобы включить уделение тегов. An error occurred while deleting the tag of %1: <b>%2</b> Произошла ошибка во время удаления тега %1: <b>%2</b> There was an error deleting the tag of %1: <b>Tag deletion isn't supportedfor %2 files.</b> Произошла ошибка во врему удалеия тега %1: <b>Удаление тега не поддерживается для %2 файлов.</b> Deleting tag... Удаление тега... Are you sure you want to delete the selected files? Вы уверены, что хотите удалить выбранные файлы? Deleting Удаление An error occurred while trying to play the selected files: <b>%1</b> <br />Does the music player you defined (<b>%2</b>) exist? Произошла ошибка во время проигрывания файла: <b>%1</b> <br />Плеер, который вы выбрали (<b>%2</b>), существует? It wasn't possible to play the selected files, because the music player you defined (<b>%1</b>) does not exist. Невозможно воспроизвести выбранные файлы, так как выбранный плеер (<b>%1</b>) не существует. Tag Panel Settings Row Ряд All row numbers must be integers. Все номера рядов должны быть целыми. Tag Settings &Restrict incoming files to (eg. "*.mp3; *.ogg; *.aac") &Ограничить входящие файлы (например, "*.mp3; *.ogg; *.aac") Remove ID3v1 tag. Удалить ID3v1 тег. Update the ID3v1 tag's values only if an ID3v1 tag is present. Обновить ID3v1 теги, только если они присутствуют. Create an ID3v1 tag if it's not present. Otherwise update it. Создать ID3v1 тег, если он не присутствует. Иначе обновить его. puddletag writes only &ID3v2 tags.<br />What should be done with the ID3v1 tag upon saving? puddletag записывает только &ID3v2. <br /> Что следует сделать с ID3v1 тегами во время сохранения? Default &pattern to use when saving artwork. &Шаблон по умолчанию будет использован для сохранения обложек. ID3 Options ID3 опции Write ID3v2.&4 Записывать ID3v2.&4 Write ID3v2.&3 (Experimental) Записывать ID3v2.&3 (Экспериментально) Write ID3v2.&3 Записывать ID3v2.&3 Tag Sources <b>Error parsing artist/album combinations.</b> <b>Ошибка при разборе комбинации артист/альбом.</b> Retrieving cover: %s Получение обложки: %s HTTPError 403: Forbidden HTTPError 403: Доступ запрещён Page doesn't exist Страница не существует Text File -> Tag Import tags from text file Импортировать теги из текстового файла Text Текст Tag preview Предпросмотр тега &Select File &Выберите файл &Paste Clipboard &Вставить содержимое буфера обмена The file <b>%1</b> couldn't be loaded.<br /> Do you want to choose another? Файл <b>%1</b> не может быть загружен.<br /> Хотите ли вы выбрать другой файл? Error Ошибка &Yes &Да &No &Нет WebDB Retrieved Albums (sorted by %s) Получение альбомов (сортировка по %s) <b>Error in pattern</b> <b>Ошибка в шаблоне</b> Retrieved Albums Полученные альбомы An error occured: %1 Произошла ошибка: %1 An unhandled error occured: %1 Неожиданная ошибка произошла: %1 Retrieving album tracks... Получение треков с альбома... Retrieval complete. Получение завершено. Retrieving tracks... Получение треков... No matching albums were found. Не найдено подходящего альбома. More than one album matches. None will be retrieved. Больше одного альбома подходит. Ни один не будет загружен. Retrieving album. Получение информации об альбоме. Enter search parameters here. If empty, the selected files are used. <ul><li><b>artist;album</b> searches for a specific album/artist combination.</li><li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li></ul> Введите параметры для поиска сюда. Если ничего не введено, то будут использоваться выбранные файлы. <ul><li><b>исполнитель;альбом</b> ищет для определённой комбинации альбом/исполнитель.</li><li> Чтобы увидеть все альбомы исполнителя, оставьте пустой альбомную часть, но оставьте точку с запятой (например, <b>Ratatat;</b>). Для альбома удалите часть исполнителя, например <b>;Resurrection</b>.</li></ul> Enter a comma seperated list of fields to write. <br /><br />Eg. <b>artist, album, title</b> will only write the artist, album and title fields of the retrieved tags. <br /><br />If you want to exclude some fields, but write all others start the list the tilde (~) character. Eg <b>~composer, __image</b> will write all fields but the composer and __image fields. Введите разделённый запятыми список полей для записи. <br /><br />Например, <b>исполнитель, альбом, название</b> перезапишет только поля исполнитель, альбом и название полученных тегов. <br /><br /> Если вы хотите исключить некоторые поля, но переписать все другие, начните список с тильды (~). Например, <b>~композитор, _изображение</b> перепишет все поля, кроме полей композитора и _изображение. <b>Nothing to display.</b> <b>Нечего отображать.</b> Couldn't load Mp3tag Tag Source %s Не могу загрузить источник Mp3tag %s Configure: %s Конфигурация: %s Add sort option Добавить опцию сортировки Enter a sorting option (a comma-separated list of fields. Eg. "artist, title") Введите опцию сортировки (разделёный запятой список полей. Например, "исполнитель, название") Edit sort option Редактировать опции сортировки &Display format for individual tracks. &Отобразить формат для отдельных треков. Display format for &retrieved albums Отобразить формат для &полученных альбомов Sort retrieved albums using order: Сортировать полученные альбомы, используя порядок: User-Agent to when accessing web sites. Юзер-агент для доступа к веб-сайтам. Automatic retrieval options Оции автоматического поиска Sour&ce: И&сточник: Configure Конфигурация &Search &Поиск &Write &Запись Select files and click on Search to retrieve metadata. Выбрать файлы и нажмите на Поиск, чтобы получить метаданные. Update empty fields only. Обновить только пустые поля. Automatically retrieve matches. Автоматически получить совпадения. Searching complete. Поиск завершён. Searching... Поиск... <b>Select some files or enter search paramaters.</b> <b>Выберите несколько файлов или введите параметры поиска.</b> An unhandled error occurred: %1 Неожиданная ошибка произошла:%1 <b>Tags were written.</b> <b>Теги были записаны.</b> Retrying search with %s S&ubmit Tags Submission completed. puddletag-1.0.2/translations/puddletag_cs.ts0000644000175000001440000051441512170511246021506 0ustar keithusers00000000000000 About &About &O programu <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> French translation by <b>Raphaël Rochet</b>.<br /> Dutch (Nederlands) translation by <b>Fabian Bakkum</b>.<br /><br /> To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> za jeho úžasné myšlenky a za to, že se postaral o mnohem více chyb, než je lidsky možné.<br /><br /> Překlad do francouzštiny: <b>Raphaël Rochet</b>.<br /> Překlad do nizozemštiny: <b>Fabian Bakkum</b>.<br /><br /> Poděkování programátorům knihoven, na nichž je puddletag založent (bez nich by vývojář zřejmě stále ještě psal čtečku id3).<br /><br /> <b>Paulovi McGuireovi</b> za PyParsing.<br /> <b>Michaelu Urmanovi</b> a <b>Joemu Wreschnigovi</b> za Mutagen (je skvělý).<br /> <b>Philu Thomsonovi</b> a každému zodpovědnému za PyQt4.<br /> <b>Michaelu Foordovi</b> a <b>Nicolovi Larosovi</b> za ConfigObj (vážně, měl by se jím nahradit ConfigParser).<br /> <b>Týmu Oxygen</b> za ikony Oxygen. &Thanks &Poděkování About puddletag O programu Puddletag <h2>puddletag %1</h2> %2 <h2>puddletag %1</h2> %2 puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). Puddletag editor hudebních značek pro GNU/Linux podobný programu používanému ve Windows s názvem Mp3tag. <br /><br />Vlastnostmi jsou: dávkové zpracování značek, přejmenovávání souborů za použití značek, získávání značek z názvů souborů, používání činností na automatizaci opakujících se úloh, zavedení vaší hudební sbírky a mnohé další úžasné funkce.<br /><br /> Podporované formáty: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) a APEv2 (.ape) <br />< br /> navštivte stránky Puddletagu (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>), kde najdete pomoc a aktualizace.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licencováno pod GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). <h2>puddletag %1 (Changeset %2)</h2> %3 <h2>puddletag %1 (seznam změn %2)</h2> %3 puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2008-2012 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv3 (<a href="www.gnu.org/licenses/gpl-3.0.html">www.gnu.org/licenses/gpl-3.0.html</a>). Puddletag editor hudebních značek pro GNU/Linux podobný programu používanému ve Windows s názvem Mp3tag. <br /><br />Vlastnostmi jsou: dávkové zpracování značek, přejmenovávání souborů za použití značek, získávání značek z názvů souborů, používání činností na automatizaci opakujících se úloh, zavedení vaší hudební sbírky a mnohé další úžasné funkce.<br /><br /> Podporované formáty: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) a APEv2 (.ape) <br />< br /> navštivte stránky Puddletagu (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>), kde najdete pomoc a aktualizace.<br /><br /> &copy; 2008-2012 concentricpuddle (concentricpuddle@gmail.com) <br /> Licencováno pod GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-3.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> First off, a big thanks to **Evan Devetzis** for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. Thanks to <b>Raphaël Rochet</b>, <b>Fabian Bakkum</b>, <b>Alan Gomes</b> and others for contributing translations. To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> za jeho úžasné myšlenky a za to, že se postaral o mnohem více chyb, než je lidsky možné.<br /><br /> Za to, že pracoval neúnavně, aby pomohl Puddletag udělat lepším. Přispěl mnoha skvělými myšlenkami a je vynikajícím lovcem chyb. Ze všeho nejdřív poděkování <b>Raphaëlovi Rochetovi</b> za překlad do francouzštiny,<br/>, <b>Fabianovi Bakkumovi</b>za překlad do nizozemštiny, <b>Alan Gomes</b> a dalším za přispění překlady. Poděkování programátorům knihoven, na nichž je puddletag založent (bez nich by vývojář zřejmě stále ještě psal čtečku id3).<br /><br /> <b>Paulovi McGuireovi</b> za PyParsing.<br /> <b>Michaelu Urmanovi</b> a <b>Joemu Wreschnigovi</b> za Mutagen (je skvělý).<br /> <b>Philu Thomsonovi</b> a každému zodpovědnému za PyQt4.<br /> <b>Michaelu Foordovi</b> a <b>Nicolovi Larosovi</b> za ConfigObj (vážně, měl by se jím nahradit ConfigParser).<br /> <b>Týmu Oxygen</b> za ikony Oxygen. AcoustID Error retrieving data: %1 Chyba při získávání dat: %1 Retrieving AcoustID data: %1 of %2. Získávají se data AcoustID: %1 z %2. Parsing Data Zpracovávají se data Calculating ID Počítá se ID Error generating fingerprint: %1 Chyba při vytváření otisku prstu: %1 Minimum Score Nejmenší výsledek Retrieving MB album data: %1 Získávají se data MB album: %1 Error submitting data: %1 Chyba při odesílání dat: %1 Submitting data to AcoustID: %1 to %2 of %3. Odesílají se data do AcoustID: %1 do %2 z %3. Found AcoustID in file. V souboru nalezeno AcoustID. File #%1: %2 Soubor #%1: %2 AcoustID Key Klíč AcoustID Please enter AcoustID user key in settings. Zadejte, prosím, v nastavení uživatelský klíč k AcoustID. Actions Modify Action Upravit činnost Edit Action: %s Upravit činnost: %s Edit Action: Upravit činnost: Assign &Shortcut Stanovit klávesovou zkratku New Action Nová činnost <p>Creates a shortcut for the checked actions on the Actions menu. Use Edit Shortcuts (found by pressing down on this button) to edit shortcuts after the fact.</p> <p>Vytvoří klávesovou zkratku pro vybranou činnost v nabídce činností. Použijte Upravit klávesové zkratky (pro to stiskněte toto tlačítko zde) abyste klávesové zkratky upravili dodatečně.</p> Actions Činnosti Error: Using <b>__selected</b> in Actions is not allowed. Chyba: Použití <b>__selected</b> v Činnosti není dovoleno. Enter a name for the new action. Zadejte název pro novou činnost. Enter a name for the shortcut. Zadejte název pro novou klávesovou zkratku. Please enter some fields to write to. Zadejte, prosím, pole, do kterých se má zapisovat. Edit Shortcuts Upravit klávesové zkratky Add Action: Přidat činnost: Amazon Large Velká Small Malá Invalid XML returned. No tracks listed. Vráceno neplatné XML. Neobsaženy žádné stopy. Retrieving XML: %1 - %2 Získává se XML: %1 - %2 Retrieving search results for keywords: %s Získávají se výsledky hledání pro klíčová slova: %s Medium Střední Access Key (Stored as plain-text. Leave empty for default.) Uživatelské jméno (Uloženo jako prostý text. Ponechejte prázdné pro výchozí.) Cover size to retrieve Velikost obalu k získání Retrieving cover: %s Získává se obal: %s %s at Amazon.com %s auf Amazon.com Secret Key (Stored as plain-text. Leave empty for default.) Heslo (Uloženo jako prostý text. Ponechejte prázdné pro výchozí.) Retrieving using ASIN: %s Získává se pomocí ASIN: %s Retrieve Cover Získat obal <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do an Amazon album search using those keywords.</li> </ul> <p>Hledané pojmy zadejte zde. Pokud je ponecháno prázdné, použijí se vybrané soubory.</p> <ul> <li><b>artist;album</b> Hledá zvláštní kombinaci Album/Umělec.</li> <li>Pro hledání alba jednoho umělce, ponechejte část pro album prázdnou, ale zachovejte středník (např. <b>Ratatat;</b>). Pro hledání jen alba, ponechejte část pro umělce, tak jako v <b>;Resurrection.</li> <li>Zadání hledaných pojmů <b>bez středníku (;)</b> hledá album na Amazon s těmito pojmy.</li> </ul> Invalid Access or Secret Key Neplatné uživatelské jméno nebo heslo Original Size Původní velikost Artwork JPEG Images (*.jpg);;PNG Images (*.png);;All Files(*.*) Obrázky JPEG (*.jpg);;Obrázky PNG (*.png);;Všechny soubory (*.*) &Type &Typ Save artwork as... Uložit obrázek jako... Select Image... Vybrat obrázek... <p>Select a cover type for the artwork.</p> <p>Vyberte typ obalu pro obrázek.</p> Writing to <b>%1</b> failed. Chyba při ukládání do <b>%1</b>. &Add cover &Přidat obal Enter a description Zadejte popis &Save cover to file &Uložit obal do souboru &Description &Popis &Remove cover &Odstranit obal Enter description Zadat popis &Change cover &Změnit obal <p>Enter a description for the current cover.</p><p>For ID3 tags the description has to be different for each cover as per the ID3 spec. If they don't differ then spaces are appended to the description when the tag is saved.</p> <p>Zadejte popis nynějšího obalu.</p><p>Pro značky ID3 by měl být popis pro každý obal různý. Pokud se neliší, jsou do popisu při ukládání přidány prázdné znaky.</p> Artwork Context %1/%2 %1/%2 Cover Varies Různé obaly No Images Žádné obrázky Autonumbering Wizard Max length after padding with zeroes: Největší délka po vyplnění nulami: Add track &separator ['/'] Přidat &oddělovač stopy ['/'] Autonumbering Wizard Průvodce pro automatické číslování &Start: &Začít: &Restart numbering at each directory. &Začít číslování v každém adresáři znovu. Add track &separator ['/']: Number of tracks Přidat &oddělovač stopy ['/']: Počet stop Colour Settings <p>Below are the backgrounds used for various controls in puddletag. <br /> Double click the desired action to change its colour.</p> <p>Toto jsou barvy pozadí pro různé prvky v Puddletagu. <br /> Dvakrát klepněte na dotyčnou činnost pro změnu její barvy.</p> Row selected in file-view. Vybraný řádek v souborovém pohledu. Row colour for files with previews. Barva řádku pro soubory s náhledy. Field added in Extended Tags. Přidané pole v rozšířených značkách. Field removed in Extended Tags. Odstraněné pole v rozšířených značkách. Field edited in Extended Tags. Upravené pole v rozšířených značkách. Column Settings Title Název &Select Columns &Vybrat sloupce Columns Sloupce Adjust visibility of columns. Přizpůsobit viditelnost sloupců. Combo Box Remove current item. Odstranit nynější položku. Confirmations Confirm when deleting files. Potvrdit mazání souborů Confirm when exiting preview mode. Potvrdit ukončení náhledového režimu Cover Type A A B B C C F F I I L L M M O O P P BL BL CB CB CF CF CP CP DP DP DR DR LA LA LF LF MC MC OI OI PL PL RL RL Band Band Other Jiné Lyricist Textař File Icon Symbol pro soubor Artist Umělec Cover (front) Obal (přední strana) Conductor Dirigent Composer Skladatel Cover (back) Obal (zadní strana) Band/artist logotype Logotyp hudební skupiny/umělce Lead artist Albuminterpret Publisher/Studio logotype Logotyp vydavatele/nahrávacího studia Leaflet page Vnitřní strana A bright coloured fish Jasně svítící ryba Recording Location Místo nahrávky During recording Během nahrávání Movie/video screen capture Obrázek z filmu/videa During performance Během vystoupení Media (e.g. label side of CD) Média (např. CD) Other File Icon Jiný symbol pro soubor Illustration Obrázek Defaults Go Spustit OK OK No Ne &No &Ne Yes Ano &Yes &Ano function does not exist. Funkce neexistuje. Reading Dir Čte se adresář &Edit Ú&pravy Filter: Filtr: Error Chyba Field Pole Title Název Various Artists Různí umělci Reading Directory: %1 + others Čte se adresář: %1 + jiné <blank> <prázdný> <br /> Do you want to continue? <br /> Chcete pokračovat? An error occured while writing to <b>%1</b>. (%2) Při zápisu do <b>%1</b> se vyskytla chyba. (%2) <keep> <zachovat> SYNTAX ERROR in $%1: %2 SKLADEBNÁ CHYBA v $%1: %2 Appl&y &Použít Cancel Zrušit <p>An error occured while renaming the file <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b></p> <p>Při přejmenovávání souboru <b>%1</b> na <i>%2</i> se vyskytla chyba.</p><p>Důvod: <b>%3</b></p> <p>An error occured while writing to <b>%1</b>.</p><p>Reason: <b>%2</b> (<i>See ~/.puddletag/log.log for debug info.</i>)</p> <p>Při zápisu do <b>%1</b> se vyskytla chyba.</p><p>Důvod: <b>%2</b> (<i>Kvůli dalším informacím se podívejte na ~/.puddletag/log.log.</i>)</p> Loading Nahrává se %s images %s obrázků MusicBrainz MusicBrainz Reading Directory: %1 Čte se adresář: %1 Writing Zapisuje se <p>An error occured while renaming the directory <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b><br />File used: %4</p> <p>Při přejmenovávání adresáře <b>%1</b> na <i>%2</i> se vyskytla chyba.</p><p>Důvod: <b>%3</b><br />Použitý soubor: %4</p> &Fields &Pole Various Různé SYNTAX ERROR: %s expects a number at argument %d. SKLADEBNÁ CHYBA: %s očekává u argumentu číslo %d. Fields: Pole: Never show this message again. Tuto zprávu už nikdy neukazovat znovu. Connection Error: %s Chyba spojení: %s Dialogs Logs Záznamy Functions Funkce Filter Filtr Actions Činnosti Artwork Obrázky Tag Panel Značky Album Art Obal alba Tag Sources Zdroje značek Stored Tags Uložené značky Filesystem Souborový systém Mass Tagging Dávkové zpracování značek Dir Renaming I couldn't rename: <i>%1</i> to <b>%2</b> (%3) Nepodařilo se přejmenovat <i>%1</i> na <b>%2</b> (%3) Renaming Přejmenovává se An error occured while renaming <b>%1</b> to <b>%2</b>. (%3) Při přejmenování <b>%1</b> na <b>%2</b>se vyskytla chyba. (%3) Rename: <b>%1</b> to: <i>%2</i> Přejmenovat: <b>%1</b> in: <i>%2</i> Dirview Open in File Manager Otevřít ve správci souborů Refresh Directory Obnovit adresář Hide Header Skrýt záhlaví Show Header Ukázat záhlaví Subfolders Zahrnout podsložky Discogs Large Velká Small Malá <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Using <b>:r id</b> will retrieve the album with Discogs ID <b>id</b>.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do a Discogs album search using those keywords.</li> </ul> <p>Hledané pojmy zadejte zde. Pokud je ponecháno prázdné, použijí se vybrané soubory.</p> <ul> <li><b>artist;album</b> Hledá zvláštní kombinaci Album/Umělec.</li> <li>Pro hledání alba jednoho umělce, ponechejte část pro album prázdnou, ale zachovejte středník (např. <b>Ratatat;</b>). Pro hledání jen alba, ponechejte část pro umělce, tak jako v <b>;Resurrection.</li> <li>Použití <b>:r id</b> získá album s Discogs ID <b>id</b>.</li> </ul> Found Discogs ID: %s Nalezeno Discogs ID: %s Retrieving using Release ID: %s Získává se pomocí Release ID: %s %s at Discogs.com %s na Discogs.com Retrieving search results for keywords: %s Získávají se výsledky hledání pro klíčová slova: %s Invalid Discogs Release ID Neplatné Release ID Discogs Field to use for discogs_id Pole k použití pro ID Discogs API Key (Stored as plain-text.Leave empty to use default.) Klíč API (Uloženo jako prostý text. Ponechejte prázdné pro výchozí.) Retrieving album %s Získává se album: %s Cover size to retrieve Velikost obalu k získání Retrieving cover: %s Získává se obal: %s Retrieve Cover Získat obal Error retrieving image: Chyba při získávání obrázku: Checking tracks for Discogs Album ID. Přezkoušení stop pro Album ID Discogs. No Discogs ID found in tracks. Ve stopách nenalezeno žádné ID Discogs. Edit Field A&dd &Přidat E&dit &Upravit &Field &Pole &Value &Hodnota Edit Field Upravit pole Errors No closing bracket found. Chybí uzavírající závorka. Cannot move directory to a subdirectory within itself. Adresář nelze přesunout do jeho vlastního podadresáře. Couldn't create intermediate directory: %s Nelze vytvořit dočasný adresář %s Your filesystem encoding was detected as <b>ASCII</b>. <br />You won't be able to rename files using accented, <br /> cyrillic or any characters outside the ASCII alphabet. Kódování ve vašem systému bylo určeno jako <b>ASCII</b>. <br />Nebudete moci přejmenovávat své soubory pomocí, cyrilice s přízvukem<br />, nebo jakékoli jiné znaky mimo abecedu ASCII. Extended Tags Field Pole Value Hodnota Resets the selected fields to their original value. Obnovit počáteční stav vybraných polí. Different files. Různé soubory. Fields Year Rok Filename Název souboru Album Album Genre Žánr Title Název Track Skladba Artist Umělec Length Délka Bitrate Datový tok Comment Poznámka Dirpath Cesta FreeDB <b>FreeDB does not support text-based searches.</b> <b>FreeDB nepodporuje žádné textově založené vyhledávací dotazy.</b> Functions ; ; ID3 ID3 &Tag &Značka ., ! ., ! &Text &Text &Type &Typ APEv2 APEv2 False Nepravdivý Artwork: Filenames='$1', Description='$2', Case Sensitive=$3 Obal: Názvy souborů='$1', Popis='$2', Rozlišovat velikost písmen=$3 Tag->Dir: $1 Značka -> Adresář: $1 Convert Case: $0: $1 Převést velká/malá písmena: $0: $1 only as &whole word Jen &celá slova Merge field: $0, sep='$1' Sloučit pole: $0, Oddělovač='$1' Split using separator $0: sep='$1' Rozdělit po oddělovači $0: Oddělovač='$1' Format value Hodnota formátu &Order &Pořadí For &Mixed Case, after any of: S&míšené psaní, po kterémkoli z: Match c&ase: &Psaní velkých a malých písmen: %artist% - %album% %artist% - %album% Update from tag Obnovit ze značky Text File: $0, '$1' Textový soubor: $0, '$1' &Pattern (extension not required) &Vzor (přípona není požadována) Replace &matches with: Nahradit &nálezy: &Encoding &Kódování Trim whitespace Ořiznout prázdné znaky Filename to Tag Název souboru do značky Case conversion Převedení psaní velkých/malých písmen Remove fields except: $1 Odstranit pole kromě: $1 At most %1 arguments expected. %2 given. Očekáváno nanejvýš %1 argumentů. %2 zadáno. Replace $0: '$1' -> '$2', Match Case: $3, Words Only: $4 Nahradit $0: '$1' -> '$2', Rozlišovat velikost písmen: $3, Jen celá slova: $4 Tag->File: $1 Značka -> Název souboru: $1 &Separator &Oddělovač &Pattern &Vzor cp1250 cp1250 cp1251 cp1251 cp1252 cp1252 cp1253 cp1253 cp1254 cp1254 cp1255 cp1255 cp1256 cp1256 cp1257 cp1257 cp1258 cp1258 Merge field Sloučit pole Tag to filename Značka do názvu souboru &Pattern (can be relative path) &Vzor (může být relativní cesta) w&ith: &s: Sort values Roztřídit hodnoty Tag to Dir Značka do adresáře File->Tag '$1' Název souboru -> Značka '$1' Text to Tag Text na značku Split fields using separator Rozdělit pole po oddělovači Export artwork to file Vyvést obal do souboru <blank> $0 <prázdný> $0 Sort $0, order='$1', Match Case='$2' Třídit $0, Pořadí='$1', Rozlišovat velikost písmen='$2' &Replace &Nahradit Replace Nahradit &Default description (can be pattern): &Standardní popis (může být vzor): Convert from non-standard encoding Převést z nestandardního kódování Remove all fields except Odstranit všechna pole kromě Remove duplicate values Odstranit zdvojené hodnoty Descending Sestupně Ascending Vzestupně Import text file Zavést textový soubor &Field list (; separated): Seznam &polí (; odděleno): At least %1 arguments expected. %2 given. Očekáváno nanejvýš %1 argumentů. %2 zadáno. Replace with RegExp Nahradit regulárním výrazem UPPER CASE Velká písmena Remove Dupes: $0, Match Case $1 Odstranit zdvojení: $0, Rozlišovat velikost písmen $1 Match &Case Rozlišovat &velikost písmen Convert to encoding: $0, Encoding: $1 Převést na kódování: $0, Kódování: $1 &Format string Řetězec &formátování &Regular Expression &Regulární výraz Format $0 using $1 Formátovat $0 pomocí $1 Autonumbering Číslování Mixed Case Smíšená velikost písmen &Output &Výstup folder_%img_counter% folder_%img_counter% Trim $0 Oříznout $0 Text to Tag: $0 -> $1, $2 Text do značky: $0 -> $1, $2 Remove Fields Odstranit pole lower case Malá písmena Match filename's &case: Rozlišovat &velikost písmen v názvu souboru: Autonumbering: $0, Start: $1, Restart for dir: $2, Padding: $3 Automatické číslování: $0, Začátek: $1, Začít u každé složky znovu: $2, Délka: $3 Update from $2, Fields: $1 Aktualizovat z $2, Pole: $1 Load Artwork Nahrát obrázek obalu RegReplace $0: RegExp '$1' with '$2', Match Case: $3 VýrazNahradit $0: Regulární výraz '$1' nahradit '$2', Rozlišovat velikost písmen: $3 Export Art: pattern='$1' Vyvést obrázek: vzor='$1' &Filenames to check (;-separated, shell wildcards [eg. *] allowed) Přezkoušet &souborové názvy (odděleno ;, držitelé místa [z.B.. *] dovoleno) lyrics.txt lyrics.txt oi 1 1 aoeu aoeu au au Functions Dialog <b>No change</b> <b>Žádná změna</b> Functions Funkce <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells. It is not allowed when creating an action.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> <p>Pole, do kterých se bude zapisovat.</p> <ul> <li>Zadejte seznam polí oddělených čárkou. Např. <b>artist, title, album</b></li> <li>Použijte <b>__selected</b>, aby se zapisovalo jen do vybraných polí. Není dovoleno při vytváření činností.</li> <li>Kombinace, jako je <b>__selected, artist, title</b>, jsou dovoleny.</li> <li>Ale používání <b>__selected</b> v Činnosti dovoleno <b>není</b>.</li> <li>'~' bude zapisovat do všech polí, kromě těch, která následují vlnovku. Např.. <b>~artist, title</b> bude zapisovat do všech polí kromě polí Umělec a Název nalezených ve vybraných souborech.<li> </ul> <b>No change.</b> <b>Žádná změna.</b> No preview for is shown for this function. Pro tuto funkci není ukázán žádný náhled. GenSettings Program to &play files with: &Program na přehrávání souborů: Language (Requires a restart) Jazyk (vyžaduje opětovné spuštění) &Edit sort options &Upravit pořadí třídění &Preserve file modification times &Zachovat časy změn souborů Show &row numbers Ukázat čísla řá&dků &Load last folder at startup Nahrát &poslední složku při spuštění Show &gridlines Ukázat &mřížku tabulky Automatically resize columns to contents Automaticky přizpůsobit šířku sloupců obsahu Default Výchozí Show tooltips in file-view: Ukázat v souborovém pohledu rady k nástrojům: Su&bfolders Zahrnout &podsložky <Autodetect> <Zjistit automaticky> List Buttons &<< &<< &>> &>> Add Přidat Edit Upravit Move Up Posunout nahoru Remove Odstranit Duplicate Zdvojit Move Down Posunout dolů Logs &Copy &Kopírovat &Clear &Smazat Main Window puddletag: %1 + others puddletag: %1 + jiné Import directory... Zavést adresář... puddletag: %1 puddletag: %1 Mapping Settings Tag Značka Source Zdroj Target Cíl Original Field Původní pole <b>A restart is required to apply these settings.</b> <b>Pro použití těchto nastavení je požadováno opětovné spuštění programu.</b> <ul><li>Tag is the format that the mapping applies to. One of <b>ID3, APEv2, MP4, or VorbisComment</b>. </li><li>Fields will be mapped from Source to Target, meaning that if Source is found in a tag, it'll be editable in puddletag using Target.</li> <li>Eg. For <b>Tag=VorbisComment, Source=organization, and Target=publisher</b> means that writing to the publisher field for VorbisComments in puddletag will in actuality write to the organization field.</li><li>Mappings for tag sources are also supported, just use the name of the tag source as Tag, eg. <b>Tag=MusicBrainz, Source=artist,Target=performer</b>.</li></ul> <ul><li>Značka je formát, na který se přiřazení použije. Jedna z <b>ID3, APEv2, MP4, nebo VorbisComment</b>. </li><li>Pole budou přiřazena ze Zdroje do Cíle, což znamená, že pokud je ve značce nalezen Zdroj, bude upravitelný v puddletag pomocí Cíle.</li> <li>Např. <b>Značka=VorbisComment, Zdroj=organization, a Cíl=publisher</b> znamená, že zápis do pole vydavatele (publisher) pro VorbisComments v puddletag povede ve skutečnosti k zápisu do pole organizace (organization).</li><li>Přiřazení pro zdroje značek jsou taktéž podporována, pouze použijte název zdroje značky jako Značka, tj.. <b>Značka=MusicBrainz, Zdroj=artist, Cíl=performer</b>.</li></ul> Masstagging Stop Zastavit &Stop Za&stavit Replace and continue Nahradit a pokračovat <b>%d</b> results found. Nalezeno <b>%d</b> výsledků. No artist or album info found in files. Starting search. V souborech nebyl nalezen žádný umělec nebo album. Začíná se hledání. &Write Previews &Zapsat změny Starting search for: <br />artist=<b>%1</b><br />album=No album name found. Spouští se hledání: <br />Umělec=<b>%1</b><br />Album=Nenalezen žádný název alba. <b>One</b> result found. Nalezen <b>jeden</b> výsledek. Clear &Preview Vyprázdnit &náhled <b>Polling: %s</b> <b>Vyhledávání: %s</b> Combine and continue Spojit a pokračovat Replace and stop Nahradit a zastavit Continue Pokračovat <b>%d</b> possibly matching albums found. Nalezeno <b>%d</b> možná odpovídajících alb. <b>One</b> possibly matching album found. Nalezeno <b>jedno</b> možná odpovídající album. Do nothing and continue Nedělat nic a pokračovat <br />Valid matches were found for the album. <br />Pro album byly nalezeny shody. Starting search for: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> Spouští se hledání: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> No matches found for tag source <b>%s</b> Nebyla nalezena žádná shoda pro zdroj <b>%s</b> Retrieving matching album. Získává se odpovídající album. An error occured during the search: <b>%s</b> Při hledání se vyskytla chyba: <b>%s</b> Retrying search with album name: <b>%s</b> Znovu se zkouší hledání s názvem alba: <b>%s</b> <br />Rechecking with results from <b>%s</b>.<br /> <br />Přezkoušení s výsledky z <b>%s</b>.<br /> &Profile: &Profil: Retrieving matching album. <b>%1 - %2</b> Získává se odpovídající album. <b>%1 - %2</b> Default Profile Výchozí profil &Search &Hledat Retrieving matching album. Artist=<b>%1</b> Získává se odpovídající album. Umělec=<b>%1</b> Retrieving matching album. Album=<b>%1</b> Získává se odpovídající album. Album=<b>%1</b> Starting search for: <br />album=<b>%1</b><br />artist=No artist found. Spouští se hledání: <br />Album=<b>%1</b><br />Umělec=Nenalezen žádný umělec. &Configure Profiles &Nastavit profily Combine and stop Spojit a zastavit An error occured during album retrieval: <b>%s</b> Při získávaní dat o albu se vyskytla chyba: <b>%s</b> <b>No valid matches were found for the album.</b> <b>Pro album nebyly nalezeny žádné odpovídající výsledky.</b> <b>Lookups completed.</b> <b>Vyhledávání dokončeno.</b> Previously retrieved result does not match. Retrieving next matching album. Předchozí získané výsledky neodpovídají. Přijímá se další odpovídající album. <b>No results were found.</b> <b>Nebyly nalezeny žádné výsledky.</b> Rechecking Přezkoušení Use best match Použít nejlepší shodu Mass Tagging Dávkové zpracování značek Menus &Cut &Vyjmout Help Nápověda &Edit Úp&ravy &Exit U&končit &File &Soubor &Play &Přehrát &Save &Uložit &Undo &Zpět Refresh current file-view. Obnovit nynější pohled na soubory. Disabl&e Preview Mode &Vypnout náhled Remove &APEv2 Tag Odstranit značku &APEv2 Select all files belonging to the directories of those selected. Otherwise (if only a single directory is selected) selects all the files in the previous directory. Vybrat všechny soubory ve vybraných adresářích. Pokud je vybrán jen jeden adresář, jsou vybrány všechny soubory v předchozím adresáři. Sa&ve playlist &Uložit seznam skladeb Copy All &Fields Kopírovat všechna &pole Delete &Without Confirmation Smazat &bez potvrzení Import an m3u playlist into puddletag. Zavést do Puddletag seznam skladeb m3u. &Write Previews &Zapsat změny Replace... Nahradit... &File->Tag &Název souboru -> Značka In &Library V &knihovně &Forum &Fórum &Paste &Vložit &Tools &Nástroje &Decrease Font &Zmenšit velikost písma &Functions &Funkce Autonumbering &Wizard... &Průvodce pro automatické číslování... Remove ID3v&2 Tag Odstranit značku ID3v&2 Remove ID3v&1 Tag Odstranit značku ID3v&1 &Copy Selection &Kopírovat výběr &Add Folder &Přidat složku Move Selected Do&wn Posunout vybrané &dolů Convert filename to tag using the pattern. Převést název souboru na značku pomocí vzoru. Append a directory to current file-view. Přidat do nynějšího pohledu na soubory adresář. &Rename Directories &Přejmenovat adresáře &Open Folder &Otevřít složku Sort &By &Třídit dle E&xtended Tags Rozšířené &značky &Properties &Vlastnosti &Remove Tag &Odstranit značku &Plugins &Přídavné moduly &Lock Layout &Uzamknout rozvržení &Actions Č&innosti &Preview Mode &Náhledový režim Load &playlist Nahrát &seznam skladeb Select a directory to import into puddletag. Zavést do Puddletag adresář. &Refresh &Obnovit Refresh &Selected Obnovit &výběr Select &Previous Directory Vybrat &předchozí adresář &Bug tracker Sledování &chyb &Increase Font Z&většit velikost písma Ta&g Tools Nástroje na &značky About Qt O Qt &Tag->File &Značka -> Název souboru Select &All Vybrat &vše &Convert &Převést &Delete S&mazat &Format &Formát Remove All &ID3 Tags Odstranit všechny značky &ID3 Toolbar Nástrojový pruh &Clipboard->Tag &Schránka -> Značka Clear Selected &Files Vyprázdnit vybrané &soubory Clear Selected &Cells Vyprázdnit vybrané &buňky &Import Music Library... &Zavést hudební knihovnu... &QuickActions &Rychlé činnosti About puddletag O programu Puddletag Reloads directories of selected files. Nahraje znovu adresáře s vybranými soubory. &Undo Last Clear &Zrušit poslední vyprázdnění &Select Column &Vybrat sloupec Enabl&e Preview Mode &Povolit náhledový režim Paste &Onto Selection Vložit &do výběru Plays the selected files in the predefined music player. Přehraje vybrané soubory ve stanoveném přehrávači. &Unload Everything Z&avřít vše &Windows &Okna &Invert Selection &Obrátit výběr &Preferences &Nastavení &Text File->Tag &Textový soubor -> Značka Move Selected &Up Posunout vybrané &nahoru Save all files to m3u playlist. Uložit všechny soubory do seznamu skladeb m3u. Select &Next Directory Vybrat &další adresář Online &Documentation &Dokumentace na internetu Messages That's a large amount of data to copy. It may cause your system to lock up. Do you want to go ahead? Toto je velké množství dat ke kopírování. Může to způsobit, že se systém znepřístupní. Chcete pokračovat? Copy without images. Kopírovat bez obrázků. Mp3tag Parsing album page. Zpracovává se stránka alba. Retrieving album page: %s Získává se stránka alba: %s Parsing search page. Zpracovává se stránka hledání. Parsing search page... Zpracovává se stránka hledání... Retrieving album page... Získává se stránka alba... Retrieving search page... Získává se stránka hledání... Parsing album page... Zpracovává se stránka alba... Retrieving search page: %s Získává se stránka hledání: %s MusicBrainz <b>Error:</b> While retrieving Album ID %1 (%2) <b>Chyba:</b> Při získávání ID alba %1 (%2) <b>Error:</b> While retrieving %1: %2 <b>Chyba:</b> Při získávání %1: %2 Found album id %s in tracks. Retrieving Ve stopách nalezeno ID alba %s. Získává se Retrieving cover: %s Získává se obal: %s No images exist for this album. Pro toto album nejsou žádné obrázky. Invalid UUID Neplatné UUID Invalid query sent. Poslán neplatný dotaz. You have exceeded your rate limit. Překrčil jste své omezení datového toku. Image does not exist. Obrázek neexistuje. Retrieving image %s Získává se obrázek: %s Retrieve Cover Získat obal Cover size to retrieve: Velikost obalu k získání: Amount of images to retrieve: Počet obrázků k získání:: Just the front cover Pouze přední strana obalu All (can take a while) Vše (může chvíli trvat) Error retrieving image: %s Chyba při získávání obrázku: %s MusicLib Load a lib first. Nejprve nahrát knihovnu. Library Artists Umělci v knihovně Import Music Library Zavést hudební knihovnu Anonymous Library Neznámá knihovna Saving music library... Ukládá se hudební knihovna... Music Library Hudební knihovna Loading music library... Nahrává se hudební knihovna... Error loading %1: %2 Chyba při nahrávání %1: %2 Anonymous author. Neznámý autor. An error occured while loading the %1 library: <b>%2</b> Při nahrávání hudební knihovny %1 se vyskytla chyba: <b>%2</b> No libraries found Nenalezeny žádné knihovny &Search &Hledat Description was left out. Popis chybí. No supported music libraries were found. Most likely the required dependencies aren't installed. Visit the puddletag website, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> for more details. Nenalezeny žádné podporované hudební knihovny. Nejpravděpodobněji nejsou požadované závislosti nainstalovány. Navštivte stránky programu Puddletag, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a>, kde najdete podrobnosti. Invalid library Neplatná knihovna Pattern Settings &Sort &Třídit Enter a pattern Zadejte vzor Playlist Save Playlist... Uložit seznam skladeb... Select m3u file... Vybrat soubor m3u... An error occured while reading <b>%1</b> (%2) Při čtení <b>%1</b> se vyskytla chyba. (%2) Playlist Settings &Write extended info &Zapsat podrobné informace Entries &relative to working directory Uložit záznamy s &relativní cestou &Filename pattern. Vzor pro &souborový název. Plugin Settings Name Název <b>Loading/unloading plugins requires a restart.</b> <b>Nahrání/Ukončení přídavných modulů vyžaduje nové spuštění programu.</b> Author Autor Description Popis Version Verze Previews Disable Preview Mode first to enable tag deletion. Nejprve vypněte náhledový režim, abyste umožnil mazání značek. Preview Mode: Off Náhledový režim: Vypnuto Clea&r preview &Smazat náhled Some files have uncommited previews. Changes will be lost once you load a directory. <br />Do you still want to load a new directory?<br /> Některé soubory mají nepotvrzený náhled. Změny budou ztraceny, jakmile nahrajete adresář. <br />Skutečně chcete nahrát nový adresář?<br /> Do you want to exit Preview Mode? Chcete ukončit náhledový režim? <b>Preview Mode: On</b> <b>Náhledový režim: Zapnuto</b> Some files have uncommited previews. These changes will be lost once you exit puddletag. <br />Do you want to exit without writing those changes?<br /> Některé soubory mají nepotvrzený náhled. Změny budou ztraceny, jakmile Puddletag ukončíte. <br />Chcete program ukončit, aniž by tyto změny byly zapsány?<br /> Profile Config Configure Mass Tagging Profiles Nastavit profily dávkového zpracování Masstagging Profiles Profily dávkového zpracování Profile Editor Match tracks using &fields: Roztřídit stopy pomocí &polí: <p>The fields listed here will be used in determining whether a track matches the retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Zde uvedená pole se použijí na určení toho, zda stopa odpovídá výsledku hledání. Každé pole bude porovnáno pomocí přibližnostního algoritmu. Když výsledná průměrná pravděpodobnost shody odpovídá zde zadanému procentu, nebo je vyšší, bere se na výsledek hledání zřetel.</p> <p>The artist and album fields will be used in determining whether an album matches the retrieved one. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater or equal than what you specify here it'll be considered to match.</p> <p>Pole Umělec a Album se použijí na porovnání výsledků hledání s albem. Každé pole bude porovnáno pomocí přibližnostního algoritmu. Když výsledná průměrná pravděpodobnost shody odpovídá zde zadanému procentu, nebo je vyšší, bere se na výsledek hledání zřetel.</p> Minimum percentage required for track match. Nejmenší shoda požadovaná při hledání stop. &If no results found: &Pokud nebyly nalezeny žádné výsledky: &Name: &Název: Enter a comma-separated lists of fields that'll replace any retrieved from previously polled tag sources. <br />Start the list with the tilde (~) character to replace all but the fields you list. <br /><b>NB: Fields listed here must also be listed in the list of fields to retrieve.</b><br /><br />Eg. Assume you have two Tag Sources. The first retrieves <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. The second source gets <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. For the second Tag Source, setting just <b>artist</b> as the list of fields to replace will overwrite the artist field retrieved from the first tag source. The resulting retrieved fields/values as shown in puddletag will then be <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. Zadejte čárkou oddělený výčet polí, která nahradí všechny předchozí hodnoty. <br />Zadávání začněte vlnovkou (~), aby se nahradila všechny pole vyjma uvedených. <br /><b>Pozor: Zde uvedená pole musí být uvedena i v seznamu polí k získání. </b><br /><br />Např. Za předpokladu, že používáte dva zdroje značek, první dává <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. Druhý zdroj dává <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. Pro druhý zdroj zadejte pouze <b>artist</b> jako pole k nahrazení. Tímto se přepíše pole Umělec z prvního zdroje. Potom budou v Puddletag ukázána následující získaná pole/hodnoty: <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. <p>If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Pokud není pro soubor nalezen žádný odpovídající výsledek hledání, budou jak soubory tak výsledky hledání tříděny podle názvů souborů. Odpovídající si stopy budou upraveny.</p> Edit Tag Source Config Upravit nastavení zdroje značky Pattern to match filenames against. Vzor, se kterým se mají názvy souborů porovnat. <p>Enter a comma-seperated list of fields to retrieve. Leave empty to retrieve all available fields/values. <br /><br />Eg. <b>artist, album, title</b> will only retrieve the artist, album and title fields of from the Tag Source. <br /><br />Start the list with the tilde (~) character to write all retrieved fields , but the ones listed. Eg the field list <b>~composer,__image</b> will write all fields but the composer and __image (aka cover art) fields.</p><p>If a field has been retrieved in a previous Tag Source the values will be combined if they differ. Eg. If genre=<b>Rock</b> for the first tag source polled and genre=<b>Alternative</b> for the tag source polled second then the resulting field will have multiple-values ie. genre=<b>Rock\\Rap</b> <p>Zadejte čárkou oddělený výčet polí k získání. Ponechejte prázdné pro získání všech dostupných polí/hodnot. <br /><br />Např. <b>artist, album, title</b> pro získání polí umělce, alba a názvu ze zdroje značek. <br /><br />Zadávání začněte vlnovkou (~), aby se získala všechna pole vyjma uvedených. Např. seznam polí <b>~composer,__image</b> zapíše všechna pole až na pole skladatel a obrázek (obal).</p><p>Pokud bylo pole získáno v předchozím zdroji značek, hodnoty budou, pokud se liší, spojeny.Např. pokud nejprve genre=<b>Rock</b> pro první zdroj značky, a pak genre=<b>Alternative</b> pro druhý zdroj značky, potom bude výsledné pole obsahovat více hodnot, tj. genre=<b>Rock\\Rap</b> <p><b>Continue</b>: The lookup for the current album will continue by checking the other tag sources if no matching results were found for this tag source.</p><p><b>Stop:</b> The lookup for the current album will stop and any previously retrieved results will be used.</p> <p><b>Pokračovat</b>: Hledání pro nynější album bude pokračovat v dalších zdrojích značek, protože v tomto zdroji značek nebyly nalezeny žádné odpovídající výsledky hledání.</p><p><b>Zastavit:</b> Hledání pro nynější album bude zastaveno a použijí se předchozí výsledky hledání.</p> Update empty fields only. Aktualizovat jen prázdná pole. Masstagging Profile Profil dávkového zpracování Match tracks using fields: Roztřídit stopy pomocí polí: &Source &Zdroj &Description &Popis Minimum &percentage required for album matches. N&ejmenší shoda požadovaná při hledání alb. <p>The fields listed here will be used in determining whether a file matches a retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Zde uvedená pole se použijí na určení toho, zda soubor odpovídá získané stopě. Každé pole bude porovnáno pomocí přibližnostního algoritmu. Když je výsledná průměrná pravděpodobnost shody větší než nejmenší procentu, bere se na výsledek hledání zřetel.</p> <p>Check to enable brute forcing matches. If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Brute Force verwenden um Entsprechungen zu erzwingen. Wenn eine für eine Datei kein unmittelbare Übereinstimmung gefunden werden kann, werden die Dateien und die Suchergebnisse nach Dateinamen sortiert und entsprechenden Tracks zugeordnet.</p> Brute force unmatched files. Na neshodující se soubory použít hrubou sílu. Edit Masstagging Profile Upravit profil dávkového zpracování <p>If no tag information is found in a file, the tags retrieved using this pattern will be used instead.</p> <p>Pokud není v souboru nalezena žádná značka, použijí se namísto toho informace získané pomocí tohoto vzoru.</p> Fields to replace: Pole k nahrazení: Minimum percentage required for album matches. Nejmenší shoda požadovaná při hledání alb. Progress Dialog %1%2 of %3... %1%2 z %3... Please Wait... Počkejte, prosím... QuodLibet ... ... &Library Path Cesta ke &knihovně %1 (%2) %1 (%2) Select QuodLibet library file... Vybrat soubor s knihovnou QuodLibet... %1 is an invalid QuodLibet music library file. %1 je neplatný soubor s hudební knihovnou QuodLibet. Settings Tags Značky Playlist Seznam skladeb Genres Žánry Shortcuts Klávesové zkratky Plugins Přídavné moduly Mappings Přiřazení polí Patterns Vzory Tag Panel Panel se značkami Confirmations Potvrzení Tag Sources Zdroje značek Colours Barvy General Obecné &Windows &Okna An error occurred while saving the settings of <b>%1</b>: %2 Při ukládání nastavení <b>%1</b> se vyskytla chyba: %2 Shortcut Editor Enter a key sequence for the shortcut. Zadejte sled kláves pro klávesovou zkratku. &Don't assign keyboard shortcut. &Nepřiřazovat klávesovou zkratku. Shortcut Settings <b>Double click a cell in the Shortcut Column to <br />modify the key sequence.</b> <b>Dvakrát klepněte na pole v tabulce pro úpravu sledu kláves.</b> File Properties Vlastnosti souboru Description Popis Edit Shortcuts Upravit klávesové zkratky Shortcut Klávesová zkratka Shortcuts Invalid shortcut sequence. Neplatný sled kláves. &Clear &Smazat (Deleted) (Smazáno) Status Bar <b>%s</b> <b>%s</b> New Filename: <b>%1</b> Nový název souboru: <b>%1</b> Table An error occurred while trying to play the selected files: <b>%1</b> <br />Does the music player you defined (<b>%2</b>) exist? Při pokusu o přehrání vybraných souborů <b>%1</b> se vyskytla chyba <br />Je určený přehrávač (<b>%2</b>) nainstalován? Deleting Smazání It wasn't possible to play the selected files, because the music player you defined (<b>%1</b>) does not exist. Není možné přehrát vybrané soubory, protože program vámi určený k přehrávání (<b>%1</b>) není nainstalován. Disable Preview Mode first to enable tag deletion. Nejprve vypněte náhledový režim, abyste mohl zapnout mazání značek. Deleting tag... Maže se značka... There was an error deleting the tag of %1: <b>Tag deletion isn't supportedfor %2 files.</b> Při mazání značky %1 se vyskytla chyba: <b>Mazání značek není pro soubory %2 podporováno.</b> Are you sure you want to delete the selected files? Jste si jistý, že chcete smazat vybrané soubory? An error occurred while deleting the tag of %1: <b>%2</b> Při mazání značky %1 se vyskytla chyba: <b>%2</b> Preview: %1 Real: %2 Náhled: %1 Skutečný: %2 Tag Panel Settings Row Řádek All row numbers must be integers. Všechna čísla řádků musí být celými čísly. Tag Settings Update the ID3v1 tag's values only if an ID3v1 tag is present. Hodnoty značky ID3v1 aktualizovat jen tehdy, když je značka ID3v1 přítomna. Remove ID3v1 tag. Odstranit značku ID3v1. &Restrict incoming files to (eg. "*.mp3; *.ogg; *.aac") &Omezit nahrání nových souborů na (např. "*.mp3; *.ogg; *.aac") ID3 Options Volby pro ID3 Default &pattern to use when saving artwork. Výchozí vzor při &ukládání obalů. Create an ID3v1 tag if it's not present. Otherwise update it. Vytvořit značku ID3v1, když není žádná přítomna. Jinak ji aktualizovat. Write ID3v2.&3 Zapsat ID3v2.&3 Write ID3v2.&4 Zapsat ID3v2.&4 puddletag writes only &ID3v2 tags.<br />What should be done with the ID3v1 tag upon saving? Puddletag zapisuje pouze značky &ID3v2.<br />jak se má postupovat při ukládání značek ID3v1? Tag Sources Page doesn't exist Stránka neexistuje HTTPError 403: Forbidden Chyba HTTP 403: Přístup odmítnut <b>Error parsing artist/album combinations.</b> <b>Chyba při zpracovávání kombinace umělec/album.</b> Retrieving cover: %s Získává se obal: %s Text File -> Tag &No &Ne &Yes &Ano Text Text Error Chyba The file <b>%1</b> couldn't be loaded.<br /> Do you want to choose another? Soubor <b>%1</b> se nepodařilo nahrát.<br /> Chcete vybrat jiný soubor? Tag preview Náhled na značku Import tags from text file Zavést značky z textového souboru &Select File &Vybrat soubor &Paste Clipboard Vložit do &schránky WebDB Retrieval complete. Získávání dokončeno. Edit sort option Upravit pořadí třídění Add sort option Přidat pořadí třídění <b>Select some files or enter search paramaters.</b> <b>Vyberte soubory nebo zadejte hledané pojmy.</b> An unhandled error occured: %1 Vyskytla se neznámá chyba: %1 &Write &Zapsat Retrieved Albums (sorted by %s) Získaná alba (tříděno podle %s) Retrieving tracks... Získávají se stopy... Searching complete. Hledání dokončeno. Enter a comma seperated list of fields to write. <br /><br />Eg. <b>artist, album, title</b> will only write the artist, album and title fields of the retrieved tags. <br /><br />If you want to exclude some fields, but write all others start the list the tilde (~) character. Eg <b>~composer, __image</b> will write all fields but the composer and __image fields. Zadejte čárkou oddělený výčet polí, do kterých se má zapisovat. <br /><br />Např. <b>artist, album, title</b> zapíše získané výsledky hledání jen do polí Umělec, Album a Název. <br /><br />Když chcete určitá pole vyloučit, ale do všech ostatních polí chcete zapisovat, začněte výčet vlnovkou (~). Např. <b>~composer, __image</b> provede zápis do všech polí vyjma pole pro skladatele a obal. <b>Nothing to display.</b> <b>Žádná informace k zobrazení.</b> Couldn't load Mp3tag Tag Source %s Nepodařilo se nahrát zdroj značky Mp3Tag %s Configure Nastavit <b>Error in pattern</b> <b>Chyba ve vzoru</b> Display format for &retrieved albums Ukázat formát pro získaná &alba Enter a sorting option (a comma-separated list of fields. Eg. "artist, title") Zadejte pořadí třídění (čárkou oddělený výčet polí. Např. "artist, title") Configure: %s Nastavit: %s Automatic retrieval options Volby pro automatické získávání Update empty fields only. Aktualizovat pouze prázdná pole. An unhandled error occurred: %1 Vyskytla se neznámá chyba: %1 Retrieving album. Získává se album. No matching albums were found. Nebyla nalezena žádná odpovídající alba. Retrieving album tracks... Získávají se stopy alba... &Display format for individual tracks. &Ukázat formát pro jednotlivé stopy. Enter search parameters here. If empty, the selected files are used. <ul><li><b>artist;album</b> searches for a specific album/artist combination.</li><li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li></ul> Zde zadejte hledané pojmy. Pokud jsou tato pole ponechána prázdná, použijí se jako hledané pojmy názvy souborů. <ul><li><b>artist;album</b> hledá určitou kombinaci album/umělec.</li><li>Pro ukázání alb jednoho umělce, nezadávejte žádné album (ponechejte část s albem prázdnou), ponechejte však středník. (např. <b>Ratatat;</b>). Hledáte-li pouze album, nezadávejte umělce, např. <b>;Resurrection.</li></ul> Searching... Hledá se... &Search &Hledat Sour&ce: &Zdroj: Retrieved Albums Získaná alba An error occured: %1 Vyskytla se chyba: %1 <b>Tags were written.</b> <b>Značky byly zapsány.</b> Automatically retrieve matches. Získat shody automaticky. User-Agent to when accessing web sites. Rozpoznání uživatele používané pro připojení se k internetovým stránkám. More than one album matches. None will be retrieved. Více než jedna shoda. Nebudou získávány žádné informace. Select files and click on Search to retrieve metadata. Vyberte soubory a klepněte na Hledat pro získání popisných dat. Sort retrieved albums using order: Třídit získaná alba na základě následujícího pořadí: Retrying search with %s Pokus o nové vyhledání s %s S&ubmit Tags &Odeslat značky Submission completed. Odeslání dokončeno. puddletag-1.0.2/translations/puddletag_pt_BR.ts0000644000175000001440000051303012170511246022077 0ustar keithusers00000000000000 About puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). puddletag é um editor de tags de áudio para GNU/Linux similar ao programa do Windows Mp3tag. <br /><br />Funcionalidades incluem: Edição de tags em lote, renomear arquivos usando tags, recuperar tags através do nome do arquivo, usar Ações para automatizar tarefas repetitivas, importar sua biblioteca de música e uma porção de outras coisas incríveis.<br /><br /> Formatos suportados: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) e APEv2 (.ape) <br />< br /> Visite o site do puddletag (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) para ajuda e atualizações.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licenciado sob GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> por suas incríveis ideias e por implementá-las com mais erros do que é humanamente possível.<br /><br /> Para os desenvolvedores das bibliotecas das quais o puddletag depende. (sem elas eu provavelmente ainda estaria escrevendo um leitor de id3).<br /><br /> <b>Paul McGuire</b> pelo PyParsing.<br /> <b>Michael Urman</b> e <b>Joe Wreschnig</b> pelo Mutagen (Isso é incrível).<br /> <b>Phil Thomson</b> e todos os responsáveis pelo PyQt4.<br /> <b>Michael Foord</b> e <b>Nicola Larosa</b> pelo ConfigObj (seriamente, eles deveriam substituir o ConfigParser com isso).<br /> O <b>time Oxygen<b/> pelos ícones Oxygen. About puddletag Sobre:puddletag <h2>puddletag %1 (Changeset %2)</h2> %3 <h2>puddletag %1 (Changeset %2)</h2> %3 <h2>puddletag %1</h2> %2 <h2>puddletag %1</h2> %2 &About &Sobre &Thanks &Agradecimentos puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2008-2012 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv3 (<a href="www.gnu.org/licenses/gpl-3.0.html">www.gnu.org/licenses/gpl-3.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> First off, a big thanks to **Evan Devetzis** for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. Thanks to <b>Raphaël Rochet</b>, <b>Fabian Bakkum</b>, <b>Alan Gomes</b> and others for contributing translations. To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. AcoustID Calculating ID Retrieving AcoustID data: %1 of %2. Retrieving MB album data: %1 Error generating fingerprint: %1 Error retrieving data: %1 Minimum Score Parsing Data Error submitting data: %1 Submitting data to AcoustID: %1 to %2 of %3. Found AcoustID in file. File #%1: %2 AcoustID Key Please enter AcoustID user key in settings. Actions Enter a name for the shortcut. Digite um nome para o atalho. Modify Action Modificar Ação Actions Ações Assign &Shortcut Atribuir &Atalho <p>Creates a shortcut for the checked actions on the Actions menu. Use Edit Shortcuts (found by pressing down on this button) to edit shortcuts after the fact.</p> <p>Cria um atalho para as ações marcadas no menu Ações. Use Editar Atalhos (encontrado ao pressionar esse botão) para editar atalhos depois do fato.</p> Edit Shortcuts Editar Atalhos New Action Nova Ação Enter a name for the new action. Digite um nome para a nova ação. Edit Action: Editar Ação: Edit Action: %s Editar Ação: %s Error: Using <b>__selected</b> in Actions is not allowed. Please enter some fields to write to. Add Action: Amazon Invalid Access or Secret Key Acesso ou Chave Secreta Inválidos Retrieving search results for keywords: %s Obtendo resultados para as palavras: %s Invalid XML returned. XML Inválido. %s at Amazon.com %s arroba Amazon.com Retrieving using ASIN: %s Obtendo através do ASIN: %s Retrieving XML: %1 - %2 Obtendo XML: %1 - %2 Retrieving cover: %s Obtendo capa: %s <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do an Amazon album search using those keywords.</li> </ul> <p>Digite os parâmetros da busca aqui. Se estiver em branco, os arquivos selecionados serão usados.</p> <ul> <li><b>artista;álbum</b> procure por uma combinação álbum/artista específica.</li> <li>Para listar os álbums por um artista deixe apagada a parte do álbum, mas mantenha o ponto e vírgula (ex. <b>Ratatat;</b>). Para listar somente um álbum deixe a parte de artista como em <b>;Ressurreição.</li> <li>Digite palavras-chave <b>sem um ponto e vírgula (;)</b> para fazer uma busca por álbuns na Amazon usando essas palavras.</li> </ul> Retrieve Cover Obter Capa Cover size to retrieve Obter tamanho da capa Small Pequeno Medium Médio Large Grande Access Key (Stored as plain-text. Leave empty for default.) Chave de Acesso (Armazenada como texto. Deixe em branco por padrão.) Secret Key (Stored as plain-text. Leave empty for default.) Chave Secreta (Armazenada como texto. Deixe em branco por padrão.) Invalid XML returned. No tracks listed. Original Size Artwork Enter a description Digite uma descrição <p>Enter a description for the current cover.</p><p>For ID3 tags the description has to be different for each cover as per the ID3 spec. If they don't differ then spaces are appended to the description when the tag is saved.</p> <p>Digite uma descrição para a capa atual.</p><p>Para tags ID3 a descrição deve ser diferente para cada capa, como descrito na especificação ID3. Se elas não diferirem então espaços são adicionados à descrição quando a tag é salva.</p> &Description &Descrição &Type &Tipo <p>Select a cover type for the artwork.</p> <p>Selecione um tipo de capa para a arte.</p> &Save cover to file &Salvar capa para arquivo &Add cover &Adicionar capa &Remove cover &Remover capa &Change cover &Mudar capa Select Image... Selecionar imagem... JPEG Images (*.jpg);;PNG Images (*.png);;All Files(*.*) Imagens JPEG (*.jpg);;Imagens PNG (*.png);;Todos arquivos(*.*) Save artwork as... Salvar arte como... Writing to <b>%1</b> failed. Não foi possível salvar em <b>%1</b>. Enter description Digite uma descrição Artwork Context %1/%2 %1/%2 Cover Varies Capa Varia No Images Sem Imagens Autonumbering Wizard Autonumbering Wizard Assistente de Numeração Automática &Start: &Começar: Max length after padding with zeroes: Tamanho máximo depois do preenchimento com zeros: Add track &separator ['/']: Number of tracks Adicionar faixa &separador ['/']: Número das faixas &Restart numbering at each directory. &Reiniciar numeração em cada diretório. Add track &separator ['/'] Adicionar faixa &separador ['/'] Colour Settings <p>Below are the backgrounds used for various controls in puddletag. <br /> Double click the desired action to change its colour.</p> <p>Abaixo estão os planos de fundo usados por uma vários controles no puddletag. <br /> Dê dois cliques na ação desejada para mudar sua cor.</p> Row selected in file-view. Linha selecionada em visualização de arquivo. Row colour for files with previews. Cor da linha para aquivos com visualização. Field added in Extended Tags. Campo adicionado em Tags Extendidas. Field edited in Extended Tags. Campo editado em Tags Extendidas. Field removed in Extended Tags. Campo removido em Tags Extendidas. Column Settings Title Título Columns Colunas Adjust visibility of columns. Ajustar a visibilidade das colunas. &Select Columns &Selecionar Colunas Combo Box Remove current item. Remover item atual. Confirmations Confirm when exiting preview mode. Confimar quando sair do modo de visualização. Confirm when deleting files. Confirmar quando deletar arquivos. Cover Type Other Outro O O File Icon Ícone do Arquivo I I Other File Icon Outro Ícone do Arquivo OI OI Cover (front) Capa (frente) CF CF Cover (back) Capa (trás) CB CT Leaflet page Encarte LF E Media (e.g. label side of CD) Mídia (ex. rótulo do lado do CD) M M Lead artist Artista Chefe LA AC Artist Artista A A Conductor Condutor C C Band Banda B B Composer Compositor CP CP Lyricist Letrista L L Recording Location Local de Gravação RL LG During recording Durante a Gravação DR DG During performance Durante a execução DP DE Movie/video screen capture Captura de tela do Filme/video MC CV A bright coloured fish Um peixe de cores vibrantes F F Illustration Illustração P P Band/artist logotype Logotipo da Banda/artista BL LB Publisher/Studio logotype Logotipo do Estúdio/Editora PL LE Defaults &Fields &Campos Yes Sim No Não <blank> <vazio> <keep> <manter> MusicBrainz MusicBrainz SYNTAX ERROR in $%1: %2 ERRO DE SINTAXE em $%1 %2 SYNTAX ERROR: %s expects a number at argument %d. ERRO DE SINTAXE %s espera um número como argumento %d. function does not exist. função não existe. Error Erro <br /> Do you want to continue? <br /> Você gostaria de continuar? Field Campo OK Certo Cancel Cancelar Writing Gravando &Yes &SIm &No &Não Reading Directory: %1 Lendo Diretório:%1 Reading Directory: %1 + others Lendo Diretório:%1 + outros Reading Dir Lendo Diretório Loading Carregando &Edit &Editar Appl&y Apli&car Filter: Filtro: Go Avançar Title Título An error occured while writing to <b>%1</b>. (%2) Um erro ocorreu enquando gravava para <b>%1</b>,(%2) Fields: Campos: <p>An error occured while renaming the directory <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b><br />File used: %4</p> <p>Ocorreu um erro ao renomear o diretório <b>%1</b> para <i>%2</i>.</p><p>Razão: <b>%3</b >Arquivo usado:%4</p> <p>An error occured while renaming the file <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b></p> <p>Ocorreu um erro ao renomear o arquivo <b>%1</b> to <i>%2</li>.</p><p>Razão: <b>%3</b></p> <p>An error occured while writing to <b>%1</b>.</p><p>Reason: <b>%2</b> (<i>See ~/.puddletag/log.log for debug info.</i>)</p> <p>Ocorreu um erro ao gravar para <b>%1</b>.</p><p>Razão: <b>%2</b> (<i>Veja ~/.puddletag/log.log para informações de depuração.</i>)</p> %s images %s imagens Various Various Artists Never show this message again. Connection Error: %s Dialogs Album Art Arte do Albúm Tag Panel Painel de Tags Artwork Arte Filesystem Sistema de Arquivos Filter Filtro Tag Sources Origens da Tag Stored Tags Tags Armazenadas Logs Registros Mass Tagging Atribuição de tags em massa Functions Funções Actions Ações Dir Renaming An error occured while renaming <b>%1</b> to <b>%2</b>. (%3) Ocorreu um erro ao renomear <b>%1</b> para <b>%2</b>. (%3) Renaming Renomeando I couldn't rename: <i>%1</i> to <b>%2</b> (%3) Não posso renomear: <i>%1</i> para <b>%2</b> (%3) Rename: <b>%1</b> to: <i>%2</i> Renomear: <b>%1</b> para:<i>%2</i> Dirview Refresh Directory Atualizar Diretório Show Header Mostrar Cabeçalho Hide Header Esconder Cabeçalho Open in File Manager Abrir no Gerenciador de Arquivos Subfolders Subpastas Discogs Retrieving search results for keywords: %s Obtendo resultados da busca por palavras-chave: %s %s at Discogs.com %s (arroba) Discogs.com Retrieving using Release ID: %s Obtendo usando Identificador de Versão: %s Retrieving album %s Obtendo álbum %s Retrieving cover: %s Obtendo capa: %s <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Using <b>:r id</b> will retrieve the album with Discogs ID <b>id</b>.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do a Discogs album search using those keywords.</li> </ul> <p>Digite os parâmetros da busca aqui. Se estiver em branco, os arquivos selecionados serão usados.</p> <ul> <li><b>artista;álbum</b> procure por uma combinação álbum/artista específica.</li> <li>Para listar os álbums por um artista deixe apagada a parte do álbum, mas mantenha o ponto e vírgula (ex. <b>Ratatat;</b>). Para listar somente um álbum deixe a parte de artista como em <b>;Ressurreição.</li> <li>Usando <b>:r identificador</b> irá obter o ábum com o Identificador Discogs <b>identificador</b>.</li> <li>Digite palavras-chave <b>sem um ponto e vírgula (;)</b> para fazer uma busca por álbuns na Amazon usando essas palavras.</li> </ul> Retrieve Cover Obter Capa Cover size to retrieve Tamaho da capa para obter Small Pequeno Large Largo Field to use for discogs_id Campos para usar para discogs_id API Key (Stored as plain-text.Leave empty to use default.) Chave da API (Armazenada como texto.Deixe em branco para usar a padrão.) Invalid Discogs Release ID Identificador de Versão Discogs inválido Checking tracks for Discogs Album ID. Checando faixas através da Identificação Discogs do Álbum. No Discogs ID found in tracks. Nenhuma identificação Discogs encontrada nas faixas. Found Discogs ID: %s Encotradas Identificações Discogs: %s Error retrieving image: Edit Field Edit Field Editar Campo &Field &Campo &Value &Valor A&dd A&dicionar E&dit E&ditar Errors No closing bracket found. Parênteses de fechamento não encontrado. Couldn't create intermediate directory: %s Não foi possível criar o diretório intermediário: %s Cannot move directory to a subdirectory within itself. Não é possível mover diretório para um subdiretório dentro de si. Your filesystem encoding was detected as <b>ASCII</b>. <br />You won't be able to rename files using accented, <br /> cyrillic or any characters outside the ASCII alphabet. Extended Tags Field Campo Value Valor Resets the selected fields to their original value. Restaura os campos selecionados para seus valores originais. Different files. Arquivos diferentes. Fields Filename Nome do arquivo Artist Artista Title Título Album Álbum Track Faixa Length Tamanho Year Ano Bitrate Taxa de bits Genre Gênero Comment Comentário Dirpath Caminho do diretório FreeDB <b>FreeDB does not support text-based searches.</b> <b>FreeBD não suporta buscas baseadas em texto.</b> Functions At most %1 arguments expected. %2 given. No máximo %1 argumentos esperados. %2 dado(s). At least %1 arguments expected. %2 given. No mínimo %1 argumentos esperado. %2 dado(s). Tag->File: $1 Tag->Arquivo:$1 Tag to filename Tag para nome do arquivo &Pattern &Padrão Replace $0: '$1' -> '$2', Match Case: $3, Words Only: $4 Substituir $0: '$1' -> '$2', Diferenciar maiúsculas de minúsculas: $3, Apenas palavras: $4 Replace Substituir &Replace &Substituir w&ith: c&om: Match c&ase: &Diferenciar maiúsculas de minúsculas: only as &whole word Apenas como a palavra &completa Update from $2, Fields: $1 Atualizar a partir de $2, Campos: $1 Update from tag Atualizar a partir da tag &Field list (; separated): &Lista de Campos (; separados): &Tag &Tag APEv2 APEv2 ID3 ID3 Trim $0 Remover $0 Trim whitespace Remover espaço em branco RegReplace $0: RegExp '$1' with '$2', Match Case: $3 SubstituirComExpressãoRegular $0: ExpressãoRegular '$1' com '$2', Diferenciar maiúsculas de minúsculas: $3 Replace with RegExp Substituir com ExpressãoRegular &Regular Expression Expressão &Regular Replace &matches with: Substituir &comparações com: Match &Case &Diferenciar maiúsculas de minúsculas Export Art: pattern='$1' Exportar Arte: padrão='$1' Export artwork to file Exportar arte para arquivo &Pattern (extension not required) &Padrão (não é necessário extensão) folder_%img_counter% pasta_%contador_de_imagem% Autonumbering: $0, Start: $1, Restart for dir: $2, Padding: $3 Numeração Automática: $0, Começar: $1, Reiniciar para diretório: $2, Preenchimento: $3 Autonumbering Numeração Automática oi oi 1 1 aoeu aoeu False Falso au au Sort $0, order='$1', Match Case='$2' Ordenar $0, ordem='$1', Caso de comparação='$2' Sort values Valores de ordenação &Order &Ordem Ascending Crescente Descending Descendente Tag->Dir: $1 Tag->Diretório: $1 Tag to Dir Tag para Diretório &Pattern (can be relative path) &Padrão (pode ser um caminho relativo) %artist% - %album% %artista% - %álbum% Format $0 using $1 Formatar $0 usando $1 Format value Valor de Formatação &Format string &Formatar sequência de caracteres Artwork: Filenames='$1', Description='$2', Case Sensitive=$3 Arte: Nome dos arquivos='$1', Descrição='$2', Sensível a letras maiúsculas=$3 Load Artwork Carregar Arte &Filenames to check (;-separated, shell wildcards [eg. *] allowed) &Nome dos arquivos para verificar (; separados, curinga do shell permitido [ex. *]) &Default description (can be pattern): &Descrição padrão (pode ser padrão): Match filename's &case: &Diferenciar entre maíscula e minúscula o nome do arquivo: Merge field: $0, sep='$1' Mesclar campo: $0, sep='$1' Merge field Mesclar campo &Separator &Separador ; ; Remove Dupes: $0, Match Case $1 Remover duplicações: $0, Diferenciar maísculas de minúsculas:$1 Remove duplicate values Remove valores duplicados Text File: $0, '$1' Arquivo de Texto: $0 '$1' Import text file Importar Arquivo de Texto lyrics.txt letras.txt Remove fields except: $1 Remover campos, exceto: $1 Remove all fields except Remover todos os campos, exceto <blank> $0 <vazio> $0 Remove Fields Remover Campos Convert Case: $0: $1 Converter Capitalização: $0: $1 Case conversion Conversão de capitalização &Type &Tipo Mixed Case Não diferenciar maíusculas de minúsculas UPPER CASE LETRA MAÍUSCULA lower case letra minúscula For &Mixed Case, after any of: Para &maíusculas e minúsculas, depois qualquer um: ., ! ., ! Convert to encoding: $0, Encoding: $1 Converter para codificação:$0, Codificação:$1 Convert from non-standard encoding Converter para codificação não-padrão &Encoding &Codificação cp1250 cp1250 cp1251 cp1251 cp1252 cp1252 cp1253 cp1254 cp1254 cp1255 cp1255 cp1256 cp1256 cp1257 cp1257 cp1258 cp1258 Text to Tag: $0 -> $1, $2 Texto para Tag: $0 -> $1, $2 Text to Tag Texto para Tag &Text &Texto &Output &Saída Split using separator $0: sep='$1' Dividir usando separador $0: sep='$1' Split fields using separator Dividir campos usando separador File->Tag '$1' Arquivo->Tag '$1' Filename to Tag Nome do arquivo para Tag Functions Dialog <b>No change.</b> <b>Não houveram mudanças.</b> <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> <p>Campos que irão ser gravados.</p> <ul> <li>Digite a lista dos campos separados por vírgula ex. <b>artista, título, álbum</b></li> <li>Use <b>__selecionado</b> para gravar somente as células selecionadas.</li> <li>Combinações como <b>__selecionado, artista, título</b> são permitidas.</li> <li>Mas usar <b>__selecionado</b> em Ações <b>não</b> é permitido.</li> <li>'~' será usado para gravar todos campos, exceto os que estão associados a ele . Ex. <b>~artista, título</b> irá gravar em todos, mas os campos artista e título encontrados serão gravados somente nos arquivos selecionados.<li> <ul> No preview for is shown for this function. Nenhuma visualização é mostrada para essa função. <b>No change</b> <b>Não houveram mudanças</b> Functions Funções <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells. It is not allowed when creating an action.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> GenSettings &Edit sort options &Editar opções de ordenação <Autodetect> <Autodetecta> Default Padrão Language (Requires a restart) Linguagem (Requer reinicialização) Su&bfolders Su&bpastas Show &gridlines Mostrar &linhasdegrade Show tooltips in file-view: Mostrar dicas de ferramentas no visualizador de arquivo: Show &row numbers Mostrar números da &linhas Automatically resize columns to contents Redimesionar automaticamente as colunas de acordo com o conteúdo &Preserve file modification times &Preservar os tempos de modificação do arquivo Program to &play files with: Programar para &reproduzir arquivos com: &Load last folder at startup &Carregar últma pasta ao iniciar List Buttons Add Adicionar Remove Remover Move Up Mover para cima Move Down Mover para baixo Edit Editar Duplicate Duplicar &>> &>> &<< &<< Logs &Copy &Copiar &Clear &Limpar Main Window puddletag: %1 + others puddletag: %1 + outros puddletag: %1 puddletag: %1 Import directory... Importar diretório... Mapping Settings <ul><li>Tag is the format that the mapping applies to. One of <b>ID3, APEv2, MP4, or VorbisComment</b>. </li><li>Fields will be mapped from Source to Target, meaning that if Source is found in a tag, it'll be editable in puddletag using Target.</li> <li>Eg. For <b>Tag=VorbisComment, Source=organization, and Target=publisher</b> means that writing to the publisher field for VorbisComments in puddletag will in actuality write to the organization field.</li><li>Mappings for tag sources are also supported, just use the name of the tag source as Tag, eg. <b>Tag=MusicBrainz, Source=artist,Target=performer</b>.</li></ul> <ul><li>Tag é o formato ao qual o mapeamento se aplica Algums deles são <b>ID3, APEv2, MP4, or VorbisComment</b>. </li><li>Campos serão mapeados da Origem para o Destino, significando que se a Origem é encotrada em uma tag, será editável no puddletag usando o Destino.</li> <li>Ex. Para <x>Tag=VorbisComment, Origem=organização, e Destino=publicador</b> significa que escrever no campo publicador para a tag VorbisComments on puddletag irá , na verdade, escrever no campo organização.</li><li>Mapeamentos para as origems das tag também são suportados, somente use o nome da origem da tag como Tag, ex.<b>Tag=MusicBrainz, Origem=artist,Target=performer</b>.</li></ul> Tag Tag Original Field Campo original Target Destino <b>A restart is required to apply these settings.</b> <b>É necessário reiniciar ao aplicar essas configurações.</b> Source Origem Masstagging An error occured during the search: <b>%s</b> Ocorreu um erro durante a pesquisa:<b>%s</b> An error occured during album retrieval: <b>%s</b> Ocorreu um erro na obtenção do álbum: <b>%s</b> Mass Tagging Atribuição de tags em massa &Search &Pesquisar &Configure Profiles &Configurar Perfis &Write Previews &Gravar Visualizações Clear &Preview Limpar &Visualizações &Profile: &Perfil: &Stop &Parar <b>Lookups completed.</b> <b>Pesquisas concluídas.</b> Continue Continuar Stop Parar Combine and continue Combinar e continuar Replace and continue Substituir e continuar Combine and stop Combinar e parar Replace and stop Substituir e parar Use best match Usar a melhor combinação Do nothing and continue Não fazer nada e continuar Default Profile Perfil Padrão <b>Polling: %s</b> <b>Pesquisa:%s</b> Retrieving matching album. <b>%1 - %2</b> Obtendo álbum correspondente. <b>%1 -%2</b> Retrieving matching album. Artist=<b>%1</b> Obtendo álbum correspondente. Artista=<b>%1</b> Retrieving matching album. Album=<b>%1</b> Obtendo álbum correspondente. Álbum=<b>%1</b> Retrieving matching album. Obtendo álbum correspondente. Starting search for: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> Começando a procura por:<br />artista=<b>%1</b> <br />álbum=<b>%2</b><br /> Starting search for: <br />artist=<b>%1</b><br />album=No album name found. Começando a procura por:<br />artista=<b>%1</b> <br />álbum=Nenhum nome de álbum foi achado. Starting search for: <br />album=<b>%1</b><br />artist=No artist found. Começando a procura por:<br />álbum=<b>%1</b> <br />álbum=Nenhum artista foi achado. No artist or album info found in files. Starting search. Nenhum artista ou álbum foi achado nos arquivos. Começando a procura. <b>%d</b> results found. <b>%d</b> resultados encontrados. <b>No results were found.</b> <b>Nenhum resultado foi encontrado.</b> <b>One</b> result found. <b>Um</b> resultado encontrado. <b>%d</b> possibly matching albums found. <b>%d</b> álbuns possivelmente encontrados. <b>One</b> possibly matching album found. <b>Um</b>álbum possivelmente encontrado. No matches found for tag source <b>%s</b> Não houve resultados para a origem dessa tag.<b>%s</b> Previously retrieved result does not match. Retrieving next matching album. Resultados obtidos anteriormente não correspondem. Recuperando próximo álbum correspondente. <br />Rechecking with results from <b>%s</b>.<br /> <br />Rechecando com os resultados de <b>%s</b>.<br /> <br />Valid matches were found for the album. <br /> Correspondências válidas foram encontradas para o álbum. <b>No valid matches were found for the album.</b> <b>Nenhum resultado válido foi encontrado para o álbum</b> Rechecking Rechecando Retrying search with album name: <b>%s</b> Nova tentativa de busca com o nome do álbum:<b>%s</b> Menus Help Ajuda Online &Documentation &Documentação Online &Forum &Fórum &Bug tracker Organizador de &Bugs About puddletag Sobre o puddletag About Qt Sobre o Qt Toolbar Barra de ferramentas Enabl&e Preview Mode Ativar Modo de &Visualizaçao Clear Selected &Files Limpar &Arquivos Selecionados &Write Previews &Gravar Visualizações &Undo Last Clear &Desfazer Última Limpada Sort &By Ordenar &Por Clear Selected &Cells Limpar &Células Selecionadas &Plugins &Plugins &Open Folder &Abrir Pasta Select a directory to import into puddletag. Selecione um diretório para importar ao puddletag. &Add Folder &Adicionar Pasta Append a directory to current file-view. Anexar um diretório à visualizaçao do arquivo atual. Load &playlist Carregar &playlist Import an m3u playlist into puddletag. Importar uma playlist mp3 no puddletag. Sa&ve playlist Sal&var playlist Save all files to m3u playlist. Salvar todos os arquivos a uma playlist m3u. &Refresh &Atualizar Refresh current file-view. Atualizar visualizaçao do arquivo atual. &Save &Salvar &Play &Executar Plays the selected files in the predefined music player. Executar os arquivos selecionados no tocador de músicas predefinido. &File->Tag &Arquivo -> Tag Convert filename to tag using the pattern. Converter nome do arquivo a uma tag usando o padrão. &Undo &Desfazer Autonumbering &Wizard... &Assistente de Numeraçao Automática... &Clear &Limpar &Format &Formatar &Text File->Tag Arquivo de &Texto -> Tag &Import Music Library... &Importar Biblioteca de Músicas... &Actions &Ações &Preferences &Preferências &Functions &Funções &QuickActions Ações &Rápidas &Rename Directories &Renomear Diretórios &Exit &Sair &Tag->File &Tag->Arquivo &Increase Font &Aumentar Fonte &Decrease Font &Diminuir Fonte &Clipboard->Tag &Área de Transferência -> Tag Select &All Selecionar &Todos &Invert Selection &Inverter Seleção &Select Column &Selecionar Coluna &Cut &Cortar &Copy Selection &Copiar Seleção &Paste &Colar &Remove Tag &Remover Tag E&xtended Tags Tags E&stendidas &Delete &Deletar &Properties &Propriedades Paste &Onto Selection Colar &Na Seleção &Lock Layout &Travar Layout Select &Next Directory Selecionar &Próximo Diretório Copy All &Fields Copiar Todos os &Campos Delete &Without Confirmation Deletar &Sem Confirmação In &Library Na &Biblioteca Replace... Substituir... Remove &APEv2 Tag Remover Tag &APEv2 Remove All &ID3 Tags Remover Todas as Tags &ID3 Move Selected &Up Mover Seleção para &Cima Move Selected Do&wn Mover Seleção para &Baixo Select &Previous Directory Selecionar Diretório &Anterior Select all files belonging to the directories of those selected. Otherwise (if only a single directory is selected) selects all the files in the previous directory. Selecionar todos os arquivos pertencentes aos diretórios dos selecionados. Caso contrário (se so um diretório estiver selecionado), seleciona todos os arquivos no diretório anterior. Remove ID3v&2 Tag Remover Tag ID3v&2 Remove ID3v&1 Tag Remover Tag ID3v&1 &File &Arquivo &Edit &Editar &Convert &Converter &Tools &Ferramentas &Preview Mode Modo de &Visualização Ta&g Tools Ferramentas de Ta&g &Windows &Windows Disabl&e Preview Mode &Desabilitar Modo de Visualização &Unload Everything Refresh &Selected Reloads directories of selected files. Messages That's a large amount of data to copy. It may cause your system to lock up. Do you want to go ahead? Copy without images. Mp3tag Retrieving search page: %s Retrieving search page... Parsing search page. Parsing search page... Retrieving album page: %s Retrieving album page... Parsing album page. Parsing album page... MusicBrainz <b>Error:</b> While retrieving %1: %2 <b>Erro:</b> Enquanto obtia %1: %2 <b>Error:</b> While retrieving Album ID %1 (%2) <b>Erro:</b> Enquanto obtia ID do Álbum %1 (%2) Retrieving cover: %s Obtendo capa: %s No images exist for this album. Invalid UUID Invalid query sent. You have exceeded your rate limit. Image does not exist. Retrieving image %s Retrieve Cover Obter Capa Cover size to retrieve: Amount of images to retrieve: Just the front cover All (can take a while) Found album id %s in tracks. Retrieving Error retrieving image: %s MusicLib Import Music Library Importar biblioteca de músicas Invalid library Biblioteca inválida Error loading %1: %2 Erro ao carregar %1: %2 Anonymous Library Biblioteca Anônima Description was left out. Não ha descrição. Anonymous author. Autor anônimo. Loading music library... Carregando biblioteca de músicas... An error occured while loading the %1 library: <b>%2</b> Um erro ocorreu ao carregar a biblioteca %1: <b>%2</b> Music Library Biblioteca de Músicas &Search &Pesquisar Saving music library... Salvando biblioteca de músicas... Library Artists Artistas da Biblioteca No libraries found Nenhuma biblioteca encontrada Load a lib first. Carregue uma biblioteca primeiro. No supported music libraries were found. Most likely the required dependencies aren't installed. Visit the puddletag website, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> for more details. Nenhuma biblioteca de músicas suportada foi encontrada. É possivel que as dependências necessarias não estejam instaladas. Visite o site do puddletag, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> para mais detalhes. Pattern Settings &Sort &Ordenar Enter a pattern Insira um padrão Playlist Select m3u file... Selecionar arquivo m3u... An error occured while reading <b>%1</b> (%2) Um erro ocorreu durante a leitura <b>%1</b> (%2) Save Playlist... Salvar Playlist... Playlist Settings &Write extended info &Gravar informação estendida Entries &relative to working directory Entradas &relativas ao diretório atual &Filename pattern. Padrao do &Nome de arquivo. Plugin Settings Name Nome Author Autor Description Descrição Version Versão <b>Loading/unloading plugins requires a restart.</b> <b>Carregamento/descarregamento de plugins requere uma reinicialização.</b> Previews Some files have uncommited previews. These changes will be lost once you exit puddletag. <br />Do you want to exit without writing those changes?<br /> Alguns arquivos possuem visualizações não submetidas. Essas mudanças serão perdidas assim que você sair do puddletag. <br />Voce deseja sair sem salvar essas mudanças?<br /> Preview Mode: Off Modo de Visualização: Desligado <b>Preview Mode: On</b> <b>Modo de Visualização: Ligado</b> Do you want to exit Preview Mode? Você deseja sair do Modo de Visualização? Clea&r preview Limpar &Visualização Some files have uncommited previews. Changes will be lost once you load a directory. <br />Do you still want to load a new directory?<br /> Alguns arquivos possuem visualizaçoes não submetidas. Mudanças serão perdidas assim que voce carregar um diretorio. <br />Você ainda deseja carregar um novo diretório?<br /> Disable Preview Mode first to enable tag deletion. Desabilitar Modo de Visualização para habilitar remoção de tags. Profile Config Configure Mass Tagging Profiles Configurar Perfis de Mass Tagging Masstagging Profiles Perfis de Masstagging Profile Editor Brute force unmatched files. Executar foça bruta em arquivos não correspondidos. <p>If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Se uma correspondência não for encontrada para um arquivo, os arquivos serão organizados por nome, as fontes tag obtidas por nome e as faixas correspondentes serão casadas.</p> <p>The fields listed here will be used in determining whether a track matches the retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Os campos listados aqui serão usados para determinar se uma faixa corresponde à faixa obtida. Cada campo sera comparado usando um algoritmo de correspondência fuzzy. Se porcentagem de correspondência média resultante for maior que a "Porcentagem Mínima", sera considerada uma correspondência.</p> <p>The artist and album fields will be used in determining whether an album matches the retrieved one. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater or equal than what you specify here it'll be considered to match.</p> <p>Os campos de artista e álbum serão usados para determinar se um álbum corresponde com o obtido. Cada campo sera comparado usando um algoritmo de correspondência fuzzy. Se a porcentagem de correspondência média resultante for maior ou igual ao valor que você especificar aqui, sera considerada uma correspondência.</p> Minimum &percentage required for album matches. &Porcentagem mínima requerida para correspondência de álbuns. Match tracks using &fields: Corresponder faixas usando os &campos: Minimum percentage required for track match. Porcentagem mínima requerida para correspondência de faixas. Edit Masstagging Profile Editar Perfil de Masstagging Masstagging Profile Perfil de Masstagging <p>If no tag information is found in a file, the tags retrieved using this pattern will be used instead.</p> <p>Se nenhuma informação de tag for encontrada num arquivo, as tags obtidas usando este padrao serão usadas.</p> <p>The fields listed here will be used in determining whether a file matches a retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Os campos listados aqui serão usados para determinar se um arquivo corresponde a uma faixa obtida. Cada campo sera comparado usando um algoritmo de correspondência fuzzy. Se a porcentagem de correspondência média resultante for maior que a "Porcentagem Mínima", sera considerada uma correspondência.</p> <p>Check to enable brute forcing matches. If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Marque para habilitar correspondências de força bruta. Se uma correspondência apropriada não for encontrada para um arquivo, os arquivos serao ordenados por nome, as fontes de tag obtidas por nome e faixas correspondentes serao casadas.</p> Update empty fields only. Atualizar apenas campos vazios. &Name: &Nome: &Description &Descrição Pattern to match filenames against. Padrão no qual corresponder nomes de arquivos. Minimum percentage required for album matches. Porcentagem mínima requerida para correspondências entre álbuns. Match tracks using fields: Corresponder faixas usando campos: Edit Tag Source Config Editar Configuraçoes da Fonte da Tag <p>Enter a comma-seperated list of fields to retrieve. Leave empty to retrieve all available fields/values. <br /><br />Eg. <b>artist, album, title</b> will only retrieve the artist, album and title fields of from the Tag Source. <br /><br />Start the list with the tilde (~) character to write all retrieved fields , but the ones listed. Eg the field list <b>~composer,__image</b> will write all fields but the composer and __image (aka cover art) fields.</p><p>If a field has been retrieved in a previous Tag Source the values will be combined if they differ. Eg. If genre=<b>Rock</b> for the first tag source polled and genre=<b>Alternative</b> for the tag source polled second then the resulting field will have multiple-values ie. genre=<b>Rock\\Rap</b> <p>Insira uma lista de campos separados por virgula para recuperar. Deixe vazio para recuperar todos os campos/valores disponíveis. <br /><br />Ex: <b>artista, álbum, título</b> recuperará apenas os campos artista, álbum e título da Fonte Tag. <br /><br />Comece a lista com o caractere til (~) para escrever em todos os campos obtidos, com exceçao dos listados. Ex: a lista de campos <b>~compositor, __image</b> escreverá em todos os campos com exceçao dos campos compositor e __imagem (conhecido como capa do álbum). </p><p>Se um campo foi obtido em uma Fonte Tag anterior, os valores serao combinados se eles forem diferentes. Ex: Se gênero = <b>Rock</b> para a primeira fonte tag, e se gênero = <b>Alternativo</b> para a segunda, o campo resultante tera múltiplos valores, ex: gênero = <b>Rock\\Rap</b> Fields to replace: Campos para substituir: Enter a comma-separated lists of fields that'll replace any retrieved from previously polled tag sources. <br />Start the list with the tilde (~) character to replace all but the fields you list. <br /><b>NB: Fields listed here must also be listed in the list of fields to retrieve.</b><br /><br />Eg. Assume you have two Tag Sources. The first retrieves <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. The second source gets <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. For the second Tag Source, setting just <b>artist</b> as the list of fields to replace will overwrite the artist field retrieved from the first tag source. The resulting retrieved fields/values as shown in puddletag will then be <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. Insira uma lista de campos separados por virgula que sobrescreverão quaisquer dados obtidos de outras fontes tag. <br />Comece a lista com o caractere til (~) para sobrescrever todos os campos exceto o que você listar. <br /><b>NB: Campos listados aqui também devem ser listados na lista de campos a serem obtidos. </b><br /><br />Ex: Assuma que você possui duas Fontes Tag. A primeira recupera <b>artista=Freshlyground, album=Nomvula, gênero=Afro Pop</b>. A segunda fonte obtém <b>artista=Freshly Ground, álbum=Nomvula, gênero=Pop</b> Para a segunda fonte, definir apenas o <b>artista</b> como lista de campos a serem sobrescritos irá sobrescrever o campo artista da primeira fonte tag. Os campos/valores resultantes obtidos mostrados no puddletag serao <b>artista=Freshly Ground, álbum=Nomvula, gênero=Afro Pop\\Pop</b>. &Source &Fonte &If no results found: &Se resultados não forem encontrados: <p><b>Continue</b>: The lookup for the current album will continue by checking the other tag sources if no matching results were found for this tag source.</p><p><b>Stop:</b> The lookup for the current album will stop and any previously retrieved results will be used.</p> <p><b>Continuar</b>: A busca pelo álbum atual continuará ao marcar as outras fontes de tags se nenhuma correspondência resultante for encontrada para esta fonte de tags.</p><p><b>Parar:</b> A busca pelo álbum atual sera interrompida e quaisquer resultados previamente obtidos serao utilizados.</p> Progress Dialog Please Wait... Por favor, aguarde... %1%2 of %3... %1%2 de %3... QuodLibet &Library Path Diretorio da &Biblioteca ... ... Select QuodLibet library file... Selecione um arquivo de biblioteca QuodLibet... %1 (%2) %1 (%2) %1 is an invalid QuodLibet music library file. %1 é um arquivo de biblioteca musical QuodLibet inválido. Settings General Geral Confirmations Confirmações Mappings Mapeamentos Playlist Playlist Colours Cores Genres Gêneros Tags Tags Plugins Plugins Shortcuts Atalhos An error occurred while saving the settings of <b>%1</b>: %2 Um erro ocorreu ao salvar as definições de <b>%1</b>: %2 &Windows &Janelas Tag Sources Fontes de Tag Patterns Padrões Tag Panel Painel de Tags Shortcut Editor Enter a key sequence for the shortcut. Insira uma sequência de teclas para o atalho. &Don't assign keyboard shortcut. &Não associar atalho de teclado. Shortcut Settings File Properties Propriedades do Arquivo <b>Double click a cell in the Shortcut Column to <br />modify the key sequence.</b> <b>Dê um duplo-clique numa célula da Coluna de Atalho para <br />modificar a sequência de teclas.</b> Description Descrição Shortcut Atalho Edit Shortcuts Editar Atalhos Shortcuts &Clear &Limpar Invalid shortcut sequence. Sequência de atalho invalida. (Deleted) (Excluído) Status Bar <b>%s</b> <b>%s</b> New Filename: <b>%1</b> Novo nome do arquivo: <b>%1</b> Table Preview: %1 Real: %2 Pré-visualização: %1 Real: %2 Disable Preview Mode first to enable tag deletion. Desativar Modo de Pré-Visualização primeiro para habilitar a remoção de tags. An error occurred while deleting the tag of %1: <b>%2</b> Um erro ocorreu na hora de remover a tag de %1: <b>%2</b> There was an error deleting the tag of %1: <b>Tag deletion isn't supportedfor %2 files.</b> Houve um erro ao remover a tag de %1: <b>Remoção de tags não é suportada para arquivos %2.</b> Deleting tag... Removendo tag... Are you sure you want to delete the selected files? Voce tem certeza que deseja excluir os arquivos selecionados? Deleting Excluindo An error occurred while trying to play the selected files: <b>%1</b> <br />Does the music player you defined (<b>%2</b>) exist? Houve um erro ao tentar executar os arquivos selecionados: <b>%1</b> <br />O tocador de músicas que você definiu (<b>%2</b>) existe? It wasn't possible to play the selected files, because the music player you defined (<b>%1</b>) does not exist. Não foi possivel executar os arquivos selecionados, pois o tocador de músicas que voce definiu (<b>%1</b>) não existe. Tag Panel Settings Row Linha All row numbers must be integers. Todos os numeros de linha devem ser inteiros. Tag Settings &Restrict incoming files to (eg. "*.mp3; *.ogg; *.aac") &Restringir arquivos chegando para (ex.: "*.mp3; *.ogg; *aac") Remove ID3v1 tag. Remover tag ID3v1. Update the ID3v1 tag's values only if an ID3v1 tag is present. Atualizar os valores da tag ID3v1 somente se uma tag ID3v1 estiver presente. Create an ID3v1 tag if it's not present. Otherwise update it. Criar uma tag ID3v1 se não estiver presente. Caso contrário, atualize-a. puddletag writes only &ID3v2 tags.<br />What should be done with the ID3v1 tag upon saving? puddletag escreve apenas em tags &ID3v2.<br />O que deve ser feito com a tag ID3v1 na hora de salvar? Default &pattern to use when saving artwork. &Padrao a ser usado na hora de salvar arte. ID3 Options Opções ID3 Write ID3v2.&4 Escrever ID3v2.&4 Write ID3v2.&3 (Experimental) Escrever ID3v2.&3 (Experimental) Write ID3v2.&3 Tag Sources <b>Error parsing artist/album combinations.</b> <b>Erro na análise de combinações de artista/álbum.</b> Retrieving cover: %s Obtendo capa: %s HTTPError 403: Forbidden Erro HTTP 403: Forbidden Page doesn't exist Página não existe Text File -> Tag Import tags from text file Importar tags de arquivo de texto Text Texto Tag preview Pre-visualização da tag &Select File &Selecionar Arquivo &Paste Clipboard &Colar The file <b>%1</b> couldn't be loaded.<br /> Do you want to choose another? O arquivo <b>%1</b> não pôde ser carregado. <br /> Você deseja escolher outro? Error Erro &Yes &Sim &No &Não WebDB Retrieved Albums (sorted by %s) Álbuns obtidos (ordenados por %s) <b>Error in pattern</b> <b>Erro no padrão</b> Retrieved Albums Álbuns Obtidos An error occured: %1 Um erro ocorreu: %1 An unhandled error occured: %1 Um erro não tratado ocorreu: %1 Retrieving album tracks... Obtendo faixas do álbum... Retrieval complete. Obtençao completa. Retrieving tracks... Obtendo faixas... No matching albums were found. Nenhum album correspondente foi encontrado. More than one album matches. None will be retrieved. Mais de um álbum correspondente. Nenhum sera obtido. Retrieving album. Obtendo album. Enter search parameters here. If empty, the selected files are used. <ul><li><b>artist;album</b> searches for a specific album/artist combination.</li><li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li></ul> Insira os parâmetros de busca aqui. Se vazio, os seguintes arquivos são usados. <ul><li><b>artista;album</b> busca por uma combinação específica de álbum/artista.</li><li>Para listar os álbuns por artista, ignore a parte do álbum, mas mantenha o ponto-e-virgula (e.x.: <b>Ratatat;</b>). Para apenas álbum, retire a parte do artista, como em <b>;Ressurection.</li></ul> Enter a comma seperated list of fields to write. <br /><br />Eg. <b>artist, album, title</b> will only write the artist, album and title fields of the retrieved tags. <br /><br />If you want to exclude some fields, but write all others start the list the tilde (~) character. Eg <b>~composer, __image</b> will write all fields but the composer and __image fields. Insira uma lista de campos separados por virgula para escrever. <br /><br />Ex: <b>artista, álbum, titulo</b> so escrevera nos campos de artista, album e título das tags obtidas. <br /><br />Se voce deseja excluir alguns campos, mas escrever em todos os outros, comece a lista com o caractere til (~). Ex: <b>~compositor, __imagem</b> escrevera em todos os campos, exceto os de compositor e imagem. <b>Nothing to display.</b> <b>Nada para exibir.</b> Couldn't load Mp3tag Tag Source %s Não pôde carregar fonte %s da tag Mp3tag Configure: %s Configurar: %s Add sort option Adicionar opçao de ordenação Enter a sorting option (a comma-separated list of fields. Eg. "artist, title") Insira uma opçao de ordenação (uma lista separada por virgula de campos. Ex: "artista, título") Edit sort option Editar opçao de ordenação &Display format for individual tracks. &Formato de exibição para faixas individuais. Display format for &retrieved albums Formato de exibição para álbuns &obtidos Sort retrieved albums using order: Ordenar álbuns recuperados usando ordenação: User-Agent to when accessing web sites. Agente-Usuário a ser usado ao acessar paginas web. Automatic retrieval options Opçoes de obtenção automatica Sour&ce: &Fonte: Configure Configurar &Search &Buscar &Write &Escrever Select files and click on Search to retrieve metadata. Escolha os arquivos e clique em Buscar para obter metadados. Update empty fields only. Atualizar apenas campos vazios. Automatically retrieve matches. Obter correspondências automaticamente. Searching complete. Busca completa. Searching... Buscando... <b>Select some files or enter search paramaters.</b> <b>Selecione alguns arquivos ou insira parametros de busca.</b> An unhandled error occurred: %1 Um erro não tratado ocorreu: %1 <b>Tags were written.</b> <b>Tags foram escritas.</b> Retrying search with %s S&ubmit Tags Submission completed. puddletag-1.0.2/translations/puddletag_fr.ts0000644000175000001440000055650312170511246021514 0ustar keithusers00000000000000 About puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). puddletag est un éditeur de tags audio pour GNU/Linux similaire à Mp3tag sous Windows. <br /><br />Il inclut les fonctionnalités suivantes : édition par lots, renommage de fichiers depuis les tags, récupération des tags depuis les noms de fichiers, utilisation d'Actions pour automatiser les tâches répétitives, importation de votre discothèque et encore plein de choses étonnantes.<br /><br /> Formats supportés : id3v1, id3v2 (.mp3); AAC(.mp4, .m4a), Vorbis (.ogg, .flac) et APEv2 (.ape) <br /><.br/> Visitez le site web puddletag (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) pour de l'aide et des mises à jour.<br /><br /> &copy; 2010 concentricpuddle (concentricpuddle@gmail.com) <br /> Distribué sous licence GPLv2 (<a href="www.gnu.org/licenses/gpl-2.0.html">www.gnu.org/licenses/gpl-2.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. <b>Evan Devetzis</b> pour ses nombreuses idées et le nombre incroyable de bugs trouvés.<br /><br /> Aux auteurs des librairies dont puddletag dépend (sans lequelles j'en serais toujours à écrire un lecteur de tags ID3);<br /><br /> <b>Paul McGuire</b> pour PyParsing.<br /> <b>Michael Urman</b> et <b>Joe Wreschnig</b> for Mutagen (c'est une tuerie).<br /> <b>Phil Thomson</b> et tous ceux impliqués dans PyQt4.<br /> <b>Michael Foord</b> et <b>Nicola Larosa</b> pour ConfigObj (serieusement, ils devraient remplacer ConfigParser).<br /> La <b>Oxygen team</b> pour les icônes Oxygen. About puddletag A propos de puddletag <h2>puddletag %1 (Revision %2)</h2> %3 <h2>puddletag %1 (Revision %2)</h2> %3 <h2>puddletag %1</h2> %2 <h2>puddletag %1</h2> %2 &About &A propos &Thanks &Merci <h2>puddletag %1 (Changeset %2)</h2> %3 puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag. <br /><br />Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff. <br /><br /> Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape) <br />< br /> Visit the puddletag website (<a href="http://puddletag.sourceforge.net">http://puddletag.sourceforge.net</a>) for help and updates.<br /><br /> &copy; 2008-2012 concentricpuddle (concentricpuddle@gmail.com) <br /> Licensed under GPLv3 (<a href="www.gnu.org/licenses/gpl-3.0.html">www.gnu.org/licenses/gpl-3.0.html</a>). <b>Evan Devetzis</b> for his many, many awesome ideas and putting up with more bugs than humanly possible.<br /><br /> First off, a big thanks to **Evan Devetzis** for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. Thanks to <b>Raphaël Rochet</b>, <b>Fabian Bakkum</b>, <b>Alan Gomes</b> and others for contributing translations. To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).<br /><br /> <b>Paul McGuire</b> for PyParsing.<br /> <b>Michael Urman</b> and <b>Joe Wreschnig</b> for Mutagen (It. Is. Awesome).<br /> <b>Phil Thomson</b> and everyone responsible for PyQt4.<br /> <b>Michael Foord</b> and <b>Nicola Larosa</b> for ConfigObj (seriously, they should replace ConfigParser with this).<br /> The <b>Oxygen team</b> for the Oxygen icons. AcoustID Calculating ID Retrieving AcoustID data: %1 of %2. Retrieving MB album data: %1 Error generating fingerprint: %1 Error retrieving data: %1 Minimum Score Parsing Data Error submitting data: %1 Submitting data to AcoustID: %1 to %2 of %3. Found AcoustID in file. File #%1: %2 AcoustID Key Please enter AcoustID user key in settings. Actions Enter a name for the shortcut. Entrez un nom pour le raccourci. Modify Action Modifier l'action Actions Actions Assign &Shortcut &Affecter le raccourci <p>Creates a shortcut for the checked actions on the Actions menu. Use Edit Shortcuts (found by pressing down on this button) to edit shortcuts after the fact.</p> <p>Crée un raccourci pour les actions choisies dans le menu Actions. Utilisez "Modifier les raccourcis" (appuyez sur ce bouton) pour modifier les raccourcis après coup.</p> Edit Shortcuts Modifier les raccourcis New Action Nouvelle action Enter a name for the new action. Entrez un nom pour la nouvelle action. Edit Action: Modifier l'action: Edit Action: %s Modifier l'action: %s Error: Using <b>__selected</b> in Actions is not allowed. Please enter some fields to write to. Add Action: Amazon Invalid Access or Secret Key Clé d'accès ou clé secrète invalide Invalid XML returned. Réponse XML incorrecte. Album at Amazon Album sur Amazon Retrieving using ASIN: %s Récupération avec ASIN: %s Retrieving XML: %1 - %2 Récupération du XML: %1 - %2 Retrieving cover: %s Récupération de la pochette: %s Retrieving search results for keywords: %s Récupération des résultats pour les mots-clés: %s <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do an Amazon album search using those keywords.</li> </ul> <p>Entrez les paramètres de recherche ici. Si vous laissez vide, les fichiers sélectionnés seront utilisés.</p> <ul> <li><b>artiste;album</b> cherche une combinaison spécifique album/artiste.</li> <li>Pour lister les albums d'un artiste, laisser la partie album vide, mais gardez le point-virgule (ex. <b>Ratatat;</b>). Pour un album seulement laissez la partie artiste vide, comme dans <b>;Resurrection.</li> <li>Entrer des mots clés <b>sans le point-virgule (;)</b> fera une recherche d'album sur Amazon avec ces mots clés.</li> </ul> Retrieve Cover Récupérer la Pochette Cover size to retrieve Taille de la pochette à récupérer Small Petite Medium Moyenne Large Grande Access Key (Stored as plain-text. Leave empty for default.) Clé d'accès (Stockée en texte clair. Laissez vide pour la clé par défaut) Secret Key (Stored as plain-text. Leave empty for default.) Clé secrète (Stockée en texte clair. Laissez vide pour la clé par défaut) <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do an Amazon album search using those keywords.</li> </ul> <p>Entrez les paramètres de recherche ici. Si vous laissez vide, les fichiers sélectionnés seront utilisés.</p> <ul> <li><b>artiste;album</b> cherche une combinaison spécifique album/artiste.</li> <li>Pour lister les albums d'un artiste, laisser la partie album vide, mais gardez le point-virgule (ex. <b>Ratatat;</b>). Pour un album seulement laissez la partie artiste vide, comme dans <b>;Resurrection.</li> <li>Entrer des mots clés <b>sans le point-virgule (;)</b> fera une recherche d'album sur Amazon avec ces mots clés.</li> </ul> Invalid XML returned. No tracks listed. %s at Amazon.com Original Size Artwork Enter a description Entrez une description <p>Enter a description for the current cover.</p><p>For ID3 tags the description has to be different for each cover as per the ID3 spec. If they don't differ then spaces are appended to the description when the tag is saved.</p> <p>Entrez une description pour l'image séleectionnée.</p><p>Pour les tags ID3 la description doit être différente pour chaque pochette. Sinon des espaces seront ajoutés au moment de sauvegarder.</p> &Description &Description &Type &Type <p>Select a cover type for the artwork.</p> <p>Sélectionnez un type d'image.</p> &Save cover to file Enregistrer dans un &fichier &Add cover &Ajouter une image &Remove cover &Enlever l'image &Change cover &Changer l'image Select Image... Sélectionner une image... JPEG Images (*.jpg);;PNG Images (*.png);;All Files(*.*) Images JPEG (*.jpg);;Images PNG (*.png);;Tous les Fichiers(*.*) Save artwork as... Sauver l'image sous ... Writing to <b>%1</b> failed. Ecriture de <b>%1</b> échouée. Enter description Entrez une description Artwork Context %1/%2 %1/%2 Cover Varies Images différentes No Images Pas d'images Autonumbering Wizard Autonumbering Wizard Assistant Numérotation &Start: &Démarrer: Max length after padding with zeroes: Longueur maximale (y compris les zéros): Add track &separator ['/']: Number of tracks Ajouter un &séparateur ['/']: Nombre de pistes &Restart numbering at each directory. &Recomencer à chaque dossier. Add track &separator ['/'] Colour Settings <p>Below are the backgrounds used for various controls in puddletag. <br /> Double click the desired action to change its colour.</p> <p>Voici les fonds utilisés pour différents contrôles dans puddletag.<br /> Double cliquer pour changer la couleur</p> Row selected in file-view. Ligne sélectionnée dans la liste des fichiers. Row colour for files with previews. Lignes modifiées (mode Aperçu). Field added in Extended Tags. Champs ajoutés dans les Tags étendus. Field edited in Extended Tags. Champs modifiés dans less tags étendus. Field removed in Extended Tags. Champs supprimés dans les Tags étendus. Column Settings Title Titre Columns Colonnes Adjust visibility of columns. Ajuster la visibilité des colonnes. &Select Columns &Sélectionner des colonnes Combo Box Remove current item. Retirer l'élément. Confirmations Confirm when renaming directories. Confirmer pour renomer des dossiers. Confirm when exiting preview mode. Confirmer pour sortir du mode Aperçu. Confirm when deleting files. Confirmer pour supprimer des fichiers. Cover Type Other Autre O A File Icon Icône de fichier I Ic Other File Icon Autre Icône de fichier OI AIc Cover (front) Pochette (avant) CF PAv Cover (back) Pochette (arrière) CB PAr Leaflet page Livret Intérieur LF LI Media (e.g. label side of CD) Media (par ex le CD) M M Lead artist Artiste principal/Soliste LA AP Artist Artiste A A Conductor Chef d'orchestre C CO Band Groupe B G Composer Compositeur CP Lyricist Parolier L P Recording Location Emplacement de l'enregistrement RL EE During recording Séance d'enregistrement DR SE During performance Pendant la représentation DP PR Movie/video screen capture Capture d'écran film/vidéo MC CE A bright coloured fish Un poisson aux couleurs vives F F Illustration Illustration P Ill Band/artist logotype Logo du groupe/de l'artiste BL LGA Publisher/Studio logotype Logo de la Maison d'édition/du Studio PL LME Defaults <b>__image</b>: %s images<br /> <b>__image</b>: %s images<br /> &Fields &Champs Yes Oui No Non <blank> <vide> <keep> <garder> MusicBrainz MusicBrainz SYNTAX ERROR in $%1: %2 ERREUR de SYNTAXE dans $%1: %2 SYNTAX ERROR: %s expects a number at argument %d. ERREUR de SYNTAXE: %s attends un nombre en position %d. &Fields: &Champs: Error Erreur <br /> Do you want to continue? <br /> Voulez-vous continuer ? Field Champ Cancel Annuler Writing Ecriture de An error occured while writing to <b>%1</b>. (%2) Une erreur s'est produite lors de l'écriture de <b>%1</b>. (%2) &Yes &Oui &No &Non Reading Directory: %1 Lecture du dossier: %1 Reading Directory: %1 + others Lecture du dossier: %1 + autres Reading Dir Lecture du dossier Loading Chargement &Edit &Edition Appl&y &Appliquer Filter: Filtre: Go Go Title Titre Fields: Champs: <p>An error occured while renaming the directory <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b><br />File used: %4</p> <p>Une erreur s'est produite en renommant le dossier <b>%1</b> en <i>%2</i>.</p><p>Raison:<b>%3</b><br />Fichier utilisé %4</p> <p>An error occured while renaming the file <b>%1</b> to <i>%2</i>.</p><p>Reason: <b>%3</b></p> <p>Une erreur s'est produite en renommant le fichier <b>%1</b> en <i>%2</i>.</p><p>Raison:<b>%3</b></p> <p>An error occured while writing to <b>%1</b>.</p><p>Reason: <b>%2</b></p> <p>Une erreur s'est produite en écrivant <b>%1</b>.</p><p>Raison: <b>%2</b></p> %s images %s images OK OK Various Various Artists function does not exist. <p>An error occured while writing to <b>%1</b>.</p><p>Reason: <b>%2</b> (<i>See ~/.puddletag/log.log for debug info.</i>)</p> Never show this message again. Connection Error: %s Dialogs Album Art Pochettes Functions Fonctions Actions Actions Artwork Images Mass Tagging Tag par lots Tag Panel Tags Filter Filtre Filesystem Fichiers Tag Sources Sources de tags Stored Tags Tags enregistrés Logs Journaux Dir Renaming An error occured while renaming <b>%1</b> to <b>%2</b>. (%3) Une erreur s'est produit en renommant <b>%1</b> en <b>%2</b>. (%3) Renaming Renomme I couldn't rename: <i>%1</i> to <b>%2</b> (%3) Je n'ai pas pu renommer: <i>%1</i> en <b>%2</b> (%3) Rename: <b>%1</b> to: <i>%2</i> Renomme: <b>%1</b> en: <i>%2</i> Dirview Refresh Directory Recharger le dossier Show Header Afficher l'en-tête Hide Header Masquer l'en-tête Open in File Manager Ouvrir dans le gestionnaire de fichiers Subfolders Sous-dossiers Discogs Retrieving search results for keywords: %s Récupération des résultats pour les mots-clés: %s Invalid XML was returned. See log Réponse XML non valide. Voir le log Retrieving using Release ID: %s Récupération via Release ID : %s Retrieving album %s Récupération de l'album %s Retrieving cover: %s Récupération de la pochette: %s <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li> <li>Using <b>:r id</b> will retrieve the album with Discogs ID <b>id</b>.</li> <li>Entering keywords <b>without a semi-colon (;)</b> will do a Discogs album search using those keywords.</li> </ul> <p>Entrez les paramètres de recherche ici. Si vous laissez vide, les fichiers sélectionnés seront utilisés.</p> <ul> <li><b>artiste;album</b> cherche une combinaison spécifique album/artiste.</li> <li>Pour lister les albums d'un artiste, laisser la partie album vide, mais gardez le point-virgule (ex. <b>Ratatat;</b>). Pour un album seulement laissez la partie artiste vide, comme dans <b>;Resurrection.</li> <li>Utiliser <b>:r id</b> va récupérer l'album avec l'ID Discogs</li> <li>Entrer des mots clés <b>sans le point-virgule (;)</b> fera une recherche simple d'album sur Discog avec ces mots clés.</li> </ul> Retrieve Cover Récupérer la Pochette Cover size to retrieve Taille de la pochette à récupérer Small Petite Large Grande Field to use for discogs_id Champ à utiliser pour l'ID Discogs API Key (Stored as plain-text.Leave empty to use default.) Clé API (Stockée en texte claire, laissez vide pour utiliser la valeur par défaut) Invalid Discogs Release ID Release ID Discogs invalide Checking tracks for Discogs Album ID. Recherche d'Album ID dans les pistes. No Discogs ID found in tracks. Aucun ID trouvé dans les pistes. Found Discogs ID: %s Discogs ID trouvé: %s %s at Discogs.com %s sur Discogs.com Error retrieving image: Edit Field Edit Field Modifier le champ &Field &Champ &Value &Valeur A&dd &Ajouter E&dit Mo&difier Errors Couldn't create intermediate directory: %s N'a pu créer le dossier intermédiaire: %s Cannot move directory to a subdirectory within itself. Impossible de déplacer un dossier dans lui-même. No closing bracket found. Your filesystem encoding was detected as <b>ASCII</b>. <br />You won't be able to rename files using accented, <br /> cyrillic or any characters outside the ASCII alphabet. Extended Tags Field Champ Value Valeur Resets the selected fields to their original value. Restaurer l'état initial des fichiers sélectionnés. Different files. Plusieurs fichiers. Fields Filename Nom de fichier Artist Artiste Title Titre Album Album Track Piste Length Durée Year Année Bitrate Débit Genre Genre Comment Commentaire Dirpath Chemin FreeDB <b>FreeDB does not support text-based searches.</b> <b>FreeDB ne supporte pas les recherches sur du texte.</b> Functions At most %1 arguments expected. %2 given. Au plus %1 paramètres attendus. %2 trouvés. At least %1 arguments expected. %2 given. Au moins %1 paramètres attendus. %2 trouvés. Tag->File: $1 Tag->Fichier: $1 &Pattern &Motif Replace $0: '$1' -> '$2', Match Case: $3, Words Only: $4 Remplacer $0: '$1' -> '$2', Sensible à la casse: $3, Mot entiers: $4 &Replace &Remplacer w&ith: &par: Match c&ase: Sensible à la c&asse: only as &whole word seulement en mot &entier Update from $2, Fields: $1 Mis à jour depuis $2, Champs: $1 &Field list (; separated): &Liste de champs (séparés par ;): &Tag APEv2 APEv2 ID3 Trim $0 Tronquer $0 Autonumbering: $0, Start: $1, Restart for dir: $2, Padding: $3 Numérotation auto: $0, Début: $1, Recommencer à chaque dossier: $2, Longueur: $3 Sort $0, order='$1', Match Case='$2' Trier $0, ordre='$1', Sensible à la casse='$2' &Order &Ordre Ascending Ascendant Descending Descendant Match &Case Sensible à la &casse Tag->Dir: $1 Tag->Dossier: $1 &Pattern (can be relative path) &Motif (peut être un chemin relatif) Format $0 using $1 Formatter $0 selon $1 &Format string Chaine de &formattage RegReplace $0: RegExp '$1' with '$2', Match Case: $3 ExprRemplace $0: ExprRat '$1' avec '$2', Sensible à la casse: $3 &Regular Expression Expression &Rationelle Replace &matches with: Re&mplace les correspondances par: Artwork: Filenames='$1', Description='$2', Case Sensitive=$3 Image: Fichier='$1', Description='$2', Sensible à la casse=$3 &Filenames to check (;-separated, shell wildcards [eg. *] allowed) Noms de &fichiers à vérifier (séparés par ;, jokers (?,*) autorisés) &Default description (can be pattern): &Description par défaut (peut être un motif): Match filename's &case: Nom de fichier sensible à la &casse: Merge field: $0, sep='$1' Fusionner le champ: $0, sep='$1' &Separator &Séparateur Remove Dupes: $0, Match Case $1 Supprimer les doublons: $0, Sensible à la casse $1 Text File: $0, '$1' Fichier texte: $0, '$1' Split using separator $0: sep='$1' Éclater en utilisant le séparateur $0: sep='$1' Remove fields except: $1 Supprimer les champs excepté: $1 <blank> $0 <vide> $0 Convert Case: $0: $1 Convertir la casse: $0: $1 &Type &Type Mixed Case Casse Mixte UPPER CASE MAJUSCULES lower case minuscules For &Mixed Case, after any of: Pour la casse &mixte, après chaque: Convert to encoding: $0, Encoding: $1 Convertir l'encodage: $0, Encodage: $1 &Encoding &Encodage cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 Text to Tag: $0 -> $1, $2 Texte vers Tag: $0 -> $1, $2 &Text &Texte &Output &Output File->Tag '$1' Fichier->Tag '$1' Export Art: pattern='$1' Exporter image: motif='$1' &Pattern (extension not required) &Motif (extension optionelle) folder_%img_counter% oi 1 1 aoeu False au %artist% - %album% ; ; lyrics.txt ., ! ., ! Tag to filename Tag vers nom de fichier Replace Remplacer Update from tag Mettre à jour depuis le tag Trim whitespace Tronquer les espaces Export artwork to file Exporter l'image vers un fichier Autonumbering Numérotation auto Sort values Trier les valeurs Tag to Dir Tag vers Dossier Format value Formatter la valeur Replace with RegExp Remplacer avec une Expression rationelle Load Artwork Charger une image Merge field Fusionner un champ Remove duplicate values Supprimer les valeurs en double Import text file Importer un fichier texte Split fields using separator Éclater en utilisant un séparateur Remove all fields except Supprimer tous les champs sauf Remove Fields Supprimer les champs Case conversion Convertir la casse Convert from non-standard encoding Convertir depuis un encodage non standard Text to Tag Texte vers Tag Filename to Tag Nom de fichier vers Tag Functions Dialog <b>No change.</b> <b>Aucun changement .</b> <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> <p>Les champs qui vont être écrits/<p> <ul> <li>Entrez un liste de champs, séparés par des virgules, par ex <b>artist, title, album</b></li> <lI>Utilisez <b>__selected</b> pour n'écrire que dans les cellules sélectionnées.</li> <li>Les combinaisons comme <b>__selected, artist, title</b> sont acceptées.</li> <li>Mais <b>__selected</b> n'est <b>pas</b> autorisé dans les Actions.</li> <li>'~' écrit dans tous les champs sauf ceux qui le suivent. par ex <b>~artist, title</b> va écrire dans tous les champs sauf artiste et titre trouvés dans les fichiers sélectionnés.</li> </ul> No preview for is shown for this function. Pas de prévisualisation pour cette fonction. <b>No change</b> <b>Aucun changement </b> Functions Fonctions <p>Fields that will get written to.</p> <ul> <li>Enter a list of comma-separated fields eg. <b>artist, title, album</b></li> <li>Use <b>__selected</b> to write only to the selected cells. It is not allowed when creating an action.</li> <li>Combinations like <b>__selected, artist, title</b> are allowed.</li> <li>But using <b>__selected</b> in Actions is <b>not</b>.</li> <li>'~' will write to all the the fields, except what follows it . Eg <b>~artist, title</b> will write to all but the artist and title fields found in the selected files.<li> </ul> GenSettings &Edit sort options Préférences de &tri <Autodetect> <Autodétecter> Default Défaut Language (Requires a restart) Langue (Redémarrage requis) Su&bfolders Sous-&dossiers Show &gridlines Afficher la &grille Show tooltips in file-view: Afficher les infobulles dans la liste des fichiers: Show &row numbers Afficher les numé&ros de ligne Automatically resize columns to contents Adapter la largeur des colonnes au contenu &Preserve file modification times &Préserver les dates de modification des fichiers Program to &play files with: &Programme pour jouer les fichiers: &Load last folder at startup &Recharger le dossier précédent au démarrage List Buttons Add Ajouter Remove Enlever Move Up Monter Move Down Descendre Edit Modifier Duplicate Dupliquer &>> &<< Logs &Copy &Copier &Clear &Vider Main Window puddletag: %1 + others puddletag: %1 + autres puddletag: %1 Import directory... Importer le dossier... Mapping Settings <ul><li>Tag is the format that the mapping applies to. One of <b>ID3, APEv2, MP4, or VorbisComment</b>. </li><li>Fields will be mapped from Source to Target, meaning that if Source is found in a tag, it'll be editable in puddletag using Target.</li> <li>Eg. For <b>Tag=VorbisComment, Source=organization, and Target=publisher</b> means that writing to the publisher field for VorbisComments in puddletag will in actuality write to the organization field.</li><li>Mappings for tag sources are also supported, just use the name of the tag source as Tag, eg. <b>Tag=MusicBrainz, Source=artist,Target=performer</b>.</li></ul> <ul><li>Tag est le format auquel la correspondance s'applique : <b>ID3, APEv2, MP4 ou VorbisComment</b>.</li> <li>Les champs seront associés de Source à Cible, ce qui veut dire que si Source est trouvé dans un tag, il sera modifiable dans puddletag en tant que Cible.</li> <lI>Ex: Pour <b>Tag=VorbisComment, Source=organization et Cible=publisher</b> alors écrire dans Editeur pour un tag VorbisComment dans puddletag écrira en fait dans Organisation.</li> <li>Les associations pour les Sources de tag sont aussi supportées. Entrez simplement le nom de la source dans Tag, par ex <b>Tag=MusicBrainz, Source=artist, Cible=performer</b>.</li> </ul> Tag Original Field Champ original Target Cible <b>A restart is required to apply these settings.</b> <b>Un redémarrage est requis pour appliquer ces changements.</b> Source Masstagging Continue Continuer Stop Stopper Combine and continue Combiner et continuer Replace and continue Remplacer et continuer Combine and stop Combiner et stopper Replace and stop Remplacer et stopper Use best match Utiliser la meilleure correspondance Do nothing and continue Ne rien faire et continuer <b>%1</b>: No matches, trying other sources. <b>%1</b>: Pas de correspondances, essai d'autres soruces. <b>%1</b>: No matches, stopping retrieval. <b>%1</b>: Pas de correspondances, arrêt. <b>%1</b>: Inexact matches found, doing nothing. <b>%1</b>: Correspondances inexactes trouvées, pas d'action. <b>%1</b>: Inexact matches found, using best. <b>%1</b>: Correspondances inexactes trouvées, utilisation de la meilleure. <b>%1</b>: No match found within bounds. <b>%1</b>: Pas de correspondances dans les limites. <b>%1</b>: Retrieving album. <b>%1</b>: Récupération de l'album. <b>%1</b>: Stopping. <b>%1</b>: Arrêt. <b>Initializing...</b> <b>Initialisation...</b> <br />Starting album search. <br />Démarrage de la recherche d'album. artist: %1 Artiste:%1 album: %1 Album:%1 Polling <b>%1</b>: Requête de <b>%1</b>: Exact match found. Correspondance exacte trouvée. %1 albums found. %1 albums trouvés. No albums found Pas d'album trouvé. Mass Tagging Traitement par lots &Start &Lancer &Configure &Configurer &Write &Écrire Clear &Preview &Oublier les modifications &Profile: &Profil: &Stop <br /><b>No tag sources were added to this profile. Exiting.</b> <br./><b>Pas de source de tag ajoutée à ce profil. Sortie.</b> <b>Error:</b> %1 <b>Erreur:</b> %1 <br /><b>Error:</b> %1 <br /><b>Erreur:</b> %1 <br /><b>Stopping due to error.</b> <br /><b>Arrêt à cause d'une erreur.</b> <br /><b>Lookups completed.</b> <br /><b>Recherches terminées.</b> An error occured during the search: <b>%s</b> Une erreur s'est produite lors de la recherche: <b>%s</b> An error occured during album retrieval: <b>%s</b> Une erreur s'est produite lors de la récupération de l'album: <b>%s</b> &Search &Chercher &Configure Profiles &Configurer les profils &Write Previews &Ecrire les changements <b>Lookups completed.</b> <b>Recheche terminée.</b> Default Profile Profil par défaut <b>Polling: %s</b> <b>Requête: %s</b> Retrieving matching album. <b>%1 - %2</b> Récupération de l'album. <b>%1 - %2</b> Retrieving matching album. Artist=<b>%1</b> Récupération de l'album. Artist=<b>%1</b> Retrieving matching album. Album=<b>%1</b> Récupération de l'album. Album=<b>%1</b> Retrieving matching album. Récupération de l'album. Starting search for: <br />artist=<b>%1</b> <br />album=<b>%2</b><br /> Démarrage de la recherche: <br />Artiste=<b>%1</b> <br />Album=<b>%2</b><br /> Starting search for: <br />artist=<b>%1</b><br />album=No album name found. Démarrage de la recherche: <br />Artiste=<b>%1</b> <br />Album=Pas de nom d'album trouvé. Starting search for: <br />album=<b>%1</b><br />artist=No artist found. Démarrage de la recherche: <br />Album=<b>%1</b> <br />Artiste=Pas d'artiste trouvé. No artist or album info found in files. Starting search. Pas d'info artiste ou album trouvé dans les fichiers. Démarrage de la recherche. <b>%d</b> results found. <b>%d</b> résultats trouvés. <b>No results were found.</b> <b>Aucun résultat trouvé.</b> <b>One</b> result found. <b>Un</b> résultat trouvé. <b>%d</b> possibly matching albums found. <b>%d</b> correspondances possibles trouvées. <b>One</b> possibly matching album found. <b>Une</b> correspondance possible trouvée. No matches found for tag source <b>%s</b> Aucune correspondance trouvée pour la source <b>%s</b> Previously retrieved result does not match. Retrieving next matching album. Les résultats précédents ne correspondent pas. Récupération de l'album suivant. <br />Rechecking with results from <b>%s</b>.<br /> <br />Revérification avec les résultats de <b>%s</b>.<br./> <br />Valid matches were found for the album. <br />Des correspondances ont été trouvées pour l'album. <b>No valid matches were found for the album.</b> <b>Aucune correspondances trouvée pour l'album.</b> Rechecking Revérification Retrying search with album name: <b>%s</b> Menus Help Aide About puddletag A propos de puddletag About Qt A propos de Qt Toolbar Barre d'outils &Open Folder &Ouvrir un dossier &Add Folder &Ajouter un dossier Load &playlist Charger une &liste de lecture Sa&ve playlist Sau&ver la liste de lecture &Refresh &Recharger &Save &Sauver &Play &Jouer &File->Tag &Fichier->Tag &Undo A&nnuler Autonumbering &Wizard... Assistant Auto&numérotation... &Clear &Gommer &Format F&ormat &Text File->Tag Fichier te&xte->Tag &Import Music Library... &Importer une bibliothèque... &Actions &Actions &Preferences Pré&férences &Functions &Fonctions &QuickActions Actions &Rapides &Rename Directories &Renommer les dossiers &Exit &Quitter &Tag->File &Tag->Fichier &Increase Font &Augmenter la taille du texte &Decrease Font &Diminuer la taille du texte &Clipboard->Tag &Presse-papier->Tag Select &All &Tout sélectionner &Invert Selection &Inverser la sélection &Select Column Sélectionner la c&olonne &Cut Co&uper &Copy Selection &Copier la sélection &Paste Co&ller &Remove Tag Supprim&er le tag E&xtended Tags Ta&gs étendus &Delete Su&pprimer &Properties &Propriétés Paste &Onto Selection Coller su&r la sélection &Lock Layout &Verrouiller la disposition Select &Next Directory Sélectionner le dossier &suivant Copy All &Fields Copier &tous les champs Delete &Without Confirmation Supprimer sans &confirmation In &Library Dans la &libraire Replace... &Remplacer... Remove &APEv2 Tag Supprimer le tag &APEv2 Remove All &ID3 Tags Supprimer tous les tags &ID3 Move Selected &Up &Monter la sélection Move Selected Do&wn &Descendre la sélection Select &Previous Directory Sélectionner le dossier &précédent Remove ID3v&2 Tag Supprimer le tag ID3v&2 Remove ID3v&1 Tag Supprimer le tag ID3v&1 Enabl&e Preview Mode &Activer le mode Aperçu Select a directory to import into puddletag. Sélectionner un dossier à importer dans puddletag. Append a directory to current file-view. Ajoute un dossier à la liste actuelle. Import an m3u playlist into puddletag. Importer une liste de lecture m3u dans puddletag. Save all files to m3u playlist. Enregistrer tous les fichiers dans un liste de lecture m3u. Refresh current file-view. Recharger la liste des fichiers. Plays the selected files in the predefined music player. Joue les fichiers sélectionnés dans le lecteur prédéfini. Convert filename to tag using the pattern. Deviner les tag d'après le nom de fichier et le motif. Select all files belonging to the directories of those selected. Otherwise (if only a single directory is selected) selects all the files in the previous directory. Sélectionner tous les fichiers dans les mêmes dossiers. Ou (si un seul dossier sélectionné) sélectionne tous les fichiers du dossier précédent. Disabl&e Preview Mode &Désactiver le mode Aperçu Clear Selected &Files Nettoyer les &fichiers sélectionnés &Write Previews &Ecrire les changements &Undo Last Clear &Annuler le dernier nettoyage Sort &By &Trier par Clear Selected &Cells Nettoyer les &cellules séectionnées &Plugins &Greffons &File &Fichier &Edit &Edition &Convert &Convertir &Tools Ou&tils &Preview Mode Mode a&perçu Ta&g Tools Ta&gs &Windows &Fenêtres Online &Documentation &Forum &Bug tracker &Unload Everything Refresh &Selected Reloads directories of selected files. Messages That's a large amount of data to copy. It may cause your system to lock up. Do you want to go ahead? Copy without images. Mp3tag Retrieving search page: %s Retrieving search page... Parsing search page. Parsing search page... Retrieving album page: %s Retrieving album page... Parsing album page. Parsing album page... MusicBrainz Could not connect to MusicBrainz server. Check your net connection. Connection à MusicBrainz impossible. Vérifier votre connection. Retrieving Artist Info for <b>%s</b> Récupération de l'artiste pour <b>%s</b> <b>Error:</b> While retrieving %1: %2 <b>Erreur:</b>Récupération de %1: %2 Retrieve PUIDS (Requires a separate lookup for each track.) Récupérer PUIDS (Nécéssite une requête pour chaque piste.) <b>Error:</b> While retrieving Album ID %1 (%2) <b>Erreur:</b>Récupération de l'ID Album %1 (%2) Checking tracks for MusicBrainz Album ID. Vérification des pistes l'ID Album MusicBrainz. No Album ID found in tracks. Pas d'ID Album trouvé dans les pistes. Found Album ID: %s ID Album trouvé: %s Searching for album: %s Recherche de l'album: %s %s at MusicBrainz.org %s sur MusicBrainz.org <p>Enter search parameters here. If empty, the selected files are used.</p> <ul> <li>Enter any text to search for an album. Eg. <b>Southernplayalisticadillacmuzik</b></li> <li><b>artist;album</b> searches for a specific album/artist combination.</li> <li>For multiple artist/album combinations separate them with the '|' character. eg. <b>Amy Winehouse;Back To Black|Outkast;Atliens</b>. </li> <li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For an album only leave the artist part as in <b>;Resurrection.</li> <li>Retrieving all albums by an artist using their MusicBrainz Artist ID is possible by prefacing your search with <b>:a</b> as in <b>:a f59c5520-5f46-4d2c-b2c4-822eabf53419</b> (extra spaces around the ID are discarded.)</li> <li>In the same way an album can be retrieved using it's MusicBrainz ID by prefacing the search text with <b>:b</b> eg. <b>:b 34bb630-8061-454c-b35d-8f7131f4ff08</b> </li></ul> <p>Entrez les paramètres de recherche ici. Si vide, alors les fichiers sélectionnés sont utilisés</p> <ul> <li>Entrez un texte quelconque pour chercher un album. Par ex <b>Southernplayalisticadillacmuzik</b></li> <li><b>Artiste,Album</b> recherche une combinaison spécifique.</li> <lI>Pour des combinaisons Artiste/Album multiples, séparez les par des '|'. Par ex <b>Amy Winehouse;Back To Black|Outkast;Atliens</b>.</li> <li>Pour lister les albums d'un artiste, laissez la partie Album vide, mais laissez le point-virgule (par ex <b>Ratatat;</b>). Pour cherche sur l'album seulement, laissez la partie Artiste vide, comme dans <b>;Resurrection.</li> <li>Récupérer tous les albums d'un artiste via son ID MusicBrainz est possible en préfixant la recherche par <b>:a</b> comme dans <b>:a f59c5520-5f46-4d2c-b2c4-822eabf53419</b> (les espaces superflus seront supprimés.)</li> <li>De la même façon un album peut être récupérer via son ID MusicBrainz ID en préfixant la recherche par <b>:b</b> comme dans <b>:b 34bb630-8061-454c-b35d-8f7131f4ff08</b> </li></ul> Retrieving cover: %s Récupération de la pochette: %s No images exist for this album. Invalid UUID Invalid query sent. You have exceeded your rate limit. Image does not exist. Retrieving image %s Retrieve Cover Récupérer la Pochette Cover size to retrieve: Amount of images to retrieve: Just the front cover All (can take a while) Found album id %s in tracks. Retrieving Error retrieving image: %s MusicLib Import Music Library Importer une discothèque Invalid library Discothèque invalide Error loading %1: %2 Erreur de chargement de %1: %2 Anonymous Library Discothèque anonyme Description was left out. La description n'a pas été renseignée. Anonymous author. Auteur anonyme. Loading music library... Chargement de la discothèqe... An error occured while loading the %1 library: <b>%2</b> Une erreur s'est produite au chargement de la discothèque %1:<b>%2</b> Music Library Discothèque &Search &Chercher Saving music library... Enregistrement de la discothèque... Library Artists Artistes de la discothèque No libraries found Pas de discothèque trouvée Load a lib first. Chargez d'abord une discothèque. No supported music libraries were found. Most likely the required dependencies aren't installed. Visit the puddletag website, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> for more details. Aucune discothèque exploitable n'a été trouvée. Il est possible que les bibliothèques nécéssaires ne soient pas installées. Voyez le site web puddletag, <a href='http://puddletag.sourceforge.net'>puddletag.sourceforge.net</a> pour plus d'informations. Pattern Settings &Sort &Tri Enter a pattern Entrez un motif Playlist Select m3u file... Sélectionner un fichier m3u... An error occured while reading <b>%1</b> (%2) Une erreur s'est produite lors de la lecture de <b>%1</b>. (%2) Save Playlist... Sauver la liste de lecture... Playlist Settings &Write extended info Ecrire les infos &détaillées Entries &relative to working directory Chemins &relatifs au dossier de travail &Filename pattern. Motif du nom de &fichier. Plugin Settings Name Nom Author Auteur Description Description Version Version <b>Loading/unloading plugins requires a restart.</b> <b>Un redémarrage est requis pour charger/décharger des plugins</b> Previews Preview Mode: Off Mode Aperçu: Désactivé <b>Preview Mode: On</b> <b>Mode Aperçu: Activé</b> Do you want to exit Preview Mode? Voulez-vous quitter le mode Aperçu ? Clea&r preview &Oublier les modifications Disable Preview Mode first to enable tag deletion. Désactivez le mode Aperçu avant de pouvoir supprimer des tags. Some files have uncommited previews. These changes will be lost once you exit puddletag. <br />Do you want to exit without writing those changes?<br /> Some files have uncommited previews. Changes will be lost once you load a directory. <br />Do you still want to load a new directory?<br /> Profile Config Configure Mass Tagging Congurer le traitement par lots Profiles Profils Configure Mass Tagging Profiles Configurer les profils de traitement par lots Masstagging Profiles Profils de traitement par lots Profile Editor Edit Profile Edition du Profil Masstagging Profile Profil de traitement par lots &Name: &Nom: &Description &Description <p>If no tag information is found in a file, the tags retrieved using this pattern will be used instead.</p> <p>Si aucun tag n'est trouvé dans le fichier, les informations devinées grâce à ce motif seront utilisées</p> <p>The artist and album fields will be used in determining whether an album matches the retrieved one. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater or equal than what you specify here it'll be considered to match.</p> <p>Les champs Artiste et Album seront utilisés pour vérifier qu'un album correspond à celui récupéré. Chaque champ sera comparé avec un algorithme approximatif. Si la taux d'exctitude est supérieur ou égal à ce que vous entrez ici alors le test sera considéré positif.</p> <p>The fields listed here will be used in determining whether a track matches the retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Les champs listés ici seront utilisé pour vérifer qu'une piste correspond à celle téléchargée. Chaque champ sera comparé avec un alogrithme approximatif. Si le taux d'exactitude est supérieur au "Pourcentage minimum" le test sera considéré positif.</p> Brute force unmatched files. Forcer les fichiers non trouvés. <p>If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Si au moins un fichier n'est pas trouvé, la correspondance sera tentée avec les noms des fichiers non trouvés.</p> Update empty fields only. Ne mettre à jour que les champs vides. Pattern to match filenames against. Motif de lecture des fichiers. Minimum percentage required for album matches. Pourcentage minimum requis pour la correspondance d'album. Match tracks using fields: Correpondance avec les champs: Minimum percentage required for track match. Pourcentage minimum requis pour la correspondance de pistes. Edit Config Edition de la config &Source &Source <b>Continue</b>: The lookup for the current album continue unabated if no results were returned for this Tag Source.<br /><b>Stop:</b> The lookup the current album will stop and any previous results will be used. <b>Continuer</b>: La recherche pour l'album en cours continue si aucun résultat n'est trouvé pour cette source.<br /><b>Stopper</b>: La recherche de l'album en cours s'arrêtera et tous les résultats précédents seront utilisés. &If no results found: Si &aucun résultat n'est trouvé: Say FreeDB returned the following <b>artist=Linkin, album=Meteora, genre=Rock</b> and MusicBrainz <b>artist=Linkin Park, album=Hybrid Theory, title=In The End, genre=Rap</b>. <br /><br /><b>Combining</b> them means that fields with differing values will be combined, in this case "genre". The resulting tag will be <b>artist=Linkin Park, album=Hybrid Theory, title=In The End, genre=Rock, Rap</b> (ie. genre will have two values, Rock and Rap. Not the singular "Rock, Rap".)<br /><br />Choosing to <b>replace</b> fields will result in the following tag <b>artist=Linkin Park, album=Hybrid Theory, title=In The End, genre=Rap</b> (since Musicbrainz was last, it's genre field takes precedence) Mettons que FreeDB réponde ceci <b>artist=Linkin, album=Meteora, genre=Rock</b> et MusicBrainz <b>artist=Linkin Park, album=Hybrid Theory, title=In The End, genre=Rap</b>. <br./><br /> En les <b>combinant</b>, les valeurs différentes seront cumulées. (Dans l'exemple, le genre résultant sera "Rock, Rap"). En les <b>remplacant</b>, les dernières valeurs obtenues seront utilisées. (Dans l'exemple, le genre résultant sera "Rap"). &If single match found: Si &un seul résultat est trouvé: Enter a comma seperated list of fields to write. <br /><br />Eg. <b>artist, album, title</b> will only write the artist, album and title fields of the retrieved tags. <br /><br />If you want to exclude some fields, but write all others start the list the tilde (~) character. Eg <b>~composer,__image</b> will write all fields but the composer and __image fields. Entrez une liste, séparée par des virgules, des champs à écrire. <br /><br /> Par ex <b>artist, album, title</b> ne va écrire que les champs Artiste, Album et Titre des tags. <br /><br /> Si vous voulez exclure certains champs, et écrire les autres alors commencez par un tidle (~). Par ex <b>~composer,__image</b> va écrire tous les champs sauf Compositeur et Image. Choose the course of action if an exact match wasn't found. See the tooltip in the previous dialog for an explanation of <b>Use best match</b>. Choisissez ce qu'il faut faire si une correspondance exacte n'est pas possible. Voyez l'infobulle dans le dialogue précédent pour une explication de la fonction "Bestmatch"</b>. &If ambiguous matches found: Si des résultats ambi&gus sont trouvés: Minimum &percentage required for album matches. &Pourcentage minimum requis pour la correspondance d'album. Match tracks using &fields: Correpondance avec les &champs: Edit Masstagging Profile Modification du profil de traitement par lot <p>The fields listed here will be used in determining whether a file matches a retrieved track. Each field will be compared using a fuzzy matching algorithm. If the resulting average match percentage is greater than the "Minimum Percentage" it'll be considered to match.</p> <p>Les champs listés ici seront utilisé pour vérifer qu'un fichier correspond à une piste téléchargée. Chaque champ sera comparé avec un alogrithme approximatif. Si le taux d'exactitude est supérieur au "Pourcentage minimum" le test sera considéré positif.</p> <p>Check to enable brute forcing matches. If a proper match isn't found for a file, the files will get sorted by filename, the retrieved tag sources by filename and corresponding (unmatched) tracks will matched.</p> <p>Cochez pour forcer la correspondace. Si au moins un fichier n'est pas trouvé, la correspondance sera tentée avec les noms des fichiers non trouvés.</p> Edit Tag Source Config Modifier la config de la source <p>Enter a comma-seperated list of fields to retrieve. Leave empty to retrieve all available fields/values. <br /><br />Eg. <b>artist, album, title</b> will only retrieve the artist, album and title fields of from the Tag Source. <br /><br />Start the list with the tilde (~) character to write all retrieved fields , but the ones listed. Eg the field list <b>~composer,__image</b> will write all fields but the composer and __image (aka cover art) fields.</p><p>If a field has been retrieved in a previous Tag Source the values will be combined if they differ. Eg. If genre=<b>Rock</b> for the first tag source polled and genre=<b>Alternative</b> for the tag source polled second then the resulting field will have multiple-values ie. genre=<b>Rock\\Rap</b> <p>Entrez une liste de champs à récupérer, séparés par des virgules. Laissez vide pour récupérer tous les champs disponibles. <br./><br /> Par ex <b>artist, album, title</b> pour récupérer les infos Artiste, Album, Titre depuis la Source. <br./><br /> Commencez par un tidle (~) pour récupérer tous les champs, sauf ceux listés. Par ex <b>~composer,__image</b> récupérera tous les champs à l'exception de Compositeur et Image.</p> <p>Si un champ a été récupéré via une autre Source, les valeurs seront combinées si elles différent. Par ex si genre=<b>Rock</b> d'abord et genre=<b>Alternative</b> ensuite alors le champ aura au final plusieurs valeurs, <b>Rock\\Rap</b> dans notre exemple. Fields to replace: Champs à remplacer: Enter a comma-separated lists of fields that'll replace any retrieved from previously polled tag sources. <br />Start the list with the tilde (~) character to replace all but the fields you list. <br /><b>NB: Fields listed here must also be listed in the list of fields to retrieve.</b><br /><br />Eg. Assume you have two Tag Sources. The first retrieves <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. The second source gets <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. For the second Tag Source, setting just <b>artist</b> as the list of fields to replace will overwrite the artist field retrieved from the first tag source. The resulting retrieved fields/values as shown in puddletag will then be <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. <p>Entrez une liste de champs, séparés par des virgules, qui remplaceront toute valeur précédente. <br /> Commencez par un tidle (~) pour remplacer tous les champs, sauf ceux listés. <br./> <b>NB: Les champs listés ici doivent aussi être listés dans les champs à récupérer</b> <br /><br /> Par exemple, mettons que vous avez deux Sources. La première renvoie <b>artist=Freshlyground, album=Nomvula, genre=Afro Pop</b>. La seconde source renvoie <b>artist=Freshly Ground, album=Nomvula, genre=Pop</b>. Pour la seconde source, en mettant juste <b>artiste</b> dans la liste des champs à remplacer va remplacer l'info Artiste récupérée par la première source. Dans notre exemple, le résultat sera <b>artist=Freshly Ground, album=Nomvula, genre=Afro Pop\\Pop</b>. <p><b>Continue</b>: The lookup for the current album will continue by checking the other tag sources if no matching results were found for this tag source.</p><p><b>Stop:</b> The lookup for the current album will stop and any previously retrieved results will be used.</p> <p><b>Continuer</b>: La recherche pour l'album en cours continue avec les autres sources si aucun résultat n'est trouvé pour cette source.</p> <p><b>Stopper</b>: La recherche de l'album en cours s'arrêtera et tous les résultats précédents seront utilisés.</p> Progress Dialog Please Wait... Veuillez patienter... %1%2 of %3... %1%2 sur %3... QuodLibet &Library Path Chemin de &la mediathèque ... Select QuodLibet library file... Sélectionner le fichier QuodLibet... %1 (%2) %1 is an invalid QuodLibet music library file. %1 n'est pas une mediathèque QuodLibet valide. Settings General Général Confirmations Mappings Correspondance Playlist Liste de lecture Colours Couleurs Genres Tags Plugins Greffons Shortcuts Raccourcis An error occurred while saving the settings of <b>%1</b>: %2 Une erreur s'est produite à l'enregistrement de </b>%1</b>: %2 &Windows &Fenêtres Tag Sources Sources des tags Patterns Motifs Tag Panel Panneau des Tags Shortcut Editor Enter a key sequence for the shortcut. Entrez une séquence pour le raccourci. &Don't assign keyboard shortcut. Ne &pas affecter de raccourci clavier. Shortcut Settings File Properties Propriétés du fichier <b>Double click a cell in the Shortcut Column to <br />modify the key sequence.</b> <b>Double cliquez une cellule dans la colonne Raccourci pour modifier la séquence de touches.</b> Description Description Shortcut Raccourci Edit Shortcuts Modifier les raccourcis Shortcuts &Clear Effa&çer Invalid shortcut sequence. Séquence de raccourci invalide. (Deleted) (Supprimé) Status Bar <b>%s</b> New Filename: <b>%1</b> Nouveau nom: <b>%1</b> Table Preview: %1 Real: %2 Aperçu: %1 Réel: %2 Disable Preview Mode first to enable tag deletion. Désactivez le mode Aperçu avant de pouvoir supprimer des tags. An error occurred while deleting the tag of %1: <b>%2</b> Une erreur s'est produite à la suppression du tag de %1:<b>%2</b> There was an error deleting the tag of %1: <b>Tag deletion isn't supportedfor %2 files.</b> Une erreur s'est produite à la suppression du tag de %1:<b>La suppression du tag n'est pas possible pour les fichiers %2.</b> Deleting tag... Supprime le tag... Are you sure you want to delete the selected files? Êtes-vous sûr de vouloir supprimer les fichiers sélectionnés ? Deleting Suppression An error occurred while trying to play the selected files: <b>%1</b> <br />Does the music player you defined (<b>%2</b>) exist? Une erreur s'est produite en tentant de lire les fichiers sélectionnés:<b>%1</b><br />Est-ce que le lecteur défini (<b>%2</b>) existe ? It wasn't possible to play the selected files, because the music player you defined (<b>%1</b>) does not exist. Il n'a pas été possible de lire les fichiers sélectionéns car le lecteur défini (<b>%1</b>) n'existe pas. Tag Panel Settings Row Ligne All row numbers must be integers. Tous les numéros de ligne doivent être entiers. Tag Settings &Restrict incoming files to (eg. "*.mp3; *.ogg; *.aac") &Restreindre les fichiers traités (par ex "*.mp3; *.ogg; *.aac") Remove ID3v1 tag. Supprimer le tag ID3v1. Update the ID3v1 tag's values only if an ID3v1 tag is present. Mettre à jour le tag ID3v1 seulement si il existe. Create an ID3v1 tag if it's not present. Otherwise update it. Créer le tag ID3v1 s'il n'existe pas. Sinon le créer. puddletag writes only &ID3v2 tags.<br />What should be done with the ID3v1 tag upon saving? puddletag n'écrit que des tags &ID3v2.<br />Qu'est-ce qui doit être fait des tags ID3v1 au moment d'enregistrer ? ID3 Options Options ID3 Write ID3v2.&4 Ecrire ID3v2.&4 Write ID3v2.&3 (Experimental) Ecrire ID3v2.&3 (Expérimental) Default &pattern to use when saving artwork. Motif &par défaut pour l'enregistrement des images. Write ID3v2.&3 Tag Sources <b>Error parsing artist/album combinations.</b> <b>Erreur de lecture des combinaisons artiste/album.</b> Retrieving cover: %s Récupération de la pochette: %s HTTPError 403: Forbidden Erreur HTTP 403: Accès refusé Page doesn't exist La page n'existe pas python-musicbrainz2 wasn't found. python-musicbrainz2 non trouvé. Text File -> Tag Import tags from text file Importer les tags depuis un fichier texte Text Texte Tag preview Aperçu du tag &Select File &Sélectionner le fichier &Paste Clipboard Coller le &presse-papier The file <b>%1</b> couldn't be loaded.<br /> Do you want to choose another? Le fichier <b>%1</b> n'a pu être chargé.<br /> Voulez-vous en choisir un autre ? Error Erreur &Yes &Oui &No &Non WebDB <b>Error in pattern</b> <b>Erreur dans le motif</b> Retrieved Albums Albums récupérés An error occured: %1 Une erreur s'est produite: %1 An unhandled error occured: %1 Une erreur non gérée s'est produite: %1 Retrieving album tracks... Récupération des pistes de l'album... Retrieval complete. Récupération terminée. Retrieving tracks... Récupération des pistes... No matching albums were found. Album non trouvé. More than one album matches. None will be retrieved. Plus d'un album correspond. Aucun ne sera récupéré. Retrieving album. Récupération de l'album. Couldn't load Mp3tag Tag Source %s N'a pu charger la source Mp3tag %s <b>Nothing to display.</b> <b>RIen à afficher.</b> Configure: %s Configurer: %s Add sort option Ajouter une option de tri Enter a sorting option (a comma-separated list of fields. Eg. "artist, title") Entrez les options de tri (une liste de champs séparés par des virgules. Par ex "artist, title") Edit sort option Modifier les options de tri &Display format for individual tracks. Format d'affichage pour les pistes &individuelles. Display format for &retrieved albums Format d'affichage pour les &albums récupérés Sort retrieved albums using order: Trier les albums récupérés avec cet ordre: User-Agent to use for screen scraping. Agent utilisateur à utiliser. Automatic retrieval options Options de récupération automatique Sour&ce: Sour&ce: Configure Configurer Enter search parameters here. If empty, the selected files are used. <ul><li><b>artist;album</b> searches for a specific album/artist combination.</li><li>To list the albums by an artist leave off the album part, but keep the semicolon (eg. <b>Ratatat;</b>). For a album only leave the artist part as in <b>;Resurrection.</li></ul> Entrez les paramètres de recherche ici. Si vous laissez vide alors les fichiers sélectionnés seront utilisés. <ul><li><b>artist;album</b>recherche une combinaison Artiste/Album spécifique.</li> <li>Pour lister les albums d'un artiste laissez la partie album vide mais gardez le point-virgule (par ex <b>Ratatat;</b>). Pour une recherche par album, laissez la partie Artiste vide (par ex <b>;Resurection</b>.</li> </ul> &Search &Chercher &Write &Écrire Select files and click on Search to retrieve metadata. Sélectionnez les fichiers et cliquer sur Chercher pour récupérer les données. Update empty fields only. Ne mettre à jour que les champs vides. Automatically retrieve matches. Récupérer automatiquement les correspondances. Enter a comma seperated list of fields to write. <br /><br />Eg. <b>artist, album, title</b> will only write the artist, album and title fields of the retrieved tags. <br /><br />If you want to exclude some fields, but write all others start the list the tilde (~) character. Eg <b>~composer, __image</b> will write all fields but the composer and __image fields. Entrez une liste, séparée par des virgules, des champs à écrire. <br /><br /> Par ex <b>artist, album, title</b> ne va écrire que les champs Artiste, Album et Titre des tags. <br /><br /> Si vous voulez exclure certains champs, et écrire les autres alors commencez par un tidle (~). Par ex <b>~composer,__image</b> va écrire tous les champs sauf Compositeur et Image. <b>Tags were written.</b> <b>Les tags ont été écrits.</b> Searching... Recherche... <b>Select some files or enter search paramaters.</b> <b>Sélectionnez quelques fichiers ou entrez des options de recherche.</b> An unhandled error occurred: %1 Une erreur non gérée s'est produite: %1 Searching complete. Recherche terminée. User-Agent to when accessing web sites. Agent utilisateur utilisé pour se connecter aux sites web. Retrieved Albums (sorted by %s) Retrying search with %s S&ubmit Tags Submission completed. puddletag-1.0.2/THANKS0000644000175000001440000000124211612773575014676 0ustar keithusers00000000000000First off thanks to Evan Devetsis for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. To the library writers of the puddletag dependencies. Paul McGuire for PyParsing and helping me out on the discussion board. Michael Urman and Joe Wreschnig for Mutagen (Another cool library). Phil Thomson and the Qt and PyQt people for PyQt4. Michael Foord and Nicola Larosa for ConfigObj. The Oxygen team for the Oxygen icons. Raphaël Rochet for the French translation. And for the people whose code I stole, those who helped be out on discussion boards and to open-source creators. Thanks a bunch. puddletag-1.0.2/puddletag.desktop0000644000175000001440000000025412126275474017325 0ustar keithusers00000000000000[Desktop Entry] Version=1.0 Type=Application Name=puddletag TryExec=puddletag Exec=puddletag %F Icon=puddletag GenericName=Audio Tag Editor Categories=AudioVideo;Audio;Qt; puddletag-1.0.2/puddlestuff/0000755000175000001440000000000012236755734016311 5ustar keithusers00000000000000puddletag-1.0.2/puddlestuff/shortcutsettings.py0000644000175000001440000002627411612773575022332 0ustar keithusers00000000000000# -*- coding: utf-8-*- import sys, pdb, os from puddlestuff.puddleobjects import PuddleConfig, winsettings, OKCancel from puddlestuff.constants import SAVEDIR import puddlestuff.loadshortcuts as ls from PyQt4.QtCore import * from PyQt4.QtGui import * pyqtRemoveInputHook() from puddlestuff.translations import translate from PyQt4.QtCore import QEvent, QRect, QString, Qt, QVariant, SIGNAL from PyQt4.QtGui import qApp, QBrush, QColor, QDialog, QHBoxLayout, \ QItemDelegate, QKeySequence, QLabel, QPainter, QPalette, QPen, \ QPushButton, QStyle, QTableWidget, QTableWidgetItem, QVBoxLayout class ActionEditorWidget(QLabel): # Redefine the tr() function for this class. def tr(self, text): return qApp.translate("ActionEditorWidget", text) def __init__(self, text, parent): QLabel.__init__(self, text, parent) self.key = "" self.modifiers = {} self.setAutoFillBackground(True) palette = self.palette() palette.setBrush(palette.Base, palette.brush(palette.AlternateBase)) self.setPalette(palette) self.valid = False self.setFrameStyle(QFrame.Panel) def keyPressEvent(self, event): other = None if event.key() == Qt.Key_Shift: self.modifiers[Qt.Key_Shift] = u"Shift" elif event.key() == Qt.Key_Control: self.modifiers[Qt.Key_Control] = u"Ctrl" elif event.key() == Qt.Key_Meta: self.modifiers[Qt.Key_Meta] = u"Meta" elif event.key() == Qt.Key_Alt: self.modifiers[Qt.Key_Alt] = u"Alt" else: other = QString(QKeySequence(event.key())) if other: key_string = u"+".join(self.modifiers.values() + [unicode(other),]) self.valid = True else: key_string = u"+".join(self.modifiers.values()) self.setText(key_string) def keyReleaseEvent(self, event): if self.valid: return if event.key() == Qt.Key_Shift: if self.modifiers.has_key(Qt.Key_Shift): del self.modifiers[Qt.Key_Shift] elif event.key() == Qt.Key_Control: if self.modifiers.has_key(Qt.Key_Control): del self.modifiers[Qt.Key_Control] elif event.key() == Qt.Key_Meta: if self.modifiers.has_key(Qt.Key_Meta): del self.modifiers[Qt.Key_Meta] elif event.key() == Qt.Key_Alt: if self.modifiers.has_key(Qt.Key_Alt): del self.modifiers[Qt.Key_Alt] self.setText(u"+".join(self.modifiers.values())) if len(self.modifiers) == 0: self.releaseKeyboard() def mousePressEvent(self, event): if event.button() != Qt.LeftButton: return size = self.height() / 2.0 rect = QRect(self.width() - size, size * 0.5, size, size) if rect.contains(event.pos()): self.clear() self.valid = True event.accept() def paintEvent(self, event): if not self.text().isEmpty(): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) color = self.palette().color(QPalette.Highlight) color.setAlpha(127) painter.setBrush(QBrush(color)) color = self.palette().color(QPalette.HighlightedText) color.setAlpha(127) painter.setPen(QPen(color)) size = self.height() / 2.0 left = self.width() - 4 painter.drawRect(left - size, size * 0.5, size, size) painter.drawLine(left - size * 0.75, size * 0.75, left - size * 0.25, size * 1.25) painter.drawLine(left - size * 0.25, size * 0.75, left - size * 0.75, size * 1.25) painter.end() QLabel.paintEvent(self, event) def showEvent(self, event): self.grabKeyboard() class ActionEditorDelegate(QItemDelegate): def __init__(self, parent = None): QItemDelegate.__init__(self, parent) def createEditor(self, parent, option, index): self._edited = index.data().toString() self.editor = ActionEditorWidget(index.data().toString(), parent) self.editor.installEventFilter(self) return self.editor def eventFilter(self, obj, event): if obj == self.editor: if event.type() == QEvent.KeyPress: obj.keyPressEvent(event) if obj.valid: self.emit(SIGNAL("commitData(QWidget *)"), self.editor) self.emit(SIGNAL("closeEditor(QWidget *, QAbstractItemDelegate::EndEditHint)"), self.editor, QItemDelegate.NoHint) return True elif event.type() == QEvent.KeyRelease: obj.keyReleaseEvent(event) if obj.text().isEmpty(): self.emit(SIGNAL("closeEditor(QWidget *, QAbstractItemDelegate::EndEditHint)"), self.editor, QItemDelegate.NoHint) return True elif event.type() == QEvent.MouseButtonPress: obj.mousePressEvent(event) if obj.valid: self.emit(SIGNAL("commitData(QWidget *)"), self.editor) self.emit(SIGNAL("closeEditor(QWidget *, QAbstractItemDelegate::EndEditHint)"), self.editor, QItemDelegate.NoHint) return True return False def paint(self, painter, option, index): if index.column() != 0: QItemDelegate.paint(self, painter, option, index) return painter.fillRect(option.rect, option.palette.brush(QPalette.Base)) painter.setPen(QPen(option.palette.color(QPalette.Text))) painter.drawText(option.rect.adjusted(4, 4, -4, -4), Qt.TextShowMnemonic | Qt.AlignLeft | Qt.AlignVCenter, index.data().toString()) def setEditorData(self, editor, index): editor.setText(index.data().toString()) def setModelData(self, editor, model, index): if editor.text() != self._edited: index.model().edited = True model.setData(index, QVariant(editor.text())) def updateEditorGeometry(self, editor, option, index): editor.setGeometry(option.rect) class ActionEditorDialog(QWidget): # Redefine the tr() function for this class. def tr(self, text): return qApp.translate("ActionEditorDialog", text) def __init__(self, actions, parent=None): super(ActionEditorDialog, self).__init__(parent) self.actions = actions help = QLabel(translate("Shortcut Settings", 'Double click a cell in the Shortcut Column' \ ' to
modify the key sequence.
')) self.actionTable = QTableWidget(self) self.actionTable.setSelectionBehavior(QTableWidget.SelectRows) self.actionTable.setEditTriggers(QTableWidget.DoubleClicked) self.actionTable.setColumnCount(2) self.actionTable.setHorizontalHeaderLabels( [translate("Shortcut Settings", "Description"), translate("Shortcut Settings", "Shortcut")] ) self.actionTable.horizontalHeader().setStretchLastSection(True) self.actionTable.verticalHeader().hide() self.actionTable.setItemDelegate(ActionEditorDelegate(self)) self.connect(self.actionTable, SIGNAL("cellChanged(int, int)"), self.validateAction) row = 0 for action in self.actions: if action.text().isEmpty(): continue self.actionTable.insertRow(self.actionTable.rowCount()) item = QTableWidgetItem() item.setText(action.text()) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) self.actionTable.setItem(row, 0, item) item = QTableWidgetItem() item.setText(action.shortcut().toString()) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsEditable | Qt.ItemIsSelectable) item.oldShortcutText = item.text() self.actionTable.setItem(row, 1, item) row += 1 self.actionTable.resizeColumnsToContents() mainLayout = QVBoxLayout() mainLayout.addWidget(help) mainLayout.setMargin(8) mainLayout.setSpacing(8) mainLayout.addWidget(self.actionTable) self.setLayout(mainLayout) self._model = self.actionTable.model() self._model.edited = False self.actionTable.model().edited = False self.setWindowTitle(translate("Shortcut Settings", "Edit Shortcuts")) def applySettings(self, control=None): if not self._model.edited: return row = 0 for action in self.actions: if not action.text().isEmpty(): action.setText(self.actionTable.item(row, 0).text()) action.setShortcut(QKeySequence(self.actionTable.item(row, 1).text())) row += 1 self.saveSettings(self.actions) self._model.edited = False def _loadSettings(self, actions): cparser = PuddleConfig(os.path.join(SAVEDIR, 'user_shortcuts')) for action in actions: shortcut = cparser.get('shortcuts', unicode(action.text()), '') if shortcut: action.setShortcut(QKeySequence(shortcut)) _loadSettings = classmethod(_loadSettings) def saveSettings(self, actions): cparser = PuddleConfig(os.path.join(SAVEDIR, 'user_shortcuts')) for action in actions: shortcut = unicode(action.shortcut().toString()) cparser.set('shortcuts', unicode(action.text()), shortcut) saveSettings = classmethod(saveSettings) def validateAction(self, row, column): if column != 1: return item = self.actionTable.item(row, column) shortcutText = QKeySequence(item.text()).toString() thisRow = self.actionTable.row(item) if not shortcutText.isEmpty(): for row in range(self.actionTable.rowCount()): if row == thisRow: continue other = self.actionTable.item(row, 1) if other.text() == shortcutText: other.setText(item.oldShortcutText) break item.setText(shortcutText) item.oldShortcutText = shortcutText self.actionTable.resizeColumnToContents(1) if __name__ == '__main__': app = QApplication(sys.argv) #win = ShortcutSettings() #win = EditShortcut('Open', 'Ctrl+O') widget = QWidget() actions = ls.get_actions(widget) ActionEditorDialog._loadSettings(actions) win = ActionEditorDialog(actions) #win.loadSettings(actions) win.show() app.exec_()puddletag-1.0.2/puddlestuff/audio_filter.py0000644000175000001440000001357612020617020021315 0ustar keithusers00000000000000# -*- coding: utf-8 -*- import pdb, sys, logging from pyparsing import * import puddlestuff.findfunc as findfunc import puddlestuff.audioinfo as audioinfo from puddlestuff.util import to_string from puddlestuff.puddleobjects import gettaglist, timemethod import time def str_cmp(a, b): if not isinstance(a, basestring): a = u'\\'.join(a) if not isinstance(b, basestring): b = u'\\'.join(b) return a.lower() == b.lower() FIELDS = set(z.lower() for z in gettaglist()).union(audioinfo.FILETAGS) if len(sys.argv) > 1: logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) def parse_arg(audio, text): if not isinstance(text, basestring): return text if text[0] == u'%' and text[-1] == u'%': return to_string(audio.get(text[1:-1], u'')) elif text in FIELDS: return to_string(audio.get(text, u'')) else: if text[0] == u'"' and text[-1] == u'"': text = text[1:-1] return findfunc.parsefunc(text, audio) return u"" def wrap_nonzero(nonzero): def __nonzero__(self): if hasattr(self, 'args'): self.args = [parse_arg(self.audio, z) for z in self.args] else: self.arg = parse_arg(self.audio, self.arg) return nonzero(self) return __nonzero__ class BoolOperand(object): def __init__(self,t): self.args = t[0][0::2] class BoolAnd(BoolOperand): @wrap_nonzero def __nonzero__(self): logging.debug('and: ' + unicode(self.args)) for a in self.args: if not bool(a): return False return True class BoolOr(BoolOperand): @wrap_nonzero def __nonzero__(self): logging.debug('or: ' + unicode(self.args)) for a in self.args: if bool(a): return True return False class BoolNot(BoolOperand): def __init__(self,t): self.arg = t[0][1] @wrap_nonzero def __nonzero__(self): logging.debug('not: ' + unicode(self.arg)) if isinstance(self.arg, basestring): arg = self.arg.lower() for v in self.audio.values(): if isinstance(v, basestring): v = [v] v = u'\\\\'.join(v).lower() if arg in v: return False return True return not bool(self.arg) class Greater(BoolOperand): @wrap_nonzero def __nonzero__(self): logging.debug('greater: ' + unicode(self.args)) try: self.args = map(float, self.args) except ValueError: pass return self.args[0] > self.args[1] class Less(BoolOperand): @wrap_nonzero def __nonzero__(self): logging.debug('less: ' + unicode(self.args)) try: self.args = map(float, self.args) except ValueError: pass return self.args[0] < self.args[1] class Equal(BoolOperand): @wrap_nonzero def __nonzero__(self): logging.debug('equal: ' + unicode(self.args)) return str_cmp(self.args[0], self.args[1]) class Missing(BoolOperand): def __init__(self, t): self.arg = t[0][1] def __nonzero__(self): logging.debug('missing: ' + unicode(self.arg)) if getattr(self, "audio", None): return not (self.arg in self.audio) return False class Present(BoolOperand): def __init__(self, t): self.arg = t[0][1] def __nonzero__(self): logging.debug('present: ' + unicode(self.arg)) if getattr(self, "audio", None): return (self.arg in self.audio) return False class BoolIs(BoolOperand): @wrap_nonzero def __nonzero__(self): logging.debug('is: ' + unicode(self.args)) return str_cmp(self.args[0], self.args[1]) class Has(BoolOperand): @wrap_nonzero def __nonzero__(self): logging.debug('has: ' + unicode(self.args)) return self.args[1].lower() in self.args[0].lower() bool_exprs = [ (CaselessLiteral("missing"), 1, opAssoc.RIGHT, Missing), (CaselessLiteral("present"), 1, opAssoc.RIGHT, Present), (CaselessLiteral("greater"), 2, opAssoc.LEFT, Greater), (CaselessLiteral("less"), 2, opAssoc.LEFT, Less), (CaselessLiteral("equal"), 2, opAssoc.LEFT, Equal), (CaselessLiteral("has"), 2, opAssoc.LEFT, Has), (CaselessLiteral("is"), 2, opAssoc.LEFT, BoolIs), (CaselessLiteral("and"), 2, opAssoc.LEFT, BoolAnd), (CaselessLiteral("or"), 2, opAssoc.LEFT, BoolOr), (CaselessLiteral("not"), 1, opAssoc.RIGHT, BoolNot), ] field_expr = Combine(u'%' + Word(alphanums + '_') + u'%') tokens = QuotedString('"', unquoteResults=False) \ | field_expr | Word(alphanums + '_') bool_expr = operatorPrecedence(tokens, bool_exprs) bool_expr.enablePackrat() def parse(audio, expr): for i in bool_exprs: i[3].audio = audio res = bool_expr.parseString(expr)[0] if isinstance(res, basestring): res = res.lower() for field, value in audio.items(): if isinstance(value, basestring): value = [value] try: if res in u'\\\\'.join(value).lower(): return True except TypeError: return True else: return bool(res) return False if __name__ == '__main__': audio = audioinfo.Tag('clen.mp3') #parse(audio, "not p") #parse(audio, 'not missing artist') #parse(audio, '7 greater 6') #parse(audio, '%track% greater 14') #parse(audio, '%track% greater "$add($len(%artist%), 50)"') #t = time.time() #parse(audio, '(not missing artist) and (20 greater 19)') #parse(audio, 'not (20 greater 19)') #print time.time() - t #parse(audio, 'not missing artist and 18 greater 19') #parse(audio, 'artist is "Carl Douglas"') #parse(audio, "artist has aarl") #parse(audio, "artist has Carl") import time t = time.time() print audio.filepath print parse(audio, '__filename has clen') puddletag-1.0.2/puddlestuff/puddleobjects.py0000644000175000001440000023634312236751677021527 0ustar keithusers00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ Contains objects used throughout puddletag""" from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtSvg import * import sys, os,pdb,shutil from itertools import groupby # for unique function. from bisect import bisect_left, insort_left # for unique function. from copy import copy import audioinfo from audioinfo import (IMAGETYPES, DESCRIPTION, DATA, IMAGETYPE, DEFAULT_COVER, encode_fn, decode_fn, INFOTAGS) from operator import itemgetter path = os.path from configobj import ConfigObj import traceback import time, re from glob import glob from constants import ACTIONDIR, SAVEDIR from PyQt4.QtCore import QFile, QIODevice from StringIO import StringIO import itertools MSGARGS = (QMessageBox.Warning, QMessageBox.Yes or QMessageBox.Default, QMessageBox.No or QMessageBox.Escape, QMessageBox.YesAll) from functools import partial from puddlestuff.translations import translate # Parameters for string distance function. # Words that can be moved to the end of a string using a comma. SD_END_WORDS = ['the', 'a', 'an'] # Reduced weights for certain portions of the string. SD_PATTERNS = [ (r'^the ', 0.1), (r'[\[\(]?(ep|single)[\]\)]?', 0.0), (r'[\[\(]?(featuring|feat|ft)[\. :].+', 0.1), (r'\(.*?\)', 0.3), (r'\[.*?\]', 0.3), (r'(, )?(pt\.|part) .+', 0.2), ] mod_keys = { Qt.ShiftModifier: u'Shift', Qt.MetaModifier: u'Meta', Qt.AltModifier: u'Alt', Qt.ControlModifier: u'Ctrl', Qt.NoModifier: u'', Qt.KeypadModifier: u'', Qt.GroupSwitchModifier: u'',} def keycmp(a, b): if a == b: return 0 if a == Qt.CTRL: return -1 elif b == Qt.CTRL: return 1 if a == Qt.SHIFT: return -1 elif b == Qt.SHIFT: return 1 if a == Qt.ALT: return -1 elif b == Qt.ALT: return 1 if a == Qt.META: return -1 elif b == Qt.META: return 1 return 0 try: permutations = itertools.permutations except AttributeError: #Using python < 2.6 def permutations(iterable, r=None): # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC # permutations(range(3)) --> 012 021 102 120 201 210 pool = tuple(iterable) n = len(pool) r = n if r is None else r if r > n: return indices = range(n) cycles = range(n, n-r, -1) yield tuple(pool[i] for i in indices[:r]) while n: for i in reversed(range(r)): cycles[i] -= 1 if cycles[i] == 0: indices[i:] = indices[i+1:] + indices[i:i+1] cycles[i] = n - i else: j = cycles[i] indices[i], indices[-j] = indices[-j], indices[i] yield tuple(pool[i] for i in indices[:r]) break else: return modifiers = {} for i in range(1,len(mod_keys)): for keys in set(permutations(mod_keys, i)): mod = keys[0] for key in keys[1:]: mod = mod | key modifiers[int(mod)] = u'+'.join(mod_keys[key] for key in sorted(keys, cmp=keycmp) if mod_keys[key]) mod_keys = set((Qt.Key_Shift, Qt.Key_Control, Qt.Key_Meta, Qt.Key_Alt)) imagetypes = [ (translate('Cover Type', 'Other'), translate("Cover Type", 'O')), (translate('Cover Type', 'File Icon'), translate("Cover Type", 'I')), (translate('Cover Type', 'Other File Icon'), translate("Cover Type", 'OI')), (translate('Cover Type', 'Cover (front)'), translate("Cover Type", 'CF')), (translate('Cover Type', 'Cover (back)'), translate("Cover Type", 'CB')), (translate('Cover Type', 'Leaflet page'), translate("Cover Type", 'LF')), (translate('Cover Type', 'Media (e.g. label side of CD)'), translate("Cover Type", 'M')), (translate('Cover Type', 'Lead artist'), translate("Cover Type", 'LA')), (translate('Cover Type', 'Artist'), translate("Cover Type", 'A')), (translate('Cover Type', 'Conductor'), translate("Cover Type", 'C')), (translate('Cover Type', 'Band'), translate("Cover Type", 'B')), (translate("Cover Type", 'Composer'), translate("Cover Type", 'CP')), (translate("Cover Type", 'Lyricist'), translate("Cover Type", 'L')), (translate("Cover Type", 'Recording Location'), translate("Cover Type", 'RL')), (translate("Cover Type", 'During recording'), translate("Cover Type", 'DR')), (translate("Cover Type", 'During performance'), translate("Cover Type", 'DP')), (translate("Cover Type", 'Movie/video screen capture'), translate("Cover Type", 'MC')), (translate("Cover Type", 'A bright coloured fish'), translate("Cover Type", 'F')), (translate("Cover Type", 'Illustration'), translate("Cover Type", 'P')), (translate("Cover Type", 'Band/artist logotype'), translate("Cover Type", 'BL')), (translate("Cover Type", 'Publisher/Studio logotype'), translate("Cover Type", 'PL'))] def trans_imagetypes(): global imagetypes imagetypes = [ (translate('Cover Type', 'Other'), translate("Cover Type", 'O')), (translate('Cover Type', 'File Icon'), translate("Cover Type", 'I')), (translate('Cover Type', 'Other File Icon'), translate("Cover Type", 'OI')), (translate('Cover Type', 'Cover (front)'), translate("Cover Type", 'CF')), (translate('Cover Type', 'Cover (back)'), translate("Cover Type", 'CB')), (translate('Cover Type', 'Leaflet page'), translate("Cover Type", 'LF')), (translate('Cover Type', 'Media (e.g. label side of CD)'), translate("Cover Type", 'M')), (translate('Cover Type', 'Lead artist'), translate("Cover Type", 'LA')), (translate('Cover Type', 'Artist'), translate("Cover Type", 'A')), (translate('Cover Type', 'Conductor'), translate("Cover Type", 'C')), (translate('Cover Type', 'Band'), translate("Cover Type", 'B')), (translate("Cover Type", 'Composer'), translate("Cover Type", 'CP')), (translate("Cover Type", 'Lyricist'), translate("Cover Type", 'L')), (translate("Cover Type", 'Recording Location'), translate("Cover Type", 'RL')), (translate("Cover Type", 'During recording'), translate("Cover Type", 'DR')), (translate("Cover Type", 'During performance'), translate("Cover Type", 'DP')), (translate("Cover Type", 'Movie/video screen capture'), translate("Cover Type", 'MC')), (translate("Cover Type", 'A bright coloured fish'), translate("Cover Type", 'F')), (translate("Cover Type", 'Illustration'), translate("Cover Type", 'P')), (translate("Cover Type", 'Band/artist logotype'), translate("Cover Type", 'BL')), (translate("Cover Type", 'Publisher/Studio logotype'), translate("Cover Type", 'PL'))] class CoverButton(QPushButton): def __init__(self, *args): QPushButton.__init__(self, *args) menu = QMenu(self) triggered = SIGNAL('triggered()') def create(title, short, index): text = u'[%s] %s' % (short, title) action = QAction(text, self) self.connect(action, triggered, lambda: self.setCurrentIndex(index)) return action actions = [create(title, short, index) for index, (title, short) in enumerate(imagetypes)] map(menu.addAction, actions) self.setMenu(menu) self.setCurrentIndex(3) def setCurrentIndex(self, index): try: self.setText(imagetypes[index][1]) except IndexError: self.setText(imagetypes[DEFAULT_COVER][1]) self.emit(SIGNAL('currentIndexChanged (int)'), index) self._index = index def currentIndex(self): return self._index class PuddleConfig(object): """Module that allows you to values from INI config files, similar to Qt's Settings module (Created it because PyQt4.4.3 has problems with saving and loading lists. Only two functions of interest: get -> load a key from a specified section set -> save a key section""" def __init__(self, filename = None): self.settings = ConfigObj(filename, create_empty=True, encoding='utf8') if not filename: filename = os.path.join(os.getenv('HOME'),'.puddletag', 'puddletag.conf') self._setFilename(filename) #TODO: backward compatibility, remove all. self.setSection = self.set self.load = self.get def get(self, section, key, default, getint = False): settings = self.settings try: if isinstance(default, bool): if self.settings[section][key] == 'True': return True return False elif getint or isinstance(default, (long,int)): try: return int(self.settings[section][key]) except TypeError: return [int(z) for z in self.settings[section][key]] else: val = self.settings[section][key] if val is None: return default return val except KeyError: return default def set(self, section = None, key = None, value = None): settings = self.settings if section in self.settings: settings[section][key] = value else: settings[section] = {} settings[section][key] = value settings.write() def _setFilename(self, filename): dirname = os.path.dirname(filename) if not os.path.exists(dirname): os.makedirs(dirname) self.settings.filename = filename self.savedir = dirname self.settings.reload() def _getFilename(self): return self.settings.filename def sections(self): return self.settings.keys() filename = property(_getFilename, _setFilename) def _setupsaves(func): filename = os.path.join(PuddleConfig().savedir, 'windowsizes') settings = QSettings(filename, QSettings.IniFormat) return lambda x, y: func(x, y, settings) @_setupsaves def savewinsize(name, dialog, settings): settings.setValue(name, QVariant(dialog.saveGeometry())) @_setupsaves def winsettings(name, dialog, settings): dialog.restoreGeometry(settings.value(name).toByteArray()) cevent = dialog.closeEvent def closeEvent(self, event=None): savewinsize(name, dialog) if event is None: cevent(self) else: cevent(event) setattr(dialog, 'closeEvent', closeEvent) #Next three functions from beets: http://code.google.com/p/beets def _levenshtein(s1, s2): """A nice DP edit distance implementation from Wikibooks: http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/ Levenshtein_distance#Python """ if len(s1) < len(s2): return _levenshtein(s2, s1) if not s1: return len(s2) previous_row = xrange(len(s2) + 1) for i, c1 in enumerate(s1): current_row = [i + 1] for j, c2 in enumerate(s2): insertions = previous_row[j + 1] + 1 deletions = current_row[j] + 1 substitutions = previous_row[j] + (c1 != c2) current_row.append(min(insertions, deletions, substitutions)) previous_row = current_row return previous_row[-1] def _string_dist_basic(str1, str2): """Basic edit distance between two strings, ignoring non-alphanumeric characters and case. Normalized by string length. """ str1 = re.sub(r'[^a-z0-9]', '', str1.lower()) str2 = re.sub(r'[^a-z0-9]', '', str2.lower()) if not str1 and not str2: return 0.0 return _levenshtein(str1, str2) / float(max(len(str1), len(str2))) def ratio(str1, str2): """Gives an "intuitive" edit distance between two strings. This is an edit distance, normalized by the string length, with a number of tweaks that reflect intuition about text. """ str1 = str1.lower() str2 = str2.lower() # Don't penalize strings that move certain words to the end. For # example, "the something" should be considered equal to # "something, the". for word in SD_END_WORDS: if str1.endswith(', %s' % word): str1 = '%s %s' % (word, str1[:-len(word)-2]) if str2.endswith(', %s' % word): str2 = '%s %s' % (word, str2[:-len(word)-2]) # Change the weight for certain string portions matched by a set # of regular expressions. We gradually change the strings and build # up penalties associated with parts of the string that were # deleted. base_dist = _string_dist_basic(str1, str2) penalty = 0.0 for pat, weight in SD_PATTERNS: # Get strings that drop the pattern. case_str1 = re.sub(pat, '', str1) case_str2 = re.sub(pat, '', str2) if case_str1 != str1 or case_str2 != str2: # If the pattern was present (i.e., it is deleted in the # the current case), recalculate the distances for the # modified strings. case_dist = _string_dist_basic(case_str1, case_str2) case_delta = max(0.0, base_dist - case_dist) if case_delta == 0.0: continue # Shift our baseline strings down (to avoid rematching the # same part of the string) and add a scaled distance # amount to the penalties. str1 = case_str1 str2 = case_str2 base_dist = case_dist penalty += weight * case_delta dist = base_dist + penalty return 1 - dist dirlevels = lambda a: len(a.split('/')) def removeslash(x): while x.endswith('/'): return removeslash(x[:-1]) return x def create_buddy(text, control, box=None): label = QLabel(text) label.setBuddy(control) if not box: box = QHBoxLayout() elif box is True: box = QVBoxLayout() box.addWidget(label) box.addWidget(control, 1) return box def dircmp(a, b): """Compare function to sort directories via parent. So that the child is renamed before parent, thereby not giving Permission Denied errors.""" a, b = removeslash(a), removeslash(b) if a == b: return 0 elif a in b and (dirlevels(a) != dirlevels(b)): return 1 elif b in a and (dirlevels(a) != dirlevels(b)): return -1 elif len(a) > len(b): return 1 elif len(b) > len(a): return -1 elif len(b) == len(a): return 0 def dircmp1(a, b): """Like dircmp, but returns dirs as being in the same directory as equal.""" a,b = removeslash(a), removeslash(b) if a == b or (dirlevels(a) == dirlevels(b)): return 0 elif a in b: return 1 elif b in a: return -1 else: return 0 def issubfolder(parent, child, level = 1): parent, child = removeslash(parent), removeslash(child) if isinstance(parent, unicode): sep = unicode(os.path.sep) else: sep = os.path.sep if level is not None: if child.startswith(parent + sep) and dirlevels(parent) + level == dirlevels(child): return True return False else: if child.startswith(parent + sep) and dirlevels(parent) < dirlevels(child): return True return False HORIZONTAL = 1 VERTICAL = 0 def get_icon(name, backup): if not name and not backup: return QIcon() elif not name and backup: return QIcon(backup) try: return QIcon.fromTheme(name, QIcon(backup)) except AttributeError: return QIcon(backup) def get_languages(dirs=None): files = [] if dirs is not None: for d in dirs: files.extend(glob(os.path.join(d, "*.qm"))) d = QDir(':/') if d.cd('translations'): files.extend([os.path.join(u':/translations', t) for t in map(unicode, d.entryList('*.qm'))]) ret = {} get_name = lambda s: os.path.splitext(os.path.basename(s))[0] for f in files: ts_name = get_name(f) if ts_name.startswith('puddletag_'): ret[ts_name[len('puddletag_'):]] = f else: ret[ts_name] = f return ret def singleerror(parent, msg): QMessageBox.warning(parent, 'Error', msg, QMessageBox.Ok, QMessageBox.NoButton) def errormsg(parent, msg, maximum): """Shows a messagebox containing an error message indicating that writing to filename has failed and asks the user to continue, stop, or continue without interruption. error is the error that caused the disruption. single is the number of files that are being written. If it is 1, then just a warningMessage is shown. Returns: True if yes to all. False if No. None if just yes.""" if maximum > 1: mb = QMessageBox(translate("Defaults", 'Error'), msg + translate("Defaults", "
Do you want to continue?"), *(MSGARGS + (parent, ))) ret = mb.exec_() if ret == QMessageBox.No: return False elif ret == QMessageBox.YesAll: return True else: singleerror(parent, msg) def safe_name(name, chars=r'/\*?"|:', to=None): """Make a filename safe for use (remove some special chars) If any special chars are found they are replaced by to.""" if not to: to = "" else: to = unicode(to) escaped = "" for ch in name: if ch not in chars: escaped = escaped + ch else: escaped = escaped + to if not escaped: return '""' return escaped def unique(seq, stable = False): """unique(seq, stable=False): return a list of the elements in seq in arbitrary order, but without duplicates. If stable=True it keeps the original element order (using slower algorithms).""" # Developed from Tim Peters version: # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52560 #if uniqueDebug and len(str(seq))<50: print "Input:", seq # For debugging. # Special case of an empty s: if not seq: return [] # if it's a set: if isinstance(seq, set): return list(seq) if stable: # Try with a set: seqSet= set() result = [] try: for e in seq: if e not in seqSet: result.append(e) seqSet.add(e) except TypeError: pass # move on to the next method else: #if uniqueDebug: print "Stable, set." return result # Since you can't hash all elements, use a bisection on sorted elements result = [] sortedElem = [] try: for elem in seq: pos = bisect_left(sortedElem, elem) if pos >= len(sortedElem) or sortedElem[pos] != elem: insort_left(sortedElem, elem) result.append(elem) except TypeError: pass # Move on to the next method else: #if uniqueDebug: print "Stable, bisect." return result else: # Not stable # Try using a set first, because it's the fastest and it usually works try: u = set(seq) except TypeError: pass # move on to the next method else: #if uniqueDebug: print "Unstable, set." return list(u) # Elements can't be hashed, so bring equal items together with a sort and # remove them out in a single pass. try: t = sorted(seq) except TypeError: pass # Move on to the next method else: #if uniqueDebug: print "Unstable, sorted." return [elem for elem,group in groupby(t)] # Brute force: result = [] for elem in seq: if elem not in result: result.append(elem) #if uniqueDebug: print "Brute force (" + ("Unstable","Stable")[stable] + ")." return result class compare: "Natural sorting class." def try_int(self, s): "Convert to integer if possible." try: return int(s) except: return s def natsort_key(self, s): "Used internally to get a tuple by which s is sorted." return map(self.try_int, re.findall(r'(\d+|\D+)', s)) def natcmp(self, a, b): "Natural string comparison, case sensitive." return cmp(self.natsort_key(a), self.natsort_key(b)) def natcasecmp(self, a, b): "Natural string comparison, ignores case." return self.natcmp(u"".join(a).lower(), u"".join(b).lower()) natcasecmp = compare().natcasecmp def dupes(l, method = None): if method is None: method = lambda a,b: int(a==b) l = [{'key': z, 'index': i} for i, z in enumerate(l)] chars = chars=r'/\*?;"|:\'' strings = sorted([(safe_name(z['key'].lower(), chars, ''), z['index']) for z in l if z['key'] is not None]) try: last = strings[0][0] except IndexError: return [] groups = [[0]] for z, i in strings[1:]: if z is not None: val = method(last, z) if val >= 0.85: groups[-1].append(i) else: last = z groups.append([i]) return [z for z in groups if len(z) > 1] def getfiles(files, subfolders = False): if isinstance(files, basestring): files = [files] isdir = os.path.isdir join = os.path.join temp = [] if not subfolders: for f in files: if not isdir(f): yield f else: dirname, subs, fnames = os.walk(f).next() for fname in fnames: yield join(dirname, fname) else: for f in files: if not isdir(f): yield f else: for dirname, subs, fnames in os.walk(f): for fname in fnames: yield join(dirname, fname) for sub in subs: for fname in getfiles(join(dirname, sub), subfolders): pass def gettags(files): return (gettag(audio) for audio in files) def gettag(f): try: return audioinfo.Tag(f) except: print u'An error occured.' print f traceback.print_exc() return def translate_filename_pattern(pat): """Translate a shell PATTERN to a regular expression. There is no way to quote meta-characters. """ #from fnmatch.py with slight modification pat = pat.strip() i, n = 0, len(pat) res = '' while i < n: c = pat[i] i = i+1 if c == '*': res = res + '.*' elif c == '?': res = res + '.' elif c == '[': j = i if j < n and pat[j] == '!': j = j+1 if j < n and pat[j] == ']': j = j+1 while j < n and pat[j] != ']': j = j+1 if j >= n: res = res + '\\[' else: stuff = pat[i:j].replace('\\','\\\\') i = j+1 if stuff[0] == '!': stuff = '^' + stuff[1:] elif stuff[0] == '^': stuff = '\\' + stuff res = '%s[%s]' % (res, stuff) else: res = res + re.escape(c) #return res + '\Z(?ms)' return res + '\Z' def fnmatch(pattern, files, matchcase=False): regexp = u'|'.join(map(translate_filename_pattern, [z.strip() for z in pattern.split(u';')])) if matchcase: match = re.compile(regexp).match else: match = re.compile(regexp, re.I).match return filter(match, files) def gettaglist(): cparser = PuddleConfig() filename = os.path.join(cparser.savedir, 'usertags') try: lines = sorted(set([z.strip().decode('utf8') for z in open(filename, 'r').read().split('\n')])) except (IOError, OSError): lines = audioinfo.FIELDS[::] return lines def settaglist(tags): cparser = PuddleConfig() filename = os.path.join(cparser.savedir, 'usertags') f = open(filename, 'w') text = u'\n'.join(sorted([z for z in tags if not z.startswith('__')])) text = text.encode('utf8') f.write(text) f.close() def load_actions(): import findfunc basename = os.path.basename funcs = {} cparser = PuddleConfig() set_value = partial(cparser.set, 'puddleactions') get_value = partial(cparser.get, 'puddleactions') firstrun = get_value('firstrun', True) set_value('firstrun', False) convert = get_value('convert', True) order = get_value('order', []) if convert: set_value('convert', False) findfunc.convert_actions(SAVEDIR, ACTIONDIR) if order: old_order = dict([(basename(z), i) for i,z in enumerate(order)]) files = glob(os.path.join(ACTIONDIR, u'*.action')) order = {} for f in files: try: order[old_order[basename(f)]] = f except KeyError: pass order = [z[1] for z in sorted(order.items())] set_value('order', order) files = glob(os.path.join(ACTIONDIR, u'*.action')) if firstrun and not files: filenames = [':/caseconversion.action', ':/standard.action'] files = map(open_resourcefile, filenames) set_value('firstrun', False) for fileobj, filename in zip(files, filenames): filename = os.path.join(ACTIONDIR, filename[2:]) f = open(filename, 'w') f.write(fileobj.read()) f.close() files = glob(os.path.join(ACTIONDIR, u'*.action')) files = [z for z in order if z in files] + \ [z for z in files if z not in order] funcs = [] for f in files: action = findfunc.load_macro_info(f) funcs.append([action[0], action[1], f]) return funcs def open_resourcefile(filename): f = QFile(filename) f.open(QIODevice.ReadOnly) return StringIO(f.readAll()) def progress(func, pstring, maximum, threadfin = None): """To be used for functions that need a threaded progressbar. Note that this function will only (and is meant to) work on dialogs. func is the function that will be run by the thread. It should yield None while successful. Otherwise it should yield an errormsg and the number of files (this'll be used when calling errormsg). pstring is the progress message. This is shown with the number of times func yielded a value. For instance, pstring = 'Loading... ', and maximum = 20 will show 'Loading... 1 of 20', 'Loading... 2 of 20', etc.on the progress bar. maximum is the maximum value of the progessbar. threadfin is the function to run when the thread has finished. Usually for cleanup stuff. Note that the function returns a function that expects a parent for the progess window as the first argument. This with the rest of the arguments passed to the returned function are used when calling func (except in the case where only the parent argument is passed). """ def s(*args): focused = QApplication.focusWidget() if focused: focusedpar = focused.parentWidget() else: focusedpar = None parent = args[0] if maximum > 1: win = ProgressWin(parent, maximum, pstring) win.show() if len(args) > 1: f = func(*args) else: f = func() if maximum == 1: errors = f.next() if errors and \ not isinstance(errors, (QString, int, long, basestring)): errormsg(parent, errors[0], 1) if threadfin: threadfin() return parent.showmessage = True def threadfunc(): i = 0 err = False while not win.wasCanceled: try: temp = f.next() if isinstance(temp, (QString, str, unicode)): thread.emit(SIGNAL('message(QString)'), QString(temp)) elif isinstance(temp, (int, long)): thread.emit(SIGNAL('set_max(int)'), temp) elif temp is not None: thread.emit(SIGNAL('error(QString, int)'), temp[0], temp[1]) err = True break else: thread.emit(SIGNAL('win(int)'), i) except StopIteration: break i += 1 if not err: thread.emit(SIGNAL('win(int)'), -1) def threadexit(*args): if args[0] == -1: win.destroy() QApplication.processEvents() if threadfin: threadfin() if focusedpar is not None: try: focusedpar.setFocus() except RuntimeError: pass return elif isinstance(args[0], QString): if parent.showmessage: ret = errormsg(parent, args[0], maximum) if ret is True: parent.showmessage = False elif ret is False: thread.emit(SIGNAL('win(int)'), -1) return if not win.isVisible(): win.show() while thread.isRunning(): pass thread.start() win.setValue(win.value + 1) def set_message(msg): if msg != win.label.text(): win.label.setText(msg) QApplication.processEvents() def set_max(value): win.pbar.setMaximum(value) thread = PuddleThread(threadfunc, parent) thread.connect(thread, SIGNAL('win(int)'), threadexit) thread.connect(thread, SIGNAL('error(QString, int)'), threadexit) thread.connect(thread, SIGNAL('message(QString)'), set_message) thread.connect(thread, SIGNAL('set_max(int)'), set_max) thread.start() return s def timemethod(method): def f(*args, **kwargs): name = method.__name__ t = time.time() ret = method(*args, **kwargs) print name, time.time() - t return ret return f class HeaderSetting(QDialog): """A dialog that allows you to edit the header of a TagTable widget.""" def __init__(self, tags=None, parent=None, showok=True, showedits=True): QDialog.__init__(self, parent) self.listbox = ListBox() self.tags = [list(z) for z in tags] self.listbox.addItems([z[0] for z in self.tags]) self.vbox = QVBoxLayout() self.vboxgrid = QGridLayout() self.textname = QLineEdit() self.tag = QComboBox() self.tag.addItems(sorted(INFOTAGS) + gettaglist()) self.tag.setEditable(True) self.buttonlist = ListButtons() self.buttonlist.edit.setVisible(False) if showedits: self.vboxgrid.addWidget(QLabel(translate("Column Settings", "Title")),0,0) self.vboxgrid.addWidget(self.textname,0,1) self.vboxgrid.addWidget(QLabel(translate("Defaults", "Field")), 1,0) self.vboxgrid.addWidget(self.tag,1,1) self.vboxgrid.addLayout(self.buttonlist,2,0) else: self.vboxgrid.addLayout(self.buttonlist,1,0) self.vboxgrid.setColumnStretch(0,0) self.vbox.addLayout(self.vboxgrid) self.vbox.addStretch() self.grid = QGridLayout() self.grid.addWidget(self.listbox,1,0) self.grid.addLayout(self.vbox,1,1) self.grid.setColumnStretch(1,1) self.grid.setColumnStretch(0,2) self.connect(self.listbox, SIGNAL("currentItemChanged (QListWidgetItem *,QListWidgetItem *)"), self.fillEdits) self.connect(self.listbox, SIGNAL("itemSelectionChanged()"),self.enableEdits) self.okbuttons = OKCancel() if showok is True: self.grid.addLayout(self.okbuttons, 2,0,1,2) self.setLayout(self.grid) self.connect(self.okbuttons, SIGNAL("ok"), self.okClicked) self.connect(self.okbuttons, SIGNAL("cancel"), self.close) self.connect(self.textname, SIGNAL("textChanged (const QString&)"), self.updateList) self.connect(self.buttonlist, SIGNAL("add"), self.add) self.connect(self.buttonlist, SIGNAL("moveup"), self.moveup) self.connect(self.buttonlist, SIGNAL("movedown"), self.movedown) self.connect(self.buttonlist, SIGNAL("remove"), self.remove) self.connect(self.buttonlist, SIGNAL("duplicate"), self.duplicate) self.listbox.setCurrentRow(0) def enableEdits(self): if len(self.listbox.selectedItems()) > 1: self.textname.setEnabled(False) self.tag.setEnabled(False) return self.textname.setEnabled(True) self.tag.setEnabled(True) def remove(self): if len(self.tags) == 1: return self.disconnect(self.textname, SIGNAL("textChanged (const QString&)"), self.updateList) self.disconnect(self.listbox, SIGNAL("currentItemChanged (QListWidgetItem *,QListWidgetItem *)"), self.fillEdits) self.listbox.removeSelected(self.tags) row = self.listbox.currentRow() #self.listbox.clear() #self.listbox.addItems([z[0] for z in self.tags]) if row == 0: self.listbox.setCurrentRow(0) elif row + 1 < self.listbox.count(): self.listbox.setCurrentRow(row+1) else: self.listbox.setCurrentRow(self.listbox.count() -1) self.fillEdits(self.listbox.currentItem(), None) self.connect(self.textname, SIGNAL("textChanged (const QString&)"), self.updateList) self.connect(self.listbox, SIGNAL("currentItemChanged (QListWidgetItem *,QListWidgetItem *)"), self.fillEdits) def moveup(self): self.listbox.moveUp(self.tags) def movedown(self): self.listbox.moveDown(self.tags) def updateList(self, text): self.listbox.currentItem().setText(text) def fillEdits(self, current, prev): row = self.listbox.row(prev) try: #An error is raised if the last item has just been removed if row > -1: self.tags[row][0] = unicode(self.textname.text()) self.tags[row][1] = unicode(self.tag.currentText()) except IndexError: pass row = self.listbox.row(current) if row > -1: self.textname.setText(self.tags[row][0]) self.tag.setEditText(self.tags[row][1]) def okClicked(self): row = self.listbox.currentRow() if row > -1: self.tags[row][0] = unicode(self.textname.text()) self.tags[row][1] = unicode(self.tag.currentText()) self.emit(SIGNAL("headerChanged"),[z for z in self.tags]) self.close() def add(self): row = self.listbox.count() self.tags.append(["",""]) self.listbox.addItem("") self.listbox.clearSelection() self.listbox.setCurrentRow(row) self.textname.setFocus() def duplicate(self): row = self.listbox.currentRow() if row < 0: return tag = self.tags[row][::] self.tags.append(tag) self.listbox.addItem(tag[0]) self.listbox.clearSelection() self.listbox.setCurrentRow(self.listbox.count() - 1) self.textname.setFocus() class ListBox(QListWidget): """Puddletag's replacement of QListWidget, because removing, moving and deleting items in a listbox is done a lot. First the modifier methods. removeSelected, moveUp and moveDown each does as the name implies. See docstrings for more info. connectToListButtons -> connects removeSelected etc. to the respective buttons in a ListButtons object. Attributes: editButton -> Set this to a button or control which will be enabled only when a single item is selected. yourlist -> The list that will be used in removeSelected et al, if None is passed when calling the function..""" def __init__(self, parent = None): QListWidget.__init__(self, parent) self.yourlist = None self.editButton = None self.setSelectionMode(self.ExtendedSelection) def items(self): return map(self.item, xrange(self.count())) def selectionChanged(self, selected, deselected): if self.editButton: if len(self.selectedItems()) == 1: self.editButton.setEnabled(True) else: self.editButton.setEnabled(False) QListWidget.selectionChanged(self, selected, deselected) def connectToListButtons(self, listbuttons, yourlist = None): """Connect the moveUp, moveDown and removeSelected to the moveup, movedown and remove signals of listbuttons and sets the editButton. yourlist is used a the argument in these functions if no other yourlist is passed.""" self.editButton = listbuttons.edit self.connect(listbuttons, SIGNAL('moveup'), self.moveUp) self.connect(listbuttons, SIGNAL('movedown'), self.moveDown) self.connect(listbuttons, SIGNAL('remove'), self.removeSelected) self.yourlist = yourlist def removeSelected(self, yourlist = None, rows = None): """Removes the currently selected items. If yourlist is not None, then the selected items are removed for yourlist also. Note, that the indexes of the items in yourlist and the listbox have to correspond. If you want to remove anything other than the selected, just set rows to a list of integers.""" if not yourlist: yourlist = self.yourlist if rows: rows = sorted(rows) else: rows = sorted([self.row(item) for item in self.selectedItems()]) for i in range(len(rows)): self.takeItem(rows[i]) if yourlist: try: del(yourlist[rows[i]]) except (KeyError, IndexError): "The list doesn't have enough items or something" rows = [z - 1 for z in rows] def moveUp(self, yourlist = None, rows = None): """Moves the currently selected items up one place. If yourlist is not None, then the indexes of yourlist are updated in tandem. Note, that the indexes of the items in yourlist and the listbox have to correspond.""" if not rows: rows = [self.row(item) for item in self.selectedItems()] rows = sorted(rows) if not yourlist: yourlist = self.yourlist currentrow = self.currentRow() - 1 if 0 in rows: return [self.setItemSelected(item, False) for item in self.selectedItems()] for i in range(len(rows)): row = rows[i] item = self.takeItem(row) self.insertItem(row - 1, item) if yourlist: temp = copy(yourlist[row - 1]) yourlist[row - 1] = yourlist[row] yourlist[row] = temp [self.setItemSelected(self.item(row - 1), True) for row in rows] self.setCurrentRow(currentrow) def moveDown(self, yourlist = None, rows = None): """See moveup. It's exactly the opposite.""" if rows is None: rows = [self.row(item) for item in self.selectedItems()] if self.count() - 1 in rows: return [self.setItemSelected(item, False) for item in self.selectedItems()] if not yourlist: yourlist = self.yourlist rows = sorted(rows) lastindex = rows[0] groups = {lastindex:[lastindex]} lastrow = lastindex for row in rows[1:]: if row - 1 == lastindex: groups[lastrow].append(row) else: groups[row] = [row] lastrow = row lastindex = row for group in groups: item = self.takeItem(group + len(groups[group])) if yourlist: temp = copy(yourlist[group + len(groups[group])]) for index in reversed(groups[group]): yourlist[index + 1] = copy(yourlist[index]) yourlist[group] = temp self.insertItem(group, item) [self.setItemSelected(self.item(row + 1), True) for row in rows] def selectedItems(self): return filter(lambda item: item.isSelected(), map(self.item, xrange(self.count()))) class ListButtons(QVBoxLayout): """A Layout that contains five buttons usually associated with listboxes. They are add, edit, movedown, moveup and remove. Each button, when clicked sends signal with the buttons name. e.g. add sends SIGNAL("add"). You can find them all in the widgets attribute.""" def __init__(self, parent = None): QVBoxLayout.__init__(self, parent) self.add = QToolButton() self.add.setIcon(get_icon('list-add', ':/filenew.png')) self.add.setToolTip(translate("List Buttons", 'Add')) self.remove = QToolButton() self.remove.setIcon(get_icon('list-remove', ':/remove.png')) self.remove.setToolTip(translate("List Buttons", 'Remove')) self.remove.setShortcut('Delete') self.moveup = QToolButton() self.moveup.setArrowType(Qt.UpArrow) self.moveup.setToolTip(translate("List Buttons", 'Move Up')) self.movedown = QToolButton() self.movedown.setArrowType(Qt.DownArrow) self.movedown.setToolTip(translate("List Buttons", 'Move Down')) self.edit = QToolButton() self.edit.setIcon(get_icon('document-edit', ':/edit.png')) self.edit.setToolTip(translate("List Buttons", 'Edit')) self.duplicate = QToolButton() self.duplicate.setIcon(get_icon('edit-copy', ':/duplicate.png')) self.duplicate.setToolTip(translate("List Buttons", 'Duplicate')) self.widgets = [self.add, self.edit, self.duplicate, self.remove, self.moveup, self.movedown] [self.addWidget(widget) for widget in self.widgets] self.insertStretch(4) self.insertSpacing(4,6) [z.setIconSize(QSize(16,16)) for z in self.widgets] self.addStretch() clicked = SIGNAL("clicked()") self.connect(self.add, clicked, self.addClicked) self.connect(self.remove, clicked, self.removeClicked) self.connect(self.moveup, clicked, self.moveupClicked) self.connect(self.movedown, clicked, self.movedownClicked) self.connect(self.edit, clicked, self.editClicked) self.connect(self.duplicate, clicked, self.duplicateClicked) def connectToWidget(self, widget, add=None, edit=None, remove=None, moveup=None, movedown=None, duplicate=None): l = ['add', 'edit', 'remove'] if moveup: l.append('moveup') if movedown: l.append('movedown') if duplicate: l.append('duplicate') connections = dict([(z,v) for z,v in zip(l, [add, edit, remove, moveup, movedown, duplicate]) if v]) connect = lambda a: self.connect(self, SIGNAL(a), connections[a] if a in connections else getattr(widget, a)) map(connect, l) def addClicked(self): self.emit(SIGNAL("add")) def setEnabled(self, value): [w.setEnabled(value) for w in self.widgets] super(ListButtons, self).setEnabled(value) def removeClicked(self): self.emit(SIGNAL("remove")) def moveupClicked(self): self.emit(SIGNAL("moveup")) def movedownClicked(self): self.emit(SIGNAL("movedown")) def editClicked(self): self.emit(SIGNAL("edit")) def duplicateClicked(self): self.emit(SIGNAL('duplicate')) class MoveButtons(QWidget): def __init__(self, arrayname, index = 0, orientation = HORIZONTAL, parent = None): QWidget.__init__(self, parent) self.next = QPushButton(translate("List Buttons", '&>>')) self.prev = QPushButton(translate("List Buttons", '&<<')) if orientation == VERTICAL: box = QVBoxLayout() box.addWidget(self.next, 0) box.addWidget(self.prev, 0) else: box = QHBoxLayout() box.addWidget(self.prev) box.addWidget(self.next) self.arrayname = arrayname self.setLayout(box) self.index = index self.connect(self.next, SIGNAL('clicked()'), self.nextClicked) self.connect(self.prev, SIGNAL('clicked()'), self.prevClicked) def _setCurrentIndex(self, index): try: if index >= len(self.arrayname) or index < 0: return else: self._currentindex = index if self._currentindex >= len(self.arrayname) - 1: self.next.setEnabled(False) else: self.next.setEnabled(True) if self._currentindex <= 0: self.prev.setEnabled(False) else: self.prev.setEnabled(True) except TypeError: "Probably arrayname is None or something." self.prev.setEnabled(False) self.next.setEnabled(False) if (not self.prev.isEnabled()) and (not self.next.isEnabled()): self.prev.hide() self.next.hide() else: self.prev.show() self.next.show() self.emit(SIGNAL('indexChanged'), index) def _getCurrentIndex(self): return self._currentindex index = property(_getCurrentIndex, _setCurrentIndex) def nextClicked(self): self.index += 1 def prevClicked(self): self.index -= 1 def updateButtons(self): self.index = self.index class OKCancel(QHBoxLayout): """Yes, I know about QDialogButtonBox, but I'm not using PyQt4.2 here.""" def __init__(self, parent = None): QHBoxLayout.__init__(self, parent) #QDialogButtonBox.__init__(self, parent) #self.addStretch() dbox = QDialogButtonBox() self.ok = dbox.addButton(dbox.Ok) self.cancel = dbox.addButton(dbox.Cancel) self.addStretch() self.addWidget(dbox) self.ok.setText(translate('Defaults', 'OK')) self.cancel.setText(translate('Defaults', 'Cancel')) #self.cancel = QPushButton("&Cancel") #self.ok.setDefault(True) #self.addWidget(self.ok) #self.addWidget(self.cancel) self.connect(self.ok, SIGNAL("clicked()"), self.yes) self.connect(self.cancel, SIGNAL("clicked()"), self.no) def yes(self): self.emit(SIGNAL("ok")) def no(self): self.emit(SIGNAL("cancel")) class LongInfoMessage(QDialog): def __init__(self, title, question, html, parent =None): QDialog.__init__(self, parent) winsettings('infomessage', self) question = QLabel(question) text = QTextEdit() text.setReadOnly(True) #text.setWordWrapMode(QTextOption.NoWrap) text.setHtml(html) okcancel = OKCancel() self.connect(okcancel, SIGNAL('ok'), self._ok) self.connect(okcancel, SIGNAL('cancel'), self.close) vbox = QVBoxLayout() self.setWindowTitle(title) vbox.addWidget(question) vbox.addWidget(text) vbox.addLayout(okcancel) self.setLayout(vbox) def _ok(self): self.close() self.accept() class ArtworkLabel(QGraphicsView): def __init__(self, *args, **kwargs): super(ArtworkLabel, self).__init__(*args, **kwargs) pal = self.palette() pal.setBrush(self.backgroundRole(), QBrush(QPalette.Window)) self.setAutoFillBackground(True) self.setPalette(pal) self._svg = QGraphicsSvgItem() self._pixmap = QGraphicsPixmapItem() self._pixmap.setTransformationMode(Qt.SmoothTransformation) self._scene = QGraphicsScene() self._scene.addItem(self._svg) self._scene.addItem(self._pixmap) self._shown_pixmap = None self.setScene(self._scene) self.setSceneRect(QRectF()) self.setAcceptDrops(True) def dragEnterEvent(self, event): mime = event.mimeData() if mime.hasUrls(): event.accept() else: event.ignore() def dragMoveEvent(self, event): if event.mimeData().hasUrls(): event.accept() else: event.ignore() def dropEvent(self, event): mime = event.mimeData() if mime.hasUrls(): filenames = [unicode(z.toString()) for z in mime.urls()] self.emit(SIGNAL('newImages'), *filenames) super(ArtworkLabel, self).dropEvent(event) def mousePressEvent(self, event): super(ArtworkLabel, self).mousePressEvent(event) if event.buttons() == Qt.LeftButton: self.emit(SIGNAL('clicked()')) def resizeEvent(self, event=None): if event is not None: super(ArtworkLabel, self).resizeEvent(event) if self._svg.isVisible(): item = self._svg else: item = self._pixmap self.setSceneRect(item.boundingRect()) self.fitInView(item, Qt.KeepAspectRatio) def setPixmap(self, pixmap, data=None): if isinstance(pixmap, str): renderer = QSvgRenderer (QByteArray(pixmap), self._svg) self._svg.setSharedRenderer(renderer) self._pixmap.setVisible(False) self._svg.setVisible(True) else: self._data = data self._pixmap.setPixmap(pixmap) self._svg.setVisible(False) self._pixmap.setVisible(True) self.resizeEvent() class PicWidget(QWidget): """A widget that shows a file's pictures. images is a list of mutagen.id3.APIC objects. It allows the user to edit, save and delete whichever picture the user wants, by right-clicking on it. In addition, there are buttons to browse through all the pictures. Some important attributes are: currentImage -> The index of the current image maxImage -> Shows the current image fullsized. setImages -> Guess addImage -> Guess again...but it also shows and open file dialog. removeImage -> Removes the current image. next and prevImage -> Moves to the next and previous image. saveToFile -> Save the current image to file. showbuttons -> If True, the >> and << buttons are always shown. If False, they are shown depending on context.""" def __init__ (self, images = None, imagetags = None, parent = None, readonly = None, buttons = False): """Initialises the widget. images -> A list of images as described in the classes docstring. parent -> Qt parent readonly -> indexes of images that are readonly. Can be changed by modifying the readonly attribute. buttons -> If True, then the Add, Edit, etc. Buttons are shown. If False, then these functions can be found by right clicking on the picture.""" self._contextFormat = translate("Artwork Context", '%1/%2') QWidget.__init__(self, parent) self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.sizePolicy().setVerticalStretch(0) self.sizePolicy().setHorizontalStretch(3) self.lastfilename = u'~' self.currentFile = None self.filePattern = u'folder.jpg' #The picture. self.label = ArtworkLabel() self.label.setFrameStyle(QFrame.Box) #self.label.setMargin(10) self.label.setMinimumSize(200, 170) if buttons: self.label.setMaximumSize(200, 170) self._itags = [] #else: #self.setMaximumSize(400,400) self.label.setAlignment(Qt.AlignCenter) self.connect(self.label, SIGNAL('newImages'), lambda *filenames: self.addImages(self.loadPics(*filenames))) #self.label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) #Description and picture type shit. self._image_desc = QLineEdit(self) self._image_desc.setPlaceholderText(translate("Artwork", 'Enter a description')) self._image_desc.setToolTip( translate("Artwork", '

Enter a description for the current cover.

' '

For ID3 tags the description has to be different for each ' "cover as per the ID3 spec. If they don't differ then spaces " 'are appended to the description when the tag is saved.

')) self.connect(self._image_desc, SIGNAL('textEdited (const QString&)'), self.setDescription) controls = QVBoxLayout() if buttons: dbox = QVBoxLayout() label = QLabel(translate("Artwork", '&Description')) label.setBuddy(self._image_desc) dbox.addWidget(label) dbox.addWidget(self._image_desc) controls.addLayout(dbox) self._image_type = QComboBox(self) self._image_type.addItems(IMAGETYPES) dbox = QVBoxLayout() label = QLabel(translate("Artwork", '&Type')) label.setBuddy(self._image_type) dbox.addWidget(label) dbox.addWidget(self._image_type) controls.addLayout(dbox) else: self._image_type = CoverButton(self) hbox = QHBoxLayout() hbox.addWidget(self._image_desc, 1) hbox.addWidget(self._image_type) controls.addLayout(hbox) self._image_type.setToolTip( translate("Artwork", '

Select a cover type for the artwork.

')) self.connect(self._image_type, SIGNAL('currentIndexChanged (int)'), self.setType) self.showbuttons = True if not readonly: readonly = [] self.readonly = readonly self.next = QToolButton() self.next.setArrowType(Qt.RightArrow) self.prev = QToolButton() self.prev.setArrowType(Qt.LeftArrow) self.connect(self.next, SIGNAL('clicked()'), self.nextImage) self.connect(self.prev, SIGNAL('clicked()'), self.prevImage) self._contextlabel = QLabel() self._contextlabel.setVisible(False) if buttons: movebuttons = QHBoxLayout() movebuttons.addStretch() movebuttons.addWidget(self.prev) movebuttons.addWidget(self.next) movebuttons.addWidget(self._contextlabel) movebuttons.addStretch() else: self.next.setArrowType(Qt.UpArrow) self.prev.setArrowType(Qt.DownArrow) movebuttons = QVBoxLayout() movebuttons.addStretch() movebuttons.addWidget(self.next) movebuttons.addWidget(self.prev) movebuttons.addStretch() vbox = QVBoxLayout() h = QHBoxLayout(); h.addStretch(); h.addWidget(self.label,1) if not buttons: h.addLayout(movebuttons) context_box = QHBoxLayout() context_box.setAlignment(Qt.AlignHCenter) context_box.addWidget(self._contextlabel) vbox.addLayout(context_box) h.addStretch() vbox.addLayout(h) vbox.setMargin(0) vbox.addLayout(controls) if buttons: vbox.addLayout(movebuttons) vbox.setAlignment(Qt.AlignCenter) self.connect(self.label, SIGNAL('clicked()'), self.maxImage) hbox = QHBoxLayout() hbox.addLayout(vbox) hbox.addStrut(12) hbox.setSizeConstraint(hbox.SetMinAndMaxSize) self.setLayout(hbox) if buttons: listbuttons = ListButtons() listbuttons.duplicate.hide() self.addpic = listbuttons.add self.removepic = listbuttons.remove self.editpic = listbuttons.edit self.savepic = QToolButton() self.savepic.setIcon(QIcon(':/save.png')) self.savepic.setIconSize(QSize(16,16)) listbuttons.insertWidget(3,self.savepic) listbuttons.moveup.hide() listbuttons.movedown.hide() signal = SIGNAL('clicked()') hbox.addLayout(listbuttons) else: self.label.setContextMenuPolicy(Qt.ActionsContextMenu) self.savepic = QAction(translate("Artwork", "&Save cover to file"), self) self.label.addAction(self.savepic) self.addpic = QAction(translate("Artwork", "&Add cover"), self) self.label.addAction(self.addpic) self.removepic = QAction(translate("Artwork", "&Remove cover"), self) self.label.addAction(self.removepic) self.editpic = QAction(translate("Artwork", "&Change cover"), self) self.label.addAction(self.editpic) signal = SIGNAL('triggered()') self.connect(self.addpic, signal, self.addImage) self.connect(self.removepic, signal, self.removeImage) self.edit = partial(self.addImage, True) self.connect(self.editpic, signal, self.edit) self.connect(self.savepic, signal, self.saveToFile) self.win = PicWin(parent = self) self._currentImage = -1 if not images: images = [] if not imagetags: imagetags = [] self.setImages(images, imagetags) self._lastdata = None def _setContext(self, text): if not text: self._contextlabel.setVisible(False) self._contextlabel.setText('') else: self._contextlabel.setText(translate("Artwork Context", text)) self._contextlabel.setVisible(True) def _getContext(self): return self._contextlabel.text() context = property(_getContext, _setContext) def setDescription(self, text): '''Sets the description of the current image to the text in the description text box.''' self.images[self.currentImage]['description'] = unicode(text) self.emit(SIGNAL('imageChanged')) def setType(self, index): """Like setDescription, but for imagetype""" try: self.images[self.currentImage]['imagetype'] = index self.emit(SIGNAL('imageChanged')) except IndexError: pass def addImage(self, edit = False, filename = None): """Adds an image from the given filename to self.images. If a filename is not given, then an open file dialog is shown. If edit is True, then the current image is changed.""" if not filename: default_fn = os.path.join( os.path.dirname(self.lastfilename), 'folder.jpg') default_fn = QString.fromLocal8Bit(default_fn) filedlg = QFileDialog() filename = unicode(filedlg.getOpenFileName(self, translate("Artwork", 'Select Image...'), default_fn, translate("Artwork", "JPEG & PNG Images (*.jpg *.jpeg *.png);;JPEG Images (*.jpg *.jpeg);;PNG Images (*.png);;All Files(*.*)"))) if not filename: return self.lastfilename = filename pic = self.loadPics(filename) if pic: pic = pic[0] if edit and self.images: self.images[self.currentImage].update(pic) self.currentImage = self.currentImage else: if not self.images: self.setImages([pic]) else: self.images.append(pic) self.currentImage = len(self.images) - 1 self.emit(SIGNAL('imageChanged')) def addImages(self, images): if not self._itags or not images: return if self.images: index = len(self.images) self.images.extend(images) self.currentImage = index else: self.setImages(images) self.emit(SIGNAL('imageChanged')) def close(self): self.win.close() QWidget.close(self) def enableButtons(self): """Enables or disables buttons depending on context. With < 1 image in self.images, they're hidden unless overidden by self.showbuttons.""" if not self.images: self.next.setEnabled(False) self.prev.setEnabled(False) else: if self.currentImage >= len(self.images) - 1: self.next.setEnabled(False) else: self.next.setEnabled(True) if self.currentImage <= 0: self.prev.setEnabled(False) else: self.prev.setEnabled(True) if not self.showbuttons and not self.next.isEnabled() and not self.prev.isEnabled(): self.next.hide() self.prev.hide() else: self.next.show() self.prev.show() def _getCurrentImage(self): return self._currentImage def _setCurrentImage(self, num): while True: #A lot of files have corrupt picture data. I just want to #skip those and not have the user be any wiser. try: data = self.images[num]['data'] except IndexError: self.setNone() return if data.startswith(' -1: filedlg = QFileDialog() filename = filedlg.getSaveFileName(self, translate("Artwork", 'Save artwork as...'), QString.fromLocal8Bit(tempfilename), translate("Artwork", "JPEG Images (*.jpg);;PNG Images (*.png);;All Files(*.*)")) if not filename: return filt = unicode(filedlg.selectedNameFilter()) if not self.pixmap.save(filename): QMessageBox.critical(self, translate("Defaults", 'Error'), translate("Artwork", 'Writing to %1 failed.').arg(filename)) def setNone(self): self.label.setFrameStyle(QFrame.Box) self.label.setPixmap(QPixmap()) self.pixmap = None self.images = [] self._image_desc.setEnabled(False) self._image_type.setEnabled(False) [action.setEnabled(False) for action in (self.editpic, self.savepic, self.removepic)] self.context = u'No Images' self._lastdata = None def setImages(self, images, imagetags = None, default=0): """Sets images. images are dictionaries as described in the class docstring.""" if imagetags: self.setImageTags(imagetags) if images: self.images = images self.currentImage = default else: self.setNone() self.enableButtons() def removeImage(self): """Removes the current image.""" if len(self.images) >= 1: del(self.images[self.currentImage]) if self.currentImage >= len(self.images) - 1 and self.currentImage > 0: self.currentImage = len(self.images) - 1 else: self.currentImage = self.currentImage self.emit(SIGNAL('imageChanged')) def loadPics(self, *filenames): """Loads pictures from the filenames""" #I really need to sort out these circular references. from puddlestuff.tagsources import RetrievalError, urlopen images = [] for filename in filenames: image = QImage() if filename.startswith(":/"): ba = QByteArray() data = QBuffer(ba) data.open(QIODevice.WriteOnly) image.save(data, "JPG") data = str(data.data()) else: try: data = urlopen(filename) except (ValueError, RetrievalError): try: data = open(filename, 'r').read() except EnvironmentError: continue if image.loadFromData(data): pic = {'data': data, 'height': image.height(), 'width': image.width(), 'size': len(data), 'mime': 'image/jpeg', 'description': translate("Artwork", 'Enter description'), 'imagetype': 3} images.append(pic) return images def picsFromData(self, *data): images = [] for d in data: image = QImage().fromData(d) pic = {'data': d, 'height': image.height(), 'width': image.width(), 'size': len(data), 'mime': 'image/jpeg', 'description': translate("Artwork", 'Enter description'), 'imagetype': 3} images.append(pic) return images def setImageTags(self, itags): tags = {DESCRIPTION: self._image_desc.setEnabled, DATA: self.label.setEnabled, IMAGETYPE: self._image_type.setEnabled} self.enableButtons() if not itags: self.addpic.setEnabled(False) else: self.addpic.setEnabled(True) for z in itags: try: tags[z](True) except KeyError: pass others = [z for z in tags if z not in itags] if len(others) == len(tags): self.next.setEnabled(False) self.prev.setEnabled(False) for z in others: tags[z](False) self._itags = itags class PicWin(QDialog): """A windows that shows an image.""" def __init__(self, pixmap = None, parent = None): """Loads the image specified in QPixmap pixmap. If picture is clicked, the window closes. If you don't want to load an image when the class is created, let pixmap = None and call setImage later.""" QDialog.__init__(self, parent) self.setWindowTitle(QApplication.translate('Dialogs', 'Album Art')) self.label = ArtworkLabel() vbox = QVBoxLayout() vbox.setMargin(0) vbox.addWidget(self.label) self.setLayout(vbox) if pixmap is not None: self.setImage(pixmap) self.connect(self.label, SIGNAL('clicked()'), self.close) def setImage(self, pixmap): maxsize = QDesktopWidget().availableGeometry().size() self.label.setPixmap(pixmap) if hasattr(pixmap, 'size'): size = pixmap.size() res = u": %sx%s" % (size.width(), size.height()) self.setWindowTitle(self.windowTitle() + res) if size.height() < maxsize.height() and size.width() < maxsize.width(): self.setMinimumSize(size) self.setMaximumSize(size) else: self.setMaximumSize(maxsize) else: self.setMaximumSize(maxsize) class ProgressWin(QDialog): def __init__(self, parent=None, maximum = 100, progresstext = '', showcancel = True): QDialog.__init__(self, parent) self._infunc = False self._cached = 0 self.setModal(True) self.setWindowTitle(translate("Progress Dialog", "Please Wait...")) self._format = translate("Progress Dialog", '%1%2 of %3...') self.ptext = progresstext self.pbar = QProgressBar(self) self.pbar.setRange(0, maximum) self.label = QLabel() self.label.setAlignment(Qt.AlignHCenter) if maximum <= 0: self.pbar.setTextVisible(False) if not progresstext: self.label.setVisible(False) else: self.label.setText(progresstext) self.ptext = u'' cancel = QPushButton(translate("Defaults", 'Cancel')) cbox = QHBoxLayout() cbox.addStretch() cbox.addWidget(cancel) cancel.setVisible(showcancel) vbox = QVBoxLayout() vbox.addWidget(self.label) vbox.addWidget(self.pbar) vbox.addLayout(cbox) self.setLayout(vbox) self.wasCanceled = False self.connect(self, SIGNAL('rejected()'), self.cancel) self.connect(cancel, SIGNAL('clicked()'), self.cancel) if maximum > 0: self.setValue(1) else: self._timer = QTimer(self) self._timer.setInterval(100) def update(): self.setValue(self.pbar.value() + 1) self.connect(self._timer, SIGNAL('timeout()'), update) if maximum <= 0: self._timer.start() def setValue(self, value): if self._infunc: return self._infunc = True if self.ptext: self.pbar.setTextVisible(False) self.label.setText(self._format.arg(self.ptext ).arg(value).arg(self.pbar.maximum())) self.pbar.setValue(value) self._infunc = False if self.pbar.maximum() and value >= self.pbar.maximum(): self.close() def cancel(self): self.wasCanceled = True self.emit(SIGNAL('canceled()')) self.close() def closeEvent(self, event): if hasattr(self, '_timer'): self._timer.stop() super(ProgressWin, self).closeEvent(event) def _value(self): return self.pbar.value() value = property(_value) class PuddleCombo(QWidget): def __init__(self, name, default = None, parent = None): QWidget.__init__(self, parent) hbox = QHBoxLayout() hbox.setMargin(0) self.combo = QComboBox() self.combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self.remove = QToolButton() self.remove.setIcon(get_icon('list-remove', ':/remove.png')) self.remove.setToolTip(translate("Combo Box", 'Remove current item.')) self.remove.setIconSize(QSize(13, 13)) self.connect(self.remove, SIGNAL('clicked()'), (self.removeCurrent)) hbox.addWidget(self.combo) hbox.addWidget(self.remove) self.setLayout(hbox) self.combo.setEditable(True) self.setEditText = self.combo.setEditText self.currentText = self.combo.currentText self.name = name cparser = PuddleConfig() self.filename = os.path.join(os.path.dirname(cparser.filename), 'combos') if not default: default = [] cparser.filename = self.filename items = cparser.load(self.name, 'values', default) newitems = [] [newitems.append(z) for z in items if z not in newitems] self.combo.addItems(newitems) self.connect(self.combo, SIGNAL('editTextChanged(const QString&)'), self._editTextChanged) def load(self, name = None, default = None): if name: self.name = name if not default: default = [] self.combo.clear() cparser = PuddleConfig(self.filename) self.combo.addItems(cparser.load(self.name, 'values', default)) def save(self): values = [unicode(self.combo.itemText(index)) for index in xrange(self.combo.count())] values.append(unicode(self.combo.currentText())) cparser = PuddleConfig(self.filename) cparser.setSection(self.name, 'values', values) def removeCurrent(self): self.combo.removeItem(self.combo.currentIndex()) def _editTextChanged(self, text): self.emit(SIGNAL('editTextChanged(const QString&)'), text) def closeEvent(self, event): QWidget.closeEvent(self, event) self.save() class PuddleDock(QDockWidget): """A normal QDockWidget that emits a 'visibilitychanged' signal when...uhm...it changes visibility.""" _controls = {} def __init__(self, title, control=None, parent=None, status=None): QDockWidget.__init__(self, translate("Dialogs", title), parent) self.title = title if control: control = control(status=status) self.setObjectName(title) self._control = control self._controls.update({title: control}) self.setWidget(control) def setVisible(self, visible): QDockWidget.setVisible(self, visible) self.emit(SIGNAL('visibilitychanged'), visible) class PuddleHeader(QHeaderView): def __init__(self, orientation = Qt.Horizontal, parent = None): if parent: super(PuddleHeader, self).__init__(orientation, parent) else: super(PuddleHeader, self).__init__() self.setSortIndicatorShown(True) self.setSortIndicator(0, Qt.AscendingOrder) self.setMovable(True) self.setClickable(True) def getMenu(self, actions = None): model = self.model() def create_action(section): title = model.headerData(section, self.orientation()).toString() action = QAction(title, self) action.setCheckable(True) def change_visibility(value): if value: self.showSection(section) else: self.hideSection(section) if self.isSectionHidden(section): action.setChecked(False) else: action.setChecked(True) self.connect(action, SIGNAL('toggled(bool)'), change_visibility) return action header_actions = [create_action(section) for section in range(self.count())] menu = QMenu(self) if actions: [menu.addAction(a) for a in actions] menu.addSeperator() [menu.addAction(a) for a in header_actions] return menu def contextMenuEvent(self, event): menu = self.getMenu() menu.exec_(event.globalPos()) class PuddleStatus(object): _status = {} def __init__(self): object.__init__(self) def __setitem__(self, name, val): self._status[name] = val def __getitem__(self, name): x = self._status.get(name) if callable(x): return x() return x class PuddleThread(QThread): """puddletag rudimentary threading. pass a command to run in another thread. The result is stored in retval.""" def __init__(self, command, parent = None): QThread.__init__(self, parent) self.connect(self, SIGNAL('finished()'), self._finish) self.command = command self.retval = None def run(self): #print 'thread', self.command, time.time() try: self.retval = self.command() except StopIteration: self.retval = 'STOP' def _finish(self): if hasattr(self, 'retval'): self.emit(SIGNAL('threadfinished'), self.retval) else: self.emit(SIGNAL('threadfinished'), None) class ShortcutEditor(QLineEdit): def __init__(self, shortcuts=None, *args, **kwargs): QLineEdit.__init__(self, *args, **kwargs) winsettings('shortcutcapture', self) self.key = "" self.modifiers = {} self._valid = False if shortcuts is None: shortcuts = [] self._shortcuts = shortcuts def clear(self): super(ShortcutEditor, self).clear() self.valid = False def keyPressEvent(self, event): text = u'' if event.modifiers(): text = modifiers[int(event.modifiers())] if event.key() not in mod_keys: if text: text += u'+' + unicode(QKeySequence(event.key()).toString()) else: text = unicode(QKeySequence(event.key()).toString()) if text and text not in self._shortcuts: valid = True else: valid = False else: valid = False self.setText(text) self.valid = valid def _getValid(self): return self._valid def _setValid(self, value): self._valid = value self.emit(SIGNAL('validityChanged'), value) valid = property(_getValid, _setValid) if __name__ == '__main__': class MainWin(QDialog): def __init__(self, parent = None): QDialog.__init__(self, parent) self.combo = PuddleCombo('patterncombo', [u'%artist% - $num(%track%, 2) - %title%', u'%artist% - %title%', u'%artist% - %album%', u'%artist% - Track %track%', u'%artist% - %title%', u'%artist%']) hbox = QHBoxLayout() hbox.addWidget(self.combo) self.setLayout(hbox) def closeEvent(self,e): self.combo.save() QDialog.closeEvent(self, e) app = QApplication(sys.argv) widget = MainWin() widget.show() app.exec_() puddletag-1.0.2/puddlestuff/translations.py0000644000175000001440000002505412170511246021373 0ustar keithusers00000000000000# -*- coding: utf-8 -*- from PyQt4.QtGui import QApplication import re class UnicodeMod(unicode): """Emulates the arg method of QStrings. Not meant for use anywhere other than the translate function above.""" def arg(self, value): matches = [z for z in re.finditer("%(\d+)", self)] if not matches: print 'Undefined result for arg.' return UnicodeMod(self[::]) elif len(matches) == 1: lowest = matches[0] else: lowest = sorted(matches, key=lambda m: m.groups())[0] text = lowest.group() if isinstance(text, str): text = text.decode('utf8', 'replace') if isinstance(value, str): value = value.decode('utf8', 'replace') elif isinstance(value, (int, long)): value = unicode(value) return UnicodeMod(self.replace(lowest.group(), value)) def __add__(self, other): return UnicodeMod(unicode.__add__(self, other)) def __radd__(self, other): return UnicodeMod(other.__add__(unicode(self))) def __mod__(self, other): return UnicodeMod(unicode.__mod__(self, other)) def __format__(self, fmt=None): return UnicodeMod(unicode.__format__(self, fmt)) def __getitem__(self, item): return UnicodeMod(unicode.__getitem__(self, item)) def __rmul__(self, v): return UnicodeMod(unicode.__rmul__(self, v)) def __mul__(self, v): return UnicodeMod(unicode.__mul__(self, v)) def translate(k,v): if isinstance(v, str): v = v.decode('utf8', 'replace') return UnicodeMod(QApplication.translate(k,v)) def dont_execute(): #General Translations translate("GenSettings", 'Su&bfolders') translate("GenSettings", 'Show &gridlines') translate("GenSettings", 'Show tooltips in file-view:') translate("GenSettings", 'Show &row numbers') translate("GenSettings", 'Automatically resize columns to contents') translate("GenSettings", '&Preserve file modification times') translate("GenSettings", 'Program to &play files with:') translate("GenSettings", '&Load last folder at startup') #Artwork translate("Artwork Context", 'Cover Varies') translate("Artwork Context", 'No Images') #Menus translate("Menus", 'Enabl&e Preview Mode') translate("Menus", 'Clear Selected &Files') translate("Menus", '&Write Previews') translate("Menus", '&Undo Last Clear') translate("Menus", 'Sort &By') translate("Menus", 'Clear Selected &Cells') translate("Menus", "&Plugins") translate("Menus", "Sort &By") translate("Menus", "&Open Folder") translate("Menus", "Select a directory to import into puddletag.") translate("Menus", "&Add Folder") translate("Menus", "Append a directory to current file-view.") translate("Menus", "Load &playlist") translate("Menus", "Import an m3u playlist into puddletag.") translate("Menus", "Sa&ve playlist") translate("Menus", "Save all files to m3u playlist.") translate("Menus", "&Refresh") translate("Menus", "Refresh current file-view.") translate("Menus", "&Save") translate("Menus", "&Play") translate("Menus", "Plays the selected files in the predefined music player.") translate("Menus", "&File->Tag") translate("Menus", "Convert filename to tag using the pattern.") translate("Menus", "&Undo") translate("Menus", "Autonumbering &Wizard...") translate("Menus", "&Unload Everything") translate("Menus", "&Format") translate("Menus", "&Text File->Tag") translate("Menus", "&Import Music Library...") translate("Menus", "&Actions") translate("Menus", "&Preferences") translate("Menus", "&Functions") translate("Menus", "&QuickActions") translate("Menus", "&Rename Directories") translate("Menus", "&Exit") translate("Menus", "&Tag->File") translate("Menus", "&Increase Font") translate("Menus", "&Decrease Font") translate("Menus", "&Clipboard->Tag") translate("Menus", "Select &All") translate("Menus", "&Invert Selection") translate("Menus", "&Select Column") translate("Menus", "&Cut") translate("Menus", "&Copy Selection") translate("Menus", "&Paste") translate("Menus", "&Remove Tag") translate("Menus", "E&xtended Tags") translate("Menus", "&Delete") translate("Menus", "&Properties") translate("Menus", "Paste &Onto Selection") translate("Menus", "&Lock Layout") translate("Menus", "Select &Next Directory") translate("Menus", "Copy All &Fields") translate("Menus", "Delete &Without Confirmation") translate("Menus", "In &Library") translate("Menus", "Replace...") translate("Menus", "Remove &APEv2 Tag") translate("Menus", "Remove All &ID3 Tags") translate("Menus", "Move Selected &Up") translate("Menus", "Move Selected Do&wn") translate("Menus", "Select &Previous Directory") translate("Menus", "Select all files belonging to the directories of those selected. Otherwise (if only a single directory is selected) selects all the files in the previous directory.") translate("Menus", "Remove ID3v&2 Tag") translate("Menus", "Remove ID3v&1 Tag") translate("Menus", "Refresh &Selected") translate("Menus", "Reloads directories of selected files.") translate("Menus", "&File") translate("Menus", "&Edit") translate("Menus", "&Convert") translate("Menus", "&Actions") translate("Menus", "&Tools") translate("Menus", "&Preview Mode") translate("Menus", "Ta&g Tools") translate("Menus", "&Windows") #Functions translate("Functions", "Tag->File: $1") translate("Functions", "Tag to filename") translate("Functions", "&Pattern") translate("Functions", "Replace $0: '$1' -> '$2', Match Case: $3, Words Only: $4") translate("Functions", "Replace") translate("Functions", "&Replace") translate("Functions", "w&ith:") translate("Functions", "Match c&ase:") translate("Functions", "only as &whole word") translate("Functions", "Update from $2, Fields: $1") translate("Functions", "Update from tag") translate("Functions", "&Field list (; separated):") translate("Functions", "&Tag") translate("Functions", "APEv2") translate("Functions", "ID3") translate("Functions", "Trim $0") translate("Functions", "Trim whitespace") translate("Functions", "RegReplace $0: RegExp '$1' with '$2', Match Case: $3") translate("Functions", "Replace with RegExp") translate("Functions", "&Regular Expression") translate("Functions", "Replace &matches with:") translate("Functions", "Match &Case") translate("Functions", "Export Art: pattern='$1'") translate("Functions", "Export artwork to file") translate("Functions", "&Pattern (extension not required)") translate("Functions", "folder_%img_counter%") translate("Functions", "Autonumbering: $0, Start: $1, Restart for dir: $2, Padding: $3") translate("Functions", "Autonumbering") translate("Functions", "oi") translate("Functions", "1") translate("Functions", "aoeu") translate("Functions", "False") translate("Functions", "au") translate("Functions", "1") translate("Functions", "Sort $0, order='$1', Match Case='$2'") translate("Functions", "Sort values") translate("Functions", "&Order") translate("Functions", "Ascending") translate("Functions", "Descending") translate("Functions", "Match &Case") translate("Functions", "Tag->Dir: $1") translate("Functions", "Tag to Dir") translate("Functions", "&Pattern (can be relative path)") translate("Functions", "%artist% - %album%") translate("Functions", "Format $0 using $1") translate("Functions", "Format value") translate("Functions", "&Format string") translate("Functions", "Artwork: Filenames='$1', Description='$2', Case Sensitive=$3") translate("Functions", "Load Artwork") translate("Functions", "&Filenames to check (;-separated, shell wildcards [eg. *] allowed)") translate("Functions", "&Default description (can be pattern):") translate("Functions", "Match filename's &case:") translate("Functions", "Merge field: $0, sep='$1'") translate("Functions", "Merge field") translate("Functions", "&Separator") translate("Functions", ";") translate("Functions", "Remove Dupes: $0, Match Case $1") translate("Functions", "Remove duplicate values") translate("Functions", "Match &Case") translate("Functions", "Text File: $0, '$1'") translate("Functions", "Import text file") translate("Functions", "&Pattern (can be relative path)") translate("Functions", "lyrics.txt") translate("Functions", "Remove fields except: $1") translate("Functions", "Remove all fields except") translate("Functions", "&Field list (; separated):") translate("Functions", "") translate("Functions", " $0") translate("Functions", "Remove Fields") translate("Functions", "Convert Case: $0: $1") translate("Functions", "Case conversion") translate("Functions", "&Type") translate("Functions", "Mixed Case") translate("Functions", "UPPER CASE") translate("Functions", "lower case") translate("Functions", "For &Mixed Case, after any of:") translate("Functions", "., !") translate("Functions", "Convert to encoding: $0, Encoding: $1") translate("Functions", "Convert from non-standard encoding") translate("Functions", "&Encoding") translate("Functions", "cp1250") translate("Functions", "cp1251") translate("Functions", "cp1252") translate("Functions", "cp1253") translate("Functions", "cp1254") translate("Functions", "cp1255") translate("Functions", "cp1256") translate("Functions", "cp1257") translate("Functions", "cp1258") translate("Functions", "Text to Tag: $0 -> $1, $2") translate("Functions", "Text to Tag") translate("Functions", "&Text") translate("Functions", "&Pattern") translate("Functions", "&Output") translate("Functions", "Split using separator $0: sep='$1'") translate("Functions", "Split fields using separator") translate("Functions", "&Separator") translate("Functions", ";") translate("Functions", "File->Tag '$1'") translate("Functions", "Filename to Tag") translate("Functions", "&Pattern") #Dialogs translate("Dialogs", "Tag Panel") translate("Dialogs", "Artwork") translate("Dialogs", "Filesystem") translate("Dialogs", "Filter") translate("Dialogs", "Tag Sources") translate("Dialogs", "Stored Tags") translate("Dialogs", "Logs") translate("Dialogs", "Mass Tagging") translate("Dialogs", "Functions") translate("Dialogs", "Actions") puddletag-1.0.2/puddlestuff/about.py0000755000175000001440000001023312016762314017763 0ustar keithusers00000000000000# -*- coding: utf-8 -*- import sys, os, unittest, time, pdb, shutil from os import path from PyQt4.QtCore import * from PyQt4.QtGui import * import cPickle as pickle import mutagen, pyparsing, puddlestuff from puddlestuff.puddleobjects import OKCancel import puddlestuff.resource from puddlestuff.translations import translate desc = translate("About", '''puddletag is an audio tag editor for GNU/Linux similar to the Windows program Mp3tag.

Features include: Batch editing of tags, renaming files using tags, retrieving tags from filenames, using Actions to automate repetitive tasks, importing your music library and loads of other awesome stuff.

Supported formats: id3v1, id3v2 (.mp3), AAC (.mp4, .m4a), VorbisComments (.ogg, .flac) and APEv2 (.ape)
< br /> Visit the puddletag website (
http://puddletag.sourceforge.net) for help and updates.

© 2008-2012 concentricpuddle (concentricpuddle@gmail.com)
Licensed under GPLv3 (www.gnu.org/licenses/gpl-3.0.html). ''') thanks = translate("About", """Evan Devetzis for his many, many awesome ideas and putting up with more bugs than humanly possible.

First off, a big thanks to **Evan Devetzis** for working tirelessly in helping me make puddletag better by contributing many, many awesome ideas and for being a great bug hunter. Thanks to Raphaël Rochet, Fabian Bakkum, Alan Gomes and others for contributing translations. To the writers of the libraries puddletag depends on (without which I'll probably still be writing an id3 reader).

Paul McGuire for PyParsing.
Michael Urman and Joe Wreschnig for Mutagen (It. Is. Awesome).
Phil Thomson and everyone responsible for PyQt4.
Michael Foord and Nicola Larosa for ConfigObj (seriously, they should replace ConfigParser with this).
The Oxygen team for the Oxygen icons. """) class ScrollLabel(QWidget): def __init__(self, text, alignment = Qt.AlignCenter, parent=None): QWidget.__init__(self, parent) vbox = QVBoxLayout() self.setLayout(vbox) label = QLabel(text) label.setTextFormat(Qt.RichText) label.setAlignment(alignment) label.setWordWrap(True) label.setTextInteractionFlags(Qt.TextBrowserInteraction) sa = QScrollArea() sa.setWidget(label) sa.setWidgetResizable(True) vbox.addWidget(sa) self.label = label class AboutPuddletag(QDialog): def __init__(self, parent=None): QDialog.__init__(self, parent) self.setWindowTitle(translate("About", 'About puddletag')) icon = QLabel() icon.setPixmap(QPixmap(':/appicon.png').scaled(48,48)) lib_versions = ', '.join(['PyQt %s' % PYQT_VERSION_STR, 'Mutagen %s' % mutagen.version_string, 'Pyparsing %s' %pyparsing.__version__]) if puddlestuff.changeset: version = translate("About", '

puddletag %1 (Changeset %2)

%3') version = version.arg(puddlestuff.version_string) version = version.arg(puddlestuff.changeset).arg(lib_versions) else: version = translate("About", '

puddletag %1

%2') version = version.arg(puddlestuff.version_string) version = version.arg(lib_versions) label = QLabel(version) tab = QTabWidget() tab.addTab(ScrollLabel(desc), translate('About', '&About')) tab.addTab(ScrollLabel(thanks, Qt.AlignLeft), translate('About', '&Thanks')) vbox = QVBoxLayout() version_layout = QHBoxLayout() version_layout.addWidget(icon) version_layout.addWidget(label, 1) vbox.addLayout(version_layout) vbox.addWidget(tab, 1) ok = OKCancel() ok.cancel.setVisible(False) vbox.addLayout(ok) self.connect(ok, SIGNAL('ok'), self.close) self.setLayout(vbox) if __name__ == '__main__': app = QApplication([]) win = AboutPuddletag() win.show() app.exec_()puddletag-1.0.2/puddlestuff/libraries/0000755000175000001440000000000012236755734020265 5ustar keithusers00000000000000puddletag-1.0.2/puddlestuff/libraries/__init__.py0000644000175000001440000000042511612773575022377 0ustar keithusers00000000000000# -*- coding: utf-8 -*- from os.path import join, dirname from os import listdir from fnmatch import fnmatch import traceback, os, imp, sys, pdb dirpath = dirname(__file__) __all__ = [f[:-3] for f in listdir(dirpath) if fnmatch(f, '*.py') and f != '__init__.py'] puddletag-1.0.2/puddlestuff/libraries/quodlibetlib.py0000755000175000001440000003254711627234403023320 0ustar keithusers00000000000000# -*- coding: utf-8 -*- import sys import os, time, pdb, traceback import cPickle as pickle from collections import defaultdict from functools import partial from PyQt4.QtCore import * from PyQt4.QtGui import * import quodlibet.config from quodlibet.parse import Query import puddlestuff.audioinfo as audioinfo from puddlestuff.audioinfo.tag_versions import tags_in_file from puddlestuff.audioinfo.util import (del_deco, fn_hash, getdeco, isempty, keys_deco, lngfrequency, lnglength, lngtime, set_total, setdeco, stringtags, strlength, unicode_list, CaselessDict, MockTag) from puddlestuff.constants import HOMEDIR from puddlestuff.musiclib import MusicLibError from puddlestuff.util import to_string, translate model_tag = audioinfo.model_tag ATTRIBUTES = ['length', 'accessed', 'size', 'created', 'modified', 'filetype'] def strbitrate(bitrate): """Returns a string representation of bitrate in kb/s.""" return unicode(bitrate/1000) + u' kb/s' def strtime(seconds): """Converts UNIX time(in seconds) to more Human Readable format.""" return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(seconds)) time_fields = ['~#added', '~#lastplayed', '~#laststarted'] timefunc = lambda key: lambda value : {'__%s' % key[2:]: strtime(value)} mapping = dict([(key, timefunc(key)) for key in time_fields]) mapping.update({ 'tracknumber': lambda value: {'track': [value]}, '~#bitrate' : lambda value: {'__bitrate': strbitrate(value)}, '~#length': lambda value: {'__length': strlength(value)}, '~#playcount': lambda value: {'playcount': [unicode(value)]}, '~#rating': lambda value: {'rating': [unicode(value)]}, '~#skipcount': lambda value: {'__skipcount': [unicode(value)]}, '~mountpoint': lambda value: {'__mountpoint': value}, '~#mtime': lambda value : {'__modified': strtime(value)}, '~picture': lambda value: {'__picture': value}, }) time_fields = ['__added', '__lastplayed', '__laststarted',] timefunc = lambda key: lambda value : {'~#%s' % key[2:]: lngtime(value)} revmapping = dict([(key, timefunc(key)) for key in time_fields]) revmapping.update({ 'track': lambda value: {'tracknumber': value}, '__bitrate' : lambda value: {'~#bitrate': lngfrequency(value)}, '__length': lambda value: {'~#length': lnglength(value)}, 'playcount': lambda value: {'~#playcount': int(value)}, 'rating': lambda value: {'~#rating': float(value)}, '__skipcount': lambda value: {'~#skipcount': int(value)}, '__mountpoint': lambda value: {'~mountpoint': value}, '__modified': lambda value : {'~#mtime': lngtime(value)}, '__picture': lambda value: {'~picture': to_string(value)}, }) class Tag(MockTag): """Use as base for all tag classes.""" mapping = audioinfo.mapping.get('puddletag', {}) revmapping = audioinfo.revmapping.get('puddletag', {}) IMAGETAGS = () def __init__(self, libclass, libtags): MockTag.__init__(self) self.__tags = CaselessDict() tags = self.__tags tags.update(self.load(libtags['~filename'])[0]) tags['__tag_read'] = u'QuodLibet' self.library = libclass self.remove = partial(libclass.delete, track=libtags) self._libtags = libtags for key, value in libtags.items(): if not value and not isinstance(value, (int, long)): continue if key in mapping: tags.update(mapping[key](value)) else: if not isinstance(value, unicode): #Strings try: value = unicode(value, 'utf8', 'replace') except (TypeError, ValueError): try: value = unicode(value) #Usually numbers except: traceback.print_exc() continue tags[key] = [value] del(tags['~filename']) self.filepath = libtags['~filename'] self.set_attrs(ATTRIBUTES, self.__tags) self.update_tag_list() def get_filepath(self): return MockTag.get_filepath(self) def set_filepath(self, val): self.__tags.update(MockTag.set_filepath(self, val)) filepath = property(get_filepath, set_filepath) images = property(lambda s: [], lambda s: []) def __contains__(self, key): if self.revmapping: key = self.revmapping.get(key, key) return key in self.__tags def __deepcopy__(self, memo=None): tag = Tag(self._libclass, self._libtags) tag.update(deepcopy(self.__tags)) return tag @del_deco def __delitem__(self, key): if key.startswith('__'): return else: if key == 'track': del(self._libtags['tracknumber']) del(self.__tags['track']) else: if key in self._libtags: del(self._libtags[key]) del(self.__tags[key]) @getdeco def __getitem__(self, key): return self.__tags[key] @setdeco def __setitem__(self, key, value): if key.startswith('__'): if key == '__total': set_total(self, value) elif key in fn_hash: setattr(self, fn_hash[key], value) elif isempty(value): if key in self: del(self[key]) else: return else: self.__tags[key] = unicode_list(value) def delete(self): raise NotImplementedError @keys_deco def keys(self): return self.__tags.keys() def save(self, justrename = False): libtags = self._libtags tags = self.__tags newartist = to_string(tags.get('artist', [u''])) oldartist = libtags.get('artist', u'') newalbum = to_string(tags.get('album', [u''])) oldalbum = libtags.get('album', u'') self._libtags.update(self._tolibformat()) self._libtags.write() if (newartist != oldartist) or (newalbum != oldalbum): self.library.update(oldartist, oldalbum, libtags) self.library.edited = True self.update_tag_list() def _tolibformat(self): libtags = {} tags = stringtags(self.__tags).items() for key, value in tags: if key in revmapping: libtags.update(revmapping[key](value)) elif key.startswith('__'): continue else: libtags[key] = value libtags['~filename'] = self.filepath return libtags def update_tag_list(self): l = tags_in_file(self.filepath) if l: self.__tags['__tag'] = u'QuodLibet, ' + u', '.join(l) else: self.__tags['__tag'] = u'QuodLibet' Tag = audioinfo.model_tag(Tag) class QuodLibet(object): def __init__(self, filepath): self.edited = False self._tracks = pickle.load(open(filepath, 'rb')) try: quodlibet.config.init() except ValueError: pass self._filepath = filepath cached = defaultdict(lambda: defaultdict(lambda: [])) for track in self._tracks: cached[track.get('artist', u'')][track.get('album', u'') ].append(track) self._cached = cached def get_tracks(self, maintag, mainval, secondary=None, secvalue=None): exists = lambda t: os.path.exists(t['~filename']) if secondary and secvalue: if secondary == 'album' and maintag == 'artist': tracks = (Tag(self, track) for track in self._cached[mainval][secvalue] if exists(track)) return filter(None, tracks) else: def getvalue(track): if (track.get(maintag) == mainval) and ( track.get(secondary) == secvalue): return Tag(self, track) else: if maintag == 'artist': tracks = [] [tracks.extend(z) for z in self._cached[mainval].values()] return [Tag(self, track) for track in tracks if exists(track)] def getvalue(track): if track.get(maintag) == mainval: return Tag(self, track) return filter(getvalue, self._tracks) def distinct_values(self, field): return set([track.get(field, u'') for track in self._tracks]) def distinct_children(self, parent, value, child): return set([track.get(child, u'') for track in self._tracks if track.get(parent, u'') == value]) def _artists(self): return self._cached.keys() artists = property(_artists) def get_albums(self, artist): return self._cached[artist].keys() def save(self): if not self.edited: return filepath = self._filepath + u'.puddletag' pickle.dump(self._tracks, open(filepath, 'wb')) os.rename(self._filepath, self._filepath + u'.bak') os.rename(filepath, self._filepath) def delete(self, track): artist = to_string(track.get('artist', u'')) album = to_string(track.get('album', u'')) self._cached[artist][album].remove(track) self._tracks.remove(track) if not self._cached[artist][album]: del(self._cached[artist][album]) if not self._cached[artist]: del(self._cached[artist]) self.edited = True def tree(self): title = 'title' for artist in self.artists: print artist albums = self.get_albums(artist) for album in albums: print u' ', album tracks = self.get_tracks('artist', artist, 'album', album) for track in tracks: print u' ', track[title][0] if title in track else u'' def close(self): pass def search(self, text): try: filt = Query(text).search except Query.error: return [] else: return [Tag(self, track) for track in filter(filt, self._tracks)] def update(self, artist, album, track): cached = self._cached try: cached[artist][album].remove(track) except ValueError: pass if not cached[artist][album]: del(cached[artist][album]) if not cached[artist]: del(cached[artist]) trackartist = track.get('artist', u'') trackalbum = track.get('album', u'') cached[trackartist][trackalbum].append(track) class DirModel(QDirModel): def data(self, index, role=Qt.DisplayRole): if (role == Qt.DisplayRole and index.column() == 0): path = QDir.toNativeSeparators(self.filePath(index)) if path.endsWith(QDir.separator()): path.chop(1) return path return QDirModel.data(self, index, role) class DirLineEdit(QLineEdit): def __init__(self, *args, **kwargs): super(DirLineEdit, self).__init__(*args, **kwargs) completer = QCompleter() completer.setCompletionMode(QCompleter.PopupCompletion) dirfilter = QDir.AllEntries | QDir.NoDotAndDotDot | QDir.Hidden sortflags = QDir.DirsFirst | QDir.IgnoreCase dirmodel = QDirModel(['*'], dirfilter, sortflags, completer) completer.setModel(dirmodel) self.setCompleter(completer) class InitWidget(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.dbpath = DirLineEdit(os.path.join(HOMEDIR, u".quodlibet/songs")) self.configpath = DirLineEdit(os.path.join(HOMEDIR, u".quodlibet/config")) vbox = QVBoxLayout() def label(text, control): l = QLabel(text) l.setBuddy(control) return l vbox.addWidget(label(translate("QuodLibet", '&Library Path'), self.dbpath)) hbox = QHBoxLayout() select_db = QPushButton(translate("QuodLibet", "...")) self.connect(select_db, SIGNAL('clicked()'), self.select_db) hbox.addWidget(self.dbpath) hbox.addWidget(select_db) vbox.addLayout(hbox) vbox.addStretch(1) self.setLayout(vbox) def select_db(self): filedlg = QFileDialog() filename = filedlg.getOpenFileName(self, translate("QuodLibet", 'Select QuodLibet library file...'), self.dbpath.text()) if filename: self.dbpath.setText(filename) def library(self): dbpath = self.dbpath.text().toLocal8Bit() try: return QuodLibet(dbpath) except (IOError, OSError), e: raise MusicLibError(0, translate( "QuodLibet", '%1 (%2)').arg(e.strerror).arg(e.filename)) except (pickle.UnpicklingError, EOFError): raise MusicLibError(0, translate("QuodLibet", '%1 is an invalid QuodLibet music library file.').arg(dbpath)) name = u'Quodlibet' if __name__ == '__main__': lib = QuodLibet('/home/keith/.quodlibet/songs') artists = lib.artists import random d = defaultdict(lambda: defaultdict(lambda: [])) for nothing in xrange(20): artist = artists[random.randint(0, len(artists))] for album, tracks in lib._cached[artist].items(): d[artist][album] = [Tag(lib, t).usertags for t in tracks] import pprint f = {} for z in d: f[z] = dict(d[z]) pprint.pprint(f) puddletag-1.0.2/puddlestuff/plugins/0000755000175000001440000000000012236755734017772 5ustar keithusers00000000000000puddletag-1.0.2/puddlestuff/plugins/__init__.py0000644000175000001440000000271311734651721022077 0ustar keithusers00000000000000# -*- coding: utf-8 -*- from collections import defaultdict from puddlestuff.constants import ALWAYS, FILESLOADED, VIEWFILLED, FILESSELECTED, ENABLESIGNALS from PyQt4.QtCore import SIGNAL from puddlestuff.puddlesettings import add_config_widget, SettingsError status = {} def connect_shortcut(action, enabled, disabled=None, togglecheck=None): controls = status['dialogs'] emits = defaultdict(lambda: []) for c in controls.values(): [emits[sig].append(c) for sig in c.emits] connect = action.connect if enabled in emits: [connect(c, ENABLESIGNALS.get(enabled, SIGNAL(enabled)), action.setEnabled) for c in emits[enabled]] else: print 'No enable signal found for', action.text() action.setEnabled(False) if togglecheck and togglecheck in emits: [connect(c, ENABLESIGNALS.get(togglecheck, SIGNAL(togglecheck)), action.setEnabled) for c in emits[togglecheck]] def connect_control(control): controls = status['dialogs'] emits = defaultdict(lambda: []) for c in controls.values(): [emits[sig].append(c) for sig in c.emits] connect = control.connect for signal, slot in control.receives: if signal in emits: [connect(c, SIGNAL(signal), slot) for c in emits[signal]] for c in controls.values(): for signal, slot in c.receives: if signal in control.emits: connect(control, SIGNAL(signal), slot)puddletag-1.0.2/puddlestuff/functions_dialogs.py0000644000175000001440000000430011612773575022372 0ustar keithusers00000000000000# -*- coding: utf-8 -*- from PyQt4.QtGui import (QCheckBox, QLabel, QHBoxLayout, QSpinBox, QVBoxLayout, QWidget) from PyQt4.QtCore import SIGNAL from puddlestuff.translations import translate def sanitize(type_, value, default=None): if type_ is int: try: return int(value) except (TypeError, ValueError): return default elif type_ is bool: if value is True or value == 'True': return True else: return False else: return value class AutoNumbering(QWidget): def __init__(self, parent = None): QWidget.__init__(self, parent) def hbox(*widgets): box = QHBoxLayout() [box.addWidget(z) for z in widgets] box.addStretch() return box vbox = QVBoxLayout() startlabel = QLabel(translate('Autonumbering Wizard', "&Start: ")) self._start = QSpinBox() startlabel.setBuddy(self._start) self._start.setValue(1) self._start.setMaximum(65536) vbox.addLayout(hbox(startlabel, self._start)) label = QLabel(translate('Autonumbering Wizard', 'Max length after padding with zeroes: ')) self._padlength = QSpinBox() label.setBuddy(self._padlength) self._padlength.setValue(1) self._padlength.setMaximum(65535) self._padlength.setMinimum(1) vbox.addLayout(hbox(label, self._padlength)) self._restart_numbering = QCheckBox(translate('Autonumbering Wizard', "&Restart numbering at each directory.")) vbox.addWidget(self._restart_numbering) vbox.addStretch() self.setLayout(vbox) def setArguments(self, *args): minimum = sanitize(int, args[0], 0) restart = sanitize(bool, args[1], True) padding = sanitize(int, args[2], 1) self._start.setValue(minimum) self._restart_numbering.setChecked(restart) self._padlength.setValue(padding) def arguments(self): x = [ self._start.value(), self._restart_numbering.isChecked(), self._padlength.value()] return x from functions import autonumbering dialogs = {autonumbering: AutoNumbering}puddletag-1.0.2/puddlestuff/pluginloader.py0000755000175000001440000001205111653274325021344 0ustar keithusers00000000000000# -*- coding: utf-8 -*- import os, traceback, sys from puddlestuff.puddleobjects import PuddleConfig, winsettings from puddlestuff.constants import (FUNCTIONS, TAGSOURCE, SAVEDIR, DIALOGS, MUSICLIBS, MODULES) from os.path import splitext, exists from PyQt4.QtCore import * from PyQt4.QtGui import * from puddlestuff.translations import translate NAME = 'name' AUTHOR = 'author' DESC = 'description' PT_VERSION = 'puddletag_version' VERSION = 'version' INFO_SECTION = 'info' MODULE_NAME = 'module' PLUGIN_DIRS = [os.path.join(SAVEDIR, u'plugins'), os.path.join(os.path.dirname(__file__), 'plugins')] PROPERTIES = [NAME, AUTHOR, DESC, PT_VERSION, VERSION] def get_plugins(plugindir): if not os.path.exists(plugindir): os.makedirs(plugindir) infos = [] for module in os.listdir(plugindir): info_path = os.path.join(plugindir, module, 'info') if not exists(info_path): continue cparser = PuddleConfig(info_path) values = [cparser.get(INFO_SECTION, prop, '') for prop in PROPERTIES] if len(filter(None, values)) < len(PROPERTIES): continue d = dict(zip(PROPERTIES, values)) d[MODULE_NAME] = module infos.append(d) return infos def load_plugins(plugins=None, parent=None): [sys.path.insert(0, d) for d in PLUGIN_DIRS] cparser = PuddleConfig() to_load = cparser.get('plugins', 'to_load', []) functions = {} tagsources = [] dialogs = [] musiclibs = [] modules = [] join = os.path.join if plugins is None: plugins = [] [plugins.extend(get_plugins(d)) for d in PLUGIN_DIRS] plugins.sort(key=lambda d: d.get(NAME, u'')) for plugin in plugins: if plugin[MODULE_NAME] not in to_load: continue try: module = __import__(plugin[MODULE_NAME]) except: print u'Failed to load plugin: ', plugin['name'] traceback.print_exc() continue if hasattr(module, 'functions'): functions.update(module.functions) if hasattr(module, 'tagsources'): tagsources.extend(module.tagsources) if hasattr(module, 'dialogs'): dialogs.extend(module.dialogs) if hasattr(module, 'musiclibs'): musiclibs.extend(module.musiclibs) modules.append(module) for d in PLUGIN_DIRS: del(sys.path[0]) return {FUNCTIONS: functions, TAGSOURCE: tagsources, DIALOGS: dialogs, MUSICLIBS: musiclibs, MODULES: modules} class InfoWidget(QLabel): def __init__(self, info=None, parent=None): super(InfoWidget, self).__init__(parent) self.setAlignment(Qt.AlignLeft | Qt.AlignTop) self.setWordWrap(True) if info: self.changeInfo(info) def changeInfo(self, info): labels = [translate('Plugin Settings', 'Name'), translate('Plugin Settings', 'Author'), translate('Plugin Settings', 'Description'), translate('Plugin Settings', 'Version')] properties = [NAME, AUTHOR, DESC, VERSION] text = u'
'.join([u'%s: %s' % (disp, info[prop]) for disp, prop in zip(labels, properties)]) self.setText(text) class PluginConfig(QDialog): def __init__(self, parent = None): super(PluginConfig, self).__init__(parent) winsettings('pluginconfig', self) self._listbox = QListWidget() info_display = InfoWidget() hbox = QHBoxLayout() hbox.addWidget(self._listbox, 0) hbox.addWidget(info_display, 1) vbox = QVBoxLayout() vbox.addLayout(hbox) vbox.addWidget( QLabel(translate("Plugin Settings", 'Loading/unloading plugins requires a restart.'))) self.setLayout(vbox) plugins = [] [plugins.extend(get_plugins(d)) for d in PLUGIN_DIRS] cparser = PuddleConfig() to_load = cparser.get('plugins', 'to_load', []) for plugin in plugins: item = QListWidgetItem() item.setText(plugin[NAME]) if plugin[MODULE_NAME] in to_load: item.setCheckState(Qt.Checked) else: item.setCheckState(Qt.Unchecked) item.plugin = plugin self._listbox.addItem(item) self.connect(self._listbox, SIGNAL('currentItemChanged(QListWidgetItem*, QListWidgetItem *)'), lambda item, previous: info_display.changeInfo(item.plugin)) def get_to_load(self): to_load = [] for row in range(self._listbox.count()): item = self._listbox.item(row) if item.checkState() == Qt.Checked: to_load.append(item.plugin[MODULE_NAME]) return to_load def applySettings(self, control=None): to_load = self.get_to_load() cparser = PuddleConfig() cparser.set('plugins', 'to_load', to_load) if __name__ == '__main__': app = QApplication([]) win = PluginConfig() win.show() app.exec_()puddletag-1.0.2/puddlestuff/webdb.py0000644000175000001440000010204612050252313017724 0ustar keithusers00000000000000#! /usr/bin/env python # -*- coding: utf-8 -*- import glob, os, pdb, sys, traceback from collections import defaultdict from copy import copy, deepcopy from functools import partial from PyQt4.QtCore import * from PyQt4.QtGui import * import puddlestuff from puddlestuff.releasewidget import ReleaseWidget import puddlestuff.audioinfo as audioinfo from puddlestuff.constants import (TEXT, COMBO, SPINBOX, CHECKBOX, RIGHTDOCK, SAVEDIR) from puddlestuff.findfunc import parsefunc from puddlestuff.functions import replace_regex from puddleobjects import (create_buddy, unique, winsettings, ListBox, ListButtons, OKCancel, PuddleConfig, PuddleThread) from puddlestuff.tagsources import (tagsources, status_obj, set_useragent, write_log, RetrievalError, mp3tag, SubmissionError) from puddlestuff.util import (isempty, pprint_tag, split_by_field, to_string, translate) pyqtRemoveInputHook() TAGSOURCE_CONFIG = os.path.join(SAVEDIR, 'tagsources.conf') MTAG_SOURCE_DIR = os.path.join(SAVEDIR, 'mp3tag_sources') DEFAULT_SEARCH_TIP = translate("WebDB", "Enter search parameters here. If empty, the selected " "files are used.
  • artist;album searches " "for a specific album/artist combination.
  • To " "list the albums by an artist leave off the album " "part, but keep the semicolon (eg. Ratatat;). " "For a album only leave the artist part as in " ";Resurrection.
") FIELDLIST_TIP = translate("WebDB", 'Enter a comma seperated list of fields to write. ' '

Eg. artist, album, title will only ' 'write the artist, album and title fields of the ' 'retrieved tags.

If you want to ' 'exclude some fields, but write all others start the ' 'list the tilde (~) character. Eg ~composer, ' '__image will write all fields but the ' 'composer and __image fields.') DEFAULT_REGEXP = {'album': [u'(.*?)([\(\[\{].*[\)\]\}])', u'$1']} def apply_regexps(audio, regexps=None): if regexps is None: regexps = DEFAULT_REGEXP audio = deepcopy(audio) changed = False for field, (regexp, output) in regexps.iteritems(): if field not in audio: continue text = to_string(audio[field]) try: val = replace_regex(audio, text, regexp, output) if val: audio[field] = val if not changed and val != text: changed = val except puddlestuff.findfunc.FuncError: continue return changed, audio def display_tag(tag): """Used to display tags in in a human parseable format.""" tag = dict((k,v) for k,v in tag.iteritems() if not k.startswith('#') and not isempty(v)) if not tag: return translate("WebDB", "Nothing to display.") fmt = u"%s: %s
" text = pprint_tag(tag, fmt, True) if text.endswith(u'
'): text = text[:-len(u'
')] return text def load_mp3tag_sources(dirpath=MTAG_SOURCE_DIR): "Loads Mp3tag tag sources from dirpath and return the tag source classes." files = glob.glob(os.path.join(dirpath, '*.src')) classes = [] for f in files: try: idents, search, album = mp3tag.open_script(f) classes.append(mp3tag.Mp3TagSource(idents, search, album)) except: print translate("WebDB", "Couldn't load Mp3tag Tag Source %s") % f traceback.print_exc() continue return classes def strip(audio, field_list, reverse = False, leave_exact=False): '''Returns dict of key/values from audio where the key is in field_list. If reverse is True then the dict will consist of all fields found in audio where the key is NOT IN in field_list. If the first field in field_list starts with '~' then reverse will be set to True. Any fields starting with '#' will be removed. ''' if not field_list: ret = dict([(key, audio[key]) for key in audio if not key.startswith('#')]) if leave_exact and '#exact' in audio: ret['#exact'] = audio['#exact'] return ret tags = field_list[::] if tags and tags[0].startswith('~'): reverse = True tags[0] = tags[0][1:] else: reverse = False if reverse: ret = dict([(key, audio[key]) for key in audio if key not in tags and not key.startswith('#')]) else: ret = dict([(key, audio[key]) for key in field_list if not key.startswith('#') and key in audio]) if leave_exact and '#exact' in audio: ret['#exact'] = audio['#exact'] return ret def split_strip(stringlist): '''Splits and strips each comma-delimited string in a list of strings. >>> split_strip(['artist, title', 'album,genre']) [['artist', 'title'], ['album', 'genre']] ''' return [[field.strip() for field in s.split(u',')] for s in stringlist] class FieldsEdit(QWidget): def __init__(self, tags=None, parent=None): QWidget.__init__(self, parent) if not tags: tags = [] label = QLabel() label.setText(translate("Defaults", '&Fields')) self._text = QLineEdit(u', '.join(tags)) label.setBuddy(self._text) layout = QHBoxLayout() layout.setMargin(0) layout.addWidget(label, 0) layout.addWidget(self._text, 1) self.connect(self._text, SIGNAL('textChanged(QString)'), self.emitTags) self.setLayout(layout) def emitTags(self, text=None): self.emit(SIGNAL('fieldsChanged'), self.tags(text)) def setTags(self, tags): self._text.setText(u', '.join(tags)) def setToolTip(self, value): QWidget.setToolTip(self, value) self._text.setToolTip(value) def tags(self, text=None): if not text: return filter(None, [z.strip() for z in unicode(self._text.text()).split(u',')]) else: return filter(None, [z.strip() for z in unicode(text).split(u',')]) class SimpleDialog(QDialog): """Class for simple dialog creation.""" def __init__(self, title, controls, parent = None): """title => Dialog's title. controls is a list of 3-element-lists. The three 3-element lists consist of: description => Descriptive label for the control. control_type => One of TEXT, COMBO, CHECKBOX corresponding to a QLineEdit, QComboBox and QCheckBox being created respectively. default => Default arguments. Can be any string for TEXT, Must be a list of strings for COMBO as these will form the items selectable by the combo box. Can be either True or False for CheckBox. A dialog will be created with vertical layout. Like so: