./PyPar2-1.4/0000755000175000017500000000000010611464626013040 5ustar ingelresingelres./PyPar2-1.4/src/0000755000175000017500000000000010611464626013627 5ustar ingelresingelres./PyPar2-1.4/src/consts.py0000644000175000017500000000321110611464626015507 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import os.path # Application appVersion = '1.4' appURL = 'http://pypar2.silent-blade.org' appName = 'PyPar2' appNameShort = 'pypar2' prefsVersion = 1 # Directories dirUsr = os.path.expanduser('~') dirCfg = os.path.join(dirUsr, '.' + appNameShort) dirSrc = os.path.join(os.path.dirname(__file__)) dirRes = os.path.join(dirSrc, '..', 'res') dirPix = os.path.join(dirSrc, '..', 'pix') dirDoc = os.path.join(dirSrc, '..', 'doc') dirLocale = os.path.join(dirSrc, '..', 'locale') if not os.path.isdir(dirLocale) : dirLocale = os.path.join(dirSrc, '..', '..', 'locale') # Files filePrefs = os.path.join(dirCfg, 'prefs.xml') fileLicense = os.path.join(dirDoc, 'gpl.txt') fileImgIcon = os.path.join(dirPix, 'icon.png') fileImgAbout = os.path.join(dirPix, 'about.png') # Create the configuration directory if needed if not os.path.isdir(dirCfg) : os.mkdir(dirCfg) ./PyPar2-1.4/src/dlgAbout.py0000644000175000017500000000354410611464626015750 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import consts, gtk, os.path from gettext import gettext as _ def show(parent) : """ Show an about dialog box """ dlg = gtk.AboutDialog() dlg.set_transient_for(parent) # Set credit information dlg.set_name(consts.appName) dlg.set_version(consts.appVersion) dlg.set_website(consts.appURL) dlg.set_translator_credits(_('translator-credits')) dlg.set_comments(_('A graphical frontend for the par2 utility.')) dlg.set_artists(['Christoph Brill ']) dlg.set_authors([ _('Developer:'), 'Ingelrest François ', '', _('Thanks to:'), ' * Piotr Ozarowski', ' * Ludovic Biancotto', ' * Rob Neild', ]) # Set logo if os.path.exists(consts.fileImgAbout) : dlg.set_logo(gtk.gdk.pixbuf_new_from_file(consts.fileImgAbout)) # Load the licence from the disk if possible if os.path.exists(consts.fileLicense) : dlg.set_license(open(consts.fileLicense).read()) dlg.set_wrap_license(True) dlg.run() dlg.destroy() ./PyPar2-1.4/src/dlgChooseFiles.py0000644000175000017500000000442110611464626017074 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import consts, gtk, os from gettext import gettext as _ # The modes supported by this dialog box ( MODE_FILES, MODE_DIRECTORY ) = range(2) #========================================================== # # Functions # #========================================================== def createDlg(parent) : """ Create and configure the dialog box """ global dlg, wTree wTree = gtk.glade.XML(os.path.join(consts.dirRes, 'dlg-choosefiles.glade'), domain=consts.appNameShort) dlg = wTree.get_widget('dlg-choosefiles') # Configure the dialog dlg.set_modal(True) dlg.set_transient_for(parent) dlg.set_current_folder(consts.dirUsr) dlg.connect('response', lambda dialog, response : dlg.hide()) def show(parent, mode) : """ Show the dialog box, using the given mode """ if dlg is None : createDlg(parent) # Configure the dialog according to mode if mode == MODE_FILES : dlg.set_action(gtk.FILE_CHOOSER_ACTION_OPEN) dlg.set_title(_('Select file(s)')) dlg.set_select_multiple(True) else : dlg.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) dlg.set_title(_('Select directory')) dlg.set_select_multiple(False) # Return the files selected by the user if dlg.run() == gtk.RESPONSE_OK : return dlg.get_filenames() return None #========================================================== # # Entry point # #========================================================== dlg = None ./PyPar2-1.4/src/dlgOutput.py0000644000175000017500000001240610611464626016173 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import consts, gtk, prefsManager, signal, sys, os, vte from gettext import gettext as _ #========================================================== # # Functions # #========================================================== def createDlg(parent) : """ Load the dialog description from the disk, and configure it """ global dlg, wTree # Set the handler for the VTE, and then create the dialog gtk.glade.set_custom_handler(lambda glade, function, widget, str1, str2, int1, int2 : vte.Terminal()) wTree = gtk.glade.XML(os.path.join(consts.dirRes, 'dlg-output.glade'), domain=consts.appNameShort) dlg = wTree.get_widget('dlg-output') # Configure the dialog dlg.set_modal(True) dlg.set_transient_for(parent) dlg.resize(prefsManager.get('outputDlgWidth'), prefsManager.get('outputDlgHeight')) # Connect signal handlers: autoconnect is not used, because we would have to use globals(), which may contain duplicated functions wTree.signal_connect('onResponse', onResponse) wTree.signal_connect('onDlgDelete', onDlgDelete) wTree.signal_connect('onDlgResize', onDlgResize) wTree.signal_connect('onBtnPause', onBtnPause) wTree.signal_connect('onBtnStop', lambda widget : os.kill(processPID, signal.SIGKILL)) # Configure the (scrollable) VTE wTree.get_widget('vteOutput').show_all() wTree.get_widget('vteOutput').connect('child-exited', onVTEChildExited) wTree.get_widget('scrVTE').get_vscrollbar().set_adjustment(wTree.get_widget('vteOutput').get_adjustment()) def show(parent, cmd, args) : """ Display this dialog and immediately launch cmd """ global processPID, processPaused if dlg is None : createDlg(parent) wTree.get_widget('btnClose').set_sensitive(False) wTree.get_widget('btnStop').set_sensitive(True) wTree.get_widget('btnPause').set_sensitive(True) wTree.get_widget('vteOutput').reset(True, True) wTree.get_widget('btnPause').set_label(_('Pause')) wTree.get_widget('btnPause').set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON)) processPaused = False processPID = wTree.get_widget('vteOutput').fork_command(cmd, args) dlg.show() def run(cmd, args) : """ Launch this dialog box as a stand alone application This means that gtk.main_quit() will be called when this dialog box will exit """ global standAlone standAlone = True show(None, cmd, args) gtk.main() #========================================================== # # Events handlers # #========================================================== def onVTEChildExited(terminal) : """ The process has exited """ global processPID processPID = -1 wTree.get_widget('btnClose').set_sensitive(True) wTree.get_widget('btnStop').set_sensitive(False) wTree.get_widget('btnPause').set_sensitive(False) def onDlgResize(dialog, rectangle) : """ The dialog has been resized, so we save its new size """ prefsManager.set('outputDlgWidth', rectangle.width) prefsManager.set('outputDlgHeight', rectangle.height) def onDlgDelete(dialog, event) : """ Called when the user clicks on the title bar close button """ if processPID == -1 : if standAlone : gtk.main_quit() else : dlg.hide() # We don't allow the dialog to be destroyed, that's what returning True is useful for return True def onResponse(dialog, response, *args) : """ Response events """ if response == gtk.RESPONSE_CLOSE : if standAlone : gtk.main_quit() else : dlg.hide() def onBtnPause(widget) : """ Pause or resume the process, if any """ global processPaused if processPaused : processPaused = False os.kill(processPID, signal.SIGCONT) wTree.get_widget('btnPause').set_label(_('Pause')) wTree.get_widget('btnPause').set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON)) else : processPaused = True os.kill(processPID, signal.SIGSTOP) wTree.get_widget('btnPause').set_label(_('Resume')) wTree.get_widget('btnPause').set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_BUTTON)) #========================================================== # # Entry point # #========================================================== dlg = None processPID = -1 standAlone = False processPaused = False ./PyPar2-1.4/src/dlgSavePar2.py0000644000175000017500000000412310611464626016313 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import consts, gtk, os #========================================================== # # Functions # #========================================================== def createDlg(parent) : """ Create and configure the dialog box """ global dlg, wTree wTree = gtk.glade.XML(os.path.join(consts.dirRes, 'dlg-save.glade'), domain=consts.appNameShort) dlg = wTree.get_widget('dlg-save') # Configure the dialog dlg.set_modal(True) dlg.set_transient_for(parent) dlg.connect('response', lambda dialog, response : dlg.hide()) def show(parent, defaultFile) : """ Show the dialog box, use defaultFile as the default filename """ if dlg is None : createDlg(parent) # set_filename() changes the current directory, if the file does not exist then nothing is selected # set_current_name() must be used to provide a non-existing filename dlg.set_filename(defaultFile) slashIndex = defaultFile.rfind('/') if slashIndex != -1 : dlg.set_current_name(defaultFile[slashIndex+1:]) # Return the chosen filename, if any if dlg.run() == gtk.RESPONSE_OK : return dlg.get_filename() return None #========================================================== # # Entry point # #========================================================== dlg = None ./PyPar2-1.4/src/main.py0000755000175000017500000002272510611464626015140 0ustar ingelresingelres#!/usr/bin/python # -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import consts, dlgAbout, dlgOutput, gettext, gtk, gtk.glade, locale, os.path, prefsManager, sys, treeview #========================================================== # # Functions # #========================================================== def getAdvancedSettings(includeCreationSettings) : """ Create a list with all advanced settings Return an empty list if advanced settings are not used """ if not prefsManager.get('chkUseAdvSettings') : return [] list = ['-m' + str(prefsManager.get('spnMemoryUsage'))] if includeCreationSettings : # Blocks if prefsManager.get('grpBlocks') == 'radBlockCount' : list += ['-b' + str(prefsManager.get('spnBlockCount'))] elif prefsManager.get('grpBlocks') == 'radBlockSize' : list += ['-s' + str(prefsManager.get('spnBlockSize') * 1024)] # Redundancy if prefsManager.get('grpRedundancy') == 'radRedundancyLvl' : list += ['-r' + str(prefsManager.get('spnRedundancyLvl'))] else : list += ['-c' + str(prefsManager.get('spnRedundancyCount'))] # Parity files if prefsManager.get('grpParity') == 'radParityLimitSize' : list += ['-l'] else : list += ['-n' + str(prefsManager.get('spnRecoveryCount'))] if prefsManager.get('chkUniformFileSize') : list += ['-u'] # Beginning list += ['-f' + str(prefsManager.get('spnFirstBlock'))] return list def prefsToWidgets() : """ Transfer the preferences to the widgets """ map(lambda nbkName : wTree.get_widget(nbkName).set_current_page(prefsManager.get(nbkName)), notebooks) map(lambda spnName : wTree.get_widget(spnName).set_value(prefsManager.get(spnName)), spinButtons) map(lambda chkName : wTree.get_widget(chkName).set_active(prefsManager.get(chkName)), checkButtons) for group in radioButtons : wTree.get_widget(prefsManager.get(group)).set_active(True) onRadioButton(wTree.get_widget(prefsManager.get(group))) #========================================================== # # Events handlers # #========================================================== def onRadioButton(radio, data=None) : """ Radio buttons """ if radio.get_active() : prefsManager.set(radio.get_parent().get_name(), radio.get_name()) toBeEnabled, toBeDisabled = radioActions[radio.get_name()] map(lambda widget : wTree.get_widget(widget).set_sensitive(True), toBeEnabled) map(lambda widget : wTree.get_widget(widget).set_sensitive(False), toBeDisabled) def onCheckBox(check) : """ Check boxes """ prefsManager.set(check.get_name(), check.get_active()) if check.get_name() == 'chkUseAdvSettings' : if check.get_active() : onNotebook(wTree.get_widget('nbkMain'), None, prefsManager.get('nbkMain')) wTree.get_widget('boxAdv').show() else : wTree.get_widget('boxAdv').hide() def onNotebook(notebook, page, pageNum) : """ Notebooks """ prefsManager.set(notebook.get_name(), int(pageNum)) if notebook.get_name() == 'nbkMain' and prefsManager.get('chkUseAdvSettings') : if pageNum == prefsManager.PAGE_CREATE : map(lambda num : wTree.get_widget('nbkAdvanced').get_nth_page(num).show(), range(1,5)) else : map(lambda num : wTree.get_widget('nbkAdvanced').get_nth_page(num).hide(), range(1,5)) def onQuit(widget) : """ Quit events """ prefsManager.save() gtk.main_quit() def onBtnDefault(button) : """ "Default advanced settings" button """ prefsManager.resetAdvSettings() prefsToWidgets() def onBtnGo(button) : """ "Go" button """ import msgBox import dlgSavePar2 from gettext import gettext as _ # Repair/Verify if prefsManager.get('nbkMain') == prefsManager.PAGE_CHECK : filename = wTree.get_widget('fcOpenPar2').get_filename() if filename is None : msgBox.error(window, _('You must first select a par2 file!')) else : dlgOutput.show(window, 'par2', ['par2', checkActions[prefsManager.get('grpAction')]] + getAdvancedSettings(False) + ['--', filename]) # Create else : selectedFiles = treeview.getAllFilenames() if len(selectedFiles) == 0 : msgBox.error(window, _('You must first add some files to protect!')) else : filename = dlgSavePar2.show(window, selectedFiles[0] + '.par2') if filename is not None : dlgOutput.show(window, 'par2', ['par2', 'c'] + getAdvancedSettings(True) + ['--', filename] + selectedFiles) #========================================================== # # Entry point # #========================================================== gtk.window_set_default_icon(gtk.gdk.pixbuf_new_from_file(consts.fileImgIcon)) # Localization locale.setlocale(locale.LC_ALL, '') gettext.textdomain(consts.appNameShort) gettext.bindtextdomain(consts.appNameShort, consts.dirLocale) gtk.glade.textdomain(consts.appNameShort) gtk.glade.bindtextdomain(consts.appNameShort, consts.dirLocale) checkActions = {'radActionRepair' : 'r', 'radActionVerify' : 'v'} # Check whether a .par2 file was specified on the command line if len(sys.argv) == 2 and sys.argv[1].lower().endswith('.par2') : dlgOutput.run('par2', ['par2', checkActions[prefsManager.get('grpAction')]] + getAdvancedSettings(False) + ['--', sys.argv[1]]) sys.exit() # Widgets which state is saved and restored notebooks = ['nbkMain', 'nbkAdvanced'] spinButtons = ['spnMemoryUsage', 'spnBlockCount', 'spnBlockSize', 'spnRedundancyLvl', 'spnRedundancyCount', 'spnRecoveryCount', 'spnFirstBlock'] checkButtons = ['chkUseAdvSettings', 'chkUniformFileSize'] radioButtons = ['grpAction', 'grpBlocks', 'grpRedundancy', 'grpParity'] # The first list in the tuple contains the widgets that must be enabled, the second one contains the widgets that must be disabled radioActions = {'radActionRepair' : ([], [] ), 'radActionVerify' : ([], [] ), 'radBlockDynamic' : ([], ['spnBlockCount', 'spnBlockSize' ] ), 'radBlockCount' : (['spnBlockCount'], ['spnBlockSize'] ), 'radBlockSize' : (['spnBlockSize'], ['spnBlockCount'] ), 'radRedundancyLvl' : (['spnRedundancyLvl'], ['spnRedundancyCount'] ), 'radRedundancyCount' : (['spnRedundancyCount'], ['spnRedundancyLvl'] ), 'radParityLimitSize' : ([], ['spnRecoveryCount', 'chkUniformFileSize']), 'radParityCount' : (['spnRecoveryCount', 'chkUniformFileSize'], [] )} # Create the GUI wTree = gtk.glade.XML(os.path.join(consts.dirRes, 'win-main.glade'), domain=consts.appNameShort) window = wTree.get_widget('win-main') treeview.set(window, wTree.get_widget('treeview'), wTree.get_widget('lblTree')) # Connect handlers wTree.signal_connect('onQuit', onQuit) wTree.signal_connect('onBtnGo', onBtnGo) wTree.signal_connect('onBtnDefault', onBtnDefault) wTree.signal_connect('onNotebook', onNotebook) wTree.signal_connect('onRadioButton', onRadioButton) wTree.signal_connect('onCheckBox', onCheckBox) wTree.signal_connect('onTreeviewKey', treeview.onKey) wTree.signal_connect('onTreeviewMouseButton', treeview.onMouseButton) wTree.signal_connect('onTreeviewDragDrop', treeview.onDragDrop) wTree.signal_connect('onMnuAbout', lambda widget : dlgAbout.show(window)) wTree.signal_connect('onSpinButton', lambda spin : prefsManager.set(spin.get_name(), int(spin.get_value()))) # Prepare the file chooser filter = gtk.FileFilter() filter.add_pattern('*.par2') filter.add_pattern('*.PAR2') wTree.get_widget('fcOpenPar2').set_filter(filter) wTree.get_widget('fcOpenPar2').set_current_folder(consts.dirUsr) # Add specified files, if any, to the tree if len(sys.argv) > 1 : for path in map(os.path.abspath, sys.argv[1:]) : if os.path.isfile(path) : treeview.addFile(path) elif os.path.isdir(path) : treeview.addDirectoryContent(path) wTree.get_widget('nbkMain').set_current_page(prefsManager.PAGE_CREATE) # Here we go prefsToWidgets() window.show() gtk.main() ./PyPar2-1.4/src/msgBox.py0000644000175000017500000000301210611464626015434 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import gtk def show(parent, msgType, buttons, msg) : """ Show a message box, using all the given parameters """ dlg = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, msgType, buttons, msg) dlg.set_markup(msg) response = dlg.run() dlg.destroy() return response def error(parent, msg) : """ Show an error message box """ show(parent, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg) def question(parent, msg) : """ Show a question message box and return the selected button """ return show(parent, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, msg) def information(parent, msg) : """ Show an information message box """ show(parent, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, msg) ./PyPar2-1.4/src/prefsManager.py0000644000175000017500000000745610611464626016627 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import consts, os, typeToolBox, xml.dom.ext, xml.dom.minidom from gettext import gettext as _ # Pages in the main notebook ( PAGE_CHECK, PAGE_CREATE ) = range(2) #========================================================== # # Functions # #========================================================== def resetAdvSettings() : """ Restore the default values of all advanced settings """ # Default values are taken from the man page of par2 prefs['chkUniformFileSize'] = False prefs['spnMemoryUsage'] = 16 prefs['spnBlockCount'] = 1 prefs['spnBlockSize'] = 1 prefs['spnRedundancyLvl'] = 5 prefs['spnRedundancyCount'] = 100 prefs['spnRecoveryCount'] = 7 prefs['spnFirstBlock'] = 0 prefs['grpBlocks'] = 'radBlockDynamic' prefs['grpRedundancy'] = 'radRedundancyLvl' prefs['grpParity'] = 'radParityCount' def save() : """ Save all preferences to the disk """ # Create the XML document doc = xml.dom.minidom.Document() root = doc.createElement('prefs') root.setAttribute('version', str(consts.prefsVersion)) doc.appendChild(root) # Write each preference to the document for prefName in prefs.keys() : node = doc.createElement('pref') prefValue = prefs[prefName] node.setAttribute('name', prefName) node.setAttribute('value', str(prefValue)) node.setAttribute('type', typeToolBox.getType(prefValue)) root.appendChild(node) # Write the document to the disk file_object = open(consts.filePrefs, 'w') xml.dom.ext.PrettyPrint(doc, file_object) file_object.close() def set(prefName, prefValue) : """ Change the value of a given preference """ if not prefs.has_key(prefName) : raise NameError, prefName + _(' is an unknown preference') prefs[prefName] = prefValue; def get(prefName) : """ Retrieve the value of a given preference """ if not prefs.has_key(prefName) : raise NameError, prefName + _(' is an unknown preference') return prefs[prefName] #========================================================== # # Entry point # #========================================================== # Basic preferences prefs = {'outputDlgHeight' : 400, 'outputDlgWidth' : 500, 'nbkMain' : PAGE_CHECK, 'nbkAdvanced' : 0, 'grpAction' : 'radActionRepair', 'chkUseAdvSettings' : False} # Advanced preferences resetAdvSettings() # Load saved preferences from the disk if os.access(consts.filePrefs, os.F_OK) : root = xml.dom.minidom.parse(consts.filePrefs).documentElement # Don't parse a too old prefs file if root.hasAttribute('version') and int(root.getAttribute('version')) == consts.prefsVersion : for elt in root.getElementsByTagName('pref') : name = elt.getAttribute('name') value = typeToolBox.cast(elt.getAttribute('value'), elt.getAttribute('type')) set(name, value) ./PyPar2-1.4/src/treeview.py0000644000175000017500000001530410611464626016036 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import cgi, consts, gtk, os, dlgChooseFiles from gettext import gettext as _ # The strings stored in the ListStore object ( LIST_FILE_PATH, LIST_FILE, LIST_DIRECTORY, ) = range(3) #========================================================== # # Functions # #========================================================== def set(parentWindow, tree, label) : """ Set the treeview managed by this module This function should be called only once """ global parent, treeview, treeLabel, wTree, storage if treeview is not None : raise Exception wTree = gtk.glade.XML(os.path.join(consts.dirRes, 'creationpopupmenus.glade')) parent = parentWindow treeview = tree treeLabel = label # Connect signal handlers wTree.signal_connect('onAddDirectoryContent', onAddDirectoryContent) wTree.signal_connect('onAddFiles', onAddFiles) wTree.signal_connect('onRemoveAll', onRemoveAll) wTree.signal_connect('onRemoveSelected', onRemoveSelected) # (Displayed string, Complete filename) storage = gtk.ListStore(str, str, str) renderer = gtk.CellRendererText() treeview.set_model(storage) treeview.insert_column_with_attributes(-1, '', renderer, markup=LIST_FILE) treeview.insert_column_with_attributes(-1, '', renderer, markup=LIST_DIRECTORY) treeview.get_column(0).set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) treeview.get_column(1).set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) storage.set_sort_column_id(LIST_FILE, gtk.SORT_ASCENDING) # Drag and drop support treeview.enable_model_drag_dest([('STRING', 0, 0)], gtk.gdk.ACTION_COPY) updateLabel() def updateLabel() : """ Update the label using the number of currently selected files """ lblFiles = '' if len(storage) != 0 : lblFiles = ' (' + str(len(storage)) + ')' treeLabel.set_markup('' + _('Files to protect:') + '' + lblFiles) def hasSelection() : """ Return True if something is selected, False otherwise """ model, iter = treeview.get_selection().get_selected() return iter != None def setFocusAtXY(x, y) : """ Select the entry located at the given location """ treeview.grab_focus() pthinfo = treeview.get_path_at_pos(x, y) # Select the row if any, clear selection otherwise if pthinfo is not None : path, col, cellx, celly = pthinfo treeview.set_cursor(path) elif hasSelection() : path, col = treeview.get_cursor() treeview.get_selection().unselect_path(path) def addDirectoryContent(directory) : """ Add all the files located in the given directory """ # Kids, don't do that at home: pretty cool piece of code, isn't it? :-D map(addFile, filter(os.path.isfile, map(lambda filename : os.path.join(directory, filename), os.listdir(directory)))) def addFile(file) : """ Add a file to the tree """ (directory, filename) = os.path.split(file) if directory.startswith(consts.dirUsr) : directory = directory.replace(consts.dirUsr, '~', 1) # cgi.escape() is used to protect special characters against the Pango markup storage.append([file, '' + cgi.escape(filename) + '', ' ' + cgi.escape(directory) + '/']) def getAllFilenames() : """ Return a list with all the entries """ return [file[LIST_FILE_PATH] for file in storage] #========================================================== # # Events handlers # #========================================================== def onDragDrop(tree, context, x, y, selection, info, etime) : """ Something has been dropped onto the treeview """ for path in selection.data.split() : path = path.replace('file://', '', 1) path = path.replace('%20', ' ') if os.path.isfile(path) : addFile(path) elif os.path.isdir(path) : addDirectoryContent(path) updateLabel() context.finish(True, False, etime) def onMouseButton(tree, event) : """ A mouse button has been pressed """ # Single right click ? if event.button == 3 and event.type == gtk.gdk.BUTTON_PRESS : setFocusAtXY(int(event.x), int(event.y)) if hasSelection() : wTree.get_widget('menuAll').popup(None, None, None, event.button, event.time) elif len(storage) is not 0 : wTree.get_widget('menuAddClear').popup(None, None, None, event.button, event.time) else : wTree.get_widget('menuAdd').popup(None, None, None, event.button, event.time) def onKey(tree, event) : """ A key has been pressed """ if gtk.gdk.keyval_name(event.keyval) == 'Delete' : onRemoveSelected(treeview) def onAddDirectoryContent(widget) : """ Let the user choose a directory, and then add all its content to the tree """ directories = dlgChooseFiles.show(parent, dlgChooseFiles.MODE_DIRECTORY) if directories is not None : treeview.freeze_child_notify() map(addDirectoryContent, directories) treeview.thaw_child_notify() updateLabel() def onAddFiles(widget) : """ Let the user choose some files, and then add them to the tree """ files = dlgChooseFiles.show(parent, dlgChooseFiles.MODE_FILES) if files is not None : treeview.freeze_child_notify() map(addFile, files) treeview.thaw_child_notify() updateLabel() def onRemoveSelected(widget) : """ Remove the currently selected entry """ model, iter = treeview.get_selection().get_selected() if iter is not None : model.remove(iter) updateLabel() def onRemoveAll(widget) : """ Clear the tree """ storage.clear() updateLabel() #========================================================== # # Entry point # #========================================================== parent = None treeview = None treeLabel = None ./PyPar2-1.4/src/typeToolBox.py0000644000175000017500000000271610611464626016477 0ustar ingelresingelres# -*- coding: utf-8 -*- # # Author: Ingelrest François (Athropos@gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from gettext import gettext as _ # Supported types # 'bool' type must be placed *before* 'int' type, otherwise booleans are detected as integers types = {bool : 'bool', int : 'int', str : 'str'} # Return a String with the type of value def getType(value) : for type in types.keys() : if isinstance(value, type) : return types[type] raise TypeError, str(value) + _(' has an unsupported type') # Return value, casted into type def cast(value, type) : if type == 'bool' : return value == 'True' elif type == 'int' : return int(value) elif type == 'str' : return str(value) raise TypeError, type + _(' is an unsupported type') ./PyPar2-1.4/pix/0000755000175000017500000000000010611464626013640 5ustar ingelresingelres./PyPar2-1.4/pix/about.png0000644000175000017500000002371210611464626015465 0ustar ingelresingelresPNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<'GIDATx} pysaf 0"x)uKAywr6ڕJ(v[$NlݬVUyKDM]TD8 n`===L xג,˴ڮfYUUU+$Ioo[AAXRu9u85VՇsUx"G"R<_bbht: BvK/@FxiB|bXV'Ja7eeeXEEE>^SSzRee%H|Oq|5}d P\hXnnj> Z ``p @ hG=pgϞ/~ ڳgw5}#6E*uBsbQk!4Ў#kBsKĵ3z!jnn{q]u0 },ˬ Bd 00h4ǖhw+N>M[loܸ~m[ny 4qUQo3ء۷oףk#Xl~HwqG"ZXM>˫-N8!_^^{MKK *m;1A}HJ^6O= Lp h] v)ڶmۂyGuI [>Μ9C[.wG)Ez \@q>uww͛szC7( UE>@9?)>| pD\ti 8mmmy'C]|%':y$ر#Y,tv#:xM'p2^BtQַ~~7N/2dюP'Pk&#g?oNf*yQ~L}iӦFdS-@,G/K'r"~^N|7_W' ׿~QMz*QM6T׽Рiccc{nyxxGH\͖Ҳ3G-ۤLL_jZGFGG_MB&+B>{^ze Lջ{~JׇStL G|gϞ?^Bx q[$k 赡( UNT߃Xa>;<׾0ZDCz@GG tZ2/y}iʷ0&YߋB&z{D)#?Q(`Ul ~[(0I'{w`+0;ޕXbs=O<,7j;GTit΂о\V/)>|)BӶ!hyVg^Ӱ!tC3S*v`ؗA/3WAX|u·nM*))gs#Kt(}KPX  LѼ`sԔ:;p6Mt @S ȝ}wPEU+wA`A_w裏be't#3'i%w#m d؄ٓ]t-0@zOωE49A>@a{ǜEEw\x1ivH0  ;"l|n-۷{ EXz-PsBGGW*}J?#>:xz;ߥL/"arAx<oNx'8p Cڞ:GN i;3. DWd;#'v믿NG>'Ep\@<0WP̀P BR:,2LTHjn 7:4=Cc''BZܼw0qS8qu 4}O6Ȟ{JYLӄS(3nd O2@s0=v bPBL2@ m g֭~Ù):19I]^!;l!rDb*0U@tkSa=Ueߝ8V Uh_ayIa(3] XPXDV& ,]y@kKg'N07P0'0 c,%S s5"Ad؄mrRG!OhseXwmBrZWRq8hA&V+ N.$DE0fd{,@< -Ņ/I7[=< CBt§wPɞ[;ךk LF q 0<OtBYp gptYYP0ŗCc9,c:BoSTD)GqH& ndc|EfCrP .mrl}0exiTm1C#1dD3.+Neീ( ' d(Sdf .^g1ͦ74f [/:@['@ Օ',; B: )hJ#>hM!HâSv*ni (OY 0 ~K1?Ms5.%  !|3P /[84 ޲N^"@|5ĕi"b-) g-H[P{Bg0YpQ&)β9Y4 jR/+=|*b)6mLh iM@$-^5YbS8"zA <M/4$332aNs$p/ *A:G ,eWB&ԞO d" ,ѵE&\Ck,Y@Շ k/5(X18jϦ \ j b@2T"Ir.%a2͎Gh,ic6~ HETcJq%*<'vtt  Y%̓1sYq2.A3;bNKHq,$(SYTD @ye6e8W) 4z)]c7t4q`<иW) ZO ./70)Dd+f;k%q dLy\a/QdJ 3h\IhJL y'@Ymz ) ' hG 5PBW 6*X9b (O L,l@cpO N`X0B uYqdrIoi PV,b$eJ` $yP h4r%s5hah$ d\V9)7Bb66|@hJ4e+\0* g!2MI154 pZR#L/NφۚV6b&$VִY'h9\"5,&oUjl p(xKsŎz%nuӿ'_ִs(2vOLmSiA6eIHnPͳ\Z|ɓ"lpv|M<%j]#=WɛIzoh v?OM7 1]FAGGz8pfw'{@Hdܬ1$JHT^L}Г-.DKp|4bVk7eD8]8,M^@oW }mqmI6MW﫫<9Xb #7jmz_r޿ >*m>ol:ckg V͘풑-?-ny곾vj{>DL/gknŮ>S{7j z }bB -i_>Cg?FQ8ũY9lr8w|DZX J?|㶩'񚿇޻ϜA xkq^}&Gΐ"a** WvХ@h3?wv/}X6,HgO<=ϩp*\Hw+:<ϠN] p\ךiEA@y9ӧ9vmX霤LL\s=/zcڤ-ѦD ȮRO=g.D.>NtR'Lh,{ ^yJɌ}*>>O ٻޤd- fb `{jK0 34kJ_=\>}BdtrCSOd紻5 0'DPab|ʩ,XemUH=;3@}oɑH@:T_O}@I*urOȯ)tAH#A0* ) 6+4s3Ph;]uL} O_tbEOM9ZfmYwvsV\Nf'b\0G ğ^ t2 vt'%o{qNWOjxVZV"=ϟ9GpV A|ZM ul/`j*Nbm.]~ö]XI=1Al5p)`bn\Ž9y,//cv0 ,*"@N/88Wx4J׀ںC`7mF~Ȧ kߛQY)H18E?ol^[ej0,WޛơIM/30 KJ pؤi /kowvJW7|HHQ'Dg%lPV*u3b4v '}^7QXIENDB`./PyPar2-1.4/pix/pypar2.png0000644000175000017500000000604110611464626015564 0ustar ingelresingelresPNG  IHDR00WsBIT|d pHYs11(RtEXtSoftwarewww.inkscape.org< IDAThZ]>3㙱k{f7YdP@ %TPZPm/)ATѢ4iժ@**$M6ݬ=Ow+]}g||k0 *7EaXA3Ww( ^<@tPn]%l8F%$www8v?7::?~xem4Stcǎ#'^XXH,--TIA]]]WoN,,//G_qܹuFFF ?ʵ/}5[)g/gS_2q>{ijpM2Ǖ7 W5euTHCN^T*8qo\ e $6R;Q VU˲lC?3GfnF ]34Mc";q_׵J#讉P 'x ^oGBۿFύBz7x|q`>Ϥ.\e! >n0ws|>x駙goGۅ1-s8@_ow~k'g>; S J 4 L27B9>7|qlr|? _d2JٳD"m[ ]Ya6U]izDV<- /x@VISp@wHm1PLϬ@$Łwqຮ@v,E?;pd&'Atɱ5$_lQ{+*NW!:8m8iZPNd3Y tn'GZ ",<@Vpww;0#.. -J\oWJURcQR~>j+U+XiVUr%z8;b )<$ u`@ ԑJTR-DEbg EV: S+ 8 AWؼOB -[@D!.G{4`5jV@.ReH" +k2^=H#Htd@a@mݿ.Є*@oG I.[l,o@Pjju%M.,ذ %0ϛٹ0vq 4=ܶd褂օFB'IJ][[OXc:Qz#;5eZCS` JÛxUr{ i5/:*Pt1GQK>L1٬I9.3i"@vjT5n5dpj.Cfo &OAAEa !èf\>nx&Rfa 91P$2lLNNsss7ZR)Cp%8Y 'I5ܥ5_ $U*i}:R0}e-p…2F 16Z@| V1R͠ *&ZBC+RI9NDkua A!t-Z@交"SAʹZƅq(|WT2ccVO HYChVo4t#o-4Ѕ ! Jj3y؄D!΁7Zt@74Ua!6 AÉ=IrΆ)TmSˁZY#Y!MŒZŒXi$wĂu%^lK`t+Je1bͣV)i50t)Y/Al6mla5U$XVo4:ZSQH'HI(Ҽ]vVp*ET,eJ*HwQ[E(ucEz7ÇmjspEO:cHSI$thfG\8-nn7C5uZ[(X^&ku^#n } 5:F(rpu]K(Mv lhlrQ PԢu:.W7E2&?/'NWK}6LBo  b"S %ka;H]m.7!hOvcO! ^+ɁyHNߩR i )Kj ֘# F9fՇ4[KU*O,@%D ĊSoߜ.Ȳ։7SȹV'$L An(fCKb|5ZD [ UX8:w+bSZ%-6BەLN+F]ϋR^i%E_$)<%D?:ڇ<,yƇJ(bZK0a}X;Ţ黇+qd:tj(bsF^eS|"m<\/z}=}PU)쿫==]]c#hgXBcψ8s"Ea%JXODzY;RlLlDStRNt.7R vrjjoVѧ㻷16m3gџs04*ɹ|0v2Tx[!ǻ9'h7~_|b6w1䌼(FmL-^~M].9F 1VvGwP- ?{F>,y\)f WJ7zO-Z a*9Ǿw?8'ljϥR8|ӎ6;=lszIu0/ u> v|J?pURU/O"_" b IENDB`./PyPar2-1.4/res/0000755000175000017500000000000010611464626013631 5ustar ingelresingelres./PyPar2-1.4/res/creationpopupmenus.glade0000644000175000017500000001672210611464626020577 0ustar ingelresingelres True Add directory content True True gtk-open 1 0.5 0.5 0 0 True Add file(s) True True gtk-add 1 0.5 0.5 0 0 True True Remove all True True gtk-clear 1 0.5 0.5 0 0 True Remove selected file True True gtk-remove 1 0.5 0.5 0 0 True Add directory content True True gtk-open 1 0.5 0.5 0 0 True Add file(s) True True gtk-add 1 0.5 0.5 0 0 True True Remove all True True gtk-clear 1 0.5 0.5 0 0 True Add directory content True True gtk-open 1 0.5 0.5 0 0 True Add file(s) True True gtk-add 1 0.5 0.5 0 0 ./PyPar2-1.4/res/dlg-choosefiles.glade0000644000175000017500000000560310611464626017702 0ustar ingelresingelres GTK_FILE_CHOOSER_ACTION_OPEN True False False False GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True False 24 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True True gtk-open True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END ./PyPar2-1.4/res/dlg-output.glade0000644000175000017500000001151110611464626016732 0ustar ingelresingelres 550 400 PyPar2 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END True True True gtk-media-pause True GTK_RELIEF_NORMAL True 0 True True True gtk-stop True GTK_RELIEF_NORMAL True 0 True True True gtk-close True GTK_RELIEF_NORMAL True -7 0 False True GTK_PACK_END True True GTK_POLICY_NEVER GTK_POLICY_ALWAYS GTK_SHADOW_NONE GTK_CORNER_TOP_LEFT True GTK_SHADOW_IN True createVTE 0 0 Thu, 04 Jan 2007 17:42:26 GMT 0 True True ./PyPar2-1.4/res/dlg-save.glade0000644000175000017500000000561610611464626016341 0ustar ingelresingelres GTK_FILE_CHOOSER_ACTION_SAVE True False False True Par2 file to create GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True False 24 True GTK_BUTTONBOX_END True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True True gtk-save True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END ./PyPar2-1.4/res/win-main.glade0000644000175000017500000016264610611464626016365 0ustar ingelresingelres 395 PyPar2 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False False False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True gtk-quit True True _Help True True gtk-about True 0 False False 10 True True True False GTK_POS_TOP False False True False 0 True 0 0.5 GTK_SHADOW_NONE True 0.5 0.5 1 1 0 0 12 0 5 True Select A Par2 File GTK_FILE_CHOOSER_ACTION_OPEN True False False -1 True <b>Par2 file:</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 8 True True True 0 0.5 GTK_SHADOW_NONE True 0.5 0.5 1 1 0 0 12 0 True True 0 True Verify and then repair files if needed True Repair file(s) True GTK_RELIEF_NORMAL True False False True 0 False False True Verify files, but do not try to repair them True Verify file(s) True GTK_RELIEF_NORMAL True False False True radActionRepair 0 False False True <b>Action to perform:</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 8 True True False True True Check False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True False 0 True 0 0.5 GTK_SHADOW_NONE True 0.5 0.5 1 1 0 0 0 0 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True Right-click to add/remove some files True False True False False False False False True Files to protect False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True False True True Create False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True 10 True True Use advanced settings True GTK_RELIEF_NORMAL True False False True 0 False False False 0 10 True True True False GTK_POS_TOP False False True 1 2 False 0 0 True Maximum memory usage True 1 0 True GTK_UPDATE_ALWAYS False False 3 0 65536 1 10 10 1 2 0 1 5 True Maximum memory usage (MB): False False GTK_JUSTIFY_LEFT False False 0 0.5 5 40 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill expand False True True Memory False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True 3 2 False 0 0 True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Number of blocks the files will be sliced into True 1 0 True GTK_UPDATE_ALWAYS False False 1 0 10000000 1 10 10 1 2 1 2 5 expand True Size of the blocks the files will be sliced into True 1 0 True GTK_UPDATE_ALWAYS False False 1 0 10000000 1 10 10 1 2 2 3 5 expand True Dynamic computation of the number of blocks the files will be sliced into True Dynamic True GTK_RELIEF_NORMAL True False False True 0 1 0 1 fill expand True Number of blocks the files will be sliced into True Block count: True GTK_RELIEF_NORMAL True False False True radBlockDynamic 0 1 1 2 fill expand True Size of the blocks the files will be sliced into True Block size (KB): True GTK_RELIEF_NORMAL True False False True radBlockDynamic 0 1 2 3 fill expand False True True Blocks False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True 2 2 False 1 3 True Level of redundancy of the parity files True 1 0 True GTK_UPDATE_ALWAYS False False 1 0 100 1 10 10 1 2 0 1 5 expand True Number of recovery blocks in the parity files True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 10000000 1 10 10 1 2 1 2 5 expand True Level of redundancy of the parity files True Level of redundancy (%): True GTK_RELIEF_NORMAL True False False True 0 1 0 1 fill expand True Number of recovery blocks in the parity files True Recovery block count: True GTK_RELIEF_NORMAL True False False True radRedundancyLvl 0 1 1 2 fill expand False True True Redundancy False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True 3 2 False 0 0 True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Number of parity files True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 10000000 1 10 10 1 2 1 2 5 expand True Dynamic computation of the number of parity files True Limit size of parity files True GTK_RELIEF_NORMAL True False False True 0 1 0 1 fill expand True Number of parity files True Number of parity files: True GTK_RELIEF_NORMAL True False False True radParityLimitSize 0 1 1 2 fill expand True Force all parity files to be of the same size True Uniform parity file size True GTK_RELIEF_NORMAL True False False True 0 1 2 3 fill expand False True True Parity files False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True 1 2 False 0 0 True First recovery block: False False GTK_JUSTIFY_LEFT False False 0 0.5 5 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill expand True First recovery block in the parity files True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 10000000 1 10 10 1 2 0 1 5 False True True Beginning False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True 10 True GTK_BUTTONBOX_DEFAULT_STYLE 0 True Restore the default value of all advanced settings True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-refresh 4 0.5 0.5 0 0 0 False False True Default advanced settings True False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 0 True True True 7 True True 10 True GTK_BUTTONBOX_END 10 True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-quit 4 0.5 0.5 0 0 0 False False True Quit True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-ok 4 0.5 0.5 0 0 0 False False True Go True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False True ./PyPar2-1.4/res/pypar2.desktop0000644000175000017500000000061710611464626016445 0ustar ingelresingelres[Desktop Entry] Name=PyPar2 Comment=A graphical frontend for the par2 utility Encoding=UTF-8 Exec=pypar2 MimeType=application/x-executable Terminal=false Type=Application StartupNotify=true Categories=GNOME;GTK;Application Icon=pypar2.png Comment[de]=Eine grafische Oberfläche für par2 Comment[fr]=Une interface graphique pour le programme par2 Comment[pl]=Graficzna nakładka na narzędzie par2 ./PyPar2-1.4/Makefile0000644000175000017500000000337210611464626014505 0ustar ingelresingelresINSTALL ?= install MAKE ?= make RM ?= rm RMDIR ?= rmdir prefix ?= /usr/local PREFIX = $(DESTDIR)$(prefix) BINDIR = $(PREFIX)/bin MANDIR = $(PREFIX)/share/man/man1 DATADIR = $(PREFIX)/share/pypar2 SRCDIR = $(DATADIR)/src PIXDIR = $(DATADIR)/pix RESDIR = $(DATADIR)/res APPDIR = $(PREFIX)/share/applications ICONDIR = $(PREFIX)/share/pixmaps LOCALEDIR = $(PREFIX)/share/locale LANGUAGES = `find locale/ -maxdepth 1 -mindepth 1 -type d -printf "%f "` help: @echo Usage: @echo "make - not used" @echo "make clean - removes temporary data" @echo "make install - installs data" @echo "make uninstall - uninstalls data" @echo "make help - prints this help" @echo install: echo $(PREFIX) $(INSTALL) -m 755 -d $(BINDIR) $(MANDIR) $(DATADIR) $(SRCDIR) $(PIXDIR) $(RESDIR) $(APPDIR) $(ICONDIR) $(INSTALL) -m 644 src/*.py $(SRCDIR) $(INSTALL) -m 644 res/*.glade $(RESDIR) $(INSTALL) -m 644 doc/pypar2.1 $(MANDIR) $(INSTALL) -m 644 pix/*.png $(PIXDIR) $(INSTALL) -m 644 pix/pypar2.png $(ICONDIR) $(INSTALL) -m 644 res/pypar2.desktop $(APPDIR) if test -L $(BINDIR)/pypar2; then ${RM} $(BINDIR)/pypar2; fi ln -s $(SRCDIR)/main.py $(BINDIR)/pypar2 chmod +x $(SRCDIR)/main.py # $(MAKE) -C po dist for lang in $(LANGUAGES); do \ ${INSTALL} -m 755 -d $(LOCALEDIR)/$$lang/LC_MESSAGES;\ $(INSTALL) -m 644 locale/$$lang/LC_MESSAGES/pypar2.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ done uninstall: ${RM} $(PREFIX)/bin/pypar2 ${RM} $(APPDIR)/pypar2.desktop ${RM} $(MANDIR)/pypar2.1 ${RM} $(ICONDIR)/pypar2.png ${RM} -rf $(DATADIR) $(RMDIR) --ignore-fail-on-non-empty $(BINDIR) $(MANDIR) $(APPDIR) $(ICONDIR) for lang in $(LANGUAGES); do \ ${RM} $(LOCALEDIR)/$$lang/LC_MESSAGES/pypar2.mo; \ done clean: ${RM} src/*.py[co] res/*~ res/*.bak .PHONY: help clean install ./PyPar2-1.4/doc/0000755000175000017500000000000010611464626013605 5ustar ingelresingelres./PyPar2-1.4/doc/pypar2.10000644000175000017500000000144510611464626015110 0ustar ingelresingelres.TH PYPAR2 1 "July 19, 2006" .SH NAME pypar2 \- graphical frontend for the par2 command line utility .SH SYNOPSIS .B pypar2 .SH DESCRIPTION This manual page documents briefly the .B pypar2 command. .PP \fBPyPar2\fP is a graphical frontend for the Linux par2 command line, written in Python. Its GUI uses GTK through the PyGTK library. .PP PyPar2 is designed to be very easy to use. For this reason: * Advanced settings are present, but hidden by default. * There is no preferences dialog, all selected options are automatically saved and restored. .SH SEE ALSO Homepage: http://pypar2.silent-blade.org/ .SH AUTHOR pypar2 was written by Ingelrest Francois .PP This manual page was written by Piotr Ozarowski , for the Debian project (but may be used by others). ./PyPar2-1.4/doc/gpl.txt0000644000175000017500000004310310611464626015131 0ustar ingelresingelres GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ./PyPar2-1.4/doc/whatsnew.txt0000644000175000017500000000557610611464626016223 0ustar ingelresingelres[+] New feature [-] Bug fixed v1.4 (18/04/2007) [+] Added russian translation (Solomin Evgeny) v1.3 (27/02/07) [+] Added dutch translation (Sander Smalbrugge & Rinse de Vries) [+] Added a pause button to the output window [ ] Added GPL v2 licence text to the archive v1.2 (08/02/07) [+] Added drag & drop support (thanks to Rob Neild) [+] When some files are specified on the command line, the listview is automatically populated (thanks to Rob Neild) v1.1 (30/01/07) [+] Added spanish translation (Gumer Coronel Pérez) v1.0 (20/01/07) [+] When a .par2 file is specified on the command line, PyPar2 immediately checks it [+] Improved listview usability by splitting strings into directories and filenames [+] The entries are now sorted in the listview [+] The number of entries in the listview is now displayed on top of it [+] Columns in listview are now auto-resized when adding/removing files [+] Added a vertical scrollbar to the output window [-] Output dialog is no longer destroyed when using the title bar close button [-] Dialogs are now correctly resized before being displayed [ ] Added some artwork (thanks to Christoph Brill) [ ] Preferences format has changed (settings will be reset on first launch) [ ] Added some tooltips [ ] The output terminal is now cleared before being used [ ] Many code changes and improvements v0.10 (07/11/06) [+] Added german translation (Volker Eckert) v0.09 (13/08/06) [+] Applied patch provided by Ludovic Biancotto: * Added more spacing to GUI [ ] Updated .desktop file [ ] Miscellaneous code changes v0.08 (28/07/06) [+] Added multilingual support * Added french translation * Added polish translation (Piotr Ozarowski) v0.07 (24/07/06) [+] Par2 creation: removed the "Select file(s)" button [+] Par2 creation:: added a contextual menu with more actions [ ] Added a .desktop file (thanks to Piotr Ozarowski) v0.06 (19/07/06) [ ] Added license in about box [ ] Applied patch provided by Piotr Ozarowski: * Replace start.sh file with Makefile * Removed hashbang from files that should not be executed * Fixed consts.py file to avoid changing directory when starting pypar2 * Added a manpage * Fix Free Software Foundation address v0.05 (18/07/06) [+] Added advanced creation settings v0.04 (14/07/06) [+] PyPar2 now handles the creation of par2 files v0.03 (10/07/06) [+] Output dialog is now resizable, and its size is restored across sessions [+] Added a button to restore default advanced settings [+] Par2 now displays the percentage of progression [+] Par2 command may now be interrupted v0.02 (08/07/06) [+] Maximum memory usage may now be specified [+] State of widgets is now restored across sessions v0.01 (06/07/06) [ ] First release ./PyPar2-1.4/doc/install.txt0000644000175000017500000000042510611464626016015 0ustar ingelresingelres * verify that par2, python, python-gtk2, python-xml, python-glade2 and python-vte packages are installed * type in a terminal: sudo make install You may also want to associate .par2 files to pypar2 in Nautilus (right-click on a .par2 file and choose "Properties/Open With") ./PyPar2-1.4/locale/0000755000175000017500000000000010611464626014277 5ustar ingelresingelres./PyPar2-1.4/locale/de/0000755000175000017500000000000010611464626014667 5ustar ingelresingelres./PyPar2-1.4/locale/de/LC_MESSAGES/0000755000175000017500000000000010611464626016454 5ustar ingelresingelres./PyPar2-1.4/locale/de/LC_MESSAGES/pypar2.mo0000644000175000017500000001115010611464626020224 0ustar ingelresingelres=S89Rl*   %,29 S^If1(-3ad'}.&=-U   2 $3 X k | 0   &  +, )X "    g #, P p   %     + ? E M V w > 6 :2Z$#7,d!  'E+Y8<6$?d!}(=:AH4( .8=$ 0/),; 26*!%:+-1#' &79 3<5"  has an unsupported type is an unknown preference is an unsupported typeAction to perform:Par2 file:A graphical frontend for the par2 utility.Add directory contentAdd file(s)BeginningBlock count:Block size (KB):BlocksCheckCreateDefault advanced settingsDeveloper:DynamicDynamic computation of the number of blocks the files will be sliced intoDynamic computation of the number of parity filesFiles to protect:First recovery block in the parity filesFirst recovery block:Force all parity files to be of the same sizeGoLevel of redundancy (%):Level of redundancy of the parity filesLimit size of parity filesMaximum memory usageMaximum memory usage (MB):MemoryNumber of blocks the files will be sliced intoNumber of parity filesNumber of parity files:Number of recovery blocks in the parity filesPar2 file to createParity filesPyPar2QuitRecovery block count:RedundancyRemove allRemove selected fileRepair file(s)Restore the default value of all advanced settingsRight-click to add/remove some filesSelect A Par2 FileSelect directorySelect file(s)Size of the blocks the files will be sliced intoThanks to:Uniform parity file sizeUse advanced settingsVerify and then repair files if neededVerify file(s)Verify files, but do not try to repair themYou must first add some files to protect!You must first select a par2 file!_File_Helptranslator-creditsProject-Id-Version: PyPar2 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-02-27 21:33+0100 PO-Revision-Date: 2006-12-07 20:55+0100 Last-Translator: Volker Eckert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: German X-Poedit-Country: GERMANY hat einen nicht unterstützten Typist eine unbekannte Einstellung Nicht unterstützter TypAuszuführende Aktion:Par2 Datei:Eine grafische Oberfläche für par2.Verzeichnis Inhalt hinzufügenDatei(en) hinzufügenBeginBlock Zähler:Block Größe (KB):BlockPrüfenErzeugenVorgabe erweiterte EinstellungenEntwickler:DynamischDynamische Berechnung der Blockanzahl der zu teilenden DateienDynamische Berechnung der Anzahl von Paritäts-DateienZu schützende Dateien:Erster WiederherstellungsblockErster Wiederherstellungsblock:Alle Paritäts-Dateien auf gleiche Größe bringenStartGrenze der Redundanz (%):Grenze der Redundanz (%)Größengrenze der Reparatur-DateienMaximale SpeichernutzungMaximale Speichernutzung (MB):SpeicherAnzahl der Blöcke in welche die Dateien geteilt werdenZahl der Reparatur-DateienZahl der Reparatur-Dateien:Zahl der Reparatur-DateienPar2 Datei erzeugenDateien vergleichenPyPar2BeendenWiederherstellungs Block Zähler:RedundanzEntferne alleEntferne ausgewählte DateienRepariere Datei(en)Rücksetzen aller erweiterten EinstellungenRechts-Klick zum Hinzufügen/Entfernen einzelner DateienWähle eine Par2 DateiWähle VerzeichnisWähle Datei(en)Größe der Blöcke der in welche die Dateien geteilt werdenDank an:Einheitliche Reparatur-Datei GrößeErweiterte EinstellungenVergleiche, wenn nötig repariereDateien vergleichenVergleiche Dateien, aber repariere nichtUm Dateien zu schützen müssen sie erst hinzugefügt werden!Zuerst eine par2 Datei wählen!_Datei_HilfeVolker Eckert ./PyPar2-1.4/locale/es/0000755000175000017500000000000010611464626014706 5ustar ingelresingelres./PyPar2-1.4/locale/es/LC_MESSAGES/0000755000175000017500000000000010611464626016473 5ustar ingelresingelres./PyPar2-1.4/locale/es/LC_MESSAGES/pypar2.mo0000644000175000017500000001141510611464626020247 0ustar ingelresingelres=S89Rl*   %,29 S^If1(-3ad'}.&=-U   2 $3 X k | 0   &  +, )X "    1   2 K f .{       # = L QV 7  9 /@N /-)E8M>,3$9 ^ jv?27N?e*23/H1x()4( .8=$ 0/),; 26*!%:+-1#' &79 3<5"  has an unsupported type is an unknown preference is an unsupported typeAction to perform:Par2 file:A graphical frontend for the par2 utility.Add directory contentAdd file(s)BeginningBlock count:Block size (KB):BlocksCheckCreateDefault advanced settingsDeveloper:DynamicDynamic computation of the number of blocks the files will be sliced intoDynamic computation of the number of parity filesFiles to protect:First recovery block in the parity filesFirst recovery block:Force all parity files to be of the same sizeGoLevel of redundancy (%):Level of redundancy of the parity filesLimit size of parity filesMaximum memory usageMaximum memory usage (MB):MemoryNumber of blocks the files will be sliced intoNumber of parity filesNumber of parity files:Number of recovery blocks in the parity filesPar2 file to createParity filesPyPar2QuitRecovery block count:RedundancyRemove allRemove selected fileRepair file(s)Restore the default value of all advanced settingsRight-click to add/remove some filesSelect A Par2 FileSelect directorySelect file(s)Size of the blocks the files will be sliced intoThanks to:Uniform parity file sizeUse advanced settingsVerify and then repair files if neededVerify file(s)Verify files, but do not try to repair themYou must first add some files to protect!You must first select a par2 file!_File_Helptranslator-creditsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2007-02-27 21:33+0100 PO-Revision-Date: 2007-01-29 00:38+0100 Last-Translator: Gumer Coronel Pérez Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tiene un tipo no soportado es una preferencia desconocida es un tipo no soportadoAcción a realizar:Fichero Par2:Una interfaz gráfica para la herramienta par2Añadir directorioAñadir fichero(s)PrincipioNúmero de bloques:Tamaño de bloque:BloquesComprobarCrearConfiguración avanzada por defectoDesarrollador:DinámicoCálculo dinámico del número de bloques en el que los ficheros serán divididosCálculo automático del número de ficheros de paridadFicheros a proteger:Primer bloque de restauración en los ficheros de paridadPrimer bloque de restauraciónForzar que todos los ficheros de paridad tengan el mismo tamaño¡Adelante!Nivel de redundancia (%):Nivel de redundancia de los ficheros de paridadLímite de tamaño de los ficheros de paridadMemoria máxima usadaMemoria máxima usada (MB):MemoriaNúmero de bloques en los que se dividirán los ficherosNúmero de ficheros de paridadNúmero de ficheros de paridadNúmero de bloques de restauración en los ficheros de paridadFichero par2 a crearFicheros de paridadPyPar2SalirNúmero de bloques de restauración:RedundanciaBorrar todoBorrar el fichero seleccionadoReparar fichero(s)Restaurar los valores por defecto de la configuración avanzadaClick derecho para añadir/quitar algunos ficherosSeleccionar un fichero Par2Seleccionar directorioSeleccionar fichero(s)Tamaño de los bloques en los que los ficheros serán divididosAgradecimientos a:Tamaño uniforme de los fichero de paridadUsar configuración avanzadaVerificar y luego reparar ficheros si es necesarioVerificar fichero(s)Verificar ficheros, pero no intentar repararlosPrimero debe añadir algunos ficheros al proyectoPrimero debe seleccionar un fichero par2_ArchivoA_yudaGumer Coronel Pérez ./PyPar2-1.4/locale/fr/0000755000175000017500000000000010611464626014706 5ustar ingelresingelres./PyPar2-1.4/locale/fr/LC_MESSAGES/0000755000175000017500000000000010611464626016473 5ustar ingelresingelres./PyPar2-1.4/locale/fr/LC_MESSAGES/pypar2.mo0000644000175000017500000001154710611464626020255 0ustar ingelresingelres?Y pq* ) 5 ?L]djq I1(,U-k' (./^u-     / 2> q $x    0   % &; b +q ) "    k u     / #% I ^ e u     K 8#\ t F1E#d7$ 3Sj#   5  C,Mz6 ,1K}341/8(><=+$? " 83%& 5 ;, : 64('!-279#.*0/1)> has an unsupported type is an unknown preference is an unsupported typeAction to perform:Par2 file:A graphical frontend for the par2 utility.Add directory contentAdd file(s)BeginningBlock count:Block size (KB):BlocksCheckCreateDefault advanced settingsDeveloper:DynamicDynamic computation of the number of blocks the files will be sliced intoDynamic computation of the number of parity filesFiles to protect:First recovery block in the parity filesFirst recovery block:Force all parity files to be of the same sizeGoLevel of redundancy (%):Level of redundancy of the parity filesLimit size of parity filesMaximum memory usageMaximum memory usage (MB):MemoryNumber of blocks the files will be sliced intoNumber of parity filesNumber of parity files:Number of recovery blocks in the parity filesPar2 file to createParity filesPausePyPar2QuitRecovery block count:RedundancyRemove allRemove selected fileRepair file(s)Restore the default value of all advanced settingsResumeRight-click to add/remove some filesSelect A Par2 FileSelect directorySelect file(s)Size of the blocks the files will be sliced intoThanks to:Uniform parity file sizeUse advanced settingsVerify and then repair files if neededVerify file(s)Verify files, but do not try to repair themYou must first add some files to protect!You must first select a par2 file!_File_Helptranslator-creditsProject-Id-Version: PyPar 2 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-02-27 21:33+0100 PO-Revision-Date: 2006-12-07 19:03+0100 Last-Translator: Francois Ingelrest Language-Team: French MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); possède un type non supporté est une préférence inconnue est un type non supportéAction :Fichier par2 :Une interface graphique pour le programme par2.Ajouter le contenu d'un répertoireAjouter des fichiersDébutNombre de blocsTaille de bloc (Ko)BlocsVérifierCréerOptions avancées par défautDéveloppeur :DynamiqueCalcul dynamique du nombre de blocs à utiliser pour découper les fichiersCalcul dynamique du nombre de fichiers de récupérationFichiers à protéger :Premier bloc de récuépérationPremier bloc de récupération :Forcer tous les fichiers de récupération à être de la même tailleOkTaux de redondanceTaux de redondance des fichiers de récupérationLimiter la taille des fichiersUtilisation maximale de la mémoireUtilisation maximale (Mo) :MémoireNombre de blocs à utiliser pour découper les fichiersNombre de fichiers de récupérationNombre de fichiers :Nombre de blocs dans les fichiers de récupérationFichier par2 à créerFichiers de récupérationPausePyPar2QuitterNombre de blocs de récupération :RedondanceTout retirerRetirer le fichier sélectionnéRéparer les fichiersRestaurer la valeur par défaut des options avancéesReprendreClic droit pour ajouter/retirer des fichiersChoisissez un fichier par2Sélectionnez un répertoireSélectionnez des fichiersTaille de bloc à utiliser pour découper les fichiersMerci à :Utiliser une taille uniformeUtiliser les options avancéesVérifier et réparer les fichiers si nécessaireVérifier les fichiersVérifier les fichiers sans essayer de les réparerVous devez d'abord ajouter des fichier à protéger!Vous devez d'abord sélectionner un fichier par2!_Fichier_AideIngelrest François ./PyPar2-1.4/locale/nl/0000755000175000017500000000000010611464626014710 5ustar ingelresingelres./PyPar2-1.4/locale/nl/LC_MESSAGES/0000755000175000017500000000000010611464626016475 5ustar ingelresingelres./PyPar2-1.4/locale/nl/LC_MESSAGES/pypar2.mo0000644000175000017500000001175210611464626020255 0ustar ingelresingelres@Y*# 9 E O\mtz I1*;(Mv-'.I.P-    % 0 ; P 2_  $    0 " - F &\  + ) "    *    0 %E k       # X3o$: @ba#8'`v*  (I>_ 7 C! es#:* 14 fS=>,%@ # 94&' 6 <- ;!75)(".38:$/+ 102*? has an unsupported type is an unknown preference is an unsupported typeAction to perform:Par2 file:A graphical frontend for the par2 utility.Add directory contentAdd file(s)BeginningBlock count:Block size (KB):BlocksCheckCreateDefault advanced settingsDeveloper:DynamicDynamic computation of the number of blocks the files will be sliced intoDynamic computation of the number of parity filesFiles to protectFiles to protect:First recovery block in the parity filesFirst recovery block:Force all parity files to be of the same sizeGoLevel of redundancy (%):Level of redundancy of the parity filesLimit size of parity filesMaximum memory usageMaximum memory usage (MB):MemoryNumber of blocks the files will be sliced intoNumber of parity filesNumber of parity files:Number of recovery blocks in the parity filesPar2 file to createParity filesPausePyPar2QuitRecovery block count:RedundancyRemove allRemove selected fileRepair file(s)Restore the default value of all advanced settingsResumeRight-click to add/remove some filesSelect A Par2 FileSelect directorySelect file(s)Size of the blocks the files will be sliced intoThanks to:Uniform parity file sizeUse advanced settingsVerify and then repair files if neededVerify file(s)Verify files, but do not try to repair themYou must first add some files to protect!You must first select a par2 file!_File_Helptranslator-creditsProject-Id-Version: nl.po_[UcRRnb] Report-Msgid-Bugs-To: POT-Creation-Date: 2007-02-27 21:33+0100 PO-Revision-Date: 2007-02-22 22:24+0100 Last-Translator: Rinse de Vries Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Dutch X-Poedit-Country: Netherlands, The X-Generator: KBabel 1.11.4 heeft een niet-ondersteund type is een onbekende voorkeur is een niet-ondersteund typeUit te voeren actie:PAR2-bestand:Een grafische schil voor par2cmdline.Mapinhoud toevoegenBestand(en) toevoegenBeginAantal blokken:Blokgrootte (KB):BlokkenControlerenAanmakenStandaard geavanceerde instellingenOntwikkelaar:DynamischDynamische berekening van het aantal blokken waarin de bestanden zullen worden opgedeeldDynamische berekening van het aantal PAR2-bestandenBestanden om te beschermenBestanden om te beschermen:Nummering van de PAR2-bestandenNummer eerste herstelblok:Alle PAR2-bestanden even groot makenStartHoeveelheid herstelgegevens (%):Hoeveelheid herstelgegevens van de PAR2-bestanden uigedrukt in percentage van het oringele bestandGrootte van PAR2-bestanden beperkenMaximum geheugengebruikMaximum geheugengebruik (MB):GeheugenAantal blokken waarin de bestanden gedeeld zullen wordenAantal PAR2-bestandenAantal PAR2-bestanden:Aantal herstelblokken in de PAR2-bestandenAan te maken PAR2-bestandPAR2-bestandenPauzePyPar2AfsluitenAantal herstelblokken:VolumeAlles verwijderenGeselecteerd bestand verwijderenBestand(en) reparerenHerstel de standaardwaarden van alle geavanceerde instellingenHervattenRechtsklik om bestanden toe te voegen of te verwijderenSelecteer een PAR2-bestandMap selecterenBestand(en) selecterenGrootte van de blokken waar de bestanden in opgedeeld zullen wordenMet dank aan:Maak PAR2-bestanden even grootGeavanceerde instellingen gebruikenBestanden verifiëren en vervolgens repareren indien nodigBestand(en) verifiërenBestanden verifiëren, maar niet reparerenVoeg eerst enkele bestanden om te beschermen toe.Selecteer eerst een PAR2-bestand_Bestand_HelpSander Smalbrugge Rinse de Vries ./PyPar2-1.4/locale/pl/0000755000175000017500000000000010611464626014712 5ustar ingelresingelres./PyPar2-1.4/locale/pl/LC_MESSAGES/0000755000175000017500000000000010611464626016477 5ustar ingelresingelres./PyPar2-1.4/locale/pl/LC_MESSAGES/pypar2.mo0000644000175000017500000001153310611464626020254 0ustar ingelresingelres?Y pq* ) 5 ?L]djq I1(,U-k' (./^u-     / 2> q $x    0   % &; b +q ) "    {      ' ( C Q [ k   , E 1$#V2z9 '$/L|)0 7;s   >W:^2)<:W+6"*0#7<=+$? " 83%& 5 ;, : 64('!-279#.*0/1)> has an unsupported type is an unknown preference is an unsupported typeAction to perform:Par2 file:A graphical frontend for the par2 utility.Add directory contentAdd file(s)BeginningBlock count:Block size (KB):BlocksCheckCreateDefault advanced settingsDeveloper:DynamicDynamic computation of the number of blocks the files will be sliced intoDynamic computation of the number of parity filesFiles to protect:First recovery block in the parity filesFirst recovery block:Force all parity files to be of the same sizeGoLevel of redundancy (%):Level of redundancy of the parity filesLimit size of parity filesMaximum memory usageMaximum memory usage (MB):MemoryNumber of blocks the files will be sliced intoNumber of parity filesNumber of parity files:Number of recovery blocks in the parity filesPar2 file to createParity filesPausePyPar2QuitRecovery block count:RedundancyRemove allRemove selected fileRepair file(s)Restore the default value of all advanced settingsResumeRight-click to add/remove some filesSelect A Par2 FileSelect directorySelect file(s)Size of the blocks the files will be sliced intoThanks to:Uniform parity file sizeUse advanced settingsVerify and then repair files if neededVerify file(s)Verify files, but do not try to repair themYou must first add some files to protect!You must first select a par2 file!_File_Helptranslator-creditsProject-Id-Version: pypar2 1.0 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-02-27 21:33+0100 PO-Revision-Date: 2006-12-07 12:00+0100 Last-Translator: Piotr Ożarowski MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); ma niewspierany typ nie jest obsługiwaną opcją jest niewspieranym typemAkcja do wykonania:Plik par2:Graficzna nakładka na narzędzie par2.Dodaj zawartość kataloguDodaj plik(i)PoczątekLiczna bloków:Rozmiar bloku (KB):BlokiKontrolaTworzenieDomyślne wartości dla opcji zaawansowanychRozwijający:DynamiczneDynamiczne obliczenie liczby bloków na jakie podzielone będą plikiDynamiczne obliczenie liczby plików parzystościPliki, które mają być chronione:Pierwszy blok naprawiający w plikach parzystościPierwszy blok naprawiający:Wymuś identyczny rozmiar wszystkich plików parzystościUruchomPoziom redundancji (%):Poziom redundancji plików parzystościOgraniczenie wielkości plików naprawiającychMaksymalna zużycie pamięciMaksymalna ilość użytej pamięci (MB):PamięćIlość bloków na jakie będą podzielone plikiIlość plików parzystościIlość plików naprawiających:Ilość bloków naprawiąjących w plikach parzystościPlik par2 do stworzeniaPliki parzystościPauzaPyPar2WyjścieIlość bloków naprawiających:RedundancjaWyczyść listęUsuń zaznaczone plikiNapraw plik(i)Przywróć domyślne wartości wszystkich opcji zaawansowanychWznówKliknij prawym przyciskiem myszy aby dodać/usunąć plikiWybierz plik par2Wybierz katalogWybierz plik(i)Rozmiar bloków na jakie zostaną podzielone plikiPodziękowania dla:Jednakowy rozmiar plików naprawiającychUżyj opcji zaawansowanychWeryfikuj pliki i napraw je, jeżeli zajdzie taka potrzebaWeryfikuj plik(i)Weryfikuj pliki, ale nie próbuj naprawiaćMusisz najpierw wybrać pliki, które chcesz chronić!Musisz najpierw wybrać plik par2!_PlikP_omocPiotr Ożarowski ./PyPar2-1.4/locale/ru/0000755000175000017500000000000010611464626014725 5ustar ingelresingelres./PyPar2-1.4/locale/ru/LC_MESSAGES/0000755000175000017500000000000010611464626016512 5ustar ingelresingelres./PyPar2-1.4/locale/ru/LC_MESSAGES/pypar2.mo0000644000175000017500000001405210611464626020266 0ustar ingelresingelres?Y pq* ) 5 ?L]djq I1+(=f-|' 9.@o-    $ 9 2H { $    0  / &E l +{ ) "     2 ! , I [ Qj %  " 0 NYl;{ZU(3~` , 4MGI6 K|X6- Y:)  52*H%sJmi#@@"cfv!WOW>  +<=+%? # 83&' 5 ;, :!64("-279$.* 0/1)> has an unsupported type is an unknown preference is an unsupported typeAction to perform:Par2 file:A graphical frontend for the par2 utility.Add directory contentAdd file(s)BeginningBlock count:Block size (KB):BlocksCheckCreateDefault advanced settingsDeveloper:DynamicDynamic computation of the number of blocks the files will be sliced intoDynamic computation of the number of parity filesFiles to protectFiles to protect:First recovery block in the parity filesFirst recovery block:Force all parity files to be of the same sizeGoLevel of redundancy (%):Level of redundancy of the parity filesLimit size of parity filesMaximum memory usageMaximum memory usage (MB):MemoryNumber of blocks the files will be sliced intoNumber of parity filesNumber of parity files:Number of recovery blocks in the parity filesPar2 file to createParity filesPauseQuitRecovery block count:RedundancyRemove allRemove selected fileRepair file(s)Restore the default value of all advanced settingsResumeRight-click to add/remove some filesSelect A Par2 FileSelect directorySelect file(s)Size of the blocks the files will be sliced intoThanks to:Uniform parity file sizeUse advanced settingsVerify and then repair files if neededVerify file(s)Verify files, but do not try to repair themYou must first add some files to protect!You must first select a par2 file!_File_Helptranslator-creditsProject-Id-Version: PyPar 2 Report-Msgid-Bugs-To: POT-Creation-Date: 2007-04-11 11:25+0200 PO-Revision-Date: 2007-04-11 11:25+0200 Last-Translator: Solomin Evgeny Language-Team: Russian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); имеет неподдерживаемый типнеизвестная опция неподдерживаемого типаДействие:Par2 файл:Графическая утилита для работы с файлами par2.Добавить директориюДобавить файл(ы)НачалоКоличество блоков:Размер блока (KB):БлокиПроверитьСоздатьПараметры настроек по умолчаниюРазработка:ДинамическиДинамическое вычисление числа блоков в файлах, которые получатся после разбиения, на выходеДинамическое вычисление числа паритетных файловФайлы для защитыФайлы для защиты:Первый восстановочный блок в паритетном файлеПервый восстановочный блок:Все паритетные файлы должны иметь одинаковый размерНачатьУровень избыточности (%):Уровень избыточности файловМаксимальный размер паритетного файлаМаксимальный объем используемой памятиМаксимальный объем памяти (MB):ПамятьЧисло блоков в файлах, которые получаться после разбиения на выходеКоличество паритетных файловЧисло паритетных файлов:Число восстановочных блоков в паритетных файлахPar2 файл, что бы создатьPar файлыПаузаВыходЧисло восстановочных блоков:ИзбыточностьУдалить всеУдалить выбранный файлВосстановить файл(ы)Восстановить все настройки по умолчаниюВозобновитьЩелкните правой кнопкой мышы, что бы добавить/удалить файлыВыбрать Par2 ФайлВыбрать директориюВыбрать файл(ы)Размер блоков файлов для разбиенияБлагодарностиОдинаковый размер файлов на выходеНастройкиПроверить и затем при необходимости восстановить файлыПроверить файлы(ы)Проверить файлы, но не пытаться восстановить ихСначала Вы должны добавить файлы к проекту!Сначала Вы должны выбрать par2 файл!_Файл_ПомощьПеревод ./PyPar2-1.4/po/0000755000175000017500000000000010611464626013456 5ustar ingelresingelres./PyPar2-1.4/po/messages.pot0000644000175000017500000001206610611464626016016 0ustar ingelresingelres# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-04-11 11:25+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dlgAbout.py:34 msgid "translator-credits" msgstr "" #: ../src/dlgAbout.py:35 msgid "A graphical frontend for the par2 utility." msgstr "" #: ../src/dlgAbout.py:39 msgid "Developer:" msgstr "" #: ../src/dlgAbout.py:42 msgid "Thanks to:" msgstr "" #: ../src/dlgChooseFiles.py:59 msgid "Select file(s)" msgstr "" #: ../src/dlgChooseFiles.py:63 msgid "Select directory" msgstr "" #: ../src/dlgOutput.py:67 ../src/dlgOutput.py:146 msgid "Pause" msgstr "" #: ../src/dlgOutput.py:151 msgid "Resume" msgstr "" #: ../src/main.py:143 msgid "You must first select a par2 file!" msgstr "" #: ../src/main.py:150 msgid "You must first add some files to protect!" msgstr "" #: ../src/prefsManager.py:81 ../src/prefsManager.py:90 msgid " is an unknown preference" msgstr "" #: ../src/treeview.py:76 msgid "Files to protect:" msgstr "" #: ../src/typeToolBox.py:31 msgid " has an unsupported type" msgstr "" #: ../src/typeToolBox.py:42 msgid " is an unsupported type" msgstr "" #: ../res/creationpopupmenus.glade.h:1 msgid "Add directory content" msgstr "" #: ../res/creationpopupmenus.glade.h:2 msgid "Add file(s)" msgstr "" #: ../res/creationpopupmenus.glade.h:3 msgid "Remove all" msgstr "" #: ../res/creationpopupmenus.glade.h:4 msgid "Remove selected file" msgstr "" #: ../res/dlg-output.glade.h:1 ../res/win-main.glade.h:30 msgid "PyPar2" msgstr "" #: ../res/dlg-save.glade.h:1 msgid "Par2 file to create" msgstr "" #: ../res/win-main.glade.h:1 msgid "Action to perform:" msgstr "" #: ../res/win-main.glade.h:2 msgid "Par2 file:" msgstr "" #: ../res/win-main.glade.h:3 msgid "Beginning" msgstr "" #: ../res/win-main.glade.h:4 msgid "Block count:" msgstr "" #: ../res/win-main.glade.h:5 msgid "Block size (KB):" msgstr "" #: ../res/win-main.glade.h:6 msgid "Blocks" msgstr "" #: ../res/win-main.glade.h:7 msgid "Check" msgstr "" #: ../res/win-main.glade.h:8 msgid "Create" msgstr "" #: ../res/win-main.glade.h:9 msgid "Default advanced settings" msgstr "" #: ../res/win-main.glade.h:10 msgid "Dynamic" msgstr "" #: ../res/win-main.glade.h:11 msgid "" "Dynamic computation of the number of blocks the files will be sliced into" msgstr "" #: ../res/win-main.glade.h:12 msgid "Dynamic computation of the number of parity files" msgstr "" #: ../res/win-main.glade.h:13 msgid "Files to protect" msgstr "" #: ../res/win-main.glade.h:14 msgid "First recovery block in the parity files" msgstr "" #: ../res/win-main.glade.h:15 msgid "First recovery block:" msgstr "" #: ../res/win-main.glade.h:16 msgid "Force all parity files to be of the same size" msgstr "" #: ../res/win-main.glade.h:17 msgid "Go" msgstr "" #: ../res/win-main.glade.h:19 #, no-c-format msgid "Level of redundancy (%):" msgstr "" #: ../res/win-main.glade.h:20 msgid "Level of redundancy of the parity files" msgstr "" #: ../res/win-main.glade.h:21 msgid "Limit size of parity files" msgstr "" #: ../res/win-main.glade.h:22 msgid "Maximum memory usage" msgstr "" #: ../res/win-main.glade.h:23 msgid "Maximum memory usage (MB):" msgstr "" #: ../res/win-main.glade.h:24 msgid "Memory" msgstr "" #: ../res/win-main.glade.h:25 msgid "Number of blocks the files will be sliced into" msgstr "" #: ../res/win-main.glade.h:26 msgid "Number of parity files" msgstr "" #: ../res/win-main.glade.h:27 msgid "Number of parity files:" msgstr "" #: ../res/win-main.glade.h:28 msgid "Number of recovery blocks in the parity files" msgstr "" #: ../res/win-main.glade.h:29 msgid "Parity files" msgstr "" #: ../res/win-main.glade.h:31 msgid "Quit" msgstr "" #: ../res/win-main.glade.h:32 msgid "Recovery block count:" msgstr "" #: ../res/win-main.glade.h:33 msgid "Redundancy" msgstr "" #: ../res/win-main.glade.h:34 msgid "Repair file(s)" msgstr "" #: ../res/win-main.glade.h:35 msgid "Restore the default value of all advanced settings" msgstr "" #: ../res/win-main.glade.h:36 msgid "Right-click to add/remove some files" msgstr "" #: ../res/win-main.glade.h:37 msgid "Select A Par2 File" msgstr "" #: ../res/win-main.glade.h:38 msgid "Size of the blocks the files will be sliced into" msgstr "" #: ../res/win-main.glade.h:39 msgid "Uniform parity file size" msgstr "" #: ../res/win-main.glade.h:40 msgid "Use advanced settings" msgstr "" #: ../res/win-main.glade.h:41 msgid "Verify and then repair files if needed" msgstr "" #: ../res/win-main.glade.h:42 msgid "Verify file(s)" msgstr "" #: ../res/win-main.glade.h:43 msgid "Verify files, but do not try to repair them" msgstr "" #: ../res/win-main.glade.h:44 msgid "_File" msgstr "" #: ../res/win-main.glade.h:45 msgid "_Help" msgstr "" ./PyPar2-1.4/po/pl.po0000644000175000017500000001547610611464626014446 0ustar ingelresingelres# Polish translations for pypar2 package. # Copyright (C) 2006 Ingelrest François # This file is distributed under the same license as the pypar2 package. # Piotr Ozarowski , 2006. msgid "" msgstr "" "Project-Id-Version: pypar2 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-02-27 21:33+0100\n" "PO-Revision-Date: 2006-12-07 12:00+0100\n" "Last-Translator: Piotr Ożarowski \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: ../src/dlgAbout.py:34 msgid "translator-credits" msgstr "Piotr Ożarowski " #: ../src/dlgAbout.py:35 msgid "A graphical frontend for the par2 utility." msgstr "Graficzna nakładka na narzędzie par2." #: ../src/dlgAbout.py:39 msgid "Developer:" msgstr "Rozwijający:" #: ../src/dlgAbout.py:42 msgid "Thanks to:" msgstr "Podziękowania dla:" #: ../src/dlgChooseFiles.py:59 msgid "Select file(s)" msgstr "Wybierz plik(i)" #: ../src/dlgChooseFiles.py:63 msgid "Select directory" msgstr "Wybierz katalog" #: ../src/dlgOutput.py:144 msgid "Pause" msgstr "Pauza" #: ../src/dlgOutput.py:149 msgid "Resume" msgstr "Wznów" #: ../src/main.py:143 msgid "You must first select a par2 file!" msgstr "Musisz najpierw wybrać plik par2!" #: ../src/main.py:150 msgid "You must first add some files to protect!" msgstr "Musisz najpierw wybrać pliki, które chcesz chronić!" #: ../src/prefsManager.py:81 ../src/prefsManager.py:90 msgid " is an unknown preference" msgstr " nie jest obsługiwaną opcją" #: ../src/treeview.py:76 msgid "Files to protect:" msgstr "Pliki, które mają być chronione:" #: ../src/typeToolBox.py:31 msgid " has an unsupported type" msgstr " ma niewspierany typ" #: ../src/typeToolBox.py:42 msgid " is an unsupported type" msgstr " jest niewspieranym typem" #: ../res/creationpopupmenus.glade.h:1 msgid "Add directory content" msgstr "Dodaj zawartość katalogu" #: ../res/creationpopupmenus.glade.h:2 msgid "Add file(s)" msgstr "Dodaj plik(i)" #: ../res/creationpopupmenus.glade.h:3 msgid "Remove all" msgstr "Wyczyść listę" #: ../res/creationpopupmenus.glade.h:4 msgid "Remove selected file" msgstr "Usuń zaznaczone pliki" #: ../res/dlg-output.glade.h:1 ../res/win-main.glade.h:30 msgid "PyPar2" msgstr "PyPar2" #: ../res/dlg-save.glade.h:1 msgid "Par2 file to create" msgstr "Plik par2 do stworzenia" #: ../res/win-main.glade.h:1 msgid "Action to perform:" msgstr "Akcja do wykonania:" #: ../res/win-main.glade.h:2 msgid "Par2 file:" msgstr "Plik par2:" #: ../res/win-main.glade.h:3 msgid "Beginning" msgstr "Początek" #: ../res/win-main.glade.h:4 msgid "Block count:" msgstr "Liczna bloków:" #: ../res/win-main.glade.h:5 msgid "Block size (KB):" msgstr "Rozmiar bloku (KB):" #: ../res/win-main.glade.h:6 msgid "Blocks" msgstr "Bloki" #: ../res/win-main.glade.h:7 msgid "Check" msgstr "Kontrola" #: ../res/win-main.glade.h:8 msgid "Create" msgstr "Tworzenie" #: ../res/win-main.glade.h:9 msgid "Default advanced settings" msgstr "Domyślne wartości dla opcji zaawansowanych" #: ../res/win-main.glade.h:10 msgid "Dynamic" msgstr "Dynamiczne" #: ../res/win-main.glade.h:11 msgid "" "Dynamic computation of the number of blocks the files will be sliced into" msgstr "Dynamiczne obliczenie liczby bloków na jakie podzielone będą pliki" #: ../res/win-main.glade.h:12 msgid "Dynamic computation of the number of parity files" msgstr "Dynamiczne obliczenie liczby plików parzystości" #: ../res/win-main.glade.h:13 #, fuzzy msgid "Files to protect" msgstr "Pliki, które mają być chronione:" #: ../res/win-main.glade.h:14 msgid "First recovery block in the parity files" msgstr "Pierwszy blok naprawiający w plikach parzystości" #: ../res/win-main.glade.h:15 msgid "First recovery block:" msgstr "Pierwszy blok naprawiający:" #: ../res/win-main.glade.h:16 msgid "Force all parity files to be of the same size" msgstr "Wymuś identyczny rozmiar wszystkich plików parzystości" #: ../res/win-main.glade.h:17 msgid "Go" msgstr "Uruchom" #: ../res/win-main.glade.h:19 #, no-c-format msgid "Level of redundancy (%):" msgstr "Poziom redundancji (%):" #: ../res/win-main.glade.h:20 msgid "Level of redundancy of the parity files" msgstr "Poziom redundancji plików parzystości" #: ../res/win-main.glade.h:21 msgid "Limit size of parity files" msgstr "Ograniczenie wielkości plików naprawiających" #: ../res/win-main.glade.h:22 msgid "Maximum memory usage" msgstr "Maksymalna zużycie pamięci" #: ../res/win-main.glade.h:23 msgid "Maximum memory usage (MB):" msgstr "Maksymalna ilość użytej pamięci (MB):" #: ../res/win-main.glade.h:24 msgid "Memory" msgstr "Pamięć" #: ../res/win-main.glade.h:25 msgid "Number of blocks the files will be sliced into" msgstr "Ilość bloków na jakie będą podzielone pliki" #: ../res/win-main.glade.h:26 msgid "Number of parity files" msgstr "Ilość plików parzystości" #: ../res/win-main.glade.h:27 msgid "Number of parity files:" msgstr "Ilość plików naprawiających:" #: ../res/win-main.glade.h:28 msgid "Number of recovery blocks in the parity files" msgstr "Ilość bloków naprawiąjących w plikach parzystości" #: ../res/win-main.glade.h:29 msgid "Parity files" msgstr "Pliki parzystości" #: ../res/win-main.glade.h:31 msgid "Quit" msgstr "Wyjście" #: ../res/win-main.glade.h:32 msgid "Recovery block count:" msgstr "Ilość bloków naprawiających:" #: ../res/win-main.glade.h:33 msgid "Redundancy" msgstr "Redundancja" #: ../res/win-main.glade.h:34 msgid "Repair file(s)" msgstr "Napraw plik(i)" #: ../res/win-main.glade.h:35 msgid "Restore the default value of all advanced settings" msgstr "Przywróć domyślne wartości wszystkich opcji zaawansowanych" #: ../res/win-main.glade.h:36 msgid "Right-click to add/remove some files" msgstr "Kliknij prawym przyciskiem myszy aby dodać/usunąć pliki" #: ../res/win-main.glade.h:37 msgid "Select A Par2 File" msgstr "Wybierz plik par2" #: ../res/win-main.glade.h:38 msgid "Size of the blocks the files will be sliced into" msgstr "Rozmiar bloków na jakie zostaną podzielone pliki" #: ../res/win-main.glade.h:39 msgid "Uniform parity file size" msgstr "Jednakowy rozmiar plików naprawiających" #: ../res/win-main.glade.h:40 msgid "Use advanced settings" msgstr "Użyj opcji zaawansowanych" #: ../res/win-main.glade.h:41 msgid "Verify and then repair files if needed" msgstr "Weryfikuj pliki i napraw je, jeżeli zajdzie taka potrzeba" #: ../res/win-main.glade.h:42 msgid "Verify file(s)" msgstr "Weryfikuj plik(i)" #: ../res/win-main.glade.h:43 msgid "Verify files, but do not try to repair them" msgstr "Weryfikuj pliki, ale nie próbuj naprawiać" #: ../res/win-main.glade.h:44 msgid "_File" msgstr "_Plik" #: ../res/win-main.glade.h:45 msgid "_Help" msgstr "P_omoc" ./PyPar2-1.4/po/nl.po0000644000175000017500000001542310611464626014434 0ustar ingelresingelres# translation of nl.po_[UcRRnb].po to # Rinse de Vries , 2007. msgid "" msgstr "" "Project-Id-Version: nl.po_[UcRRnb]\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-02-27 21:33+0100\n" "PO-Revision-Date: 2007-02-22 22:24+0100\n" "Last-Translator: Rinse de Vries \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Dutch\n" "X-Poedit-Country: Netherlands, The\n" "X-Generator: KBabel 1.11.4\n" #: ../src/dlgAbout.py:34 msgid "translator-credits" msgstr "" "Sander Smalbrugge \n" "Rinse de Vries " #: ../src/dlgAbout.py:35 msgid "A graphical frontend for the par2 utility." msgstr "Een grafische schil voor par2cmdline." #: ../src/dlgAbout.py:39 msgid "Developer:" msgstr "Ontwikkelaar:" #: ../src/dlgAbout.py:42 msgid "Thanks to:" msgstr "Met dank aan:" #: ../src/dlgChooseFiles.py:59 msgid "Select file(s)" msgstr "Bestand(en) selecteren" #: ../src/dlgChooseFiles.py:63 msgid "Select directory" msgstr "Map selecteren" #: ../src/dlgOutput.py:144 msgid "Pause" msgstr "Pauze" #: ../src/dlgOutput.py:149 msgid "Resume" msgstr "Hervatten" #: ../src/main.py:143 msgid "You must first select a par2 file!" msgstr "Selecteer eerst een PAR2-bestand" #: ../src/main.py:150 msgid "You must first add some files to protect!" msgstr "Voeg eerst enkele bestanden om te beschermen toe." #: ../src/prefsManager.py:81 ../src/prefsManager.py:90 msgid " is an unknown preference" msgstr " is een onbekende voorkeur" #: ../src/treeview.py:76 msgid "Files to protect:" msgstr "Bestanden om te beschermen:" #: ../src/typeToolBox.py:31 msgid " has an unsupported type" msgstr " heeft een niet-ondersteund type" #: ../src/typeToolBox.py:42 msgid " is an unsupported type" msgstr " is een niet-ondersteund type" #: ../res/creationpopupmenus.glade.h:1 msgid "Add directory content" msgstr "Mapinhoud toevoegen" #: ../res/creationpopupmenus.glade.h:2 msgid "Add file(s)" msgstr "Bestand(en) toevoegen" #: ../res/creationpopupmenus.glade.h:3 msgid "Remove all" msgstr "Alles verwijderen" #: ../res/creationpopupmenus.glade.h:4 msgid "Remove selected file" msgstr "Geselecteerd bestand verwijderen" #: ../res/dlg-output.glade.h:1 ../res/win-main.glade.h:30 msgid "PyPar2" msgstr "PyPar2" #: ../res/dlg-save.glade.h:1 msgid "Par2 file to create" msgstr "Aan te maken PAR2-bestand" #: ../res/win-main.glade.h:1 msgid "Action to perform:" msgstr "Uit te voeren actie:" #: ../res/win-main.glade.h:2 msgid "Par2 file:" msgstr "PAR2-bestand:" #: ../res/win-main.glade.h:3 msgid "Beginning" msgstr "Begin" #: ../res/win-main.glade.h:4 msgid "Block count:" msgstr "Aantal blokken:" #: ../res/win-main.glade.h:5 msgid "Block size (KB):" msgstr "Blokgrootte (KB):" #: ../res/win-main.glade.h:6 msgid "Blocks" msgstr "Blokken" #: ../res/win-main.glade.h:7 msgid "Check" msgstr "Controleren" #: ../res/win-main.glade.h:8 msgid "Create" msgstr "Aanmaken" #: ../res/win-main.glade.h:9 msgid "Default advanced settings" msgstr "Standaard geavanceerde instellingen" #: ../res/win-main.glade.h:10 msgid "Dynamic" msgstr "Dynamisch" #: ../res/win-main.glade.h:11 msgid "" "Dynamic computation of the number of blocks the files will be sliced into" msgstr "" "Dynamische berekening van het aantal blokken waarin de bestanden zullen " "worden opgedeeld" #: ../res/win-main.glade.h:12 msgid "Dynamic computation of the number of parity files" msgstr "Dynamische berekening van het aantal PAR2-bestanden" #: ../res/win-main.glade.h:13 msgid "Files to protect" msgstr "Bestanden om te beschermen" #: ../res/win-main.glade.h:14 msgid "First recovery block in the parity files" msgstr "Nummering van de PAR2-bestanden" #: ../res/win-main.glade.h:15 msgid "First recovery block:" msgstr "Nummer eerste herstelblok:" #: ../res/win-main.glade.h:16 msgid "Force all parity files to be of the same size" msgstr "Alle PAR2-bestanden even groot maken" #: ../res/win-main.glade.h:17 msgid "Go" msgstr "Start" #: ../res/win-main.glade.h:19 #, no-c-format msgid "Level of redundancy (%):" msgstr "Hoeveelheid herstelgegevens (%):" #: ../res/win-main.glade.h:20 msgid "Level of redundancy of the parity files" msgstr "" "Hoeveelheid herstelgegevens van de PAR2-bestanden uigedrukt in percentage " "van het oringele bestand" #: ../res/win-main.glade.h:21 msgid "Limit size of parity files" msgstr "Grootte van PAR2-bestanden beperken" #: ../res/win-main.glade.h:22 msgid "Maximum memory usage" msgstr "Maximum geheugengebruik" #: ../res/win-main.glade.h:23 msgid "Maximum memory usage (MB):" msgstr "Maximum geheugengebruik (MB):" #: ../res/win-main.glade.h:24 msgid "Memory" msgstr "Geheugen" #: ../res/win-main.glade.h:25 msgid "Number of blocks the files will be sliced into" msgstr "Aantal blokken waarin de bestanden gedeeld zullen worden" #: ../res/win-main.glade.h:26 msgid "Number of parity files" msgstr "Aantal PAR2-bestanden" #: ../res/win-main.glade.h:27 msgid "Number of parity files:" msgstr "Aantal PAR2-bestanden:" #: ../res/win-main.glade.h:28 msgid "Number of recovery blocks in the parity files" msgstr "Aantal herstelblokken in de PAR2-bestanden" #: ../res/win-main.glade.h:29 msgid "Parity files" msgstr "PAR2-bestanden" #: ../res/win-main.glade.h:31 msgid "Quit" msgstr "Afsluiten" #: ../res/win-main.glade.h:32 msgid "Recovery block count:" msgstr "Aantal herstelblokken:" #: ../res/win-main.glade.h:33 msgid "Redundancy" msgstr "Volume" #: ../res/win-main.glade.h:34 msgid "Repair file(s)" msgstr "Bestand(en) repareren" #: ../res/win-main.glade.h:35 msgid "Restore the default value of all advanced settings" msgstr "Herstel de standaardwaarden van alle geavanceerde instellingen" #: ../res/win-main.glade.h:36 msgid "Right-click to add/remove some files" msgstr "Rechtsklik om bestanden toe te voegen of te verwijderen" #: ../res/win-main.glade.h:37 msgid "Select A Par2 File" msgstr "Selecteer een PAR2-bestand" #: ../res/win-main.glade.h:38 msgid "Size of the blocks the files will be sliced into" msgstr "Grootte van de blokken waar de bestanden in opgedeeld zullen worden" #: ../res/win-main.glade.h:39 msgid "Uniform parity file size" msgstr "Maak PAR2-bestanden even groot" #: ../res/win-main.glade.h:40 msgid "Use advanced settings" msgstr "Geavanceerde instellingen gebruiken" #: ../res/win-main.glade.h:41 msgid "Verify and then repair files if needed" msgstr "Bestanden verifiëren en vervolgens repareren indien nodig" #: ../res/win-main.glade.h:42 msgid "Verify file(s)" msgstr "Bestand(en) verifiëren" #: ../res/win-main.glade.h:43 msgid "Verify files, but do not try to repair them" msgstr "Bestanden verifiëren, maar niet repareren" #: ../res/win-main.glade.h:44 msgid "_File" msgstr "_Bestand" #: ../res/win-main.glade.h:45 msgid "_Help" msgstr "_Help" ./PyPar2-1.4/po/fr.po0000644000175000017500000001547310611464626014437 0ustar ingelresingelres# French translations for PyPar package. # Copyright (C) 2006 THE PyPar'S COPYRIGHT HOLDER # This file is distributed under the same license as the PyPar package. # Francois Ingelrest , 2006. # msgid "" msgstr "" "Project-Id-Version: PyPar 2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-02-27 21:33+0100\n" "PO-Revision-Date: 2006-12-07 19:03+0100\n" "Last-Translator: Francois Ingelrest \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../src/dlgAbout.py:34 msgid "translator-credits" msgstr "Ingelrest François " #: ../src/dlgAbout.py:35 msgid "A graphical frontend for the par2 utility." msgstr "Une interface graphique pour le programme par2." #: ../src/dlgAbout.py:39 msgid "Developer:" msgstr "Développeur :" #: ../src/dlgAbout.py:42 msgid "Thanks to:" msgstr "Merci à :" #: ../src/dlgChooseFiles.py:59 msgid "Select file(s)" msgstr "Sélectionnez des fichiers" #: ../src/dlgChooseFiles.py:63 msgid "Select directory" msgstr "Sélectionnez un répertoire" #: ../src/dlgOutput.py:144 msgid "Pause" msgstr "Pause" #: ../src/dlgOutput.py:149 msgid "Resume" msgstr "Reprendre" #: ../src/main.py:143 msgid "You must first select a par2 file!" msgstr "Vous devez d'abord sélectionner un fichier par2!" #: ../src/main.py:150 msgid "You must first add some files to protect!" msgstr "Vous devez d'abord ajouter des fichier à protéger!" #: ../src/prefsManager.py:81 ../src/prefsManager.py:90 msgid " is an unknown preference" msgstr " est une préférence inconnue" #: ../src/treeview.py:76 msgid "Files to protect:" msgstr "Fichiers à protéger :" #: ../src/typeToolBox.py:31 msgid " has an unsupported type" msgstr " possède un type non supporté" #: ../src/typeToolBox.py:42 msgid " is an unsupported type" msgstr " est un type non supporté" #: ../res/creationpopupmenus.glade.h:1 msgid "Add directory content" msgstr "Ajouter le contenu d'un répertoire" #: ../res/creationpopupmenus.glade.h:2 msgid "Add file(s)" msgstr "Ajouter des fichiers" #: ../res/creationpopupmenus.glade.h:3 msgid "Remove all" msgstr "Tout retirer" #: ../res/creationpopupmenus.glade.h:4 msgid "Remove selected file" msgstr "Retirer le fichier sélectionné" #: ../res/dlg-output.glade.h:1 ../res/win-main.glade.h:30 msgid "PyPar2" msgstr "PyPar2" #: ../res/dlg-save.glade.h:1 msgid "Par2 file to create" msgstr "Fichier par2 à créer" #: ../res/win-main.glade.h:1 msgid "Action to perform:" msgstr "Action :" #: ../res/win-main.glade.h:2 msgid "Par2 file:" msgstr "Fichier par2 :" #: ../res/win-main.glade.h:3 msgid "Beginning" msgstr "Début" #: ../res/win-main.glade.h:4 msgid "Block count:" msgstr "Nombre de blocs" #: ../res/win-main.glade.h:5 msgid "Block size (KB):" msgstr "Taille de bloc (Ko)" #: ../res/win-main.glade.h:6 msgid "Blocks" msgstr "Blocs" #: ../res/win-main.glade.h:7 msgid "Check" msgstr "Vérifier" #: ../res/win-main.glade.h:8 msgid "Create" msgstr "Créer" #: ../res/win-main.glade.h:9 msgid "Default advanced settings" msgstr "Options avancées par défaut" #: ../res/win-main.glade.h:10 msgid "Dynamic" msgstr "Dynamique" #: ../res/win-main.glade.h:11 msgid "" "Dynamic computation of the number of blocks the files will be sliced into" msgstr "" "Calcul dynamique du nombre de blocs à utiliser pour découper les fichiers" #: ../res/win-main.glade.h:12 msgid "Dynamic computation of the number of parity files" msgstr "Calcul dynamique du nombre de fichiers de récupération" #: ../res/win-main.glade.h:13 #, fuzzy msgid "Files to protect" msgstr "Fichiers à protéger :" #: ../res/win-main.glade.h:14 msgid "First recovery block in the parity files" msgstr "Premier bloc de récuépération" #: ../res/win-main.glade.h:15 msgid "First recovery block:" msgstr "Premier bloc de récupération :" #: ../res/win-main.glade.h:16 msgid "Force all parity files to be of the same size" msgstr "Forcer tous les fichiers de récupération à être de la même taille" #: ../res/win-main.glade.h:17 msgid "Go" msgstr "Ok" #: ../res/win-main.glade.h:19 #, no-c-format msgid "Level of redundancy (%):" msgstr "Taux de redondance" #: ../res/win-main.glade.h:20 msgid "Level of redundancy of the parity files" msgstr "Taux de redondance des fichiers de récupération" #: ../res/win-main.glade.h:21 msgid "Limit size of parity files" msgstr "Limiter la taille des fichiers" #: ../res/win-main.glade.h:22 msgid "Maximum memory usage" msgstr "Utilisation maximale de la mémoire" #: ../res/win-main.glade.h:23 msgid "Maximum memory usage (MB):" msgstr "Utilisation maximale (Mo) :" #: ../res/win-main.glade.h:24 msgid "Memory" msgstr "Mémoire" #: ../res/win-main.glade.h:25 msgid "Number of blocks the files will be sliced into" msgstr "Nombre de blocs à utiliser pour découper les fichiers" #: ../res/win-main.glade.h:26 msgid "Number of parity files" msgstr "Nombre de fichiers de récupération" #: ../res/win-main.glade.h:27 msgid "Number of parity files:" msgstr "Nombre de fichiers :" #: ../res/win-main.glade.h:28 msgid "Number of recovery blocks in the parity files" msgstr "Nombre de blocs dans les fichiers de récupération" #: ../res/win-main.glade.h:29 msgid "Parity files" msgstr "Fichiers de récupération" #: ../res/win-main.glade.h:31 msgid "Quit" msgstr "Quitter" #: ../res/win-main.glade.h:32 msgid "Recovery block count:" msgstr "Nombre de blocs de récupération :" #: ../res/win-main.glade.h:33 msgid "Redundancy" msgstr "Redondance" #: ../res/win-main.glade.h:34 msgid "Repair file(s)" msgstr "Réparer les fichiers" #: ../res/win-main.glade.h:35 msgid "Restore the default value of all advanced settings" msgstr "Restaurer la valeur par défaut des options avancées" #: ../res/win-main.glade.h:36 msgid "Right-click to add/remove some files" msgstr "Clic droit pour ajouter/retirer des fichiers" #: ../res/win-main.glade.h:37 msgid "Select A Par2 File" msgstr "Choisissez un fichier par2" #: ../res/win-main.glade.h:38 msgid "Size of the blocks the files will be sliced into" msgstr "Taille de bloc à utiliser pour découper les fichiers" #: ../res/win-main.glade.h:39 msgid "Uniform parity file size" msgstr "Utiliser une taille uniforme" #: ../res/win-main.glade.h:40 msgid "Use advanced settings" msgstr "Utiliser les options avancées" #: ../res/win-main.glade.h:41 msgid "Verify and then repair files if needed" msgstr "Vérifier et réparer les fichiers si nécessaire" #: ../res/win-main.glade.h:42 msgid "Verify file(s)" msgstr "Vérifier les fichiers" #: ../res/win-main.glade.h:43 msgid "Verify files, but do not try to repair them" msgstr "Vérifier les fichiers sans essayer de les réparer" #: ../res/win-main.glade.h:44 msgid "_File" msgstr "_Fichier" #: ../res/win-main.glade.h:45 msgid "_Help" msgstr "_Aide" ./PyPar2-1.4/po/es.po0000644000175000017500000001537710611464626014442 0ustar ingelresingelres# translation of PACKAGE. # Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # <>, 2007. # , fuzzy # # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-02-27 21:33+0100\n" "PO-Revision-Date: 2007-01-29 00:38+0100\n" "Last-Translator: Gumer Coronel Pérez \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../src/dlgAbout.py:34 msgid "translator-credits" msgstr "Gumer Coronel Pérez " #: ../src/dlgAbout.py:35 msgid "A graphical frontend for the par2 utility." msgstr "Una interfaz gráfica para la herramienta par2" #: ../src/dlgAbout.py:39 msgid "Developer:" msgstr "Desarrollador:" #: ../src/dlgAbout.py:42 msgid "Thanks to:" msgstr "Agradecimientos a:" #: ../src/dlgChooseFiles.py:59 msgid "Select file(s)" msgstr "Seleccionar fichero(s)" #: ../src/dlgChooseFiles.py:63 msgid "Select directory" msgstr "Seleccionar directorio" #: ../src/dlgOutput.py:144 msgid "Pause" msgstr "" #: ../src/dlgOutput.py:149 msgid "Resume" msgstr "" #: ../src/main.py:143 msgid "You must first select a par2 file!" msgstr "Primero debe seleccionar un fichero par2" #: ../src/main.py:150 msgid "You must first add some files to protect!" msgstr "Primero debe añadir algunos ficheros al proyecto" #: ../src/prefsManager.py:81 ../src/prefsManager.py:90 msgid " is an unknown preference" msgstr " es una preferencia desconocida" #: ../src/treeview.py:76 msgid "Files to protect:" msgstr "Ficheros a proteger:" #: ../src/typeToolBox.py:31 msgid " has an unsupported type" msgstr " tiene un tipo no soportado" #: ../src/typeToolBox.py:42 msgid " is an unsupported type" msgstr " es un tipo no soportado" #: ../res/creationpopupmenus.glade.h:1 msgid "Add directory content" msgstr "Añadir directorio" #: ../res/creationpopupmenus.glade.h:2 msgid "Add file(s)" msgstr "Añadir fichero(s)" #: ../res/creationpopupmenus.glade.h:3 msgid "Remove all" msgstr "Borrar todo" #: ../res/creationpopupmenus.glade.h:4 msgid "Remove selected file" msgstr "Borrar el fichero seleccionado" #: ../res/dlg-output.glade.h:1 ../res/win-main.glade.h:30 msgid "PyPar2" msgstr "PyPar2" #: ../res/dlg-save.glade.h:1 msgid "Par2 file to create" msgstr "Fichero par2 a crear" #: ../res/win-main.glade.h:1 msgid "Action to perform:" msgstr "Acción a realizar:" #: ../res/win-main.glade.h:2 msgid "Par2 file:" msgstr "Fichero Par2:" #: ../res/win-main.glade.h:3 msgid "Beginning" msgstr "Principio" #: ../res/win-main.glade.h:4 msgid "Block count:" msgstr "Número de bloques:" #: ../res/win-main.glade.h:5 msgid "Block size (KB):" msgstr "Tamaño de bloque:" #: ../res/win-main.glade.h:6 msgid "Blocks" msgstr "Bloques" #: ../res/win-main.glade.h:7 msgid "Check" msgstr "Comprobar" #: ../res/win-main.glade.h:8 msgid "Create" msgstr "Crear" #: ../res/win-main.glade.h:9 msgid "Default advanced settings" msgstr "Configuración avanzada por defecto" #: ../res/win-main.glade.h:10 msgid "Dynamic" msgstr "Dinámico" #: ../res/win-main.glade.h:11 msgid "" "Dynamic computation of the number of blocks the files will be sliced into" msgstr "" "Cálculo dinámico del número de bloques en el que los ficheros serán divididos" #: ../res/win-main.glade.h:12 msgid "Dynamic computation of the number of parity files" msgstr "Cálculo automático del número de ficheros de paridad" #: ../res/win-main.glade.h:13 #, fuzzy msgid "Files to protect" msgstr "Ficheros a proteger:" #: ../res/win-main.glade.h:14 msgid "First recovery block in the parity files" msgstr "Primer bloque de restauración en los ficheros de paridad" #: ../res/win-main.glade.h:15 msgid "First recovery block:" msgstr "Primer bloque de restauración" #: ../res/win-main.glade.h:16 msgid "Force all parity files to be of the same size" msgstr "Forzar que todos los ficheros de paridad tengan el mismo tamaño" #: ../res/win-main.glade.h:17 msgid "Go" msgstr "¡Adelante!" #: ../res/win-main.glade.h:19 #, no-c-format msgid "Level of redundancy (%):" msgstr "Nivel de redundancia (%):" #: ../res/win-main.glade.h:20 msgid "Level of redundancy of the parity files" msgstr "Nivel de redundancia de los ficheros de paridad" #: ../res/win-main.glade.h:21 msgid "Limit size of parity files" msgstr "Límite de tamaño de los ficheros de paridad" #: ../res/win-main.glade.h:22 msgid "Maximum memory usage" msgstr "Memoria máxima usada" #: ../res/win-main.glade.h:23 msgid "Maximum memory usage (MB):" msgstr "Memoria máxima usada (MB):" #: ../res/win-main.glade.h:24 msgid "Memory" msgstr "Memoria" #: ../res/win-main.glade.h:25 msgid "Number of blocks the files will be sliced into" msgstr "Número de bloques en los que se dividirán los ficheros" #: ../res/win-main.glade.h:26 msgid "Number of parity files" msgstr "Número de ficheros de paridad" #: ../res/win-main.glade.h:27 msgid "Number of parity files:" msgstr "Número de ficheros de paridad" #: ../res/win-main.glade.h:28 msgid "Number of recovery blocks in the parity files" msgstr "Número de bloques de restauración en los ficheros de paridad" #: ../res/win-main.glade.h:29 msgid "Parity files" msgstr "Ficheros de paridad" #: ../res/win-main.glade.h:31 msgid "Quit" msgstr "Salir" #: ../res/win-main.glade.h:32 msgid "Recovery block count:" msgstr "Número de bloques de restauración:" #: ../res/win-main.glade.h:33 msgid "Redundancy" msgstr "Redundancia" #: ../res/win-main.glade.h:34 msgid "Repair file(s)" msgstr "Reparar fichero(s)" #: ../res/win-main.glade.h:35 msgid "Restore the default value of all advanced settings" msgstr "Restaurar los valores por defecto de la configuración avanzada" #: ../res/win-main.glade.h:36 msgid "Right-click to add/remove some files" msgstr "Click derecho para añadir/quitar algunos ficheros" #: ../res/win-main.glade.h:37 msgid "Select A Par2 File" msgstr "Seleccionar un fichero Par2" #: ../res/win-main.glade.h:38 msgid "Size of the blocks the files will be sliced into" msgstr "Tamaño de los bloques en los que los ficheros serán divididos" #: ../res/win-main.glade.h:39 msgid "Uniform parity file size" msgstr "Tamaño uniforme de los fichero de paridad" #: ../res/win-main.glade.h:40 msgid "Use advanced settings" msgstr "Usar configuración avanzada" #: ../res/win-main.glade.h:41 msgid "Verify and then repair files if needed" msgstr "Verificar y luego reparar ficheros si es necesario" #: ../res/win-main.glade.h:42 msgid "Verify file(s)" msgstr "Verificar fichero(s)" #: ../res/win-main.glade.h:43 msgid "Verify files, but do not try to repair them" msgstr "Verificar ficheros, pero no intentar repararlos" #: ../res/win-main.glade.h:44 msgid "_File" msgstr "_Archivo" #: ../res/win-main.glade.h:45 msgid "_Help" msgstr "A_yuda" ./PyPar2-1.4/po/de.po0000644000175000017500000001465610611464626014422 0ustar ingelresingelresmsgid "" msgstr "" "Project-Id-Version: PyPar2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-02-27 21:33+0100\n" "PO-Revision-Date: 2006-12-07 20:55+0100\n" "Last-Translator: Volker Eckert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" #: ../src/dlgAbout.py:34 msgid "translator-credits" msgstr "Volker Eckert " #: ../src/dlgAbout.py:35 msgid "A graphical frontend for the par2 utility." msgstr "Eine grafische Oberfläche für par2." #: ../src/dlgAbout.py:39 msgid "Developer:" msgstr "Entwickler:" #: ../src/dlgAbout.py:42 msgid "Thanks to:" msgstr "Dank an:" #: ../src/dlgChooseFiles.py:59 msgid "Select file(s)" msgstr "Wähle Datei(en)" #: ../src/dlgChooseFiles.py:63 msgid "Select directory" msgstr "Wähle Verzeichnis" #: ../src/dlgOutput.py:144 msgid "Pause" msgstr "" #: ../src/dlgOutput.py:149 msgid "Resume" msgstr "" #: ../src/main.py:143 msgid "You must first select a par2 file!" msgstr "Zuerst eine par2 Datei wählen!" #: ../src/main.py:150 msgid "You must first add some files to protect!" msgstr "Um Dateien zu schützen müssen sie erst hinzugefügt werden!" #: ../src/prefsManager.py:81 ../src/prefsManager.py:90 msgid " is an unknown preference" msgstr "ist eine unbekannte Einstellung" #: ../src/treeview.py:76 msgid "Files to protect:" msgstr "Zu schützende Dateien:" #: ../src/typeToolBox.py:31 msgid " has an unsupported type" msgstr " hat einen nicht unterstützten Typ" #: ../src/typeToolBox.py:42 msgid " is an unsupported type" msgstr " Nicht unterstützter Typ" #: ../res/creationpopupmenus.glade.h:1 msgid "Add directory content" msgstr "Verzeichnis Inhalt hinzufügen" #: ../res/creationpopupmenus.glade.h:2 msgid "Add file(s)" msgstr "Datei(en) hinzufügen" #: ../res/creationpopupmenus.glade.h:3 msgid "Remove all" msgstr "Entferne alle" #: ../res/creationpopupmenus.glade.h:4 msgid "Remove selected file" msgstr "Entferne ausgewählte Dateien" #: ../res/dlg-output.glade.h:1 ../res/win-main.glade.h:30 msgid "PyPar2" msgstr "PyPar2" #: ../res/dlg-save.glade.h:1 msgid "Par2 file to create" msgstr "Par2 Datei erzeugen" #: ../res/win-main.glade.h:1 msgid "Action to perform:" msgstr "Auszuführende Aktion:" #: ../res/win-main.glade.h:2 msgid "Par2 file:" msgstr "Par2 Datei:" #: ../res/win-main.glade.h:3 msgid "Beginning" msgstr "Begin" #: ../res/win-main.glade.h:4 msgid "Block count:" msgstr "Block Zähler:" #: ../res/win-main.glade.h:5 msgid "Block size (KB):" msgstr "Block Größe (KB):" #: ../res/win-main.glade.h:6 msgid "Blocks" msgstr "Block" #: ../res/win-main.glade.h:7 msgid "Check" msgstr "Prüfen" #: ../res/win-main.glade.h:8 msgid "Create" msgstr "Erzeugen" #: ../res/win-main.glade.h:9 msgid "Default advanced settings" msgstr "Vorgabe erweiterte Einstellungen" #: ../res/win-main.glade.h:10 msgid "Dynamic" msgstr "Dynamisch" #: ../res/win-main.glade.h:11 msgid "" "Dynamic computation of the number of blocks the files will be sliced into" msgstr "Dynamische Berechnung der Blockanzahl der zu teilenden Dateien" #: ../res/win-main.glade.h:12 msgid "Dynamic computation of the number of parity files" msgstr "Dynamische Berechnung der Anzahl von Paritäts-Dateien" #: ../res/win-main.glade.h:13 #, fuzzy msgid "Files to protect" msgstr "Zu schützende Dateien:" #: ../res/win-main.glade.h:14 msgid "First recovery block in the parity files" msgstr "Erster Wiederherstellungsblock" #: ../res/win-main.glade.h:15 msgid "First recovery block:" msgstr "Erster Wiederherstellungsblock:" #: ../res/win-main.glade.h:16 msgid "Force all parity files to be of the same size" msgstr "Alle Paritäts-Dateien auf gleiche Größe bringen" #: ../res/win-main.glade.h:17 msgid "Go" msgstr "Start" #: ../res/win-main.glade.h:19 #, no-c-format msgid "Level of redundancy (%):" msgstr "Grenze der Redundanz (%):" #: ../res/win-main.glade.h:20 msgid "Level of redundancy of the parity files" msgstr "Grenze der Redundanz (%)" #: ../res/win-main.glade.h:21 msgid "Limit size of parity files" msgstr "Größengrenze der Reparatur-Dateien" #: ../res/win-main.glade.h:22 msgid "Maximum memory usage" msgstr "Maximale Speichernutzung" #: ../res/win-main.glade.h:23 msgid "Maximum memory usage (MB):" msgstr "Maximale Speichernutzung (MB):" #: ../res/win-main.glade.h:24 msgid "Memory" msgstr "Speicher" #: ../res/win-main.glade.h:25 msgid "Number of blocks the files will be sliced into" msgstr "Anzahl der Blöcke in welche die Dateien geteilt werden" #: ../res/win-main.glade.h:26 msgid "Number of parity files" msgstr "Zahl der Reparatur-Dateien" #: ../res/win-main.glade.h:27 msgid "Number of parity files:" msgstr "Zahl der Reparatur-Dateien:" #: ../res/win-main.glade.h:28 msgid "Number of recovery blocks in the parity files" msgstr "Zahl der Reparatur-Dateien" #: ../res/win-main.glade.h:29 msgid "Parity files" msgstr "Dateien vergleichen" #: ../res/win-main.glade.h:31 msgid "Quit" msgstr "Beenden" #: ../res/win-main.glade.h:32 msgid "Recovery block count:" msgstr "Wiederherstellungs Block Zähler:" #: ../res/win-main.glade.h:33 msgid "Redundancy" msgstr "Redundanz" #: ../res/win-main.glade.h:34 msgid "Repair file(s)" msgstr "Repariere Datei(en)" #: ../res/win-main.glade.h:35 msgid "Restore the default value of all advanced settings" msgstr "Rücksetzen aller erweiterten Einstellungen" #: ../res/win-main.glade.h:36 msgid "Right-click to add/remove some files" msgstr "Rechts-Klick zum Hinzufügen/Entfernen einzelner Dateien" #: ../res/win-main.glade.h:37 msgid "Select A Par2 File" msgstr "Wähle eine Par2 Datei" #: ../res/win-main.glade.h:38 msgid "Size of the blocks the files will be sliced into" msgstr "Größe der Blöcke der in welche die Dateien geteilt werden" #: ../res/win-main.glade.h:39 msgid "Uniform parity file size" msgstr "Einheitliche Reparatur-Datei Größe" #: ../res/win-main.glade.h:40 msgid "Use advanced settings" msgstr "Erweiterte Einstellungen" #: ../res/win-main.glade.h:41 msgid "Verify and then repair files if needed" msgstr "Vergleiche, wenn nötig repariere" #: ../res/win-main.glade.h:42 msgid "Verify file(s)" msgstr "Dateien vergleichen" #: ../res/win-main.glade.h:43 msgid "Verify files, but do not try to repair them" msgstr "Vergleiche Dateien, aber repariere nicht" #: ../res/win-main.glade.h:44 msgid "_File" msgstr "_Datei" #: ../res/win-main.glade.h:45 msgid "_Help" msgstr "_Hilfe" ./PyPar2-1.4/po/Makefile0000644000175000017500000000224710611464626015123 0ustar ingelresingelresINSTALL ?= install PYFILES = $(wildcard ../src/*.py) GLADEFILES = $(wildcard ../res/*.glade) POFILES = $(wildcard *.po) GLADEHFILES := $(GLADEFILES:.glade=.glade.h) help: @echo "USAGE:" @echo "make update - updates messages.pot and .po files" @echo "make dist - creates .mo files in ../locale dir" @echo "make pl.po - updates pl.po file OR creates new one" @echo " (replace 'pl' with your language code)" %.h: % intltool-extract --type="gettext/glade" $* messages.pot: $(GLADEHFILES) xgettext -k_ -kN_ -o messages.pot $(PYFILES) $(GLADEHFILES) --from-code=utf-8 %.po: messages.pot @if test -f $@; then \ echo -n "Updating '$*' language ";\ msgmerge -U $@ messages.pot;\ else \ msginit -l $*.UTF8 -o $@; \ fi %.mo: for pofile in $(patsubst ../locale/%/LC_MESSAGES/pypar2.mo,%.po,$@); do \ ${INSTALL} -m 755 -d $(subst pypar2.mo,,$@);\ msgconv -t UTF-8 $${pofile} -o $${pofile}_utf8;\ msgfmt $${pofile}_utf8 -o $@;\ rm $${pofile}_utf8;\ done update: $(POFILES) dist: $(POFILES:%.po=../locale/%/LC_MESSAGES/pypar2.mo) clean: $(RM) $(GLADEHFILES) #$(RM) $(POFILES:%.po=../locale/%/LC_MESSAGES/pypar2.mo) #$(RM) messages.pot .PHONY: update ./PyPar2-1.4/po/ru.po0000644000175000017500000001774410611464626014461 0ustar ingelresingelres# Russian translations for PyPar package. # Copyright (C) 2007 THE PyPar'S COPYRIGHT HOLDER # This file is distributed under the same license as the PyPar package. # François Ingelrest msgid "" msgstr "" "Project-Id-Version: PyPar 2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-04-11 11:25+0200\n" "PO-Revision-Date: 2007-04-11 11:25+0200\n" "Last-Translator: Solomin Evgeny \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../src/dlgAbout.py:34 msgid "translator-credits" msgstr "Перевод " #: ../src/dlgAbout.py:35 msgid "A graphical frontend for the par2 utility." msgstr "Графическая утилита для работы с файлами par2." #: ../src/dlgAbout.py:39 msgid "Developer:" msgstr "Разработка:" #: ../src/dlgAbout.py:42 msgid "Thanks to:" msgstr "Благодарности" #: ../src/dlgChooseFiles.py:59 msgid "Select file(s)" msgstr "Выбрать файл(ы)" #: ../src/dlgChooseFiles.py:63 msgid "Select directory" msgstr "Выбрать директорию" #: ../src/dlgOutput.py:67 ../src/dlgOutput.py:146 msgid "Pause" msgstr "Пауза" #: ../src/dlgOutput.py:151 msgid "Resume" msgstr "Возобновить" #: ../src/main.py:143 msgid "You must first select a par2 file!" msgstr "Сначала Вы должны выбрать par2 файл!" #: ../src/main.py:150 msgid "You must first add some files to protect!" msgstr "Сначала Вы должны добавить файлы к проекту!" #: ../src/prefsManager.py:81 ../src/prefsManager.py:90 msgid " is an unknown preference" msgstr "неизвестная опция" #: ../src/treeview.py:76 msgid "Files to protect:" msgstr "Файлы для защиты:" #: ../src/typeToolBox.py:31 msgid " has an unsupported type" msgstr "имеет неподдерживаемый тип" #: ../src/typeToolBox.py:42 msgid " is an unsupported type" msgstr " неподдерживаемого типа" #: ../res/creationpopupmenus.glade.h:1 msgid "Add directory content" msgstr "Добавить директорию" #: ../res/creationpopupmenus.glade.h:2 msgid "Add file(s)" msgstr "Добавить файл(ы)" #: ../res/creationpopupmenus.glade.h:3 msgid "Remove all" msgstr "Удалить все" #: ../res/creationpopupmenus.glade.h:4 msgid "Remove selected file" msgstr "Удалить выбранный файл" #: ../res/dlg-output.glade.h:1 ../res/win-main.glade.h:30 msgid "PyPar2" msgstr "" #: ../res/dlg-save.glade.h:1 msgid "Par2 file to create" msgstr "Par2 файл, что бы создать" #: ../res/win-main.glade.h:1 msgid "Action to perform:" msgstr "Действие:" #: ../res/win-main.glade.h:2 msgid "Par2 file:" msgstr "Par2 файл:" #: ../res/win-main.glade.h:3 msgid "Beginning" msgstr "Начало" #: ../res/win-main.glade.h:4 msgid "Block count:" msgstr "Количество блоков:" #: ../res/win-main.glade.h:5 msgid "Block size (KB):" msgstr "Размер блока (KB):" #: ../res/win-main.glade.h:6 msgid "Blocks" msgstr "Блоки" #: ../res/win-main.glade.h:7 msgid "Check" msgstr "Проверить" #: ../res/win-main.glade.h:8 msgid "Create" msgstr "Создать" #: ../res/win-main.glade.h:9 msgid "Default advanced settings" msgstr "Параметры настроек по умолчанию" #: ../res/win-main.glade.h:10 msgid "Dynamic" msgstr "Динамически" #: ../res/win-main.glade.h:11 msgid "" "Dynamic computation of the number of blocks the files will be sliced into" msgstr "Динамическое вычисление числа блоков в файлах, которые получатся после разбиения, на выходе" #: ../res/win-main.glade.h:12 msgid "Dynamic computation of the number of parity files" msgstr "Динамическое вычисление числа паритетных файлов" #: ../res/win-main.glade.h:13 msgid "Files to protect" msgstr "Файлы для защиты" #: ../res/win-main.glade.h:14 msgid "First recovery block in the parity files" msgstr "Первый восстановочный блок в паритетном файле" #: ../res/win-main.glade.h:15 msgid "First recovery block:" msgstr "Первый восстановочный блок:" #: ../res/win-main.glade.h:16 msgid "Force all parity files to be of the same size" msgstr "Все паритетные файлы должны иметь одинаковый размер" #: ../res/win-main.glade.h:17 msgid "Go" msgstr "Начать" #: ../res/win-main.glade.h:19 #, no-c-format msgid "Level of redundancy (%):" msgstr "Уровень избыточности (%):" #: ../res/win-main.glade.h:20 msgid "Level of redundancy of the parity files" msgstr "Уровень избыточности файлов" #: ../res/win-main.glade.h:21 msgid "Limit size of parity files" msgstr "Максимальный размер паритетного файла" #: ../res/win-main.glade.h:22 msgid "Maximum memory usage" msgstr "Максимальный объем используемой памяти" #: ../res/win-main.glade.h:23 msgid "Maximum memory usage (MB):" msgstr "Максимальный объем памяти (MB):" #: ../res/win-main.glade.h:24 msgid "Memory" msgstr "Память" #: ../res/win-main.glade.h:25 msgid "Number of blocks the files will be sliced into" msgstr "Число блоков в файлах, которые получаться после разбиения на выходе" #: ../res/win-main.glade.h:26 msgid "Number of parity files" msgstr "Количество паритетных файлов" #: ../res/win-main.glade.h:27 msgid "Number of parity files:" msgstr "Число паритетных файлов:" #: ../res/win-main.glade.h:28 msgid "Number of recovery blocks in the parity files" msgstr "Число восстановочных блоков в паритетных файлах" #: ../res/win-main.glade.h:29 msgid "Parity files" msgstr "Par файлы" #: ../res/win-main.glade.h:31 msgid "Quit" msgstr "Выход" #: ../res/win-main.glade.h:32 msgid "Recovery block count:" msgstr "Число восстановочных блоков:" #: ../res/win-main.glade.h:33 msgid "Redundancy" msgstr "Избыточность" #: ../res/win-main.glade.h:34 msgid "Repair file(s)" msgstr "Восстановить файл(ы)" #: ../res/win-main.glade.h:35 msgid "Restore the default value of all advanced settings" msgstr "Восстановить все настройки по умолчанию" #: ../res/win-main.glade.h:36 msgid "Right-click to add/remove some files" msgstr "Щелкните правой кнопкой мышы, что бы добавить/удалить файлы" #: ../res/win-main.glade.h:37 msgid "Select A Par2 File" msgstr "Выбрать Par2 Файл" #: ../res/win-main.glade.h:38 msgid "Size of the blocks the files will be sliced into" msgstr "Размер блоков файлов для разбиения" #: ../res/win-main.glade.h:39 msgid "Uniform parity file size" msgstr "Одинаковый размер файлов на выходе" #: ../res/win-main.glade.h:40 msgid "Use advanced settings" msgstr "Настройки" #: ../res/win-main.glade.h:41 msgid "Verify and then repair files if needed" msgstr "Проверить и затем при необходимости восстановить файлы" #: ../res/win-main.glade.h:42 msgid "Verify file(s)" msgstr "Проверить файлы(ы)" #: ../res/win-main.glade.h:43 msgid "Verify files, but do not try to repair them" msgstr "Проверить файлы, но не пытаться восстановить их" #: ../res/win-main.glade.h:44 msgid "_File" msgstr "_Файл" #: ../res/win-main.glade.h:45 msgid "_Help" msgstr "_Помощь"