From b12a37b9865be703884a71efc003af747f1a3484 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 25 Feb 2011 20:52:13 +0100 Subject: [PATCH 001/124] inform the user, that he has to restart openlp if he wants changes to the monitor set up to be available --- openlp.pyw | 15 ++++++++++++++- openlp/core/lib/ui.py | 27 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/openlp.pyw b/openlp.pyw index 85ba81fba..6712dc419 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -34,7 +34,8 @@ from subprocess import Popen, PIPE from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, check_directory_exists +from openlp.core.lib import Receiver, translate, check_directory_exists +from openlp.core.lib.ui import information_message_box from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow from openlp.core.ui.exceptionform import ExceptionForm @@ -166,6 +167,9 @@ class OpenLP(QtGui.QApplication): QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) + QtCore.QObject.connect(self.desktop(), + QtCore.SIGNAL(u'screenCountChanged(int)'), + self.onScreenCountChanged) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -225,6 +229,15 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() + def onScreenCountChanged(self): + """ + Called when the user changes the monitor set up. + """ + information_message_box( + message=translate('OpenLP','You have changed the monitor set up. ' + 'You have to restart OpenLP in order to change the live display ' + 'monitor.')) + def main(): """ The main function which parses command line options and then runs diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index c127d810d..9555e0533 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -58,6 +58,7 @@ class UiStrings(object): 'Abbreviated font pointsize unit') Image = translate('OpenLP.Ui', 'Image') Import = translate('OpenLP.Ui', 'Import') + Information = translate('OpenLP.Ui', 'Information') LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) Live = translate('OpenLP.Ui', 'Live') LiveBGError = translate('OpenLP.Ui', 'Live Background Error') @@ -173,6 +174,32 @@ def critical_error_message_box(title=None, message=None, parent=None, data[u'title'] = title if title else UiStrings.Error return Receiver.send_message(u'openlp_error_message', data) +def information_message_box(title=None, message=None, parent=None, + question=False): + """ + Provides a standard information message box for notes that OpenLP displays + to users. + + ``title`` + The title for the message box. + + ``message`` + The message to display to the user. + + ``parent`` + The parent UI element to attach the dialog to. + + ``question`` + Should this message box question the user. + """ + if question: + return QtGui.QMessageBox.critical(parent, UiStrings.Information, + message, QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) + data = {u'message': message} + data[u'title'] = title if title else UiStrings.Information + return Receiver.send_message(u'openlp_information_message', data) + def media_item_combo_box(parent, name): """ Provide a standard combo box for media items. From 1a645acc0692a48ce39841bba9fb38b609b227f3 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 25 Feb 2011 21:29:45 +0100 Subject: [PATCH 002/124] removed information_message_box --- openlp.pyw | 12 +++++++----- openlp/core/lib/ui.py | 27 --------------------------- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 6712dc419..29cb856c3 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -35,7 +35,6 @@ from subprocess import Popen, PIPE from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, translate, check_directory_exists -from openlp.core.lib.ui import information_message_box from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow from openlp.core.ui.exceptionform import ExceptionForm @@ -233,10 +232,13 @@ class OpenLP(QtGui.QApplication): """ Called when the user changes the monitor set up. """ - information_message_box( - message=translate('OpenLP','You have changed the monitor set up. ' - 'You have to restart OpenLP in order to change the live display ' - 'monitor.')) + data = { + u'title': translate('OpenLP.Ui', 'Information'), + u'message': translate('OpenLP','The monitor set up has changed. You' + ' have to restart OpenLP in order to change the live display' + ' monitor.') + } + Receiver.send_message(u'openlp_information_message', data) def main(): """ diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 9555e0533..c127d810d 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -58,7 +58,6 @@ class UiStrings(object): 'Abbreviated font pointsize unit') Image = translate('OpenLP.Ui', 'Image') Import = translate('OpenLP.Ui', 'Import') - Information = translate('OpenLP.Ui', 'Information') LengthTime = unicode(translate('OpenLP.Ui', 'Length %s')) Live = translate('OpenLP.Ui', 'Live') LiveBGError = translate('OpenLP.Ui', 'Live Background Error') @@ -174,32 +173,6 @@ def critical_error_message_box(title=None, message=None, parent=None, data[u'title'] = title if title else UiStrings.Error return Receiver.send_message(u'openlp_error_message', data) -def information_message_box(title=None, message=None, parent=None, - question=False): - """ - Provides a standard information message box for notes that OpenLP displays - to users. - - ``title`` - The title for the message box. - - ``message`` - The message to display to the user. - - ``parent`` - The parent UI element to attach the dialog to. - - ``question`` - Should this message box question the user. - """ - if question: - return QtGui.QMessageBox.critical(parent, UiStrings.Information, - message, QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) - data = {u'message': message} - data[u'title'] = title if title else UiStrings.Information - return Receiver.send_message(u'openlp_information_message', data) - def media_item_combo_box(parent, name): """ Provide a standard combo box for media items. From ce1ab6ee5eb5b9ba2cdb236518d61cedf634a624 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 26 Feb 2011 09:26:17 +0000 Subject: [PATCH 003/124] Initial bits --- openlp.pyw | 8 +++++++- openlp/core/utils/languagemanager.py | 3 +-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 85ba81fba..565d5936f 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -172,6 +172,10 @@ class OpenLP(QtGui.QApplication): self.setApplicationVersion(app_version[u'version']) if os.name == u'nt': self.setStyleSheet(application_stylesheet) + # First time checks in settings + if QtCore.QSettings().value( + u'general/first time', QtCore.QVariant(True)).toBool(): + print "first time" show_splash = QtCore.QSettings().value( u'general/show splash', QtCore.QVariant(True)).toBool() if show_splash: @@ -273,7 +277,9 @@ def main(): qInitResources() # Now create and actually run the application. app = OpenLP(qt_args) - #i18n Set Language + # Define the settings environment + QtCore.QSettings(u'OpenLP', u'OpenLP') + # i18n Set Language language = LanguageManager.get_language() appTranslator = LanguageManager.get_translator(language) app.installTranslator(appTranslator) diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index ced2fa843..43d2a8e67 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -89,8 +89,7 @@ class LanguageManager(object): """ Retrieve a saved language to use from settings """ - settings = QtCore.QSettings(u'OpenLP', u'OpenLP') - language = unicode(settings.value( + language = unicode(QtCore.QSettings().value( u'general/language', QtCore.QVariant(u'[en]')).toString()) log.info(u'Language file: \'%s\' Loaded from conf file' % language) reg_ex = QtCore.QRegExp("^\[(.*)\]") From 69193825a9e6e94c3ce9f942f8bebf07174d487c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 26 Feb 2011 09:26:49 +0000 Subject: [PATCH 004/124] Form --- resources/forms/firsttimewizard.ui | 373 +++++++++++++++++++++++++++++ 1 file changed, 373 insertions(+) create mode 100644 resources/forms/firsttimewizard.ui diff --git a/resources/forms/firsttimewizard.ui b/resources/forms/firsttimewizard.ui new file mode 100644 index 000000000..b4442e9f0 --- /dev/null +++ b/resources/forms/firsttimewizard.ui @@ -0,0 +1,373 @@ + + + FirstTimeWizard + + + + 0 + 0 + 550 + 386 + + + + First Time Wizard + + + true + + + QWizard::ModernStyle + + + QWizard::IndependentPages|QWizard::NoBackButtonOnStartPage + + + + + + + + + + + 8 + + + 0 + + + + + + 163 + 0 + + + + + 163 + 16777215 + + + + 0 + + + + + + :/wizards/wizard_importbible.bmp + + + 0 + + + + + + + 8 + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Welcome to the First Time Wizard</span></p></body></html> + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + true + + + 10 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Activate required Plugins + + + Select the Plugins you wish to use. + + + + + + + + Songs + + + true + + + + + + + Custom Text + + + true + + + + + + + Bible + + + true + + + + + + + Images + + + true + + + + + + + Presentations + + + true + + + + + + + Media (Audio and Video) + + + true + + + + + + + Remote Control + + + + + + + Monitor Song Usage + + + true + + + + + + + + + + Download Samples from OpenLP.org + + + Select samples to downlaod and install for use. + + + + + 20 + 20 + 416 + 17 + + + + No Internet connection found so unable to download any defaults + + + + + + 30 + 50 + 441 + 191 + + + + Download Samples + + + + + + + + Sample Songs + + + + + + + Bible XXX (Repeat per bible) + + + + + + + Theme XXX (Repeat per theme) + + + + + + + + + + + Configure Settings + + + Configure the initial value for settings + + + + + 20 + 20 + 252 + 58 + + + + + + + Default output display + + + + + + + false + + + QComboBox::NoInsert + + + QComboBox::AdjustToContents + + + + + + + Select the default Theme + + + + + + + QComboBox::AdjustToContents + + + + + + + + + Apply Updates + + + Press Finish to apply requested updates. + + + + 8 + + + 20 + + + + + + + + + + FirstTimeWizard + accepted() + FirstTimeWizard + accept() + + + 455 + 368 + + + 483 + 401 + + + + + From 36534f3496617c775a6b2470cf90c7e27a8f19b3 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 26 Feb 2011 11:16:21 +0000 Subject: [PATCH 005/124] Fix framework --- openlp.pyw | 3 ++- openlp/core/ui/__init__.py | 3 ++- openlp/core/ui/firsttimeform.py | 39 +++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 openlp/core/ui/firsttimeform.py diff --git a/openlp.pyw b/openlp.pyw index 565d5936f..be31651b3 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -37,6 +37,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, check_directory_exists from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow +from openlp.core.ui.firsttimeform import FirstTimeForm from openlp.core.ui.exceptionform import ExceptionForm from openlp.core.ui import SplashScreen, ScreenList from openlp.core.utils import AppLocation, LanguageManager, VersionThread @@ -175,7 +176,7 @@ class OpenLP(QtGui.QApplication): # First time checks in settings if QtCore.QSettings().value( u'general/first time', QtCore.QVariant(True)).toBool(): - print "first time" + FirstTimeForm() #.exec_() show_splash = QtCore.QSettings().value( u'general/show splash', QtCore.QVariant(True)).toBool() if show_splash: diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index 158f7f0cd..a9b46ec9f 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -51,6 +51,7 @@ class HideMode(object): Theme = 2 Screen = 3 +from firsttimeform import FirstTimeForm from themeform import ThemeForm from filerenameform import FileRenameForm from starttimeform import StartTimeForm @@ -74,4 +75,4 @@ from thememanager import ThemeManager __all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MainDisplay', 'SlideController', 'ServiceManager', 'ThemeManager', 'MediaDockManager', - 'ServiceItemEditForm'] + 'ServiceItemEditForm', u'FirstTimeForm'] diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py new file mode 100644 index 000000000..f4e5471f8 --- /dev/null +++ b/openlp/core/ui/firsttimeform.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Armin Köhler, Andreas Preikschat, # +# Christian Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon # +# Tibble, Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# 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; version 2 of the License. # +# # +# 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., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtGui + +#from filerenamedialog import Ui_FileRenameDialog + +from openlp.core.lib import translate +from openlp.core.utils import get_web_page + +class FirstTimeForm():#QtGui.QDialog, Ui_FileRenameDialog): + + def __init__(self): + # check to see if we have web access + self.WebAccess = get_web_page(u'http://openlp.org1') + print self.WebAccess From d7a56667a4208168564da899def090a2801dcf7e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 26 Feb 2011 15:19:43 +0000 Subject: [PATCH 006/124] Framework fine --- openlp.pyw | 9 ++++++++- openlp/core/ui/firsttimeform.py | 21 ++++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index be31651b3..c5568e201 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -173,10 +173,13 @@ class OpenLP(QtGui.QApplication): self.setApplicationVersion(app_version[u'version']) if os.name == u'nt': self.setStyleSheet(application_stylesheet) + print "1" # First time checks in settings if QtCore.QSettings().value( u'general/first time', QtCore.QVariant(True)).toBool(): - FirstTimeForm() #.exec_() + FirstTimeForm().exec_() + # make sure Qt really display the splash screen + self.processEvents() show_splash = QtCore.QSettings().value( u'general/show splash', QtCore.QVariant(True)).toBool() if show_splash: @@ -207,13 +210,17 @@ class OpenLP(QtGui.QApplication): return self.exec_() def hookException(self, exctype, value, traceback): + print "a" if not hasattr(self, u'mainWindow'): log.exception(''.join(format_exception(exctype, value, traceback))) return + print "b" if not hasattr(self, u'exceptionForm'): self.exceptionForm = ExceptionForm(self.mainWindow) + print "c" self.exceptionForm.exceptionTextEdit.setPlainText( ''.join(format_exception(exctype, value, traceback))) + print "d" self.setNormalCursor() self.exceptionForm.exec_() diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index f4e5471f8..44f430a90 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -24,16 +24,31 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import logging + from PyQt4 import QtGui -#from filerenamedialog import Ui_FileRenameDialog +from firsttimewizard import Ui_FirstTimeWizard from openlp.core.lib import translate from openlp.core.utils import get_web_page -class FirstTimeForm():#QtGui.QDialog, Ui_FileRenameDialog): +log = logging.getLogger(__name__) - def __init__(self): +class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): + """ + This is the Theme Import Wizard, which allows easy creation and editing of + OpenLP themes. + """ + log.info(u'ThemeWizardForm loaded') + + def __init__(self, parent=None): # check to see if we have web access self.WebAccess = get_web_page(u'http://openlp.org1') print self.WebAccess + QtGui.QWizard.__init__(self, parent) + self.setupUi(self) + #self.registerFields() + + def accept(self): + return QtGui.QWizard.accept(self) From 88fefe5582f0edae302422cc55c216b31193da04 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 26 Feb 2011 16:51:00 +0000 Subject: [PATCH 007/124] Plugins work --- openlp/core/ui/firsttimeform.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 44f430a90..0ca078e66 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -26,11 +26,11 @@ import logging -from PyQt4 import QtGui +from PyQt4 import QtCore, QtGui from firsttimewizard import Ui_FirstTimeWizard -from openlp.core.lib import translate +from openlp.core.lib import translate, PluginStatus from openlp.core.utils import get_web_page log = logging.getLogger(__name__) @@ -51,4 +51,18 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): #self.registerFields() def accept(self): + self.__pluginStatus(self.songsCheckBox, u'songs/status') + self.__pluginStatus(self.bibleCheckBox, u'bibles/status') + self.__pluginStatus(self.presentationCheckBox, u'presentations/status') + self.__pluginStatus(self.imageCheckBox, u'images/status') + self.__pluginStatus(self.mediaCheckBox, u'media/status') + self.__pluginStatus(self.remoteCheckBox, u'remote/status') + self.__pluginStatus(self.customCheckBox, u'custom/status') + self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') + #self.__pluginStatus(self.alertsCheckBox, u'alerts/status') return QtGui.QWizard.accept(self) + + def __pluginStatus(self, field, tag): + status = PluginStatus.Active if field.checkState() \ + == QtCore.Qt.Checked else PluginStatus.Inactive + QtCore.QSettings().setValue(tag, QtCore.QVariant(status)) From 289ce0de5f4f9cc44860afe2fae6c39abf0e6bf3 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 26 Feb 2011 20:52:26 +0000 Subject: [PATCH 008/124] Start of Langauges --- openlp.pyw | 19 ++----- openlp/core/ui/firsttimeform.py | 33 ++++++++++-- resources/forms/firsttimewizard.ui | 80 +++++++++++++++--------------- 3 files changed, 73 insertions(+), 59 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index c5568e201..393a1331b 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -151,10 +151,6 @@ class OpenLP(QtGui.QApplication): log.info(u'Openlp version %s' % app_version[u'version']) return app_version -# def notify(self, obj, evt): -# #TODO needed for presentation exceptions -# return QtGui.QApplication.notify(self, obj, evt) - def run(self): """ Run the OpenLP application. @@ -173,13 +169,6 @@ class OpenLP(QtGui.QApplication): self.setApplicationVersion(app_version[u'version']) if os.name == u'nt': self.setStyleSheet(application_stylesheet) - print "1" - # First time checks in settings - if QtCore.QSettings().value( - u'general/first time', QtCore.QVariant(True)).toBool(): - FirstTimeForm().exec_() - # make sure Qt really display the splash screen - self.processEvents() show_splash = QtCore.QSettings().value( u'general/show splash', QtCore.QVariant(True)).toBool() if show_splash: @@ -210,17 +199,13 @@ class OpenLP(QtGui.QApplication): return self.exec_() def hookException(self, exctype, value, traceback): - print "a" if not hasattr(self, u'mainWindow'): log.exception(''.join(format_exception(exctype, value, traceback))) return - print "b" if not hasattr(self, u'exceptionForm'): self.exceptionForm = ExceptionForm(self.mainWindow) - print "c" self.exceptionForm.exceptionTextEdit.setPlainText( ''.join(format_exception(exctype, value, traceback))) - print "d" self.setNormalCursor() self.exceptionForm.exec_() @@ -287,6 +272,10 @@ def main(): app = OpenLP(qt_args) # Define the settings environment QtCore.QSettings(u'OpenLP', u'OpenLP') + # First time checks in settings + if QtCore.QSettings().value( + u'general/first time', QtCore.QVariant(True)).toBool(): + FirstTimeForm().exec_() # i18n Set Language language = LanguageManager.get_language() appTranslator = LanguageManager.get_translator(language) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 0ca078e66..88220ed33 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui from firsttimewizard import Ui_FirstTimeWizard from openlp.core.lib import translate, PluginStatus -from openlp.core.utils import get_web_page +from openlp.core.utils import get_web_page, LanguageManager log = logging.getLogger(__name__) @@ -44,12 +44,35 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): def __init__(self, parent=None): # check to see if we have web access - self.WebAccess = get_web_page(u'http://openlp.org1') - print self.WebAccess + self.webAccess = get_web_page(u'http://openlp.org1') + print self.webAccess QtGui.QWizard.__init__(self, parent) self.setupUi(self) #self.registerFields() + def exec_(self, edit=False): + """ + Run the wizard. + """ + self.setDefaults() + return QtGui.QWizard.exec_(self) + + def setDefaults(self): + """ + Set up display at start of theme edit. + """ + self.restart() + # Sort out internet access + if self.webAccess: + self.internetGroupBox.setVisible(True) + self.noInternetLabel.setVisible(False) + else: + self.internetGroupBox.setVisible(False) + self.noInternetLabel.setVisible(True) + self.qmList = LanguageManager.get_qm_list() + for key in sorted(self.qmList.keys()): + self.LanguageComboBox.addItem(key) + def accept(self): self.__pluginStatus(self.songsCheckBox, u'songs/status') self.__pluginStatus(self.bibleCheckBox, u'bibles/status') @@ -59,7 +82,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__pluginStatus(self.remoteCheckBox, u'remote/status') self.__pluginStatus(self.customCheckBox, u'custom/status') self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') - #self.__pluginStatus(self.alertsCheckBox, u'alerts/status') + self.__pluginStatus(self.alertCheckBox, u'alerts/status') + + print self.qmList[unicode(self.LanguageComboBox.currentText())] return QtGui.QWizard.accept(self) def __pluginStatus(self, field, tag): diff --git a/resources/forms/firsttimewizard.ui b/resources/forms/firsttimewizard.ui index b4442e9f0..305fd66a0 100644 --- a/resources/forms/firsttimewizard.ui +++ b/resources/forms/firsttimewizard.ui @@ -199,7 +199,7 @@ p, li { white-space: pre-wrap; } - Remote Control + Allow remote access @@ -213,6 +213,16 @@ p, li { white-space: pre-wrap; } + + + + Allow Alerts + + + true + + + @@ -229,12 +239,12 @@ p, li { white-space: pre-wrap; } 20 20 - 416 + 461 17 - No Internet connection found so unable to download any defaults + No Internet connection found so unable to download any default files. @@ -247,7 +257,7 @@ p, li { white-space: pre-wrap; } - Download Samples + Download Example Files @@ -280,18 +290,18 @@ p, li { white-space: pre-wrap; } - Configure Settings + Default Settings - Configure the initial value for settings + Set up default values to be used by OpenLP - + 20 20 252 - 58 + 88 @@ -329,45 +339,35 @@ p, li { white-space: pre-wrap; } + + + + Select default language + + + + + + - - - - Apply Updates - - - Press Finish to apply requested updates. - - - - 8 + + + + 40 + 190 + 471 + 17 + - - 20 + + Press Finish to apply all you changes and start OpenLP - + - - - FirstTimeWizard - accepted() - FirstTimeWizard - accept() - - - 455 - 368 - - - 483 - 401 - - - - + From 86eb34ae1c0e2049171df5009bcb803700baff7d Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 26 Feb 2011 22:43:41 +0100 Subject: [PATCH 009/124] clean ups, further implementation --- openlp.pyw | 49 ++++++++++++++++++++++-------------- openlp/core/ui/generaltab.py | 1 + openlp/core/ui/screen.py | 49 ++++++++++++++++++++++++++++++------ 3 files changed, 72 insertions(+), 27 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 29cb856c3..1269c7ece 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -167,8 +167,7 @@ class OpenLP(QtGui.QApplication): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) QtCore.QObject.connect(self.desktop(), - QtCore.SIGNAL(u'screenCountChanged(int)'), - self.onScreenCountChanged) + QtCore.SIGNAL(u'screenCountChanged(int)'), self.updateScreenList) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -182,17 +181,13 @@ class OpenLP(QtGui.QApplication): self.splash.show() # make sure Qt really display the splash screen self.processEvents() - screens = ScreenList() + self.screens = ScreenList() # Decide how many screens we have and their size - for screen in xrange(0, self.desktop().numScreens()): - size = self.desktop().screenGeometry(screen) - screens.add_screen({u'number': screen, - u'size': size, - u'primary': (self.desktop().primaryScreen() == screen)}) - log.info(u'Screen %d found with resolution %s', screen, size) + self.updateScreenList(True) # start the main app window self.appClipboard = self.clipboard() - self.mainWindow = MainWindow(screens, app_version, self.appClipboard) + self.mainWindow = MainWindow( + self.screens, app_version, self.appClipboard) self.mainWindow.show() if show_splash: # now kill the splashscreen @@ -228,17 +223,33 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() - def onScreenCountChanged(self): + def updateScreenList(self, applicationStart=False): """ - Called when the user changes the monitor set up. + Called when the list of screens has to be updated. + + ``applicationStart`` + Should be ``True`` when starting the application, otherwise + ``False``. """ - data = { - u'title': translate('OpenLP.Ui', 'Information'), - u'message': translate('OpenLP','The monitor set up has changed. You' - ' have to restart OpenLP in order to change the live display' - ' monitor.') - } - Receiver.send_message(u'openlp_information_message', data) + # Add new screens. + for number in xrange(0, self.desktop().numScreens()): + if not self.screens.screen_exists(number): + size = self.desktop().screenGeometry(number) + self.screens.add_screen({ + u'number': number, + u'size': size, + u'primary': (self.desktop().primaryScreen() == number) + }) + log.info(u'Screen %d found with resolution %s', number, size) + # Remove unplugged screens. + for screen in self.screens.screen_list: + if screen[u'number'] > self.desktop().numScreens(): + self.screens.remove_screen(screen) + log.info(u'Screen %d removed' % creen[u'number']) + if not applicationStart: + pass + # TODO: Refresh settings. + # TODO: Make the new (second) monitor the live display. def main(): """ diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 4eacc5959..777302a41 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -300,6 +300,7 @@ class GeneralTab(SettingsTab): """ settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) + self.monitorComboBox.clear() for screen in self.screens.screen_list: screen_name = u'%s %d' % (translate('OpenLP.GeneralTab', 'Screen'), screen[u'number'] + 1) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 4530cfd3c..df8ae9cbf 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -25,7 +25,7 @@ ############################################################################### """ The :mod:`screen` module provides management functionality for a machines' -displays +displays. """ import logging import copy @@ -51,25 +51,58 @@ class ScreenList(object): def add_screen(self, screen): """ - Add a screen to the list of known screens + Add a screen to the list of known screens. + + ``screen`` + A dict with the screen properties:: + + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } + """ + print u'add screen: %s' % screen if screen[u'primary']: self.current = screen self.screen_list.append(screen) self.display_count += 1 + def remove_screen(self, number): + """ + Remove a screen from the list of known screens. + + ``number`` + The screen number (int). + """ + print u'remove screen %s' % number + for screen in self.screen_list: + if screen[u'number'] == number: + self.screen_list.remove(screen) + self.display_count -= 1 + break + def screen_exists(self, number): """ - Confirms a screen is known + Confirms a screen is known. + + ``number`` + The screen number (int). """ for screen in self.screen_list: if screen[u'number'] == number: + print u'screen %s exists' % number return True + print u'screen %s does not exist' % number return False def set_current_display(self, number): """ - Set up the current screen dimensions + Set up the current screen dimensions. + + ``number`` + The screen number (int). """ log.debug(u'set_current_display %s', number) if number + 1 > self.display_count: @@ -86,8 +119,8 @@ class ScreenList(object): def set_override_display(self): """ - replace the current size with the override values - user wants to have their own screen attributes + Replace the current size with the override values, as the user wants to + have their own screen attributes. """ log.debug(u'set_override_display') self.current = copy.deepcopy(self.override) @@ -95,8 +128,8 @@ class ScreenList(object): def reset_current_display(self): """ - replace the current values with the correct values - user wants to use the correct screen attributes + Replace the current values with the correct values, as the user wants to + use the correct screen attributes. """ log.debug(u'reset_current_display') self.set_current_display(self.current_display) From f295ac54075e083f1ea2a304314e18af1540086d Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 27 Feb 2011 09:53:47 +0000 Subject: [PATCH 010/124] Select Language at startup --- openlp.pyw | 2 ++ openlp/core/ui/firsttimeform.py | 12 ++++++++++-- openlp/core/utils/languagemanager.py | 15 ++++++++++----- resources/forms/firsttimewizard.ui | 24 +++++++++++++++++++----- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 393a1331b..c551636b8 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -276,8 +276,10 @@ def main(): if QtCore.QSettings().value( u'general/first time', QtCore.QVariant(True)).toBool(): FirstTimeForm().exec_() + pass # i18n Set Language language = LanguageManager.get_language() + print language appTranslator = LanguageManager.get_translator(language) app.installTranslator(appTranslator) if not options.no_error_form: diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 88220ed33..2a23350a6 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -69,6 +69,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): else: self.internetGroupBox.setVisible(False) self.noInternetLabel.setVisible(True) + if LanguageManager.auto_language: + self.LanguageComboBox.setEnabled(False) self.qmList = LanguageManager.get_qm_list() for key in sorted(self.qmList.keys()): self.LanguageComboBox.addItem(key) @@ -83,8 +85,14 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__pluginStatus(self.customCheckBox, u'custom/status') self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') self.__pluginStatus(self.alertCheckBox, u'alerts/status') - - print self.qmList[unicode(self.LanguageComboBox.currentText())] + if self.autoLanguageCheckBox.checkState() == QtCore.Qt.Checked: + LanguageManager.auto_language = True + LanguageManager.set_language(False, False) + else: + LanguageManager.auto_language = False + action = QtGui.QAction(None) + action.setObjectName(unicode(self.LanguageComboBox.currentText())) + LanguageManager.set_language(action, False) return QtGui.QWizard.accept(self) def __pluginStatus(self, field, tag): diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 43d2a8e67..e90a659ec 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -99,16 +99,20 @@ class LanguageManager(object): return language @staticmethod - def set_language(action): + def set_language(action, message=True): """ Set the language to translate OpenLP into ``action`` The language menu option + + ``message`` + Display the message option """ language = u'en' if action: action_name = u'%s' % action.objectName() + print action_name qm_list = LanguageManager.get_qm_list() language = u'%s' % qm_list[action_name] if LanguageManager.auto_language: @@ -116,10 +120,11 @@ class LanguageManager(object): QtCore.QSettings().setValue( u'general/language', QtCore.QVariant(language)) log.info(u'Language file: \'%s\' written to conf file' % language) - QtGui.QMessageBox.information(None, - translate('OpenLP.LanguageManager', 'Language'), - translate('OpenLP.LanguageManager', - 'Please restart OpenLP to use your new language setting.')) + if message: + QtGui.QMessageBox.information(None, + translate('OpenLP.LanguageManager', 'Language'), + translate('OpenLP.LanguageManager', + 'Please restart OpenLP to use your new language setting.')) @staticmethod def init_qm_list(): diff --git a/resources/forms/firsttimewizard.ui b/resources/forms/firsttimewizard.ui index 305fd66a0..ec55bcd42 100644 --- a/resources/forms/firsttimewizard.ui +++ b/resources/forms/firsttimewizard.ui @@ -300,8 +300,8 @@ p, li { white-space: pre-wrap; } 20 20 - 252 - 88 + 491 + 113 @@ -339,15 +339,29 @@ p, li { white-space: pre-wrap; } - + Select default language - - + + + + QComboBox::AdjustToContents + + + + + + + Auto Language + + + true + + From b4156c809bb480f246450eb4ae5423274fd7612c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 27 Feb 2011 14:29:19 +0000 Subject: [PATCH 011/124] You can now set the Language --- openlp.pyw | 2 -- openlp/core/ui/firsttimeform.py | 18 ++++++++++++++---- openlp/core/utils/languagemanager.py | 5 +++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index c551636b8..393a1331b 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -276,10 +276,8 @@ def main(): if QtCore.QSettings().value( u'general/first time', QtCore.QVariant(True)).toBool(): FirstTimeForm().exec_() - pass # i18n Set Language language = LanguageManager.get_language() - print language appTranslator = LanguageManager.get_translator(language) app.installTranslator(appTranslator) if not options.no_error_form: diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 2a23350a6..35cc65b1f 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -48,6 +48,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): print self.webAccess QtGui.QWizard.__init__(self, parent) self.setupUi(self) + QtCore.QObject.connect(self.autoLanguageCheckBox, + QtCore.SIGNAL(u'stateChanged(int)'), + self.onAutoLanguageClicked) #self.registerFields() def exec_(self, edit=False): @@ -62,15 +65,16 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): Set up display at start of theme edit. """ self.restart() - # Sort out internet access + # Sort out internet access for downloads if self.webAccess: self.internetGroupBox.setVisible(True) self.noInternetLabel.setVisible(False) else: self.internetGroupBox.setVisible(False) self.noInternetLabel.setVisible(True) - if LanguageManager.auto_language: - self.LanguageComboBox.setEnabled(False) + # Sort out Language settings + self.autoLanguageCheckBox.setChecked(True) + self.LanguageComboBox.setEnabled(False) self.qmList = LanguageManager.get_qm_list() for key in sorted(self.qmList.keys()): self.LanguageComboBox.addItem(key) @@ -81,7 +85,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__pluginStatus(self.presentationCheckBox, u'presentations/status') self.__pluginStatus(self.imageCheckBox, u'images/status') self.__pluginStatus(self.mediaCheckBox, u'media/status') - self.__pluginStatus(self.remoteCheckBox, u'remote/status') + self.__pluginStatus(self.remoteCheckBox, u'remotes/status') self.__pluginStatus(self.customCheckBox, u'custom/status') self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') self.__pluginStatus(self.alertCheckBox, u'alerts/status') @@ -95,6 +99,12 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): LanguageManager.set_language(action, False) return QtGui.QWizard.accept(self) + def onAutoLanguageClicked(self, state): + if state == QtCore.Qt.Checked: + self.LanguageComboBox.setEnabled(False) + else: + self.LanguageComboBox.setEnabled(True) + def __pluginStatus(self, field, tag): status = PluginStatus.Active if field.checkState() \ == QtCore.Qt.Checked else PluginStatus.Inactive diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index e90a659ec..ebc9b4575 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -112,12 +112,13 @@ class LanguageManager(object): language = u'en' if action: action_name = u'%s' % action.objectName() - print action_name qm_list = LanguageManager.get_qm_list() language = u'%s' % qm_list[action_name] if LanguageManager.auto_language: language = u'[%s]' % language - QtCore.QSettings().setValue( + # This needs to be here for the setValue to work + settings = QtCore.QSettings(u'OpenLP', u'OpenLP') + settings.setValue( u'general/language', QtCore.QVariant(language)) log.info(u'Language file: \'%s\' written to conf file' % language) if message: From 0e773c7a1b3ddfd640ccdb78fbf2f74d0f3f53d6 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 27 Feb 2011 15:33:08 +0000 Subject: [PATCH 012/124] Lists from the web now --- openlp/core/ui/firsttimeform.py | 28 +++++++++++++++- resources/forms/firsttimewizard.ui | 53 +++++++++++++++--------------- 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 35cc65b1f..f739b9a81 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -44,8 +44,14 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): def __init__(self, parent=None): # check to see if we have web access - self.webAccess = get_web_page(u'http://openlp.org1') + self.webAccess = get_web_page(u'http://openlp.org/files/frw/themes.lst') print self.webAccess + if self.webAccess: + self.themes = self.webAccess.read() + songs = get_web_page(u'http://openlp.org/files/frw/songs.lst') + self.songs = songs.read() + bibles = get_web_page(u'http://openlp.org/files/frw/bibles.lst') + self.bibles = bibles.read() QtGui.QWizard.__init__(self, parent) self.setupUi(self) QtCore.QObject.connect(self.autoLanguageCheckBox, @@ -78,6 +84,26 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.qmList = LanguageManager.get_qm_list() for key in sorted(self.qmList.keys()): self.LanguageComboBox.addItem(key) + treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) + treewidgetitem.setText(0, u'Songs') + self.__loadChild(treewidgetitem, self.songs) + treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) + treewidgetitem.setText(0, u'Bibles') + self.__loadChild(treewidgetitem, self.bibles) + treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) + treewidgetitem.setText(0, u'Themes') + self.__loadChild(treewidgetitem, self.themes) + + def __loadChild(self, tree, list): + list = list.split(u'\n') + for item in list: + if item: + child = QtGui.QTreeWidgetItem(tree) + child.setText(0, item) + child.setCheckState(0, QtCore.Qt.Unchecked) + child.setFlags(QtCore.Qt.ItemIsUserCheckable | + QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + #self.themeSelectionComboBox.addItem(theme) def accept(self): self.__pluginStatus(self.songsCheckBox, u'songs/status') diff --git a/resources/forms/firsttimewizard.ui b/resources/forms/firsttimewizard.ui index ec55bcd42..5e20b017b 100644 --- a/resources/forms/firsttimewizard.ui +++ b/resources/forms/firsttimewizard.ui @@ -250,10 +250,10 @@ p, li { white-space: pre-wrap; } - 30 - 50 - 441 - 191 + 20 + 0 + 501 + 281 @@ -261,29 +261,28 @@ p, li { white-space: pre-wrap; } - - - - - Sample Songs - - - - - - - Bible XXX (Repeat per bible) - - - - - - - Theme XXX (Repeat per theme) - - - - + + + Qt::ScrollBarAlwaysOff + + + false + + + true + + + QAbstractItemView::NoSelection + + + false + + + + 1 + + + From 4792a73bb4ed5521d8dcc7ee7c388db20741a1ed Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Feb 2011 16:44:56 +0100 Subject: [PATCH 013/124] change screen size when the screen resolution changes (only when the user does not override the screen); reload settings when screen resolution changed or a new screen has been detected --- openlp.pyw | 34 ++++++++++++++++++----------- openlp/core/ui/screen.py | 40 ++++++++++++++++++++++++++++++---- openlp/core/ui/settingsform.py | 9 ++++++++ 3 files changed, 66 insertions(+), 17 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 1269c7ece..da347b1ea 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -24,7 +24,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### - +import copy import os import sys import logging @@ -168,6 +168,8 @@ class OpenLP(QtGui.QApplication): QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) QtCore.QObject.connect(self.desktop(), QtCore.SIGNAL(u'screenCountChanged(int)'), self.updateScreenList) + QtCore.QObject.connect(self.desktop(), + QtCore.SIGNAL(u'resized(int)'), self.updateScreenList) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -228,27 +230,33 @@ class OpenLP(QtGui.QApplication): Called when the list of screens has to be updated. ``applicationStart`` - Should be ``True`` when starting the application, otherwise - ``False``. + ``True`` when starting the application, otherwise ``False``. """ + for screen in copy.deepcopy(self.screens.screen_list): + # Remove unplugged screens. + if screen[u'number'] == self.desktop().numScreens(): + self.screens.remove_screen(screen[u'number']) + else: + # Check if the screen has changed. + temp_screen = { + u'number': screen[u'number'], + u'size': self.desktop().screenGeometry(screen[u'number']), + u'primary': + (self.desktop().primaryScreen() == screen[u'number']) + } + if temp_screen != screen: + self.screens.update_screen(temp_screen) # Add new screens. for number in xrange(0, self.desktop().numScreens()): if not self.screens.screen_exists(number): - size = self.desktop().screenGeometry(number) self.screens.add_screen({ u'number': number, - u'size': size, + u'size': self.desktop().screenGeometry(number), u'primary': (self.desktop().primaryScreen() == number) }) - log.info(u'Screen %d found with resolution %s', number, size) - # Remove unplugged screens. - for screen in self.screens.screen_list: - if screen[u'number'] > self.desktop().numScreens(): - self.screens.remove_screen(screen) - log.info(u'Screen %d removed' % creen[u'number']) if not applicationStart: - pass - # TODO: Refresh settings. + # Reload setting tabs to apply possible changes. + self.mainWindow.settingsForm.reload() # TODO: Make the new (second) monitor the live display. def main(): diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index df8ae9cbf..c21131a58 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -30,6 +30,8 @@ displays. import logging import copy +from openlp.core.lib import Receiver + log = logging.getLogger(__name__) class ScreenList(object): @@ -39,6 +41,8 @@ class ScreenList(object): log.info(u'Screen loaded') def __init__(self): + # The screen used for the rendermanager. + # (Why does the rendermanager needs his own?) self.preview = None self.current = None self.override = None @@ -61,14 +65,43 @@ class ScreenList(object): u'number': 0, u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) } - """ print u'add screen: %s' % screen + log.info(u'Screen %d found with resolution %s', + screen[u'number'], screen[u'size']) if screen[u'primary']: self.current = screen self.screen_list.append(screen) self.display_count += 1 + def update_screen(self, newScreen): + """ + Adjusts the screen's properties in the ``screen_list`` to the properties + of the given screen. + + ``newScreen`` + A dict with the new properties of the screen:: + + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } + """ + print u'update_screen %s' % newScreen[u'number'] + log.info(u'update_screen %d' % newScreen[u'number']) + for oldScreen in self.screen_list: + if newScreen[u'number'] == oldScreen[u'number']: + self.remove_screen(oldScreen[u'number']) + self.add_screen(newScreen) + # The screen's default size is used, that is why we have to + # update the override screen. + if oldScreen == self.override: + self.override = copy.deepcopy(newScreen) + self.set_override_display() + Receiver.send_message(u'config_screen_changed') + break + def remove_screen(self, number): """ Remove a screen from the list of known screens. @@ -76,9 +109,10 @@ class ScreenList(object): ``number`` The screen number (int). """ - print u'remove screen %s' % number + log.info(u'remove_screen %d' % number) for screen in self.screen_list: if screen[u'number'] == number: + print u'remove screen %s' % number self.screen_list.remove(screen) self.display_count -= 1 break @@ -92,9 +126,7 @@ class ScreenList(object): """ for screen in self.screen_list: if screen[u'number'] == number: - print u'screen %s exists' % number return True - print u'screen %s does not exist' % number return False def set_current_display(self, number): diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 872b37586..29f5eedbf 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -107,3 +107,12 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ for tabIndex in range(0, self.settingsTabWidget.count()): self.settingsTabWidget.widget(tabIndex).postSetUp() + + def reload(self): + """ + Reload all tabs to update settings which have been changed and are + outside of our scope. + """ + print u'reload' + for tabIndex in range(0, self.settingsTabWidget.count()): + self.settingsTabWidget.widget(tabIndex).load() From 0bb1ec6db51251c6d38895d1b76c5e16c65f02da Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Feb 2011 17:27:45 +0100 Subject: [PATCH 014/124] clean up --- openlp.pyw | 1 + openlp/core/ui/screen.py | 13 +++++-------- openlp/core/ui/settingsform.py | 1 - 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index da347b1ea..7f0dd21e1 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -257,6 +257,7 @@ class OpenLP(QtGui.QApplication): if not applicationStart: # Reload setting tabs to apply possible changes. self.mainWindow.settingsForm.reload() + #Receiver.send_message(u'config_screen_changed') # TODO: Make the new (second) monitor the live display. def main(): diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index c21131a58..53db37031 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -30,8 +30,6 @@ displays. import logging import copy -from openlp.core.lib import Receiver - log = logging.getLogger(__name__) class ScreenList(object): @@ -82,11 +80,11 @@ class ScreenList(object): ``newScreen`` A dict with the new properties of the screen:: - { - u'primary': True, - u'number': 0, - u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) - } + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } """ print u'update_screen %s' % newScreen[u'number'] log.info(u'update_screen %d' % newScreen[u'number']) @@ -99,7 +97,6 @@ class ScreenList(object): if oldScreen == self.override: self.override = copy.deepcopy(newScreen) self.set_override_display() - Receiver.send_message(u'config_screen_changed') break def remove_screen(self, number): diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 29f5eedbf..0c058cfd0 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -113,6 +113,5 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): Reload all tabs to update settings which have been changed and are outside of our scope. """ - print u'reload' for tabIndex in range(0, self.settingsTabWidget.count()): self.settingsTabWidget.widget(tabIndex).load() From df3a3cc1334cbe9688b2bb94f377399a0e446cf3 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 27 Feb 2011 17:05:37 +0000 Subject: [PATCH 015/124] Oops missed the wizard --- openlp/core/ui/firsttimewizard.py | 194 ++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 openlp/core/ui/firsttimewizard.py diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py new file mode 100644 index 000000000..68aa41285 --- /dev/null +++ b/openlp/core/ui/firsttimewizard.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'firsttimewizard.ui' +# +# Created: Sun Feb 27 15:02:08 2011 +# by: PyQt4 UI code generator 4.8.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + _fromUtf8 = lambda s: s + +class Ui_FirstTimeWizard(object): + def setupUi(self, FirstTimeWizard): + FirstTimeWizard.setObjectName(_fromUtf8("FirstTimeWizard")) + FirstTimeWizard.resize(550, 386) + FirstTimeWizard.setModal(True) + FirstTimeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) + FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages|QtGui.QWizard.NoBackButtonOnStartPage) + self.welcomePage = QtGui.QWizardPage() + self.welcomePage.setTitle(_fromUtf8("")) + self.welcomePage.setSubTitle(_fromUtf8("")) + self.welcomePage.setObjectName(_fromUtf8("welcomePage")) + self.welcomeLayout = QtGui.QHBoxLayout(self.welcomePage) + self.welcomeLayout.setSpacing(8) + self.welcomeLayout.setMargin(0) + self.welcomeLayout.setObjectName(_fromUtf8("welcomeLayout")) + self.importBibleImage = QtGui.QLabel(self.welcomePage) + self.importBibleImage.setMinimumSize(QtCore.QSize(163, 0)) + self.importBibleImage.setMaximumSize(QtCore.QSize(163, 16777215)) + self.importBibleImage.setLineWidth(0) + self.importBibleImage.setText(_fromUtf8("")) + self.importBibleImage.setPixmap(QtGui.QPixmap(_fromUtf8(":/wizards/wizard_importbible.bmp"))) + self.importBibleImage.setIndent(0) + self.importBibleImage.setObjectName(_fromUtf8("importBibleImage")) + self.welcomeLayout.addWidget(self.importBibleImage) + self.welcomePageLayout = QtGui.QVBoxLayout() + self.welcomePageLayout.setSpacing(8) + self.welcomePageLayout.setObjectName(_fromUtf8("welcomePageLayout")) + self.titleLabel = QtGui.QLabel(self.welcomePage) + self.titleLabel.setObjectName(_fromUtf8("titleLabel")) + self.welcomePageLayout.addWidget(self.titleLabel) + spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + self.welcomePageLayout.addItem(spacerItem) + self.informationLabel = QtGui.QLabel(self.welcomePage) + self.informationLabel.setWordWrap(True) + self.informationLabel.setMargin(10) + self.informationLabel.setObjectName(_fromUtf8("informationLabel")) + self.welcomePageLayout.addWidget(self.informationLabel) + spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.welcomePageLayout.addItem(spacerItem1) + self.welcomeLayout.addLayout(self.welcomePageLayout) + FirstTimeWizard.addPage(self.welcomePage) + self.PluginPagePage = QtGui.QWizardPage() + self.PluginPagePage.setObjectName(_fromUtf8("PluginPagePage")) + self.verticalLayout_2 = QtGui.QVBoxLayout(self.PluginPagePage) + self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) + self.verticalLayout = QtGui.QVBoxLayout() + self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) + self.songsCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.songsCheckBox.setChecked(True) + self.songsCheckBox.setObjectName(_fromUtf8("songsCheckBox")) + self.verticalLayout.addWidget(self.songsCheckBox) + self.customCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.customCheckBox.setChecked(True) + self.customCheckBox.setObjectName(_fromUtf8("customCheckBox")) + self.verticalLayout.addWidget(self.customCheckBox) + self.bibleCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.bibleCheckBox.setChecked(True) + self.bibleCheckBox.setObjectName(_fromUtf8("bibleCheckBox")) + self.verticalLayout.addWidget(self.bibleCheckBox) + self.imageCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.imageCheckBox.setChecked(True) + self.imageCheckBox.setObjectName(_fromUtf8("imageCheckBox")) + self.verticalLayout.addWidget(self.imageCheckBox) + self.presentationCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.presentationCheckBox.setChecked(True) + self.presentationCheckBox.setObjectName(_fromUtf8("presentationCheckBox")) + self.verticalLayout.addWidget(self.presentationCheckBox) + self.mediaCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.mediaCheckBox.setChecked(True) + self.mediaCheckBox.setObjectName(_fromUtf8("mediaCheckBox")) + self.verticalLayout.addWidget(self.mediaCheckBox) + self.remoteCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.remoteCheckBox.setObjectName(_fromUtf8("remoteCheckBox")) + self.verticalLayout.addWidget(self.remoteCheckBox) + self.songUsageCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.songUsageCheckBox.setChecked(True) + self.songUsageCheckBox.setObjectName(_fromUtf8("songUsageCheckBox")) + self.verticalLayout.addWidget(self.songUsageCheckBox) + self.alertCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.alertCheckBox.setChecked(True) + self.alertCheckBox.setObjectName(_fromUtf8("alertCheckBox")) + self.verticalLayout.addWidget(self.alertCheckBox) + self.verticalLayout_2.addLayout(self.verticalLayout) + FirstTimeWizard.addPage(self.PluginPagePage) + self.downloadDefaultsPage = QtGui.QWizardPage() + self.downloadDefaultsPage.setObjectName(_fromUtf8("downloadDefaultsPage")) + self.noInternetLabel = QtGui.QLabel(self.downloadDefaultsPage) + self.noInternetLabel.setGeometry(QtCore.QRect(20, 20, 461, 17)) + self.noInternetLabel.setObjectName(_fromUtf8("noInternetLabel")) + self.internetGroupBox = QtGui.QGroupBox(self.downloadDefaultsPage) + self.internetGroupBox.setGeometry(QtCore.QRect(20, 10, 501, 271)) + self.internetGroupBox.setObjectName(_fromUtf8("internetGroupBox")) + self.verticalLayout_4 = QtGui.QVBoxLayout(self.internetGroupBox) + self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) + self.selectionTreeWidget = QtGui.QTreeWidget(self.internetGroupBox) + self.selectionTreeWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.selectionTreeWidget.setProperty(_fromUtf8("showDropIndicator"), False) + self.selectionTreeWidget.setAlternatingRowColors(True) + #self.selectionTreeWidget.setSelectionMode(QtGui.QAbstractItemView.NoSelection) + self.selectionTreeWidget.setObjectName(_fromUtf8("selectionTreeWidget")) + self.selectionTreeWidget.headerItem().setText(0, _fromUtf8("1")) + self.selectionTreeWidget.header().setVisible(False) + self.verticalLayout_4.addWidget(self.selectionTreeWidget) + FirstTimeWizard.addPage(self.downloadDefaultsPage) + self.DefaultsPage = QtGui.QWizardPage() + self.DefaultsPage.setObjectName(_fromUtf8("DefaultsPage")) + self.layoutWidget = QtGui.QWidget(self.DefaultsPage) + self.layoutWidget.setGeometry(QtCore.QRect(20, 20, 491, 113)) + self.layoutWidget.setObjectName(_fromUtf8("layoutWidget")) + self.gridLayout = QtGui.QGridLayout(self.layoutWidget) + self.gridLayout.setMargin(0) + self.gridLayout.setObjectName(_fromUtf8("gridLayout")) + self.displaySelectionLabel = QtGui.QLabel(self.layoutWidget) + self.displaySelectionLabel.setObjectName(_fromUtf8("displaySelectionLabel")) + self.gridLayout.addWidget(self.displaySelectionLabel, 0, 0, 1, 1) + self.displaySelectionComboBox = QtGui.QComboBox(self.layoutWidget) + self.displaySelectionComboBox.setEditable(False) + self.displaySelectionComboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) + self.displaySelectionComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) + self.displaySelectionComboBox.setObjectName(_fromUtf8("displaySelectionComboBox")) + self.gridLayout.addWidget(self.displaySelectionComboBox, 0, 1, 1, 1) + self.themeSelectionLabel = QtGui.QLabel(self.layoutWidget) + self.themeSelectionLabel.setObjectName(_fromUtf8("themeSelectionLabel")) + self.gridLayout.addWidget(self.themeSelectionLabel, 1, 0, 1, 1) + self.themeSelectionComboBox = QtGui.QComboBox(self.layoutWidget) + self.themeSelectionComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) + self.themeSelectionComboBox.setObjectName(_fromUtf8("themeSelectionComboBox")) + self.gridLayout.addWidget(self.themeSelectionComboBox, 1, 1, 1, 1) + self.languageLabel = QtGui.QLabel(self.layoutWidget) + self.languageLabel.setObjectName(_fromUtf8("languageLabel")) + self.gridLayout.addWidget(self.languageLabel, 3, 0, 1, 1) + self.LanguageComboBox = QtGui.QComboBox(self.layoutWidget) + self.LanguageComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) + self.LanguageComboBox.setObjectName(_fromUtf8("LanguageComboBox")) + self.gridLayout.addWidget(self.LanguageComboBox, 3, 1, 1, 1) + self.autoLanguageCheckBox = QtGui.QCheckBox(self.layoutWidget) + self.autoLanguageCheckBox.setChecked(True) + self.autoLanguageCheckBox.setObjectName(_fromUtf8("autoLanguageCheckBox")) + self.gridLayout.addWidget(self.autoLanguageCheckBox, 2, 0, 1, 1) + self.label = QtGui.QLabel(self.DefaultsPage) + self.label.setGeometry(QtCore.QRect(40, 190, 471, 17)) + self.label.setObjectName(_fromUtf8("label")) + FirstTimeWizard.addPage(self.DefaultsPage) + + self.retranslateUi(FirstTimeWizard) + QtCore.QMetaObject.connectSlotsByName(FirstTimeWizard) + + def retranslateUi(self, FirstTimeWizard): + FirstTimeWizard.setWindowTitle(QtGui.QApplication.translate("FirstTimeWizard", "First Time Wizard", None, QtGui.QApplication.UnicodeUTF8)) + self.titleLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "\n" +"\n" +"

Welcome to the First Time Wizard

", None, QtGui.QApplication.UnicodeUTF8)) + self.informationLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. ", None, QtGui.QApplication.UnicodeUTF8)) + self.PluginPagePage.setTitle(QtGui.QApplication.translate("FirstTimeWizard", "Activate required Plugins", None, QtGui.QApplication.UnicodeUTF8)) + self.PluginPagePage.setSubTitle(QtGui.QApplication.translate("FirstTimeWizard", "Select the Plugins you wish to use. ", None, QtGui.QApplication.UnicodeUTF8)) + self.songsCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Songs", None, QtGui.QApplication.UnicodeUTF8)) + self.customCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Custom Text", None, QtGui.QApplication.UnicodeUTF8)) + self.bibleCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Bible", None, QtGui.QApplication.UnicodeUTF8)) + self.imageCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Images", None, QtGui.QApplication.UnicodeUTF8)) + self.presentationCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Presentations", None, QtGui.QApplication.UnicodeUTF8)) + self.mediaCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Media (Audio and Video)", None, QtGui.QApplication.UnicodeUTF8)) + self.remoteCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Allow remote access", None, QtGui.QApplication.UnicodeUTF8)) + self.songUsageCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Monitor Song Usage", None, QtGui.QApplication.UnicodeUTF8)) + self.alertCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Allow Alerts", None, QtGui.QApplication.UnicodeUTF8)) + self.downloadDefaultsPage.setTitle(QtGui.QApplication.translate("FirstTimeWizard", "Download Samples from OpenLP.org", None, QtGui.QApplication.UnicodeUTF8)) + self.downloadDefaultsPage.setSubTitle(QtGui.QApplication.translate("FirstTimeWizard", "Select samples to downlaod and install for use.", None, QtGui.QApplication.UnicodeUTF8)) + self.noInternetLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "No Internet connection found so unable to download any default files.", None, QtGui.QApplication.UnicodeUTF8)) + self.internetGroupBox.setTitle(QtGui.QApplication.translate("FirstTimeWizard", "Download Example Files", None, QtGui.QApplication.UnicodeUTF8)) + self.DefaultsPage.setTitle(QtGui.QApplication.translate("FirstTimeWizard", "Default Settings", None, QtGui.QApplication.UnicodeUTF8)) + self.DefaultsPage.setSubTitle(QtGui.QApplication.translate("FirstTimeWizard", "Set up default values to be used by OpenLP", None, QtGui.QApplication.UnicodeUTF8)) + self.displaySelectionLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "Default output display", None, QtGui.QApplication.UnicodeUTF8)) + self.themeSelectionLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "Select the default Theme", None, QtGui.QApplication.UnicodeUTF8)) + self.languageLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "Select default language", None, QtGui.QApplication.UnicodeUTF8)) + self.autoLanguageCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Auto Language", None, QtGui.QApplication.UnicodeUTF8)) + self.label.setText(QtGui.QApplication.translate("FirstTimeWizard", "Press Finish to apply all you changes and start OpenLP", None, QtGui.QApplication.UnicodeUTF8)) + From b309c8d6737845d54eccdc7570fd60ffa711c89a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 27 Feb 2011 19:19:16 +0100 Subject: [PATCH 016/124] clean up --- openlp.pyw | 12 ++++++------ openlp/core/ui/screen.py | 3 --- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 7f0dd21e1..d65f68591 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -185,7 +185,7 @@ class OpenLP(QtGui.QApplication): self.processEvents() self.screens = ScreenList() # Decide how many screens we have and their size - self.updateScreenList(True) + self.updateScreenList() # start the main app window self.appClipboard = self.clipboard() self.mainWindow = MainWindow( @@ -225,12 +225,12 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() - def updateScreenList(self, applicationStart=False): + def updateScreenList(self, count=-1): """ Called when the list of screens has to be updated. - ``applicationStart`` - ``True`` when starting the application, otherwise ``False``. + ``count`` + The screen's number which has been (un)plugged """ for screen in copy.deepcopy(self.screens.screen_list): # Remove unplugged screens. @@ -254,10 +254,10 @@ class OpenLP(QtGui.QApplication): u'size': self.desktop().screenGeometry(number), u'primary': (self.desktop().primaryScreen() == number) }) - if not applicationStart: + if count != -1: # Reload setting tabs to apply possible changes. self.mainWindow.settingsForm.reload() - #Receiver.send_message(u'config_screen_changed') + Receiver.send_message(u'config_screen_changed') # TODO: Make the new (second) monitor the live display. def main(): diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 53db37031..df04a40d6 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -64,7 +64,6 @@ class ScreenList(object): u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) } """ - print u'add screen: %s' % screen log.info(u'Screen %d found with resolution %s', screen[u'number'], screen[u'size']) if screen[u'primary']: @@ -86,7 +85,6 @@ class ScreenList(object): u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) } """ - print u'update_screen %s' % newScreen[u'number'] log.info(u'update_screen %d' % newScreen[u'number']) for oldScreen in self.screen_list: if newScreen[u'number'] == oldScreen[u'number']: @@ -109,7 +107,6 @@ class ScreenList(object): log.info(u'remove_screen %d' % number) for screen in self.screen_list: if screen[u'number'] == number: - print u'remove screen %s' % number self.screen_list.remove(screen) self.display_count -= 1 break From c7644bf8d90bba65dead94dfb6ffdff0cfa117b1 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 28 Feb 2011 20:36:58 +0100 Subject: [PATCH 017/124] removed unused import --- openlp.pyw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp.pyw b/openlp.pyw index c503cfa4b..c88d6a3ee 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -34,7 +34,7 @@ from subprocess import Popen, PIPE from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, translate, check_directory_exists +from openlp.core.lib import Receiver, check_directory_exists from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow from openlp.core.ui.exceptionform import ExceptionForm From 89c988b7283d0084cedf0c2184aecbb1053fa3a2 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 1 Mar 2011 18:16:59 +0100 Subject: [PATCH 018/124] moved code to ScreenList class --- openlp.pyw | 46 +----------------- openlp/core/ui/screen.py | 102 +++++++++++++++++++++++++++------------ 2 files changed, 72 insertions(+), 76 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index c88d6a3ee..02b1d9f73 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -24,7 +24,6 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -import copy import os import sys import logging @@ -166,10 +165,6 @@ class OpenLP(QtGui.QApplication): QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) - QtCore.QObject.connect(self.desktop(), - QtCore.SIGNAL(u'screenCountChanged(int)'), self.updateScreenList) - QtCore.QObject.connect(self.desktop(), - QtCore.SIGNAL(u'resized(int)'), self.updateScreenList) self.setOrganizationName(u'OpenLP') self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') @@ -183,13 +178,11 @@ class OpenLP(QtGui.QApplication): self.splash.show() # make sure Qt really display the splash screen self.processEvents() - self.screens = ScreenList() # Decide how many screens we have and their size - self.updateScreenList() + screens = ScreenList(self, self.desktop()) # start the main app window self.appClipboard = self.clipboard() - self.mainWindow = MainWindow( - self.screens, app_version, self.appClipboard) + self.mainWindow = MainWindow(screens, app_version, self.appClipboard) self.mainWindow.show() if show_splash: # now kill the splashscreen @@ -225,41 +218,6 @@ class OpenLP(QtGui.QApplication): """ self.restoreOverrideCursor() - def updateScreenList(self, count=-1): - """ - Called when the list of screens has to be updated. - - ``count`` - The screen's number which has been (un)plugged - """ - for screen in copy.deepcopy(self.screens.screen_list): - # Remove unplugged screens. - if screen[u'number'] == self.desktop().numScreens(): - self.screens.remove_screen(screen[u'number']) - else: - # Check if the screen has changed. - temp_screen = { - u'number': screen[u'number'], - u'size': self.desktop().screenGeometry(screen[u'number']), - u'primary': - (self.desktop().primaryScreen() == screen[u'number']) - } - if temp_screen != screen: - self.screens.update_screen(temp_screen) - # Add new screens. - for number in xrange(0, self.desktop().numScreens()): - if not self.screens.screen_exists(number): - self.screens.add_screen({ - u'number': number, - u'size': self.desktop().screenGeometry(number), - u'primary': (self.desktop().primaryScreen() == number) - }) - if count != -1: - # Reload setting tabs to apply possible changes. - self.mainWindow.settingsForm.reload() - Receiver.send_message(u'config_screen_changed') - # TODO: Make the new (second) monitor the live display. - def main(): """ The main function which parses command line options and then runs diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index df04a40d6..1007ecc56 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -30,6 +30,10 @@ displays. import logging import copy +from PyQt4 import QtCore + +from openlp.core.lib import Receiver + log = logging.getLogger(__name__) class ScreenList(object): @@ -38,7 +42,11 @@ class ScreenList(object): """ log.info(u'Screen loaded') - def __init__(self): + def __init__(self, parent, desktop): + """ + """ + self.parent = parent + self.desktop = desktop # The screen used for the rendermanager. # (Why does the rendermanager needs his own?) self.preview = None @@ -50,6 +58,62 @@ class ScreenList(object): self.current_display = 0 # save config display number self.monitor_number = 0 + self.screenCountChanged() + QtCore.QObject.connect(desktop, + QtCore.SIGNAL(u'resized(int)'), self.screenResolutionChanged) + QtCore.QObject.connect(desktop, + QtCore.SIGNAL(u'screenCountChanged(int)'), self.screenCountChanged) + + def screenResolutionChanged(self, number): + """ + Called when the resolution of a screen has changed. + + ``number`` + The number of the screen, which size has changed. + """ + log.info(u'screenResolutionChanged %d' % number) + for screen in self.screen_list: + if number == screen[u'number']: + newScreen = { + u'number': number, + u'size': self.desktop.screenGeometry(number), + u'primary': (self.desktop.primaryScreen() == number) + } + self.remove_screen(number) + self.add_screen(newScreen) + # The screen's default size is used, that is why we have to + # update the override screen. + if screen == self.override: + self.override = copy.deepcopy(newScreen) + self.set_override_display() + self.parent.mainWindow.settingsForm.reload() + Receiver.send_message(u'config_screen_changed') + break + + def screenCountChanged(self, count=-1): + """ + Called when a screen has been added or removed. + + ``count`` + The screen's number which has been (un)plugged. + """ + # Remove unplugged screens. + for screen in copy.deepcopy(self.screen_list): + if screen[u'number'] == self.desktop.numScreens(): + self.remove_screen(screen[u'number']) + # Add new screens. + for number in xrange(0, self.desktop.numScreens()): + if not self.screen_exists(number): + self.add_screen({ + u'number': number, + u'size': self.desktop.screenGeometry(number), + u'primary': (self.desktop.primaryScreen() == number) + }) + if count != -1: + # Reload setting tabs to apply possible changes. + self.parent.mainWindow.settingsForm.reload() + Receiver.send_message(u'config_screen_changed') + # TODO: Make the new (second) monitor the live display. def add_screen(self, screen): """ @@ -58,11 +122,11 @@ class ScreenList(object): ``screen`` A dict with the screen properties:: - { - u'primary': True, - u'number': 0, - u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) - } + { + u'primary': True, + u'number': 0, + u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) + } """ log.info(u'Screen %d found with resolution %s', screen[u'number'], screen[u'size']) @@ -71,32 +135,6 @@ class ScreenList(object): self.screen_list.append(screen) self.display_count += 1 - def update_screen(self, newScreen): - """ - Adjusts the screen's properties in the ``screen_list`` to the properties - of the given screen. - - ``newScreen`` - A dict with the new properties of the screen:: - - { - u'primary': True, - u'number': 0, - u'size': PyQt4.QtCore.QRect(0, 0, 1024, 768) - } - """ - log.info(u'update_screen %d' % newScreen[u'number']) - for oldScreen in self.screen_list: - if newScreen[u'number'] == oldScreen[u'number']: - self.remove_screen(oldScreen[u'number']) - self.add_screen(newScreen) - # The screen's default size is used, that is why we have to - # update the override screen. - if oldScreen == self.override: - self.override = copy.deepcopy(newScreen) - self.set_override_display() - break - def remove_screen(self, number): """ Remove a screen from the list of known screens. From 1ec23f00ff5572cb9b4a74a7d050ff0d88ab719e Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 18:44:01 +0100 Subject: [PATCH 019/124] added method to get list of screens, clean ups --- openlp/core/ui/generaltab.py | 12 +++++------ openlp/core/ui/screen.py | 39 ++++++++++++++++++++++++---------- openlp/core/ui/settingsform.py | 8 ------- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 777302a41..d1c54d97d 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -234,6 +234,9 @@ class GeneralTab(SettingsTab): QtCore.QObject.connect(self.customXValueEdit, QtCore.SIGNAL(u'textEdited(const QString&)'), self.onDisplayPositionChanged) + # Reload the tab, as the screen resolution/count may has changed. + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'config_screen_changed'), self.load) def retranslateUi(self): """ @@ -301,13 +304,8 @@ class GeneralTab(SettingsTab): settings = QtCore.QSettings() settings.beginGroup(self.settingsSection) self.monitorComboBox.clear() - for screen in self.screens.screen_list: - screen_name = u'%s %d' % (translate('OpenLP.GeneralTab', 'Screen'), - screen[u'number'] + 1) - if screen[u'primary']: - screen_name = u'%s (%s)' % (screen_name, - translate('OpenLP.GeneralTab', 'primary')) - self.monitorComboBox.addItem(screen_name) + for screen in self.screens.get_screen_list(): + self.monitorComboBox.addItem(screen) self.numberEdit.setText(unicode(settings.value( u'ccli number', QtCore.QVariant(u'')).toString())) self.usernameEdit.setText(unicode(settings.value( diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 1007ecc56..09bb1d8f2 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -32,7 +32,7 @@ import copy from PyQt4 import QtCore -from openlp.core.lib import Receiver +from openlp.core.lib import Receiver, translate log = logging.getLogger(__name__) @@ -58,13 +58,14 @@ class ScreenList(object): self.current_display = 0 # save config display number self.monitor_number = 0 - self.screenCountChanged() + self.screen_count_changed() QtCore.QObject.connect(desktop, - QtCore.SIGNAL(u'resized(int)'), self.screenResolutionChanged) + QtCore.SIGNAL(u'resized(int)'), self.screen_resolution_changed) QtCore.QObject.connect(desktop, - QtCore.SIGNAL(u'screenCountChanged(int)'), self.screenCountChanged) + QtCore.SIGNAL(u'screenCountChanged(int)'), + self.screen_count_changed) - def screenResolutionChanged(self, number): + def screen_resolution_changed(self, number): """ Called when the resolution of a screen has changed. @@ -86,15 +87,14 @@ class ScreenList(object): if screen == self.override: self.override = copy.deepcopy(newScreen) self.set_override_display() - self.parent.mainWindow.settingsForm.reload() Receiver.send_message(u'config_screen_changed') break - def screenCountChanged(self, count=-1): + def screen_count_changed(self, changed_screen=-1): """ Called when a screen has been added or removed. - ``count`` + ``changed_screen`` The screen's number which has been (un)plugged. """ # Remove unplugged screens. @@ -109,11 +109,28 @@ class ScreenList(object): u'size': self.desktop.screenGeometry(number), u'primary': (self.desktop.primaryScreen() == number) }) - if count != -1: + # We do not want to send this message, when the method is called the + # first time. + if changed_screen != -1: # Reload setting tabs to apply possible changes. - self.parent.mainWindow.settingsForm.reload() Receiver.send_message(u'config_screen_changed') - # TODO: Make the new (second) monitor the live display. + + def get_screen_list(self): + """ + Returns a list with the screens. This should only be used to display + available screens to the user:: + + [u'Screen 1 (primary)', Screen 2'] + """ + screen_list= [] + for screen in self.screen_list: + screen_name = u'%s %d' % (translate('OpenLP.ScreenList', 'Screen'), + screen[u'number'] + 1) + if screen[u'primary']: + screen_name = u'%s (%s)' % (screen_name, + translate('OpenLP.ScreenList', 'primary')) + screen_list.append(screen_name) + return screen_list def add_screen(self, screen): """ diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 0c058cfd0..872b37586 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -107,11 +107,3 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ for tabIndex in range(0, self.settingsTabWidget.count()): self.settingsTabWidget.widget(tabIndex).postSetUp() - - def reload(self): - """ - Reload all tabs to update settings which have been changed and are - outside of our scope. - """ - for tabIndex in range(0, self.settingsTabWidget.count()): - self.settingsTabWidget.widget(tabIndex).load() From a10ad04254766b2588514b3a89fc14c8166e175a Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 2 Mar 2011 17:44:33 +0000 Subject: [PATCH 020/124] Add first time language dialog --- openlp.pyw | 9 ++- openlp/core/ui/__init__.py | 1 + openlp/core/ui/firsttimeform.py | 24 +------- openlp/core/ui/firsttimelanguagedialog.py | 55 +++++++++++++++++++ openlp/core/ui/firsttimelanguageform.py | 67 +++++++++++++++++++++++ openlp/core/ui/firsttimewizard.py | 13 ----- 6 files changed, 131 insertions(+), 38 deletions(-) create mode 100644 openlp/core/ui/firsttimelanguagedialog.py create mode 100644 openlp/core/ui/firsttimelanguageform.py diff --git a/openlp.pyw b/openlp.pyw index 393a1331b..56626cf48 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -37,6 +37,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver, check_directory_exists from openlp.core.resources import qInitResources from openlp.core.ui.mainwindow import MainWindow +from openlp.core.ui.firsttimelanguageform import FirstTimeLanguageForm from openlp.core.ui.firsttimeform import FirstTimeForm from openlp.core.ui.exceptionform import ExceptionForm from openlp.core.ui import SplashScreen, ScreenList @@ -275,14 +276,18 @@ def main(): # First time checks in settings if QtCore.QSettings().value( u'general/first time', QtCore.QVariant(True)).toBool(): - FirstTimeForm().exec_() + FirstTimeLanguageForm().exec_() # i18n Set Language language = LanguageManager.get_language() appTranslator = LanguageManager.get_translator(language) app.installTranslator(appTranslator) + # First time checks in settings + if QtCore.QSettings().value( + u'general/first time', QtCore.QVariant(True)).toBool(): + FirstTimeForm().exec_() if not options.no_error_form: sys.excepthook = app.hookException - sys.exit(app.run()) + sys.exit()#(app.run()) if __name__ == u'__main__': """ diff --git a/openlp/core/ui/__init__.py b/openlp/core/ui/__init__.py index a9b46ec9f..485d2adda 100644 --- a/openlp/core/ui/__init__.py +++ b/openlp/core/ui/__init__.py @@ -52,6 +52,7 @@ class HideMode(object): Screen = 3 from firsttimeform import FirstTimeForm +from firsttimelanguageform import FirstTimeLanguageForm from themeform import ThemeForm from filerenameform import FileRenameForm from starttimeform import StartTimeForm diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index f739b9a81..76f88b8b1 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -31,7 +31,7 @@ from PyQt4 import QtCore, QtGui from firsttimewizard import Ui_FirstTimeWizard from openlp.core.lib import translate, PluginStatus -from openlp.core.utils import get_web_page, LanguageManager +from openlp.core.utils import get_web_page log = logging.getLogger(__name__) @@ -54,9 +54,6 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.bibles = bibles.read() QtGui.QWizard.__init__(self, parent) self.setupUi(self) - QtCore.QObject.connect(self.autoLanguageCheckBox, - QtCore.SIGNAL(u'stateChanged(int)'), - self.onAutoLanguageClicked) #self.registerFields() def exec_(self, edit=False): @@ -79,11 +76,6 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.internetGroupBox.setVisible(False) self.noInternetLabel.setVisible(True) # Sort out Language settings - self.autoLanguageCheckBox.setChecked(True) - self.LanguageComboBox.setEnabled(False) - self.qmList = LanguageManager.get_qm_list() - for key in sorted(self.qmList.keys()): - self.LanguageComboBox.addItem(key) treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, u'Songs') self.__loadChild(treewidgetitem, self.songs) @@ -115,22 +107,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__pluginStatus(self.customCheckBox, u'custom/status') self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') self.__pluginStatus(self.alertCheckBox, u'alerts/status') - if self.autoLanguageCheckBox.checkState() == QtCore.Qt.Checked: - LanguageManager.auto_language = True - LanguageManager.set_language(False, False) - else: - LanguageManager.auto_language = False - action = QtGui.QAction(None) - action.setObjectName(unicode(self.LanguageComboBox.currentText())) - LanguageManager.set_language(action, False) return QtGui.QWizard.accept(self) - def onAutoLanguageClicked(self, state): - if state == QtCore.Qt.Checked: - self.LanguageComboBox.setEnabled(False) - else: - self.LanguageComboBox.setEnabled(True) - def __pluginStatus(self, field, tag): status = PluginStatus.Active if field.checkState() \ == QtCore.Qt.Checked else PluginStatus.Inactive diff --git a/openlp/core/ui/firsttimelanguagedialog.py b/openlp/core/ui/firsttimelanguagedialog.py new file mode 100644 index 000000000..fbf817939 --- /dev/null +++ b/openlp/core/ui/firsttimelanguagedialog.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Armin Köhler, Andreas Preikschat, # +# Christian Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon # +# Tibble, Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# 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; version 2 of the License. # +# # +# 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., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import translate +from openlp.core.lib.ui import create_accept_reject_button_box + +class Ui_FirstTimeLanguageDialog(object): + def setupUi(self, firstTimeLanguageDialog): + firstTimeLanguageDialog.setObjectName(u'firstTimeLanguageDialog') + firstTimeLanguageDialog.resize(300, 10) + self.dialogLayout = QtGui.QGridLayout(firstTimeLanguageDialog) + self.dialogLayout.setObjectName(u'dialogLayout') + self.fileNameLabel = QtGui.QLabel(firstTimeLanguageDialog) + self.fileNameLabel.setObjectName(u'fileNameLabel') + self.dialogLayout.addWidget(self.fileNameLabel, 0, 0) + self.LanguageComboBox = QtGui.QComboBox(firstTimeLanguageDialog) + self.LanguageComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) + self.LanguageComboBox.setObjectName("LanguageComboBox") + self.dialogLayout.addWidget(self.LanguageComboBox, 0, 1) + self.buttonBox = create_accept_reject_button_box(firstTimeLanguageDialog, True) + self.dialogLayout.addWidget(self.buttonBox, 1, 0, 1, 2) + self.retranslateUi(firstTimeLanguageDialog) + self.setMaximumHeight(self.sizeHint().height()) + QtCore.QMetaObject.connectSlotsByName(firstTimeLanguageDialog) + + def retranslateUi(self, firstTimeLanguageDialog): + self.setWindowTitle(translate('OpenLP.FirstTimeLanguageForm', + 'Initial Set up Language')) + self.fileNameLabel.setText(translate('OpenLP.FirstTimeLanguageForm', + 'Initial Language:')) diff --git a/openlp/core/ui/firsttimelanguageform.py b/openlp/core/ui/firsttimelanguageform.py new file mode 100644 index 000000000..e3ed16796 --- /dev/null +++ b/openlp/core/ui/firsttimelanguageform.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2011 Raoul Snyman # +# Portions copyright (c) 2008-2011 Tim Bentley, Jonathan Corwin, Michael # +# Gorven, Scott Guerrieri, Meinert Jordan, Armin Köhler, Andreas Preikschat, # +# Christian Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon # +# Tibble, Carsten Tinggaard, Frode Woldsund # +# --------------------------------------------------------------------------- # +# 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; version 2 of the License. # +# # +# 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., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### + +from PyQt4 import QtGui + +from firsttimelanguagedialog import Ui_FirstTimeLanguageDialog + +from openlp.core.lib import translate +from openlp.core.utils import LanguageManager + +class FirstTimeLanguageForm(QtGui.QDialog, Ui_FirstTimeLanguageDialog): + """ + The exception dialog + """ + def __init__(self, parent=None): + QtGui.QDialog.__init__(self, parent) + self.setupUi(self) + self.qmList = LanguageManager.get_qm_list() + for key in sorted(self.qmList.keys()): + self.LanguageComboBox.addItem(key) + + def exec_(self): + """ + Run the Dialog with correct heading. + """ + return QtGui.QDialog.exec_(self) + + def accept(self): + print "Accept" +# if self.autoLanguageCheckBox.checkState() == QtCore.Qt.Checked: +# LanguageManager.auto_language = True +# LanguageManager.set_language(False, False) +# else: +# LanguageManager.auto_language = False +# action = QtGui.QAction(None) +# action.setObjectName(unicode(self.LanguageComboBox.currentText())) +# LanguageManager.set_language(action, False) + return QtGui.QDialog.accept(self) + + def reject(self): + print "Reject" + LanguageManager.auto_language = True + LanguageManager.set_language(False, False) + return QtGui.QDialog.reject(self) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 68aa41285..e9a1db232 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -142,17 +142,6 @@ class Ui_FirstTimeWizard(object): self.themeSelectionComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) self.themeSelectionComboBox.setObjectName(_fromUtf8("themeSelectionComboBox")) self.gridLayout.addWidget(self.themeSelectionComboBox, 1, 1, 1, 1) - self.languageLabel = QtGui.QLabel(self.layoutWidget) - self.languageLabel.setObjectName(_fromUtf8("languageLabel")) - self.gridLayout.addWidget(self.languageLabel, 3, 0, 1, 1) - self.LanguageComboBox = QtGui.QComboBox(self.layoutWidget) - self.LanguageComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) - self.LanguageComboBox.setObjectName(_fromUtf8("LanguageComboBox")) - self.gridLayout.addWidget(self.LanguageComboBox, 3, 1, 1, 1) - self.autoLanguageCheckBox = QtGui.QCheckBox(self.layoutWidget) - self.autoLanguageCheckBox.setChecked(True) - self.autoLanguageCheckBox.setObjectName(_fromUtf8("autoLanguageCheckBox")) - self.gridLayout.addWidget(self.autoLanguageCheckBox, 2, 0, 1, 1) self.label = QtGui.QLabel(self.DefaultsPage) self.label.setGeometry(QtCore.QRect(40, 190, 471, 17)) self.label.setObjectName(_fromUtf8("label")) @@ -188,7 +177,5 @@ class Ui_FirstTimeWizard(object): self.DefaultsPage.setSubTitle(QtGui.QApplication.translate("FirstTimeWizard", "Set up default values to be used by OpenLP", None, QtGui.QApplication.UnicodeUTF8)) self.displaySelectionLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "Default output display", None, QtGui.QApplication.UnicodeUTF8)) self.themeSelectionLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "Select the default Theme", None, QtGui.QApplication.UnicodeUTF8)) - self.languageLabel.setText(QtGui.QApplication.translate("FirstTimeWizard", "Select default language", None, QtGui.QApplication.UnicodeUTF8)) - self.autoLanguageCheckBox.setText(QtGui.QApplication.translate("FirstTimeWizard", "Auto Language", None, QtGui.QApplication.UnicodeUTF8)) self.label.setText(QtGui.QApplication.translate("FirstTimeWizard", "Press Finish to apply all you changes and start OpenLP", None, QtGui.QApplication.UnicodeUTF8)) From b34726e7901b1abf6ee81d2ffc0a33ae2d9d4dd5 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 2 Mar 2011 17:53:26 +0000 Subject: [PATCH 021/124] Hook up dialog and get working --- openlp.pyw | 2 +- openlp/core/ui/firsttimelanguageform.py | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 56626cf48..f006002c0 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -287,7 +287,7 @@ def main(): FirstTimeForm().exec_() if not options.no_error_form: sys.excepthook = app.hookException - sys.exit()#(app.run()) + sys.exit(app.run()) if __name__ == u'__main__': """ diff --git a/openlp/core/ui/firsttimelanguageform.py b/openlp/core/ui/firsttimelanguageform.py index e3ed16796..98489fde7 100644 --- a/openlp/core/ui/firsttimelanguageform.py +++ b/openlp/core/ui/firsttimelanguageform.py @@ -39,6 +39,7 @@ class FirstTimeLanguageForm(QtGui.QDialog, Ui_FirstTimeLanguageDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.qmList = LanguageManager.get_qm_list() + self.LanguageComboBox.addItem(u'Automatic') for key in sorted(self.qmList.keys()): self.LanguageComboBox.addItem(key) @@ -49,19 +50,18 @@ class FirstTimeLanguageForm(QtGui.QDialog, Ui_FirstTimeLanguageDialog): return QtGui.QDialog.exec_(self) def accept(self): - print "Accept" -# if self.autoLanguageCheckBox.checkState() == QtCore.Qt.Checked: -# LanguageManager.auto_language = True -# LanguageManager.set_language(False, False) -# else: -# LanguageManager.auto_language = False -# action = QtGui.QAction(None) -# action.setObjectName(unicode(self.LanguageComboBox.currentText())) -# LanguageManager.set_language(action, False) + # It's the first row so must be Automatic + if self.LanguageComboBox.currentIndex() == 0: + LanguageManager.auto_language = True + LanguageManager.set_language(False, False) + else: + LanguageManager.auto_language = False + action = QtGui.QAction(None) + action.setObjectName(unicode(self.LanguageComboBox.currentText())) + LanguageManager.set_language(action, False) return QtGui.QDialog.accept(self) def reject(self): - print "Reject" LanguageManager.auto_language = True LanguageManager.set_language(False, False) return QtGui.QDialog.reject(self) From 6da5cdfb2eb683cb856f115d778f24ac0ded6c72 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 18:56:06 +0100 Subject: [PATCH 022/124] removed not needed parameter --- openlp.pyw | 2 +- openlp/core/ui/screen.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 02b1d9f73..7cc4d6d15 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -179,7 +179,7 @@ class OpenLP(QtGui.QApplication): # make sure Qt really display the splash screen self.processEvents() # Decide how many screens we have and their size - screens = ScreenList(self, self.desktop()) + screens = ScreenList(self.desktop()) # start the main app window self.appClipboard = self.clipboard() self.mainWindow = MainWindow(screens, app_version, self.appClipboard) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 09bb1d8f2..74c94a4e4 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -42,13 +42,14 @@ class ScreenList(object): """ log.info(u'Screen loaded') - def __init__(self, parent, desktop): + def __init__(self, desktop): """ + Initialise the screen list. + + ``desktop`` + A ``QDesktopWidget`` object. """ - self.parent = parent self.desktop = desktop - # The screen used for the rendermanager. - # (Why does the rendermanager needs his own?) self.preview = None self.current = None self.override = None From 58e91aec7e106cb9a89cfced4e94cc46ee101aac Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 18:58:17 +0100 Subject: [PATCH 023/124] removed white space --- openlp/core/ui/screen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 74c94a4e4..9efae427f 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -79,7 +79,7 @@ class ScreenList(object): newScreen = { u'number': number, u'size': self.desktop.screenGeometry(number), - u'primary': (self.desktop.primaryScreen() == number) + u'primary': self.desktop.primaryScreen() == number } self.remove_screen(number) self.add_screen(newScreen) From aba791e46aa5a2f3bceed0f4f78b2c74a989d85f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 Mar 2011 19:07:07 +0100 Subject: [PATCH 024/124] fixed doc --- openlp/core/ui/screen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 9efae427f..9f8191961 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -121,7 +121,7 @@ class ScreenList(object): Returns a list with the screens. This should only be used to display available screens to the user:: - [u'Screen 1 (primary)', Screen 2'] + [u'Screen 1 (primary)', u'Screen 2'] """ screen_list= [] for screen in self.screen_list: From 3369f4ff09be71346492e1b641da3b4576a25045 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 2 Mar 2011 19:01:18 +0000 Subject: [PATCH 025/124] Add web configuration --- openlp.pyw | 2 +- openlp/core/ui/firsttimeform.py | 44 ++++++++++++++++----------------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index f006002c0..56626cf48 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -287,7 +287,7 @@ def main(): FirstTimeForm().exec_() if not options.no_error_form: sys.excepthook = app.hookException - sys.exit(app.run()) + sys.exit()#(app.run()) if __name__ == u'__main__': """ diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 76f88b8b1..b4921bdc9 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -24,6 +24,8 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +import ConfigParser +import io import logging from PyQt4 import QtCore, QtGui @@ -44,14 +46,11 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): def __init__(self, parent=None): # check to see if we have web access - self.webAccess = get_web_page(u'http://openlp.org/files/frw/themes.lst') - print self.webAccess + self.config = ConfigParser.ConfigParser() + self.webAccess = get_web_page(u'http://openlp.org/files/frw/download.cfg') if self.webAccess: - self.themes = self.webAccess.read() - songs = get_web_page(u'http://openlp.org/files/frw/songs.lst') - self.songs = songs.read() - bibles = get_web_page(u'http://openlp.org/files/frw/bibles.lst') - self.bibles = bibles.read() + files = self.webAccess.read() + self.config.readfp(io.BytesIO(files)) QtGui.QWizard.__init__(self, parent) self.setupUi(self) #self.registerFields() @@ -72,30 +71,29 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.webAccess: self.internetGroupBox.setVisible(True) self.noInternetLabel.setVisible(False) + treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) + treewidgetitem.setText(0, u'Songs') + self.__loadChild(treewidgetitem, u'songs', u'languages', u'songs') + treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) + treewidgetitem.setText(0, u'Bibles') + self.__loadChild(treewidgetitem, u'bibles', u'translations', u'bible') + treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) + treewidgetitem.setText(0, u'Themes') + self.__loadChild(treewidgetitem, u'themes', u'files', 'theme') else: self.internetGroupBox.setVisible(False) self.noInternetLabel.setVisible(True) - # Sort out Language settings - treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, u'Songs') - self.__loadChild(treewidgetitem, self.songs) - treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, u'Bibles') - self.__loadChild(treewidgetitem, self.bibles) - treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, u'Themes') - self.__loadChild(treewidgetitem, self.themes) - def __loadChild(self, tree, list): - list = list.split(u'\n') - for item in list: - if item: + def __loadChild(self, tree, list, tag, root): + files = self.config.get(list, tag) + files = files.split(u',') + for file in files: + if file: child = QtGui.QTreeWidgetItem(tree) - child.setText(0, item) + child.setText(0, self.config.get(u'%s_%s' %(root, file), u'title')) child.setCheckState(0, QtCore.Qt.Unchecked) child.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - #self.themeSelectionComboBox.addItem(theme) def accept(self): self.__pluginStatus(self.songsCheckBox, u'songs/status') From b09b36da8ee67e004057256599feb53934e31d70 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Wed, 2 Mar 2011 21:47:55 +0000 Subject: [PATCH 026/124] Move theme to default selection --- openlp/core/ui/firsttimeform.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index b4921bdc9..baf4624d6 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -91,10 +91,26 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if file: child = QtGui.QTreeWidgetItem(tree) child.setText(0, self.config.get(u'%s_%s' %(root, file), u'title')) + child.setData(0, QtCore.Qt.UserRole, + QtCore.QVariant(self.config.get(u'%s_%s' %(root, file), u'filename'))) child.setCheckState(0, QtCore.Qt.Unchecked) child.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + def initializePage(self, id): + """ + Set up the pages for Initial run through dialog + """ + wizardPage = self.page(id) + if wizardPage == self.DefaultsPage: + listIterator = QtGui.QTreeWidgetItemIterator(self.selectionTreeWidget) + while listIterator.value(): + parent = listIterator.value().parent() + if parent and listIterator.value().checkState(0) == QtCore.Qt.Checked: + if unicode(parent.text(0)) == u'Themes': + self.themeSelectionComboBox.addItem(listIterator.value().text(0)) + listIterator += 1 + def accept(self): self.__pluginStatus(self.songsCheckBox, u'songs/status') self.__pluginStatus(self.bibleCheckBox, u'bibles/status') @@ -105,6 +121,17 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__pluginStatus(self.customCheckBox, u'custom/status') self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') self.__pluginStatus(self.alertCheckBox, u'alerts/status') + + listIterator = QtGui.QTreeWidgetItemIterator(self.selectionTreeWidget) + while listIterator.value(): + type = listIterator.value().parent() + if listIterator.value().parent(): + if listIterator.value().checkState(0) == QtCore.Qt.Checked: + # Install + print type, listIterator.value().data(0, QtCore.Qt.UserRole).toString() + #if type == u'Themes': + #self.themeSelectionComboBox.addItem(listIterator.value().text()) + listIterator += 1 return QtGui.QWizard.accept(self) def __pluginStatus(self, field, tag): From 0ea0c9bf601bb8819720eaed6a3ed71e91ee6f5f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 3 Mar 2011 19:28:41 +0100 Subject: [PATCH 027/124] fix for merge --- openlp/core/ui/generaltab.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index d1c54d97d..e705d5ec3 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -234,7 +234,7 @@ class GeneralTab(SettingsTab): QtCore.QObject.connect(self.customXValueEdit, QtCore.SIGNAL(u'textEdited(const QString&)'), self.onDisplayPositionChanged) - # Reload the tab, as the screen resolution/count may has changed. + # Reload the tab, as the screen resolution/count may have changed. QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'config_screen_changed'), self.load) From 3e5da3be9e8fc342f2a05539d97655e0a3f9a386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Thu, 3 Mar 2011 22:18:17 +0200 Subject: [PATCH 028/124] address #728637 --- openlp/plugins/songs/forms/editverseform.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index 8a52c1859..645de8a60 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -98,7 +98,10 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): match = self.verse_regex.match(text) if match: verse_tag = match.group(1) - verse_num = int(match.group(2)) + try: + verse_num = int(match.group(2)) + except ValueError: + verse_num = 1 verse_type_index = VerseType.from_loose_input(verse_tag) if verse_type_index is not None: self.verseNumberBox.setValue(verse_num) @@ -127,7 +130,10 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): if match: verse_type = match.group(1) verse_type_index = VerseType.from_loose_input(verse_type) - verse_number = int(match.group(2)) + try: + verse_number = int(match.group(2)) + except ValueError: + verse_number = 1 if verse_type_index is not None: self.verseTypeComboBox.setCurrentIndex(verse_type_index) self.verseNumberBox.setValue(verse_number) From b088e143f050d2f2fec20fdc623134ec2e489007 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Thu, 3 Mar 2011 21:10:55 +0000 Subject: [PATCH 029/124] Speedup start up and remove black display --- openlp/core/lib/rendermanager.py | 1 - openlp/core/ui/mainwindow.py | 2 -- openlp/core/ui/slidecontroller.py | 4 ++++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index eaf628a34..0c9549ea5 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -69,7 +69,6 @@ class RenderManager(object): self.image_manager = ImageManager() self.display = MainDisplay(self, screens, False) self.display.imageManager = self.image_manager - self.display.setup() self.theme_manager = theme_manager self.renderer = Renderer() self.calculate_default(self.screens.current[u'size']) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index b9de8a12e..7a67331ad 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -650,8 +650,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): Show the main form, as well as the display form """ QtGui.QWidget.show(self) - self.liveController.display.setup() - self.previewController.display.setup() if self.liveController.display.isVisible(): self.liveController.display.setFocus() self.activateWindow() diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8d612676b..8d526706d 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -624,6 +624,10 @@ class SlideController(QtGui.QWidget): self.parent.renderManager.width, self.parent.renderManager.height) else: + if framenumber == slideno: + self.serviceItem.bg_image_bytes = \ + self.parent.renderManager.image_manager. \ + get_image_bytes(frame[u'title']) image = self.parent.renderManager.image_manager. \ get_image(frame[u'title']) label.setPixmap(QtGui.QPixmap.fromImage(image)) From cec487be858bd5be357113590fedc328dfcd77c9 Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 4 Mar 2011 13:57:39 +0000 Subject: [PATCH 030/124] Unused imports --- openlp/plugins/bibles/lib/csvbible.py | 2 -- openlp/plugins/bibles/lib/openlp1.py | 2 -- openlp/plugins/bibles/lib/opensong.py | 2 -- openlp/plugins/bibles/lib/osis.py | 2 -- 4 files changed, 8 deletions(-) diff --git a/openlp/plugins/bibles/lib/csvbible.py b/openlp/plugins/bibles/lib/csvbible.py index 18bf06cfb..b96382df2 100644 --- a/openlp/plugins/bibles/lib/csvbible.py +++ b/openlp/plugins/bibles/lib/csvbible.py @@ -69,8 +69,6 @@ import logging import chardet import csv -from PyQt4 import QtCore - from openlp.core.lib import Receiver, translate from openlp.plugins.bibles.lib.db import BibleDB, Testament diff --git a/openlp/plugins/bibles/lib/openlp1.py b/openlp/plugins/bibles/lib/openlp1.py index 03011fa5e..2d19db20c 100644 --- a/openlp/plugins/bibles/lib/openlp1.py +++ b/openlp/plugins/bibles/lib/openlp1.py @@ -27,8 +27,6 @@ import logging import sqlite -from PyQt4 import QtCore - from openlp.core.lib import Receiver from openlp.core.ui.wizard import WizardStrings from openlp.plugins.bibles.lib.db import BibleDB diff --git a/openlp/plugins/bibles/lib/opensong.py b/openlp/plugins/bibles/lib/opensong.py index 356483986..a7f1eff33 100644 --- a/openlp/plugins/bibles/lib/opensong.py +++ b/openlp/plugins/bibles/lib/opensong.py @@ -25,9 +25,7 @@ ############################################################################### import logging - from lxml import objectify -from PyQt4 import QtCore from openlp.core.lib import Receiver, translate from openlp.plugins.bibles.lib.db import BibleDB diff --git a/openlp/plugins/bibles/lib/osis.py b/openlp/plugins/bibles/lib/osis.py index 000471b96..78e2551d9 100644 --- a/openlp/plugins/bibles/lib/osis.py +++ b/openlp/plugins/bibles/lib/osis.py @@ -31,8 +31,6 @@ import chardet import codecs import re -from PyQt4 import QtCore - from openlp.core.lib import Receiver, translate from openlp.core.utils import AppLocation from openlp.plugins.bibles.lib.db import BibleDB From 2cd7c2c66e8f99cc86924d1a72e66731903a7afa Mon Sep 17 00:00:00 2001 From: Jon Tibble Date: Fri, 4 Mar 2011 14:44:21 +0000 Subject: [PATCH 031/124] Cleanups --- openlp/core/ui/screen.py | 2 +- openlp/plugins/songs/forms/songexportform.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index 9f8191961..6b4978727 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -123,7 +123,7 @@ class ScreenList(object): [u'Screen 1 (primary)', u'Screen 2'] """ - screen_list= [] + screen_list = [] for screen in self.screen_list: screen_name = u'%s %d' % (translate('OpenLP.ScreenList', 'Screen'), screen[u'number'] + 1) diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index dbcff42f3..d8bc8b3a6 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -355,7 +355,8 @@ class SongExportForm(OpenLPWizard): the path to *directoryLineEdit*. """ path = unicode(QtGui.QFileDialog.getExistingDirectory(self, - translate('SongsPlugin.ExportWizardForm', 'Select Destination Folder'), + translate('SongsPlugin.ExportWizardForm', + 'Select Destination Folder'), SettingsManager.get_last_dir(self.plugin.settingsSection, 1), options=QtGui.QFileDialog.ShowDirsOnly)) SettingsManager.set_last_dir(self.plugin.settingsSection, path, 1) From 50818a63119c476c68b7ec8bdea2f4ac6538a3dd Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 4 Mar 2011 16:21:50 +0100 Subject: [PATCH 032/124] set 'Show Display' visible after changing the monitor setup --- openlp/core/ui/slidecontroller.py | 38 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8d612676b..f6d0e98f5 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -32,7 +32,7 @@ from PyQt4.phonon import Phonon from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \ ItemCapabilities, translate -from openlp.core.lib.ui import UiStrings, shortcut_action +from openlp.core.lib.ui import icon_action, UiStrings, shortcut_action from openlp.core.ui import HideMode, MainDisplay log = logging.getLogger(__name__) @@ -146,34 +146,33 @@ class SlideController(QtGui.QWidget): u':/slides/slide_next.png', translate('OpenLP.SlideController', 'Move to next'), self.onSlideSelectedNext) + self.toolbar.addToolbarSeparator(u'Close Separator') if self.isLive: - self.toolbar.addToolbarSeparator(u'Close Separator') self.hideMenu = QtGui.QToolButton(self.toolbar) self.hideMenu.setText(translate('OpenLP.SlideController', 'Hide')) self.hideMenu.setPopupMode(QtGui.QToolButton.MenuButtonPopup) self.toolbar.addToolbarWidget(u'Hide Menu', self.hideMenu) self.hideMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Hide'), self.toolbar)) - self.blankScreen = QtGui.QAction(QtGui.QIcon( - u':/slides/slide_blank.png'), - translate('OpenLP.SlideController', - 'Blank Screen'), self.hideMenu) - self.blankScreen.setCheckable(True) - self.themeScreen = QtGui.QAction(QtGui.QIcon( - u':/slides/slide_theme.png'), - translate('OpenLP.SlideController', - 'Blank to Theme'), self.hideMenu) - self.themeScreen.setCheckable(True) + self.blankScreen = icon_action(self.hideMenu, u'Blank Screen', + u':/slides/slide_blank.png', False) + self.blankScreen.setText( + translate('OpenLP.SlideController', 'Blank Screen')) + self.themeScreen = icon_action(self.hideMenu, u'Blank Theme', + u':/slides/slide_theme.png', False) + self.themeScreen.setText( + translate('OpenLP.SlideController', 'Blank to Theme')) + self.desktopScreen = icon_action(self.hideMenu, u'Desktop Screen', + u':/slides/slide_desktop.png', False) + self.desktopScreen.setText( + translate('OpenLP.SlideController', 'Show Desktop')) + self.desktopScreen.setVisible(False) self.hideMenu.setDefaultAction(self.blankScreen) self.hideMenu.menu().addAction(self.blankScreen) self.hideMenu.menu().addAction(self.themeScreen) + self.hideMenu.menu().addAction(self.desktopScreen) if self.screens.display_count > 1: - self.desktopScreen = QtGui.QAction(QtGui.QIcon( - u':/slides/slide_desktop.png'), - translate('OpenLP.SlideController', - 'Show Desktop'), self.hideMenu) - self.hideMenu.menu().addAction(self.desktopScreen) - self.desktopScreen.setCheckable(True) + self.desktopScreen.setVisible(True) QtCore.QObject.connect(self.desktopScreen, QtCore.SIGNAL(u'triggered(bool)'), self.onHideDisplay) self.toolbar.addToolbarSeparator(u'Loop Separator') @@ -195,7 +194,6 @@ class SlideController(QtGui.QWidget): self.delaySpinBox.setToolTip(translate('OpenLP.SlideController', 'Delay between slides in seconds')) else: - self.toolbar.addToolbarSeparator(u'Close Separator') self.toolbar.addToolbarButton( # Does not need translating - control string. u'Go Live', u':/general/general_live.png', @@ -411,6 +409,8 @@ class SlideController(QtGui.QWidget): Settings dialog has changed the screen size of adjust output and screen previews. """ + if hasattr(self, u'desktopScreen'): + self.desktopScreen.setVisible(self.screens.display_count > 1) # rebuild display as screen size changed self.display = MainDisplay(self, self.screens, self.isLive) self.display.imageManager = self.parent.renderManager.image_manager From 9ae56fa75459cd236337a1caa05101b321d3265b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 4 Mar 2011 16:31:34 +0100 Subject: [PATCH 033/124] clean up --- openlp/core/ui/slidecontroller.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index f6d0e98f5..e93d9ff68 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -114,8 +114,7 @@ class SlideController(QtGui.QWidget): self.previewListWidget = SlideList(self) self.previewListWidget.setColumnCount(1) self.previewListWidget.horizontalHeader().setVisible(False) - self.previewListWidget.setColumnWidth( - 0, self.controller.width()) + self.previewListWidget.setColumnWidth(0, self.controller.width()) self.previewListWidget.isLive = self.isLive self.previewListWidget.setObjectName(u'PreviewListWidget') self.previewListWidget.setSelectionBehavior(1) @@ -166,15 +165,11 @@ class SlideController(QtGui.QWidget): u':/slides/slide_desktop.png', False) self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) - self.desktopScreen.setVisible(False) + self.desktopScreen.setVisible(self.screens.display_count > 1) self.hideMenu.setDefaultAction(self.blankScreen) self.hideMenu.menu().addAction(self.blankScreen) self.hideMenu.menu().addAction(self.themeScreen) self.hideMenu.menu().addAction(self.desktopScreen) - if self.screens.display_count > 1: - self.desktopScreen.setVisible(True) - QtCore.QObject.connect(self.desktopScreen, - QtCore.SIGNAL(u'triggered(bool)'), self.onHideDisplay) self.toolbar.addToolbarSeparator(u'Loop Separator') self.toolbar.addToolbarButton( # Does not need translating - control string. @@ -224,8 +219,7 @@ class SlideController(QtGui.QWidget): if self.isLive: # Build the Song Toolbar self.songMenu = QtGui.QToolButton(self.toolbar) - self.songMenu.setText(translate('OpenLP.SlideController', - 'Go To')) + self.songMenu.setText(translate('OpenLP.SlideController', 'Go To')) self.songMenu.setPopupMode(QtGui.QToolButton.InstantPopup) self.toolbar.addToolbarWidget(u'Song Menu', self.songMenu) self.songMenu.setMenu(QtGui.QMenu( @@ -301,6 +295,8 @@ class SlideController(QtGui.QWidget): QtCore.SIGNAL(u'triggered(bool)'), self.onBlankDisplay) QtCore.QObject.connect(self.themeScreen, QtCore.SIGNAL(u'triggered(bool)'), self.onThemeDisplay) + QtCore.QObject.connect(self.desktopScreen, + QtCore.SIGNAL(u'triggered(bool)'), self.onHideDisplay) QtCore.QObject.connect(self.volumeSlider, QtCore.SIGNAL(u'sliderReleased()'), self.mediaVolume) QtCore.QObject.connect(Receiver.get_receiver(), @@ -409,7 +405,7 @@ class SlideController(QtGui.QWidget): Settings dialog has changed the screen size of adjust output and screen previews. """ - if hasattr(self, u'desktopScreen'): + if self.isLive: self.desktopScreen.setVisible(self.screens.display_count > 1) # rebuild display as screen size changed self.display = MainDisplay(self, self.screens, self.isLive) From 128a24a57b06e49d5b9eabf3e4bee31c6ef87667 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 4 Mar 2011 17:21:50 +0000 Subject: [PATCH 034/124] Update comments --- openlp/core/ui/slidecontroller.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 8d526706d..8c6b06c82 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -624,6 +624,7 @@ class SlideController(QtGui.QWidget): self.parent.renderManager.width, self.parent.renderManager.height) else: + # If current slide set background to image if framenumber == slideno: self.serviceItem.bg_image_bytes = \ self.parent.renderManager.image_manager. \ @@ -861,6 +862,8 @@ class SlideController(QtGui.QWidget): frame = self.display.text(toDisplay) else: frame = self.display.image(toDisplay) + # reset the store used to display first image + self.serviceItem.bg_image_bytes = None self.slidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) self.selectedRow = row Receiver.send_message(u'slidecontroller_%s_changed' % self.typePrefix, From f4e723ed1ccbc6b757a8a5f0c4ce130e5adadcd8 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 4 Mar 2011 18:31:23 +0100 Subject: [PATCH 035/124] fixed songs, without footer --- openlp/core/lib/serviceitem.py | 9 ++++----- openlp/plugins/bibles/lib/mediaitem.py | 14 ++++---------- openlp/plugins/songs/lib/mediaitem.py | 10 ++++------ 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 9f2d0ff37..2dd87f6f5 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -88,8 +88,8 @@ class ServiceItem(object): self.audit = u'' self.items = [] self.iconic_representation = None - self.raw_footer = None - self.foot_text = None + self.raw_footer = [] + self.foot_text = u'' self.theme = None self.service_item_type = None self._raw_frames = [] @@ -183,9 +183,8 @@ class ServiceItem(object): else: log.error(u'Invalid value renderer :%s' % self.service_item_type) self.title = clean_tags(self.title) - self.foot_text = None - if self.raw_footer: - self.foot_text = u'
'.join(self.raw_footer) + self.foot_text = \ + u'
'.join([footer for footer in self.raw_footer if footer]) def add_from_image(self, path, title): """ diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index ab7897828..d63dfab0a 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -635,7 +635,6 @@ class BibleMediaItem(MediaManagerItem): bible_text = u'' old_item = None old_chapter = -1 - raw_footer = [] raw_slides = [] raw_title = [] for item in items: @@ -656,13 +655,13 @@ class BibleMediaItem(MediaManagerItem): second_text = self._decodeQtObject(bitem, 'second_text') verse_text = self.formatVerse(old_chapter, chapter, verse) footer = u'%s (%s %s %s)' % (book, version, copyright, permissions) - if footer not in raw_footer: - raw_footer.append(footer) + if footer not in service_item.raw_footer: + service_item.raw_footer.append(footer) if second_bible: footer = u'%s (%s %s %s)' % (book, second_version, second_copyright, second_permissions) - if footer not in raw_footer: - raw_footer.append(footer) + if footer not in service_item.raw_footer: + service_item.raw_footer.append(footer) bible_text = u'%s %s\n\n%s %s' % (verse_text, text, verse_text, second_text) raw_slides.append(bible_text.rstrip()) @@ -706,11 +705,6 @@ class BibleMediaItem(MediaManagerItem): service_item.theme = self.settings.bible_theme for slide in raw_slides: service_item.add_from_text(slide[:30], slide) - if service_item.raw_footer: - for footer in raw_footer: - service_item.raw_footer.append(footer) - else: - service_item.raw_footer = raw_footer return True def formatTitle(self, start_item, old_item): diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index d29e18c1d..37a404daa 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -330,7 +330,6 @@ class SongMediaItem(MediaManagerItem): def generateSlideData(self, service_item, item=None, xmlVersion=False): log.debug(u'generateSlideData (%s:%s)' % (service_item, item)) - raw_footer = [] item_id = self._getIdOfItemToGenerate(item, self.remoteSong) service_item.add_capability(ItemCapabilities.AllowsEdit) service_item.add_capability(ItemCapabilities.AllowsPreview) @@ -392,16 +391,15 @@ class SongMediaItem(MediaManagerItem): service_item.add_from_text(slide[:30], unicode(slide)) service_item.title = song.title author_list = [unicode(author.display_name) for author in song.authors] - raw_footer.append(song.title) - raw_footer.append(u', '.join(author_list)) - raw_footer.append(song.copyright) + service_item.raw_footer.append(song.title) + service_item.raw_footer.append(u', '.join(author_list)) + service_item.raw_footer.append(song.copyright) if QtCore.QSettings().value(u'general/ccli number', QtCore.QVariant(u'')).toString(): - raw_footer.append(unicode( + service_item.raw_footer.append(unicode( translate('SongsPlugin.MediaItem', 'CCLI License: ') + QtCore.QSettings().value(u'general/ccli number', QtCore.QVariant(u'')).toString())) - service_item.raw_footer = raw_footer service_item.audit = [ song.title, author_list, song.copyright, unicode(song.ccli_number) ] From 2af3c7af7cbd3d5b3d316175fd368af4ee0c4054 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 4 Mar 2011 18:46:59 +0100 Subject: [PATCH 036/124] hide 'Add Tool...' entry --- openlp/core/ui/mainwindow.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index b9de8a12e..7b9a520bc 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -206,7 +206,7 @@ class Ui_MainWindow(object): mainWindow.actionList.add_action(self.ModeDefaultItem, u'View Mode') self.ModeSetupItem = checkable_action(mainWindow, u'ModeLiveItem') mainWindow.actionList.add_action(self.ModeSetupItem, u'View Mode') - self.ModeLiveItem = checkable_action(mainWindow, u'ModeLiveItem') + self.ModeLiveItem = checkable_action(mainWindow, u'ModeLiveItem', True) mainWindow.actionList.add_action(self.ModeLiveItem, u'View Mode') self.ModeGroup = QtGui.QActionGroup(mainWindow) self.ModeGroup.addAction(self.ModeDefaultItem) @@ -215,6 +215,8 @@ class Ui_MainWindow(object): self.ModeDefaultItem.setChecked(True) self.ToolsAddToolItem = icon_action(mainWindow, u'ToolsAddToolItem', u':/tools/tools_add.png') + # Hide the entry, as it does not have any functionality yet. + self.ToolsAddToolItem.setVisible(False) mainWindow.actionList.add_action(self.ToolsAddToolItem, u'Tools') self.ToolsOpenDataFolder = icon_action(mainWindow, u'ToolsOpenDataFolder', u':/general/general_open.png') @@ -225,19 +227,17 @@ class Ui_MainWindow(object): u'Settings') # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, - u'AutoLanguageItem') + u'AutoLanguageItem', LanguageManager.auto_language) mainWindow.actionList.add_action(self.AutoLanguageItem, u'Settings') self.LanguageGroup = QtGui.QActionGroup(mainWindow) self.LanguageGroup.setExclusive(True) self.LanguageGroup.setObjectName(u'LanguageGroup') - self.AutoLanguageItem.setChecked(LanguageManager.auto_language) self.LanguageGroup.setDisabled(LanguageManager.auto_language) qmList = LanguageManager.get_qm_list() savedLanguage = LanguageManager.get_language() for key in sorted(qmList.keys()): - languageItem = checkable_action(mainWindow, key) - if qmList[key] == savedLanguage: - languageItem.setChecked(True) + languageItem = checkable_action( + mainWindow, key, qmList[key] == savedLanguage) add_actions(self.LanguageGroup, [languageItem]) self.SettingsShortcutsItem = icon_action(mainWindow, u'SettingsShortcutsItem', From 4927bad4d2e244da4418ba32cb021c86ff0cdd4f Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 4 Mar 2011 18:22:44 +0000 Subject: [PATCH 037/124] Start updates --- openlp/core/ui/firsttimeform.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index baf4624d6..7fcf4596b 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -27,13 +27,15 @@ import ConfigParser import io import logging +import os +import urllib from PyQt4 import QtCore, QtGui from firsttimewizard import Ui_FirstTimeWizard -from openlp.core.lib import translate, PluginStatus -from openlp.core.utils import get_web_page +from openlp.core.lib import translate, PluginStatus, check_directory_exists +from openlp.core.utils import get_web_page, AppLocation log = logging.getLogger(__name__) @@ -46,8 +48,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): def __init__(self, parent=None): # check to see if we have web access + self.web = u'http://openlp.org/files/frw/' self.config = ConfigParser.ConfigParser() - self.webAccess = get_web_page(u'http://openlp.org/files/frw/download.cfg') + self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg')) if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) @@ -123,14 +126,27 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__pluginStatus(self.alertCheckBox, u'alerts/status') listIterator = QtGui.QTreeWidgetItemIterator(self.selectionTreeWidget) + songsDestination = AppLocation.get_section_data_path(u'songs') + check_directory_exists(songsDestination) + bibleDestination = AppLocation.get_section_data_path(u'bibles') + check_directory_exists(bibleDestination) + themeDestination = AppLocation.get_section_data_path(u'themes') + check_directory_exists(themeDestination) while listIterator.value(): type = listIterator.value().parent() if listIterator.value().parent(): if listIterator.value().checkState(0) == QtCore.Qt.Checked: # Install - print type, listIterator.value().data(0, QtCore.Qt.UserRole).toString() - #if type == u'Themes': - #self.themeSelectionComboBox.addItem(listIterator.value().text()) + if unicode(type.text(0)) == u'Bibles': + theme = unicode(listIterator.value().data(0, + QtCore.Qt.UserRole).toString()) + urllib.urlretrieve(u'%s%s' % (self.web, theme), + os.path.join(bibleDestination, theme)) + if unicode(type.text(0)) == u'Themes': + theme = unicode(listIterator.value().data(0, + QtCore.Qt.UserRole).toString()) + urllib.urlretrieve(u'%s%s' % (self.web, theme), + os.path.join(themeDestination, theme)) listIterator += 1 return QtGui.QWizard.accept(self) From c34d82fd1069a543fc308e9ecfbdd03b4516385c Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 4 Mar 2011 23:02:43 +0200 Subject: [PATCH 038/124] Updated the credits. --- openlp/core/ui/aboutdialog.py | 84 ++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 11 deletions(-) diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index c3ab5a00f..b1b319c6b 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -108,19 +108,40 @@ class Ui_AboutDialog(object): self.aboutNotebook.indexOf(self.aboutTab), UiStrings.About) lead = u'Raoul "superfly" Snyman' developers = [u'Tim "TRB143" Bentley', u'Jonathan "gushie" Corwin', - u'Michael "cocooncrash" Gorven', u'Scott "sguerrieri" Guerrieri', - u'Raoul "superfly" Snyman', u'Martin "mijiti" Thompson', - u'Jon "Meths" Tibble<'] - contributors = [u'Meinert "m2j" Jordan', u'Andreas "googol" Preikschat', + u'Michael "cocooncrash" Gorven', + u'Andreas "googol" Preikschat', u'Raoul "superfly" Snyman', + u'Martin "mijiti" Thompson', u'Jon "Meths" Tibble'] + contributors = [u'Scott "sguerrieri" Guerrieri', + u'Meinert "m2j" Jordan', u'Armin "orangeshirt" K\xf6hler', u'Christian "crichter" Richter', u'Philip "Phill" Ridout', - u'Maikel Stuivenberg', u'Carsten "catini" Tingaard', - u'Frode "frodus" Woldsund'] - testers = [u'Philip "Phill" Ridout', u'Wesley "wrst" Stout (lead)'] - packagers = [u'Thomas "tabthorpe" Abthorpe (FreeBSD)', + u'Jeffrey "whydoubt" Smith', u'Maikel Stuivenberg', + u'Carsten "catini" Tingaard', u'Frode "frodus" Woldsund'] + testers = [u'Philip "Phill" Ridout', u'Wesley "wrst" Stout', + u'John "jseagull1" Cegalis (lead)'] + packagers = ['Thomas "tabthorpe" Abthorpe (FreeBSD)', u'Tim "TRB143" Bentley (Fedora)', u'Michael "cocooncrash" Gorven (Ubuntu)', u'Matthias "matthub" Hub (Mac OS X)', u'Raoul "superfly" Snyman (Windows, Ubuntu)'] + translators = { + u'af': [u'Johan "nuvolari" Mynhardt'], + u'de': [u'Patrick "madmuffin" Br\xfcckner', + u'Meinert "m2j" Jordan', + u'Andreas "googol" Preikschat', + u'Christian "crichter" Richter'], + u'en_GB': [u'Tim "TRB143" Bentley', u'Jonathan "gushie" Corwin'], + u'en_ZA': [u'Raoul "superfly" Snyman'], + u'et': [u'Mattias "mahfiaz" P\xf5ldaru'], + u'fr': [u'Stephan\xe9 "stbrunner" Brunner'], + u'hu': [u'Gyuris Gellért'], + u'ja': [u'Kunio "Kunio" Nakamaru'], + u'nb': [u'Atle "pendlaren" Weibell', u'Frode "frodus" Woldsund'], + u'nl': [u'Arjen "typovar" van Voorst'], + u'pt_BR': [u'Rafael "rafaellerm" Lerm'], + u'ru': [u'Sergey "ratz" Ratz'] + } + documentors = [u'Wesley "wrst" Stout', + u'John "jseagull1" Cegalis (lead)'] self.creditsTextEdit.setPlainText(unicode(translate('OpenLP.AboutForm', 'Project Lead\n' ' %s\n' @@ -137,6 +158,35 @@ class Ui_AboutDialog(object): 'Packagers\n' ' %s\n' '\n' + 'Translators\n' + ' Afrikaans (af)\n' + ' %s\n' + ' German (de)\n' + ' %s\n' + ' English, United Kingdom (en_GB)\n' + ' %s\n' + ' English, South Africa (en_ZA)\n' + ' %s\n' + ' Estonian (et)\n' + ' %s\n' + ' French (fr)\n' + ' %s\n' + ' Hungarian (hu)\n' + ' %s\n' + ' Japanese (ja)\n' + ' %s\n' + ' Norwegian Bokm\xe5l (nb)\n' + ' %s\n' + ' Dutch (nl)\n' + ' %s\n' + ' Portuguese, Brazil (pt_BR)\n' + ' %s\n' + ' Russian (ru)\n' + ' %s\n' + '\n' + 'Documentation\n' + ' %s\n' + '\n' 'Built With\n' ' Python: http://www.python.org/\n' ' Qt4: http://qt.nokia.com/\n' @@ -155,7 +205,19 @@ class Ui_AboutDialog(object): ' bring this software to you for free because\n' ' He has set us free.')) % (lead, u'\n '.join(developers), u'\n '.join(contributors), u'\n '.join(testers), - u'\n '.join(packagers))) + u'\n '.join(packagers), u'\n '.join(translators[u'af']), + u'\n '.join(translators[u'de']), + u'\n '.join(translators[u'en_GB']), + u'\n '.join(translators[u'en_ZA']), + u'\n '.join(translators[u'et']), + u'\n '.join(translators[u'fr']), + u'\n '.join(translators[u'hu']), + u'\n '.join(translators[u'ja']), + u'\n '.join(translators[u'nb']), + u'\n '.join(translators[u'nl']), + u'\n '.join(translators[u'pt_BR']), + u'\n '.join(translators[u'ru']), + u'\n '.join(documentors))) self.aboutNotebook.setTabText( self.aboutNotebook.indexOf(self.creditsTab), translate('OpenLP.AboutForm', 'Credits')) @@ -176,7 +238,7 @@ class Ui_AboutDialog(object): 'but WITHOUT ANY WARRANTY; without even the implied warranty of ' 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below ' 'for more details.') - gpltext = ('GNU GENERAL PUBLIC LICENSE\n' + gpltext = 'GNU GENERAL PUBLIC LICENSE\n' 'Version 2, June 1991\n' '\n' 'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 ' @@ -546,7 +608,7 @@ class Ui_AboutDialog(object): '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.') + 'instead of this License.' self.licenseTextEdit.setPlainText(u'%s\n\n%s\n\n%s\n\n\n%s' % (copyright, licence, disclaimer, gpltext)) self.aboutNotebook.setTabText( From dea4a2e8ac325149f44612dd95dec5c008c7061c Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 4 Mar 2011 23:05:36 +0200 Subject: [PATCH 039/124] Updated translations. --- openlp/plugins/bibles/lib/manager.py | 2 +- openlp/plugins/bibles/lib/mediaitem.py | 7 +- resources/i18n/af.ts | 525 ++++++++------------ resources/i18n/de.ts | 369 ++++---------- resources/i18n/en.ts | 301 ++++-------- resources/i18n/en_GB.ts | 307 ++++-------- resources/i18n/en_ZA.ts | 342 ++++--------- resources/i18n/es.ts | 308 ++++-------- resources/i18n/et.ts | 654 +++++++++---------------- resources/i18n/fr.ts | 341 ++++--------- resources/i18n/hu.ts | 310 ++++-------- resources/i18n/id.ts | 310 ++++-------- resources/i18n/ja.ts | 356 ++++---------- resources/i18n/ko.ts | 307 ++++-------- resources/i18n/nb.ts | 307 ++++-------- resources/i18n/nl.ts | 362 ++++---------- resources/i18n/pt_BR.ts | 354 ++++--------- resources/i18n/ru.ts | 336 ++++--------- resources/i18n/sv.ts | 310 ++++-------- 19 files changed, 1808 insertions(+), 4300 deletions(-) diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 344d11584..dcbad3e63 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -250,7 +250,7 @@ class BibleManager(object): if not bible: Receiver.send_message(u'openlp_information_message', { u'title': translate('BiblesPlugin.BibleManager', - 'No Bibles available'), + 'No Bibles Available'), u'message': translate('BiblesPlugin.BibleManager', 'There are no Bibles currently installed. Please use the ' 'Import Wizard to install one or more Bibles.') diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index ab7897828..581b98fc5 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -346,7 +346,7 @@ class BibleMediaItem(MediaManagerItem): self.advancedSearchButton.setEnabled(False) critical_error_message_box( message=translate('BiblePlugin.MediaItem', - 'Bible not fully loaded')) + 'Bible not fully loaded.')) else: self.advancedSearchButton.setEnabled(True) self.adjustComboBox(1, self.chapter_count, self.advancedFromChapter) @@ -539,8 +539,9 @@ class BibleMediaItem(MediaManagerItem): self.displayResults(bible, second_bible) elif critical_error_message_box( message=translate('BiblePlugin.MediaItem', - 'You cannot combine single and second bible verses. Do you ' - 'want to delete your search results and start a new search?'), + 'You cannot combine single and dual Bible verse search results. ' + 'Do you want to delete your search results and start a new ' + 'search?'), parent=self, question=True) == QtGui.QMessageBox.Yes: self.listView.clear() self.displayResults(bible, second_bible) diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index 1e72b6c1f..ba3503439 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -7,23 +7,22 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? Daar is nie 'n parameter gegee om te vervang nie. -Gaan steeds voort? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - Die attent teks bevat nie '<>' nie. Gaan steeds voort? No Parameter Found - + Geen Parameter Gevind nie No Placeholder Found + Geen Plekhouer Gevind nie + + + + The alert text does not contain '<>'. +Do you want to continue anyway? @@ -48,7 +47,7 @@ Gaan steeds voort? Alert name singular - + Waarskuwing @@ -108,7 +107,7 @@ Gaan steeds voort? &Parameter: - + &Parameter: @@ -157,28 +156,28 @@ Gaan steeds voort? Importing testaments... %s - + Testament invoer... %s Importing testaments... done. - + Testament invoer... voltooi. Importing books... %s - + Boek invoer... %s Importing verses from %s... Importing verses from <book name>... - + Vers invoer vanaf %s... Importing verses... done. - + Vers invoer... voltooi. @@ -186,34 +185,34 @@ Gaan steeds voort? Download Error - + Aflaai Fout Parse Error - + Ontleed Fout There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + Daar was 'n probleem om die vers seleksie af te laai. Gaan die Internet konneksie na en as hierdie probleem voortduur, oorweeg dit asseblief om 'n gogga te rapporteer. There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - + Daar was 'n probleem om die vers seleksie te onttrek. As hierdie probleem voortduur, oorweeg dit asseblief om 'n gogga te rapporteer. BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -232,37 +231,37 @@ Gaan steeds voort? Import a Bible - + Voer 'n Bybel in Add a new Bible - + Voeg 'n nuwe Bybel by Edit the selected Bible - + Redigeer geselekteerde Bybel Delete the selected Bible - + Wis die geselekteerde Bybel uit Preview the selected Bible - + Sien voorskou van die geselekteerde Bybel Send the selected Bible live - + Stuur die geselekteerde Bybel regstreeks Add the selected Bible to the service - + Voeg die geselekteerde Bybel by die diens @@ -290,7 +289,7 @@ Gaan steeds voort? No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - + Geen passende boek kon in hierdie Bybel gevind word nie. Gaan na dat die naam van die boek korrek gespel is. @@ -303,28 +302,24 @@ Gaan steeds voort? Web Bible cannot be used - + Web Bybel kan nie gebruik word nie Text Search is not available with Web Bibles. - + Teks Soektog is nie beskikbaar met Web Bybels nie. You did not enter a search keyword. You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - - - No Bibles available - + Daar is nie 'n soek sleutelwoord ingevoer nie. +Vir 'n soektog wat alle sleutelwoorde bevat, skei die woorde deur middel van 'n spasie. Vir 'n soektog wat een van die sleutelwoorde bevat, skei die woorde deur middel van 'n komma. There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + Huidig is daar geen Bybels geïnstalleer nie. Gebruik asseblief die Invoer Gids om een of meer Bybels te installeer. @@ -336,6 +331,18 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + Die skrif-verwysing word óf nie deur OpenLP ondersteun nie óf is ongeldig. Maak asseblief seker die verwysing voldoen aan een van die volgende patrone: + +Boek Hoofstuk +Boek Hoofstuk-Hoofstuk +Boek Hoofstuk:Vers-Vers +Boek Hoofstuk:Vers-Vers, Vers-Vers +Boek Hoofstuk:Vers-Vers, Hoofstuk:Vers-Vers +Boek Hoofstuk:Vers-Hoofstuk:Vers + + + + No Bibles Available @@ -411,7 +418,7 @@ Veranderinge affekteer nie verse wat reeds in die diens is nie. Display second Bible verses - + Vertoon tweede Bybel se verse @@ -539,58 +546,59 @@ Veranderinge affekteer nie verse wat reeds in die diens is nie. Starting Registering bible... - + Begin Bybel registrasie... Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. - + Geregistreerde bybel. Neem kennis daarvan dat verse op aanvraag +afgelaai word en dus word 'n Internet konneksie benodig. Permissions: - + Toestemming: CSV File - + KGW Lêer openlp.org 1.x bible - + openlp.org 1.x bybel Bibleserver - + Bybelbediener Bible file: - + Bybel lêer: Testaments file: - + Testament lêer: Books file: - + Boeke lêer: Verses file: - + Verse lêer: You have not specified a testaments file. Do you want to proceed with the import? - + Daar is nie 'n testament lêer gespesifiser nie. Gaan voort met die invoer? @@ -653,12 +661,12 @@ demand and thus an internet connection is required. Second: - + Tweede: Scripture Reference - + Skrif Verwysing @@ -667,7 +675,7 @@ demand and thus an internet connection is required. Importing %s %s... Importing <book name> <chapter>... - + Invoer %s %s... @@ -675,13 +683,13 @@ demand and thus an internet connection is required. Detecting encoding (this may take a few minutes)... - + Bepaal enkodering (dit mag 'n paar minuute neem)... Importing %s %s... Importing <book name> <chapter>... - + Invoer %s %s... @@ -773,42 +781,42 @@ demand and thus an internet connection is required. Import a Custom - + Voer 'n Persoonlike nutsprogram in Load a new Custom - + Laai 'n nuwe Aanpassing Add a new Custom - + Voeg 'n nuwe Aanpassing by Edit the selected Custom - + Redigeer die geselekteerde Aanpassing Delete the selected Custom - + Wis die geselekteerde Aanpassing uit Preview the selected Custom - + Sien voorskou van die geselekteerde Aanpassing Send the selected Custom live - + Stuur die geselekteerde Aanpassing regstreeks Add the selected Custom to the service - + Voeg die geselekteerde Aanpassing by die diens @@ -820,13 +828,13 @@ demand and thus an internet connection is required. Customs name plural - + Aanpassings Custom container title - Aanpas + Aanpasing @@ -839,37 +847,37 @@ demand and thus an internet connection is required. Load a new Image - + Laai 'n nuwe Beeld Add a new Image - + Voeg 'n nuwe Beeld by Edit the selected Image - + Redigeer die geselekteerde Beeld Delete the selected Image - + Wis die geselekteerde Beeld uit Preview the selected Image - + Sien voorskou van die geselekteerde Beeld Send the selected Image live - + Stuur die geselekteerde Beeld regstreeks Add the selected Image to the service - + Voeg die geselekteerde Beeld by die diens @@ -881,13 +889,13 @@ demand and thus an internet connection is required. Images name plural - + Beelde Images container title - + Beelde @@ -895,7 +903,7 @@ demand and thus an internet connection is required. Select Attachment - + Selekteer Aanhangsel @@ -918,23 +926,24 @@ demand and thus an internet connection is required. Missing Image(s) - + Vermisde Beeld(e) The following image(s) no longer exist: %s - + Die volgende beeld(e) bestaan nie meer nie: %s The following image(s) no longer exist: %s Do you want to add the other images anyway? - + Die volgende beeld(e) bestaan nie meer nie: %s +Voeg steeds die ander beelde by? There was a problem replacing your background, the image file "%s" no longer exists. - + Daar was 'n probleem om die agtergrond te vervang. Die beeld lêer "%s" bestaan ine meer nie. @@ -947,37 +956,37 @@ Do you want to add the other images anyway? Load a new Media - + Laai nuwe Media Add a new Media - + Voeg nuwe Media by Edit the selected Media - + Redigeer die geselekteerde Media Delete the selected Media - + Wis die geselekteerde Media uit Preview the selected Media - + Sien voorskou van die geselekteerde Media Send the selected Media live - + Stuur die geselekteerde Media regstreeks Add the selected Media to the service - + Voeg die geselekteerde Media by die diens @@ -1013,12 +1022,12 @@ Do you want to add the other images anyway? Missing Media File - + Vermisde Media Lêer The file %s no longer exists. - + Die lêer %s bestaan nie meer nie. @@ -1028,12 +1037,12 @@ Do you want to add the other images anyway? There was a problem replacing your background, the media file "%s" no longer exists. - + Daar was 'n probleem om die agtergrond te vervang. Die media lêer "%s" bestaan nie meer nie. Videos (%s);;Audio (%s);;%s (*) - + Videos (%s);;Audio (%s);;%s (*) @@ -1041,12 +1050,12 @@ Do you want to add the other images anyway? Media Display - + Media Vertoning Use Phonon for video playback - + Gebruik Phonon om Video terug te speel @@ -1077,17 +1086,17 @@ Vind meer uit oor OpenLP: http://openlp.org/ OpenLP is geskryf en word onderhou deur vrywilligers. As u graag wil sien dat meer Christelike sagteware geskryf word, oorweeg dit asseblief om by te dra deur die knoppie hieronder te gebruik. - + Credits Krediete - + License Lisensie - + Contribute Dra By @@ -1097,38 +1106,21 @@ OpenLP is geskryf en word onderhou deur vrywilligers. As u graag wil sien dat me bou %s - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1150,140 +1142,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1307,32 +1180,32 @@ This General Public License does not permit incorporating your program into prop Double-click to send items straight to live - + Dubbel-kliek om die items regstreeks te stuur Expand new service items on creation - + Sit die nuwe diens items uit wanneer dit geskep word Enable application exit confirmation - + Stel die program in staat om die uitgang bevestiging te vertoon Mouse Cursor - + Muis Wyser Hide mouse cursor when over display window - + Steek die muis wyser weg wanneer dit oor die vertoon venster beweeg Default Image - + Verstek Beeld @@ -1342,12 +1215,12 @@ This General Public License does not permit incorporating your program into prop Image file: - + Beeld lêer: Open File - + Maak Lêer oop @@ -1355,52 +1228,52 @@ This General Public License does not permit incorporating your program into prop Edit Selection - + Redigeer Seleksie Update - + Opdatteer Description - + Beskrywing Tag - + Etiket Start tag - + Begin etiket End tag - + Eind-etiket Default - + Verstek Tag id - + Etiket id Start Html - + Begin Html End Html - + Eind-Html @@ -1408,17 +1281,17 @@ This General Public License does not permit incorporating your program into prop Update Error - + Opdateer Fout Tag "n" already defined. - + Etiket "n" alreeds gedefinieër. Tag %s already defined. - + Etiket %s alreeds gedefinieër. @@ -1436,18 +1309,19 @@ This General Public License does not permit incorporating your program into prop Send E-Mail - + Stuur E-pos Save to File - + Stoor na Lêer Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Voer asseblief 'n beskrywing in van waarmee jy besig was toe de probleem ontstaan het +(Mimimum 20 karrakters) @@ -1537,127 +1411,117 @@ Version: %s OpenLP.GeneralTab - + General Algemeen - + Monitors Monitors - + Select monitor for output display: Selekteer monitor vir uitgaande vertoning: - + Display if a single screen Vertoon as dit 'n enkel skerm is - + Application Startup Applikasie Aanskakel - + Show blank screen warning Vertoon leë skerm waarskuwing - + Automatically open the last service Maak vanself die laaste diens oop - + Show the splash screen Wys die spatsel skerm - + Application Settings Program Verstellings - + Prompt to save before starting a new service Vra om te stoor voordat 'n nuwe diens begin word - + Automatically preview next item in service Wys voorskou van volgende item in diens automaties - + Slide loop delay: Skyfie herhaal vertraging: - + sec sek - + CCLI Details CCLI Inligting - + SongSelect username: SongSelect gebruikersnaam: - + SongSelect password: SongSelect wagwoord: - + Display Position Vertoon Posisie - + X X - + Y Y - + Height Hoogte - + Width Wydte - + Override display position Oorskryf vertoon posisie - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2045,17 +1909,17 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. OpenLP Weergawe is Opdateer - + OpenLP Main Display Blanked OpenLP Hoof Vertoning Blanko - + The Main Display has been blanked out Die Hoof Skerm is afgeskakel - + Default Theme: %s Verstek Tema: %s @@ -2071,12 +1935,12 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2268,6 +2132,19 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -2423,7 +2300,7 @@ Die inhoud enkodering is nie UTF-8 nie. Open File - + Maak Lêer oop @@ -4323,7 +4200,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4408,24 +4285,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index ff91b3c5b..c27517bd9 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? Sie haben keinen Parameter angegeben, der ersetzt werden könnte. -Möchten Sie trotzdem fortfahren? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - Der Hinweistext enthält kein '<>'. Möchten Sie trotzdem fortfahren? @@ -26,6 +19,12 @@ Möchten Sie trotzdem fortfahren? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -207,14 +206,14 @@ Möchten Sie trotzdem fortfahren? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - Verse aus Vergleichsübersetzungen können nicht mit Versen einzelner Übersetzungen kombiniert werden. Möchten Sie die Suchergebnisse löschen und eine neue Suche starten? + + Bible not fully loaded. + - - Bible not fully loaded - Die Bibelübersetzung ist unvollständig. + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -317,11 +316,6 @@ You can separate different keywords by a space to search for all of your keyword Es wurde kein Suchbegriff eingegeben. Um nach mehreren Begriffen gleichzeitig zu suchen, müssen die Begriffe durch ein Leerzeichen getrennt sein. Alternative Suchbegriffe müssen per Komma getrennt sein. - - - No Bibles available - Keine Übersetzung verfügbar - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -339,6 +333,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1081,17 +1080,17 @@ Erkunden Sie OpenLP: http://openlp.org/ OpenLP wird von freiwiligen Helfern programmiert und gewartet. Wenn Sie sich mehr freie christliche Programme wünschen, ermutigen wir Sie, sich doch sich zu beteiligen und den Knopf weiter unten nutzen. - + Credits Danksagungen - + License Lizenz - + Contribute Mitmachen @@ -1101,38 +1100,21 @@ OpenLP wird von freiwiligen Helfern programmiert und gewartet. Wenn Sie sich meh build %s - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1151,195 +1133,25 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. - Projektleitung - Raoul »superfly« Snyman - -Entwickler - Tim »TRB143« Bentley - Jonathan »gushie« Corwin - Michael »cocooncrash« Gorven - Scott »sguerrieri« Guerrieri - Raoul »superfly« Snyman - Martin »mijiti« Thompson - Jon »Meths« Tibble - -Mitwirkende - Meinert »m2j« Jordan - Andreas »googol« Preikschat - Christian »crichter« Richter - Philip »Phill« Ridout - Maikel Stuivenberg - Carsten »catini« Tingaard - Frode »frodus« Woldsund - -Tester - Philip »Phill« Ridout - Wesley »wrst« Stout (lead) - -Packetierer - Thomas »tabthorpe« Abthorpe (FreeBSD) - Tim »TRB143« Bentley (Fedora) - Michael »cocooncrash« Gorven (Ubuntu) - Matthias »matthub« Hub (Mac OS X) - Raoul »superfly« Snyman (Windows, Ubuntu) - -Erstellt mit - Python: http://www.python.org/ - Qt4: http://qt.nokia.com/ - PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro - Oxygen Icons: http://oxygen-icons.org/ - -Schlusswort - »Denn Gott hat der Welt seine Liebe - dadurch gezeigt, dass er seinen einzigen - Sohn für sie hergab, damit jeder, der an - ihn glaubt, das ewige Leben hat und nicht - verloren geht.« -- Johannes 3,16 - - Als Letztes, aber nicht zuletzt, geht unser - Dank an Gott, unseren Vater, dafür, dass er - uns seinen Sohn gesandt hat, der am Kreuz - für uns gestorben ist und uns so von der - Sünde befreite. - Wir veröffentlichen dieses Programm frei, - weil er uns befreit hat. + - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. - +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + @@ -1594,127 +1406,117 @@ Version: %s OpenLP.GeneralTab - + General Allgemein - + Monitors Bildschirme - + Select monitor for output display: Projektionsbildschirm: - + Display if a single screen Anzeige bei nur einem Bildschirm - + Application Startup Programmstart - + Show blank screen warning Warnung wenn Projektion deaktiviert wurde - + Automatically open the last service Zuletzt benutzten Ablauf beim Start laden - + Show the splash screen Zeige den Startbildschirm - + Application Settings Anwendungseinstellungen - + Prompt to save before starting a new service Geänderte Abläufe nicht ungefragt ersetzen - + Automatically preview next item in service Vorschau des nächsten Ablaufelements - + Slide loop delay: Schleifenverzögerung: - + sec sek - + CCLI Details CCLI-Details - + SongSelect username: SongSelect Benutzername: - + SongSelect password: SongSelect Passwort: - + Display Position Anzeigeposition - + X X - + Y Y - + Height Höhe - + Width Breite - + Override display position Anzeigeposition überschreiben - - Screen - Bildschirm - - - - primary - Hauptbildschirm - - - + Check for updates to OpenLP Prüfe nach Aktualisierungen @@ -2093,17 +1895,17 @@ Version: %s Neue OpenLP Version verfügbar - + OpenLP Main Display Blanked Hauptbildschirm abgedunkelt - + The Main Display has been blanked out Die Projektion ist momentan nicht aktiv. - + Default Theme: %s Standarddesign: %s @@ -2128,12 +1930,12 @@ Sie können die letzte Version auf http://openlp.org abrufen. &Tastenkürzel einrichten... - + Close OpenLP OpenLP beenden - + Are you sure you want to close OpenLP? Sind Sie sicher, dass OpenLP beendet werden soll? @@ -2325,6 +2127,19 @@ Sie können die letzte Version auf http://openlp.org abrufen. Ablauf + + OpenLP.ScreenList + + + Screen + Bildschirm + + + + primary + Hauptbildschirm + + OpenLP.ServiceItemEditForm @@ -4381,7 +4196,7 @@ Usually you are fine with the preselected choice. Das Lied benötigt mindestens einen Author. - + You need to type some text in to the verse. Das Lied benötigt mindestens einen Vers. @@ -4466,26 +4281,26 @@ Usually you are fine with the preselected choice. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - - Selecte to Folder - - Check the songs you want to export. + + + You need to specify a directory. + + + + + Select Destination Folder + + SongsPlugin.ImportWizardForm diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index 22420089a..5742e0ded 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -8,12 +8,6 @@ Do you want to continue anyway? - - - The alert text does not contain '<>'. -Do want to continue anyway? - - No Parameter Found @@ -24,6 +18,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -205,13 +205,13 @@ Do want to continue anyway? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -314,11 +314,6 @@ Do want to continue anyway? You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - No Bibles available - - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -336,6 +331,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1068,17 +1068,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License - + Contribute @@ -1088,38 +1088,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1141,140 +1124,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1528,127 +1392,117 @@ Version: %s OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - + Slide loop delay: - + sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2034,17 +1888,17 @@ You can download the latest version from http://openlp.org/. - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2060,12 +1914,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2257,6 +2111,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4310,7 +4177,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4400,19 +4267,19 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... + + + You need to specify a directory. + + - Selecte to Folder + Select Destination Folder diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 23c05c546..563e816f2 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -8,12 +8,6 @@ Do you want to continue anyway? - - - The alert text does not contain '<>'. -Do want to continue anyway? - - No Parameter Found @@ -24,6 +18,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -205,13 +205,13 @@ Do want to continue anyway? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -314,11 +314,6 @@ Do want to continue anyway? You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - No Bibles available - - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -336,6 +331,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1075,17 +1075,17 @@ Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - + Credits Credits - + License Licence - + Contribute Contribute @@ -1095,38 +1095,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr build %s - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1148,140 +1131,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1535,127 +1399,117 @@ Version: %s OpenLP.GeneralTab - + General General - + Monitors Monitors - + Select monitor for output display: Select monitor for output display: - + Display if a single screen Display if a single screen - + Application Startup Application Startup - + Show blank screen warning Show blank screen warning - + Automatically open the last service Automatically open the last service - + Show the splash screen Show the splash screen - + Application Settings Application Settings - + Prompt to save before starting a new service Prompt to save before starting a new service - + Automatically preview next item in service Automatically preview next item in service - + Slide loop delay: Slide loop delay: - + sec sec - + CCLI Details CCLI Details - + SongSelect username: SongSelect username: - + SongSelect password: SongSelect password: - + Display Position Display Position - + X X - + Y Y - + Height Height - + Width Width - + Override display position Override display position - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2042,17 +1896,17 @@ You can download the latest version from http://openlp.org/. OpenLP Version Updated - + OpenLP Main Display Blanked OpenLP Main Display Blanked - + The Main Display has been blanked out The Main Display has been blanked out - + Default Theme: %s Default Theme: %s @@ -2068,12 +1922,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2265,6 +2119,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4320,7 +4187,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4405,24 +4272,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index 686c15aa5..f81e63308 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -6,23 +6,25 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? - - - - - The alert text does not contain '<>'. -Do want to continue anyway? - + You have not entered a parameter to be replaced. +Do you want to continue anyway? No Parameter Found - + No Parameter Found No Placeholder Found - + No Placeholder Found + + + + The alert text does not contain '<>'. +Do you want to continue anyway? + The alert text does not contain '<>'. +Do you want to continue anyway? @@ -106,7 +108,7 @@ Do want to continue anyway? &Parameter: - + &Parameter: @@ -155,28 +157,28 @@ Do want to continue anyway? Importing testaments... %s - + Importing testaments... %s Importing testaments... done. - + Importing testaments... done. Importing books... %s - + Importing books... %s Importing verses from %s... Importing verses from <book name>... - + Importing verses from %s... Importing verses... done. - + Importing verses... done. @@ -184,34 +186,34 @@ Do want to continue anyway? Download Error - + Download Error Parse Error - + Parse Error There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - + There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. + - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -288,7 +290,7 @@ Do want to continue anyway? No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - + No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. @@ -312,12 +314,8 @@ Do want to continue anyway? You did not enter a search keyword. You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - - - No Bibles available - + You did not enter a search keyword. +You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. @@ -336,6 +334,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1077,17 +1080,17 @@ Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - + Credits Credits - + License License - + Contribute Contribute @@ -1097,38 +1100,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr build %s - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1150,140 +1136,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1537,127 +1404,117 @@ Version: %s OpenLP.GeneralTab - + General General - + Monitors Monitors - + Select monitor for output display: Select monitor for output display: - + Display if a single screen Display if a single screen - + Application Startup Application Startup - + Show blank screen warning Show blank screen warning - + Automatically open the last service Automatically open the last service - + Show the splash screen Show the splash screen - + Application Settings Application Settings - + CCLI Details CCLI Details - + SongSelect username: SongSelect username: - + SongSelect password: SongSelect password: - + Display Position Display Position - + X X - + Y Y - + Height Height - + Width Width - + Override display position Override display position - + Prompt to save before starting a new service Prompt to save before starting a new service - + Automatically preview next item in service Automatically preview next item in service - + Slide loop delay: Slide loop delay: - + sec sec - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2036,17 +1893,17 @@ Version: %s OpenLP Version Updated - + OpenLP Main Display Blanked OpenLP Main Display Blanked - + The Main Display has been blanked out The Main Display has been blanked out - + Default Theme: %s Default Theme: %s @@ -2071,12 +1928,12 @@ You can download the latest version from http://openlp.org/. Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2268,6 +2125,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4323,7 +4193,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4408,24 +4278,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index 309caee7d..b566e734d 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? No ha ingresado un parámetro para reemplazarlo. -¿Desea continuar de todas maneras? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - El texto de alerta no contiene '<>'. ¿Desea continuar de todas maneras? @@ -26,6 +19,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -207,13 +206,13 @@ Do want to continue anyway? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -316,11 +315,6 @@ Do want to continue anyway? You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - No Bibles available - - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -338,6 +332,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1070,17 +1069,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits Créditos - + License Licencia - + Contribute Contribuir @@ -1090,38 +1089,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1143,140 +1125,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1530,127 +1393,117 @@ Version: %s OpenLP.GeneralTab - + General General - + Monitors Monitores - + Select monitor for output display: Seleccionar monitor para visualizar la salida: - + Display if a single screen - + Application Startup Inicio de la Aplicación - + Show blank screen warning Mostrar advertencia de pantalla en blanco - + Automatically open the last service Abrir automáticamente el último servicio - + Show the splash screen Mostrar pantalla de bienvenida - + Application Settings Configuración del Programa - + Prompt to save before starting a new service - + Automatically preview next item in service - + Slide loop delay: - + sec - + CCLI Details Detalles de CCLI - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2036,17 +1889,17 @@ You can download the latest version from http://openlp.org/. Versión de OpenLP Actualizada - + OpenLP Main Display Blanked Pantalla Principal de OpenLP en Blanco - + The Main Display has been blanked out La Pantalla Principal esta en negro - + Default Theme: %s @@ -2062,12 +1915,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2259,6 +2112,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4312,7 +4178,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4397,24 +4263,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index 2e28963da..25a486448 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -7,23 +7,22 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? Sa ei ole sisestanud parameetrit, mida asendada. -Kas tahad sellegipoolest jätkata? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - Teate tekst ei sisalda '<>' märke. -Kas tahad sellegipoolest jätkata? +Kas tahad sellegi poolest jätkata? No Parameter Found - + Parameetreid ei leitud No Placeholder Found + Kohahoidjat ei leitud + + + + The alert text does not contain '<>'. +Do you want to continue anyway? @@ -207,14 +206,14 @@ Kas tahad sellegipoolest jätkata? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - Ühe- ja kahekeelseid piiblisalme pole võimalik kombineerida. Kas sa tahad kustutada otsingutulemused ja alustada uut otsingut? + + Bible not fully loaded. + - - Bible not fully loaded - Piibel pole täielikult laaditud + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -317,11 +316,6 @@ You can separate different keywords by a space to search for all of your keyword Sa ei sisestanud otsingusõna. Sa võid eraldada võtmesõnad tühikuga, et otsida neid kõiki, või eraldada need komaga, et otsitaks ühte neist. - - - No Bibles available - Piibleid pole - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -337,6 +331,18 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + Salmiviide pole toetatud või on vigane. Veendu, et see vastab mõnele järgnevale mustrile: + +Raamat peatükk +Raamat peatükk-peatükk +Raamat peatükk:salm-salm +Raamat peatükk:salm-salm,salm-salm +Raamat peatükk:salm-salm,peatükk:salm-salm +Raamat peatükk:salm-peatükk:salm + + + + No Bibles Available @@ -660,7 +666,7 @@ vajadusel, seetõttu on vajalik internetiühendus. Scripture Reference - + Salmiviide @@ -1035,7 +1041,7 @@ Do you want to add the other images anyway? Videos (%s);;Audio (%s);;%s (*) - + Videod (%s);;Audio (%s);;%s (*) @@ -1062,17 +1068,17 @@ Do you want to add the other images anyway? OpenLP.AboutForm - + Credits Autorid - + License Litsents - + Contribute Aita kaasa @@ -1099,38 +1105,21 @@ OpenLP kohta võid lähemalt uurida aadressil: http://openlp.org/ OpenLP on kirjutatud vabatahtlike poolt. Kui sulle meeldiks näha rohkem kristlikku tarkvara, siis võid annetada, selleks klõpsa alumisele nupule. - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1149,190 +1138,24 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. - Projekti juht -Raoul "superfly" Snyman - -Arendajad -Tim "TRB143" Bentley -Jonathan "gushie" Corwin -Michael "cocooncrash" Gorven -Scott "sguerrieri" Guerrieri -Raoul "superfly" Snyman -Martin "mijiti" Thompson -Jon "Meths" Tibble - -Abilised -Meinert "m2j" Jordan -Andreas "googol" Preikschat -Christian "crichter" Richter -Philip "Phill" Ridout -Maikel Stuivenberg -Carsten "catini" Tingaard -Frode "frodus" Woldsund - -Testijad -Philip "Phill" Ridout -Wesley "wrst" Stout (lead) - -Pakendajad -Thomas "tabthorpe" Abthorpe (FreeBSD) -Tim "TRB143" Bentley (Fedora) -Michael "cocooncrash" Gorven (Ubuntu) -Matthias "matthub" Hub (Mac OS X) -Raoul "superfly" Snyman (Windows, Ubuntu) - -Kasutatud tehnoloogiad -Python: http://www.python.org/ -Qt4: http://qt.nokia.com/ -PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro -Oxygeni ikoonid: http://oxygen-icons.org/ - -Lõpptänu -"Sest nõnda on Jumal maailma armastanud, -et ta oma ainusündinud Poja on andnud, -et ükski, kes temasse usub, ei hukkuks, -vaid et tal oleks igavene elu. -- Johannese 3:16 - -Lõpuks suurim tänu kuulub Jumalale meie Isale, -kes saatis oma Poja ristile surema, et vabastada -meid patust. Me anname selle tarkvara sulle -tasuta, sest Tema on teinud meid vabaks. + - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1376,27 +1199,27 @@ This General Public License does not permit incorporating your program into prop Hide mouse cursor when over display window - + Ekraanil oleva akna kohal peidetakse hiirekursor Default Image - + Vaikimisi pilt Background color: - Taustavärvus: + Taustapilt: Image file: - + Pildifail: Open File - Faili avamine + Faili avamine @@ -1404,52 +1227,52 @@ This General Public License does not permit incorporating your program into prop Edit Selection - Valiku muutmine + Valiku muutmine Update - Uuenda + Uuenda Description - Kirjeldus + Kirjeldus Tag - Silt + Silt Start tag - Alustamise silt + Alustamise silt End tag - Lõpu silt + Lõpu silt Default - Vaikimisi + Vaikimisi Tag id - Sildi ID + Sildi ID Start Html - HTMLi algus + HTMLi algus End Html - HTMLi lõpp + HTMLi lõpp @@ -1614,127 +1437,117 @@ Version: %s OpenLP.GeneralTab - + General Üldine - + Monitors Monitorid - + Select monitor for output display: Vali väljundkuva ekraan: - + Display if a single screen Kuvatakse, kui on ainult üks ekraan - + Application Startup Rakenduse käivitumine - + Show blank screen warning Kuvatakse tühja ekraani hoiatust - + Automatically open the last service Automaatselt avatakse viimane teenistus - + Show the splash screen Käivitumisel kuvatakse logo - + Application Settings Rakenduse sätted - + Prompt to save before starting a new service Enne uue teenistuse alustamist küsitakse, kas salvestada avatud teenistus - + Automatically preview next item in service Järgmise teenistuse elemendi automaatne eelvaade - + Slide loop delay: Slaidi näitamise pikkus korduses: - + sec sek - + CCLI Details CCLI andmed - + SongSelect username: SongSelecti kasutajanimi: - + SongSelect password: SongSelecti parool: - + Display Position Kuva asukoht - + X X - + Y Y - + Height Kõrgus - + Width Laius - + Override display position Kuva asukoht määratakse jõuga - - Screen - Ekraan - - - - primary - peamine - - - + Check for updates to OpenLP OpenLP uuenduste kontrollimine @@ -2113,17 +1926,17 @@ Version: %s OpenLP uuendus - + OpenLP Main Display Blanked OpenLP peakuva on tühi - + The Main Display has been blanked out Peakuva on tühi - + Default Theme: %s Vaikimisi kujundus: %s @@ -2148,12 +1961,12 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/.&Kiirklahvide seadistamine... - + Close OpenLP OpenLP sulgemine - + Are you sure you want to close OpenLP? Kas oled kindel, et tahad OpenLP sulgeda? @@ -2170,17 +1983,17 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. &Configure Display Tags - + &Kuvasiltide seadistamine Open &Data Folder... - + Ava &andmete kataloog... Open the folder where songs, bibles and other data resides. - + Laulude, Piiblite ja muude andmete kataloogi avamine. @@ -2274,12 +2087,12 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. Fit Page - + Mahuta lehele Fit Width - + Mahuta laius @@ -2287,62 +2100,75 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. Options - + Valikud Close - + Sulge Copy - + Kopeeri Copy as HTML - + Kopeeri HTMLina Zoom In - + Suurendamine Zoom Out - + Vähendamine Zoom Original - + Originaalsuurus Other Options - + Muud valikud Include slide text if available - + Slaidi teksti, kui saadaval Include service item notes - + Teenistuse kirje märkmed Include play length of media items - + Meediakirjete pikkus Service Order Sheet - Teenistuse järjekord + Teenistuse järjekord + + + + OpenLP.ScreenList + + + Screen + Ekraan + + + + primary + peamine @@ -2545,22 +2371,22 @@ Sisu ei ole UTF-8 kodeeringus. &Start Time - + &Alguse aeg Show &Preview - + Näita &eelvaadet Show &Live - + Näita &ekraanil The current service has been modified. Would you like to save this service? - + Praegust teensitust on muudetud. Kas tahad selle teenistuse salvestada? @@ -2624,7 +2450,7 @@ Sisu ei ole UTF-8 kodeeringus. Alternate - + Muuda @@ -2738,32 +2564,32 @@ Sisu ei ole UTF-8 kodeeringus. Item Start Time - + Kirje alguse aeg Hours: - + Tundi: h - + h m - + m Minutes: - + Minutid: Seconds: - + Sekundit: @@ -2986,7 +2812,7 @@ Sisu kodeering ei ole UTF-8. OpenLP Themes (*.theme *.otz) - + OpenLP kujundused (*.theme *.otz) @@ -3305,388 +3131,388 @@ Sisu kodeering ei ole UTF-8. About - Programmist + Programmist &Add - &Lisa + &Lisa Advanced - Täpsem + Täpsem All Files - Kõik failid + Kõik failid Bottom - All + All Browse... - Lehitse... + Lehitse... Cancel - Loobu + Loobu CCLI number: - CCLI number: + CCLI number: Create a new service. - Uue teenistuse loomine. + Uue teenistuse loomine. &Edit - &Muuda + &Muuda Empty Field - + Tühi väli Export - + Ekspordi pt Abbreviated font pointsize unit - pt + pt Image - Pilt + Pilt Import - Impordi + Impordi Length %s - + Kestus %s Live - Ekraan + Ekraan Live Background Error - Ekraani tausta viga + Ekraani tausta viga Live Panel - + Ekraani paneel Load - Laadi + Laadi Middle - Keskel + Keskel New - Uus + Uus New Service - Uus teenistus + Uus teenistus New Theme - Uus kujundus + Uus kujundus No File Selected Singular - + Ühtegi faili pole valitud No Files Selected Plural - + Ühtegi faili pole valitud No Item Selected Singular - + Ühtegi elementi pole valitud No Items Selected Plural - Ühtegi elementi pole valitud + Ühtegi elementi pole valitud openlp.org 1.x - openlp.org 1.x + openlp.org 1.x OpenLP 2.0 - OpenLP 2.0 + OpenLP 2.0 Open Service - Teenistuse avamine + Teenistuse avamine Preview - Eelvaade + Eelvaade Preview Panel - + Eelvaate paneel Print Service Order - Teenistuse järjekorra printimine + Teenistuse järjekorra printimine Replace Background - Tausta asendamine + Tausta asendamine Replace Live Background - Ekraani tausta asendamine + Ekraani tausta asendamine Reset Background - Tausta lähtestamine + Tausta lähtestamine Reset Live Background - Ekraani tausta asendamine + Ekraani tausta asendamine s The abbreviated unit for seconds - s + s Save && Preview - Salvesta && eelvaatle + Salvesta && eelvaatle Search - Otsi + Otsi You must select an item to delete. - + Pead valima elemendi, mida tahad kustutada. You must select an item to edit. - Pead valima kirje, mida muuta. + Pead valima elemendi, mida tahad muuta. Save Service - + Teenistuse salvestamine Service - + Teenistus Start %s - + Algus %s Theme Singular - Kujundus + Kujundus Themes Plural - Kujundused + Kujundused Top - Üleval + Üleval Version - + Versioon &Vertical Align: - + &Vertikaaljoondus: Finished import. - Importimine lõpetatud. + Importimine lõpetatud. Format: - Vorming: + Vorming: Importing - Importimine + Importimine Importing "%s"... - "%s" importimine... + "%s" importimine... Select Import Source - Importimise allika valimine + Importimise allika valimine Select the import format and the location to import from. - + Vali importimise vorming ja asukoht, kust importida. The openlp.org 1.x importer has been disabled due to a missing Python module. If you want to use this importer, you will need to install the "python-sqlite" module. - openlp.org 1.x importija on ühe puuduva Pythoni mooduli pärast keelatud. Kui sa tahad seda importijat kasutada, pead paigaldama mooduli "python-sqlite". + openlp.org 1.x importija on ühe puuduva Pythoni mooduli pärast keelatud. Kui sa tahad seda importijat kasutada, pead paigaldama mooduli "python-sqlite". Open %s File - + %s faili avamine %p% - %p% + %p% Ready. - Valmis. + Valmis. Starting import... - Importimise alustamine... + Importimise alustamine... You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Pead määrama vähemalt ühe %s faili, millest importida. Welcome to the Bible Import Wizard - Teretulemast Piibli importimise nõustajasse + Tere tulemast Piibli importimise nõustajasse Welcome to the Song Export Wizard - + Tere tulemast laulude eksportimise nõustajasse Welcome to the Song Import Wizard - Tere tulemast laulude importimise nõustajasse + Tere tulemast laulude importimise nõustajasse Author Singular - + Autor Authors Plural - Autorid + Autorid © Copyright symbol. - © + © Song Book Singular - Laulik + Laulik Song Books Plural - Laulikud + Laulikud Song Maintenance - Laulude haldus + Laulude haldus Topic Singular - Teema + Teema Topics Plural - Teemad + Teemad @@ -3694,7 +3520,7 @@ Sisu kodeering ei ole UTF-8. Configure Display Tags - + Kuvasiltide seadistamine @@ -3821,7 +3647,7 @@ Sisu kodeering ei ole UTF-8. %s (unavailable) - + %s (pole saadaval) @@ -4177,7 +4003,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Exports songs using the export wizard. - + Eksportimise nõustaja abil laulude eksportimine. @@ -4404,7 +4230,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Pead lisama sellele laulule autori. - + You need to type some text in to the verse. Salm peab sisaldama teksti. @@ -4432,81 +4258,81 @@ Kodeering on vajalik märkide õige esitamise jaoks. Song Export Wizard - + Laulude eksportimise nõustaja This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + See nõustaja aitab laulud eksportida avatud ülistuslaulude vormingus OpenLyrics. Select Songs - + Laulude valimine Check the songs you want to export. - + Vali laulud, mida tahad eksportida. Uncheck All - + Eemalda märgistus Check All - + Märgi kõik Select Directory - + Kataloogi valimine Select the directory you want the songs to be saved. - + Vali kataloog, kuhu tahad laulud salvestada. Directory: - + Kataloog: Exporting - + Eksportimine Please wait while your songs are exported. - + Palun oota, kuni kõik laulud on eksporditud. You need to add at least one Song to export. - + Pead lisama vähemalt ühe laulu, mida tahad eksportida. No Save Location specified - - - - - You need to specified a directory to save the songs in. - + Salvestamise asukohta pole määratud Starting export... + Eksportimise alustamine... + + + + You need to specify a directory. - Selecte to Folder + Select Destination Folder @@ -4590,27 +4416,27 @@ Kodeering on vajalik märkide õige esitamise jaoks. You need to specify at least one document or presentation file to import from. - + Pead määrama vähemalt ühe dokumendi või esitluse faili, millest tahad importida. Songs Of Fellowship Song Files - + Songs Of Fellowship laulufailid SongBeamer Files - + SongBeameri failid SongShow Plus Song Files - + SongShow Plus laulufailid Foilpresenter Song Files - + Foilpresenteri laulufailid @@ -4666,7 +4492,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Exporting "%s"... - + "%s" eksportimine... @@ -4697,12 +4523,12 @@ Kodeering on vajalik märkide õige esitamise jaoks. Finished export. - + Eksportimine lõpetatud. Your song export failed. - + Laulude eksportimine nurjus. diff --git a/resources/i18n/fr.ts b/resources/i18n/fr.ts index dc809b571..298c3939b 100644 --- a/resources/i18n/fr.ts +++ b/resources/i18n/fr.ts @@ -8,12 +8,6 @@ Do you want to continue anyway? - - - The alert text does not contain '<>'. -Do want to continue anyway? - - No Parameter Found @@ -24,6 +18,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -206,13 +206,13 @@ Do want to continue anyway? BiblePlugin.MediaItem - Bible not fully loaded - Bible pas entièrement chargée + Bible not fully loaded. + - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - Vous ne pouvez pas combiner versets biblique unique et deuxième. Voulez-vous supprimer vos résultats de recherche ? + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -293,11 +293,6 @@ Do want to continue anyway? BiblesPlugin.BibleManager - - - No Bibles available - Pas de Bible trouvée - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -337,6 +332,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1072,38 +1072,41 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Credits + Crédits + + + + License + Licence + + + + Contribute + Contribuer + + + + build %s + + + + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1125,160 +1128,21 @@ Final Credit - - Credits - Crédits - - - - License - Licence - - - - Contribute - Contribuer - - - - build %s - - - - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1533,130 +1397,120 @@ Version: %s OpenLP.GeneralTab - + General Général - + Monitors Monitors - + Select monitor for output display: Select le moniteur pour la sortie d'affichage : - + Display if a single screen Affiche si il n'y a qu'un écran - + Application Startup Démarrage de l'application - + Show blank screen warning Affiche un écran noir d'avertissement - + Automatically open the last service Ouvre automatiquement le dernier service - + Show the splash screen Affiche l'écran de démarrage - + Check for updates to OpenLP Regarde s'il y a des mise à jours d'OpenLP - + Application Settings Préférence d'application - + Prompt to save before starting a new service Demande a sauver avant de commencer un nouveau service - + Automatically preview next item in service Prévisualise automatiquement le prochain élément de service - + Slide loop delay: Délais de boucle des diapositive : - + sec sec - + CCLI Details CCLI détails - + SongSelect username: Nom d'utilisateur SongSelect : - + SongSelect password: Mot de passe SongSelect : - + Display Position Position d'affichage - + X X - + Y Y - + Height Hauteur - + Width Largeur - + Override display position Surcharge la position d'affichage - - - Screen - Écran - - - - primary - primaire - OpenLP.LanguageManager @@ -2046,27 +1900,27 @@ Vous pouvez télécharger la dernière version depuis http://openlp.org/.Version d'OpenLP mis a jours - + OpenLP Main Display Blanked OpenLP affichage principale noirci - + The Main Display has been blanked out L'affichage principale a été noirci - + Close OpenLP Ferme OpenLP - + Are you sure you want to close OpenLP? Êtes vous sur de vouloir fermer OpenLP ? - + Default Theme: %s Thème par défaut : %s @@ -2264,6 +2118,19 @@ Vous pouvez télécharger la dernière version depuis http://openlp.org/. + + OpenLP.ScreenList + + + Screen + Écran + + + + primary + primaire + + OpenLP.ServiceItemEditForm @@ -4319,7 +4186,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4404,24 +4271,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 42cf9638e..4afa7c19e 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -8,13 +8,6 @@ Do you want to continue anyway? Nincs megadva a cserélendő paraméter. Folytatható? - - - The alert text does not contain '<>'. -Do want to continue anyway? - A figyelmeztető szöveg nem tartalmaz „<>” karaktereket. -Folytatható? - No Parameter Found @@ -25,6 +18,12 @@ Folytatható? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -206,13 +205,13 @@ Folytatható? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - Az egyes és a kettőzött bibliaversek nem kombinálhatók. Töröljük a keresési eredményt és kezdjünk egy újabbat? + + Bible not fully loaded. + - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -315,11 +314,6 @@ Folytatható? You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - No Bibles available - - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -337,6 +331,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1076,17 +1075,17 @@ Többet az OpenLP-ről: http://openlp.org/ Az OpenLP-t önkéntesek készítették és tartják karban. Ha szeretnél több keresztény számítógépes programot, fontold meg a részvételt az alábbi gomb igénybevételével. - + Credits Közreműködők - + License Licenc - + Contribute Részvétel @@ -1096,38 +1095,21 @@ Az OpenLP-t önkéntesek készítették és tartják karban. Ha szeretnél több - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1149,140 +1131,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1536,127 +1399,117 @@ Version: %s OpenLP.GeneralTab - + General Általános - + Monitors Monitorok - + Select monitor for output display: Válaszd ki a vetítési képernyőt: - + Display if a single screen Megjelenítés egy képernyő esetén - + Application Startup Alkalmazás indítása - + Show blank screen warning Figyelmeztetés megjelenítése a fekete képernyőről - + Automatically open the last service Utolsó szolgálat automatikus megnyitása - + Show the splash screen Indító képernyő megjelenítése - + Application Settings Alkalmazás beállítások - + Prompt to save before starting a new service Rákérdezés mentésre új szolgálat kezdése előtt - + Automatically preview next item in service Következő elem automatikus előnézete a szolgálatban - + Slide loop delay: Időzített diák késleltetése: - + sec mp - + CCLI Details CCLI részletek - + SongSelect username: SongSelect felhasználói név: - + SongSelect password: SongSelect jelszó: - + Display Position Megjelenítés pozíciója - + X - + Y - + Height Magasság - + Width Szélesség - + Override display position Megjelenítési pozíció felülírása - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2044,17 +1897,17 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.OpenLP verziófrissítés - + OpenLP Main Display Blanked Sötét OpenLP fő képernyő - + The Main Display has been blanked out A fő képernyő el lett sötétítve - + Default Theme: %s Alapértelmezett téma: %s @@ -2070,12 +1923,12 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.Magyar - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2267,6 +2120,19 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4322,7 +4188,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4407,24 +4273,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/id.ts b/resources/i18n/id.ts index e4476bbff..42fe9d877 100644 --- a/resources/i18n/id.ts +++ b/resources/i18n/id.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? Anda belum memasukkan parameter baru. -Tetap lanjutkan? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - Teks peringatan tidak mengandung '<>'. Tetap lanjutkan? @@ -26,6 +19,12 @@ Tetap lanjutkan? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -207,14 +206,14 @@ Tetap lanjutkan? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded - Alkitab belum termuat sepenuhnya + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -316,11 +315,6 @@ Tetap lanjutkan? You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - No Bibles available - Alkitab tidak tersedia - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -338,6 +332,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1071,17 +1070,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License - + Contribute @@ -1091,38 +1090,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1144,140 +1126,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1531,127 +1394,117 @@ Version: %s OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - + Slide loop delay: - + sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2037,17 +1890,17 @@ You can download the latest version from http://openlp.org/. - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2063,12 +1916,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2260,6 +2113,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4313,7 +4179,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4398,24 +4264,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/ja.ts b/resources/i18n/ja.ts index b175a2fef..f823d9599 100644 --- a/resources/i18n/ja.ts +++ b/resources/i18n/ja.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? 引数が入力されていません。 -続けますか? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - 警告文に「<>」が含まれていません。 続けますか? @@ -26,6 +19,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -207,14 +206,14 @@ Do want to continue anyway? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - 二つの訳を一つの礼拝項目に合わせる事はできません。検索結果を削除して、始めから検索しますか? + + Bible not fully loaded. + - - Bible not fully loaded - 聖書データは完全に読み込まれていません + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -317,11 +316,6 @@ You can separate different keywords by a space to search for all of your keyword 検索語句が入力されていません。 複数の語句をスペースで区切ると全てに該当する箇所を検索し、コンマ(,)で区切るといずれかに該当する箇所を検索します。 - - - No Bibles available - 利用可能な聖書データがありません - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -339,6 +333,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1078,17 +1077,17 @@ http://openlp.org/にて詳しくご紹介しております。 OpenLPは、ボランティアの手により開発保守されています。もっと多くのクリスチャンの手によるフリーのソフトウェア開発に興味がある方は、以下のボタンからどうぞ。 - + Credits 著作情報 - + License ライセンス - + Contribute 貢献する @@ -1098,38 +1097,21 @@ OpenLPは、ボランティアの手により開発保守されています。 ビルド %s - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1148,191 +1130,24 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. - プロジェクトリーダ - Raoul "superfly" Snyman - -開発 - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble - -貢献 - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund - -テスター - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) - -パッケージャ - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) - -開発環境 - Python: http://www.python.org/ - Qt4: http://qt.nokia.com/ - PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro - Oxygen Icons: http://oxygen-icons.org/ - -功績 - 神は、その独り子をお与えになったほどに、世を - 愛された。独り子を信じる者が一人も滅びないで、 - 永遠の命を得るためである。 - -- ヨハネによる福音書 3:16 - - 大事なことをひとつ言い残しましたが、功績は全て - 私たちの父なる神に帰します。神はひとり子を十字 - 架につけて殺し、私たちを罪から自由にしてくださ - いました。神が私たちを自由にしてくださったので、 - このソフトウェアも無償で配布します。 + - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1613,127 +1428,117 @@ Version: %s OpenLP.GeneralTab - + General 一般 - + Monitors モニタ - + Select monitor for output display: 画面出力に使用するスクリーン: - + Display if a single screen スクリーンが1つしかなくても表示する - + Application Startup アプリケーションの起動 - + Show blank screen warning 警告中には、ブランク画面を表示する - + Automatically open the last service 自動的に前回の礼拝を開く - + Show the splash screen スプラッシュスクリーンを表示 - + Application Settings アプリケーションの設定 - + Prompt to save before starting a new service 新しい礼拝を開く前に保存を確認する - + Automatically preview next item in service 自動的に次の項目をプレビューする - + Slide loop delay: スライド繰返の遅延: - + sec - + CCLI Details CCLI詳細 - + SongSelect username: SongSelect ユーザー名: - + SongSelect password: SongSelect パスワード: - + Display Position 表示位置 - + X - + Y - + Height - + Width - + Override display position 表示位置を変更する - - Screen - スクリーン - - - - primary - プライマリ - - - + Check for updates to OpenLP OpenLPのバージョン更新の確認 @@ -2121,17 +1926,17 @@ http://openlp.org/から最新版がダウンロード可能です。OpenLPのバージョンアップ完了 - + OpenLP Main Display Blanked OpenLPのプライマリディスプレイがブランクです - + The Main Display has been blanked out OpenLPのプライマリディスプレイがブランクになりました - + Default Theme: %s 既定テーマ @@ -2147,12 +1952,12 @@ http://openlp.org/から最新版がダウンロード可能です。ショートカットの設定(&S)... - + Close OpenLP OpenLPの終了 - + Are you sure you want to close OpenLP? 本当にOpenLPを終了してもよろしいですか? @@ -2344,6 +2149,19 @@ http://openlp.org/から最新版がダウンロード可能です。礼拝順序シート + + OpenLP.ScreenList + + + Screen + スクリーン + + + + primary + プライマリ + + OpenLP.ServiceItemEditForm @@ -4400,7 +4218,7 @@ The encoding is responsible for the correct character representation. アーティストを入力する必要があります。 - + You need to type some text in to the verse. バースにテキストを入力する必要があります。 @@ -4490,19 +4308,19 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... + + + You need to specify a directory. + + - Selecte to Folder + Select Destination Folder diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index df755520c..342f57095 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -8,12 +8,6 @@ Do you want to continue anyway? - - - The alert text does not contain '<>'. -Do want to continue anyway? - - No Parameter Found @@ -24,6 +18,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -205,13 +205,13 @@ Do want to continue anyway? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -314,11 +314,6 @@ Do want to continue anyway? You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - No Bibles available - - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -336,6 +331,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1069,17 +1069,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License - + Contribute @@ -1089,38 +1089,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1142,140 +1125,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1529,127 +1393,117 @@ Version: %s OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - + Slide loop delay: - + sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2035,17 +1889,17 @@ You can download the latest version from http://openlp.org/. - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2061,12 +1915,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2258,6 +2112,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4311,7 +4178,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4396,24 +4263,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index 55d7913b2..7f8f1efdb 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -8,12 +8,6 @@ Do you want to continue anyway? - - - The alert text does not contain '<>'. -Do want to continue anyway? - - No Parameter Found @@ -24,6 +18,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -205,13 +205,13 @@ Do want to continue anyway? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -314,11 +314,6 @@ Do want to continue anyway? You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. - - - No Bibles available - - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -336,6 +331,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1068,17 +1068,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License Lisens - + Contribute @@ -1088,38 +1088,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1141,140 +1124,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1528,127 +1392,117 @@ Version: %s OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: Velg hvilken skjerm som skal brukes til fremvisning: - + Display if a single screen - + Application Startup Programoppstart - + Show blank screen warning - + Automatically open the last service Åpne forrige møteplan automatisk - + Show the splash screen - + Application Settings Programinnstillinger - + Prompt to save before starting a new service - + Automatically preview next item in service - + Slide loop delay: - + sec - + CCLI Details CCLI-detaljer - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2034,17 +1888,17 @@ You can download the latest version from http://openlp.org/. OpenLP versjonen har blitt oppdatert - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2060,12 +1914,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2257,6 +2111,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4310,7 +4177,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4395,24 +4262,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/nl.ts b/resources/i18n/nl.ts index 602705b8a..a74f23af9 100644 --- a/resources/i18n/nl.ts +++ b/resources/i18n/nl.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? U heeft geen parameter opgegeven die vervangen moeten worden -Toch doorgaan? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - De waarschuwingstekst bevat geen '<>'. Toch doorgaan? @@ -26,6 +19,12 @@ Toch doorgaan? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -207,14 +206,14 @@ Toch doorgaan? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - Enkele en meerdere bijbelverzen kun je niet combineren. Wilt u deze zoekopdracht wissen en opnieuw beginnen? + + Bible not fully loaded. + - - Bible not fully loaded - Bijbel niet helemaal geladen + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -317,11 +316,6 @@ You can separate different keywords by a space to search for all of your keyword Geen zoekterm opgegeven. Woorden met een spatie ertussen betekent zoeken naar alle woorden, Woorden met een komma ertussen betekent zoeken naar de afzonderlijke woorden. - - - No Bibles available - Geen bijbelvertalingen beschikbaar - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -339,6 +333,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1080,17 +1079,17 @@ Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - + Credits Credits - + License Licentie - + Contribute Bijdragen @@ -1100,38 +1099,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr build %s - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1150,191 +1132,24 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. - Project Lead - Raoul "superfly" Snyman - -Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble - -Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund - -Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) - -Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) - -Built With - Python: http://www.python.org/ - Qt4: http://qt.nokia.com/ - PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro - Oxygen Icons: http://oxygen-icons.org/ - -Final Credit - "For God so loved the world that He gave - His one and only Son, so that whoever - believes in Him will not perish but inherit - eternal life." -- John 3:16 - - And last but not least, final credit goes to - God our Father, for sending His Son to die - on the cross, setting us free from sin. We - bring this software to you for free because - He has set us free. + - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1590,127 +1405,117 @@ Version: %s OpenLP.GeneralTab - + General Algemeen - + Monitors Beeldschermen - + Select monitor for output display: Projectiescherm: - + Display if a single screen Weergeven bij enkel scherm - + Application Startup Programma start - + Show blank screen warning Toon zwart scherm waarschuwing - + Automatically open the last service Automatisch laatste liturgie openen - + Show the splash screen Toon splash screen - + Application Settings Programma instellingen - + Prompt to save before starting a new service Waarschuw om werk op te slaan bij het beginnen van een nieuwe liturgie - + Automatically preview next item in service Automatisch volgend onderdeel van liturgie tonen - + Slide loop delay: Vertraging bij doorlopende diavoorstelling: - + sec sec - + CCLI Details CCLI-details - + SongSelect username: SongSelect gebruikersnaam: - + SongSelect password: SongSelect wachtwoord: - + Display Position Weergave positie - + X X - + Y Y - + Height Hoogte - + Width Breedte - + Override display position Overschrijf scherm positie - - Screen - Beeldscherm - - - - primary - primair scherm - - - + Check for updates to OpenLP @@ -2089,17 +1894,17 @@ Version: %s Nieuwe OpenLP versie beschikbaar - + OpenLP Main Display Blanked OpenLP projectie op zwart - + The Main Display has been blanked out Projectie is uitgeschakeld: scherm staat op zwart - + Default Theme: %s Standaardthema: %s @@ -2124,12 +1929,12 @@ U kunt de laatste versie op http://openlp.org/ downloaden. &Sneltoetsen instellen... - + Close OpenLP OpenLP afsluiten - + Are you sure you want to close OpenLP? OpenLP afsluiten? @@ -2321,6 +2126,19 @@ U kunt de laatste versie op http://openlp.org/ downloaden. + + OpenLP.ScreenList + + + Screen + Beeldscherm + + + + primary + primair scherm + + OpenLP.ServiceItemEditForm @@ -4379,7 +4197,7 @@ Meestal voldoet de suggestie van OpenLP. You need to have an author for this song. - + You need to type some text in to the verse. You need to type some text in to the verse. @@ -4464,24 +4282,24 @@ Meestal voldoet de suggestie van OpenLP. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index 7e3fabb0c..edbaf1963 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? Você não entrou com um parâmetro para ser substituído. -Ainda deseja continuar? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - O texto de alerta não contém '<>'. Ainda deseja continuar? @@ -26,6 +19,12 @@ Ainda deseja continuar? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -207,14 +206,14 @@ Ainda deseja continuar? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? + + Bible not fully loaded. - - Bible not fully loaded - A Bíblia não foi carregada completamente + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -317,11 +316,6 @@ You can separate different keywords by a space to search for all of your keyword Você não digitou uma palavra-chave de pesquisa. Você pode separar diferentes palavras-chave com um espaço para procurar por todas as palavras-chave e pode separá-las com uma vírgula para pesquisar por alguma delas. - - - No Bibles available - Nenhuma Bíblia disponível - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -339,6 +333,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1080,17 +1079,17 @@ Conheça mais sobre o OpenLP: http://openlp.org/ O OpenLP é escrito e mantido por voluntários. Se você gostaria de contribuir para mais softwares livres Cristãos serem produzidos, considere contribuir usando o botão abaixo. - + Credits Créditos - + License Licença - + Contribute Contribuir @@ -1100,38 +1099,21 @@ O OpenLP é escrito e mantido por voluntários. Se você gostaria de contribuir compilação %s - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1150,191 +1132,24 @@ Final Credit on the cross, setting us free from sin. We bring this software to you for free because He has set us free. - Coordenador do Projeto - Raoul "superfly" Snyman - -Desenvolvedores - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble - -Contribuidores - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund - -Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) - -Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) - -Construído com - Python: http://www.python.org/ - Qt4: http://qt.nokia.com/ - PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro - Oxygen Icons: http://oxygen-icons.org/ - -Crédito Final - "Porque Deus amou o mundo de tal maneira - que deu o seu Filho unigênito, - para que todo aquele que nele crê não pereça, - mas tenha a vida eterna". -- João 3:16 - - E por fim, mas não menos importante, o crédito final é de - Deus, nosso Pai, que enviou Seu Filho para morrer - na cruz, livrando-nos do pecado. Nós - disponibilizamos este software de forma livre porque - Ele nos libertou. + - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1617,127 +1432,117 @@ Agradecemos se for possível escrever seu relatório em inglês. OpenLP.GeneralTab - + General Geral - + Monitors Monitores - + Select monitor for output display: Selecione um monitor para exibição: - + Display if a single screen Exibir em caso de tela única - + Application Startup Inicialização da Aplicação - + Show blank screen warning Exibir alerta de tela em branco - + Automatically open the last service Abrir a última Lista de Exibição automaticamente - + Show the splash screen Exibir a tela inicial - + Application Settings Configurações da Aplicação - + Prompt to save before starting a new service Perguntar sobre salvamento antes de iniciar uma nova lista - + Automatically preview next item in service Pré-visualizar automaticamente o próximo item na Lista de Exibição - + Slide loop delay: Atraso no loop de slide: - + sec seg - + CCLI Details Detalhes de CCLI - + SongSelect username: Usuário SongSelect: - + SongSelect password: Senha do SongSelect: - + Display Position Posição do Display - + X X - + Y Y - + Height Altura - + Width Largura - + Override display position Modificar posição do display - - Screen - Tela - - - - primary - primário - - - + Check for updates to OpenLP Procurar por updates do OpenLP @@ -2125,17 +1930,17 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Versão do OpenLP Atualizada - + OpenLP Main Display Blanked Tela Principal do OpenLP em Branco - + The Main Display has been blanked out A Tela Principal foi apagada - + Default Theme: %s Tema padrão: %s @@ -2151,12 +1956,12 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Configurar &Atalhos... - + Close OpenLP Fechar o OpenLP - + Are you sure you want to close OpenLP? Você tem certeza de que quer fechar o OpenLP? @@ -2348,6 +2153,19 @@ Voce pode baixar a versão mais nova em http://openlp.org/. + + OpenLP.ScreenList + + + Screen + Tela + + + + primary + primário + + OpenLP.ServiceItemEditForm @@ -4408,7 +4226,7 @@ A codificação é responsável pela correta representação dos caracteres.Você precisa de um autor para esta música. - + You need to type some text in to the verse. Você precisa digitar algum texto na estrofe. @@ -4498,19 +4316,19 @@ A codificação é responsável pela correta representação dos caracteres.No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... + + + You need to specify a directory. + + - Selecte to Folder + Select Destination Folder diff --git a/resources/i18n/ru.ts b/resources/i18n/ru.ts index 8166067e5..c4de6684d 100644 --- a/resources/i18n/ru.ts +++ b/resources/i18n/ru.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? Вы не указали параметры для замены. -Все равно продолжить? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - Текст оповещения не содержит '<>'. Все равно продолжить? @@ -26,6 +19,12 @@ Do want to continue anyway? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -208,13 +207,13 @@ Do want to continue anyway? BiblePlugin.MediaItem - Bible not fully loaded - Библия была загружена не полностью + Bible not fully loaded. + - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - Вы не можете комбинировать единственный и воторой стихи Библии. Желаете удалить результаты и начать новый поиск? + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? + @@ -295,11 +294,6 @@ Do want to continue anyway? BiblesPlugin.BibleManager - - - No Bibles available - Библии недоступны - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -339,6 +333,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1072,38 +1071,41 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Credits + + + + + License + Лицензия + + + + Contribute + + + + + build %s + Билд %s + + + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1125,160 +1127,21 @@ Final Credit - - Credits - - - - - License - Лицензия - - - - Contribute - - - - - build %s - Билд %s - - - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1532,130 +1395,120 @@ Version: %s OpenLP.GeneralTab - + General - + Monitors - + Select monitor for output display: - + Display if a single screen - + Application Startup - + Show blank screen warning - + Automatically open the last service - + Show the splash screen - + Check for updates to OpenLP - + Application Settings - + Prompt to save before starting a new service - + Automatically preview next item in service - + Slide loop delay: - + sec - + CCLI Details - + SongSelect username: - + SongSelect password: - + Display Position - + X - + Y - + Height - + Width - + Override display position - - - Screen - - - - - primary - - OpenLP.LanguageManager @@ -2053,27 +1906,27 @@ You can download the latest version from http://openlp.org/. - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Close OpenLP - + Are you sure you want to close OpenLP? - + Default Theme: %s @@ -2261,6 +2114,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4314,7 +4180,7 @@ The encoding is responsible for the correct character representation. Этот сборник песен не существует. Хотите добавить его? - + You need to type some text in to the verse. Вы должны указать какой-то текст в этом куплете. @@ -4404,19 +4270,19 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... + + + You need to specify a directory. + + - Selecte to Folder + Select Destination Folder diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index 9b5f196f5..a0bb669e0 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -7,13 +7,6 @@ You have not entered a parameter to be replaced. Do you want to continue anyway? Du har inte angivit någon parameter som kan ersättas. -Vill du fortsätta ändå? - - - - The alert text does not contain '<>'. -Do want to continue anyway? - Larmtexten innehåller inget '<>'. Vill du fortsätta ändå? @@ -26,6 +19,12 @@ Vill du fortsätta ändå? No Placeholder Found + + + The alert text does not contain '<>'. +Do you want to continue anyway? + + AlertsPlugin @@ -207,13 +206,13 @@ Vill du fortsätta ändå? BiblePlugin.MediaItem - - You cannot combine single and second bible verses. Do you want to delete your search results and start a new search? - Du kan inte kombinera sökningar av verser med en och två biblar. Vill du ta bort ditt sökresultat och starta en ny sökning? + + Bible not fully loaded. + - - Bible not fully loaded + + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -317,11 +316,6 @@ You can separate different keywords by a space to search for all of your keyword Du angav inget sökord. Du kan ange flera sökord avskilda med mellanslag för att söka på alla sökord och du kan avskilja sökorden med kommatecken för att söka efter ett av sökorden. - - - No Bibles available - Ingen bibel tillgänglig - There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -339,6 +333,11 @@ Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse + + + No Bibles Available + + BiblesPlugin.BiblesTab @@ -1073,17 +1072,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits Lista över medverkande - + License Licens - + Contribute Bidra @@ -1093,38 +1092,21 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Project Lead - Raoul "superfly" Snyman + %s Developers - Tim "TRB143" Bentley - Jonathan "gushie" Corwin - Michael "cocooncrash" Gorven - Scott "sguerrieri" Guerrieri - Raoul "superfly" Snyman - Martin "mijiti" Thompson - Jon "Meths" Tibble + %s Contributors - Meinert "m2j" Jordan - Andreas "googol" Preikschat - Christian "crichter" Richter - Philip "Phill" Ridout - Maikel Stuivenberg - Carsten "catini" Tingaard - Frode "frodus" Woldsund + %s Testers - Philip "Phill" Ridout - Wesley "wrst" Stout (lead) + %s Packagers - Thomas "tabthorpe" Abthorpe (FreeBSD) - Tim "TRB143" Bentley (Fedora) - Michael "cocooncrash" Gorven (Ubuntu) - Matthias "matthub" Hub (Mac OS X) - Raoul "superfly" Snyman (Windows, Ubuntu) + %s Built With Python: http://www.python.org/ @@ -1146,140 +1128,21 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - -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; version 2 of the License. - -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 below for more details. - - -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. - -<one line to give the program's name and a brief idea of what it does.> -Copyright (C) <year> <name of author> - -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. - -<signature of Ty Coon>, 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. +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. @@ -1533,127 +1396,117 @@ Version: %s OpenLP.GeneralTab - + General Allmänt - + Monitors Skärmar - + Select monitor for output display: Välj skärm för utsignal: - + Display if a single screen - + Application Startup Programstart - + Show blank screen warning Visa varning vid tom skärm - + Automatically open the last service Öppna automatiskt den senaste planeringen - + Show the splash screen Visa startbilden - + Application Settings Programinställningar - + Prompt to save before starting a new service - + Automatically preview next item in service Automatiskt förhandsgranska nästa post i planeringen - + Slide loop delay: - + sec sekunder - + CCLI Details CCLI-detaljer - + SongSelect username: SongSelect användarnamn: - + SongSelect password: SongSelect lösenord: - + Display Position - + X X - + Y Y - + Height Höjd - + Width Bredd - + Override display position - - Screen - - - - - primary - - - - + Check for updates to OpenLP @@ -2039,17 +1892,17 @@ You can download the latest version from http://openlp.org/. OpenLP-versionen uppdaterad - + OpenLP Main Display Blanked OpenLPs huvuddisplay rensad - + The Main Display has been blanked out Huvuddisplayen har rensats - + Default Theme: %s Standardtema: %s @@ -2065,12 +1918,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2262,6 +2115,19 @@ You can download the latest version from http://openlp.org/. + + OpenLP.ScreenList + + + Screen + + + + + primary + + + OpenLP.ServiceItemEditForm @@ -4315,7 +4181,7 @@ The encoding is responsible for the correct character representation. - + You need to type some text in to the verse. @@ -4400,24 +4266,24 @@ The encoding is responsible for the correct character representation. No Save Location specified - - - You need to specified a directory to save the songs in. - - Starting export... - - Selecte to Folder + + Check the songs you want to export. - - Check the songs you want to export. + + You need to specify a directory. + + + + + Select Destination Folder From 95e951c758bc5f8d94edab2d795b808afbb6c83e Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 4 Mar 2011 23:09:08 +0200 Subject: [PATCH 040/124] Updated translations. --- openlp/plugins/bibles/forms/bibleimportform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/bibles/forms/bibleimportform.py b/openlp/plugins/bibles/forms/bibleimportform.py index 67996e158..f0d407f09 100644 --- a/openlp/plugins/bibles/forms/bibleimportform.py +++ b/openlp/plugins/bibles/forms/bibleimportform.py @@ -568,7 +568,7 @@ class BibleImportForm(OpenLPWizard): """ self.getFileName(WizardStrings.OpenTypeFile % UiStrings.OLPV1, self.openlp1FileEdit, u'%s (*.bible)' % - translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x bible')) + translate('BiblesPlugin.ImportWizardForm', 'openlp.org 1.x Bible Files')) def registerFields(self): """ From 8a7bbb3b8240d9d1a41b2392ac2c9cefffb39c8e Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 4 Mar 2011 23:19:00 +0200 Subject: [PATCH 041/124] Updated translations. --- resources/i18n/af.ts | 10 +++++----- resources/i18n/de.ts | 10 +++++----- resources/i18n/en.ts | 10 +++++----- resources/i18n/en_GB.ts | 10 +++++----- resources/i18n/en_ZA.ts | 29 ++++++++++++++++++----------- resources/i18n/es.ts | 10 +++++----- resources/i18n/et.ts | 10 +++++----- resources/i18n/fr.ts | 10 +++++----- resources/i18n/hu.ts | 10 +++++----- resources/i18n/id.ts | 10 +++++----- resources/i18n/ja.ts | 10 +++++----- resources/i18n/ko.ts | 10 +++++----- resources/i18n/nb.ts | 10 +++++----- resources/i18n/nl.ts | 10 +++++----- resources/i18n/pt_BR.ts | 10 +++++----- resources/i18n/ru.ts | 10 +++++----- resources/i18n/sv.ts | 10 +++++----- 17 files changed, 98 insertions(+), 91 deletions(-) diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index ba3503439..f9d3e7117 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -565,11 +565,6 @@ afgelaai word en dus word 'n Internet konneksie benodig. CSV File KGW Lêer - - - openlp.org 1.x bible - openlp.org 1.x bybel - Bibleserver @@ -600,6 +595,11 @@ afgelaai word en dus word 'n Internet konneksie benodig. You have not specified a testaments file. Do you want to proceed with the import? Daar is nie 'n testament lêer gespesifiser nie. Gaan voort met die invoer? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index c27517bd9..e3a09b405 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -559,11 +559,6 @@ Daher ist eine Verbindung zum Internet erforderlich. CSV File CSV Datei - - - openlp.org 1.x bible - openlp.org 1.x Bibel - Bibleserver @@ -594,6 +589,11 @@ Daher ist eine Verbindung zum Internet erforderlich. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index 5742e0ded..0dcfa3e8b 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -538,11 +538,6 @@ Changes do not affect verses already in the service. CSV File - - - openlp.org 1.x bible - - Starting Registering bible... @@ -589,6 +584,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 563e816f2..9f8f7f560 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -555,11 +555,6 @@ demand and thus an internet connection is required. CSV File - - - openlp.org 1.x bible - - Bibleserver @@ -590,6 +585,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index f81e63308..3b6dffb0d 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -209,12 +209,12 @@ Do you want to continue anyway? Bible not fully loaded. - + Bible not fully loaded. You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? @@ -320,7 +320,7 @@ You can separate different keywords by a space to search for all of your keyword There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. @@ -332,12 +332,19 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns: + +Book Chapter +Book Chapter-Chapter +Book Chapter:Verse-Verse +Book Chapter:Verse-Verse,Verse-Verse +Book Chapter:Verse-Verse,Chapter:Verse-Verse +Book Chapter:Verse-Chapter:Verse No Bibles Available - + No Bibles Available @@ -558,12 +565,7 @@ demand and thus an internet connection is required. CSV File - - - - - openlp.org 1.x bible - + CSV File @@ -595,6 +597,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index b566e734d..7db94baba 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -555,11 +555,6 @@ demand and thus an internet connection is required. CSV File - - - openlp.org 1.x bible - - Bibleserver @@ -590,6 +585,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index 25a486448..37b2170ab 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -565,11 +565,6 @@ vajadusel, seetõttu on vajalik internetiühendus. CSV File CSV fail - - - openlp.org 1.x bible - openlp.org 1.x Piibel - Bibleserver @@ -600,6 +595,11 @@ vajadusel, seetõttu on vajalik internetiühendus. You have not specified a testaments file. Do you want to proceed with the import? Sa pole määranud testamentide faili. Kas tahad importimisega jätkata? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/fr.ts b/resources/i18n/fr.ts index 298c3939b..0a58735f8 100644 --- a/resources/i18n/fr.ts +++ b/resources/i18n/fr.ts @@ -545,11 +545,6 @@ Les changement ne s'applique aux versets déjà un service. CSV File Fichier CSV - - - openlp.org 1.x bible - Bible openlp.org 1.x - Starting Registering bible... @@ -592,6 +587,11 @@ a la demande, une connexion Interner fiable est donc nécessaire. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 4afa7c19e..36d46c94c 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -555,11 +555,6 @@ demand and thus an internet connection is required. CSV File - - - openlp.org 1.x bible - - Bibleserver @@ -590,6 +585,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/id.ts b/resources/i18n/id.ts index 42fe9d877..8900300e6 100644 --- a/resources/i18n/id.ts +++ b/resources/i18n/id.ts @@ -540,11 +540,6 @@ Perubahan tidak akan mempengaruhi ayat yang kini tampil. CSV File - - - openlp.org 1.x bible - - Starting Registering bible... @@ -591,6 +586,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/ja.ts b/resources/i18n/ja.ts index f823d9599..4ea5843e4 100644 --- a/resources/i18n/ja.ts +++ b/resources/i18n/ja.ts @@ -556,11 +556,6 @@ demand and thus an internet connection is required. CSV File CSVファイル - - - openlp.org 1.x bible - - Bibleserver @@ -591,6 +586,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 342f57095..49645d279 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -555,11 +555,6 @@ demand and thus an internet connection is required. CSV File - - - openlp.org 1.x bible - - Bibleserver @@ -590,6 +585,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index 7f8f1efdb..5eea1673d 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -554,11 +554,6 @@ demand and thus an internet connection is required. CSV File - - - openlp.org 1.x bible - - Bibleserver @@ -589,6 +584,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/nl.ts b/resources/i18n/nl.ts index a74f23af9..75f10b76f 100644 --- a/resources/i18n/nl.ts +++ b/resources/i18n/nl.ts @@ -558,11 +558,6 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood CSV File CSV bestand - - - openlp.org 1.x bible - openlp.org 1.x bijbel - Bibleserver @@ -593,6 +588,11 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index edbaf1963..d12f18edc 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -558,11 +558,6 @@ com o uso, portanto uma conexão com a internet é necessária. CSV File Arquivo CSV - - - openlp.org 1.x bible - Bíblia do openlp.org 1.x - Bibleserver @@ -593,6 +588,11 @@ com o uso, portanto uma conexão com a internet é necessária. You have not specified a testaments file. Do you want to proceed with the import? Você não especificou um arquivo de Testamentos. Deseja prosseguir com a importação? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/ru.ts b/resources/i18n/ru.ts index c4de6684d..5780689e8 100644 --- a/resources/i18n/ru.ts +++ b/resources/i18n/ru.ts @@ -550,11 +550,6 @@ Changes do not affect verses already in the service. CSV File - - - openlp.org 1.x bible - - Starting Registering bible... @@ -591,6 +586,11 @@ demand and thus an internet connection is required. Verses file: + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index a0bb669e0..b421540fa 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -557,11 +557,6 @@ demand and thus an internet connection is required. CSV File CSV-fil - - - openlp.org 1.x bible - openlp.org 1.x bibel - Bibleserver @@ -592,6 +587,11 @@ demand and thus an internet connection is required. You have not specified a testaments file. Do you want to proceed with the import? + + + openlp.org 1.x Bible Files + + BiblesPlugin.MediaItem From f7e8d1a861a157ff4784f38385baffa675f00617 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 4 Mar 2011 23:39:31 +0200 Subject: [PATCH 042/124] Updated translations. --- openlp/core/ui/displaytagdialog.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/displaytagdialog.py b/openlp/core/ui/displaytagdialog.py index 2b6441e16..6a1d8ca2c 100644 --- a/openlp/core/ui/displaytagdialog.py +++ b/openlp/core/ui/displaytagdialog.py @@ -143,11 +143,11 @@ class Ui_DisplayTagDialog(object): self.tagTableWidget.horizontalHeaderItem(0).setText( translate('OpenLP.DisplayTagDialog', 'Description')) self.tagTableWidget.horizontalHeaderItem(1).setText( - translate('OpenLP.DisplayTagDialog', 'Tag id')) + translate('OpenLP.DisplayTagDialog', 'Tag Id')) self.tagTableWidget.horizontalHeaderItem(2).setText( - translate('OpenLP.DisplayTagDialog', 'Start Html')) + translate('OpenLP.DisplayTagDialog', 'Start HTML')) self.tagTableWidget.horizontalHeaderItem(3).setText( - translate('OpenLP.DisplayTagDialog', 'End Html')) + translate('OpenLP.DisplayTagDialog', 'End HTML')) self.tagTableWidget.setColumnWidth(0, 120) self.tagTableWidget.setColumnWidth(1, 40) self.tagTableWidget.setColumnWidth(2, 240) From fb1b2cc26898619cae0578831de06618cf361706 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 5 Mar 2011 10:44:13 +0200 Subject: [PATCH 043/124] Updated the credits. --- openlp/core/ui/aboutdialog.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index b1b319c6b..d973c5680 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -205,18 +205,18 @@ class Ui_AboutDialog(object): ' bring this software to you for free because\n' ' He has set us free.')) % (lead, u'\n '.join(developers), u'\n '.join(contributors), u'\n '.join(testers), - u'\n '.join(packagers), u'\n '.join(translators[u'af']), - u'\n '.join(translators[u'de']), - u'\n '.join(translators[u'en_GB']), - u'\n '.join(translators[u'en_ZA']), - u'\n '.join(translators[u'et']), - u'\n '.join(translators[u'fr']), - u'\n '.join(translators[u'hu']), - u'\n '.join(translators[u'ja']), - u'\n '.join(translators[u'nb']), - u'\n '.join(translators[u'nl']), - u'\n '.join(translators[u'pt_BR']), - u'\n '.join(translators[u'ru']), + u'\n '.join(packagers), u'\n '.join(translators[u'af']), + u'\n '.join(translators[u'de']), + u'\n '.join(translators[u'en_GB']), + u'\n '.join(translators[u'en_ZA']), + u'\n '.join(translators[u'et']), + u'\n '.join(translators[u'fr']), + u'\n '.join(translators[u'hu']), + u'\n '.join(translators[u'ja']), + u'\n '.join(translators[u'nb']), + u'\n '.join(translators[u'nl']), + u'\n '.join(translators[u'pt_BR']), + u'\n '.join(translators[u'ru']), u'\n '.join(documentors))) self.aboutNotebook.setTabText( self.aboutNotebook.indexOf(self.creditsTab), @@ -238,7 +238,7 @@ class Ui_AboutDialog(object): 'but WITHOUT ANY WARRANTY; without even the implied warranty of ' 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below ' 'for more details.') - gpltext = 'GNU GENERAL PUBLIC LICENSE\n' + gpltext = ('GNU GENERAL PUBLIC LICENSE\n' 'Version 2, June 1991\n' '\n' 'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 ' @@ -608,7 +608,7 @@ class Ui_AboutDialog(object): '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.' + 'instead of this License.') self.licenseTextEdit.setPlainText(u'%s\n\n%s\n\n%s\n\n\n%s' % (copyright, licence, disclaimer, gpltext)) self.aboutNotebook.setTabText( From cb661bf1ce912407247e649d4593024ec81ce18c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 5 Mar 2011 09:23:47 +0000 Subject: [PATCH 044/124] bibles and themes work --- openlp.pyw | 30 +++++++++-------- openlp/core/ui/firsttimeform.py | 54 ++++++++++++++++++++++--------- openlp/core/ui/firsttimewizard.py | 13 +++++--- openlp/core/ui/mainwindow.py | 5 ++- openlp/core/ui/thememanager.py | 18 +++++++++++ 5 files changed, 85 insertions(+), 35 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 650c00725..76c263ea5 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -151,7 +151,7 @@ class OpenLP(QtGui.QApplication): log.info(u'Openlp version %s' % app_version[u'version']) return app_version - def run(self, screens): + def run(self): """ Run the OpenLP application. """ @@ -167,6 +167,13 @@ class OpenLP(QtGui.QApplication): self.setOrganizationDomain(u'openlp.org') self.setApplicationName(u'OpenLP') self.setApplicationVersion(app_version[u'version']) + # Decide how many screens we have and their size + screens = ScreenList(self.desktop()) + # First time checks in settings + firstTime = QtCore.QSettings().value( + u'general/first time', QtCore.QVariant(True)).toBool() +# if firstTime: +# FirstTimeForm(screens).exec_() if os.name == u'nt': self.setStyleSheet(application_stylesheet) show_splash = QtCore.QSettings().value( @@ -178,7 +185,8 @@ class OpenLP(QtGui.QApplication): self.processEvents() # start the main app window self.appClipboard = self.clipboard() - self.mainWindow = MainWindow(screens, app_version, self.appClipboard) + self.mainWindow = MainWindow(screens, app_version, self.appClipboard, + firstTime) self.mainWindow.show() if show_splash: # now kill the splashscreen @@ -265,11 +273,11 @@ def main(): # Define the settings environment QtCore.QSettings(u'OpenLP', u'OpenLP') # First time checks in settings - if QtCore.QSettings().value( - u'general/first time', QtCore.QVariant(True)).toBool(): - if not FirstTimeLanguageForm().exec_(): - # if cancel then stop processing - sys.exit() +# if QtCore.QSettings().value( +# u'general/first time', QtCore.QVariant(True)).toBool(): +# if not FirstTimeLanguageForm().exec_(): +# # if cancel then stop processing +# sys.exit() if sys.platform == u'darwin': OpenLP.addLibraryPath(QtGui.QApplication.applicationDirPath() + "/qt4_plugins") @@ -277,15 +285,9 @@ def main(): language = LanguageManager.get_language() appTranslator = LanguageManager.get_translator(language) app.installTranslator(appTranslator) - # Decide how many screens we have and their size - screens = ScreenList(app.desktop()) - # First time checks in settings - if QtCore.QSettings().value( - u'general/first time', QtCore.QVariant(True)).toBool(): - FirstTimeForm(screens).exec_() if not options.no_error_form: sys.excepthook = app.hookException - sys.exit()#(app.run(screens)) + sys.exit(app.run()) if __name__ == u'__main__': """ diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 4c2c699b6..df21b93d5 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -34,7 +34,7 @@ from PyQt4 import QtCore, QtGui from firsttimewizard import Ui_FirstTimeWizard -from openlp.core.lib import translate, PluginStatus, check_directory_exists +from openlp.core.lib import translate, PluginStatus, check_directory_exists, Receiver from openlp.core.utils import get_web_page, AppLocation log = logging.getLogger(__name__) @@ -58,6 +58,17 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.setupUi(self) for screen in screens.get_screen_list(): self.displaySelectionComboBox.addItem(screen) + self.songsText = translate('OpenLP.FirstTimeWizard', 'Songs') + self.biblesText = translate('OpenLP.FirstTimeWizard', 'Bibles') + self.themesText = translate('OpenLP.FirstTimeWizard', 'Themes') + self.startUpdates = translate('OpenLP.FirstTimeWizard', + 'Starting Updates') + self.downloadSongs = unicode(translate('OpenLP.FirstTimeWizard', + 'Downloading Songs.')) + self.downloadBible = unicode(translate('OpenLP.FirstTimeWizard', + 'Downloading bible')) + self.downloadTheme = unicode(translate('OpenLP.FirstTimeWizard', + 'Downloading theme')) def exec_(self, edit=False): """ @@ -76,13 +87,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.internetGroupBox.setVisible(True) self.noInternetLabel.setVisible(False) treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, u'Songs') + treewidgetitem.setText(0, self.songsText) self.__loadChild(treewidgetitem, u'songs', u'languages', u'songs') treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, u'Bibles') + treewidgetitem.setText(0, self.biblesText) self.__loadChild(treewidgetitem, u'bibles', u'translations', u'bible') treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, u'Themes') + treewidgetitem.setText(0, self.themesText) self.__loadChild(treewidgetitem, u'themes', u'files', 'theme') else: self.internetGroupBox.setVisible(False) @@ -94,9 +105,11 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): for file in files: if file: child = QtGui.QTreeWidgetItem(tree) - child.setText(0, self.config.get(u'%s_%s' %(root, file), u'title')) + child.setText(0, self.config.get(u'%s_%s' + % (root, file), u'title')) child.setData(0, QtCore.Qt.UserRole, - QtCore.QVariant(self.config.get(u'%s_%s' %(root, file), u'filename'))) + QtCore.QVariant(self.config.get(u'%s_%s' + % (root, file), u'filename'))) child.setCheckState(0, QtCore.Qt.Unchecked) child.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) @@ -107,15 +120,18 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ wizardPage = self.page(id) if wizardPage == self.DefaultsPage: - listIterator = QtGui.QTreeWidgetItemIterator(self.selectionTreeWidget) + listIterator = QtGui.QTreeWidgetItemIterator( + self.selectionTreeWidget) while listIterator.value(): parent = listIterator.value().parent() - if parent and listIterator.value().checkState(0) == QtCore.Qt.Checked: - if unicode(parent.text(0)) == u'Themes': + if parent and listIterator.value().checkState(0) \ + == QtCore.Qt.Checked: + if unicode(parent.text(0)) == self.themesText: self.themeSelectionComboBox.addItem(listIterator.value().text(0)) listIterator += 1 def accept(self): + self.__updateMessage(self.startUpdates) self.__pluginStatus(self.songsCheckBox, u'songs/status') self.__pluginStatus(self.bibleCheckBox, u'bibles/status') self.__pluginStatus(self.presentationCheckBox, u'presentations/status') @@ -138,14 +154,18 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if listIterator.value().parent(): if listIterator.value().checkState(0) == QtCore.Qt.Checked: # Install - if unicode(type.text(0)) == u'Bibles': - theme = unicode(listIterator.value().data(0, - QtCore.Qt.UserRole).toString()) - urllib.urlretrieve(u'%s%s' % (self.web, theme), - os.path.join(bibleDestination, theme)) - if unicode(type.text(0)) == u'Themes': + if unicode(type.text(0)) == self.biblesText: + bible = unicode(listIterator.value().data(0, + QtCore.Qt.UserRole).toString()) + message = u'%s %s' % (self.downloadBible, bible) + self.__updateMessage(message) + urllib.urlretrieve(u'%s%s' % (self.web, bible), + os.path.join(bibleDestination, bible)) + if unicode(type.text(0)) == self.themesText: theme = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) + message = u'%s %s' % (self.downloadTheme, bible) + self.__updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, theme), os.path.join(themeDestination, theme)) listIterator += 1 @@ -155,3 +175,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): status = PluginStatus.Active if field.checkState() \ == QtCore.Qt.Checked else PluginStatus.Inactive QtCore.QSettings().setValue(tag, QtCore.QVariant(status)) + + def __updateMessage(self, text): + self.updateLabel.setText(text) + Receiver.send_message(u'openlp_process_events') diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 70805bfea..081ac9991 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -163,13 +163,16 @@ class Ui_FirstTimeWizard(object): QtGui.QComboBox.AdjustToContents) self.themeSelectionComboBox.setObjectName(u'themeSelectionComboBox') self.gridLayout.addWidget(self.themeSelectionComboBox, 1, 1, 1, 1) - self.label = QtGui.QLabel(self.DefaultsPage) - self.label.setGeometry(QtCore.QRect(40, 190, 471, 17)) - self.label.setObjectName(u'label') + self.messageLabel = QtGui.QLabel(self.DefaultsPage) + self.messageLabel.setGeometry(QtCore.QRect(60, 160, 471, 17)) + self.messageLabel.setObjectName(u'messageLabel') + self.updateLabel = QtGui.QLabel(self.DefaultsPage) + self.updateLabel.setGeometry(QtCore.QRect(60, 220, 351, 17)) + self.updateLabel.setObjectName(u'updateLabel') FirstTimeWizard.addPage(self.DefaultsPage) self.retranslateUi(FirstTimeWizard) - QtCore.QMetaObject.connectSlotsByName(OpenLP.FirstTimeWizard) + QtCore.QMetaObject.connectSlotsByName(FirstTimeWizard) def retranslateUi(self, FirstTimeWizard): FirstTimeWizard.setWindowTitle(translate( @@ -220,5 +223,5 @@ class Ui_FirstTimeWizard(object): 'Default output display')) self.themeSelectionLabel.setText(translate('OpenLP.FirstTimeWizard', 'Select the default Theme')) - self.label.setText(translate('OpenLP.FirstTimeWizard', + self.messageLabel.setText(translate('OpenLP.FirstTimeWizard', 'Press Finish to apply all you changes and start OpenLP')) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 7a67331ad..d7d6a89f9 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -461,7 +461,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): actionList = ActionList() - def __init__(self, screens, applicationVersion, clipboard): + def __init__(self, screens, applicationVersion, clipboard, firstTime): """ This constructor sets up the interface, the various managers, and the plugins. @@ -626,6 +626,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.MediaToolBox.setCurrentIndex(savedPlugin) self.settingsForm.postSetUp() Receiver.send_message(u'cursor_normal') + # Import themes if first time +# if firstTime: +# self.themeManagerContents.firstTime() def setAutoLanguage(self, value): self.LanguageGroup.setDisabled(value) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 0e04d7b46..407d0cfa8 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -145,6 +145,20 @@ class ThemeManager(QtGui.QWidget): # Last little bits of setting up self.configUpdated() + def firstTime(self): + """ + Import new themes downloaded by the first time wizard + """ + Receiver.send_message(u'cursor_busy') + encoding = get_filesystem_encoding() + files = SettingsManager.get_files(self.settingsSection, u'.otz') + for file in files: + file = os.path.join(self.path, file).encode(encoding) + self.unzipTheme(file, self.path) + delete_file(file) + self.loadThemes() + Receiver.send_message(u'cursor_normal') + def configUpdated(self, firstTime=False): """ Triggered when Config dialog is updated. @@ -370,6 +384,7 @@ class ThemeManager(QtGui.QWidget): 'Save Theme - (%s)')) % theme, SettingsManager.get_last_dir(self.settingsSection, 1)) path = unicode(path) + Receiver.send_message(u'cursor_busy') if path: SettingsManager.set_last_dir(self.settingsSection, path, 1) themePath = os.path.join(path, theme + u'.otz') @@ -395,6 +410,7 @@ class ThemeManager(QtGui.QWidget): finally: if zip: zip.close() + Receiver.send_message(u'cursor_normal') def onImportTheme(self): """ @@ -408,12 +424,14 @@ class ThemeManager(QtGui.QWidget): unicode(translate('OpenLP.ThemeManager', 'OpenLP Themes (*.theme *.otz)'))) log.info(u'New Themes %s', unicode(files)) + Receiver.send_message(u'cursor_busy') if files: for file in files: SettingsManager.set_last_dir( self.settingsSection, unicode(file)) self.unzipTheme(file, self.path) self.loadThemes() + Receiver.send_message(u'cursor_normal') def loadThemes(self): """ From 1e0ca83729d78355c3f86c88dc56d5f36246f232 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 5 Mar 2011 14:17:32 +0000 Subject: [PATCH 045/124] Open up again --- openlp.pyw | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 76c263ea5..ee5d9691a 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -172,8 +172,8 @@ class OpenLP(QtGui.QApplication): # First time checks in settings firstTime = QtCore.QSettings().value( u'general/first time', QtCore.QVariant(True)).toBool() -# if firstTime: -# FirstTimeForm(screens).exec_() + if firstTime: + FirstTimeForm(screens).exec_() if os.name == u'nt': self.setStyleSheet(application_stylesheet) show_splash = QtCore.QSettings().value( From 632c1f8ade6a577defc8f7a2e8a950dcf8f5cdb0 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 5 Mar 2011 19:38:33 +0100 Subject: [PATCH 046/124] display 'Show Desktop' even with one screen --- openlp/core/ui/maindisplay.py | 11 ++++++----- openlp/core/ui/slidecontroller.py | 33 +++++++++++++------------------ 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 5fd361268..47321eedf 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -319,7 +319,7 @@ class MainDisplay(DisplayWidget): Changes the volume of a running video """ log.debug(u'videoVolume %d' % volume) - vol = float(volume)/float(10) + vol = float(volume) / float(10) if self.phononActive: self.audio.setVolume(vol) else: @@ -335,7 +335,7 @@ class MainDisplay(DisplayWidget): # We are running a background theme self.override[u'theme'] = u'' self.override[u'video'] = True - vol = float(volume)/float(10) + vol = float(volume) / float(10) if isBackground or not self.usePhonon: js = u'show_video("init", "%s", %s, true); show_video("play");' % \ (videoPath.replace(u'\\', u'\\\\'), str(vol)) @@ -388,9 +388,10 @@ class MainDisplay(DisplayWidget): Receiver.send_message(u'openlp_process_events') # if was hidden keep it hidden if self.isLive: - self.setVisible(True) - if self.hideMode: - self.hideDisplay(self.hideMode) + if self.hideMode: + self.hideDisplay(self.hideMode) + else: + self.setVisible(True) preview = QtGui.QImage(self.screen[u'size'].width(), self.screen[u'size'].height(), QtGui.QImage.Format_ARGB32_Premultiplied) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 89d7ac162..0caa83e72 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -165,7 +165,6 @@ class SlideController(QtGui.QWidget): u':/slides/slide_desktop.png', False) self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) - self.desktopScreen.setVisible(self.screens.display_count > 1) self.hideMenu.setDefaultAction(self.blankScreen) self.hideMenu.menu().addAction(self.blankScreen) self.hideMenu.menu().addAction(self.themeScreen) @@ -405,8 +404,6 @@ class SlideController(QtGui.QWidget): Settings dialog has changed the screen size of adjust output and screen previews. """ - if self.isLive: - self.desktopScreen.setVisible(self.screens.display_count > 1) # rebuild display as screen size changed self.display = MainDisplay(self, self.screens, self.isLive) self.display.imageManager = self.parent.renderManager.image_manager @@ -465,6 +462,9 @@ class SlideController(QtGui.QWidget): self.onSlideSelected() def receiveSpinDelay(self, value): + """ + Adjusts the value of the ``delaySpinBox`` to the given one. + """ self.delaySpinBox.setValue(int(value)) def enableToolBar(self, item): @@ -748,8 +748,7 @@ class SlideController(QtGui.QWidget): self.hideMenu.setDefaultAction(self.blankScreen) self.blankScreen.setChecked(checked) self.themeScreen.setChecked(False) - if self.screens.display_count > 1: - self.desktopScreen.setChecked(False) + self.desktopScreen.setChecked(False) if checked: Receiver.send_message(u'maindisplay_hide', HideMode.Blank) QtCore.QSettings().setValue( @@ -770,8 +769,7 @@ class SlideController(QtGui.QWidget): self.hideMenu.setDefaultAction(self.themeScreen) self.blankScreen.setChecked(False) self.themeScreen.setChecked(checked) - if self.screens.display_count > 1: - self.desktopScreen.setChecked(False) + self.desktopScreen.setChecked(False) if checked: Receiver.send_message(u'maindisplay_hide', HideMode.Theme) QtCore.QSettings().setValue( @@ -792,9 +790,6 @@ class SlideController(QtGui.QWidget): self.hideMenu.setDefaultAction(self.desktopScreen) self.blankScreen.setChecked(False) self.themeScreen.setChecked(False) - # On valid if more than 1 display - if self.screens.display_count <= 1: - return self.desktopScreen.setChecked(checked) if checked: Receiver.send_message(u'maindisplay_hide', HideMode.Screen) @@ -1099,15 +1094,15 @@ class SlideController(QtGui.QWidget): Used by command items which provide their own displays to reset the screen hide attributes """ + blank = None if self.blankScreen.isChecked: - self.blankScreen.setChecked(False) - self.hideMenu.setDefaultAction(self.blankScreen) + blank = self.blankScreen + if self.themeScreen.isChecked: + blank = self.themeScreen + if self.desktopScreen.isChecked: + blank = self.desktopScreen + if blank: + blank.setChecked(False) + self.hideMenu.setDefaultAction(blank) QtCore.QSettings().remove( self.parent.generalSettingsSection + u'/screen blank') - if self.themeScreen.isChecked: - self.themeScreen.setChecked(False) - self.hideMenu.setDefaultAction(self.themeScreen) - if self.screens.display_count > 1: - if self.desktopScreen.isChecked: - self.desktopScreen.setChecked(False) - self.hideMenu.setDefaultAction(self.desktopScreen) From 892430f90c13a1a3739c05df67a7d44a6251749b Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 07:51:24 +0000 Subject: [PATCH 047/124] cleanup --- openlp.pyw | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 7cc4d6d15..920908b61 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -149,10 +149,6 @@ class OpenLP(QtGui.QApplication): log.info(u'Openlp version %s' % app_version[u'version']) return app_version -# def notify(self, obj, evt): -# #TODO needed for presentation exceptions -# return QtGui.QApplication.notify(self, obj, evt) - def run(self): """ Run the OpenLP application. From 094e7968d0f1a6c14a2f5621a9c645feca706850 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 07:59:26 +0000 Subject: [PATCH 048/124] Fix not flagging of service item changes --- openlp/core/ui/servicemanager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index f5a08d8b2..3cdf25c7a 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -943,6 +943,7 @@ class ServiceManager(QtGui.QWidget): for item in self.serviceItems: if item[u'service_item']._uuid == uuid: item[u'service_item'].edit_id = editId + self.setModified(True) def replaceServiceItem(self, newItem): """ @@ -1123,13 +1124,14 @@ class ServiceManager(QtGui.QWidget): self.serviceItems.remove(serviceItem) self.serviceItems.insert(endpos, serviceItem) self.repaintServiceList(endpos, child) + self.setModified(True) else: # we are not over anything so drop replace = False if item is None: self.dropPosition = len(self.serviceItems) else: - # we are over somthing so lets investigate + # we are over something so lets investigate pos = self._getParentItemData(item) - 1 serviceItem = self.serviceItems[pos] if (plugin == serviceItem[u'service_item'].name and From cf0a970184ff9988b557e62cdf41aab02cc7d821 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 13:44:35 +0000 Subject: [PATCH 049/124] Tidy ups --- openlp.pyw | 11 ++++---- openlp/core/ui/firsttimeform.py | 47 +++++++++++++++++++++++++++------ openlp/core/ui/mainwindow.py | 4 +-- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index ee5d9691a..39719a80e 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -273,11 +273,12 @@ def main(): # Define the settings environment QtCore.QSettings(u'OpenLP', u'OpenLP') # First time checks in settings -# if QtCore.QSettings().value( -# u'general/first time', QtCore.QVariant(True)).toBool(): -# if not FirstTimeLanguageForm().exec_(): -# # if cancel then stop processing -# sys.exit() + # Use explicit reference as not inside a QT environment yet + if QtCore.QSettings(u'OpenLP', u'OpenLP').value( + u'general/first time', QtCore.QVariant(True)).toBool(): + if not FirstTimeLanguageForm().exec_(): + # if cancel then stop processing + sys.exit() if sys.platform == u'darwin': OpenLP.addLibraryPath(QtGui.QApplication.applicationDirPath() + "/qt4_plugins") diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index df21b93d5..cd3a1754e 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -34,7 +34,8 @@ from PyQt4 import QtCore, QtGui from firsttimewizard import Ui_FirstTimeWizard -from openlp.core.lib import translate, PluginStatus, check_directory_exists, Receiver +from openlp.core.lib import translate, PluginStatus, check_directory_exists, \ + Receiver from openlp.core.utils import get_web_page, AppLocation log = logging.getLogger(__name__) @@ -91,7 +92,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__loadChild(treewidgetitem, u'songs', u'languages', u'songs') treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, self.biblesText) - self.__loadChild(treewidgetitem, u'bibles', u'translations', u'bible') + self.__loadChild(treewidgetitem, u'bibles', u'translations', + u'bible') treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, self.themesText) self.__loadChild(treewidgetitem, u'themes', u'files', 'theme') @@ -127,11 +129,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if parent and listIterator.value().checkState(0) \ == QtCore.Qt.Checked: if unicode(parent.text(0)) == self.themesText: - self.themeSelectionComboBox.addItem(listIterator.value().text(0)) + self.themeSelectionComboBox.addItem( + listIterator.value().text(0)) listIterator += 1 def accept(self): self.__updateMessage(self.startUpdates) + # Set up the Plugin status's self.__pluginStatus(self.songsCheckBox, u'songs/status') self.__pluginStatus(self.bibleCheckBox, u'bibles/status') self.__pluginStatus(self.presentationCheckBox, u'presentations/status') @@ -141,34 +145,58 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.__pluginStatus(self.customCheckBox, u'custom/status') self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') self.__pluginStatus(self.alertCheckBox, u'alerts/status') - - listIterator = QtGui.QTreeWidgetItemIterator(self.selectionTreeWidget) + # Build directories for downloads songsDestination = AppLocation.get_section_data_path(u'songs') check_directory_exists(songsDestination) bibleDestination = AppLocation.get_section_data_path(u'bibles') check_directory_exists(bibleDestination) themeDestination = AppLocation.get_section_data_path(u'themes') check_directory_exists(themeDestination) + # Install Selected Items looping through them + listIterator = QtGui.QTreeWidgetItemIterator(self.selectionTreeWidget) while listIterator.value(): type = listIterator.value().parent() if listIterator.value().parent(): if listIterator.value().checkState(0) == QtCore.Qt.Checked: - # Install + # Install items as theu have been selected + item = unicode(listIterator.value().text(0)) + # Download Song database if selected + if unicode(type.text(0)) == self.songsText: + songs = unicode(listIterator.value().data(0, + QtCore.Qt.UserRole).toString()) + message = u'%s %s' % (self.downloadSongs, item) + self.__updateMessage(message) + # Song database is a fixed file name + urllib.urlretrieve(u'%s%s' % (self.web, songs), + os.path.join(songsDestination, u'songs.sqlite')) + # Download and selected Bibles if unicode(type.text(0)) == self.biblesText: bible = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = u'%s %s' % (self.downloadBible, bible) + message = u'%s %s' % (self.downloadBible, item) self.__updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, bible), os.path.join(bibleDestination, bible)) + # Download any themes if unicode(type.text(0)) == self.themesText: theme = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = u'%s %s' % (self.downloadTheme, bible) + message = u'%s %s' % (self.downloadTheme, item) self.__updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, theme), os.path.join(themeDestination, theme)) listIterator += 1 + # Set Default Display + if self.displaySelectionComboBox.currentIndex() != -1: + QtCore.QSettings().setValue(u'General/monitor', + QtCore.QVariant(self.displaySelectionComboBox. + currentIndex())) + # Set Global Theme + if self.themeSelectionComboBox.currentIndex() != -1: + QtCore.QSettings().setValue(u'themes/global theme', + QtCore.QVariant(self.themeSelectionComboBox.currentText())) + QtCore.QSettings().setValue(u'general/first time', + QtCore.QVariant(False)) return QtGui.QWizard.accept(self) def __pluginStatus(self, field, tag): @@ -177,5 +205,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): QtCore.QSettings().setValue(tag, QtCore.QVariant(status)) def __updateMessage(self, text): + """ + Keep screen up to date + """ self.updateLabel.setText(text) Receiver.send_message(u'openlp_process_events') diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index bd5e45193..229394247 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -627,8 +627,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.settingsForm.postSetUp() Receiver.send_message(u'cursor_normal') # Import themes if first time -# if firstTime: -# self.themeManagerContents.firstTime() + if firstTime: + self.themeManagerContents.firstTime() def setAutoLanguage(self, value): self.LanguageGroup.setDisabled(value) From ff61f14bdebd081f824b645f2f1602d00e65b35c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 14:15:35 +0000 Subject: [PATCH 050/124] Fix Language setting for first time --- openlp/core/ui/mainwindow.py | 2 ++ openlp/core/utils/languagemanager.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 229394247..bec6d03e4 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -629,6 +629,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Import themes if first time if firstTime: self.themeManagerContents.firstTime() + self.themeManagerContents.firstTime() + def setAutoLanguage(self, value): self.LanguageGroup.setDisabled(value) diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index ebc9b4575..9cadf06e2 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -89,7 +89,8 @@ class LanguageManager(object): """ Retrieve a saved language to use from settings """ - language = unicode(QtCore.QSettings().value( + settings = QtCore.QSettings(u'OpenLP', u'OpenLP') + language = unicode(settings.value( u'general/language', QtCore.QVariant(u'[en]')).toString()) log.info(u'Language file: \'%s\' Loaded from conf file' % language) reg_ex = QtCore.QRegExp("^\[(.*)\]") From 3b465ed22fb51845e4ce78d7060fa2ee8b1d758f Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 6 Mar 2011 16:29:25 +0100 Subject: [PATCH 051/124] fixed images being displayed for a short time, even when the desktop was hidden --- openlp/core/ui/maindisplay.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 47321eedf..f8bd99b81 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -233,9 +233,6 @@ class MainDisplay(DisplayWidget): image = self.imageManager.get_image_bytes(name) self.resetVideo() self.displayImage(image) - # show screen - if self.isLive: - self.setVisible(True) return self.preview() def displayImage(self, image): @@ -388,9 +385,9 @@ class MainDisplay(DisplayWidget): Receiver.send_message(u'openlp_process_events') # if was hidden keep it hidden if self.isLive: - if self.hideMode: - self.hideDisplay(self.hideMode) - else: + if self.hideMode: + self.hideDisplay(self.hideMode) + else: self.setVisible(True) preview = QtGui.QImage(self.screen[u'size'].width(), self.screen[u'size'].height(), From 6ef78ef39d1a76c6e41a7fefece1ed4a32770c1c Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 16:28:26 +0000 Subject: [PATCH 052/124] Fix song import duplication by removing training space on the search title. Fixed up all locations field was made and the reindex code. Only tested with reindex! Fixes: https://launchpad.net/bugs/712252 --- openlp/plugins/songs/forms/editsongform.py | 2 +- openlp/plugins/songs/lib/foilpresenterimport.py | 2 +- openlp/plugins/songs/lib/olpimport.py | 2 +- openlp/plugins/songs/lib/songimport.py | 1 + openlp/plugins/songs/lib/xml.py | 2 +- openlp/plugins/songs/songsplugin.py | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 0e874c3d5..0d9121c45 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -810,4 +810,4 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): # This method must only be run after the self.song = Song() assignment. log.debug(u'processTitle') self.song.search_title = re.sub(r'[\'"`,;:(){}?]+', u'', - unicode(self.song.search_title)).lower() + unicode(self.song.search_title)).lower().strip() diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index 0d81e6f41..a26d1c05a 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -540,7 +540,7 @@ class FoilPresenter(object): song.alternate_title = self._child(titelstring) song.search_title += u'@' + song.alternate_title song.search_title = re.sub(r'[\'"`,;:(){}?]+', u'', - unicode(song.search_title)).lower() + unicode(song.search_title)).lower().strip() def _process_topics(self, foilpresenterfolie, song): """ diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index fe010b501..11170f9a0 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -167,7 +167,7 @@ class OpenLPSongImport(SongImport): new_song.alternate_title = old_titles[1] else: new_song.alternate_title = u'' - new_song.search_title = song.search_title + new_song.search_title = song.search_title.strip() new_song.song_number = song.song_number new_song.lyrics = song.lyrics new_song.search_lyrics = song.search_lyrics diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 5bfba9b77..fc78b5033 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -276,6 +276,7 @@ class SongImport(QtCore.QObject): song.alternate_title = self.alternate_title song.search_title = self.remove_punctuation(self.title).lower() \ + '@' + self.remove_punctuation(self.alternate_title).lower() + song.search_title = song.search_title.strip() song.song_number = self.song_number song.search_lyrics = u'' verses_changed_to_other = {} diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index a2a73ec97..bd22ea4b2 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -536,7 +536,7 @@ class OpenLyrics(object): song.alternate_title = self._text(title) song.search_title += u'@' + song.alternate_title song.search_title = re.sub(r'[\'"`,;:(){}?]+', u'', - unicode(song.search_title)).lower() + unicode(song.search_title)).lower().strip() def _process_topics(self, properties, song): """ diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 0335b3a6e..bfd5c4eea 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -154,7 +154,7 @@ class SongsPlugin(Plugin): if song.alternate_title is None: song.alternate_title = u'' song.search_title = self.whitespace.sub(u' ', song.title.lower() + - u' ' + song.alternate_title.lower()) + u' ' + song.alternate_title.lower()).strip() # Remove the "language" attribute from lyrics tag. This is not very # important, but this keeps the database clean. This can be removed # when everybody has run the reindex tool once. From 47b72badda6700bf0411cac045d336b264874ad3 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 19:25:35 +0000 Subject: [PATCH 053/124] Merge fixes --- openlp/core/ui/firsttimeform.py | 46 ++++++++++++++++----------------- openlp/core/ui/mainwindow.py | 1 - 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index cd3a1754e..3e7993c80 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -38,7 +38,7 @@ from openlp.core.lib import translate, PluginStatus, check_directory_exists, \ Receiver from openlp.core.utils import get_web_page, AppLocation -log = logging.getLogger(__name__) +log = logging.getLogger(_name_) class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ @@ -47,7 +47,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ log.info(u'ThemeWizardForm loaded') - def __init__(self, screens, parent=None): + def _init_(self, screens, parent=None): # check to see if we have web access self.web = u'http://openlp.org/files/frw/' self.config = ConfigParser.ConfigParser() @@ -55,7 +55,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) - QtGui.QWizard.__init__(self, parent) + QtGui.QWizard._init_(self, parent) self.setupUi(self) for screen in screens.get_screen_list(): self.displaySelectionComboBox.addItem(screen) @@ -65,7 +65,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.startUpdates = translate('OpenLP.FirstTimeWizard', 'Starting Updates') self.downloadSongs = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading Songs.')) + 'Downloading songs')) self.downloadBible = unicode(translate('OpenLP.FirstTimeWizard', 'Downloading bible')) self.downloadTheme = unicode(translate('OpenLP.FirstTimeWizard', @@ -89,19 +89,19 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.noInternetLabel.setVisible(False) treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, self.songsText) - self.__loadChild(treewidgetitem, u'songs', u'languages', u'songs') + self._loadChild(treewidgetitem, u'songs', u'languages', u'songs') treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, self.biblesText) - self.__loadChild(treewidgetitem, u'bibles', u'translations', + self._loadChild(treewidgetitem, u'bibles', u'translations', u'bible') treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, self.themesText) - self.__loadChild(treewidgetitem, u'themes', u'files', 'theme') + self._loadChild(treewidgetitem, u'themes', u'files', 'theme') else: self.internetGroupBox.setVisible(False) self.noInternetLabel.setVisible(True) - def __loadChild(self, tree, list, tag, root): + def _loadChild(self, tree, list, tag, root): files = self.config.get(list, tag) files = files.split(u',') for file in files: @@ -134,17 +134,17 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): listIterator += 1 def accept(self): - self.__updateMessage(self.startUpdates) + self._updateMessage(self.startUpdates) # Set up the Plugin status's - self.__pluginStatus(self.songsCheckBox, u'songs/status') - self.__pluginStatus(self.bibleCheckBox, u'bibles/status') - self.__pluginStatus(self.presentationCheckBox, u'presentations/status') - self.__pluginStatus(self.imageCheckBox, u'images/status') - self.__pluginStatus(self.mediaCheckBox, u'media/status') - self.__pluginStatus(self.remoteCheckBox, u'remotes/status') - self.__pluginStatus(self.customCheckBox, u'custom/status') - self.__pluginStatus(self.songUsageCheckBox, u'songusage/status') - self.__pluginStatus(self.alertCheckBox, u'alerts/status') + self._pluginStatus(self.songsCheckBox, u'songs/status') + self._pluginStatus(self.bibleCheckBox, u'bibles/status') + self._pluginStatus(self.presentationCheckBox, u'presentations/status') + self._pluginStatus(self.imageCheckBox, u'images/status') + self._pluginStatus(self.mediaCheckBox, u'media/status') + self._pluginStatus(self.remoteCheckBox, u'remotes/status') + self._pluginStatus(self.customCheckBox, u'custom/status') + self._pluginStatus(self.songUsageCheckBox, u'songusage/status') + self._pluginStatus(self.alertCheckBox, u'alerts/status') # Build directories for downloads songsDestination = AppLocation.get_section_data_path(u'songs') check_directory_exists(songsDestination) @@ -165,7 +165,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): songs = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) message = u'%s %s' % (self.downloadSongs, item) - self.__updateMessage(message) + self._updateMessage(message) # Song database is a fixed file name urllib.urlretrieve(u'%s%s' % (self.web, songs), os.path.join(songsDestination, u'songs.sqlite')) @@ -174,7 +174,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): bible = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) message = u'%s %s' % (self.downloadBible, item) - self.__updateMessage(message) + self._updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, bible), os.path.join(bibleDestination, bible)) # Download any themes @@ -182,7 +182,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): theme = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) message = u'%s %s' % (self.downloadTheme, item) - self.__updateMessage(message) + self._updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, theme), os.path.join(themeDestination, theme)) listIterator += 1 @@ -199,12 +199,12 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): QtCore.QVariant(False)) return QtGui.QWizard.accept(self) - def __pluginStatus(self, field, tag): + def _pluginStatus(self, field, tag): status = PluginStatus.Active if field.checkState() \ == QtCore.Qt.Checked else PluginStatus.Inactive QtCore.QSettings().setValue(tag, QtCore.QVariant(status)) - def __updateMessage(self, text): + def _updateMessage(self, text): """ Keep screen up to date """ diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index bec6d03e4..bb35936d5 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -629,7 +629,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Import themes if first time if firstTime: self.themeManagerContents.firstTime() - self.themeManagerContents.firstTime() def setAutoLanguage(self, value): From 3b9adbb1db343b5d3f99d50d70d96fa2923434e8 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 19:44:33 +0000 Subject: [PATCH 054/124] Merge fixes 2 --- openlp/core/ui/firsttimeform.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 3e7993c80..7da2ff0b3 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -38,7 +38,7 @@ from openlp.core.lib import translate, PluginStatus, check_directory_exists, \ Receiver from openlp.core.utils import get_web_page, AppLocation -log = logging.getLogger(_name_) +log = logging.getLogger(__name__) class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ @@ -47,7 +47,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ log.info(u'ThemeWizardForm loaded') - def _init_(self, screens, parent=None): + def __init__(self, screens, parent=None): # check to see if we have web access self.web = u'http://openlp.org/files/frw/' self.config = ConfigParser.ConfigParser() @@ -55,7 +55,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) - QtGui.QWizard._init_(self, parent) + QtGui.QWizard.__init__(self, parent) self.setupUi(self) for screen in screens.get_screen_list(): self.displaySelectionComboBox.addItem(screen) @@ -65,11 +65,11 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.startUpdates = translate('OpenLP.FirstTimeWizard', 'Starting Updates') self.downloadSongs = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading songs')) + 'Downloading songs: %s')) self.downloadBible = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading bible')) + 'Downloading bible: %s')) self.downloadTheme = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading theme')) + 'Downloading theme: %s')) def exec_(self, edit=False): """ @@ -164,7 +164,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if unicode(type.text(0)) == self.songsText: songs = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = u'%s %s' % (self.downloadSongs, item) + message = self.downloadSongs % item self._updateMessage(message) # Song database is a fixed file name urllib.urlretrieve(u'%s%s' % (self.web, songs), @@ -173,7 +173,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if unicode(type.text(0)) == self.biblesText: bible = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = u'%s %s' % (self.downloadBible, item) + message = self.downloadBible % item self._updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, bible), os.path.join(bibleDestination, bible)) @@ -181,7 +181,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if unicode(type.text(0)) == self.themesText: theme = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = u'%s %s' % (self.downloadTheme, item) + message = self.downloadTheme % item self._updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, theme), os.path.join(themeDestination, theme)) From f1f6c6bd3e22c41d96034aa619184c86fbdd7d54 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sun, 6 Mar 2011 20:09:03 +0000 Subject: [PATCH 055/124] Merge fixes 3 --- openlp/core/ui/firsttimeform.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 7da2ff0b3..e1dd31778 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -64,12 +64,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.themesText = translate('OpenLP.FirstTimeWizard', 'Themes') self.startUpdates = translate('OpenLP.FirstTimeWizard', 'Starting Updates') - self.downloadSongs = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading songs: %s')) - self.downloadBible = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading bible: %s')) - self.downloadTheme = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading theme: %s')) + self.downloading = unicode(translate('OpenLP.FirstTimeWizard', + 'Downloading %s')) def exec_(self, edit=False): """ @@ -164,7 +160,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if unicode(type.text(0)) == self.songsText: songs = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = self.downloadSongs % item + message = self.downloading % item self._updateMessage(message) # Song database is a fixed file name urllib.urlretrieve(u'%s%s' % (self.web, songs), @@ -173,7 +169,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if unicode(type.text(0)) == self.biblesText: bible = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = self.downloadBible % item + message = self.downloading % item self._updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, bible), os.path.join(bibleDestination, bible)) @@ -181,7 +177,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if unicode(type.text(0)) == self.themesText: theme = unicode(listIterator.value().data(0, QtCore.Qt.UserRole).toString()) - message = self.downloadTheme % item + message = self.downloading % item self._updateMessage(message) urllib.urlretrieve(u'%s%s' % (self.web, theme), os.path.join(themeDestination, theme)) From faa0d2740a74e0885a0ad231ebdc8facf3dba821 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 7 Mar 2011 17:38:04 +0000 Subject: [PATCH 056/124] Stop song database overwrite --- openlp/core/ui/firsttimeform.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index e1dd31778..fb2a0a3fe 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -83,9 +83,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.webAccess: self.internetGroupBox.setVisible(True) self.noInternetLabel.setVisible(False) - treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, self.songsText) - self._loadChild(treewidgetitem, u'songs', u'languages', u'songs') + # If songs database exists do not allow a copy + songs = os.path.join(AppLocation.get_section_data_path(u'songs'), + u'songs.sqlite') + if not os.path.exists(songs): + treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) + treewidgetitem.setText(0, self.songsText) + self._loadChild(treewidgetitem, u'songs', u'languages', u'songs') treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, self.biblesText) self._loadChild(treewidgetitem, u'bibles', u'translations', From e535c4e04022d74d8951cbd79c07ea8d9b3d17e1 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 7 Mar 2011 19:04:40 +0100 Subject: [PATCH 057/124] fixed Bug #727710 Fixes: https://launchpad.net/bugs/727710 --- openlp/core/ui/maindisplay.py | 15 ++++++++++----- openlp/core/ui/slidecontroller.py | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index f8bd99b81..4a12ca05e 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -245,7 +245,8 @@ class MainDisplay(DisplayWidget): js = u'show_image("");' self.frame.evaluateJavaScript(js) # Update the preview frame. - Receiver.send_message(u'maindisplay_active') + if self.isLive: + Receiver.send_message(u'maindisplay_active') def resetImage(self): """ @@ -259,7 +260,8 @@ class MainDisplay(DisplayWidget): self.displayImage(None) self.override = {} # Update the preview frame. - Receiver.send_message(u'maindisplay_active') + if self.isLive: + Receiver.send_message(u'maindisplay_active') def resetVideo(self): """ @@ -276,7 +278,8 @@ class MainDisplay(DisplayWidget): self.frame.evaluateJavaScript(u'show_video("close");') self.override = {} # Update the preview frame. - Receiver.send_message(u'maindisplay_active') + if self.isLive: + Receiver.send_message(u'maindisplay_active') def videoPlay(self): """ @@ -347,7 +350,8 @@ class MainDisplay(DisplayWidget): self.videoWidget.setVisible(True) self.audio.setVolume(vol) # Update the preview frame. - Receiver.send_message(u'maindisplay_active') + if self.isLive: + Receiver.send_message(u'maindisplay_active') return self.preview() def videoStart(self, newState, oldState): @@ -481,7 +485,8 @@ class MainDisplay(DisplayWidget): self.videoPlay() self.hideMode = None # Trigger actions when display is active again - Receiver.send_message(u'maindisplay_active') + if self.isLive: + Receiver.send_message(u'maindisplay_active') def __hideMouse(self): # Hide mouse cursor when moved over display if enabled in settings diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 0caa83e72..c81b987b4 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -162,7 +162,7 @@ class SlideController(QtGui.QWidget): self.themeScreen.setText( translate('OpenLP.SlideController', 'Blank to Theme')) self.desktopScreen = icon_action(self.hideMenu, u'Desktop Screen', - u':/slides/slide_desktop.png', False) + u':/slides/slide_desktop.png', False) self.desktopScreen.setText( translate('OpenLP.SlideController', 'Show Desktop')) self.hideMenu.setDefaultAction(self.blankScreen) From 15eb939d76f6f7e80582ee9fa45eb62f7e39a86d Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 7 Mar 2011 18:07:13 +0000 Subject: [PATCH 058/124] Fix English --- openlp/core/ui/firsttimewizard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 081ac9991..491246a6c 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -224,4 +224,4 @@ class Ui_FirstTimeWizard(object): self.themeSelectionLabel.setText(translate('OpenLP.FirstTimeWizard', 'Select the default Theme')) self.messageLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Press Finish to apply all you changes and start OpenLP')) + 'Press Finish to apply all your changes and start OpenLP')) From 3eb8ca476b392265dfe9a14f4356c565002a6a57 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 7 Mar 2011 19:16:56 +0000 Subject: [PATCH 059/124] english --- openlp/core/ui/firsttimewizard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 491246a6c..ee14b6b0e 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -224,4 +224,4 @@ class Ui_FirstTimeWizard(object): self.themeSelectionLabel.setText(translate('OpenLP.FirstTimeWizard', 'Select the default Theme')) self.messageLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Press Finish to apply all your changes and start OpenLP')) + 'Press finish to apply all your changes and start OpenLP')) From c3c4e855906492e14678ba8edbc99477f35df946 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 7 Mar 2011 19:58:51 +0000 Subject: [PATCH 060/124] Fixes --- openlp/core/ui/firsttimeform.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index fb2a0a3fe..e658f38d3 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -66,6 +66,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): 'Starting Updates') self.downloading = unicode(translate('OpenLP.FirstTimeWizard', 'Downloading %s')) + QtCore.QObject.connect(self, + QtCore.SIGNAL(u'currentIdChanged(int)'), + self.onCurrentIdChanged) def exec_(self, edit=False): """ @@ -116,12 +119,11 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): child.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) - def initializePage(self, id): + def onCurrentIdChanged(self, pageId): """ - Set up the pages for Initial run through dialog + Detects Page changes and updates as approprate. """ - wizardPage = self.page(id) - if wizardPage == self.DefaultsPage: + if self.page(pageId) == self.DefaultsPage: listIterator = QtGui.QTreeWidgetItemIterator( self.selectionTreeWidget) while listIterator.value(): @@ -134,6 +136,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): listIterator += 1 def accept(self): + Receiver.send_message(u'cursor_busy') self._updateMessage(self.startUpdates) # Set up the Plugin status's self._pluginStatus(self.songsCheckBox, u'songs/status') @@ -197,6 +200,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): QtCore.QVariant(self.themeSelectionComboBox.currentText())) QtCore.QSettings().setValue(u'general/first time', QtCore.QVariant(False)) + Receiver.send_message(u'cursor_normal') return QtGui.QWizard.accept(self) def _pluginStatus(self, field, tag): From ef00fcdc0b774b0bfa592ef2912e8996374ec06d Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Mon, 7 Mar 2011 23:12:31 +0000 Subject: [PATCH 061/124] Fix ooo file open for windows --- openlp/plugins/songs/lib/oooimport.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 22e36b716..4fb6b5876 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -135,8 +135,9 @@ class OooImport(SongImport): Open the passed file in OpenOffice.org Impress """ if os.name == u'nt': - url = u'file:///' + filepath.replace(u'\\', u'/') + url = filepath.replace(u'\\', u'/') url = url.replace(u':', u'|').replace(u' ', u'%20') + url = u'file:///' + url else: url = uno.systemPathToFileUrl(filepath) properties = [] From 80f4c67daad5febbf929d6831a6a55e7485f19f2 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 8 Mar 2011 08:52:01 +0200 Subject: [PATCH 062/124] Added an initial Gentoo ebuild file. --- resources/gentoo/openlp-1.9.4.ebuild | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 resources/gentoo/openlp-1.9.4.ebuild diff --git a/resources/gentoo/openlp-1.9.4.ebuild b/resources/gentoo/openlp-1.9.4.ebuild new file mode 100644 index 000000000..4e87a27b3 --- /dev/null +++ b/resources/gentoo/openlp-1.9.4.ebuild @@ -0,0 +1,30 @@ +# Copyright 1999-2009 Gentoo Foundation +# Copyright 2010 Jaak Ristioja +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=2 +RESTRICT_PYTHON_ABIS="3.*" +inherit python + +DESCRIPTION="Free church presentation software" +HOMEPAGE="http://openlp.org/" +SRC_URI="mirror://sourceforge/${PN}/${PV}/OpenLP-${PV}-src.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="alpha amd64 arm hppa ia64 ppc ppc64 sparc x86 x86-fbsd x86-freebsd amd64-linux x86-linux x86-macos x86-solaris" + +RDEPEND=">=dev-lang/python-2.5.0 + dev-python/beautifulsoup + dev-python/chardet + dev-python/lxml + dev-python/pyenchant + dev-python/PyQt4[X,multimedia] + dev-python/sqlalchemy" +DEPEND="${RDEPEND}" + +PYTHON_DEPEND="2:2.5" +PYTHON_MODNAME="openlp" + +S=${WORKDIR}/OpenLP-${PV}-src From 562a88a9934f532c08d67a4c4070405c40f0626f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Tue, 8 Mar 2011 09:38:25 +0200 Subject: [PATCH 063/124] Fixes #730459 and 4 unreported bugs. --- openlp/core/lib/mediamanageritem.py | 6 +++--- openlp/core/ui/servicemanager.py | 32 ++++++++++++++--------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index e3bb4ae0f..ceaad2d46 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -349,11 +349,11 @@ class MediaManagerItem(QtGui.QWidget): Validates whether an image still exists and, if it does, is the thumbnail representation of the image up to date. """ - if not os.path.exists(image): + if not os.path.exists(unicode(image)): return False if os.path.exists(thumb): - imageDate = os.stat(image).st_mtime - thumbDate = os.stat(thumb).st_mtime + imageDate = os.stat(unicode(image)).st_mtime + thumbDate = os.stat(unicode(thumb)).st_mtime # If image has been updated rebuild icon if imageDate > thumbDate: self.iconFromFile(image, thumb) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 3cdf25c7a..555441f96 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -416,36 +416,37 @@ class ServiceManager(QtGui.QWidget): if not self.fileName(): return self.saveFileAs() else: - fileName = self.fileName() - log.debug(u'ServiceManager.saveFile - %s' % fileName) + path_file_name = unicode(self.fileName()) + (path, file_name) = os.path.split(path_file_name) + basename = file_name[0:file_name.rfind(u'.')-1] + file_name = basename + '.osz' + service_file_name = basename + '.osd' + log.debug(u'ServiceManager.saveFile - %s' % path_file_name) SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, - split_filename(fileName)[0]) + path) service = [] - serviceFileName = fileName.replace(u'.osz', u'.osd') zip = None file = None try: write_list = [] - zip = zipfile.ZipFile(unicode(fileName), 'w') + zip = zipfile.ZipFile(path_file_name, 'w') for item in self.serviceItems: - service.append({u'serviceitem': \ + service.append({u'serviceitem': item[u'service_item'].get_service_repr()}) if item[u'service_item'].uses_file(): for frame in item[u'service_item'].get_frames(): if item[u'service_item'].is_image(): path_from = frame[u'path'] else: - path_from = unicode(os.path.join( - frame[u'path'], - frame[u'title'])) + path_from = os.path.join(frame[u'path'], + frame[u'title']) # On write a file once if not path_from in write_list: write_list.append(path_from) - zip.write(path_from.encode(u'utf-8')) - file = open(serviceFileName, u'wb') - cPickle.dump(service, file) - file.close() - zip.write(serviceFileName.encode(u'utf-8')) + zip.write(path_from, + path_from.encode(u'utf-8')) + zip.writestr(service_file_name.encode(u'utf-8'), + cPickle.dumps(service)) except IOError: log.exception(u'Failed to save service to disk') finally: @@ -453,8 +454,7 @@ class ServiceManager(QtGui.QWidget): file.close() if zip: zip.close() - delete_file(serviceFileName) - self.mainwindow.addRecentFile(fileName) + self.mainwindow.addRecentFile(path_file_name) self.setModified(False) return True From 216cc407c6372110b58e12130a6f9f7bdf28d044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Tue, 8 Mar 2011 11:32:37 +0200 Subject: [PATCH 064/124] Now able to write >2GiB service files (haven't tested opening these),\n on IOError not-saved * asterisk will remain in place,\nbefore adding >50GiB files, user is asked first. --- openlp/core/ui/servicemanager.py | 58 +++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 555441f96..93d24a567 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -419,17 +419,15 @@ class ServiceManager(QtGui.QWidget): path_file_name = unicode(self.fileName()) (path, file_name) = os.path.split(path_file_name) basename = file_name[0:file_name.rfind(u'.')-1] - file_name = basename + '.osz' service_file_name = basename + '.osd' log.debug(u'ServiceManager.saveFile - %s' % path_file_name) SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, path) service = [] zip = None - file = None try: write_list = [] - zip = zipfile.ZipFile(path_file_name, 'w') + total_size = 0 for item in self.serviceItems: service.append({u'serviceitem': item[u'service_item'].get_service_repr()}) @@ -440,20 +438,54 @@ class ServiceManager(QtGui.QWidget): else: path_from = os.path.join(frame[u'path'], frame[u'title']) - # On write a file once + # Only write a file once if not path_from in write_list: - write_list.append(path_from) - zip.write(path_from, - path_from.encode(u'utf-8')) + file_size = os.path.getsize(path_from) + size_limit = 52428800 # 50MiB + if file_size > size_limit: + # File exeeds size_limit bytes, ask user + message = unicode(self.trUtf8('Do you want' + ' to include \n%.1f MiB file "%s"\n' + 'into the service file?\n' + 'This may take some time.\n\n' + 'Please note that you need to\n' + 'take care of that file yourself.')) %\ + (file_size/1048576, + os.path.split(path_from)[1]) + ans = QtGui.QMessageBox.question(self, + self.trUtf8('Including Large File'), + message, + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Ok|\ + QtGui.QMessageBox.Cancel), + QtGui.QMessageBox.Ok) + if ans == QtGui.QMessageBox.Ok: + write_list.append(path_from) + total_size += file_size + else: + write_list.append(path_from) + total_size += file_size + log.debug(u'ServiceManager.saveFile - ZIP contents size is %i' + ' bytes' % total_size) + service_content = cPickle.dumps(service) + # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be + # extracted using unzip in UNIX. + allow_zip_64 = (total_size > 2147483648 + len(service_content)) + log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % + allow_zip_64) + zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, + allow_zip_64) + # We first add service contents. + # We save ALL filenames into ZIP using UTF-8. zip.writestr(service_file_name.encode(u'utf-8'), - cPickle.dumps(service)) + service_content) + # Finally add all the listed media files. + for path_from in write_list: + zip.write(path_from, path_from.encode(u'utf-8')) + zip.close() except IOError: log.exception(u'Failed to save service to disk') - finally: - if file: - file.close() - if zip: - zip.close() + return False self.mainwindow.addRecentFile(path_file_name) self.setModified(False) return True From 25dbf271f68ec848df9908eee3cbf841d9a9fa8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Tue, 8 Mar 2011 12:16:09 +0200 Subject: [PATCH 065/124] Cleanup --- openlp/core/ui/servicemanager.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 93d24a567..164147c06 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -444,16 +444,20 @@ class ServiceManager(QtGui.QWidget): size_limit = 52428800 # 50MiB if file_size > size_limit: # File exeeds size_limit bytes, ask user - message = unicode(self.trUtf8('Do you want' - ' to include \n%.1f MiB file "%s"\n' + message = unicode(translate( + 'OpenLP.ServiceManager', 'Do you want' + ' to include \n%.1f MB file "%s"\n' 'into the service file?\n' 'This may take some time.\n\n' 'Please note that you need to\n' - 'take care of that file yourself.')) %\ + 'take care of that file yourself,\n' + 'if you leave it out.')) %\ (file_size/1048576, os.path.split(path_from)[1]) - ans = QtGui.QMessageBox.question(self, - self.trUtf8('Including Large File'), + ans = QtGui.QMessageBox.question( + self.mainwindow, + translate('OpenLP.ServiceManager', + 'Including Large File'), message, QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Ok|\ From f73b8660e011c15b774e01ae2d9b0c7063abefaa Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 8 Mar 2011 17:46:53 +0100 Subject: [PATCH 066/124] added more debug messages --- openlp/core/ui/maindisplay.py | 8 ++++++-- openlp/plugins/songs/lib/mediaitem.py | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 4a12ca05e..357eb655a 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -90,8 +90,8 @@ class MainDisplay(DisplayWidget): """ Set up and build the output screen """ - log.debug(u'Setup live = %s for monitor %s ' % (self.isLive, - self.screens.monitor_number)) + log.debug(u'Start setup for monitor %s (live = %s)' % + (self.screens.monitor_number, self.isLive)) self.usePhonon = QtCore.QSettings().value( u'media/use phonon', QtCore.QVariant(True)).toBool() self.phononActive = False @@ -102,6 +102,7 @@ class MainDisplay(DisplayWidget): self.videoWidget.setVisible(False) self.videoWidget.setGeometry(QtCore.QRect(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height())) + log.debug(u'Setup Phonon for monitor %s' % self.screens.monitor_number) self.mediaObject = Phonon.MediaObject(self) self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self.mediaObject) Phonon.createPath(self.mediaObject, self.videoWidget) @@ -109,6 +110,7 @@ class MainDisplay(DisplayWidget): QtCore.QObject.connect(self.mediaObject, QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'), self.videoStart) + log.debug(u'Setup webView for monitor %s' % self.screens.monitor_number) self.webView = QtWebKit.QWebView(self) self.webView.setGeometry(0, 0, self.screen[u'size'].width(), self.screen[u'size'].height()) @@ -165,6 +167,8 @@ class MainDisplay(DisplayWidget): self.primary = False else: self.primary = True + log.debug( + u'Finished setup for monitor %s' % self.screens.monitor_number) def text(self, slide): """ diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 37a404daa..4c267dd3c 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -198,7 +198,7 @@ class SongMediaItem(MediaManagerItem): Handle the exit from the edit dialog and trigger remote updates of songs """ - log.debug(u'onSongListLoad') + log.debug(u'onSongListLoad - start') # Called to redisplay the song list screen edit from a search # or from the exit of the Song edit dialog. If remote editing is active # Trigger it and clean up so it will not update again. @@ -213,6 +213,7 @@ class SongMediaItem(MediaManagerItem): self.parent.serviceManager.replaceServiceItem(item) self.onRemoteEditClear() self.onSearchTextButtonClick() + log.debug(u'onSongListLoad - finished') def displayResultsSong(self, searchresults): log.debug(u'display results Song') From 1292ea3931c6e336fced30819194cedd20b1a264 Mon Sep 17 00:00:00 2001 From: "John Cegalis jseagull1@hotmail.com" Date: Tue, 8 Mar 2011 12:30:27 -0500 Subject: [PATCH 067/124] Added a credits section --- documentation/manual/source/index.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/documentation/manual/source/index.rst b/documentation/manual/source/index.rst index 378cfe2a0..89b9cf813 100644 --- a/documentation/manual/source/index.rst +++ b/documentation/manual/source/index.rst @@ -17,3 +17,6 @@ Contents: mediamanager songs +Credits +------- +Edited by john \ No newline at end of file From 8887a7c04aada40b11c496a9f55696cd6b0de8c1 Mon Sep 17 00:00:00 2001 From: "John Cegalis jseagull1@hotmail.com" Date: Tue, 8 Mar 2011 13:08:00 -0500 Subject: [PATCH 068/124] Removed test credits --- documentation/manual/source/index.rst | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/documentation/manual/source/index.rst b/documentation/manual/source/index.rst index 89b9cf813..36bcf2cc1 100644 --- a/documentation/manual/source/index.rst +++ b/documentation/manual/source/index.rst @@ -15,8 +15,4 @@ Contents: glossary dualmonitors mediamanager - songs - -Credits -------- -Edited by john \ No newline at end of file + songs \ No newline at end of file From 9e66b03774e2bca73c266faede705a96ff05a022 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Tue, 8 Mar 2011 18:50:26 +0000 Subject: [PATCH 069/124] Fix combo refresh --- openlp/core/ui/firsttimeform.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index e658f38d3..88cd7a5cc 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -124,6 +124,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): Detects Page changes and updates as approprate. """ if self.page(pageId) == self.DefaultsPage: + self.themeSelectionComboBox.clear() listIterator = QtGui.QTreeWidgetItemIterator( self.selectionTreeWidget) while listIterator.value(): From fcadc58e75c744c6fa167c036f871de573f5f751 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 8 Mar 2011 22:09:52 +0100 Subject: [PATCH 070/124] fixed bug #730979 Fixes: https://launchpad.net/bugs/730979 --- openlp/core/lib/__init__.py | 12 ++++++++++++ openlp/plugins/bibles/lib/db.py | 18 ++---------------- openlp/plugins/songs/lib/openlyricsexport.py | 10 ++++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index dc60a5a65..e92b9c64a 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -29,6 +29,7 @@ OpenLP work. """ import logging import os.path +import re import types from PyQt4 import QtCore, QtGui @@ -320,6 +321,17 @@ def check_directory_exists(dir): if not os.path.exists(dir): os.makedirs(dir) +def clean_file_name(path): + """ + Removes not supported characters from the given path. + + ``path`` + The path to clean. + """ + if not isinstance(path, unicode): + path = unicode(path, u'utf-8') + return re.sub(r'[/\\?*|<>\[\]":<>+%]+', u'_', path).strip(u'_') + from listwidgetwithdnd import ListWidgetWithDnD from displaytags import DisplayTags from spelltextedit import SpellTextEdit diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 5cf000ee1..2021afa40 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -26,14 +26,13 @@ import logging import chardet -import re from PyQt4 import QtCore from sqlalchemy import Column, ForeignKey, or_, Table, types from sqlalchemy.orm import class_mapper, mapper, relation from sqlalchemy.orm.exc import UnmappedClassError -from openlp.core.lib import Receiver, translate +from openlp.core.lib import clean_file_name, Receiver, translate from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.ui import critical_error_message_box @@ -155,7 +154,7 @@ class BibleDB(QtCore.QObject, Manager): self.name = kwargs[u'name'] if not isinstance(self.name, unicode): self.name = unicode(self.name, u'utf-8') - self.file = self.clean_filename(self.name) + self.file = clean_file_name(self.name) + u'.sqlite' if u'file' in kwargs: self.file = kwargs[u'file'] Manager.__init__(self, u'bibles', init_schema, self.file) @@ -183,19 +182,6 @@ class BibleDB(QtCore.QObject, Manager): self.name = None return self.name - def clean_filename(self, old_filename): - """ - Clean up the version name of the Bible and convert it into a valid - file name. - - ``old_filename`` - The "dirty" file name or version name. - """ - if not isinstance(old_filename, unicode): - old_filename = unicode(old_filename, u'utf-8') - old_filename = re.sub(r'[^\w]+', u'_', old_filename).strip(u'_') - return old_filename + u'.sqlite' - def register(self, wizard): """ This method basically just initialialises the database. It is called diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index c2b58980b..f4fdd769a 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -32,7 +32,8 @@ import os from lxml import etree -from openlp.core.lib import Receiver, translate +from openlp.core.lib import check_directory_exists, clean_file_name, Receiver, \ + translate from openlp.plugins.songs.lib import OpenLyrics log = logging.getLogger(__name__) @@ -50,8 +51,7 @@ class OpenLyricsExport(object): self.manager = parent.plugin.manager self.songs = songs self.save_path = save_path - if not os.path.exists(self.save_path): - os.mkdir(self.save_path) + check_directory_exists(self.save_path) def do_export(self): """ @@ -69,6 +69,8 @@ class OpenLyricsExport(object): song.title) xml = openLyrics.song_to_xml(song) tree = etree.ElementTree(etree.fromstring(xml)) - tree.write(os.path.join(self.save_path, song.title + u'.xml'), + filename = clean_file_name(u'%s (%s).xml' % (song.title, + u', '.join([author.display_name for author in song.authors]))) + tree.write(os.path.join(self.save_path, filename), encoding=u'utf-8', xml_declaration=True, pretty_print=True) return True From ae864689c76fc5b158145938bfc2e9de68cd24fb Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 9 Mar 2011 08:02:31 +0200 Subject: [PATCH 071/124] Make the language detection menu item part of the group. --- openlp/core/ui/mainwindow.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 2e87f186e..ba3141f97 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -228,11 +228,12 @@ class Ui_MainWindow(object): # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, u'AutoLanguageItem', LanguageManager.auto_language) - mainWindow.actionList.add_action(self.AutoLanguageItem, u'Settings') + #mainWindow.actionList.add_action(self.AutoLanguageItem, u'Settings') self.LanguageGroup = QtGui.QActionGroup(mainWindow) self.LanguageGroup.setExclusive(True) self.LanguageGroup.setObjectName(u'LanguageGroup') - self.LanguageGroup.setDisabled(LanguageManager.auto_language) + #self.LanguageGroup.setDisabled(LanguageManager.auto_language) + add_actions(self.LanguageGroup, [self.AutoLanguageItem]) qmList = LanguageManager.get_qm_list() savedLanguage = LanguageManager.get_language() for key in sorted(qmList.keys()): From e7cc230560212417c78b32439f60f0d3e97ca5b4 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 9 Mar 2011 08:55:41 +0200 Subject: [PATCH 072/124] Added debian into the main branch. --- resources/debian/Makefile | 13 + resources/debian/debian/changelog | 389 +++++++++++++++++++++++++ resources/debian/debian/compat | 1 + resources/debian/debian/control | 19 ++ resources/debian/debian/copyright | 10 + resources/debian/debian/docs | 1 + resources/debian/debian/openlp.install | 1 + resources/debian/debian/pycompat | 1 + resources/debian/debian/pyversions | 1 + resources/debian/debian/rules | 21 ++ 10 files changed, 457 insertions(+) create mode 100644 resources/debian/Makefile create mode 100644 resources/debian/debian/changelog create mode 100644 resources/debian/debian/compat create mode 100644 resources/debian/debian/control create mode 100644 resources/debian/debian/copyright create mode 100644 resources/debian/debian/docs create mode 100644 resources/debian/debian/openlp.install create mode 100644 resources/debian/debian/pycompat create mode 100644 resources/debian/debian/pyversions create mode 100755 resources/debian/debian/rules diff --git a/resources/debian/Makefile b/resources/debian/Makefile new file mode 100644 index 000000000..fd19cffb7 --- /dev/null +++ b/resources/debian/Makefile @@ -0,0 +1,13 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +build: + mkdir -p openlp/i18n + for TSFILE in resources/i18n/*.ts; do\ + lrelease-qt4 $$TSFILE -qm openlp/i18n/`basename $$TSFILE .ts`.qm;\ + done + +install: + +clean: + diff --git a/resources/debian/debian/changelog b/resources/debian/debian/changelog new file mode 100644 index 000000000..1d22843f1 --- /dev/null +++ b/resources/debian/debian/changelog @@ -0,0 +1,389 @@ +openlp (1.9.4+bzr1355-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sun, 06 Mar 2011 00:10:03 -0500 + +openlp (1.9.4+bzr1355-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sun, 06 Mar 2011 00:07:03 -0500 + +openlp (1.9.4+bzr1355-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sun, 06 Mar 2011 00:05:27 -0500 + +openlp (1.9.4+bzr1355-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sun, 06 Mar 2011 00:03:17 -0500 + +openlp (1.9.4+bzr1350-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sat, 05 Mar 2011 00:08:15 -0500 + +openlp (1.9.4+bzr1350-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sat, 05 Mar 2011 00:06:40 -0500 + +openlp (1.9.4+bzr1350-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sat, 05 Mar 2011 00:05:09 -0500 + +openlp (1.9.4+bzr1350-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sat, 05 Mar 2011 00:03:14 -0500 + +openlp (1.9.4+bzr1347-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Fri, 04 Mar 2011 00:04:49 -0500 + +openlp (1.9.4+bzr1347-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Fri, 04 Mar 2011 00:04:15 -0500 + +openlp (1.9.4+bzr1347-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Fri, 04 Mar 2011 00:03:34 -0500 + +openlp (1.9.4+bzr1347-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Fri, 04 Mar 2011 00:02:43 -0500 + +openlp (1.9.4+bzr1344-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Thu, 03 Mar 2011 00:03:56 -0500 + +openlp (1.9.4+bzr1344-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Thu, 03 Mar 2011 00:03:30 -0500 + +openlp (1.9.4+bzr1344-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Thu, 03 Mar 2011 00:03:05 -0500 + +openlp (1.9.4+bzr1344-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Thu, 03 Mar 2011 00:02:26 -0500 + +openlp (1.9.4+bzr1342-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Tue, 01 Mar 2011 00:03:44 -0500 + +openlp (1.9.4+bzr1342-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Tue, 01 Mar 2011 00:03:28 -0500 + +openlp (1.9.4+bzr1342-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Tue, 01 Mar 2011 00:03:03 -0500 + +openlp (1.9.4+bzr1342-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Tue, 01 Mar 2011 00:02:28 -0500 + +openlp (1.9.4+bzr1341-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sun, 27 Feb 2011 00:04:05 -0500 + +openlp (1.9.4+bzr1341-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sun, 27 Feb 2011 00:03:48 -0500 + +openlp (1.9.4+bzr1341-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sun, 27 Feb 2011 00:03:20 -0500 + +openlp (1.9.4+bzr1341-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sun, 27 Feb 2011 00:02:34 -0500 + +openlp (1.9.4+bzr1337-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sat, 26 Feb 2011 00:04:02 -0500 + +openlp (1.9.4+bzr1337-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sat, 26 Feb 2011 00:03:44 -0500 + +openlp (1.9.4+bzr1337-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sat, 26 Feb 2011 00:03:18 -0500 + +openlp (1.9.4+bzr1337-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sat, 26 Feb 2011 00:02:32 -0500 + +openlp (1.9.4+bzr1332-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Fri, 25 Feb 2011 00:04:00 -0500 + +openlp (1.9.4+bzr1332-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Fri, 25 Feb 2011 00:03:41 -0500 + +openlp (1.9.4+bzr1332-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Fri, 25 Feb 2011 00:03:16 -0500 + +openlp (1.9.4+bzr1332-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Fri, 25 Feb 2011 00:02:36 -0500 + +openlp (1.9.4+bzr1328-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Thu, 24 Feb 2011 00:03:47 -0500 + +openlp (1.9.4+bzr1328-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Thu, 24 Feb 2011 00:03:31 -0500 + +openlp (1.9.4+bzr1328-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Thu, 24 Feb 2011 00:03:07 -0500 + +openlp (1.9.4+bzr1328-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Thu, 24 Feb 2011 00:02:28 -0500 + +openlp (1.9.4+bzr1324-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Wed, 23 Feb 2011 00:03:48 -0500 + +openlp (1.9.4+bzr1324-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Wed, 23 Feb 2011 00:03:33 -0500 + +openlp (1.9.4+bzr1324-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Wed, 23 Feb 2011 00:03:08 -0500 + +openlp (1.9.4+bzr1324-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Wed, 23 Feb 2011 00:02:28 -0500 + +openlp (1.9.4+bzr1322-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Tue, 22 Feb 2011 00:04:06 -0500 + +openlp (1.9.4+bzr1322-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Tue, 22 Feb 2011 00:03:52 -0500 + +openlp (1.9.4+bzr1322-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Tue, 22 Feb 2011 00:03:28 -0500 + +openlp (1.9.4+bzr1322-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Tue, 22 Feb 2011 00:02:42 -0500 + +openlp (1.9.4+bzr1320-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Mon, 21 Feb 2011 00:03:59 -0500 + +openlp (1.9.4+bzr1320-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Mon, 21 Feb 2011 00:03:45 -0500 + +openlp (1.9.4+bzr1320-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Mon, 21 Feb 2011 00:03:21 -0500 + +openlp (1.9.4+bzr1320-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Mon, 21 Feb 2011 00:02:41 -0500 + +openlp (1.9.4+bzr1316-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sun, 20 Feb 2011 05:32:08 -0500 + +openlp (1.9.4+bzr1316-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sun, 20 Feb 2011 05:31:51 -0500 + +openlp (1.9.4+bzr1316-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sun, 20 Feb 2011 05:31:28 -0500 + +openlp (1.9.4+bzr1316-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sun, 20 Feb 2011 05:30:49 -0500 + +openlp (1.9.4+bzr1315-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 16:24:12 -0500 + +openlp (1.9.4+bzr1315-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 16:23:51 -0500 + +openlp (1.9.4+bzr1315-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 16:23:28 -0500 + +openlp (1.9.4+bzr1315-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 16:22:49 -0500 + +openlp (1.9.4+bzr1314-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 15:35:36 -0500 + +openlp (1.9.4+bzr1314-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 15:35:21 -0500 + +openlp (1.9.4+bzr1314-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 15:34:53 -0500 + +openlp (1.9.4+bzr1314-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 15:34:10 -0500 + +openlp (1.9.4+bzr1313-0ubuntu1~natty1) natty; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 13:58:14 -0500 + +openlp (1.9.4+bzr1313-0ubuntu1~maverick1) maverick; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 13:57:40 -0500 + +openlp (1.9.4+bzr1313-0ubuntu1~lucid1) lucid; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 13:57:11 -0500 + +openlp (1.9.4+bzr1313-0ubuntu1~karmic1) karmic; urgency=low + + * Autobuild + + -- Sat, 19 Feb 2011 13:56:17 -0500 + +openlp (0.0.0+bzr664-0ubuntu1) karmic; urgency=low + + * Initial release + + -- Michael Gorven Fri, 06 Nov 2009 09:46:40 +0200 diff --git a/resources/debian/debian/compat b/resources/debian/debian/compat new file mode 100644 index 000000000..7ed6ff82d --- /dev/null +++ b/resources/debian/debian/compat @@ -0,0 +1 @@ +5 diff --git a/resources/debian/debian/control b/resources/debian/debian/control new file mode 100644 index 000000000..220b500d2 --- /dev/null +++ b/resources/debian/debian/control @@ -0,0 +1,19 @@ +Source: openlp +Section: python +Priority: extra +Maintainer: OpenLP Developers +Build-Depends: cdbs, debhelper (>= 5), python-setuptools, python-support, + python, qt4-dev-tools +Standards-Version: 3.8.3 +Homepage: http://openlp.org/ + +Package: openlp +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, python-qt4, + python-qt4-phonon, python-sqlalchemy, python-chardet, python-beautifulsoup, + python-lxml, python-sqlite, python-enchant +Conflicts: python-openlp +Description: Church lyrics projection application + OpenLP is free church presentation software, or lyrics projection software, + used to display slides of songs, Bible verses, videos, images, and even + presentations for church worship using a computer and a data projector. diff --git a/resources/debian/debian/copyright b/resources/debian/debian/copyright new file mode 100644 index 000000000..54e52a356 --- /dev/null +++ b/resources/debian/debian/copyright @@ -0,0 +1,10 @@ +Format-Specification: http://wiki.debian.org/Proposals/CopyrightFormat +Upstream-Name: OpenLP +Upstream-Maintainer: OpenLP Developers +Upstream-Source: http://openlp.org/ + +Files: * +Copyright: (c) 2008-2009 Raoul Snyman +License: GPL-2 +X-Comment: On Debian GNU/Linux systems, the complete text of the + GPL-2 License can be found in /usr/share/common-licenses/GPL-2 diff --git a/resources/debian/debian/docs b/resources/debian/debian/docs new file mode 100644 index 000000000..dfcaa10d3 --- /dev/null +++ b/resources/debian/debian/docs @@ -0,0 +1 @@ +documentation diff --git a/resources/debian/debian/openlp.install b/resources/debian/debian/openlp.install new file mode 100644 index 000000000..5ef4e79ce --- /dev/null +++ b/resources/debian/debian/openlp.install @@ -0,0 +1 @@ +resources/openlp.desktop /usr/share/applications diff --git a/resources/debian/debian/pycompat b/resources/debian/debian/pycompat new file mode 100644 index 000000000..0cfbf0888 --- /dev/null +++ b/resources/debian/debian/pycompat @@ -0,0 +1 @@ +2 diff --git a/resources/debian/debian/pyversions b/resources/debian/debian/pyversions new file mode 100644 index 000000000..b3dc41ebc --- /dev/null +++ b/resources/debian/debian/pyversions @@ -0,0 +1 @@ +2.5- diff --git a/resources/debian/debian/rules b/resources/debian/debian/rules new file mode 100755 index 000000000..18a593660 --- /dev/null +++ b/resources/debian/debian/rules @@ -0,0 +1,21 @@ +#!/usr/bin/make -f + +DEB_PYTHON_SYSTEM := pysupport +DEB_MAKE_BUILD_TARGET := build +DEB_MAKE_INSTALL_TARGET := +DEB_MAKE_CLEAN_TARGET := + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/python-distutils.mk +include /usr/share/cdbs/1/class/makefile.mk + +binary-post-install/openlp:: + for SIZE in 16x16 32x32 48x48 64x64 128x128 256x256; do \ + mkdir -p debian/openlp/usr/share/icons/hicolor/$$SIZE/apps && \ + cp resources/images/openlp-logo-$$SIZE.png debian/openlp/usr/share/icons/hicolor/$$SIZE/apps/openlp.png; \ + done + + mkdir -p debian/openlp/usr/share/icons/hicolor/scalable/apps && \ + cp resources/images/openlp-logo.svg debian/openlp/usr/share/icons/hicolor/scalable/apps/openlp.svg + + cd debian/openlp/usr/bin/ && mv openlp.pyw openlp From c7a435951df7d6eefcadc05ed37a09dd11358cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 9 Mar 2011 09:17:58 +0200 Subject: [PATCH 073/124] Better code, as suggested and a few suggested fixes as well. --- openlp/core/ui/servicemanager.py | 142 ++++++++++++++----------------- 1 file changed, 66 insertions(+), 76 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 164147c06..703c5ebc4 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -415,84 +415,74 @@ class ServiceManager(QtGui.QWidget): """ if not self.fileName(): return self.saveFileAs() - else: - path_file_name = unicode(self.fileName()) - (path, file_name) = os.path.split(path_file_name) - basename = file_name[0:file_name.rfind(u'.')-1] - service_file_name = basename + '.osd' - log.debug(u'ServiceManager.saveFile - %s' % path_file_name) - SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, - path) - service = [] - zip = None - try: - write_list = [] - total_size = 0 - for item in self.serviceItems: - service.append({u'serviceitem': - item[u'service_item'].get_service_repr()}) - if item[u'service_item'].uses_file(): - for frame in item[u'service_item'].get_frames(): - if item[u'service_item'].is_image(): - path_from = frame[u'path'] - else: - path_from = os.path.join(frame[u'path'], - frame[u'title']) - # Only write a file once - if not path_from in write_list: - file_size = os.path.getsize(path_from) - size_limit = 52428800 # 50MiB - if file_size > size_limit: - # File exeeds size_limit bytes, ask user - message = unicode(translate( - 'OpenLP.ServiceManager', 'Do you want' - ' to include \n%.1f MB file "%s"\n' - 'into the service file?\n' - 'This may take some time.\n\n' - 'Please note that you need to\n' - 'take care of that file yourself,\n' - 'if you leave it out.')) %\ - (file_size/1048576, - os.path.split(path_from)[1]) - ans = QtGui.QMessageBox.question( - self.mainwindow, - translate('OpenLP.ServiceManager', - 'Including Large File'), - message, - QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Ok|\ - QtGui.QMessageBox.Cancel), - QtGui.QMessageBox.Ok) - if ans == QtGui.QMessageBox.Ok: - write_list.append(path_from) - total_size += file_size - else: - write_list.append(path_from) - total_size += file_size - log.debug(u'ServiceManager.saveFile - ZIP contents size is %i' - ' bytes' % total_size) - service_content = cPickle.dumps(service) - # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be - # extracted using unzip in UNIX. - allow_zip_64 = (total_size > 2147483648 + len(service_content)) - log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % - allow_zip_64) - zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, - allow_zip_64) - # We first add service contents. - # We save ALL filenames into ZIP using UTF-8. - zip.writestr(service_file_name.encode(u'utf-8'), - service_content) - # Finally add all the listed media files. - for path_from in write_list: - zip.write(path_from, path_from.encode(u'utf-8')) - zip.close() - except IOError: - log.exception(u'Failed to save service to disk') - return False + path_file_name = unicode(self.fileName()) + (path, file_name) = os.path.split(path_file_name) + basename = file_name[0:file_name.rfind(u'.')-1] + service_file_name = basename + '.osd' + log.debug(u'ServiceManager.saveFile - %s' % path_file_name) + SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, + path) + service = [] + write_list = [] + total_size = 0 + for item in self.serviceItems: + service.append({u'serviceitem': + item[u'service_item'].get_service_repr()}) + if not item[u'service_item'].uses_file(): + continue + for frame in item[u'service_item'].get_frames(): + if item[u'service_item'].is_image(): + path_from = frame[u'path'] + else: + path_from = os.path.join(frame[u'path'], frame[u'title']) + # Only write a file once + if path_from in write_list: + continue + file_size = os.path.getsize(path_from) + size_limit = 52428800 # 50MiB + if file_size > size_limit: + # File exeeds size_limit bytes, ask user + message = unicode(translate('OpenLP.ServiceManager', + 'Do you want to include \n%.1f MB file "%s"\n' + 'into the service file?\nThis may take some time.\n\n' + 'Please note that you need to\ntake care of that file ' + 'yourself,\nif you leave it out.')) % \ + (file_size/1048576, os.path.split(path_from)[1]) + ans = QtGui.QMessageBox.question(self.mainwindow, + translate('OpenLP.ServiceManager', 'Including Large ' + 'File'), message, QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), + QtGui.QMessageBox.Ok) + if ans == QtGui.QMessageBox.Cancel: + continue + write_list.append(path_from) + total_size += file_size + log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % + total_size) + service_content = cPickle.dumps(service) + # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be + # extracted using unzip in UNIX. + allow_zip_64 = (total_size > 2147483648 + len(service_content)) + log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % + allow_zip_64) + try: + zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, + allow_zip_64) + # First we add service contents. + # We save ALL filenames into ZIP using UTF-8. + zip.writestr(service_file_name.encode(u'utf-8'), + service_content) + # Finally add all the listed media files. + for path_from in write_list: + zip.write(path_from, path_from.encode(u'utf-8')) + except IOError: + log.exception(u'Failed to save service to disk') + finally: + zip.close() self.mainwindow.addRecentFile(path_file_name) self.setModified(False) - return True + return True + return False def saveFileAs(self): """ From 6b437a120c79ae5bdb595da84e0a006c9bdb0e2f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 9 Mar 2011 18:16:40 +0200 Subject: [PATCH 074/124] Updated the look and feel of the language form. Fixed up the welcome page of the wizard. --- openlp/core/ui/firsttimeform.py | 2 +- openlp/core/ui/firsttimelanguagedialog.py | 51 +- openlp/core/ui/firsttimelanguageform.py | 11 +- openlp/core/ui/firsttimewizard.py | 102 +-- resources/i18n/af.ts | 871 +++++++++++++-------- resources/i18n/de.ts | 352 +++++++-- resources/i18n/en.ts | 352 +++++++-- resources/i18n/en_GB.ts | 352 +++++++-- resources/i18n/en_ZA.ts | 857 ++++++++++++-------- resources/i18n/es.ts | 352 +++++++-- resources/i18n/et.ts | 352 +++++++-- resources/i18n/fr.ts | 352 +++++++-- resources/i18n/hu.ts | 352 +++++++-- resources/i18n/id.ts | 352 +++++++-- resources/i18n/ja.ts | 874 +++++++++++++-------- resources/i18n/ko.ts | 352 +++++++-- resources/i18n/nb.ts | 352 +++++++-- resources/i18n/nl.ts | 509 ++++++++---- resources/i18n/pt_BR.ts | 909 +++++++++++++--------- resources/i18n/ru.ts | 352 +++++++-- resources/i18n/sv.ts | 406 +++++++--- resources/images/openlp-2.qrc | 1 + resources/images/wizard_firsttime.bmp | Bin 0 -> 172254 bytes 23 files changed, 5802 insertions(+), 2663 deletions(-) create mode 100644 resources/images/wizard_firsttime.bmp diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 88cd7a5cc..40f2a23e2 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -48,6 +48,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): log.info(u'ThemeWizardForm loaded') def __init__(self, screens, parent=None): + QtGui.QWizard.__init__(self, parent) # check to see if we have web access self.web = u'http://openlp.org/files/frw/' self.config = ConfigParser.ConfigParser() @@ -55,7 +56,6 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) - QtGui.QWizard.__init__(self, parent) self.setupUi(self) for screen in screens.get_screen_list(): self.displaySelectionComboBox.addItem(screen) diff --git a/openlp/core/ui/firsttimelanguagedialog.py b/openlp/core/ui/firsttimelanguagedialog.py index fbf817939..ae44abeb5 100644 --- a/openlp/core/ui/firsttimelanguagedialog.py +++ b/openlp/core/ui/firsttimelanguagedialog.py @@ -30,26 +30,37 @@ from openlp.core.lib import translate from openlp.core.lib.ui import create_accept_reject_button_box class Ui_FirstTimeLanguageDialog(object): - def setupUi(self, firstTimeLanguageDialog): - firstTimeLanguageDialog.setObjectName(u'firstTimeLanguageDialog') - firstTimeLanguageDialog.resize(300, 10) - self.dialogLayout = QtGui.QGridLayout(firstTimeLanguageDialog) + def setupUi(self, languageDialog): + languageDialog.setObjectName(u'languageDialog') + languageDialog.resize(300, 50) + self.dialogLayout = QtGui.QVBoxLayout(languageDialog) + self.dialogLayout.setContentsMargins(8, 8, 8, 8) + self.dialogLayout.setSpacing(8) self.dialogLayout.setObjectName(u'dialogLayout') - self.fileNameLabel = QtGui.QLabel(firstTimeLanguageDialog) - self.fileNameLabel.setObjectName(u'fileNameLabel') - self.dialogLayout.addWidget(self.fileNameLabel, 0, 0) - self.LanguageComboBox = QtGui.QComboBox(firstTimeLanguageDialog) - self.LanguageComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) - self.LanguageComboBox.setObjectName("LanguageComboBox") - self.dialogLayout.addWidget(self.LanguageComboBox, 0, 1) - self.buttonBox = create_accept_reject_button_box(firstTimeLanguageDialog, True) - self.dialogLayout.addWidget(self.buttonBox, 1, 0, 1, 2) - self.retranslateUi(firstTimeLanguageDialog) - self.setMaximumHeight(self.sizeHint().height()) - QtCore.QMetaObject.connectSlotsByName(firstTimeLanguageDialog) + self.infoLabel = QtGui.QLabel(languageDialog) + self.infoLabel.setObjectName(u'infoLabel') + self.dialogLayout.addWidget(self.infoLabel) + self.languageLayout = QtGui.QHBoxLayout() + self.languageLayout.setObjectName(u'languageLayout') + self.languageLabel = QtGui.QLabel(languageDialog) + self.languageLabel.setObjectName(u'languageLabel') + self.languageLayout.addWidget(self.languageLabel) + self.languageComboBox = QtGui.QComboBox(languageDialog) + self.languageComboBox.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) + self.languageComboBox.setObjectName("languageComboBox") + self.languageLayout.addWidget(self.languageComboBox) + self.dialogLayout.addLayout(self.languageLayout) + self.buttonBox = create_accept_reject_button_box(languageDialog, True) + self.dialogLayout.addWidget(self.buttonBox) - def retranslateUi(self, firstTimeLanguageDialog): + self.retranslateUi(languageDialog) + self.setMaximumHeight(self.sizeHint().height()) + QtCore.QMetaObject.connectSlotsByName(languageDialog) + + def retranslateUi(self, languageDialog): self.setWindowTitle(translate('OpenLP.FirstTimeLanguageForm', - 'Initial Set up Language')) - self.fileNameLabel.setText(translate('OpenLP.FirstTimeLanguageForm', - 'Initial Language:')) + 'Select Translation')) + self.infoLabel.setText(translate('OpenLP.FirstTimeLanguageForm', + 'Choose the translation you\'d like to use in OpenLP.')) + self.languageLabel.setText(translate('OpenLP.FirstTimeLanguageForm', + 'Translation:')) diff --git a/openlp/core/ui/firsttimelanguageform.py b/openlp/core/ui/firsttimelanguageform.py index 98489fde7..a8ce3bd57 100644 --- a/openlp/core/ui/firsttimelanguageform.py +++ b/openlp/core/ui/firsttimelanguageform.py @@ -26,10 +26,9 @@ from PyQt4 import QtGui -from firsttimelanguagedialog import Ui_FirstTimeLanguageDialog - from openlp.core.lib import translate from openlp.core.utils import LanguageManager +from firsttimelanguagedialog import Ui_FirstTimeLanguageDialog class FirstTimeLanguageForm(QtGui.QDialog, Ui_FirstTimeLanguageDialog): """ @@ -39,9 +38,9 @@ class FirstTimeLanguageForm(QtGui.QDialog, Ui_FirstTimeLanguageDialog): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.qmList = LanguageManager.get_qm_list() - self.LanguageComboBox.addItem(u'Automatic') + self.languageComboBox.addItem(u'Autodetect') for key in sorted(self.qmList.keys()): - self.LanguageComboBox.addItem(key) + self.languageComboBox.addItem(key) def exec_(self): """ @@ -51,13 +50,13 @@ class FirstTimeLanguageForm(QtGui.QDialog, Ui_FirstTimeLanguageDialog): def accept(self): # It's the first row so must be Automatic - if self.LanguageComboBox.currentIndex() == 0: + if self.languageComboBox.currentIndex() == 0: LanguageManager.auto_language = True LanguageManager.set_language(False, False) else: LanguageManager.auto_language = False action = QtGui.QAction(None) - action.setObjectName(unicode(self.LanguageComboBox.currentText())) + action.setObjectName(unicode(self.languageComboBox.currentText())) LanguageManager.set_language(action, False) return QtGui.QDialog.accept(self) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index ee14b6b0e..299160b3f 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -27,7 +27,7 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import translate - +from openlp.core.lib.ui import add_welcome_page class Ui_FirstTimeWizard(object): def setupUi(self, FirstTimeWizard): @@ -37,86 +37,50 @@ class Ui_FirstTimeWizard(object): FirstTimeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages| QtGui.QWizard.NoBackButtonOnStartPage) - self.welcomePage = QtGui.QWizardPage() - self.welcomePage.setTitle(u'') - self.welcomePage.setSubTitle(u'') - self.welcomePage.setObjectName(u'welcomePage') - self.welcomeLayout = QtGui.QHBoxLayout(self.welcomePage) - self.welcomeLayout.setSpacing(8) - self.welcomeLayout.setMargin(0) - self.welcomeLayout.setObjectName(u'welcomeLayout') - self.importBibleImage = QtGui.QLabel(self.welcomePage) - self.importBibleImage.setMinimumSize(QtCore.QSize(163, 0)) - self.importBibleImage.setMaximumSize(QtCore.QSize(163, 16777215)) - self.importBibleImage.setLineWidth(0) - self.importBibleImage.setText(u'') - self.importBibleImage.setPixmap( - QtGui.QPixmap(u':/wizards/wizard_importbible.bmp')) - self.importBibleImage.setIndent(0) - self.importBibleImage.setObjectName(u'importBibleImage') - self.welcomeLayout.addWidget(self.importBibleImage) - self.welcomePageLayout = QtGui.QVBoxLayout() - self.welcomePageLayout.setSpacing(8) - self.welcomePageLayout.setObjectName(u'welcomePageLayout') - self.titleLabel = QtGui.QLabel(self.welcomePage) - self.titleLabel.setObjectName(u'titleLabel') - self.welcomePageLayout.addWidget(self.titleLabel) - spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, - QtGui.QSizePolicy.Fixed) - self.welcomePageLayout.addItem(spacerItem) - self.informationLabel = QtGui.QLabel(self.welcomePage) - self.informationLabel.setWordWrap(True) - self.informationLabel.setMargin(10) - self.informationLabel.setObjectName(u'informationLabel') - self.welcomePageLayout.addWidget(self.informationLabel) - spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, - QtGui.QSizePolicy.Expanding) - self.welcomePageLayout.addItem(spacerItem1) - self.welcomeLayout.addLayout(self.welcomePageLayout) - FirstTimeWizard.addPage(self.welcomePage) - self.PluginPagePage = QtGui.QWizardPage() - self.PluginPagePage.setObjectName(u'PluginPagePage') - self.verticalLayout_2 = QtGui.QVBoxLayout(self.PluginPagePage) - self.verticalLayout_2.setObjectName(u'verticalLayout_2') - self.verticalLayout = QtGui.QVBoxLayout() - self.verticalLayout.setObjectName(u'verticalLayout') - self.songsCheckBox = QtGui.QCheckBox(self.PluginPagePage) + add_welcome_page(FirstTimeWizard, u':/wizards/wizard_firsttime.bmp') + # The plugins page + self.pluginPage = QtGui.QWizardPage() + self.pluginPage.setObjectName(u'pluginPage') + self.pluginLayout = QtGui.QVBoxLayout(self.pluginPage) + self.pluginLayout.setContentsMargins(40, 15, 40, 0) + self.pluginLayout.setObjectName(u'pluginLayout') + self.songsCheckBox = QtGui.QCheckBox(self.pluginPage) self.songsCheckBox.setChecked(True) self.songsCheckBox.setObjectName(u'songsCheckBox') - self.verticalLayout.addWidget(self.songsCheckBox) - self.customCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.songsCheckBox) + self.customCheckBox = QtGui.QCheckBox(self.pluginPage) self.customCheckBox.setChecked(True) self.customCheckBox.setObjectName(u'customCheckBox') - self.verticalLayout.addWidget(self.customCheckBox) - self.bibleCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.customCheckBox) + self.bibleCheckBox = QtGui.QCheckBox(self.pluginPage) self.bibleCheckBox.setChecked(True) self.bibleCheckBox.setObjectName(u'bibleCheckBox') - self.verticalLayout.addWidget(self.bibleCheckBox) - self.imageCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.bibleCheckBox) + self.imageCheckBox = QtGui.QCheckBox(self.pluginPage) self.imageCheckBox.setChecked(True) self.imageCheckBox.setObjectName(u'imageCheckBox') - self.verticalLayout.addWidget(self.imageCheckBox) - self.presentationCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.imageCheckBox) + self.presentationCheckBox = QtGui.QCheckBox(self.pluginPage) self.presentationCheckBox.setChecked(True) self.presentationCheckBox.setObjectName(u'presentationCheckBox') - self.verticalLayout.addWidget(self.presentationCheckBox) - self.mediaCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.presentationCheckBox) + self.mediaCheckBox = QtGui.QCheckBox(self.pluginPage) self.mediaCheckBox.setChecked(True) self.mediaCheckBox.setObjectName(u'mediaCheckBox') - self.verticalLayout.addWidget(self.mediaCheckBox) - self.remoteCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.mediaCheckBox) + self.remoteCheckBox = QtGui.QCheckBox(self.pluginPage) self.remoteCheckBox.setObjectName(u'remoteCheckBox') - self.verticalLayout.addWidget(self.remoteCheckBox) - self.songUsageCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.remoteCheckBox) + self.songUsageCheckBox = QtGui.QCheckBox(self.pluginPage) self.songUsageCheckBox.setChecked(True) self.songUsageCheckBox.setObjectName(u'songUsageCheckBox') - self.verticalLayout.addWidget(self.songUsageCheckBox) - self.alertCheckBox = QtGui.QCheckBox(self.PluginPagePage) + self.pluginLayout.addWidget(self.songUsageCheckBox) + self.alertCheckBox = QtGui.QCheckBox(self.pluginPage) self.alertCheckBox.setChecked(True) self.alertCheckBox.setObjectName(u'alertCheckBox') - self.verticalLayout.addWidget(self.alertCheckBox) - self.verticalLayout_2.addLayout(self.verticalLayout) - FirstTimeWizard.addPage(self.PluginPagePage) + self.pluginLayout.addWidget(self.alertCheckBox) + FirstTimeWizard.addPage(self.pluginPage) + # The song samples page self.downloadDefaultsPage = QtGui.QWizardPage() self.downloadDefaultsPage.setObjectName(u'downloadDefaultsPage') self.noInternetLabel = QtGui.QLabel(self.downloadDefaultsPage) @@ -125,8 +89,8 @@ class Ui_FirstTimeWizard(object): self.internetGroupBox = QtGui.QGroupBox(self.downloadDefaultsPage) self.internetGroupBox.setGeometry(QtCore.QRect(20, 10, 501, 271)) self.internetGroupBox.setObjectName(u'internetGroupBox') - self.verticalLayout_4 = QtGui.QVBoxLayout(self.internetGroupBox) - self.verticalLayout_4.setObjectName(u'verticalLayout_4') + self.pluginLayout_4 = QtGui.QVBoxLayout(self.internetGroupBox) + self.pluginLayout_4.setObjectName(u'pluginLayout_4') self.selectionTreeWidget = QtGui.QTreeWidget(self.internetGroupBox) self.selectionTreeWidget.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) @@ -135,7 +99,7 @@ class Ui_FirstTimeWizard(object): self.selectionTreeWidget.setObjectName(u'selectionTreeWidget') self.selectionTreeWidget.headerItem().setText(0, u'1') self.selectionTreeWidget.header().setVisible(False) - self.verticalLayout_4.addWidget(self.selectionTreeWidget) + self.pluginLayout_4.addWidget(self.selectionTreeWidget) FirstTimeWizard.addPage(self.downloadDefaultsPage) self.DefaultsPage = QtGui.QWizardPage() self.DefaultsPage.setObjectName(u'DefaultsPage') @@ -185,9 +149,9 @@ class Ui_FirstTimeWizard(object): 'This wizard will help you to configure OpenLP for initial use .' ' Click the next button below to start the process of selection ' 'your initial options. ')) - self.PluginPagePage.setTitle(translate('OpenLP.FirstTimeWizard', + self.pluginPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Activate required Plugins')) - self.PluginPagePage.setSubTitle(translate('OpenLP.FirstTimeWizard', + self.pluginPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select the Plugins you wish to use. ')) self.songsCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Songs')) self.customCheckBox.setText(translate('OpenLP.FirstTimeWizard', diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index f9d3e7117..17dd303f3 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -23,7 +23,8 @@ Gaan steeds voort? The alert text does not contain '<>'. Do you want to continue anyway? - + Die attent-teks bevat nie '<>' nie. +Gaan steeds voort? @@ -154,28 +155,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s Testament invoer... %s - + Importing testaments... done. Testament invoer... voltooi. - + Importing books... %s Boek invoer... %s - + Importing verses from %s... Importing verses from <book name>... Vers invoer vanaf %s... - + Importing verses... done. Vers invoer... voltooi. @@ -529,7 +530,7 @@ Veranderinge affekteer nie verse wat reeds in die diens is nie. Bybel Bestaan reeds - + Your Bible import failed. Die Bybel invoer het misluk. @@ -544,12 +545,12 @@ Veranderinge affekteer nie verse wat reeds in die diens is nie. Hierdie Bybel bestaan reeds. Voer asseblief 'n ander Bybel in of wis eers die bestaande een uit. - + Starting Registering bible... Begin Bybel registrasie... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Geregistreerde bybel. Neem kennis daarvan dat verse op aanvraag @@ -672,7 +673,7 @@ afgelaai word en dus word 'n Internet konneksie benodig. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Invoer %s %s... @@ -681,12 +682,12 @@ afgelaai word en dus word 'n Internet konneksie benodig. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Bepaal enkodering (dit mag 'n paar minuute neem)... - + Importing %s %s... Importing <book name> <chapter>... Invoer %s %s... @@ -1086,17 +1087,17 @@ Vind meer uit oor OpenLP: http://openlp.org/ OpenLP is geskryf en word onderhou deur vrywilligers. As u graag wil sien dat meer Christelike sagteware geskryf word, oorweeg dit asseblief om by te dra deur die knoppie hieronder te gebruik. - + Credits Krediete - + License Lisensie - + Contribute Dra By @@ -1106,7 +1107,28 @@ OpenLP is geskryf en word onderhou deur vrywilligers. As u graag wil sien dat me bou %s - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + Kopiereg © 2004-2011 Raoul Snyman +Gedeeltelike kopiereg © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + 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; version 2 of the License. + Hierdie program is gratis sagteware; dit kan verspei en/of verander word onder die terme van die GNU Algemene Publieke Lisensie soos deur die Gratis Sagteware Vondasie gepubliseer is; weergawe 2 van die Lisensie. + + + + 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 below for more details. + Hierdie program word versprei in die hoop dat dit nuttig sal wees, maar SONDER ENIGE WAARBORG; sonder die geïmpliseerde waarborg van VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL. Sien hieronder vir meer inligting. + + + Project Lead %s @@ -1122,6 +1144,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1141,24 +1192,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1326,12 +1359,12 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Attach File - + Heg 'n Lêer aan Description characters to enter : %s - + Beskrywende karakters om in te voer: %s @@ -1340,17 +1373,18 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Platform: %s - + Platvorm: %s + Save Crash Report - + Stoor Bots Verslag Text files (*.txt *.log *.text) - + Teks lêers (*.txt *.log *.text) @@ -1368,7 +1402,20 @@ Version: %s --- Library Versions --- %s - + **OpenLP Bug Report** +Version: %s + +--- Details of the Exception. --- + +%s + + --- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + @@ -1387,7 +1434,20 @@ Version: %s %s Please add the information that bug reports are favoured written in English. - + *OpenLP Bug Report* +Version: %s + +--- Details of the Exception. --- + +%s + + --- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + @@ -1395,16 +1455,167 @@ Version: %s File Rename - + Lêer Hernoem New File Name: - + Nuwe Lêer Naam: File Copy + Lêer Kopieër + + + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + Beelde + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP @@ -1523,18 +1734,18 @@ Version: %s Check for updates to OpenLP - + Kyk vir opdaterings van OpenLP OpenLP.LanguageManager - + Language Taal - + Please restart OpenLP to use your new language setting. Herlaai asseblief OpenLP om die nuwe taal instelling te gebruik. @@ -1544,7 +1755,7 @@ Version: %s OpenLP Display - + OpenLP Vertooning @@ -1895,7 +2106,7 @@ Version: %s Verstel die skou modus na Regstreeks. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1904,22 +2115,22 @@ You can download the latest version from http://openlp.org/. Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. - + OpenLP Version Updated OpenLP Weergawe is Opdateer - + OpenLP Main Display Blanked OpenLP Hoof Vertoning Blanko - + The Main Display has been blanked out Die Hoof Skerm is afgeskakel - + Default Theme: %s Verstek Tema: %s @@ -1932,42 +2143,42 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. Configure &Shortcuts... - + Konfigureer Kortpaaie - + Close OpenLP - + Mook OpenLP toe - + Are you sure you want to close OpenLP? - + Maak OpenLP sekerlik toe? Print the current Service Order. - + Druk die huidige Diens Bestelling. Ctrl+P - + Ctrl+P Open &Data Folder... - + Maak &Data Lêer oop... Open the folder where songs, bibles and other data resides. - + Maak die lêer waar liedere, bybels en ander data is, oop. &Configure Display Tags - + Konfigureer Vertoon Haakies @@ -2061,12 +2272,12 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. Fit Page - + Pas Blaai Fit Width - + Pas Wydte @@ -2074,62 +2285,62 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. Options - + Opsies Close - + Close Copy - + Kopieër Copy as HTML - + Kopieër as HTML Zoom In - + Zoom In Zoom Out - + Zoem Uit Zoom Original - + Zoem Oorspronklike Other Options - + Ander Opsies Include slide text if available - + Sluit skyfie teks in indien beskikbaar Include service item notes - + Sluit diens item notas in Include play length of media items - + Sluit die speel tyd van die media items in Service Order Sheet - + Diens Bestelling Blad @@ -2137,12 +2348,12 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. Screen - + Skerm primary - + primêr @@ -2263,39 +2474,39 @@ Die inhoud enkodering is nie UTF-8 nie. Lêer is nie 'n geldige diens nie. - + Missing Display Handler Vermisde Vertoon Hanteerder - + Your item cannot be displayed as there is no handler to display it Die item kan nie vertoon word nie omdat daar nie 'n hanteerder is om dit te vertoon nie - + Your item cannot be displayed as the plugin required to display it is missing or inactive Die item kan nie vertoon word nie omdat die mini-program wat dit moet vertoon vermis of onaktief is &Expand all - + Br&ei alles uit Expand all the service items. - + Brei al die diens items uit. &Collapse all - + Stort alles ineen Collapse all the service items. - + Stort al die diens items ineen @@ -2305,62 +2516,62 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP Service Files (*.osz) - + OpenLP Diens Lêers (*.osz) Moves the selection down the window. - + Skuif die geselekteerde afwaarts in die venster. Move up - + Skuif op Moves the selection up the window. - + Skuif die geselekteerde opwaarts in die venster. Go Live - + Gaan Regstreeks Send the selected item to Live. - + Stuur die geselekteerde item Regstreeks Modified Service - + Redigeer Diens Notes: - + Notas: &Start Time - + Begin Tyd Show &Preview - + Wys Voorskou Show &Live - + Vertoon Regstreeks The current service has been modified. Would you like to save this service? - + Die huidige diens was verander. Stoor hierdie diens? @@ -2384,140 +2595,140 @@ Die inhoud enkodering is nie UTF-8 nie. Customize Shortcuts - + Verpersoonlik Kortpaaie Action - + Aksie Shortcut - + Kortpad Default: %s - + Verstek: %s Custom: - + Persoonlik: None - + Geen Duplicate Shortcut - + Duplikaat Kortpad The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Die kortpad "%s" is alreeds toegeken aan 'n ander aksie, kies asseblief 'n ander kortpad. Alternate - + Alternatief OpenLP.SlideController - + Move to previous Beweeg na vorige - + Move to next Beweeg na volgende - + Hide Verskuil - + Move to live Verskuif na regstreekse skerm - + Start continuous loop Begin aaneenlopende lus - + Stop continuous loop Stop deurlopende lus - + Delay between slides in seconds Vertraging tussen skyfies in sekondes - + Start playing media Begin media speel - + Go To Gaan Na - + Edit and reload song preview Redigeer en laai weer 'n lied voorskou - + Blank Screen - + Blanko Skerm Blank to Theme - + Blanko na Tema - + Show Desktop - + Wys Werkskerm - + Previous Slide - + Vorige Skyfie - + Next Slide - + Volgende Skyfie - + Previous Service - + Vorige Diens - + Next Service - + Volgende Diens - + Escape Item - + Ontsnap Item @@ -2538,32 +2749,32 @@ Die inhoud enkodering is nie UTF-8 nie. Item Start Time - + Item Begin Tyd Hours: - + Ure: h - + h m - + m Minutes: - + Minute: Seconds: - + Sekondes: @@ -2571,32 +2782,32 @@ Die inhoud enkodering is nie UTF-8 nie. Select Image - Selekteer beeld + Selekteer Beeld Theme Name Missing - + Tema Naam Vermis There is no name for this theme. Please enter one. - + Daar is nie 'n naam vir hierdie tema nie. Voer asseblief een in. Theme Name Invalid - + Tema Naam Ongeldig Invalid theme name. Please enter one. - + Ongeldige tema naam. Voer asseblief een in. (%d lines per slide) - + (%d lyne per skyfie) @@ -2662,131 +2873,131 @@ Die inhoud enkodering is nie UTF-8 nie. Stel in As &Globale Standaard - + %s (default) %s (standaard) - + You must select a theme to edit. Kies 'n tema om te redigeer. - + You are unable to delete the default theme. Die standaard tema kan nie uitgewis word nie. - + You have not selected a theme. Geen tema is geselekteer nie. - + Save Theme - (%s) Stoor Tema - (%s) - + Theme Exported Tema Uitvoer - + Your theme has been successfully exported. Die tema was suksesvol uitgevoer. - + Theme Export Failed Tema Uitvoer het Misluk - + Your theme could not be exported due to an error. Die tema kon nie uitgevoer word nie weens 'n fout. - + Select Theme Import File Kies Tema Invoer Lêer - + File is not a valid theme. The content encoding is not UTF-8. Lêer is nie 'n geldige tema nie. Die inhoud enkodering is nie UTF-8 nie. - + File is not a valid theme. Lêer is nie 'n geldige tema nie. - + Theme %s is used in the %s plugin. Tema %s is in gebruik deur die %s mini-program. &Copy Theme - + &Kopieër Tema &Rename Theme - + He&rnoem Tema &Export Theme - + Vo&er Tema uit - + You must select a theme to rename. - + Kies 'n tema om te hernoem. - + Rename Confirmation - + Hernoem Bevestiging - + Rename %s theme? - + Hernoem %s tema? - + You must select a theme to delete. - + Kies 'n tema om uit te wis. - + Delete Confirmation - + Uitwis Bevestiging - + Delete %s theme? - + Wis %s tema uit? - + Validation Error - + Validerings Fout - + A theme with this name already exists. - + 'n Tema met hierdie naam bestaan alreeds. - + OpenLP Themes (*.theme *.otz) - + OpenLP Temas (*.theme *.otz) @@ -2794,27 +3005,27 @@ Die inhoud enkodering is nie UTF-8 nie. Theme Wizard - + Tema Gids Welcome to the Theme Wizard - + Welkom by die Tema Gids Set Up Background - + Stel die Agtergrond Op Set up your theme's background according to the parameters below. - + Stel jou tema se agtergrond op volgens die parameters hier onder. Background type: - + Agtergrond tipe: @@ -2854,22 +3065,22 @@ Die inhoud enkodering is nie UTF-8 nie. Top Left - Bottom Right - + Links Bo - Regs Onder Bottom Left - Top Right - + Links Onder - Regs Bo Main Area Font Details - + Hoof Area Skrif Gegewens Define the font and display characteristics for the Display text - + Definieër die skrif en vertoon karrakters vir die Vertoon teks @@ -2884,17 +3095,17 @@ Die inhoud enkodering is nie UTF-8 nie. Line Spacing: - + Lyn Spasiëring: &Outline: - + Buitelyn: &Shadow: - + &Skaduwee: @@ -2904,32 +3115,32 @@ Die inhoud enkodering is nie UTF-8 nie. Italic - + Italiaans Footer Area Font Details - + Voetskrif Area Skrif Gegewens Define the font and display characteristics for the Footer text - + Definieër die skrif en vertoon karraktereienskappe vir die Voetskrif teks Text Formatting Details - + Teks Formattering Gegewens Allows additional display formatting information to be defined - + Laat toe dat addisionele vertoon formattering inligting gedifinieër word Horizontal Align: - + Horisontale Sporing: @@ -2949,22 +3160,22 @@ Die inhoud enkodering is nie UTF-8 nie. Output Area Locations - + Uitvoer Area Liggings Allows you to change and move the main and footer areas. - + Laat toe dat die hoof en voetskrif areas verander en geskuif word. &Main Area - + Hoof Area &Use default location - + Gebr&uik verstek ligging @@ -2999,37 +3210,37 @@ Die inhoud enkodering is nie UTF-8 nie. Save and Preview - + Stoor en Voorskou View the theme and save it replacing the current one or change the name to create a new theme - + Besigtig die tema en stoor dit waarna die huidige een vervang, of verander die naam om 'n nuwe een te skep Theme name: - + Tema naam: This wizard will help you to create and edit your themes. Click the next button below to start the process by setting up your background. - + Hierdie gids sal help om temas te skep en te redigeer. Klik die volgende knoppie hieronder om die proses te begin deur jou agtergrond op te stel. Transitions: - + Oorskakel effekte: &Footer Area - + Voetskrif Area Edit Theme - %s - + Redigeer Tema - %s @@ -3090,22 +3301,22 @@ Die inhoud enkodering is nie UTF-8 nie. Delete the selected item. - + Wis die geselekteerde item uit. Move selection up one position. - + Skuif die seleksie een posisie op. Move selection down one position. - + Skuif die seleksie een posisie af. &Add - + &Voeg by @@ -3130,12 +3341,12 @@ Die inhoud enkodering is nie UTF-8 nie. Import - + Voer in Length %s - + Lengte %s @@ -3145,12 +3356,12 @@ Die inhoud enkodering is nie UTF-8 nie. Load - + Laai New - + Nuwe @@ -3185,7 +3396,7 @@ Die inhoud enkodering is nie UTF-8 nie. Reset Background - + Herstel Agtergrond @@ -3200,17 +3411,17 @@ Die inhoud enkodering is nie UTF-8 nie. Service - + Diens Start %s - + Begin %s &Vertical Align: - + &Vertikale Sporing: @@ -3240,7 +3451,7 @@ Die inhoud enkodering is nie UTF-8 nie. Cancel - + Kanselleer @@ -3250,12 +3461,12 @@ Die inhoud enkodering is nie UTF-8 nie. Empty Field - + Leë Veld Export - + Uitvoer @@ -3271,12 +3482,12 @@ Die inhoud enkodering is nie UTF-8 nie. Live Background Error - + Regstreekse Agtergrond Fout Live Panel - + Regstreekse Paneel @@ -3287,25 +3498,25 @@ Die inhoud enkodering is nie UTF-8 nie. No File Selected Singular - + Geen Lêer Geselekteer nie No Files Selected Plural - + Geen Leêrs Geselekteer nie No Item Selected Singular - + Geen Item Geselekteer nie No Items Selected Plural - Geen item geselekteer nie + Geen items geselekteer nie @@ -3315,12 +3526,12 @@ Die inhoud enkodering is nie UTF-8 nie. Preview Panel - + Voorskou Paneel Print Service Order - + Druk Diens Orde @@ -3341,7 +3552,7 @@ Die inhoud enkodering is nie UTF-8 nie. You must select an item to delete. - + Kies 'n item om uit te wis. @@ -3363,7 +3574,7 @@ Die inhoud enkodering is nie UTF-8 nie. Version - + Weergawe @@ -3393,7 +3604,7 @@ Die inhoud enkodering is nie UTF-8 nie. Select the import format and the location to import from. - + Selekteer die invoer vormaat en die ligging vanwaar invoer geskied. @@ -3403,7 +3614,7 @@ Die inhoud enkodering is nie UTF-8 nie. Open %s File - + Maak %s Lêer Oop @@ -3424,7 +3635,7 @@ Die inhoud enkodering is nie UTF-8 nie. You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Spesifiseer ten minste een %s lêer om vanaf in te voer. @@ -3434,7 +3645,7 @@ Die inhoud enkodering is nie UTF-8 nie. Welcome to the Song Export Wizard - + Welkom by die Lied Uitvoer Gids @@ -3445,13 +3656,13 @@ Die inhoud enkodering is nie UTF-8 nie. Author Singular - + Outeur Authors Plural - Skrywers + Outeure @@ -3494,7 +3705,7 @@ Die inhoud enkodering is nie UTF-8 nie. Configure Display Tags - + Konfigureer Vertoon Hakkies @@ -3507,27 +3718,27 @@ Die inhoud enkodering is nie UTF-8 nie. Load a new Presentation - + Laai 'n nuwe Aanbiedieng Delete the selected Presentation - + Wis die geselekteerde Aanbieding uit Preview the selected Presentation - + Sien voorskou van die geselekteerde Aanbieding Send the selected Presentation live - + Stuur die geselekteerde Aanbieding regstreeks Add the selected Presentation to the service - + Voeg die geselekteerde Aanbieding by die diens @@ -3588,22 +3799,22 @@ Die inhoud enkodering is nie UTF-8 nie. Presentations (%s) - + Aanbiedinge (%s) Missing Presentation - + Vermisde Aanbieding The Presentation %s no longer exists. - + Die Aanbieding %s bestaan nie meer nie. The Presentation %s is incomplete, please reload. - + Die Aanbieding %s is onvolledig, herlaai asseblief. @@ -3621,7 +3832,7 @@ Die inhoud enkodering is nie UTF-8 nie. %s (unavailable) - + %s (nie beskikbaar nie) @@ -3635,7 +3846,7 @@ Die inhoud enkodering is nie UTF-8 nie. Remote name singular - + Afstandbeheer @@ -3647,7 +3858,7 @@ Die inhoud enkodering is nie UTF-8 nie. Remote container title - + Afstandbeheer @@ -3714,19 +3925,19 @@ Die inhoud enkodering is nie UTF-8 nie. SongUsage name singular - + SongUsage SongUsage name plural - + SongUsage SongUsage container title - + SongUsage @@ -3749,12 +3960,12 @@ Die inhoud enkodering is nie UTF-8 nie. Deletion Successful - + Uitwissing Suksesvol All requested data has been deleted successfully. - + Al die gevraagde data is suksesvol uitgewis. @@ -3787,19 +3998,21 @@ Die inhoud enkodering is nie UTF-8 nie. usage_detail_%s_%s.txt - + usage_detail_%s_%s.txt Report Creation - + Verslag Skepping Report %s has been successfully created. - + Verslag + %s +was suksesvol geskep. @@ -3822,47 +4035,47 @@ has been successfully created. &Re-index Songs - + He&r-indeks Liedere Re-index the songs database to improve searching and ordering. - + Her-indeks die liedere databasis om lied-soektogte en organisering te verbeter. Reindexing songs... - + Besig om liedere indek te herskep... Add a new Song - + Voeg 'n nuwe Lied by Edit the selected Song - + Redigeer die geselekteerde Lied Delete the selected Song - + Wis die geselekteerde Lied uit Preview the selected Song - + Skou die geselekteerde Lied Send the selected Song live - + Stuur die geselekteerde Lied regstreeks Add the selected Song to the service - + Voeg die geselekteerde Lied by die diens @@ -3885,95 +4098,99 @@ has been successfully created. Arabic (CP-1256) - + Arabies (CP-1256) Baltic (CP-1257) - + Balties (CP-1257) Central European (CP-1250) - + Sentraal Europees (CP-1250) Cyrillic (CP-1251) - + Cyrillies (CP-1251) Greek (CP-1253) - + Grieks (CP-1253) Hebrew (CP-1255) - + Hebreeus (CP-1255) Japanese (CP-932) - + Japanees (CP-932) Korean (CP-949) - + Koreaans (CP-949) Simplified Chinese (CP-936) - + Vereenvoudigde Chinees (CP-936) Thai (CP-874) - + Thai (CP-874) Traditional Chinese (CP-950) - + Tradisionele Chinees (CP-950) Turkish (CP-1254) - + Turks (CP-1254) Vietnam (CP-1258) - + Viëtnamees (CP-1258) Western European (CP-1252) - + Wes-Europees (CP-1252) Character Encoding - + Karrakter Enkodering The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + Die kodeblad instelling is verantwoordelik +vir die korrekte karrakter voorstelling. +Gewoonlik is die reeds-geselekteerde +keuse voldoende. Please choose the character encoding. The encoding is responsible for the correct character representation. - + Kies asseblief die karrakter enkodering. +Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. Exports songs using the export wizard. - + Voer liedere uit deur gebruik te maak van die uitvoer gids. @@ -4019,7 +4236,7 @@ The encoding is responsible for the correct character representation. Importing song %d of %d - + Voer lied %d van %d in @@ -4197,12 +4414,12 @@ The encoding is responsible for the correct character representation. You need to have an author for this song. - + Daar word 'n outeur benodig vir hierdie lied. You need to type some text in to the verse. - + Daar word teks benodig vir die vers. @@ -4228,82 +4445,82 @@ The encoding is responsible for the correct character representation. Song Export Wizard - + Lied Uitvoer Gids This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Hierdie gids sal help om die liedere na die oop en gratis OpenLyrics aanbiddigs-formaat uit te voer. Select Songs - + Kies Liedere Uncheck All - + Merk Alles Af Check All - + Merk Alles Aan Select Directory - + Kies Lêer-gids Select the directory you want the songs to be saved. - + Kies die gids waar die liedere gestoor moet word. Directory: - + Lêer Gids: Exporting - + Uitvoer Please wait while your songs are exported. - + Wag asseblief terwyl die liedere uitgevoer word. You need to add at least one Song to export. - + Ten minste een lied moet bygevoeg word om uit te voer. No Save Location specified - + Geen Stoor Ligging gespesifiseer nie Starting export... - + Uitvoer begin... Check the songs you want to export. - + Merk die liediere wat uitgevoer moet vord. You need to specify a directory. - + 'n Lêer gids moet gespesifiseer word. Select Destination Folder - + Kies Bestemming Lêer gids @@ -4371,42 +4588,42 @@ The encoding is responsible for the correct character representation. OpenLP 2.0 Databases - + OpenLP 2.0 Databasisse openlp.org v1.x Databases - + openlp.org v1.x Databasisse Words Of Worship Song Files - + Words Of Worship Lied Lêers Songs Of Fellowship Song Files - + Songs Of Fellowship Lied Lêers SongBeamer Files - + SongBeamer Lêers SongShow Plus Song Files - + SongShow Plus Lied Lêers You need to specify at least one document or presentation file to import from. - + Ten minste een document of aanbieding moet gespesifiseer word om vanaf in te voer. Foilpresenter Song Files - + Foilpresenter Lied Lêers @@ -4427,25 +4644,25 @@ The encoding is responsible for the correct character representation. Lirieke - + Delete Song(s)? Wis Lied(ere) uit? CCLI License: - + CCLI Lisensie: Entire Song - + Volledige Lied - + Are you sure you want to delete the %n selected song(s)? - - + + Wis regtig die %n geselekteerde lied(ere)? @@ -4455,7 +4672,7 @@ The encoding is responsible for the correct character representation. Importing song %d of %d. - + Voer lied %d van %d in @@ -4463,7 +4680,7 @@ The encoding is responsible for the correct character representation. Exporting "%s"... - + Uitvoer "%s"... @@ -4494,12 +4711,12 @@ The encoding is responsible for the correct character representation. Finished export. - + Uitvoer voltooi. Your song export failed. - + Die lied uitvoer het misluk. @@ -4613,17 +4830,17 @@ The encoding is responsible for the correct character representation. The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + Die outeur %s bestaan alreeds. Moet liedere met die outeur %s die bestaande outeur %s gebruik? The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + Die onderwerp %s bestaan alreeds. Moet liedere met die onderwerp %s die bestaande onderwerp %s gebruik? The book %s already exists. Would you like to make songs with book %s use the existing book %s? - + Die boek %s bestaan reeds. Moed liedere met die doek %s gebruik maak van bestaande boek %s? @@ -4646,12 +4863,12 @@ The encoding is responsible for the correct character representation. Update service from song edit - + Opdateer diens van lied-redigering Add missing songs when opening service - + Voer vermisde liedere by wanneer die diens oopgemaak word diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index e3a09b405..9b628a52d 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -154,28 +154,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -517,7 +517,7 @@ Changes do not affect verses already in the service. Übersetzung bereits vorhanden - + Your Bible import failed. Der Bibelimport ist fehlgeschlagen. @@ -537,12 +537,12 @@ Changes do not affect verses already in the service. Diese Bibel existiert bereit. Bitte geben Sie einen anderen Übersetzungsnamen an oder löschen Sie zuerst die Existierende. - + Starting Registering bible... Starte Erfassung der Bibel... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Erfassung abgeschlossen. @@ -666,7 +666,7 @@ Daher ist eine Verbindung zum Internet erforderlich. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %s wird importiert... @@ -675,12 +675,12 @@ Daher ist eine Verbindung zum Internet erforderlich. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kodierung wird ermittelt (dies kann etwas dauern)... - + Importing %s %s... Importing <book name> <chapter>... %s %s wird importiert... @@ -1080,17 +1080,17 @@ Erkunden Sie OpenLP: http://openlp.org/ OpenLP wird von freiwiligen Helfern programmiert und gewartet. Wenn Sie sich mehr freie christliche Programme wünschen, ermutigen wir Sie, sich doch sich zu beteiligen und den Knopf weiter unten nutzen. - + Credits Danksagungen - + License Lizenz - + Contribute Mitmachen @@ -1100,7 +1100,25 @@ OpenLP wird von freiwiligen Helfern programmiert und gewartet. Wenn Sie sich meh build %s - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1116,6 +1134,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1135,24 +1182,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1403,6 +1432,157 @@ Version: %s Datei kopieren + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + Lieder + + + + Bibles + Bibeln + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + Bibeltext + + + + Images + Bilder + + + + Presentations + Präsentationen + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1524,12 +1704,12 @@ Version: %s OpenLP.LanguageManager - + Language Sprache - + Please restart OpenLP to use your new language setting. Bitte starten Sie OpenLP neu, um die neue Spracheinstellung zu verwenden. @@ -1890,27 +2070,27 @@ Version: %s Die Ansicht für den Live-Betrieb optimieren. - + OpenLP Version Updated Neue OpenLP Version verfügbar - + OpenLP Main Display Blanked Hauptbildschirm abgedunkelt - + The Main Display has been blanked out Die Projektion ist momentan nicht aktiv. - + Default Theme: %s Standarddesign: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1930,12 +2110,12 @@ Sie können die letzte Version auf http://openlp.org abrufen. &Tastenkürzel einrichten... - + Close OpenLP OpenLP beenden - + Are you sure you want to close OpenLP? Sind Sie sicher, dass OpenLP beendet werden soll? @@ -2258,17 +2438,17 @@ Der Inhalt ist nicht in UTF-8 kodiert. Die Datei ist keine gültige OpenLP Ablaufdatei. - + Missing Display Handler Fehlende Anzeigesteuerung - + Your item cannot be displayed as there is no handler to display it Dieses Element kann nicht angezeigt werden, da es keine Steuerung dafür gibt. - + Your item cannot be displayed as the plugin required to display it is missing or inactive Dieses Element kann nicht angezeigt werden, da die zugehörige Erweiterung fehlt oder inaktiv ist. @@ -2425,57 +2605,57 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.SlideController - + Move to previous Vorherige Seite anzeigen - + Move to next Nächste Seite anzeigen - + Hide Verbergen - + Move to live Zur Live Ansicht verschieben - + Start continuous loop Endlosschleife starten - + Stop continuous loop Endlosschleife stoppen - + Delay between slides in seconds Pause zwischen den Folien in Sekunden - + Start playing media Abspielen - + Go To Gehe zu - + Edit and reload song preview Bearbeiten und Liedvorschau aktualisieren - + Blank Screen Anzeige abdunkeln @@ -2485,32 +2665,32 @@ Der Inhalt ist nicht in UTF-8 kodiert. Design leeren - + Show Desktop Desktop anzeigen - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2632,69 +2812,69 @@ Der Inhalt ist nicht in UTF-8 kodiert. Als &globalen Standard setzen - + %s (default) %s (standard) - + You must select a theme to edit. Zum Bearbeiten muss ein Design ausgewählt sein. - + You are unable to delete the default theme. Es ist nicht möglich das Standarddesign zu entfernen. - + You have not selected a theme. Es ist kein Design ausgewählt. - + Save Theme - (%s) Speicherort für »%s« - + Theme Exported Design exportiert - + Your theme has been successfully exported. Das Design wurde erfolgreich exportiert. - + Theme Export Failed Designexport fehlgeschlagen - + Your theme could not be exported due to an error. Dieses Design konnte aufgrund eines Fehlers nicht exportiert werden. - + Select Theme Import File OpenLP Designdatei importieren - + File is not a valid theme. The content encoding is not UTF-8. Die Datei ist keine gültige OpenLP Designdatei. Sie ist nicht in UTF-8 kodiert. - + File is not a valid theme. Diese Datei ist keine gültige OpenLP Designdatei. - + Theme %s is used in the %s plugin. Das Design %s wird in der %s Erweiterung benutzt. @@ -2714,42 +2894,42 @@ Sie ist nicht in UTF-8 kodiert. Design &exportieren - + You must select a theme to rename. Es ist kein Design zur Umbenennung ausgewählt. - + Rename Confirmation Umbenennung bestätigen - + Rename %s theme? Soll das Design »%s« wirklich umbenennt werden? - + You must select a theme to delete. Es ist kein Design zum Löschen ausgewählt. - + Delete Confirmation Löschbestätigung - + Delete %s theme? Sott das Design »%s« wirklich gelöscht werden? - + Validation Error - + A theme with this name already exists. Ein Design mit diesem Namen existiert bereits. @@ -2779,7 +2959,7 @@ Sie ist nicht in UTF-8 kodiert. - + OpenLP Themes (*.theme *.otz) OpenLP Designs (*.theme *.otz) @@ -4423,7 +4603,7 @@ Usually you are fine with the preselected choice. Liedtext - + Delete Song(s)? Lied(er) löschen? @@ -4438,7 +4618,7 @@ Usually you are fine with the preselected choice. Ganzes Lied - + Are you sure you want to delete the %n selected song(s)? Sind Sie sicher, dass das Lied gelöscht werden soll? diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index 0dcfa3e8b..11ff4d7f3 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -153,28 +153,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -529,7 +529,7 @@ Changes do not affect verses already in the service. - + Your Bible import failed. @@ -539,12 +539,12 @@ Changes do not affect verses already in the service. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -661,7 +661,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -670,12 +670,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1068,17 +1068,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License - + Contribute @@ -1088,7 +1088,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1104,6 +1122,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1123,24 +1170,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1389,6 +1418,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1510,12 +1690,12 @@ Version: %s OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1876,29 +2056,29 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -1914,12 +2094,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2246,17 +2426,17 @@ The content encoding is not UTF-8. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2408,57 +2588,57 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Move to previous - + Move to next - + Hide - + Move to live - + Edit and reload song preview - + Start continuous loop - + Stop continuous loop - + Delay between slides in seconds - + Start playing media - + Go To - + Blank Screen @@ -2468,32 +2648,32 @@ The content encoding is not UTF-8. - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2640,68 +2820,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. @@ -2721,47 +2901,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4404,7 +4584,7 @@ The encoding is responsible for the correct character representation. - + Delete Song(s)? @@ -4419,7 +4599,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index 9f8f7f560..8ed8984a9 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -153,28 +153,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -520,7 +520,7 @@ Changes do not affect verses already in the service. Bible Exists - + Your Bible import failed. Your Bible import failed. @@ -535,12 +535,12 @@ Changes do not affect verses already in the service. This Bible already exists. Please import a different Bible or first delete the existing one. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -662,7 +662,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -671,12 +671,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1075,17 +1075,17 @@ Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - + Credits Credits - + License Licence - + Contribute Contribute @@ -1095,7 +1095,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr build %s - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1111,6 +1129,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1130,24 +1177,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1396,6 +1425,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1517,12 +1697,12 @@ Version: %s OpenLP.LanguageManager - + Language Language - + Please restart OpenLP to use your new language setting. Please restart OpenLP to use your new language setting. @@ -1883,7 +2063,7 @@ Version: %s Set the view mode to Live. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1891,22 +2071,22 @@ You can download the latest version from http://openlp.org/. You can download the latest version from http://openlp.org/. - + OpenLP Version Updated OpenLP Version Updated - + OpenLP Main Display Blanked OpenLP Main Display Blanked - + The Main Display has been blanked out The Main Display has been blanked out - + Default Theme: %s Default Theme: %s @@ -1922,12 +2102,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2250,17 +2430,17 @@ The content encoding is not UTF-8. File is not a valid service. - + Missing Display Handler Missing Display Handler - + Your item cannot be displayed as there is no handler to display it Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2417,57 +2597,57 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Move to previous Move to previous - + Move to next Move to next - + Hide Hide - + Move to live Move to live - + Start continuous loop Start continuous loop - + Stop continuous loop Stop continuous loop - + Delay between slides in seconds Delay between slides in seconds - + Start playing media Start playing media - + Go To Go To - + Edit and reload song preview Edit and reload song preview - + Blank Screen @@ -2477,32 +2657,32 @@ The content encoding is not UTF-8. - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2649,69 +2829,69 @@ The content encoding is not UTF-8. Set As &Global Default - + %s (default) %s (default) - + You must select a theme to edit. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. - + You have not selected a theme. You have not selected a theme. - + Save Theme - (%s) Save Theme - (%s) - + Theme Exported Theme Exported - + Your theme has been successfully exported. Your theme has been successfully exported. - + Theme Export Failed Theme Export Failed - + Your theme could not be exported due to an error. Your theme could not be exported due to an error. - + Select Theme Import File Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. File is not a valid theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. @@ -2731,47 +2911,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4414,7 +4594,7 @@ The encoding is responsible for the correct character representation. Lyrics - + Delete Song(s)? Delete Song(s)? @@ -4429,7 +4609,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index 3b6dffb0d..bb54aba46 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -155,28 +155,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s Importing testaments... %s - + Importing testaments... done. Importing testaments... done. - + Importing books... %s Importing books... %s - + Importing verses from %s... Importing verses from <book name>... Importing verses from %s... - + Importing verses... done. Importing verses... done. @@ -530,7 +530,7 @@ Changes do not affect verses already in the service. Bible Exists - + Your Bible import failed. Your Bible import failed. @@ -545,12 +545,12 @@ Changes do not affect verses already in the service. This Bible already exists. Please import a different Bible or first delete the existing one. - + Starting Registering bible... Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Registered bible. Please note, that verses will be downloaded on @@ -570,37 +570,37 @@ demand and thus an internet connection is required. Bibleserver - + Bibleserver Bible file: - + Bible file: Testaments file: - + Testaments file: Books file: - + Books file: Verses file: - + Verses file: You have not specified a testaments file. Do you want to proceed with the import? - + You have not specified a testaments file. Do you want to proceed with the import? openlp.org 1.x Bible Files - + openlp.org 1.x Bible Files @@ -668,30 +668,30 @@ demand and thus an internet connection is required. Scripture Reference - + Scripture Reference BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... - + Importing %s %s... BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... - + Importing %s %s... @@ -905,7 +905,7 @@ demand and thus an internet connection is required. Select Attachment - + Select Attachment @@ -928,23 +928,24 @@ demand and thus an internet connection is required. Missing Image(s) - + Missing Image(s) The following image(s) no longer exist: %s - + The following image(s) no longer exist: %s The following image(s) no longer exist: %s Do you want to add the other images anyway? - + The following image(s) no longer exist: %s +Do you want to add the other images anyway? There was a problem replacing your background, the image file "%s" no longer exists. - + There was a problem replacing your background, the image file "%s" no longer exists. @@ -1023,12 +1024,12 @@ Do you want to add the other images anyway? Missing Media File - + Missing Media File The file %s no longer exists. - + The file %s no longer exists. @@ -1038,12 +1039,12 @@ Do you want to add the other images anyway? There was a problem replacing your background, the media file "%s" no longer exists. - + There was a problem replacing your background, the media file "%s" no longer exists. Videos (%s);;Audio (%s);;%s (*) - + Videos (%s);;Audio (%s);;%s (*) @@ -1087,17 +1088,17 @@ Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - + Credits Credits - + License License - + Contribute Contribute @@ -1107,7 +1108,28 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr build %s - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + 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; version 2 of the License. + 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; version 2 of the License. + + + + 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 below for more details. + 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 below for more details. + + + Project Lead %s @@ -1123,6 +1145,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1142,24 +1193,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1191,37 +1224,37 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Enable application exit confirmation - + Enable application exit confirmation Mouse Cursor - + Mouse Cursor Hide mouse cursor when over display window - + Hide mouse cursor when over display window Default Image - + Default Image Background color: - Background color: + Background colour: Image file: - + Image file: Open File - + Open File @@ -1229,52 +1262,52 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Edit Selection - + Edit Selection Update - + Update Description - + Description Tag - + Tag Start tag - + Start tag End tag - + End tag Default - + Default Tag id - + Tag Id Start Html - + Start HTML End Html - + End HTML @@ -1282,17 +1315,17 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Update Error - + Update Error Tag "n" already defined. - + Tag "n" already defined. Tag %s already defined. - + Tag %s already defined. @@ -1310,28 +1343,29 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Send E-Mail - + Send E-Mail Save to File - + Save to File Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Please enter a description of what you were doing to cause this error +(Minimum 20 characters) Attach File - + Attach File Description characters to enter : %s - + Description characters to enter : %s @@ -1340,17 +1374,18 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Platform: %s - + Platform: %s + Save Crash Report - + Save Crash Report Text files (*.txt *.log *.text) - + Text files (*.txt *.log *.text) @@ -1368,7 +1403,20 @@ Version: %s --- Library Versions --- %s - + **OpenLP Bug Report** +Version: %s + +--- Details of the Exception. --- + +%s + + --- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + @@ -1387,7 +1435,20 @@ Version: %s %s Please add the information that bug reports are favoured written in English. - + *OpenLP Bug Report* +Version: %s + +--- Details of the Exception. --- + +%s + + --- Exception Traceback --- +%s +--- System information --- +%s +--- Library Versions --- +%s + @@ -1405,6 +1466,157 @@ Version: %s File Copy + File Copy + + + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP @@ -1523,18 +1735,18 @@ Version: %s Check for updates to OpenLP - + Check for updates to OpenLP OpenLP.LanguageManager - + Language Language - + Please restart OpenLP to use your new language setting. Please restart OpenLP to use your new language setting. @@ -1544,7 +1756,7 @@ Version: %s OpenLP Display - + OpenLP Display @@ -1895,27 +2107,27 @@ Version: %s Set the view mode to Live. - + OpenLP Version Updated OpenLP Version Updated - + OpenLP Main Display Blanked OpenLP Main Display Blanked - + The Main Display has been blanked out The Main Display has been blanked out - + Default Theme: %s Default Theme: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1935,39 +2147,39 @@ You can download the latest version from http://openlp.org/. Configure &Shortcuts... - + Close OpenLP - + Close OpenLP - + Are you sure you want to close OpenLP? - + Are you sure you want to close OpenLP? Print the current Service Order. - + Print the current Service Order. Ctrl+P - + Ctrl+P Open &Data Folder... - + Open &Data Folder... Open the folder where songs, bibles and other data resides. - + Open the folder where songs, Bibles and other data resides. &Configure Display Tags - + &Configure Display Tags @@ -2061,12 +2273,12 @@ You can download the latest version from http://openlp.org/. Fit Page - + Fit Page Fit Width - + Fit Width @@ -2074,62 +2286,62 @@ You can download the latest version from http://openlp.org/. Options - + Options Close - + Close Copy - + Copy Copy as HTML - + Copy as HTML Zoom In - + Zoom In Zoom Out - + Zoom Out Zoom Original - + Zoom Original Other Options - + Other Options Include slide text if available - + Include slide text if available Include service item notes - + Include service item notes Include play length of media items - + Include play length of media items Service Order Sheet - + Service Order Sheet @@ -2137,12 +2349,12 @@ You can download the latest version from http://openlp.org/. Screen - + Screen primary - + primary @@ -2263,17 +2475,17 @@ The content encoding is not UTF-8. File is not a valid service. - + Missing Display Handler Missing Display Handler - + Your item cannot be displayed as there is no handler to display it Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2300,67 +2512,67 @@ The content encoding is not UTF-8. Open File - + Open File OpenLP Service Files (*.osz) - + OpenLP Service Files (*.osz) Moves the selection down the window. - + Moves the selection down the window. Move up - + Move up Moves the selection up the window. - + Moves the selection up the window. Go Live - + Go Live Send the selected item to Live. - + Send the selected item to Live. Modified Service - + Modified Service Notes: - + Notes: &Start Time - + &Start Time Show &Preview - + Show &Preview Show &Live - + Show &Live The current service has been modified. Would you like to save this service? - + The current service has been modified. Would you like to save this service? @@ -2424,63 +2636,63 @@ The content encoding is not UTF-8. Alternate - + Alternate OpenLP.SlideController - + Move to previous Move to previous - + Move to next Move to next - + Hide Hide - + Move to live Move to live - + Start continuous loop Start continuous loop - + Stop continuous loop Stop continuous loop - + Delay between slides in seconds Delay between slides in seconds - + Start playing media Start playing media - + Go To Go To - + Edit and reload song preview Edit and reload song preview - + Blank Screen Blank Screen @@ -2490,34 +2702,34 @@ The content encoding is not UTF-8. Blank to Theme - + Show Desktop Show Desktop - + Previous Slide - + Previous Slide - + Next Slide - + Next Slide - + Previous Service - + Previous Service - + Next Service - + Next Service - + Escape Item - + Escape Item @@ -2538,32 +2750,32 @@ The content encoding is not UTF-8. Item Start Time - + Item Start Time Hours: - + Hours: h - + h m - + m Minutes: - + Minutes: Seconds: - + Seconds: @@ -2662,69 +2874,69 @@ The content encoding is not UTF-8. Set As &Global Default - + %s (default) %s (default) - + You must select a theme to edit. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. - + You have not selected a theme. You have not selected a theme. - + Save Theme - (%s) Save Theme - (%s) - + Theme Exported Theme Exported - + Your theme has been successfully exported. Your theme has been successfully exported. - + Theme Export Failed Theme Export Failed - + Your theme could not be exported due to an error. Your theme could not be exported due to an error. - + Select Theme Import File Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. File is not a valid theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. @@ -2744,49 +2956,49 @@ The content encoding is not UTF-8. &Export Theme - + You must select a theme to rename. - + You must select a theme to rename. - + Rename Confirmation - + Rename Confirmation - + Rename %s theme? - + Rename %s theme? - + You must select a theme to delete. - + You must select a theme to delete. - + Delete Confirmation - + Delete Confirmation - + Delete %s theme? - + Delete %s theme? - + Validation Error - + Validation Error - + A theme with this name already exists. - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + OpenLP Themes (*.theme *.otz) @@ -2829,7 +3041,7 @@ The content encoding is not UTF-8. Color: - Color: + Colour: @@ -2949,22 +3161,22 @@ The content encoding is not UTF-8. Output Area Locations - + Output Area Locations Allows you to change and move the main and footer areas. - + Allows you to change and move the main and footer areas. &Main Area - + &Main Area &Use default location - + &Use default location @@ -2999,37 +3211,37 @@ The content encoding is not UTF-8. Save and Preview - + Save and Preview View the theme and save it replacing the current one or change the name to create a new theme - + View the theme and save it replacing the current one or change the name to create a new theme Theme name: - + Theme name: This wizard will help you to create and edit your themes. Click the next button below to start the process by setting up your background. - + This wizard will help you to create and edit your themes. Click the next button below to start the process by setting up your background. Transitions: - + Transitions: &Footer Area - + &Footer Area Edit Theme - %s - + Edit Theme - %s @@ -3090,17 +3302,17 @@ The content encoding is not UTF-8. Delete the selected item. - + Delete the selected item. Move selection up one position. - + Move selection up one position. Move selection down one position. - + Move selection down one position. @@ -3135,7 +3347,7 @@ The content encoding is not UTF-8. Length %s - + Length %s @@ -3150,7 +3362,7 @@ The content encoding is not UTF-8. New - + New @@ -3185,7 +3397,7 @@ The content encoding is not UTF-8. Reset Background - + Reset Background @@ -3205,12 +3417,12 @@ The content encoding is not UTF-8. Start %s - + Start %s &Vertical Align: - + &Vertical Align: @@ -3240,7 +3452,7 @@ The content encoding is not UTF-8. Cancel - + Cancel @@ -3250,12 +3462,12 @@ The content encoding is not UTF-8. Empty Field - + Empty Field Export - + Export @@ -3271,12 +3483,12 @@ The content encoding is not UTF-8. Live Background Error - + Live Background Error Live Panel - + Live Panel @@ -3287,19 +3499,19 @@ The content encoding is not UTF-8. No File Selected Singular - + No File Selected No Files Selected Plural - + No Files Selected No Item Selected Singular - + No Item Selected @@ -3315,12 +3527,12 @@ The content encoding is not UTF-8. Preview Panel - + Preview Panel Print Service Order - + Print Service Order @@ -3363,7 +3575,7 @@ The content encoding is not UTF-8. Version - + Version @@ -3393,7 +3605,7 @@ The content encoding is not UTF-8. Select the import format and the location to import from. - + Select the import format and the location to import from. @@ -3403,7 +3615,7 @@ The content encoding is not UTF-8. Open %s File - + Open %s File @@ -3424,7 +3636,7 @@ The content encoding is not UTF-8. You need to specify at least one %s file to import from. A file type e.g. OpenSong - + You need to specify at least one %s file to import from. @@ -3434,7 +3646,7 @@ The content encoding is not UTF-8. Welcome to the Song Export Wizard - + Welcome to the Song Export Wizard @@ -3445,7 +3657,7 @@ The content encoding is not UTF-8. Author Singular - + Author @@ -3494,7 +3706,7 @@ The content encoding is not UTF-8. Configure Display Tags - + Configure Display Tags @@ -3507,27 +3719,27 @@ The content encoding is not UTF-8. Load a new Presentation - + Load a new Presentation Delete the selected Presentation - + Delete the selected Presentation Preview the selected Presentation - + Preview the selected Presentation Send the selected Presentation live - + Send the selected Presentation live Add the selected Presentation to the service - + Add the selected Presentation to the service @@ -3588,22 +3800,22 @@ The content encoding is not UTF-8. Presentations (%s) - + Presentations (%s) Missing Presentation - + Missing Presentation The Presentation %s no longer exists. - + The Presentation %s no longer exists. The Presentation %s is incomplete, please reload. - + The Presentation %s is incomplete, please reload. @@ -3621,7 +3833,7 @@ The content encoding is not UTF-8. %s (unavailable) - + %s (unavailable) @@ -3635,7 +3847,7 @@ The content encoding is not UTF-8. Remote name singular - + Remote @@ -3647,7 +3859,7 @@ The content encoding is not UTF-8. Remote container title - + Remote @@ -3714,19 +3926,19 @@ The content encoding is not UTF-8. SongUsage name singular - + SongUsage SongUsage name plural - + SongUsage SongUsage container title - + SongUsage @@ -3749,12 +3961,12 @@ The content encoding is not UTF-8. Deletion Successful - + Deletion Successful All requested data has been deleted successfully. - + All requested data has been deleted successfully. @@ -3787,19 +3999,21 @@ The content encoding is not UTF-8. usage_detail_%s_%s.txt - + usage_detail_%s_%s.txt Report Creation - + Report Creation Report %s has been successfully created. - + Report +%s +has been successfully created. @@ -3822,47 +4036,47 @@ has been successfully created. &Re-index Songs - + &Re-index Songs Re-index the songs database to improve searching and ordering. - + Re-index the songs database to improve searching and ordering. Reindexing songs... - + Reindexing songs... Add a new Song - + Add a new Song Edit the selected Song - + Edit the selected Song Delete the selected Song - + Delete the selected Song Preview the selected Song - + Preview the selected Song Send the selected Song live - + Send the selected Song live Add the selected Song to the service - + Add the selected Song to the service @@ -3885,95 +4099,98 @@ has been successfully created. Arabic (CP-1256) - + Arabic (CP-1256) Baltic (CP-1257) - + Baltic (CP-1257) Central European (CP-1250) - + Central European (CP-1250) Cyrillic (CP-1251) - + Cyrillic (CP-1251) Greek (CP-1253) - + Greek (CP-1253) Hebrew (CP-1255) - + Hebrew (CP-1255) Japanese (CP-932) - + Japanese (CP-932) Korean (CP-949) - + Korean (CP-949) Simplified Chinese (CP-936) - + Simplified Chinese (CP-936) Thai (CP-874) - + Thai (CP-874) Traditional Chinese (CP-950) - + Traditional Chinese (CP-950) Turkish (CP-1254) - + Turkish (CP-1254) Vietnam (CP-1258) - + Vietnam (CP-1258) Western European (CP-1252) - + Western European (CP-1252) Character Encoding - + Character Encoding The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - + The codepage setting is responsible +for the correct character representation. +Usually you are fine with the preselected choice. Please choose the character encoding. The encoding is responsible for the correct character representation. - + Please choose the character encoding. +The encoding is responsible for the correct character representation. Exports songs using the export wizard. - + Exports songs using the export wizard. @@ -4019,7 +4236,7 @@ The encoding is responsible for the correct character representation. Importing song %d of %d - + Importing song %d of %d @@ -4197,12 +4414,12 @@ The encoding is responsible for the correct character representation. You need to have an author for this song. - + You need to have an author for this song. You need to type some text in to the verse. - + You need to type some text in to the verse. @@ -4228,82 +4445,82 @@ The encoding is responsible for the correct character representation. Song Export Wizard - + Song Export Wizard This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + This wizard will help to export your songs to the open and free OpenLyrics worship song format. Select Songs - + Select Songs Uncheck All - + Uncheck All Check All - + Check All Select Directory - + Select Directory Select the directory you want the songs to be saved. - + Select the directory you want the songs to be saved. Directory: - + Directory: Exporting - + Exporting Please wait while your songs are exported. - + Please wait while your songs are exported. You need to add at least one Song to export. - + You need to add at least one Song to export. No Save Location specified - + No Save Location specified Starting export... - + Starting export... Check the songs you want to export. - + Check the songs you want to export. You need to specify a directory. - + You need to specify a directory. Select Destination Folder - + Select Destination Folder @@ -4371,42 +4588,42 @@ The encoding is responsible for the correct character representation. OpenLP 2.0 Databases - + OpenLP 2.0 Databases openlp.org v1.x Databases - + openlp.org v1.x Databases Words Of Worship Song Files - + Words Of Worship Song Files Songs Of Fellowship Song Files - + Songs Of Fellowship Song Files SongBeamer Files - + SongBeamer Files SongShow Plus Song Files - + SongShow Plus Song Files You need to specify at least one document or presentation file to import from. - + You need to specify at least one document or presentation file to import from. Foilpresenter Song Files - + Foilpresenter Song Files @@ -4427,26 +4644,26 @@ The encoding is responsible for the correct character representation. Lyrics - + Delete Song(s)? Delete Song(s)? CCLI License: - + CCLI License: Entire Song - + Entire Song - + Are you sure you want to delete the %n selected song(s)? - - - + + Are you sure you want to delete the %n selected song(s)? + Are you sure you want to delete the %n selected song(s)? @@ -4455,7 +4672,7 @@ The encoding is responsible for the correct character representation. Importing song %d of %d. - + Importing song %d of %d. @@ -4463,7 +4680,7 @@ The encoding is responsible for the correct character representation. Exporting "%s"... - + Exporting "%s"... @@ -4494,12 +4711,12 @@ The encoding is responsible for the correct character representation. Finished export. - + Finished export. Your song export failed. - + Your song export failed. @@ -4613,17 +4830,17 @@ The encoding is responsible for the correct character representation. The author %s already exists. Would you like to make songs with author %s use the existing author %s? - + The author %s already exists. Would you like to make songs with author %s use the existing author %s? The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - + The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? The book %s already exists. Would you like to make songs with book %s use the existing book %s? - + The book %s already exists. Would you like to make songs with book %s use the existing book %s? @@ -4646,12 +4863,12 @@ The encoding is responsible for the correct character representation. Update service from song edit - + Update service from song edit Add missing songs when opening service - + Add missing songs when opening service diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index 7db94baba..4623ae889 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -154,28 +154,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -520,7 +520,7 @@ Changes do not affect verses already in the service. Ya existe la Biblia - + Your Bible import failed. La importación de su Biblia falló. @@ -535,12 +535,12 @@ Changes do not affect verses already in the service. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -662,7 +662,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -671,12 +671,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1069,17 +1069,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits Créditos - + License Licencia - + Contribute Contribuir @@ -1089,7 +1089,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1105,6 +1123,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1124,24 +1171,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1390,6 +1419,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1511,12 +1691,12 @@ Version: %s OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1877,29 +2057,29 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated Versión de OpenLP Actualizada - + OpenLP Main Display Blanked Pantalla Principal de OpenLP en Blanco - + The Main Display has been blanked out La Pantalla Principal esta en negro - + Default Theme: %s @@ -1915,12 +2095,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2242,17 +2422,17 @@ The content encoding is not UTF-8. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2409,57 +2589,57 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Move to previous Regresar al anterior - + Move to next Ir al siguiente - + Hide - + Move to live Proyectar en vivo - + Start continuous loop Iniciar bucle continuo - + Stop continuous loop Detener el bucle - + Delay between slides in seconds Espera entre diapositivas en segundos - + Start playing media Iniciar la reproducción de medios - + Go To - + Edit and reload song preview - + Blank Screen @@ -2469,32 +2649,32 @@ The content encoding is not UTF-8. - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2641,68 +2821,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + You have not selected a theme. - + Save Theme - (%s) Guardar Tema - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File Seleccione el Archivo de Tema a Importar - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. - + Theme %s is used in the %s plugin. @@ -2722,47 +2902,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4405,7 +4585,7 @@ The encoding is responsible for the correct character representation. Letra - + Delete Song(s)? @@ -4420,7 +4600,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index 37b2170ab..18bcc29df 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -154,28 +154,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s Testamentide importimine... %s - + Importing testaments... done. Testamentide importimine... valmis. - + Importing books... %s Raamatute importimine... %s - + Importing verses from %s... Importing verses from <book name>... Salmide importimine failist %s... - + Importing verses... done. Salmide importimine... valmis. @@ -539,17 +539,17 @@ Muudatused ei rakendu juba teenistusesse lisatud salmidele. See Piibel on juba olemas! Palun impordi mingi muu Piibel või kustuta enne olemasolev. - + Your Bible import failed. Piibli importimine nurjus. - + Starting Registering bible... Piibli registreerimise alustamine... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Piibel on registreeritud. Pane tähele, et salmid laaditakse alla @@ -672,7 +672,7 @@ vajadusel, seetõttu on vajalik internetiühendus. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %s. peatüki importimine... @@ -681,12 +681,12 @@ vajadusel, seetõttu on vajalik internetiühendus. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kooditabeli tuvastamine (see võib võtta mõne minuti)... - + Importing %s %s... Importing <book name> <chapter>... %s %s. peatüki importimine... @@ -1068,17 +1068,17 @@ Do you want to add the other images anyway? OpenLP.AboutForm - + Credits Autorid - + License Litsents - + Contribute Aita kaasa @@ -1105,7 +1105,25 @@ OpenLP kohta võid lähemalt uurida aadressil: http://openlp.org/ OpenLP on kirjutatud vabatahtlike poolt. Kui sulle meeldiks näha rohkem kristlikku tarkvara, siis võid annetada, selleks klõpsa alumisele nupule. - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1121,6 +1139,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1140,24 +1187,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1434,6 +1463,157 @@ Version: %s Faili kopeerimine + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + Laulud + + + + Bibles + Piiblid + + + + Themes + Kujundused + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + Piibel + + + + Images + Pildid + + + + Presentations + Esitlused + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1555,12 +1735,12 @@ Version: %s OpenLP.LanguageManager - + Language Keel - + Please restart OpenLP to use your new language setting. Uue keele kasutamiseks käivita OpenLP uuesti. @@ -1921,27 +2101,27 @@ Version: %s Vaate režiimiks ekraanivaate valimine. - + OpenLP Version Updated OpenLP uuendus - + OpenLP Main Display Blanked OpenLP peakuva on tühi - + The Main Display has been blanked out Peakuva on tühi - + Default Theme: %s Vaikimisi kujundus: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1961,12 +2141,12 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/.&Kiirklahvide seadistamine... - + Close OpenLP OpenLP sulgemine - + Are you sure you want to close OpenLP? Kas oled kindel, et tahad OpenLP sulgeda? @@ -2289,17 +2469,17 @@ Sisu ei ole UTF-8 kodeeringus. Fail pole sobiv teenistus. - + Missing Display Handler Puudub kuvakäsitleja - + Your item cannot be displayed as there is no handler to display it Seda elementi pole võimalik näidata ekraanil, kuna puudub seda käsitsev programm - + Your item cannot be displayed as the plugin required to display it is missing or inactive Seda elementi pole võimalik näidata ekraanil, kuna puudub seda käsitsev programm @@ -2456,57 +2636,57 @@ Sisu ei ole UTF-8 kodeeringus. OpenLP.SlideController - + Move to previous Eelmisele liikumine - + Move to next Järgmisele liikumine - + Hide Peida - + Move to live Tõsta ekraanile - + Edit and reload song preview Muuda ja kuva laulu eelvaade uuesti - + Start continuous loop Katkematu korduse alustamine - + Stop continuous loop Katkematu korduse lõpetamine - + Delay between slides in seconds Viivitus slaidide vahel sekundites - + Start playing media Meediaesituse alustamine - + Go To Liigu kohta - + Blank Screen Ekraani tühjendamine @@ -2516,32 +2696,32 @@ Sisu ei ole UTF-8 kodeeringus. Kujunduse tausta näitamine - + Show Desktop Töölaua näitamine - + Previous Slide Eelmine slaid - + Next Slide Järgmine slaid - + Previous Service Eelmine teenistus - + Next Service Järgmine teenistus - + Escape Item Kuva sulgemine @@ -2688,69 +2868,69 @@ Sisu ei ole UTF-8 kodeeringus. Määra &globaalseks vaikeväärtuseks - + %s (default) %s (vaikimisi) - + You must select a theme to edit. Pead valima kujunduse, mida muuta. - + You are unable to delete the default theme. Vaikimisi kujundust pole võimalik kustutada. - + Theme %s is used in the %s plugin. Kujundust %s kasutatakse pluginas %s. - + You have not selected a theme. Sa ei ole kujundust valinud. - + Save Theme - (%s) Salvesta kujundus - (%s) - + Theme Exported Kujundus eksporditud - + Your theme has been successfully exported. Sinu kujunduse on edukalt eksporditud. - + Theme Export Failed Kujunduse eksportimine nurjus - + Your theme could not be exported due to an error. Sinu kujundust polnud võimalik eksportida, kuna esines viga. - + Select Theme Import File Importimiseks kujunduse faili valimine - + File is not a valid theme. The content encoding is not UTF-8. See fail ei ole korrektne kujundus. Sisu kodeering ei ole UTF-8. - + File is not a valid theme. See fail ei ole sobilik kujundus. @@ -2770,47 +2950,47 @@ Sisu kodeering ei ole UTF-8. &Ekspordi kujundus - + You must select a theme to rename. Pead valima kujunduse, mida ümber nimetada. - + Rename Confirmation Ümbernimetamise kinnitus - + Rename %s theme? Kas anda kujundusele %s uus nimi? - + You must select a theme to delete. Pead valima kujunduse, mida tahad kustutada. - + Delete Confirmation Kustutamise kinnitus - + Delete %s theme? Kas kustutada kujundus %s? - + Validation Error Valideerimise viga - + A theme with this name already exists. Sellenimeline teema on juba olemas. - + OpenLP Themes (*.theme *.otz) OpenLP kujundused (*.theme *.otz) @@ -4457,7 +4637,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Laulusõnad - + Delete Song(s)? Kas kustutada laul(ud)? @@ -4472,7 +4652,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Kogu laulust - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/fr.ts b/resources/i18n/fr.ts index 0a58735f8..ecc5dba71 100644 --- a/resources/i18n/fr.ts +++ b/resources/i18n/fr.ts @@ -153,28 +153,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -546,19 +546,19 @@ Les changement ne s'applique aux versets déjà un service. Fichier CSV - + Starting Registering bible... Commence l'enregistrement de la Bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Bible enregistrée. Veuillez noter que les verset vont être téléchargement a la demande, une connexion Interner fiable est donc nécessaire. - + Your Bible import failed. Votre import de Bible à échoué. @@ -664,7 +664,7 @@ a la demande, une connexion Interner fiable est donc nécessaire. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Import %s %s... @@ -673,12 +673,12 @@ a la demande, une connexion Interner fiable est donc nécessaire. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Détection de l'encodage (cela peut prendre quelque minutes)... - + Importing %s %s... Importing <book name> <chapter>... Import %s %s... @@ -1072,17 +1072,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits Crédits - + License Licence - + Contribute Contribuer @@ -1092,7 +1092,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1108,6 +1126,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1127,24 +1174,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1394,6 +1423,157 @@ Version: %s Renomme le fichier + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + Bibles + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + Bible + + + + Images + Images + + + + Presentations + Présentations + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1515,12 +1695,12 @@ Version: %s OpenLP.LanguageManager - + Language Langage - + Please restart OpenLP to use your new language setting. Veuillez redémarrer OpenLP pour utiliser votre nouvelle propriété de langue. @@ -1886,7 +2066,7 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1895,32 +2075,32 @@ You can download the latest version from http://openlp.org/. Vous pouvez télécharger la dernière version depuis http://openlp.org/. - + OpenLP Version Updated Version d'OpenLP mis a jours - + OpenLP Main Display Blanked OpenLP affichage principale noirci - + The Main Display has been blanked out L'affichage principale a été noirci - + Close OpenLP Ferme OpenLP - + Are you sure you want to close OpenLP? Êtes vous sur de vouloir fermer OpenLP ? - + Default Theme: %s Thème par défaut : %s @@ -2299,17 +2479,17 @@ Le contenu n'est pas de l'UTF-8. Le fichier n'est pas un service valide. - + Missing Display Handler Délégué d'affichage manquent - + Your item cannot be displayed as there is no handler to display it Votre élément ne peut pas être affiché il n'y a pas de délégué pour l'afficher - + Your item cannot be displayed as the plugin required to display it is missing or inactive Votre élément ne peut pas être affiché le module nécessaire pour l'afficher est manquant ou inactif @@ -2416,32 +2596,32 @@ Le contenu n'est pas de l'UTF-8. OpenLP.SlideController - + Previous Slide Diapositive précédente - + Move to previous Aller au précédent - + Next Slide Aller au suivant - + Move to next Aller au suivant - + Hide Cache - + Blank Screen Écran noir @@ -2451,57 +2631,57 @@ Le contenu n'est pas de l'UTF-8. Thème vide - + Show Desktop Affiche le bureau - + Start continuous loop Démarre une boucle continue - + Stop continuous loop Arrête la boucle continue - + Delay between slides in seconds Délais entre les diapositives en secondes - + Move to live Déplace en direct - + Edit and reload song preview Édite et recharge le chant prévisualisé - + Start playing media Démarre la lecture de média - + Go To Aller à - + Previous Service Service précédent - + Next Service Service suivant - + Escape Item @@ -2663,114 +2843,114 @@ Le contenu n'est pas de l'UTF-8. &Exporte le thème - + %s (default) %s (défaut) - + You must select a theme to rename. Vous devez sélectionner a thème à renommer. - + Rename Confirmation Confirme le renommage - + Rename %s theme? Renomme le thème %s ? - + You must select a theme to edit. Vous devez sélectionner un thème a éditer. - + You must select a theme to delete. Vous devez sélectionner un thème à effacer. - + Delete Confirmation Confirmation d'effacement - + Delete %s theme? Efface le thème %s ? - + You have not selected a theme. Vous n'avez pas sélectionner de thème. - + Save Theme - (%s) Enregistre le thème - (%s) - + Theme Exported Thème exporté - + Your theme has been successfully exported. Votre thème a été exporter avec succès. - + Theme Export Failed L'export du thème a échoué - + Your theme could not be exported due to an error. Votre thème ne peut pas être exporter a cause d'une erreur. - + Select Theme Import File Select le fichier thème à importer - + File is not a valid theme. The content encoding is not UTF-8. Le fichier n'est pas un thème. Le contenu n'est pas de l'UTF-8. - + Validation Error Erreur de validation - + File is not a valid theme. Le fichier n'est pas un thème valide. - + A theme with this name already exists. Le thème avec ce nom existe déjà. - + You are unable to delete the default theme. Vous ne pouvez pas supprimer le thème par défaut. - + Theme %s is used in the %s plugin. Thème %s est utiliser par le module %s. - + OpenLP Themes (*.theme *.otz) @@ -4418,12 +4598,12 @@ The encoding is responsible for the correct character representation. - + Delete Song(s)? - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 36d46c94c..7d571331a 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -153,28 +153,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -520,7 +520,7 @@ A módosítások nem érintik a már a szolgálatban lévő verseket.Biblia létezik - + Your Bible import failed. A Biblia importálása nem sikerült. @@ -535,12 +535,12 @@ A módosítások nem érintik a már a szolgálatban lévő verseket.Ez a Biblia már létezik. Kérlek, importálj egy másik Bibliát vagy előbb töröld a meglévőt. - + Starting Registering bible... A Biblia regisztrálása elkezdődött... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Biblia regisztrálva. Megjegyzés: a versek csak kérésre lesznek letöltve és ekkor internet kapcsolat szükségeltetik. @@ -662,7 +662,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -671,12 +671,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kódolás észlelése (ez eltarthat pár percig)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1075,17 +1075,17 @@ Többet az OpenLP-ről: http://openlp.org/ Az OpenLP-t önkéntesek készítették és tartják karban. Ha szeretnél több keresztény számítógépes programot, fontold meg a részvételt az alábbi gomb igénybevételével. - + Credits Közreműködők - + License Licenc - + Contribute Részvétel @@ -1095,7 +1095,25 @@ Az OpenLP-t önkéntesek készítették és tartják karban. Ha szeretnél több - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1111,6 +1129,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1130,24 +1177,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1396,6 +1425,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1517,12 +1697,12 @@ Version: %s OpenLP.LanguageManager - + Language Nyelv - + Please restart OpenLP to use your new language setting. A nyelvi beállítások az OpenLP újraindítása után lépnek érvénybe. @@ -1883,7 +2063,7 @@ Version: %s Nézetmód váltása a Élő módra. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1892,22 +2072,22 @@ You can download the latest version from http://openlp.org/. A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. - + OpenLP Version Updated OpenLP verziófrissítés - + OpenLP Main Display Blanked Sötét OpenLP fő képernyő - + The Main Display has been blanked out A fő képernyő el lett sötétítve - + Default Theme: %s Alapértelmezett téma: %s @@ -1923,12 +2103,12 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.Magyar - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2251,17 +2431,17 @@ A tartalom kódolása nem UTF-8. A fájl nem érvényes szolgálat. - + Missing Display Handler Hiányzó képernyő kezelő - + Your item cannot be displayed as there is no handler to display it Az elemet nem lehet megjeleníteni, mert nincs kezelő, amely megjelenítené - + Your item cannot be displayed as the plugin required to display it is missing or inactive Az elemet nem lehet megjeleníteni, mert a bővítmény, amely kezelné, hiányzik vagy inaktív @@ -2418,57 +2598,57 @@ A tartalom kódolása nem UTF-8. OpenLP.SlideController - + Move to previous Mozgatás az előzőre - + Move to next Mozgatás a következőre - + Hide Elrejtés - + Move to live Élő adásba küldés - + Start continuous loop Folyamatos vetítés indítása - + Stop continuous loop Folyamatos vetítés leállítása - + Delay between slides in seconds Diák közötti késleltetés másodpercben - + Start playing media Médialejátszás indítása - + Go To Ugrás erre - + Edit and reload song preview Szerkesztés és az dal előnézetének újraolvasása - + Blank Screen Üres képernyő @@ -2478,32 +2658,32 @@ A tartalom kódolása nem UTF-8. Üres téma - + Show Desktop Asztal megjelenítése - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2650,69 +2830,69 @@ A tartalom kódolása nem UTF-8. Beállítás &globális alapértelmezetté - + %s (default) %s (alapértelmezett) - + You must select a theme to edit. Ki kell választani témát a szerkesztéshez. - + You are unable to delete the default theme. Az alapértelmezett témát nem lehet törölni. - + You have not selected a theme. Nincs kiválasztva egy téma sem. - + Save Theme - (%s) Téma mentése – (%s) - + Theme Exported Téma exportálva - + Your theme has been successfully exported. A téma sikeresen exportálásra került. - + Theme Export Failed A téma exportálása nem sikerült - + Your theme could not be exported due to an error. A témát nem sikerült exportálni egy hiba miatt. - + Select Theme Import File Importálandó téma fájl kiválasztása - + File is not a valid theme. The content encoding is not UTF-8. Nem érvényes témafájl. A tartalom kódolása nem UTF-8. - + File is not a valid theme. Nem érvényes témafájl. - + Theme %s is used in the %s plugin. A(z) %s témát a(z) %s bővítmény használja. @@ -2732,47 +2912,47 @@ A tartalom kódolása nem UTF-8. Téma e&xportálása - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4415,7 +4595,7 @@ The encoding is responsible for the correct character representation. Dalszöveg - + Delete Song(s)? Törölhető(ek) a dal(ok)? @@ -4430,7 +4610,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/id.ts b/resources/i18n/id.ts index 8900300e6..de88d406a 100644 --- a/resources/i18n/id.ts +++ b/resources/i18n/id.ts @@ -154,28 +154,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -531,7 +531,7 @@ Perubahan tidak akan mempengaruhi ayat yang kini tampil. - + Your Bible import failed. @@ -541,12 +541,12 @@ Perubahan tidak akan mempengaruhi ayat yang kini tampil. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -663,7 +663,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Mengimpor %s %s... @@ -672,12 +672,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... Mengimpor %s %s... @@ -1070,17 +1070,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License - + Contribute @@ -1090,7 +1090,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1106,6 +1124,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1125,24 +1172,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1391,6 +1420,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + Alkitab + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + Alkitab + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1512,12 +1692,12 @@ Version: %s OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1878,29 +2058,29 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -1916,12 +2096,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2248,17 +2428,17 @@ The content encoding is not UTF-8. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2410,57 +2590,57 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Move to previous - + Move to next - + Hide - + Move to live - + Edit and reload song preview - + Start continuous loop - + Stop continuous loop - + Delay between slides in seconds - + Start playing media - + Go To - + Blank Screen @@ -2470,32 +2650,32 @@ The content encoding is not UTF-8. - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2642,68 +2822,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. @@ -2723,47 +2903,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4406,7 +4586,7 @@ The encoding is responsible for the correct character representation. - + Delete Song(s)? @@ -4421,7 +4601,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/ja.ts b/resources/i18n/ja.ts index 4ea5843e4..841ac90b5 100644 --- a/resources/i18n/ja.ts +++ b/resources/i18n/ja.ts @@ -12,18 +12,19 @@ Do you want to continue anyway? No Parameter Found - + 引数が見つかりません No Placeholder Found - + プレースホルダーが見つかりません The alert text does not contain '<>'. Do you want to continue anyway? - + 警告テキストは、'<>'を含みません。 +処理を続けてもよろしいですか? @@ -154,28 +155,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s 新旧訳を取込み中...%s - + Importing testaments... done. 新旧訳の取込み...完了。 - + Importing books... %s 書簡の取込み中...%s - + Importing verses from %s... Importing verses from <book name>... 節の取込み中 %s... - + Importing verses... done. 節の取込み....完了。 @@ -226,7 +227,7 @@ Do you want to continue anyway? <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display bible verses from different sources during the service. - <strong>聖書プラグイン</strong><br />聖書プラグインは、礼拝で様々な訳の御言葉を表示する機能を提供します。 + <strong>聖書プラグイン</strong><br />聖書プラグインは、礼拝プログラムで様々な訳の御言葉を表示する機能を提供します。 @@ -261,7 +262,7 @@ Do you want to continue anyway? Add the selected Bible to the service - 選択した聖書を礼拝に追加 + 選択した聖書を礼拝プログラムに追加 @@ -331,7 +332,14 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + 参照聖句の形式が、OpenLPにサポートされていません。以下のパターンに準拠した参照聖句である事を確認下さい。 + +書 章 +書 章-章 +書 章:節-節 +書 章:節-節,節-節 +書 章:節-節,章:節-節 +書 章:節-章:節 @@ -405,7 +413,7 @@ Book Chapter:Verse-Chapter:Verse Note: Changes do not affect verses already in the service. - 注意: 既に礼拝に含まれる御言葉は変更されません。 + 注意: 既に礼拝プログラムに含まれる御言葉は変更されません。 @@ -531,17 +539,17 @@ Changes do not affect verses already in the service. すでにこの聖書データは取り込み済みです。他の聖書データを取り込むか既に取り込まれた聖書を削除してください。 - + Your Bible import failed. 聖書データの取り込みに失敗しました。 - + Starting Registering bible... 聖書を登録しています... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. 聖書が登録されました。節ごとに必要に応じてダウンロードされますので、インターネットへの接続が要求される事を留意しておいてください。 @@ -657,13 +665,13 @@ demand and thus an internet connection is required. Scripture Reference - + 参照聖句 BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %sをインポートしています... @@ -672,12 +680,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... エンコードの検出中です(数分かかることがあります)... - + Importing %s %s... Importing <book name> <chapter>... %s %sをインポートしています... @@ -688,7 +696,7 @@ demand and thus an internet connection is required. <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>カスタムプラグイン</strong><br />カスタムプラグインは、カスタムのテキストを歌などと同様に表示する機能を提供します。 + <strong>カスタムプラグイン</strong><br />カスタムプラグインは、カスタムのテキストを賛美などと同様に表示する機能を提供します。 @@ -764,7 +772,7 @@ demand and thus an internet connection is required. &Credits: - + クレジット(&C): @@ -807,7 +815,7 @@ demand and thus an internet connection is required. Add the selected Custom to the service - 選択したカスタムを礼拝に追加 + 選択したカスタムを礼拝プログラムに追加 @@ -833,7 +841,7 @@ demand and thus an internet connection is required. <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - <strong>画像プラグイン</strong><br />画像プラグインは、画像を表示する機能を提供します。<br />礼拝マネージャで複数の画像をグループ化したり、複数の画像を簡単に表示することができます。タイムアウトループの機能を使用してスライドショーを自動的に表示することもできます。さらに、歌などのテキストベースの項目の背景を、テーマで指定されたものからこのプラグインの画像に変更することもできます。 + <strong>画像プラグイン</strong><br />画像プラグインは、画像を表示する機能を提供します。<br />礼拝プログラムで複数の画像をグループ化したり、複数の画像を簡単に表示することができます。タイムアウトループの機能を使用してスライドショーを自動的に表示することもできます。さらに、賛美などのテキストベースの項目の背景を、テーマで指定されたものからこのプラグインの画像に変更することもできます。 @@ -868,7 +876,7 @@ demand and thus an internet connection is required. Add the selected Image to the service - 選択した画像を礼拝に追加 + 選択した画像を礼拝プログラムに追加 @@ -977,7 +985,7 @@ Do you want to add the other images anyway? Add the selected Media to the service - 選択したメディアを礼拝に追加 + 選択したメディアを礼拝プログラムに追加 @@ -1033,7 +1041,7 @@ Do you want to add the other images anyway? Videos (%s);;Audio (%s);;%s (*) - + ビデオ (%s);;オーディオ (%s);;%s (*) @@ -1068,7 +1076,7 @@ OpenLP is free church presentation software, or lyrics projection software, used Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLPは、教会専用のフリー(無償及び利用に関して)のプレゼンテーション及び歌詞投射ソフトウェアです。 + OpenLPは、教会専用のフリー(無償及び利用に関して)のプレゼンテーション及び賛美詞投射ソフトウェアです。 パソコンとプロジェクターを用いて、聖書箇所、画像また他プレゼンテーションデータ(OpenOffice.orgやPowerPoint/Viewerが必要)をスライド表示する事ができます。 @@ -1077,17 +1085,17 @@ http://openlp.org/にて詳しくご紹介しております。 OpenLPは、ボランティアの手により開発保守されています。もっと多くのクリスチャンの手によるフリーのソフトウェア開発に興味がある方は、以下のボタンからどうぞ。 - + Credits 著作情報 - + License ライセンス - + Contribute 貢献する @@ -1097,7 +1105,17 @@ OpenLPは、ボランティアの手により開発保守されています。 ビルド %s - + + 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; version 2 of the License. + このプログラムは、フリーソフトです。あなたは、これを再配布したり、the Free Software Foundationが発行したGNU General Public Licenseバージョン2の元で改変する事が出来ます。 + + + + 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 below for more details. + このプログラムは、皆様のお役に立てると期待し、配布しています。しかし、完全に無保障である事を覚えて下さい。商品としての暗黙の保障としての商品適格性や特定の使用適合性もありません。詳しくは、以下の文をお読みください。 + + + Project Lead %s @@ -1113,6 +1131,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1133,23 +1180,13 @@ Final Credit - + Copyright © 2004-2011 Raoul Snyman Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Meinert Jordan, Andreas Preikschat, Christian Richter, Philip Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1176,7 +1213,7 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Expand new service items on creation - 礼拝の項目の作成時に展開する + 礼拝項目の作成時に展開する @@ -1191,27 +1228,27 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Hide mouse cursor when over display window - + ディスプレイウィンドウの上では、マウスカーソルを隠す Default Image - + 既定の画像 Background color: - 背景色: + 背景色: Image file: - + 画像ファイル: Open File - ファイルを開く + ファイルを開く @@ -1219,52 +1256,52 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Edit Selection - 選択項目を編集 + 選択項目を編集 Update - 更新 + 更新 Description - 説明 + 説明 Tag - タグ + タグ Start tag - 開始HTML + 開始タグ End tag - 終了HTML + 終了タグ Default - 初期設定 + 初期設定 Tag id - タグID + タグID Start Html - 開始HTML + 開始タグ End Html - 終了HTML + 終了タグ @@ -1425,6 +1462,157 @@ Version: %s ファイルをコピー + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + 賛美 + + + + Bibles + 聖書 + + + + Themes + テーマ + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + 聖書 + + + + Images + 画像 + + + + Presentations + プレゼンテーション + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1460,7 +1648,7 @@ Version: %s Automatically open the last service - 自動的に前回の礼拝を開く + 自動的に前回の礼拝プログラムを開く @@ -1475,7 +1663,7 @@ Version: %s Prompt to save before starting a new service - 新しい礼拝を開く前に保存を確認する + 新しい礼拝プログラムを開く前に保存を確認する @@ -1546,12 +1734,12 @@ Version: %s OpenLP.LanguageManager - + Language 言語 - + Please restart OpenLP to use your new language setting. 新しい言語設定を使用するために、OpenLPを再起動してください。 @@ -1619,7 +1807,7 @@ Version: %s Service Manager - 礼拝マネージャ + 礼拝プログラム @@ -1644,7 +1832,7 @@ Version: %s Open an existing service. - 存在する礼拝を開きます。 + 存在する礼拝プログラムを開きます。 @@ -1659,7 +1847,7 @@ Version: %s Save the current service to disk. - 現在の礼拝をディスクに保存します。 + 現在の礼拝プログラムをディスクに保存します。 @@ -1674,12 +1862,12 @@ Version: %s Save Service As - 名前をつけて礼拝を保存 + 名前をつけて礼拝プログラムを保存 Save the current service under a new name. - 現在の礼拝を新しい名前で保存します。 + 現在の礼拝プログラムを新しい名前で保存します。 @@ -1754,22 +1942,22 @@ Version: %s &Service Manager - 礼拝マネジャー(&S) + 礼拝プログラム(&S) Toggle Service Manager - 礼拝マネジャーを切り替え + 礼拝プログラムを切り替え Toggle the visibility of the service manager. - 礼拝マネジャーの可視性を切り替える。 + 礼拝プログラムの可視性を切り替える。 F9 - 礼拝マネジャー + 礼拝プログラム @@ -1912,7 +2100,7 @@ Version: %s 表示モードをライブにします。 - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1921,22 +2109,22 @@ You can download the latest version from http://openlp.org/. http://openlp.org/から最新版がダウンロード可能です。 - + OpenLP Version Updated OpenLPのバージョンアップ完了 - + OpenLP Main Display Blanked OpenLPのプライマリディスプレイがブランクです - + The Main Display has been blanked out OpenLPのプライマリディスプレイがブランクになりました - + Default Theme: %s 既定テーマ @@ -1952,19 +2140,19 @@ http://openlp.org/から最新版がダウンロード可能です。ショートカットの設定(&S)... - + Close OpenLP OpenLPの終了 - + Are you sure you want to close OpenLP? 本当にOpenLPを終了してもよろしいですか? Print the current Service Order. - 現在の礼拝順序を印刷します。 + 現在の礼拝プログラム順序を印刷します。 @@ -1974,17 +2162,17 @@ http://openlp.org/から最新版がダウンロード可能です。 &Configure Display Tags - + 表示タグを設定(&C) Open &Data Folder... - + データフォルダを開く(&D)... Open the folder where songs, bibles and other data resides. - + 賛美、聖書データなどのデータが含まれているフォルダを開く。 @@ -2078,12 +2266,12 @@ http://openlp.org/から最新版がダウンロード可能です。 Fit Page - + サイズをページに合わせる Fit Width - + サイズをページの横幅に合わせる @@ -2091,62 +2279,62 @@ http://openlp.org/から最新版がダウンロード可能です。 Options - + オプション Close - + 閉じる Copy - + コピー Copy as HTML - + HTMLとしてコピーする Zoom In - + ズームイン Zoom Out - + ズームアウト Zoom Original - + 既定のズームに戻す Other Options - + その他のオプション Include slide text if available - + 可能であれば、スライドテキストを含める Include service item notes - + 礼拝項目メモを含める Include play length of media items - + メディア項目の再生時間を含める Service Order Sheet - 礼拝順序シート + 礼拝プログラム順序シート @@ -2154,12 +2342,12 @@ http://openlp.org/から最新版がダウンロード可能です。 Screen - スクリーン + スクリーン primary - プライマリ + プライマリ @@ -2175,17 +2363,17 @@ http://openlp.org/から最新版がダウンロード可能です。 Load an existing service - 既存の礼拝を読み込む + 既存の礼拝プログラムを読み込む Save this service - 礼拝を保存 + 礼拝プログラムを保存 Select a theme for the service - 礼拝のテーマを選択 + 礼拝プログラムのテーマを選択 @@ -2235,7 +2423,7 @@ http://openlp.org/から最新版がダウンロード可能です。 Delete the selected item from the service. - 選択した項目を礼拝から削除する。 + 選択した項目を礼拝プログラムから削除する。 @@ -2271,26 +2459,26 @@ http://openlp.org/から最新版がダウンロード可能です。 File is not a valid service. The content encoding is not UTF-8. - 礼拝ファイルが有効でありません。 + 礼拝プログラムファイルが有効でありません。 エンコードがUTF-8でありません。 File is not a valid service. - 礼拝ファイルが有効でありません。 + 礼拝プログラムファイルが有効でありません。 - + Missing Display Handler ディスプレイハンドラが見つかりません - + Your item cannot be displayed as there is no handler to display it ディスプレイハンドラが見つからないため項目を表示する事ができません - + Your item cannot be displayed as the plugin required to display it is missing or inactive 必要なプラグインが見つからないか無効なため、項目を表示する事ができません @@ -2322,7 +2510,7 @@ The content encoding is not UTF-8. OpenLP Service Files (*.osz) - OpenLP 礼拝ファイル (*.osz) + OpenLP 礼拝プログラムファイル (*.osz) @@ -2352,7 +2540,7 @@ The content encoding is not UTF-8. Modified Service - 礼拝の編集 + 礼拝プログラムの編集 @@ -2362,22 +2550,22 @@ The content encoding is not UTF-8. &Start Time - + 開始時間(&S) Show &Preview - + プレビュー表示(&P) Show &Live - + ライブ表示(&L) The current service has been modified. Would you like to save this service? - + 現在の礼拝プログラムは、編集されています。保存しますか? @@ -2441,63 +2629,63 @@ The content encoding is not UTF-8. Alternate - + 代替 OpenLP.SlideController - + Move to previous 前へ移動 - + Move to next 次へ移動 - + Hide 隠す - + Move to live ライブへ移動 - + Edit and reload song preview 編集し再読み込み - + Start continuous loop 繰り返し再生を開始 - + Stop continuous loop 繰り返し再生を停止 - + Delay between slides in seconds 次のスライドまでの遅延 - + Start playing media メディア再生を開始 - + Go To - + Blank Screen スクリーンをブランク @@ -2507,32 +2695,32 @@ The content encoding is not UTF-8. テーマをブランク - + Show Desktop デスクトップを表示 - + Previous Slide 前スライド - + Next Slide 次スライド - + Previous Service - 前の礼拝 + 前の礼拝プログラム - + Next Service - 次の礼拝 + 次の礼拝プログラム - + Escape Item 項目をエスケープ @@ -2555,32 +2743,32 @@ The content encoding is not UTF-8. Item Start Time - + 項目開始時間 Hours: - + 時: h - + m - + Minutes: - + 分: Seconds: - + 秒: @@ -2679,68 +2867,68 @@ The content encoding is not UTF-8. 全体の既定として設定(&G)) - + %s (default) %s (既定) - + You must select a theme to edit. 編集するテーマを選択してください。 - + You are unable to delete the default theme. 既定のテーマを削除する事はできません。 - + Theme %s is used in the %s plugin. %s プラグインでこのテーマは利用されています。 - + You have not selected a theme. テーマの選択がありません。 - + Save Theme - (%s) テーマを保存 - (%s) - + Theme Exported テーマエキスポート - + Your theme has been successfully exported. テーマは正常にエキスポートされました。 - + Theme Export Failed テーマのエキスポート失敗 - + Your theme could not be exported due to an error. エラーが発生したためテーマは、エキスポートされませんでした。 - + Select Theme Import File インポート対象のテーマファイル選択 - + File is not a valid theme. The content encoding is not UTF-8. ファイルは無効なテーマです。文字コードがUTF-8ではありません。 - + File is not a valid theme. 無効なテーマファイルです。 @@ -2760,49 +2948,49 @@ The content encoding is not UTF-8. テーマのエキスポート(&E) - + You must select a theme to rename. 名前を変更するテーマを選択してください。 - + Rename Confirmation 名前変更確認 - + Rename %s theme? %sテーマの名前を変更します。宜しいですか? - + You must select a theme to delete. 削除するテーマを選択してください。 - + Delete Confirmation 削除確認 - + Delete %s theme? %s テーマを削除します。宜しいですか? - + Validation Error 検証エラー - + A theme with this name already exists. 同名のテーマが既に存在します。 - + OpenLP Themes (*.theme *.otz) - + OpenLP テーマ (*.theme *.otz) @@ -3063,22 +3251,22 @@ The content encoding is not UTF-8. S&ong Level - 歌レベル(&O) + 賛美レベル(&O) Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - データベース内のそれぞれの歌のテーマを使用します。歌にテーマが設定されていない場合、礼拝のテーマを使用します。礼拝にテーマが設定されていなければ、全体設定のテーマを使用します。 + データベース内のそれぞれの賛美のテーマを使用します。賛美にテーマが設定されていない場合、礼拝プログラムのテーマを使用します。礼拝プログラムにテーマが設定されていなければ、全体設定のテーマを使用します。 &Service Level - 礼拝レベル(&S) + 礼拝プログラムレベル(&S) Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - 礼拝のテーマを用い、歌個々のテーマを上書きします。礼拝にテーマが設定されていなければ、全体設定のテーマを使用します。 + 礼拝プログラムのテーマを用い、賛美個々のテーマを上書きします。礼拝プログラムにテーマが設定されていなければ、全体設定のテーマを使用します。 @@ -3088,7 +3276,7 @@ The content encoding is not UTF-8. Use the global theme, overriding any themes associated with either the service or the songs. - 全体テーマを用い、すべての礼拝や歌に関連付けられたテーマを上書きします。 + 全体テーマを用い、すべての礼拝プログラムや賛美に関連付けられたテーマを上書きします。 @@ -3121,353 +3309,382 @@ The content encoding is not UTF-8. About - 情報 + ソフトウェア情報 &Add - 追加(&A) + 追加(&A) Advanced - + 詳細設定 All Files - 全てのファイル + 全てのファイル Bottom - + 下部 Browse... - 参照... + 参照... Cancel - キャンセル + キャンセル CCLI number: - CCLI番号: + CCLI番号: Create a new service. - 新規礼拝を作成します。 + 新規礼拝プログラムを作成します。 &Edit - 編集(&E) + 編集(&E) Empty Field - + 空のフィールド Export - + エキスポート pt Abbreviated font pointsize unit - + Image - 画像 + 画像 Import - インポート + インポート Length %s - + 長さ %s Live - ライブ + ライブ Live Background Error - ライブ背景エラー + ライブ背景エラー Live Panel - + ライブパネル Load - 読み込み + 読み込み Middle - + 中央部 New - 新規 + 新規 New Service - 新しい礼拝 + 新しい礼拝プログラム New Theme - 新しいテーマ + 新しいテーマ No File Selected Singular - + ファイルが選択されていません No Files Selected Plural - + ファイルが一つも選択されていません No Item Selected Singular - + 項目が選択されていません No Items Selected Plural - 項目の選択がありません + 一つの項目も選択されていません openlp.org 1.x - + OpenLP 2.0 - + Open Service - 礼拝を開く + 礼拝プログラムを開く Preview - プレビュー + プレビュー Preview Panel - + プレビューパネル Print Service Order - 礼拝順序を印刷 + 礼拝プログラム順序を印刷 Replace Background - + 背景を置換 Replace Live Background - ライブの背景を置換 + ライブの背景を置換 Reset Background - 背景をリセット + 背景をリセット Reset Live Background - ライブの背景をリセット + ライブの背景をリセット s The abbreviated unit for seconds - + Save && Preview - + 保存してプレビュー Search - 検索 + 検索 You must select an item to delete. - 削除する項目を選択してください。 + 削除する項目を選択して下さい。 You must select an item to edit. - 項目を編集してください。 + 編集する項目を選択して下さい。 Save Service - 礼拝の保存 + 礼拝プログラムの保存 Service - 礼拝 + 礼拝プログラム Start %s - + 開始 %s Theme Singular - テーマ + テーマ Themes Plural - テーマ + テーマ Top - + 上部 Version - + バージョン &Vertical Align: - + 垂直整列(&V): Finished import. - + インポートの完了。 Format: - 書式: + 書式: Importing - + インポート中 Importing "%s"... - "%s"をインポート中... + "%s"をインポート中... Select Import Source - + インポート元を選択 Select the import format and the location to import from. - + インポート形式とインポート元を選択して下さい。 The openlp.org 1.x importer has been disabled due to a missing Python module. If you want to use this importer, you will need to install the "python-sqlite" module. - The openlp.org 1.xの取込機能が、Pythonの拡張機能がないためオフになっています。取込機能をお使いになられる場合、python-sqlite拡張機能をインストール必要があります。 + The openlp.org 1.xの取込機能が、Pythonの拡張機能がないためオフになっています。取込機能をお使いになられる場合、python-sqlite拡張機能をインストール必要があります。 Open %s File - + %sファイルを開く %p% - + Ready. - 完了。 + 準備完了。 Starting import... - + インポートを開始しています.... You need to specify at least one %s file to import from. A file type e.g. OpenSong - + インポート元となる%sファイルを最低一つ選択する必要があります。 Welcome to the Bible Import Wizard - 選択した聖書を礼拝に追加へようこそ + 聖書インポートガイドへようこそ Welcome to the Song Export Wizard - + 賛美エキスポートガイドへようこそ Welcome to the Song Import Wizard - 歌インポートガイドへようこそ + 賛美インポートガイドへようこそ Author Singular - + アーティスト Authors Plural - アーティスト + アーティスト + + + + Song Book + Singular + アルバム + + + + Song Books + Plural + アルバム + + + + Song Maintenance + 賛美の保守 + + + + Topic + Singular + 題目 + + + + Topics + Plural + 題目 @@ -3475,42 +3692,13 @@ The content encoding is not UTF-8. Copyright symbol. - - - Song Book - Singular - アルバム - - - - Song Books - Plural - アルバム - - - - Song Maintenance - 歌の保守 - - - - Topic - Singular - 題目 - - - - Topics - Plural - 題目 - OpenLP.displayTagDialog Configure Display Tags - + 表示タグを設定 @@ -3543,7 +3731,7 @@ The content encoding is not UTF-8. Add the selected Presentation to the service - 選択したプレゼンテーションを礼拝に追加 + 選択したプレゼンテーションを礼拝プログラムに追加 @@ -3637,7 +3825,7 @@ The content encoding is not UTF-8. %s (unavailable) - + %s (利用不可) @@ -3689,7 +3877,7 @@ The content encoding is not UTF-8. &Song Usage Tracking - 歌の利用記録(&S) + 賛美の利用記録(&S) @@ -3719,12 +3907,12 @@ The content encoding is not UTF-8. Toggle the tracking of song usage. - 歌の利用記録の切り替える。 + 賛美の利用記録の切り替える。 <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - <strong>SongUsage Plugin</strong><br />このプラグインは、歌の利用頻度を記録します。 + <strong>SongUsage Plugin</strong><br />このプラグインは、賛美の利用頻度を記録します。 @@ -3755,12 +3943,12 @@ The content encoding is not UTF-8. Delete Selected Song Usage Events? - 選択された歌の利用記録を削除しますか? + 選択された賛美の利用記録を削除しますか? Are you sure you want to delete selected Song Usage data? - 選択された歌の利用記録を削除します。よろしいですか? + 選択された賛美の利用記録を削除します。よろしいですか? @@ -3778,12 +3966,12 @@ The content encoding is not UTF-8. Song Usage Extraction - 歌利用記録の抽出 + 賛美利用記録の抽出 Select Date Range - 歌利用の期間 + 賛美利用の期間 @@ -3825,80 +4013,80 @@ has been successfully created. &Song - 歌(&S) + 賛美(&S) Import songs using the import wizard. - インポートウィザードを使用して歌をインポートします。 + インポートウィザードを使用して賛美をインポートします。 <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - <strong>歌プラグイン</strong><br />歌プラグインは、歌を表示し管理する機能を提供します。 + <strong>賛美プラグイン</strong><br />賛美プラグインは、賛美を表示し管理する機能を提供します。 &Re-index Songs - 歌のインデックスを再作成(&R) + 賛美のインデックスを再作成(&R) Re-index the songs database to improve searching and ordering. - 歌データベースのインデックスを再作成し、検索や並べ替えを速くします。 + 賛美データベースのインデックスを再作成し、検索や並べ替えを速くします。 Reindexing songs... - 歌のインデックスを再作成中... + 賛美のインデックスを再作成中... Add a new Song - 歌を追加 + 賛美を追加 Edit the selected Song - 選択した歌を編集 + 選択した賛美を編集 Delete the selected Song - 選択した歌を削除 + 選択した賛美を削除 Preview the selected Song - 選択した歌をプレビュー + 選択した賛美をプレビュー Send the selected Song live - 選択した歌をライブへ送る + 選択した賛美をライブへ送る Add the selected Song to the service - 選択した歌を礼拝に追加 + 選択した賛美を礼拝プログラムに追加 Song name singular - + 賛美 Songs name plural - + 賛美 Songs container title - + 賛美 @@ -3991,7 +4179,7 @@ The encoding is responsible for the correct character representation. Exports songs using the export wizard. - + エキスポートガイドを使って賛美をエキスポートする。 @@ -4037,7 +4225,7 @@ The encoding is responsible for the correct character representation. Importing song %d of %d - 歌(%d/%d)をインポートしています + 賛美(%d/%d)をインポートしています @@ -4060,7 +4248,7 @@ The encoding is responsible for the correct character representation. &Lyrics: - 歌詞(&L): + 賛美詞(&L): @@ -4075,12 +4263,12 @@ The encoding is responsible for the correct character representation. Title && Lyrics - タイトル && 歌詞 + タイトル && 賛美詞 &Add to Song - 歌に追加(&A) + 賛美に追加(&A) @@ -4095,7 +4283,7 @@ The encoding is responsible for the correct character representation. A&dd to Song - 歌に追加(&A) + 賛美に追加(&A) @@ -4155,7 +4343,7 @@ The encoding is responsible for the correct character representation. You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - 有効なアーティストを選択してください。一覧から選択するか新しいアーティストを入力し、"歌にアーティストを追加"をクリックしてください。 + 有効なアーティストを選択してください。一覧から選択するか新しいアーティストを入力し、"賛美にアーティストを追加"をクリックしてください。 @@ -4175,12 +4363,12 @@ The encoding is responsible for the correct character representation. You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - 有効なトピックを選択してください。一覧から選択するか新しいトピックを入力し、"歌にトピックを追加"をクリックしてください。 + 有効なトピックを選択してください。一覧から選択するか新しいトピックを入力し、"賛美にトピックを追加"をクリックしてください。 You need to type in a song title. - 歌のタイトルを入力する必要があります。 + 賛美のタイトルを入力する必要があります。 @@ -4200,7 +4388,7 @@ The encoding is responsible for the correct character representation. You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - %sはバース順序で使われていません。本当にこの歌を保存しても宜しいですか? + %sはバース順序で使われていません。本当にこの賛美を保存しても宜しいですか? @@ -4246,82 +4434,82 @@ The encoding is responsible for the correct character representation. Song Export Wizard - + 賛美エキスポートガイド This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + このガイドは、あなたの賛美がオープンなOpenLyrics worship song形式としてエキスポートする手伝いをします。 Select Songs - + 賛美を選択して下さい Check the songs you want to export. - + エキスポートしたい賛美をチェックして下さい。 Uncheck All - + すべてのチェックを外す Check All - + すべてをチェックする Select Directory - + フォルダを選択して下さい Select the directory you want the songs to be saved. - + 賛美を保存するフォルダを選択して下さい。 Directory: - + フォルダ: Exporting - + エキスポート中 Please wait while your songs are exported. - + 賛美をエキスポートしている間今しばらくお待ちください。 You need to add at least one Song to export. - + エキスポートする最低一つの賛美を選択する必要があります。 No Save Location specified - + 保存先が指定されていません Starting export... - + エキスポートを開始しています... You need to specify a directory. - + フォルダを選択して下さい。 Select Destination Folder - + 出力先フォルダを選択して下さい @@ -4334,12 +4522,12 @@ The encoding is responsible for the correct character representation. Song Import Wizard - 歌インポートガイド + 賛美インポートガイド This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - このガイドは、様々なフォーマットの歌をインポートする手助けをします。次へをクリックし、インポートするファイルのフォーマットを選択してください。 + このガイドは、様々なフォーマットの賛美をインポートする手助けをします。次へをクリックし、インポートするファイルのフォーマットを選択してください。 @@ -4379,7 +4567,7 @@ The encoding is responsible for the correct character representation. Please wait while your songs are imported. - 歌がインポートされるまでしばらくお待ちください。 + 賛美がインポートされるまでしばらくお待ちください。 @@ -4404,27 +4592,27 @@ The encoding is responsible for the correct character representation. You need to specify at least one document or presentation file to import from. - + インポート対象となる最低一つのドキュメント又はプレゼンテーションファイルを選択する必要があります。 Songs Of Fellowship Song Files - + Songs Of Fellowship Song ファイル SongBeamer Files - + SongBeamerファイル SongShow Plus Song Files - + SongShow Plus Songファイル Foilpresenter Song Files - + Foilpresenter Song ファイル @@ -4442,12 +4630,12 @@ The encoding is responsible for the correct character representation. Lyrics - 歌詞 + 賛美詞 - + Delete Song(s)? - これらの歌を削除しますか? + これらの賛美を削除しますか? @@ -4457,13 +4645,13 @@ The encoding is responsible for the correct character representation. Entire Song - 歌全体 + 賛美全体 - + Are you sure you want to delete the %n selected song(s)? - 選択された%n件の歌を削除します。宜しいですか? + 選択された%n件の賛美を削除します。宜しいですか? @@ -4472,7 +4660,7 @@ The encoding is responsible for the correct character representation. Importing song %d of %d. - 歌(%d/%d)をインポートしています。 + 賛美(%d/%d)をインポートしています。 @@ -4480,7 +4668,7 @@ The encoding is responsible for the correct character representation. Exporting "%s"... - + 「%s」をエキスポートしています... @@ -4511,12 +4699,12 @@ The encoding is responsible for the correct character representation. Finished export. - + エキスポート完了。 Your song export failed. - + 賛美のエキスポートに失敗しました。 @@ -4532,7 +4720,7 @@ The encoding is responsible for the correct character representation. Your song import failed. - 歌のインポートに失敗しました。 + 賛美のインポートに失敗しました。 @@ -4595,7 +4783,7 @@ The encoding is responsible for the correct character representation. This author cannot be deleted, they are currently assigned to at least one song. - 最低一つの歌に割り振られているため、このアーティストを削除できませんでした。 + 最低一つの賛美に割り振られているため、このアーティストを削除できませんでした。 @@ -4610,7 +4798,7 @@ The encoding is responsible for the correct character representation. This topic cannot be deleted, it is currently assigned to at least one song. - 最低一つの歌に割り振られているため、このトピックを削除できませんでした。 + 最低一つの賛美に割り振られているため、このトピックを削除できませんでした。 @@ -4625,22 +4813,22 @@ The encoding is responsible for the correct character representation. This book cannot be deleted, it is currently assigned to at least one song. - 最低一つの歌に割り振られているため、このアルバムを削除できませんでした。 + 最低一つの賛美に割り振られているため、このアルバムを削除できませんでした。 The author %s already exists. Would you like to make songs with author %s use the existing author %s? - アーティスト%sは既に存在します。既存のアーティスト%sを用い、アーティスト%sで歌を作りますか? + アーティスト%sは既に存在します。既存のアーティスト%sを用い、アーティスト%sで賛美を作りますか? The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - 題目%sは既に存在します。既存の題目%sを用い、題目%sで歌を作りますか? + 題目%sは既に存在します。既存の題目%sを用い、題目%sで賛美を作りますか? The book %s already exists. Would you like to make songs with book %s use the existing book %s? - アルバム%sは既に存在します。既存のアルバム%sを用い、アルバム%sで歌を作りますか? + アルバム%sは既に存在します。既存のアルバム%sを用い、アルバム%sで賛美を作りますか? @@ -4648,7 +4836,7 @@ The encoding is responsible for the correct character representation. Songs Mode - 歌モード + 賛美モード @@ -4663,12 +4851,12 @@ The encoding is responsible for the correct character representation. Update service from song edit - 編集後に礼拝を更新 + 編集後に礼拝プログラムを更新 Add missing songs when opening service - 礼拝を開いたときに存在しない歌を追加 + 礼拝プログラムを開いたときに存在しない賛美を追加 diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 49645d279..106f9d685 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -153,28 +153,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -520,7 +520,7 @@ Changes do not affect verses already in the service. - + Your Bible import failed. @@ -535,12 +535,12 @@ Changes do not affect verses already in the service. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -662,7 +662,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -671,12 +671,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1069,17 +1069,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License - + Contribute @@ -1089,7 +1089,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1105,6 +1123,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1124,24 +1171,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1390,6 +1419,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1511,12 +1691,12 @@ Version: %s OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1877,29 +2057,29 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -1915,12 +2095,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2242,17 +2422,17 @@ The content encoding is not UTF-8. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2409,57 +2589,57 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Move to previous - + Move to next - + Hide - + Move to live - + Start continuous loop - + Stop continuous loop - + Delay between slides in seconds - + Start playing media - + Go To - + Edit and reload song preview - + Blank Screen @@ -2469,32 +2649,32 @@ The content encoding is not UTF-8. - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2641,68 +2821,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. - + Theme %s is used in the %s plugin. @@ -2722,47 +2902,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4405,7 +4585,7 @@ The encoding is responsible for the correct character representation. - + Delete Song(s)? @@ -4420,7 +4600,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index 5eea1673d..ae049959d 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -153,28 +153,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... - + Importing verses... done. @@ -519,7 +519,7 @@ Changes do not affect verses already in the service. Bibelen eksisterer - + Your Bible import failed. Bibelimporteringen mislyktes. @@ -534,12 +534,12 @@ Changes do not affect verses already in the service. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -661,7 +661,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -670,12 +670,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1068,17 +1068,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License Lisens - + Contribute @@ -1088,7 +1088,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1104,6 +1122,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1123,24 +1170,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1389,6 +1418,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1510,12 +1690,12 @@ Version: %s OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1876,29 +2056,29 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated OpenLP versjonen har blitt oppdatert - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -1914,12 +2094,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2241,17 +2421,17 @@ The content encoding is not UTF-8. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2408,57 +2588,57 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Move to previous Flytt til forrige - + Move to next - + Hide - + Move to live - + Start continuous loop Start kontinuerlig løkke - + Stop continuous loop - + Delay between slides in seconds Forsinkelse mellom lysbilder i sekund - + Start playing media Start avspilling av media - + Go To - + Edit and reload song preview - + Blank Screen @@ -2468,32 +2648,32 @@ The content encoding is not UTF-8. - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2640,68 +2820,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. Du kan ikke slette det globale temaet - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. Filen er ikke et gyldig tema. - + Theme %s is used in the %s plugin. @@ -2721,47 +2901,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4404,7 +4584,7 @@ The encoding is responsible for the correct character representation. - + Delete Song(s)? @@ -4419,7 +4599,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/nl.ts b/resources/i18n/nl.ts index 75f10b76f..c39446796 100644 --- a/resources/i18n/nl.ts +++ b/resources/i18n/nl.ts @@ -12,18 +12,19 @@ Toch doorgaan? No Parameter Found - + geen parameters gevonden No Placeholder Found - + niet gevonden The alert text does not contain '<>'. Do you want to continue anyway? - + De waarschuwing bevat geen '<>'. +Toch doorgaan? @@ -154,30 +155,30 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Testament importeren... %s - + Importing testaments... done. - + Importeren testamenten... klaar. - + Importing books... %s - + Importeren bijbelboeken... %s - + Importing verses from %s... Importing verses from <book name>... - + Importeren bijbelverzen uit %s... - + Importing verses... done. - + Importeren bijbelverzen... klaar. @@ -190,7 +191,7 @@ Do you want to continue anyway? Parse Error - Parse fout + Verwerkingsfout @@ -331,7 +332,14 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + De opgegeven tekstverwijzing wordt niet herkend door OpenLP of is ongeldig. Gebruik een van onderstaande patronen: + +Boek Hoofdstuk +Boek Hoofdstuk-Hoofdstuk +Boek Hoofdstuk:Vers-Vers +Boek Hoofdstuk:Vers-Vers,Vers-Vers +Boek Hoofdstuk:Vers-Vers,Hoofdstuk:Vers-Vers +Boek Hoofdstuk:Vers-Hoofdstuk:Vers @@ -517,7 +525,7 @@ Deze wijzigingen hebben geen betrekking op bijbelverzen die al in de liturgie zi Deze bijbelvertaling bestaat reeds - + Your Bible import failed. Het importeren is mislukt. @@ -537,12 +545,12 @@ Deze wijzigingen hebben geen betrekking op bijbelverzen die al in de liturgie zi Deze bijbel bestaat reeds. Geef een andere naam of verwijder eerst het bestaande exemplaar. - + Starting Registering bible... Start registreren Bijbel... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Registratie afgerond. @@ -566,27 +574,27 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood Bible file: - + Bijbel bestand: Testaments file: - + Testamenten bestand: Books file: - + Bijbelboeken bestand: Verses file: - + Bijbelverzen bestand: You have not specified a testaments file. Do you want to proceed with the import? - + Geen testament bestand opgegeven. Toch importeren? @@ -659,13 +667,13 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood Scripture Reference - + Schriftverwijzing BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... %s %s wordt geïmporteerd... @@ -674,12 +682,12 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Tekstcodering detecteren (dat kan even duren)... - + Importing %s %s... Importing <book name> <chapter>... %s %s wordt geïmporteerd... @@ -896,7 +904,7 @@ N.B. bijbelteksten worden gedownload indien nodig internetverbinding is dus nood Select Attachment - + Selecteer bijlage @@ -1035,7 +1043,7 @@ De andere afbeeldingen alsnog toevoegen? Videos (%s);;Audio (%s);;%s (*) - + Video’s (%s);;Audio (%s);;%s (*) @@ -1070,7 +1078,7 @@ OpenLP is free church presentation software, or lyrics projection software, used Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - OpenLP <version><revision> - Open Source Lyrics Projection + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -1079,17 +1087,17 @@ Find out more about OpenLP: http://openlp.org/ OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider contributing by using the button below. - + Credits - Credits + Credits - + License Licentie - + Contribute Bijdragen @@ -1099,7 +1107,28 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr build %s - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + 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; version 2 of the License. + 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; version 2 of the License. + + + + 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 below for more details. + 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 below for more details. + + + Project Lead %s @@ -1115,6 +1144,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1134,24 +1192,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1193,27 +1233,27 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Hide mouse cursor when over display window - + Verberg muisaanwijzer in het weergave venster Default Image - + standaard afbeelding Background color: - Achtergrondkleur: + Achtergrondkleur: Image file: - + Afbeeldingsbestand: Open File - Open bestand + Open bestand @@ -1221,52 +1261,52 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Edit Selection - Bewerk selectie + Bewerk selectie Update - Update + Update Description - Omschrijving + Omschrijving Tag - Tag + Tag Start tag - Start tag + Start tag End tag - Eind tag + Eind tag Default - Standaard + Standaard Tag id - Tag id + Tag id Start Html - Start Html + Start Html End Html - Eind Html + Eind Html @@ -1402,6 +1442,157 @@ Version: %s Bestand kopiëren + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + bijbeltekst + + + + Images + + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1523,12 +1714,12 @@ Version: %s OpenLP.LanguageManager - + Language Taal - + Please restart OpenLP to use your new language setting. Start OpenLP opnieuw op om de nieuwe taalinstellingen te gebruiken. @@ -1889,27 +2080,27 @@ Version: %s Weergave modus naar Live. - + OpenLP Version Updated Nieuwe OpenLP versie beschikbaar - + OpenLP Main Display Blanked OpenLP projectie op zwart - + The Main Display has been blanked out Projectie is uitgeschakeld: scherm staat op zwart - + Default Theme: %s Standaardthema: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1929,12 +2120,12 @@ U kunt de laatste versie op http://openlp.org/ downloaden. &Sneltoetsen instellen... - + Close OpenLP OpenLP afsluiten - + Are you sure you want to close OpenLP? OpenLP afsluiten? @@ -2257,17 +2448,17 @@ Tekst codering is geen UTF-8. Geen geldig liturgie bestand. - + Missing Display Handler Ontbrekende weergave regelaar - + Your item cannot be displayed as there is no handler to display it Dit onderdeel kan niet weergegeven worden, omdat er een regelaar ontbreekt - + Your item cannot be displayed as the plugin required to display it is missing or inactive Dit onderdeel kan niet weergegeven worden omdat de benodigde plugin ontbreekt of inactief is @@ -2424,57 +2615,57 @@ Tekst codering is geen UTF-8. OpenLP.SlideController - + Move to previous Naar vorige - + Move to next Naar volgende - + Hide Verbergen - + Move to live Naar Live - + Start continuous loop Start doorlopende diashow - + Stop continuous loop Stop doorlopende diashow - + Delay between slides in seconds Vertraging tussen dia's in seconden - + Start playing media Start afspelen media - + Go To Ga naar - + Edit and reload song preview Bewerk en lied voorbeeld opnieuw weergeven - + Blank Screen Zwart scherm @@ -2484,32 +2675,32 @@ Tekst codering is geen UTF-8. Zwart naar thema - + Show Desktop Toon bureaublad - + Previous Slide Vorige dia - + Next Slide Volgende dia - + Previous Service Vorige liturgie - + Next Service Volgende liturgie - + Escape Item Onderdeel annuleren @@ -2656,69 +2847,69 @@ Tekst codering is geen UTF-8. Instellen als al&gemene standaard - + %s (default) %s (standaard) - + You must select a theme to edit. Selecteer een thema om te bewerken. - + You are unable to delete the default theme. Het standaard thema kan niet worden verwijderd. - + You have not selected a theme. Selecteer een thema. - + Save Theme - (%s) Thema opslaan - (%s) - + Theme Exported Thema geëxporteerd - + Your theme has been successfully exported. Exporteren thema is gelukt. - + Theme Export Failed Exporteren thema is mislukt - + Your theme could not be exported due to an error. Thema kan niet worden geëxporteerd als gevolg van een fout. - + Select Theme Import File Selecteer te importeren thema bestand - + File is not a valid theme. The content encoding is not UTF-8. Geen geldig thema bestand. Tekst codering is geen UTF-8. - + File is not a valid theme. Geen geldig thema bestand. - + Theme %s is used in the %s plugin. Thema %s wordt gebruikt in de %s plugin. @@ -2738,47 +2929,47 @@ Tekst codering is geen UTF-8. &Exporteer thema - + You must select a theme to rename. Selecteer een thema om te hernoemen. - + Rename Confirmation Bevestig hernoemen - + Rename %s theme? %s thema hernoemen? - + You must select a theme to delete. Selecteer een thema om te verwijderen. - + Delete Confirmation Bevestig verwijderen - + Delete %s theme? %s thema verwijderen? - + Validation Error Validatie fout - + A theme with this name already exists. Er bestaat al een thema met deze naam. - + OpenLP Themes (*.theme *.otz) @@ -3124,7 +3315,7 @@ Tekst codering is geen UTF-8. Import - Import + Importeren @@ -3134,7 +3325,7 @@ Tekst codering is geen UTF-8. Live - Live + Live @@ -3154,7 +3345,7 @@ Tekst codering is geen UTF-8. OpenLP 2.0 - OpenLP 2.0 + OpenLP 2.0 @@ -3255,7 +3446,7 @@ Tekst codering is geen UTF-8. pt Abbreviated font pointsize unit - pt + pt @@ -3304,7 +3495,7 @@ Tekst codering is geen UTF-8. openlp.org 1.x - openlp.org 1.x + openlp.org 1.x @@ -3340,7 +3531,7 @@ Tekst codering is geen UTF-8. You must select an item to edit. - You must select an item to edit. + Selecteer iets om te bewerken. @@ -3377,7 +3568,7 @@ Tekst codering is geen UTF-8. Importing "%s"... - Importing "%s"... + Importeren "%s"... @@ -4149,37 +4340,37 @@ Meestal voldoet de suggestie van OpenLP. You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? - You have not used %s anywhere in the verse order. Are you sure you want to save the song like this? + U heeft %s nergens in de vers volgorde gebruikt. Weet u zeker dat u dit lied zo wilt opslaan? Alt&ernate title: - Alt&ernate title: + Afwiss&elende titel: &Verse order: - &Verse order: + &Vers volgorde: &Manage Authors, Topics, Song Books - &Manage Authors, Topics, Song Books + &Beheer auteurs, onderwerpen, liedboeken Authors, Topics && Song Book - Authors, Topics && Song Book + Auteurs, onderwerpen && liedboeken This author is already in the list. - This author is already in the list. + Deze auteur staat al in de lijst. This topic is already in the list. - This topic is already in the list. + Dit onderwerp staat al in de lijst. @@ -4194,12 +4385,12 @@ Meestal voldoet de suggestie van OpenLP. You need to have an author for this song. - You need to have an author for this song. + Iemand heeft dit lied geschreven. You need to type some text in to the verse. - You need to type some text in to the verse. + Er moet toch een tekst zijn om te zingen. @@ -4225,82 +4416,82 @@ Meestal voldoet de suggestie van OpenLP. Song Export Wizard - + Lied Exporteer Assistent This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Deze assistent helpt u uw liederen te exporteren naar het openen vrije OpenLyrics worship lied bestand formaat. Select Songs - + Selecteer liederen Uncheck All - + Deselecteer alles Check All - + Selecteer alles Select Directory - + Selecteer map Select the directory you want the songs to be saved. - + Selecteer de map waar de liederen moet worden bewaard. Directory: - + Map: Exporting - + Exporteren Please wait while your songs are exported. - + Even wachten terwijl de liederen worden geëxporteerd. You need to add at least one Song to export. - + Kies minstens een lied om te exporteren. No Save Location specified - + Niet opgegeven waar bestand moet worden bewaard Starting export... - + Start exporteren... Check the songs you want to export. - + Selecteer de liederen die u wilt exporteren. You need to specify a directory. - + Geef aan waar het bestand moet worden opgeslagen. Select Destination Folder - + Selecteer een doelmap @@ -4308,12 +4499,12 @@ Meestal voldoet de suggestie van OpenLP. Song Import Wizard - Lied import assistent + Lied importeer assistent This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. - This wizard will help you to import songs from a variety of formats. Click the next button below to start the process by selecting a format to import from. + Deze assistent helpt liederen in verschillende bestandsformaten te importeren in OpenLP. Klik op volgende en kies daarna het bestandsformaat van het te importeren lied. @@ -4333,12 +4524,12 @@ Meestal voldoet de suggestie van OpenLP. Please wait while your songs are imported. - Please wait while your songs are imported. + Even geduld tijdens het importeren. Select Document/Presentation Files - Select Document/Presentation Files + Selecteer Documenten/Presentatie bestanden @@ -4424,7 +4615,7 @@ Meestal voldoet de suggestie van OpenLP. Liedtekst - + Delete Song(s)? Delete Song(s)? @@ -4439,10 +4630,10 @@ Meestal voldoet de suggestie van OpenLP. Gehele lied - + Are you sure you want to delete the %n selected song(s)? - - Are you sure you want to delete the %n selected song(s)? + + Weet u zeker dat u deze %n lied(eren) wilt verwijderen? diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index d12f18edc..a36e643a5 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -12,18 +12,19 @@ Ainda deseja continuar? No Parameter Found - + Nenhum Parâmetro Encontrado No Placeholder Found - + Nenhum Marcador de Posição Encontrado The alert text does not contain '<>'. Do you want to continue anyway? - + O texto de alerta não contém '<>'. +Você gostaria de continuar de qualquer maneira? @@ -154,28 +155,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s Importando testamentos... %s - + Importing testaments... done. Importando testamentos... concluído. - + Importing books... %s Importando livros... %s - + Importing verses from %s... Importing verses from <book name>... Importando versículos de %s... - + Importing verses... done. Importando versículos... concluído. @@ -246,7 +247,7 @@ Do you want to continue anyway? Delete the selected Bible - Deletar a Bíblia selecionada + Excluir a Bíblia selecionada @@ -331,7 +332,14 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - + A sua referência das escrituras é inválida ou não é suportada pelo OpenLP. Por favor certifique-se que ela está de acordo com um dos seguintes padrões: + +Capítulo do Livro +Capítulo do Lívro-Capítulo +Capítulo do Livro:Versículo-Versículo +Capítulo do Livro:Versículo-Versículo,Versículo-Versículo +Capítulo do Livro:Versículo-Versículo,Capítulo:Versículo-Versículo +Capítulo do Livro:Versículo-Capítulo:Versículo @@ -406,7 +414,7 @@ Book Chapter:Verse-Chapter:Verse Note: Changes do not affect verses already in the service. Nota: -Mudanças não afetam os versículos que já estão no culto. +Mudanças não afetam os versículos que já estão na lista de exibição. @@ -522,7 +530,7 @@ Mudanças não afetam os versículos que já estão no culto. Bíblia Existe - + Your Bible import failed. A sua Importação da Bíblia falhou. @@ -537,12 +545,12 @@ Mudanças não afetam os versículos que já estão no culto. Esta Bíblia já existe. Importe uma Bíblia diferente ou apague a existente primeiro. - + Starting Registering bible... Registrando Bíblia... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Bíblia registrada. Note que os versos serão baixados de acordo @@ -566,7 +574,7 @@ com o uso, portanto uma conexão com a internet é necessária. Bible file: - Arquivo de Bíblia + Arquivo de Bíblia: @@ -654,18 +662,18 @@ com o uso, portanto uma conexão com a internet é necessária. Second: - Segundo: + Segundo: Scripture Reference - + Referência da Escritura BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importando %s %s... @@ -674,12 +682,12 @@ com o uso, portanto uma conexão com a internet é necessária. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detectando codificação (isto pode levar alguns minutos)... - + Importing %s %s... Importing <book name> <chapter>... Importando %s %s... @@ -690,7 +698,7 @@ com o uso, portanto uma conexão com a internet é necessária. <strong>Custom Plugin</strong><br />The custom plugin provides the ability to set up custom text slides that can be displayed on the screen the same way songs are. This plugin provides greater freedom over the songs plugin. - <strong>Plugin Personalizado</strong><br />O plugin personalizado permite criar slides de texto que são apresentados da mesma maneira que as músicas. Este plugin permite mais liberdade do que o plugin de músicas. + <strong>Plugin Personalizado</strong><br />O plugin personalizado permite criar slides de texto que são apresentados da mesma maneira que as músicas. Este plugin permite mais liberdade do que o plugin de músicas. @@ -821,13 +829,13 @@ com o uso, portanto uma conexão com a internet é necessária. Customs name plural - + Customizados Custom container title - Customizado + Customizado @@ -835,7 +843,7 @@ com o uso, portanto uma conexão com a internet é necessária. <strong>Image Plugin</strong><br />The image plugin provides displaying of images.<br />One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP's "timed looping" feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme's background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme. - <strong>Plugin de Imagens</strong><br />O plugin de imagens fornece a exibição de imagens,<br />Uma das funcionalidades importantes deste plugin é a habilidade de agrupar várias imagens na Lista de Exibição, facilitando a exibição de várias imagens. Este plugin também pode usar a funcionalidade de "loop temporizado" do OpenLP para criar uma apresentação de slides que é executada automaticamente. Além disso, imagens do plugin podem ser usadas em sobreposição ao plano de fundo do tema atual, exibindo itens baseados em texto como músicas com a imagem selecionada ao fundo ao invés do plano de fundo fornecido pelo tema. + <strong>Plugin de Imagens</strong><br />O plugin de imagens fornece a exibição de imagens.<br />Uma das funcionalidades importantes deste plugin é a habilidade de agrupar várias imagens na Lista de Exibição, facilitando a exibição de várias imagens. Este plugin também pode usar a funcionalidade de "loop temporizado" do OpenLP para criar uma apresentação de slides que é executada automaticamente. Além disso, imagens do plugin podem ser usadas em sobreposição ao plano de fundo do tema atual, exibindo itens baseados em texto como músicas com a imagem selecionada ao fundo ao invés do plano de fundo fornecido pelo tema. @@ -855,12 +863,12 @@ com o uso, portanto uma conexão com a internet é necessária. Delete the selected Image - Deletar a Imagem selecionada + Excluir a Imagem selecionada Preview the selected Image - Pré-Visualizar a Imagem selecionada + Visualizar a Imagem selecionada @@ -1025,7 +1033,7 @@ Deseja continuar adicionando as outras imagens? You must select a media file to replace the background with. - Você precisa selecionar um arquivo de mídia para definir como plano de fundo. + Você precisa selecionar um arquivo de mídia para substituir o plano de fundo. @@ -1035,7 +1043,7 @@ Deseja continuar adicionando as outras imagens? Videos (%s);;Audio (%s);;%s (*) - + Vídeos (%s);;Áudio (%s);;%s (*) @@ -1043,7 +1051,7 @@ Deseja continuar adicionando as outras imagens? Media Display - Exibição de Mídia + Exibição de Mídia @@ -1079,17 +1087,17 @@ Conheça mais sobre o OpenLP: http://openlp.org/ O OpenLP é escrito e mantido por voluntários. Se você gostaria de contribuir para mais softwares livres Cristãos serem produzidos, considere contribuir usando o botão abaixo. - + Credits Créditos - + License Licença - + Contribute Contribuir @@ -1099,7 +1107,28 @@ O OpenLP é escrito e mantido por voluntários. Se você gostaria de contribuir compilação %s - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + Direitos Autorais © 2004-2011 Raoul Snyman +Porções de Direitos Autorais © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + 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; version 2 of the License. + Este programa é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença. + + + + 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 below for more details. + Este programa é distribuido na esperança que será útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO PARA UM DETERMINADO FIM. Veja abaixo para maiores detalhes. + + + Project Lead %s @@ -1115,6 +1144,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1134,24 +1192,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1183,7 +1223,7 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Enable application exit confirmation - Habilitar confirmação de saída do programa + Habilitar confirmação de saída do programa @@ -1193,27 +1233,27 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Hide mouse cursor when over display window - + Ocultar o cursor do mouse quando estiver sobre a tela de exibição Default Image - + Imagem Padrão Background color: - Cor do plano de fundo: + Cor do plano de fundo: Image file: - + Arquivo de Imagem: Open File - Abrir Arquivo + Abrir Arquivo @@ -1221,52 +1261,52 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Edit Selection - Editar Seleção + Editar Seleção Update - Update + Atualizar Description - Descrição + Descrição Tag - + Etiqueta Start tag - + Etiqueta Inicial End tag - + Etiqueta Final Default - Padrão + Padrão Tag id - + Id da Etiqueta Start Html - + Html Inicial End Html - + Html Final @@ -1279,12 +1319,12 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Tag "n" already defined. - + Etiqueta "n" já está definida. Tag %s already defined. - + Etiqueta %s já está definida. @@ -1429,6 +1469,157 @@ Agradecemos se for possível escrever seu relatório em inglês. Copiar arquivo + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + Músicas + + + + Bibles + Bíblias + + + + Themes + Temas + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + Bíblia + + + + Images + Imagens + + + + Presentations + Apresentações + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1550,12 +1741,12 @@ Agradecemos se for possível escrever seu relatório em inglês. OpenLP.LanguageManager - + Language Idioma - + Please restart OpenLP to use your new language setting. Por favor reinicie o OpenLP para usar a nova configuração de idioma. @@ -1763,7 +1954,7 @@ Agradecemos se for possível escrever seu relatório em inglês. Toggle Service Manager - Alternar para o Gerenciador de Lista de Exibição + Alternar a Lista de Exibição @@ -1788,7 +1979,7 @@ Agradecemos se for possível escrever seu relatório em inglês. Toggle the visibility of the preview panel. - Alternar a visibilidade da coluna de pré-visualização. + Alternar a visibilidade da coluna de pré-visualização. @@ -1916,7 +2107,7 @@ Agradecemos se for possível escrever seu relatório em inglês. Configurar o modo de visualização como Projeção. - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. @@ -1925,22 +2116,22 @@ You can download the latest version from http://openlp.org/. Voce pode baixar a versão mais nova em http://openlp.org/. - + OpenLP Version Updated Versão do OpenLP Atualizada - + OpenLP Main Display Blanked Tela Principal do OpenLP em Branco - + The Main Display has been blanked out A Tela Principal foi apagada - + Default Theme: %s Tema padrão: %s @@ -1948,7 +2139,7 @@ Voce pode baixar a versão mais nova em http://openlp.org/. English Please add the name of your language here - Português + Português (Brasil) @@ -1956,19 +2147,19 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Configurar &Atalhos... - + Close OpenLP Fechar o OpenLP - + Are you sure you want to close OpenLP? - Você tem certeza de que quer fechar o OpenLP? + Você tem certeza de que quer fechar o OpenLP? Print the current Service Order. - + Imprimir a Lista de Exibição atual. @@ -1978,17 +2169,17 @@ Voce pode baixar a versão mais nova em http://openlp.org/. &Configure Display Tags - + &Configurar Etiquetas de Exibição Open &Data Folder... - + Abrir Pasta de &Dados... Open the folder where songs, bibles and other data resides. - + Abrir a pasta na qual músicas, Bíblias e outros arquivos são armazenados. @@ -2011,7 +2202,7 @@ Voce pode baixar a versão mais nova em http://openlp.org/. You must select one or more items to send live. - Você precisa selecionar um ou mais itens para projetar. + Você precisa selecionar um ou mais itens para projetar. @@ -2026,12 +2217,12 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Invalid Service Item - Item da Lista de Exibição inválido + Item da Lista de Exibição inválido You must select a %s service item. - Você precisa selecionar um item %s da Lista de Exibição. + Você precisa selecionar um item %s da Lista de Exibição. @@ -2082,12 +2273,12 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Fit Page - + Ajustar na Página Fit Width - + Ajustar Largura @@ -2095,62 +2286,62 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Options - + Opções Close - + Fechar Copy - + Copiar Copy as HTML - + Copiar como HTML Zoom In - + Aumentar o Zoom Zoom Out - + Diminuir o Zoom Zoom Original - + Zoom Original Other Options - + Outras Opções Include slide text if available - + Incluir texto do slide se disponível Include service item notes - + Incluir notas da lista de exibição Include play length of media items - + Incluir duração dos itens de mídia Service Order Sheet - + Folha de Ordem de Culto @@ -2158,12 +2349,12 @@ Voce pode baixar a versão mais nova em http://openlp.org/. Screen - Tela + Tela primary - primário + primário @@ -2234,12 +2425,12 @@ Voce pode baixar a versão mais nova em http://openlp.org/. &Delete From Service - &Deletar da Lista de Exibição + &Excluir da Lista de Exibição Delete the selected item from the service. - Deletar o item selecionado da Lista de Exibição. + Excluir o item selecionado da Lista de Exibição. @@ -2281,37 +2472,37 @@ A codificação do conteúdo não é UTF-8. File is not a valid service. - Arquivo não é uma Lista de Exibição válida. + Arquivo não é uma Lista de Exibição válida. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive - O item não pode ser exibido porque o plugin necessário para visualizá-lo está faltando ou está inativo + O item não pode ser exibido porque o plugin necessário para visualizá-lo está faltando ou está inativo &Expand all - &Expandir todos + &Expandir todos Expand all the service items. - Expandir todos os itens da lista. + Expandir todos os itens da lista. &Collapse all - &Recolher todos + &Recolher todos @@ -2326,7 +2517,7 @@ A codificação do conteúdo não é UTF-8. OpenLP Service Files (*.osz) - Lista de Exibição do OpenLP (*.osz) + Listas de Exibição do OpenLP (*.osz) @@ -2336,7 +2527,7 @@ A codificação do conteúdo não é UTF-8. Move up - Mover para cima + Mover para cima @@ -2366,22 +2557,22 @@ A codificação do conteúdo não é UTF-8. &Start Time - + &Horário Inicial Show &Preview - + Exibir &Visualização Show &Live - + Exibir &Projeção The current service has been modified. Would you like to save this service? - + A lista de exibição atual foi modificada. Você gostaria de salvá-la? @@ -2389,7 +2580,7 @@ A codificação do conteúdo não é UTF-8. Service Item Notes - Item de Notas de Culto + Anotações do Item @@ -2425,12 +2616,12 @@ A codificação do conteúdo não é UTF-8. Custom: - Personalizado: + Personalizado: None - Nenhum + Nenhum @@ -2445,63 +2636,63 @@ A codificação do conteúdo não é UTF-8. Alternate - + Alternativo OpenLP.SlideController - + Move to previous Mover para o anterior - + Move to next Mover para o próximo - + Hide - Ocultar + Ocultar - + Move to live Mover para projeção - + Start continuous loop Iniciar repetição contínua - + Stop continuous loop Parar repetição contínua - + Delay between slides in seconds Intervalo entre slides em segundos - + Start playing media Iniciar a reprodução de mídia - + Go To Ir Para - + Edit and reload song preview Editar e recarregar pré-visualização da música - + Blank Screen Apagar Tela @@ -2511,32 +2702,32 @@ A codificação do conteúdo não é UTF-8. Apagar e deixar Fundo - + Show Desktop Mostrar a Área de Trabalho - + Previous Slide Slide Anterior - + Next Slide Próximo Slide - + Previous Service Lista Anterior - + Next Service Próxima Lista - + Escape Item @@ -2551,7 +2742,7 @@ A codificação do conteúdo não é UTF-8. Formatting Tags - + Tags de Formatação @@ -2559,32 +2750,32 @@ A codificação do conteúdo não é UTF-8. Item Start Time - + Horário Inicial do Item Hours: - + Horários: h - + h m - + m Minutes: - + Minutos: Seconds: - + Segundos: @@ -2597,7 +2788,7 @@ A codificação do conteúdo não é UTF-8. Theme Name Missing - Faltando Nome do Tema + Faltando Nome do Tema @@ -2612,7 +2803,7 @@ A codificação do conteúdo não é UTF-8. Invalid theme name. Please enter one. - O nome do tema é inválido. Por favor forneça um. + O nome do tema é inválido. Por favor forneça um. @@ -2683,69 +2874,69 @@ A codificação do conteúdo não é UTF-8. Definir como Padrão &Global - + %s (default) %s (padrão) - + You must select a theme to edit. Você precisa selecionar um tema para editar. - + You are unable to delete the default theme. Você não pode apagar o tema padrão. - + You have not selected a theme. Você não selecionou um tema. - + Save Theme - (%s) Salvar Tema - (%s) - + Theme Exported Tema Exportado - + Your theme has been successfully exported. Seu tema foi exportado com sucesso. - + Theme Export Failed Falha ao Exportar Tema - + Your theme could not be exported due to an error. O tema não pôde ser exportado devido a um erro. - + Select Theme Import File Selecionar Arquivo de Importação de Tema - + File is not a valid theme. The content encoding is not UTF-8. O arquivo não é um tema válido. A codificação do conteúdo não é UTF-8. - + File is not a valid theme. O arquivo não é um tema válido. - + Theme %s is used in the %s plugin. O tema %s é usado no plugin %s. @@ -2765,49 +2956,49 @@ A codificação do conteúdo não é UTF-8. &Exportar Tema - + You must select a theme to rename. Você precisa selecionar um tema para renomear. - + Rename Confirmation - Confirmar Renomeação + Confirmar Renomeação - + Rename %s theme? Renomear o tema %s? - + You must select a theme to delete. Você precisa selecionar um tema para apagar. - + Delete Confirmation - Confirmar Apagamento + Confirmar Exclusão - + Delete %s theme? Apagar o tema %s? - + Validation Error Erro de Validação - + A theme with this name already exists. Já existe um tema com este nome. - + OpenLP Themes (*.theme *.otz) - + Temas do OpenLP (*.theme *.otz) @@ -2825,7 +3016,7 @@ A codificação do conteúdo não é UTF-8. Set Up Background - Configurar Plano de Fundo + Configurar Plano de Fundo @@ -2840,7 +3031,7 @@ A codificação do conteúdo não é UTF-8. Solid Color - Cor Sólida + Cor Sólida @@ -2875,22 +3066,22 @@ A codificação do conteúdo não é UTF-8. Top Left - Bottom Right - Esquerda Superior - Direita Inferior + Esquerda Superior - Direita Inferior Bottom Left - Top Right - Esquerda Inferior - Direita Superior + Esquerda Inferior - Direita Superior Main Area Font Details - Detalhes da Fonte da Área Principal + Detalhes da Fonte da Área Principal Define the font and display characteristics for the Display text - + Definir a fonte de características de exibição para o texto Exibido @@ -2900,7 +3091,7 @@ A codificação do conteúdo não é UTF-8. Size: - Tamanho: + Tamanho: @@ -2935,17 +3126,17 @@ A codificação do conteúdo não é UTF-8. Define the font and display characteristics for the Footer text - Defina as características do texto do Rodapé + Defina as características do texto do Rodapé Text Formatting Details - Detalhes da Formatação da Fonte + Detalhes da Formatação da Fonte Allows additional display formatting information to be defined - Permite que formatações adicionais sejam feitas + Permite que formatações adicionais sejam feitas @@ -2965,12 +3156,12 @@ A codificação do conteúdo não é UTF-8. Center - Centralizar + Centralizado Output Area Locations - Localização da Área de Saída + Localização da Área de Saída @@ -3045,7 +3236,7 @@ A codificação do conteúdo não é UTF-8. &Footer Area - Área do &Rodapé + Área do &Rodapé @@ -3063,7 +3254,7 @@ A codificação do conteúdo não é UTF-8. Theme Level - Nível dos Temas + Nível dos Temas @@ -3073,12 +3264,12 @@ A codificação do conteúdo não é UTF-8. Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - Use o tema de cada música na base de dados. Se uma música não tiver um tema associado com ela, então use o tema do culto. Se o culto não tiver um tema, então use o tema global. + Use o tema de cada música na base de dados. Se uma música não tiver um tema associado com ela, então use o tema da lista de exibição. Se a lista não tiver um tema, então use o tema global. &Service Level - Nível de &Lista de Exibição + Nível da &Lista de Exibição @@ -3106,7 +3297,7 @@ A codificação do conteúdo não é UTF-8. &Delete - &Apagar + &Excluir @@ -3116,98 +3307,98 @@ A codificação do conteúdo não é UTF-8. Move selection up one position. - Mover a seleção para cima em uma posição. + Mover a seleção para cima em uma posição. Move selection down one position. - Mover a seleção para baixo em uma posição. + Mover a seleção para baixo em uma posição. About - Sobre + Sobre &Add - &Adicionar + &Adicionar Advanced - Avançado + Avançado All Files - Todos os Arquivos + Todos os Arquivos Bottom - Rodapé + Rodapé Browse... - Procurar... + Procurar... Cancel - Cancelar + Cancelar CCLI number: - Número CCLI: + Número CCLI: Create a new service. - Criar uma nova Lista de Exibição. + Criar uma nova Lista de Exibição. &Edit - &Editar + &Editar Empty Field - + Campo Vazio Export - + Exportar pt Abbreviated font pointsize unit - pt + pt Image - Imagem + Imagem Import - Importar + Importar Length %s - + Comprimento %s Live - Projeção + Projeção @@ -3217,297 +3408,297 @@ A codificação do conteúdo não é UTF-8. Live Panel - + Painel de Projeção Load - Carregar + Carregar Middle - Meio + Meio New - Novo + Novo New Service - + Nova Lista de Exibição New Theme - Novo Tema + Novo Tema No File Selected Singular - + Nenhum Arquivo Selecionado No Files Selected Plural - + Nenhum Arquivo Selecionado No Item Selected Singular - + Nenhum Item Selecionado No Items Selected Plural - Nenhum Item Selecionado + Nenhum Item Selecionado openlp.org 1.x - openlp.org 1.x + openlp.org 1.x OpenLP 2.0 - OpenLP 2.0 + OpenLP 2.0 Open Service - Abrir Lista de Exibição + Abrir Lista de Exibição Preview - Pré-Visualização + Pré-Visualização Preview Panel - + Painel de Pré-Visualização Print Service Order - + Imprimir Ordem de Culto Replace Background - Substituir Plano de Fundo + Substituir Plano de Fundo Replace Live Background - Trocar Plano de Fundo da Projeção + Trocar Plano de Fundo da Projeção Reset Background - + Restabelecer o Plano de Fundo Reset Live Background - Restabelecer o Plano de Fundo da Projeção + Restabelecer o Plano de Fundo da Projeção s The abbreviated unit for seconds - s + s Save && Preview - Salvar && Pré-Visualizar + Salvar && Pré-Visualizar Search - Pesquisar + Pesquisar You must select an item to delete. - Você precisa selecionar um item para apagar. + Você precisa selecionar um item para excluir. You must select an item to edit. - Você precisa selecionar um item para editar. + Você precisa selecionar um item para editar. Save Service - Salvar Lista de Exibição + Salvar Lista de Exibição Service - Lista de Exibição + Lista de Exibição Start %s - + Início %s Theme Singular - Tema + Tema Themes Plural - Temas + Temas Top - Topo + Topo Version - + Versão &Vertical Align: - + Alinhamento &Vertical: Finished import. - + Importação concluída. Format: - Formato: + Formato: Importing - Importando + Importando Importing "%s"... - Importando "%s"... + Importando "%s"... Select Import Source - Selecionar Origem da Importação + Selecionar Origem da Importação Select the import format and the location to import from. - + Selecione o formato e a localização para a importação. The openlp.org 1.x importer has been disabled due to a missing Python module. If you want to use this importer, you will need to install the "python-sqlite" module. - O importador do openlp.org 1.x foi desabilitado devido à falta de um módulo Python. Se você deseja utilizar este importador, você precisa instalar o módulo "python-sqlite". + O importador do openlp.org 1.x foi desabilitado devido à falta de um módulo Python. Se você deseja utilizar este importador, você precisa instalar o módulo "python-sqlite". Open %s File - + Abrir o Arquivo %s %p% - %p% + %p% Ready. - Pronto. + Pronto. Starting import... - Iniciando importação... + Iniciando importação... You need to specify at least one %s file to import from. A file type e.g. OpenSong - + Você precisa especificar pelo menos um arquivo %s para importar. Welcome to the Bible Import Wizard - Bem Vindo ao assistente de Importação de Bíblias + Bem Vindo ao Assistente de Importação de Bíblias Welcome to the Song Export Wizard - + Bem Vindo ao Assistente de Exportação de Músicas Welcome to the Song Import Wizard - Bem-vindo ao Assistente de Importação de Música + Bem-vindo ao Assistente de Importação de Música Author Singular - + Autor Authors Plural - Autores + Autores © Copyright symbol. - © + © Song Book Singular - Livro de Músicas + Livro de Músicas Song Books Plural - Hinários + Hinários Song Maintenance - Gerenciamento de Músicas + Gerenciamento de Músicas Topic Singular - Tópico + Tópico Topics Plural - Tópicos + Tópicos @@ -3515,7 +3706,7 @@ A codificação do conteúdo não é UTF-8. Configure Display Tags - + Configurar Etiquetas de Exibição @@ -3523,17 +3714,17 @@ A codificação do conteúdo não é UTF-8. <strong>Presentation Plugin</strong><br />The presentation plugin provides the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box. - + <strong>Plugin de Apresentação</strong><br />O plugin de apresentação provê a habilidade de exibir apresentações utilizando um diferente número de programas. Os programas disponíveis são exibidos em uma caixa de seleção. Load a new Presentation - Carregar uma nova Apresentação + Carregar uma nova Apresentação Delete the selected Presentation - Apagar a Apresentação selecionada + Excluir a Apresentação selecionada @@ -3554,7 +3745,7 @@ A codificação do conteúdo não é UTF-8. Presentation name singular - Apresentação + Apresentação @@ -3589,7 +3780,7 @@ A codificação do conteúdo não é UTF-8. File Exists - O Arquivo já Existe + O Arquivo já Existe @@ -3609,12 +3800,12 @@ A codificação do conteúdo não é UTF-8. Presentations (%s) - Apresentações (%s) + Apresentações (%s) Missing Presentation - Apresentação Não Encontrada + Apresentação Não Encontrada @@ -3624,7 +3815,7 @@ A codificação do conteúdo não é UTF-8. The Presentation %s is incomplete, please reload. - A Apresentação %s está incompleta, por favor recarregue-a. + A Apresentação %s está incompleta, por favor recarregue-a. @@ -3637,12 +3828,12 @@ A codificação do conteúdo não é UTF-8. Allow presentation application to be overriden - Permitir que a aplicação de apresentações seja substituída + Permitir que a aplicação de apresentações seja substituída %s (unavailable) - + %s (indisponivel) @@ -3650,25 +3841,25 @@ A codificação do conteúdo não é UTF-8. <strong>Remote Plugin</strong><br />The remote plugin provides the ability to send messages to a running version of OpenLP on a different computer via a web browser or through the remote API. - + <strong>Plugin Remoto</strong><br />O plugin remoto provê a abilidade de enviar mensagens para uma versão do OpenLP em execução em um computador diferente através de um navegador de internet ou através da API remota. Remote name singular - + Remoto Remotes name plural - Remoto + Remotos Remote container title - Remoto + Remoto @@ -3676,7 +3867,7 @@ A codificação do conteúdo não é UTF-8. Serve on IP address: - Endereço IP do servidor: + Endereço IP do servidor: @@ -3694,60 +3885,60 @@ A codificação do conteúdo não é UTF-8. &Song Usage Tracking - + &Registro de Uso de Músicas &Delete Tracking Data - + &Excluir Dados de Registro Delete song usage data up to a specified date. - + Excluir registros de uso até uma data específica. &Extract Tracking Data - + &Extrair Dados de Registro Generate a report on song usage. - + Gerar um relatório sobre o uso das músicas. Toggle Tracking - + Alternar Registro Toggle the tracking of song usage. - + Alternar o registro de uso das músicas. <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + <strong>Plugin de Uso das Músicas</strong><br />Este plugin registra o uso das músicas nos cultos. SongUsage name singular - + Registro das Músicas SongUsage name plural - + Registro das Músicas SongUsage container title - + Registro das Músicas @@ -3755,27 +3946,27 @@ A codificação do conteúdo não é UTF-8. Delete Song Usage Data - + Excluir Dados de Registro das Músicas Delete Selected Song Usage Events? - + Deseja Excluir os Eventos de Registro das Músicas? Are you sure you want to delete selected Song Usage data? - + Você tem certeza que deseja excluir o registro selecionado? Deletion Successful - + Exclusão Bem Sucedida All requested data has been deleted successfully. - Todos os dados solicitados foram apagados com sucesso. + Todos os dados solicitados foram apagados com sucesso. @@ -3783,7 +3974,7 @@ A codificação do conteúdo não é UTF-8. Song Usage Extraction - + Extração de Uso das Músicas @@ -3808,12 +3999,12 @@ A codificação do conteúdo não é UTF-8. usage_detail_%s_%s.txt - + detalhe_uso_%s_%s.txt Report Creation - + Criação de Relatório @@ -3840,7 +4031,7 @@ foi criado com sucesso. <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + <strong>Plugin de Músicas</strong><br />O plugin de músicas provê a habilidade de exibir e gerenciar músicas. @@ -3897,13 +4088,13 @@ foi criado com sucesso. Songs name plural - + Músicas Songs container title - Músicas + Músicas @@ -3918,7 +4109,7 @@ foi criado com sucesso. Central European (CP-1250) - Europeu Central (CP-1250) + Europeu Central (CP-1250) @@ -3953,7 +4144,7 @@ foi criado com sucesso. Thai (CP-874) - Tailandês (CP-874) + Tailandês (CP-874) @@ -3973,7 +4164,7 @@ foi criado com sucesso. Western European (CP-1252) - Europeu Ocidental (CP-1252) + Europeu Ocidental (CP-1252) @@ -3985,7 +4176,7 @@ foi criado com sucesso. The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - O Código de páginas é responsável + O Código de páginas é responsável pela correta representação dos caracteres. Normalmente a opção pré-selecionada é segura. @@ -3999,7 +4190,7 @@ A codificação é responsável pela correta representação dos caracteres. Exports songs using the export wizard. - + Exportar músicas utilizando o assistente. @@ -4007,7 +4198,7 @@ A codificação é responsável pela correta representação dos caracteres. Author Maintenance - Manutenção de Autores + Gerenciamento de Autores @@ -4037,7 +4228,7 @@ A codificação é responsável pela correta representação dos caracteres. You have not set a display name for the author, combine the first and last names? - Você não definiu um nome de tela para o autor, combinar o nome e o sobrenome? + Você não definiu um nome de tela para o autor, combinar o nome e o sobrenome? @@ -4098,7 +4289,7 @@ A codificação é responsável pela correta representação dos caracteres. &Manage Authors, Topics, Song Books - &Gerenciar Autores, Assuntos, Hinários + &Gerenciar Autores, Assuntos, Hinários @@ -4123,7 +4314,7 @@ A codificação é responsável pela correta representação dos caracteres. Authors, Topics && Song Book - Autores, Assuntos && Hinários + Autores, Assuntos && Hinários @@ -4133,7 +4324,7 @@ A codificação é responsável pela correta representação dos caracteres. Copyright Information - Informação de Direitos Autorais + Direitos Autorais @@ -4163,7 +4354,7 @@ A codificação é responsável pela correta representação dos caracteres. You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. - Você não selecionou um autor válido. Selecione um autor da list, ou digite um novo autor e clique em "Adicionar Autor à Música" para adicionar o novo autor. + Você não selecionou um autor válido. Selecione um autor da lista, ou digite um novo autor e clique em "Adicionar Autor à Música" para adicioná-lo. @@ -4198,7 +4389,7 @@ A codificação é responsável pela correta representação dos caracteres. Warning - Aviso + Aviso @@ -4213,12 +4404,12 @@ A codificação é responsável pela correta representação dos caracteres. Add Book - Adicionar Livro + Adicionar Livro This song book does not exist, do you want to add it? - Este hinário não existe, deseja adicioná-lo? + Este hinário não existe, deseja adicioná-lo? @@ -4228,7 +4419,7 @@ A codificação é responsável pela correta representação dos caracteres. You need to type some text in to the verse. - Você precisa digitar algum texto na estrofe. + Você precisa digitar algum texto na estrofe. @@ -4254,82 +4445,82 @@ A codificação é responsável pela correta representação dos caracteres. Song Export Wizard - + Assistente de Exportação de Músicas This wizard will help to export your songs to the open and free OpenLyrics worship song format. - + Este assistente irá ajudá-lo a exportar as suas músicas para o formato aberto e gratuito OpenLyrics. Select Songs - + Selecionar Músicas Check the songs you want to export. - + Selecione as músicas que você deseja exportar. Uncheck All - + Desmarcar Todas Check All - + Selecionar Todas Select Directory - + Selecionar Diretório Select the directory you want the songs to be saved. - + Selecionar o diretório que você deseja salvar as músicas. Directory: - + Diretório: Exporting - + Exportando Please wait while your songs are exported. - + Por favor aguarde enquanto as suas músicas são exportadas. You need to add at least one Song to export. - + Você precisa adicionar pelo menos uma Música para exportar. No Save Location specified - + Nenhum local para Salvar foi especificado Starting export... - + Iniciando a exportação... You need to specify a directory. - + Você precisa especificar um diretório. Select Destination Folder - + Selecione uma Pasta de Destino @@ -4337,7 +4528,7 @@ A codificação é responsável pela correta representação dos caracteres. Select Document/Presentation Files - Selecione Documentos/Apresentações + Selecione Documentos/Apresentações @@ -4352,7 +4543,7 @@ A codificação é responsável pela correta representação dos caracteres. Generic Document/Presentation - Documento/Apresentação Genérica + Documento/Apresentação Genérica @@ -4367,7 +4558,7 @@ A codificação é responsável pela correta representação dos caracteres. Remove File(s) - Remover Arquivos(s) + Remover Arquivos(s) @@ -4377,7 +4568,7 @@ A codificação é responsável pela correta representação dos caracteres. The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - O importador de documento/apresentação foi desabilitado porque o OpenOffice.org não foi encontrado. + O importador de documento/apresentação foi desabilitado porque o OpenOffice.org não foi encontrado no seu computador. @@ -4387,7 +4578,7 @@ A codificação é responsável pela correta representação dos caracteres. The OpenLyrics importer has not yet been developed, but as you can see, we are still intending to do so. Hopefully it will be in the next release. - + O importador para o formato OpenLyrics ainda não foi desenvolvido, mas como você pode ver, nós ainda pretendemos desenvolvê-lo. Possivelmente ele estará disponível na próxima versão. @@ -4412,27 +4603,27 @@ A codificação é responsável pela correta representação dos caracteres. You need to specify at least one document or presentation file to import from. - + Você precisa especificar pelo menos um documento ou apresentação para importar. Songs Of Fellowship Song Files - + Arquivos do Songs Of Fellowship SongBeamer Files - + Arquivos do SongBeamer SongShow Plus Song Files - + Arquivos do SongShow Plus Foilpresenter Song Files - + Arquivos do Folipresenter @@ -4440,7 +4631,7 @@ A codificação é responsável pela correta representação dos caracteres. Maintain the lists of authors, topics and books - Manter a lista de autores, tópicos e livros + Gerenciar a lista de autores, tópicos e livros @@ -4453,7 +4644,7 @@ A codificação é responsável pela correta representação dos caracteres.Letra - + Delete Song(s)? Apagar Música(s)? @@ -4468,7 +4659,7 @@ A codificação é responsável pela correta representação dos caracteres.Música Inteira - + Are you sure you want to delete the %n selected song(s)? Tem certeza de que quer apagar as %n música(s) selecionadas? @@ -4489,7 +4680,7 @@ A codificação é responsável pela correta representação dos caracteres. Exporting "%s"... - + Exportando "%s"... @@ -4497,7 +4688,7 @@ A codificação é responsável pela correta representação dos caracteres. Song Book Maintenance - Gerenciamento de Hinários + Gerenciamento de Hinários @@ -4520,12 +4711,12 @@ A codificação é responsável pela correta representação dos caracteres. Finished export. - + Exportação Finalizada. Your song export failed. - + A sua exportação falhou. @@ -4619,17 +4810,17 @@ A codificação é responsável pela correta representação dos caracteres. Delete Book - Apagar Livro + Apagar Hinário Are you sure you want to delete the selected book? - Tem certeza de que quer apagar o hinário selecionado? + Tem certeza de que quer excluir o hinário selecionado? This book cannot be deleted, it is currently assigned to at least one song. - Este hinário não pode ser apagado, pois está associado a ao menos uma música. + Este hinário não pode ser excluido, pois está associado a ao menos uma música. @@ -4649,7 +4840,7 @@ A codificação é responsável pela correta representação dos caracteres. The book %s already exists. Would you like to make songs with book %s use the existing book %s? - O livro %s já existe. Deseja que as músicas com o livro %s usem o livro %s existente? + O hinário %s já existe. Deseja que as músicas com o hinário %s usem o hinário %s existente? diff --git a/resources/i18n/ru.ts b/resources/i18n/ru.ts index 5780689e8..b9d77073b 100644 --- a/resources/i18n/ru.ts +++ b/resources/i18n/ru.ts @@ -154,28 +154,28 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s Импорт заветов... %s - + Importing testaments... done. Импорт заветов... завершен. - + Importing books... %s Импорт книг... %s - + Importing verses from %s... Importing verses from <book name>... Импорт стихов из %s... - + Importing verses... done. Импорт стихов... завершен. @@ -551,18 +551,18 @@ Changes do not affect verses already in the service. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. - + Your Bible import failed. @@ -663,7 +663,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... @@ -672,12 +672,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1071,17 +1071,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits - + License Лицензия - + Contribute @@ -1091,7 +1091,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr Билд %s - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1107,6 +1125,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1126,24 +1173,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1392,6 +1421,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + Псалмы + + + + Bibles + Священное Писание + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + Библия + + + + Images + Изображения + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1513,12 +1693,12 @@ Version: %s OpenLP.LanguageManager - + Language - + Please restart OpenLP to use your new language setting. @@ -1894,39 +2074,39 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Close OpenLP - + Are you sure you want to close OpenLP? - + Default Theme: %s @@ -2304,17 +2484,17 @@ The content encoding is not UTF-8. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2411,32 +2591,32 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Previous Slide - + Move to previous - + Next Slide - + Move to next - + Hide - + Blank Screen @@ -2446,57 +2626,57 @@ The content encoding is not UTF-8. - + Show Desktop - + Start continuous loop - + Stop continuous loop - + Delay between slides in seconds - + Move to live - + Edit and reload song preview - + Start playing media - + Go To - + Previous Service - + Next Service - + Escape Item @@ -2658,113 +2838,113 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to edit. - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. The content encoding is not UTF-8. - + Validation Error - + File is not a valid theme. - + A theme with this name already exists. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + OpenLP Themes (*.theme *.otz) @@ -4412,12 +4592,12 @@ The encoding is responsible for the correct character representation. - + Delete Song(s)? - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index b421540fa..fc97c08a0 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -12,7 +12,7 @@ Vill du fortsätta ändå? No Parameter Found - + Inga parametrar hittades @@ -154,30 +154,30 @@ Do you want to continue anyway? BibleDB.Wizard - + Importing testaments... %s - + Importing testaments... done. - + Importing books... %s - + Importing verses from %s... Importing verses from <book name>... Importerar verser från %s... - + Importing verses... done. - + Importerar verser... klart. @@ -195,7 +195,7 @@ Do you want to continue anyway? There was a problem downloading your verse selection. Please check your Internet connection, and if this error continues to occur please consider reporting a bug. - + Det var problem med nerladdningen av versurvalet. Kontrollera internetuppkopplingen och om problemet återkommer fundera på att rapportera det som en bugg. @@ -522,7 +522,7 @@ Changes do not affect verses already in the service. Bibeln finns redan - + Your Bible import failed. Din bibelimport misslyckades. @@ -537,12 +537,12 @@ Changes do not affect verses already in the service. - + Starting Registering bible... - + Registered bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -664,7 +664,7 @@ demand and thus an internet connection is required. BiblesPlugin.Opensong - + Importing %s %s... Importing <book name> <chapter>... Importerar %s %s... @@ -673,12 +673,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Analyserar kodning (detta kan ta några minuter)... - + Importing %s %s... Importing <book name> <chapter>... Importerar %s %s... @@ -908,12 +908,12 @@ demand and thus an internet connection is required. You must select an image to delete. - + Du måste välja en bild som skall tas bort. You must select an image to replace the background with. - + Du måste välja en bild att ersätta bakgrundsbilden med. @@ -1072,17 +1072,17 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Credits Lista över medverkande - + License Licens - + Contribute Bidra @@ -1092,7 +1092,25 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + + Copyright © 2004-2011 Raoul Snyman +Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, +Meinert Jordan, Andreas Preikschat, Christian Richter, Philip +Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund + + + + + 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; version 2 of the License. + + + + + 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 below for more details. + + + + Project Lead %s @@ -1108,6 +1126,35 @@ Testers Packagers %s +Translators + Afrikaans (af) + %s + German (de) + %s + English, United Kingdom (en_GB) + %s + English, South Africa (en_ZA) + %s + Estonian (et) + %s + French (fr) + %s + Hungarian (hu) + %s + Japanese (ja) + %s + Norwegian Bokmål (nb) + %s + Dutch (nl) + %s + Portuguese, Brazil (pt_BR) + %s + Russian (ru) + %s + +Documentation + %s + Built With Python: http://www.python.org/ Qt4: http://qt.nokia.com/ @@ -1127,24 +1174,6 @@ Final Credit He has set us free. - - - Copyright © 2004-2011 Raoul Snyman -Portions copyright © 2004-2011 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, -Meinert Jordan, Andreas Preikschat, Christian Richter, Philip -Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frode Woldsund - - - - - 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; version 2 of the License. - - - - - 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 below for more details. - - OpenLP.AdvancedTab @@ -1201,7 +1230,7 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Image file: - + Bildfil: @@ -1295,7 +1324,7 @@ Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, CarstennTinggaard, Frod Send E-Mail - + Skicka e-post @@ -1393,6 +1422,157 @@ Version: %s + + OpenLP.FirstTimeLanguageForm + + + Initial Set up Language + + + + + Select the language you'd like to use in OpenLP. + + + + + OpenLP.FirstTimeWizard + + + Songs + + + + + Bibles + + + + + Themes + + + + + Starting Updates + + + + + Downloading %s + + + + + First Time Wizard + + + + + Welcome to the First Time Wizard + + + + + This wizard will help you to configure OpenLP for initial use . Click the next button below to start the process of selection your initial options. + + + + + Activate required Plugins + + + + + Select the Plugins you wish to use. + + + + + Custom Text + + + + + Bible + Bibel + + + + Images + Bilder + + + + Presentations + + + + + Media (Audio and Video) + + + + + Allow remote access + + + + + Monitor Song Usage + + + + + Allow Alerts + + + + + Download Samples from OpenLP.org + + + + + Select samples to downlaod and install for use. + + + + + No Internet connection found so unable to download any default files. + + + + + Download Example Files + + + + + Default Settings + + + + + Set up default values to be used by OpenLP + + + + + Default output display + + + + + Select the default Theme + + + + + Press finish to apply all your changes and start OpenLP + + + OpenLP.GeneralTab @@ -1413,7 +1593,7 @@ Version: %s Display if a single screen - + Visa även på enkel skärm @@ -1514,12 +1694,12 @@ Version: %s OpenLP.LanguageManager - + Language Språk - + Please restart OpenLP to use your new language setting. Vänligen starta om OpenLP för att aktivera dina nya språkinställningar. @@ -1742,7 +1922,7 @@ Version: %s &Preview Panel - &Förhandsgranskning + &Förhandsgranskningpanel @@ -1837,7 +2017,7 @@ Version: %s Set the interface language to %s - + Sätt användargränssnittets språk till %s @@ -1880,29 +2060,29 @@ Version: %s - + Version %s of OpenLP is now available for download (you are currently running version %s). You can download the latest version from http://openlp.org/. - + OpenLP Version Updated OpenLP-versionen uppdaterad - + OpenLP Main Display Blanked OpenLPs huvuddisplay rensad - + The Main Display has been blanked out Huvuddisplayen har rensats - + Default Theme: %s Standardtema: %s @@ -1918,12 +2098,12 @@ You can download the latest version from http://openlp.org/. - + Close OpenLP - + Are you sure you want to close OpenLP? @@ -2026,17 +2206,17 @@ You can download the latest version from http://openlp.org/. %s (Inactive) - + %s (Inaktiv) %s (Active) - + %s (Aktiv) %s (Disabled) - + %s (Ej valbar) @@ -2044,12 +2224,12 @@ You can download the latest version from http://openlp.org/. Fit Page - + Passa sidan Fit Width - + Passa bredden @@ -2057,42 +2237,42 @@ You can download the latest version from http://openlp.org/. Options - + Alternativ Close - + Stäng Copy - + Kopiera Copy as HTML - + Kopiera som HTML Zoom In - + Zooma in Zoom Out - + Zooma ut Zoom Original - + Zooma original Other Options - + Andra alternativ @@ -2146,7 +2326,7 @@ You can download the latest version from http://openlp.org/. Save this service - Spara denna mötesplanering + Spara denna planering @@ -2156,7 +2336,7 @@ You can download the latest version from http://openlp.org/. Move to &top - Flytta till &toppen + Flytta högst &upp @@ -2196,7 +2376,7 @@ You can download the latest version from http://openlp.org/. &Delete From Service - &Ta bort från mötesplanering + &Ta bort från planeringen @@ -2245,17 +2425,17 @@ The content encoding is not UTF-8. - + Missing Display Handler - + Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive @@ -2412,57 +2592,57 @@ The content encoding is not UTF-8. OpenLP.SlideController - + Move to previous Flytta till föregående - + Move to next Flytta till nästa - + Hide - + Move to live Flytta till live - + Start continuous loop Börja oändlig loop - + Stop continuous loop Stoppa upprepad loop - + Delay between slides in seconds Fördröjning mellan bilder, i sekunder - + Start playing media Börja spela media - + Go To - + Edit and reload song preview - + Blank Screen @@ -2472,32 +2652,32 @@ The content encoding is not UTF-8. - + Show Desktop - + Previous Slide - + Next Slide - + Previous Service - + Next Service - + Escape Item @@ -2558,7 +2738,7 @@ The content encoding is not UTF-8. Theme Name Missing - + Temanamn saknas @@ -2644,68 +2824,68 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. Du kan inte ta bort standardtemat. - + You have not selected a theme. Du har inte valt ett tema. - + Save Theme - (%s) Spara tema - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File Välj tema importfil - + File is not a valid theme. The content encoding is not UTF-8. - + File is not a valid theme. Filen är inte ett giltigt tema. - + Theme %s is used in the %s plugin. @@ -2725,47 +2905,47 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) @@ -4408,7 +4588,7 @@ The encoding is responsible for the correct character representation. Sångtexter - + Delete Song(s)? @@ -4423,7 +4603,7 @@ The encoding is responsible for the correct character representation. - + Are you sure you want to delete the %n selected song(s)? diff --git a/resources/images/openlp-2.qrc b/resources/images/openlp-2.qrc index 794e006d9..0d3191eff 100644 --- a/resources/images/openlp-2.qrc +++ b/resources/images/openlp-2.qrc @@ -92,6 +92,7 @@ wizard_exportsong.bmp wizard_importsong.bmp wizard_importbible.bmp + wizard_firsttime.bmp wizard_createtheme.bmp diff --git a/resources/images/wizard_firsttime.bmp b/resources/images/wizard_firsttime.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f37de5be22567a21af39048a9f2672be85fe2cae GIT binary patch literal 172254 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ҭr?aAlWA%nX7LgxQj`FD<)2>l#k9? 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⁡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 literal 0 HcmV?d00001 From b609a8de03cc7b760c5ca8a75fe972fa8b2823c4 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 9 Mar 2011 19:37:25 +0200 Subject: [PATCH 075/124] Added a No Internet page to the wizard. --- openlp/core/ui/firsttimeform.py | 32 ++++++++++---- openlp/core/ui/firsttimewizard.py | 70 ++++++++++++++++++++++++------- 2 files changed, 79 insertions(+), 23 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 40f2a23e2..978fd05c7 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -32,11 +32,10 @@ import urllib from PyQt4 import QtCore, QtGui -from firsttimewizard import Ui_FirstTimeWizard - -from openlp.core.lib import translate, PluginStatus, check_directory_exists, \ +from openlp.core.lib import translate, PluginStatus, check_directory_exists, \ Receiver from openlp.core.utils import get_web_page, AppLocation +from firsttimewizard import Ui_FirstTimeWizard, FirstTimePage log = logging.getLogger(__name__) @@ -49,6 +48,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): def __init__(self, screens, parent=None): QtGui.QWizard.__init__(self, parent) + self.setupUi(self) # check to see if we have web access self.web = u'http://openlp.org/files/frw/' self.config = ConfigParser.ConfigParser() @@ -56,7 +56,6 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) - self.setupUi(self) for screen in screens.get_screen_list(): self.displaySelectionComboBox.addItem(screen) self.songsText = translate('OpenLP.FirstTimeWizard', 'Songs') @@ -85,7 +84,6 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): # Sort out internet access for downloads if self.webAccess: self.internetGroupBox.setVisible(True) - self.noInternetLabel.setVisible(False) # If songs database exists do not allow a copy songs = os.path.join(AppLocation.get_section_data_path(u'songs'), u'songs.sqlite') @@ -100,9 +98,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) treewidgetitem.setText(0, self.themesText) self._loadChild(treewidgetitem, u'themes', u'files', 'theme') - else: - self.internetGroupBox.setVisible(False) - self.noInternetLabel.setVisible(True) +# else: +# self.internetGroupBox.setVisible(False) +# self.noInternetLabel.setVisible(True) def _loadChild(self, tree, list, tag, root): files = self.config.get(list, tag) @@ -119,11 +117,27 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): child.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + def nextId(self): + """ + Determine the next page in the Wizard to go to. + """ + if self.currentId() == FirstTimePage.Plugins: + if not self.webAccess: + return FirstTimePage.NoInternet + else: + return FirstTimePage.Songs + else: + return self.currentId() + 1 + def onCurrentIdChanged(self, pageId): """ Detects Page changes and updates as approprate. """ - if self.page(pageId) == self.DefaultsPage: + if pageId == FirstTimePage.NoInternet: + self.finishButton.setVisible(True) + self.finishButton.setEnabled(True) + self.nextButton.setVisible(False) + elif self.page(pageId) == self.DefaultsPage: self.themeSelectionComboBox.clear() listIterator = QtGui.QTreeWidgetItemIterator( self.selectionTreeWidget) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 299160b3f..ad4784d59 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -29,6 +29,15 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import translate from openlp.core.lib.ui import add_welcome_page +class FirstTimePage(object): + Welcome = 0 + Plugins = 1 + NoInternet = 2 + Songs = 3 + Bibles = 4 + Defaults = 5 + + class Ui_FirstTimeWizard(object): def setupUi(self, FirstTimeWizard): FirstTimeWizard.setObjectName(u'FirstTimeWizard') @@ -37,6 +46,9 @@ class Ui_FirstTimeWizard(object): FirstTimeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages| QtGui.QWizard.NoBackButtonOnStartPage) + self.finishButton = self.button(QtGui.QWizard.FinishButton) + self.cancelButton = self.button(QtGui.QWizard.CancelButton) + self.nextButton = self.button(QtGui.QWizard.NextButton) add_welcome_page(FirstTimeWizard, u':/wizards/wizard_firsttime.bmp') # The plugins page self.pluginPage = QtGui.QWizardPage() @@ -79,14 +91,28 @@ class Ui_FirstTimeWizard(object): self.alertCheckBox.setChecked(True) self.alertCheckBox.setObjectName(u'alertCheckBox') self.pluginLayout.addWidget(self.alertCheckBox) - FirstTimeWizard.addPage(self.pluginPage) - # The song samples page - self.downloadDefaultsPage = QtGui.QWizardPage() - self.downloadDefaultsPage.setObjectName(u'downloadDefaultsPage') - self.noInternetLabel = QtGui.QLabel(self.downloadDefaultsPage) - self.noInternetLabel.setGeometry(QtCore.QRect(20, 20, 461, 17)) + FirstTimeWizard.setPage(FirstTimePage.Plugins, self.pluginPage) + # The "you don't have an internet connection" page. + self.noInternetPage = QtGui.QWizardPage() + self.noInternetPage.setObjectName(u'noInternetPage') + self.noInternetLayout = QtGui.QVBoxLayout(self.noInternetPage) + self.noInternetLayout.setContentsMargins(50, 40, 50, 40) + self.noInternetLayout.setObjectName(u'noInternetLayout') + self.noInternetLabel = QtGui.QLabel(self.noInternetPage) + self.noInternetLabel.setWordWrap(True) self.noInternetLabel.setObjectName(u'noInternetLabel') - self.internetGroupBox = QtGui.QGroupBox(self.downloadDefaultsPage) + self.noInternetLayout.addWidget(self.noInternetLabel) + FirstTimeWizard.setPage(FirstTimePage.NoInternet, self.noInternetPage) + + # The song samples page + self.songsPage = QtGui.QWizardPage() + self.songsPage.setObjectName(u'songsPage') + FirstTimeWizard.setPage(FirstTimePage.Songs, self.songsPage) + + # download page + self.biblesPage = QtGui.QWizardPage() + self.biblesPage.setObjectName(u'biblesPage') + self.internetGroupBox = QtGui.QGroupBox(self.biblesPage) self.internetGroupBox.setGeometry(QtCore.QRect(20, 10, 501, 271)) self.internetGroupBox.setObjectName(u'internetGroupBox') self.pluginLayout_4 = QtGui.QVBoxLayout(self.internetGroupBox) @@ -100,7 +126,8 @@ class Ui_FirstTimeWizard(object): self.selectionTreeWidget.headerItem().setText(0, u'1') self.selectionTreeWidget.header().setVisible(False) self.pluginLayout_4.addWidget(self.selectionTreeWidget) - FirstTimeWizard.addPage(self.downloadDefaultsPage) + FirstTimeWizard.setPage(FirstTimePage.Bibles, self.biblesPage) + self.DefaultsPage = QtGui.QWizardPage() self.DefaultsPage.setObjectName(u'DefaultsPage') self.layoutWidget = QtGui.QWidget(self.DefaultsPage) @@ -133,7 +160,7 @@ class Ui_FirstTimeWizard(object): self.updateLabel = QtGui.QLabel(self.DefaultsPage) self.updateLabel.setGeometry(QtCore.QRect(60, 220, 351, 17)) self.updateLabel.setObjectName(u'updateLabel') - FirstTimeWizard.addPage(self.DefaultsPage) + FirstTimeWizard.setPage(FirstTimePage.Defaults, self.DefaultsPage) self.retranslateUi(FirstTimeWizard) QtCore.QMetaObject.connectSlotsByName(FirstTimeWizard) @@ -169,14 +196,29 @@ class Ui_FirstTimeWizard(object): 'Monitor Song Usage')) self.alertCheckBox.setText(translate('OpenLP.FirstTimeWizard', 'Allow Alerts')) - self.downloadDefaultsPage.setTitle(translate('OpenLP.FirstTimeWizard', + self.noInternetPage.setTitle(translate('OpenLP.FirstTimeWizard', + 'No Internet Connection')) + self.noInternetPage.setSubTitle(translate( + 'OpenLP.FirstTimeWizard', + 'Unable to detect an Internet connection.')) + self.noInternetLabel.setText(translate('OpenLP.FirstTimeWizard', + 'No Internet connection was found. The First Time Wizard needs an ' + 'Internet connection in order to be able to download sample ' + 'songs, Bibles and themes.\n\nTo re-run the First Time Wizard and ' + 'import this sample data at a later stage, press the cancel ' + 'button now, check your Internet connection, and restart OpenLP.' + '\n\nTo cancel the First Time Wizard completely, press the finish ' + 'button now.')) + self.songsPage.setTitle(translate('OpenLP.FirstTimeWizard', + 'Sample Songs')) + self.songsPage.setSubTitle(translate( + 'OpenLP.FirstTimeWizard', + 'Select and download public domain songs.')) + self.biblesPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Download Samples from OpenLP.org')) - self.downloadDefaultsPage.setSubTitle(translate( + self.biblesPage.setSubTitle(translate( 'OpenLP.FirstTimeWizard', 'Select samples to downlaod and install for use.')) - self.noInternetLabel.setText(translate('OpenLP.FirstTimeWizard', - 'No Internet connection found so unable to download any default' - ' files.')) self.internetGroupBox.setTitle(translate('OpenLP.FirstTimeWizard', 'Download Example Files')) self.DefaultsPage.setTitle(translate('OpenLP.FirstTimeWizard', From f710746a5597ce77c09aef668c65ead4a9c8aeb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 9 Mar 2011 20:02:21 +0200 Subject: [PATCH 076/124] Returns now done right. Commented out dialog part, which needs more work --- openlp/core/ui/servicemanager.py | 35 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 703c5ebc4..ff7c077e2 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -413,6 +413,7 @@ class ServiceManager(QtGui.QWidget): """ Save the current Service file. """ + success = True if not self.fileName(): return self.saveFileAs() path_file_name = unicode(self.fileName()) @@ -440,21 +441,21 @@ class ServiceManager(QtGui.QWidget): continue file_size = os.path.getsize(path_from) size_limit = 52428800 # 50MiB - if file_size > size_limit: - # File exeeds size_limit bytes, ask user - message = unicode(translate('OpenLP.ServiceManager', - 'Do you want to include \n%.1f MB file "%s"\n' - 'into the service file?\nThis may take some time.\n\n' - 'Please note that you need to\ntake care of that file ' - 'yourself,\nif you leave it out.')) % \ - (file_size/1048576, os.path.split(path_from)[1]) - ans = QtGui.QMessageBox.question(self.mainwindow, - translate('OpenLP.ServiceManager', 'Including Large ' - 'File'), message, QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), - QtGui.QMessageBox.Ok) - if ans == QtGui.QMessageBox.Cancel: - continue + #if file_size > size_limit: + # # File exeeds size_limit bytes, ask user + # message = unicode(translate('OpenLP.ServiceManager', + # 'Do you want to include \n%.1f MB file "%s"\n' + # 'into the service file?\nThis may take some time.\n\n' + # 'Please note that you need to\ntake care of that file' + # ' yourself,\nif you leave it out.')) % \ + # (file_size/1048576, os.path.split(path_from)[1]) + # ans = QtGui.QMessageBox.question(self.mainwindow, + # translate('OpenLP.ServiceManager', 'Including Large ' + # 'File'), message, QtGui.QMessageBox.StandardButtons( + # QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), + # QtGui.QMessageBox.Ok) + # if ans == QtGui.QMessageBox.Cancel: + # continue write_list.append(path_from) total_size += file_size log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % @@ -477,12 +478,12 @@ class ServiceManager(QtGui.QWidget): zip.write(path_from, path_from.encode(u'utf-8')) except IOError: log.exception(u'Failed to save service to disk') + success = False finally: zip.close() self.mainwindow.addRecentFile(path_file_name) self.setModified(False) - return True - return False + return success def saveFileAs(self): """ From 32034dea950bd0840c23c8b961a82f456779455e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 9 Mar 2011 20:08:06 +0200 Subject: [PATCH 077/124] Just to make more sense. --- openlp/core/ui/servicemanager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index ff7c077e2..fb3664769 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -482,6 +482,7 @@ class ServiceManager(QtGui.QWidget): finally: zip.close() self.mainwindow.addRecentFile(path_file_name) + if success: self.setModified(False) return success From 674e9713e7418d35453fedf90c065050daa8c157 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 9 Mar 2011 19:14:50 +0100 Subject: [PATCH 078/124] serach comments --- openlp/core/ui/maindisplay.py | 3 --- openlp/plugins/songs/lib/mediaitem.py | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 357eb655a..72ebe422a 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -516,9 +516,6 @@ class AudioPlayer(QtCore.QObject): ``parent`` The parent widget. - - ``screens`` - The list of screens. """ log.debug(u'AudioPlayer Initialisation started') QtCore.QObject.__init__(self, parent) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 4c267dd3c..c16516eb7 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -159,15 +159,15 @@ class SongMediaItem(MediaManagerItem): def onSearchTextButtonClick(self): search_keywords = unicode(self.searchTextEdit.displayText()) search_results = [] - # search_type = self.searchTypeComboBox.currentIndex() search_type = self.searchTextEdit.currentSearchType() if search_type == SongSearch.Entire: log.debug(u'Entire Song Search') search_results = self.parent.manager.get_all_objects(Song, or_(Song.search_title.like(u'%' + self.whitespace.sub(u' ', search_keywords.lower()) + u'%'), - Song.search_lyrics.like(u'%' + search_keywords.lower() + \ - u'%')), Song.search_title.asc()) + Song.search_lyrics.like(u'%' + search_keywords.lower() + u'%'), + Song.comments.like(u'%' + search_keywords.lower() + u'%')), + Song.search_title.asc()) self.displayResultsSong(search_results) elif search_type == SongSearch.Titles: log.debug(u'Titles Search') @@ -253,11 +253,13 @@ class SongMediaItem(MediaManagerItem): if self.searchAsYouType: search_length = 1 if self.searchTextEdit.currentSearchType() == SongSearch.Entire: - search_length = 3 - elif self.searchTextEdit.currentSearchType() == SongSearch.Lyrics: search_length = 7 + elif self.searchTextEdit.currentSearchType() == SongSearch.Lyrics: + search_length = 3 if len(text) > search_length: self.onSearchTextButtonClick() + elif len(text) == 0: + self.onClearTextButtonClick() def onImportClick(self): if not hasattr(self, u'import_wizard'): @@ -446,10 +448,9 @@ class SongMediaItem(MediaManagerItem): add_song = False editId = song.id break - if add_song: - if self.addSongFromService: - editId = self.openLyrics.xml_to_song(item.xml_version) - self.onSearchTextButtonClick() + if add_song and self.addSongFromService: + editId = self.openLyrics.xml_to_song(item.xml_version) + self.onSearchTextButtonClick() # Update service with correct song id. if editId: Receiver.send_message(u'service_item_update', From 89187ffadecc48d0bd4d10c72dd7480f00119fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 9 Mar 2011 20:22:07 +0200 Subject: [PATCH 079/124] Neater again. --- openlp/core/ui/servicemanager.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index fb3664769..9951c8295 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -413,7 +413,6 @@ class ServiceManager(QtGui.QWidget): """ Save the current Service file. """ - success = True if not self.fileName(): return self.saveFileAs() path_file_name = unicode(self.fileName()) @@ -478,13 +477,13 @@ class ServiceManager(QtGui.QWidget): zip.write(path_from, path_from.encode(u'utf-8')) except IOError: log.exception(u'Failed to save service to disk') - success = False + zip.close() + return False finally: zip.close() self.mainwindow.addRecentFile(path_file_name) - if success: self.setModified(False) - return success + return True def saveFileAs(self): """ From d8c6db418322b21c45a8c6b5695fc8578b8f81c3 Mon Sep 17 00:00:00 2001 From: "John Cegalis jseagull1@hotmail.com" Date: Wed, 9 Mar 2011 13:36:20 -0500 Subject: [PATCH 080/124] cleaned up grammar --- documentation/manual/source/dualmonitors.rst | 28 +++++------ documentation/manual/source/glossary.rst | 12 ++--- documentation/manual/source/songs.rst | 50 ++++++++++---------- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index ee4bc90a2..72384fe52 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -4,11 +4,11 @@ Dual Monitor Setup The first step in getting OpenLP working on your system is to setup your computer properly for dual monitors. This is not very difficult, but the steps -do vary depending on operating system. +will vary depending on operating system. -Most modern computers do have the ability for dual monitors. To be certain +Most modern computers have the ability for dual monitors. To be certain, check your computer's documentation. A typical desktop computer capable of dual -monitors will have two of, or a combination of the two connectors below. +monitors will have two of, or a combination of the two, connectors below. **VGA** @@ -18,8 +18,8 @@ monitors will have two of, or a combination of the two connectors below. .. image:: pics/dvi.png -A laptop computer setup only varies slightly, generally you will need only one -of outputs pictured above since your laptops screen serves as one of the +A laptop computer setup only varies slightly. Generally you will need only one +of the outputs pictured above since your laptop screen serves as one of the monitors. Sometimes with older laptops a key stroke generally involving the :kbd:`Fn` key and another key is required to enable the second monitor on laptops. @@ -27,9 +27,9 @@ laptops. Some computers also incorporate the use of :abbr:`S-Video (Separate Video)` or :abbr:`HDMI (High-Definition Multimedia Interface)` connections. -A typical OpenLP set up consist of your normal single monitor setup, with your -projector setup as the second monitor. With the option of extending your -desktop across the second monitor, or your operating system's equivalent. +A typical OpenLP setup consist of your normal single monitor, with your +projector hooked up to your computer as the second monitor. With the option of +extending your desktop across the second monitor, or your operating system's equivalent. Microsoft Windows ----------------- @@ -46,7 +46,7 @@ press :kbd:`Windows+P`. The more traditional way is also fairly straight forward. Go to :guilabel:`Control Panel` and click on :guilabel:`Display`. This will open up -the :guilabel:`Display` dialog. You can also bypass this step by right click on +the :guilabel:`Display` dialog. You may also bypass this step by a right click on a blank area on your desktop and selecting :guilabel:`Resolution`. .. image:: pics/winsevendisplay.png @@ -66,7 +66,7 @@ a blank place on the desktop and click :guilabel:`Personalization`. .. image:: pics/vistapersonalize.png From the :guilabel:`Personalization` window click on :guilabel:`Display -Settings`. Then enable the montior that represents your projector and make sure +Settings`. Click on the montior that represents your projector and make sure you have checked :guilabel:`Extend the desktop onto this monitor`. .. image:: pics/vistadisplaysettings.png @@ -77,7 +77,7 @@ Windows XP From :guilabel:`Control Panel` select :guilabel:`Display`, or right click on a blank area of the desktop and select :guilabel:`Properties`. From the :guilabel:`Display Properties` window click on the :guilabel:`Settings` tab. -Then click on the monitor that represents your projector and make sure you have +Click on the monitor that represents your projector and make sure you have checked :guilabel:`Extend my Windows desktop onto this monitor`. .. image:: pics/xpdisplaysettings.png @@ -87,7 +87,7 @@ Linux Due to the vast varieties of hardware, distributions, desktops, and drivers this is not an exhaustive guide to dual monitor setup on Linux. This guide -assumes that you have properly set up any proprietary drivers if needed. You +assumes you have properly set up any proprietary drivers if needed. You should seek out your distributions documentation if this general guide does not work. @@ -166,7 +166,7 @@ After clicking :guilabel:`Configure`, select :guilabel:`TwinView`. Then click .. image:: pics/twinview.png -Then click :guilabel:`Apply` and if you are happy with the way things look click +Click :guilabel:`Apply` and if you are happy with the way things look click :guilabel:`Keep` to keep your new settings. Don't worry if all goes wrong the settings will return back to the previous settings in 15 seconds without any action. nVidia Settings should take care of selecting your optimum resolution @@ -175,6 +175,6 @@ on :guilabel:`Save to X Configuration File`. .. image:: pics/xorgwrite.png -Then click :guilabel:`Save` and you should be set. You may want to restart X or +Click :guilabel:`Save` and you should be set. You may want to restart X or your machine just to make sure all the settings carry over the next time you log in. diff --git a/documentation/manual/source/glossary.rst b/documentation/manual/source/glossary.rst index 6f4ebcdd6..ab6c7880e 100644 --- a/documentation/manual/source/glossary.rst +++ b/documentation/manual/source/glossary.rst @@ -18,7 +18,7 @@ The Main Window contains all the tools and plugins that make OpenLP function Media Manager ------------- -The Media Manager contains a number of tabs that plugins supply to OpenLP. +The Media Manager contains a number of tabs the plugins supply to OpenLP. Each tab in the Media Manager is called a **Media Item** .. image:: pics/mediamanager.png @@ -36,20 +36,20 @@ with them. Service File ------------ -A service file, is the file that is created when you save your work on OpenLP. +A service file is the file that is created when you save your service in OpenLP. The service file consist of **Service Items** Service Item ------------ -A service item are the **media items** that are in the **service manager** +Service items are the **media items** that are in the **service manager** Service Manger -------------- The service manager contains the media items in your service file. This is the -area from which your media items go live, and you can also save, open, and edit -services files. +area where your media items go live. You can also save, open, and edit +services files from here. .. image:: pics/servicemanager.png @@ -65,6 +65,6 @@ Theme Manager ------------- The theme manager is where themes are created and edited. Themes are the text -styles backgrounds that you use to personalize your services. +styles and backgrounds that you use to personalize your services. .. image:: pics/thememanager.png diff --git a/documentation/manual/source/songs.rst b/documentation/manual/source/songs.rst index 678a6206c..53db50242 100644 --- a/documentation/manual/source/songs.rst +++ b/documentation/manual/source/songs.rst @@ -8,26 +8,26 @@ converters provided to get data from other formats into OpenLP. Song Importer ============= -If you are using an earlier version of OpenLP or come from another software +If you are using an earlier version of OpenLP or, come from another software package, you may be able to convert your existing database to work in OpenLP -2.0. To access the Song Importer :menuselection:`File --> Import --> Song`. -You will then see the Song Importer window, then click :guilabel:`Next`. +2.0. To access the Song Importer click :menuselection:`File --> Import --> Song`. +You will see the Song Importer window, then click :guilabel:`Next`. .. image:: pics/songimporter.png -After choosing :guilabel:`Next` you can then select from the various types of +After choosing :guilabel:`Next` you can select from the various types of software that OpenLP will convert songs from. .. image:: pics/songimporterchoices.png -Then click on the file folder icon to choose the file of the song database you +Click on the file folder icon to choose the file of the song database you want to import. See the following sections for information on the different formats that OpenLP will import. Importing from OpenLP Version 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Converting from OpenLP Version 1 is a pretty simple process. You will first +Converting from OpenLP Version 1 is a simple process. First you will need to locate your version 1 database file. Windows XP:: @@ -38,33 +38,33 @@ Windows Vista / Windows 7:: C:\ProgramData\openlp.org\Data\songs.olp -After clicking :guilabel:`Next` your conversion should be complete. +After clicking :guilabel:`Next` your conversion will be complete. .. image:: pics/finishedimport.png -Then press :guilabel:`Finish` and you should now be ready to use your OpenLP -version one songs. +Press :guilabel:`Finish` and you will now be ready to use your OpenLP +version 1 songs. Importing from OpenSong ^^^^^^^^^^^^^^^^^^^^^^^ -Converting from OpenSong you will need to locate your songs database. In the +Converting from OpenSong, you will need to locate your songs database. In the later versions of OpenSong you are asked to define the location of this. The -songs will be located in a folder named :guilabel:`Songs`. This folder should -contain files with all your songs in them without a file extension. (file.xxx). -When you have located this folder you will then need to select the songs from +songs will be located in a folder named :guilabel:`Songs`. This folder will +contain files with all your songs in them, without a file extension. (file.xxx). +When you have located this folder you will need to select the songs from the folder. .. image:: pics/selectsongs.png -On most operating systems to select all the songs, first select the first song -in the lest then press shift and select the last song in the list. After this -press :guilabel:`Next` and you should see that your import has been successful. +On most operating systems, to select all the songs, first select the first song +in the list, press the shift key, and select the last song in the list. After this +press :guilabel:`Next` and you will see that your import has been successful. .. image:: pics/finishedimport.png -Press :guilabel:`Finish` and you will now be ready to use your songs imported -from OpenSong. +Press :guilabel:`Finish` and OpenLP will be ready to use your songs that you +imported from OpenSong. Importing from CCLI Song Select ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -79,22 +79,22 @@ Then search for your desired song. For this example we will be adding the song .. image:: pics/songselectsongsearch.png -For the song you are searching for select `lyrics` This should take you to a -page displaying the lyrics and copyright info for your song. +For the song you are searching for, select `lyrics` This will take you to a +page displaying the lyrics and copyright information for your song. .. image:: pics/songselectlyrics.png -Next, hover over the :guilabel:`Lyrics` menu from the upper right corner. Then -choose either the .txt or .usr file. You will then be asked to chose a download +Next, hover over the :guilabel:`Lyrics` menu from the upper right corner. +Choose either the .txt or .usr file. You will be asked to chose a download location if your browser does not automatically select that for you. Select this file from the OpenLP import window and then click :guilabel:`Next` You can also select multiple songs for import at once on most operating systems by -selecting the first item in the list then holding shift select the last item in -the list. When finished you should see that your import has completed. +selecting the first item in the list then holding the shift key and select the last +item in the list. When finished, you will see that your import has completed. .. image:: pics/finishedimport.png -Press :guilabel:`Finish` and you will now be ready to use your songs imported +Press :guilabel:`Finish` and OpenLP will be ready to use your songs imported from CCLI SongSelect. From d668060cf9593b84c6a48a26116cad9b7fe7c028 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 9 Mar 2011 19:43:50 +0100 Subject: [PATCH 081/124] fixed search_length --- openlp/plugins/songs/lib/mediaitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index c16516eb7..46c027316 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -255,7 +255,7 @@ class SongMediaItem(MediaManagerItem): if self.searchTextEdit.currentSearchType() == SongSearch.Entire: search_length = 7 elif self.searchTextEdit.currentSearchType() == SongSearch.Lyrics: - search_length = 3 + search_length = 6 if len(text) > search_length: self.onSearchTextButtonClick() elif len(text) == 0: From f1174469543a36b3e6860bc4b36b8339e2bf2cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Wed, 9 Mar 2011 21:22:52 +0200 Subject: [PATCH 082/124] I hope it finally is right. --- openlp/core/ui/servicemanager.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 9951c8295..73ca4b9ca 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -465,6 +465,7 @@ class ServiceManager(QtGui.QWidget): allow_zip_64 = (total_size > 2147483648 + len(service_content)) log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % allow_zip_64) + zip = None try: zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, allow_zip_64) @@ -477,13 +478,13 @@ class ServiceManager(QtGui.QWidget): zip.write(path_from, path_from.encode(u'utf-8')) except IOError: log.exception(u'Failed to save service to disk') - zip.close() return False finally: - zip.close() - self.mainwindow.addRecentFile(path_file_name) - self.setModified(False) - return True + if zip: + zip.close() + self.mainwindow.addRecentFile(path_file_name) + self.setModified(False) + return True def saveFileAs(self): """ From fbb15aae913be4eec8554e0b9edf077404f74d74 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 9 Mar 2011 23:24:06 +0200 Subject: [PATCH 083/124] More updates. --- openlp/core/ui/firsttimewizard.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index ad4784d59..4db1b71f9 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -96,7 +96,7 @@ class Ui_FirstTimeWizard(object): self.noInternetPage = QtGui.QWizardPage() self.noInternetPage.setObjectName(u'noInternetPage') self.noInternetLayout = QtGui.QVBoxLayout(self.noInternetPage) - self.noInternetLayout.setContentsMargins(50, 40, 50, 40) + self.noInternetLayout.setContentsMargins(50, 30, 50, 40) self.noInternetLayout.setObjectName(u'noInternetLayout') self.noInternetLabel = QtGui.QLabel(self.noInternetPage) self.noInternetLabel.setWordWrap(True) @@ -107,6 +107,11 @@ class Ui_FirstTimeWizard(object): # The song samples page self.songsPage = QtGui.QWizardPage() self.songsPage.setObjectName(u'songsPage') + self.songsLayout = QtGui.QVBoxLayout(self.songsPage) + self.songsLayout.setContentsMargins(50, 20, 50, 20) + self.songsLayout.setObjectName(u'songsLayout') + self.songsListWidget = QtGui.QListWidget(self.songsPage) + self.songsListWidget.setObjectName(u'songsListWidget') FirstTimeWizard.setPage(FirstTimePage.Songs, self.songsPage) # download page From 8d33f6d360eea31e1cbd5c9a38e0404a47bfbcb9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 10 Mar 2011 15:15:49 +0200 Subject: [PATCH 084/124] Some more updates to the wizard. --- openlp/core/ui/firsttimeform.py | 175 +++++++++++++++--------------- openlp/core/ui/firsttimewizard.py | 140 ++++++++++++------------ openlp/core/utils/__init__.py | 1 + 3 files changed, 161 insertions(+), 155 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 978fd05c7..6e8de827c 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -24,11 +24,12 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -import ConfigParser import io import logging import os import urllib +from random import randint +from ConfigParser import SafeConfigParser from PyQt4 import QtCore, QtGui @@ -51,13 +52,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.setupUi(self) # check to see if we have web access self.web = u'http://openlp.org/files/frw/' - self.config = ConfigParser.ConfigParser() - self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg')) + self.config = SafeConfigParser() + self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg?%s' % randint(0, 20))) if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) for screen in screens.get_screen_list(): - self.displaySelectionComboBox.addItem(screen) + self.displayComboBox.addItem(screen) self.songsText = translate('OpenLP.FirstTimeWizard', 'Songs') self.biblesText = translate('OpenLP.FirstTimeWizard', 'Bibles') self.themesText = translate('OpenLP.FirstTimeWizard', 'Themes') @@ -83,39 +84,47 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.restart() # Sort out internet access for downloads if self.webAccess: - self.internetGroupBox.setVisible(True) - # If songs database exists do not allow a copy - songs = os.path.join(AppLocation.get_section_data_path(u'songs'), - u'songs.sqlite') - if not os.path.exists(songs): - treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, self.songsText) - self._loadChild(treewidgetitem, u'songs', u'languages', u'songs') - treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, self.biblesText) - self._loadChild(treewidgetitem, u'bibles', u'translations', - u'bible') - treewidgetitem = QtGui.QTreeWidgetItem(self.selectionTreeWidget) - treewidgetitem.setText(0, self.themesText) - self._loadChild(treewidgetitem, u'themes', u'files', 'theme') -# else: -# self.internetGroupBox.setVisible(False) -# self.noInternetLabel.setVisible(True) - - def _loadChild(self, tree, list, tag, root): - files = self.config.get(list, tag) - files = files.split(u',') - for file in files: - if file: - child = QtGui.QTreeWidgetItem(tree) - child.setText(0, self.config.get(u'%s_%s' - % (root, file), u'title')) - child.setData(0, QtCore.Qt.UserRole, - QtCore.QVariant(self.config.get(u'%s_%s' - % (root, file), u'filename'))) - child.setCheckState(0, QtCore.Qt.Unchecked) - child.setFlags(QtCore.Qt.ItemIsUserCheckable | - QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) + songs = self.config.get(u'songs', u'languages') + songs = songs.split(u',') + for song in songs: + title = unicode(self.config.get( + u'songs_%s' % song, u'title'), u'utf8') + filename = unicode(self.config.get( + u'songs_%s' % song, u'filename'), u'utf8') + item = QtGui.QListWidgetItem(title, self.songsListWidget) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(filename)) + item.setCheckState(QtCore.Qt.Unchecked) + item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) + bible_languages = self.config.get(u'bibles', u'languages') + bible_languages = bible_languages.split(u',') + for lang in bible_languages: + language = unicode(self.config.get( + u'bibles_%s' % lang, u'title'), u'utf8') + langItem = QtGui.QTreeWidgetItem( + self.biblesTreeWidget, QtCore.QStringList(language)) + bibles = self.config.get(u'bibles_%s' % lang, u'translations') + bibles = bibles.split(u',') + for bible in bibles: + title = unicode(self.config.get( + u'bible_%s' % bible, u'title'), u'utf8') + filename = unicode(self.config.get( + u'bible_%s' % bible, u'filename')) + item = QtGui.QTreeWidgetItem( + langItem, QtCore.QStringList(title)) + item.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(filename)) + item.setCheckState(0, QtCore.Qt.Unchecked) + item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) + self.biblesTreeWidget.expandAll() + themes = self.config.get(u'themes', u'files') + themes = themes.split(u',') + for theme in themes: + title = self.config.get(u'theme_%s' % theme, u'title') + filename = self.config.get(u'theme_%s' % theme, u'filename') + screenshot = self.config.get(u'theme_%s' % theme, u'screenshot') + item = QtGui.QListWidgetItem(title, self.themesListWidget) + item.setData(QtCore.Qt.UserRole, QtCore.QVariant(filename)) + item.setCheckState(QtCore.Qt.Unchecked) + item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) def nextId(self): """ @@ -137,16 +146,16 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.finishButton.setVisible(True) self.finishButton.setEnabled(True) self.nextButton.setVisible(False) - elif self.page(pageId) == self.DefaultsPage: - self.themeSelectionComboBox.clear() + elif pageId == FirstTimePage.Defaults: + self.themeComboBox.clear() listIterator = QtGui.QTreeWidgetItemIterator( self.selectionTreeWidget) while listIterator.value(): parent = listIterator.value().parent() - if parent and listIterator.value().checkState(0) \ - == QtCore.Qt.Checked: + if parent and \ + listIterator.value().checkState(0) == QtCore.Qt.Checked: if unicode(parent.text(0)) == self.themesText: - self.themeSelectionComboBox.addItem( + self.themeComboBox.addItem( listIterator.value().text(0)) listIterator += 1 @@ -164,55 +173,47 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self._pluginStatus(self.songUsageCheckBox, u'songusage/status') self._pluginStatus(self.alertCheckBox, u'alerts/status') # Build directories for downloads - songsDestination = AppLocation.get_section_data_path(u'songs') - check_directory_exists(songsDestination) - bibleDestination = AppLocation.get_section_data_path(u'bibles') - check_directory_exists(bibleDestination) - themeDestination = AppLocation.get_section_data_path(u'themes') - check_directory_exists(themeDestination) - # Install Selected Items looping through them - listIterator = QtGui.QTreeWidgetItemIterator(self.selectionTreeWidget) - while listIterator.value(): - type = listIterator.value().parent() - if listIterator.value().parent(): - if listIterator.value().checkState(0) == QtCore.Qt.Checked: - # Install items as theu have been selected - item = unicode(listIterator.value().text(0)) - # Download Song database if selected - if unicode(type.text(0)) == self.songsText: - songs = unicode(listIterator.value().data(0, - QtCore.Qt.UserRole).toString()) - message = self.downloading % item - self._updateMessage(message) - # Song database is a fixed file name - urllib.urlretrieve(u'%s%s' % (self.web, songs), - os.path.join(songsDestination, u'songs.sqlite')) - # Download and selected Bibles - if unicode(type.text(0)) == self.biblesText: - bible = unicode(listIterator.value().data(0, - QtCore.Qt.UserRole).toString()) - message = self.downloading % item - self._updateMessage(message) - urllib.urlretrieve(u'%s%s' % (self.web, bible), - os.path.join(bibleDestination, bible)) - # Download any themes - if unicode(type.text(0)) == self.themesText: - theme = unicode(listIterator.value().data(0, - QtCore.Qt.UserRole).toString()) - message = self.downloading % item - self._updateMessage(message) - urllib.urlretrieve(u'%s%s' % (self.web, theme), - os.path.join(themeDestination, theme)) - listIterator += 1 + destination = AppLocation.get_temp_path() + check_directory_exists(destination) + bibles_destination = AppLocation.get_section_data_path(u'bibles') + check_directory_exists(bibles_destination) + themes_destination = AppLocation.get_section_data_path(u'themes') + check_directory_exists(destination) + # Install songs + songs_iterator = QtGui.QListWidgetItemIterator(self.songsListWidget) + while songs_iterator.value(): + item = songs_iterator.value() + if item.checkState() == QtCore.Qt.Checked: + filename = item.data(QtCore.Qt.UserRole).toString() + urllib.urlretrieve(u'%s%s' % (self.web, filename), + os.path.join(destination, filename)) + #importer = SongImporter() + songs_iterator += 1 + # Install Bibles + bibles_iterator = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget) + while bibles_iterator.value(): + item = bibles_iterator.value() + if item.parent() and item.checkState(0) == QtCore.Qt.Checked: + bible = unicode(item.data(0, QtCore.Qt.UserRole).toString()) + urllib.urlretrieve(u'%s%s' % (self.web, bible), + os.path.join(bibles_destination, bible)) + bibles_iterator += 1 + themes_iterator = QtGui.QListWidgetItemIterator(self.themesListWidget) + while themes_iterator.value(): + item = themes_iterator.value() + if item.checkState() == QtCore.Qt.Checked: + theme = unicode(item.data(QtCore.Qt.UserRole).toString()) + urllib.urlretrieve(u'%s%s' % (self.web, theme), + os.path.join(theme_destination, theme)) + themes_iterator += 1 # Set Default Display - if self.displaySelectionComboBox.currentIndex() != -1: + if self.displayComboBox.currentIndex() != -1: QtCore.QSettings().setValue(u'General/monitor', - QtCore.QVariant(self.displaySelectionComboBox. - currentIndex())) + QtCore.QVariant(self.displayComboBox.currentIndex())) # Set Global Theme - if self.themeSelectionComboBox.currentIndex() != -1: + if self.themeComboBox.currentIndex() != -1: QtCore.QSettings().setValue(u'themes/global theme', - QtCore.QVariant(self.themeSelectionComboBox.currentText())) + QtCore.QVariant(self.themeComboBox.currentText())) QtCore.QSettings().setValue(u'general/first time', QtCore.QVariant(False)) Receiver.send_message(u'cursor_normal') diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index ad4784d59..08dbe83b0 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -35,7 +35,8 @@ class FirstTimePage(object): NoInternet = 2 Songs = 3 Bibles = 4 - Defaults = 5 + Themes = 5 + Defaults = 6 class Ui_FirstTimeWizard(object): @@ -103,65 +104,70 @@ class Ui_FirstTimeWizard(object): self.noInternetLabel.setObjectName(u'noInternetLabel') self.noInternetLayout.addWidget(self.noInternetLabel) FirstTimeWizard.setPage(FirstTimePage.NoInternet, self.noInternetPage) - # The song samples page self.songsPage = QtGui.QWizardPage() self.songsPage.setObjectName(u'songsPage') + self.songsLayout = QtGui.QVBoxLayout(self.songsPage) + self.songsLayout.setContentsMargins(50, 20, 50, 20) + self.songsLayout.setObjectName(u'songsLayout') + self.songsListWidget = QtGui.QListWidget(self.songsPage) + self.songsListWidget.setAlternatingRowColors(True) + self.songsListWidget.setObjectName(u'songsListWidget') + self.songsLayout.addWidget(self.songsListWidget) FirstTimeWizard.setPage(FirstTimePage.Songs, self.songsPage) - - # download page + # The Bible samples page self.biblesPage = QtGui.QWizardPage() self.biblesPage.setObjectName(u'biblesPage') - self.internetGroupBox = QtGui.QGroupBox(self.biblesPage) - self.internetGroupBox.setGeometry(QtCore.QRect(20, 10, 501, 271)) - self.internetGroupBox.setObjectName(u'internetGroupBox') - self.pluginLayout_4 = QtGui.QVBoxLayout(self.internetGroupBox) - self.pluginLayout_4.setObjectName(u'pluginLayout_4') - self.selectionTreeWidget = QtGui.QTreeWidget(self.internetGroupBox) - self.selectionTreeWidget.setHorizontalScrollBarPolicy( - QtCore.Qt.ScrollBarAlwaysOff) - self.selectionTreeWidget.setProperty(u'showDropIndicator', False) - self.selectionTreeWidget.setAlternatingRowColors(True) - self.selectionTreeWidget.setObjectName(u'selectionTreeWidget') - self.selectionTreeWidget.headerItem().setText(0, u'1') - self.selectionTreeWidget.header().setVisible(False) - self.pluginLayout_4.addWidget(self.selectionTreeWidget) + self.biblesLayout = QtGui.QVBoxLayout(self.biblesPage) + self.biblesLayout.setContentsMargins(50, 20, 50, 20) + self.biblesLayout.setObjectName(u'biblesLayout') + self.biblesTreeWidget = QtGui.QTreeWidget(self.biblesPage) + self.biblesTreeWidget.setAlternatingRowColors(True) + self.biblesTreeWidget.header().setVisible(False) + self.biblesTreeWidget.setObjectName(u'biblesTreeWidget') + self.biblesLayout.addWidget(self.biblesTreeWidget) FirstTimeWizard.setPage(FirstTimePage.Bibles, self.biblesPage) - - self.DefaultsPage = QtGui.QWizardPage() - self.DefaultsPage.setObjectName(u'DefaultsPage') - self.layoutWidget = QtGui.QWidget(self.DefaultsPage) - self.layoutWidget.setGeometry(QtCore.QRect(20, 20, 491, 113)) - self.layoutWidget.setObjectName(u'layoutWidget') - self.gridLayout = QtGui.QGridLayout(self.layoutWidget) - self.gridLayout.setMargin(0) - self.gridLayout.setObjectName(u'gridLayout') - self.displaySelectionLabel = QtGui.QLabel(self.layoutWidget) - self.displaySelectionLabel.setObjectName(u'displaySelectionLabel') - self.gridLayout.addWidget(self.displaySelectionLabel, 0, 0, 1, 1) - self.displaySelectionComboBox = QtGui.QComboBox(self.layoutWidget) - self.displaySelectionComboBox.setEditable(False) - self.displaySelectionComboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) - self.displaySelectionComboBox.setSizeAdjustPolicy( + # The theme samples page + self.themesPage = QtGui.QWizardPage() + self.themesPage.setObjectName(u'themesPage') + self.themesLayout = QtGui.QVBoxLayout(self.themesPage) + self.themesLayout.setContentsMargins(20, 50, 20, 50) + self.themesLayout.setObjectName(u'themesLayout') + self.themesListWidget = QtGui.QListWidget(self.themesPage) + self.themesListWidget.setFlow(QtGui.QListView.LeftToRight) + self.themesListWidget.setViewMode(QtGui.QListView.IconMode) + self.themesListWidget.setMovement(QtGui.QListView.Static) + self.themesListWidget.setSpacing(4) + self.themesListWidget.setUniformItemSizes(True) + self.themesListWidget.setObjectName(u'themesListWidget') + self.themesLayout.addWidget(self.themesListWidget) + FirstTimeWizard.setPage(FirstTimePage.Themes, self.themesPage) + # the default settings page + self.defaultsPage = QtGui.QWizardPage() + self.defaultsPage.setObjectName(u'defaultsPage') + self.defaultsLayout = QtGui.QFormLayout(self.defaultsPage) + self.defaultsLayout.setContentsMargins(50, 20, 50, 20) + self.defaultsLayout.setObjectName(u'defaultsLayout') + self.displayLabel = QtGui.QLabel(self.defaultsPage) + self.displayLabel.setObjectName(u'displayLabel') + self.displayComboBox = QtGui.QComboBox(self.defaultsPage) + self.displayComboBox.setEditable(False) + self.displayComboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) + self.displayComboBox.setSizeAdjustPolicy( QtGui.QComboBox.AdjustToContents) - self.displaySelectionComboBox.setObjectName(u'displaySelectionComboBox') - self.gridLayout.addWidget(self.displaySelectionComboBox, 0, 1, 1, 1) - self.themeSelectionLabel = QtGui.QLabel(self.layoutWidget) - self.themeSelectionLabel.setObjectName(u'themeSelectionLabel') - self.gridLayout.addWidget(self.themeSelectionLabel, 1, 0, 1, 1) - self.themeSelectionComboBox = QtGui.QComboBox(self.layoutWidget) - self.themeSelectionComboBox.setSizeAdjustPolicy( + self.displayComboBox.setObjectName(u'displayComboBox') + self.defaultsLayout.addRow(self.displayLabel, self.displayComboBox) + self.themeLabel = QtGui.QLabel(self.defaultsPage) + self.themeLabel.setObjectName(u'themeLabel') + self.themeComboBox = QtGui.QComboBox(self.defaultsPage) + self.themeComboBox.setEditable(False) + self.themeComboBox.setInsertPolicy(QtGui.QComboBox.NoInsert) + self.themeComboBox.setSizeAdjustPolicy( QtGui.QComboBox.AdjustToContents) - self.themeSelectionComboBox.setObjectName(u'themeSelectionComboBox') - self.gridLayout.addWidget(self.themeSelectionComboBox, 1, 1, 1, 1) - self.messageLabel = QtGui.QLabel(self.DefaultsPage) - self.messageLabel.setGeometry(QtCore.QRect(60, 160, 471, 17)) - self.messageLabel.setObjectName(u'messageLabel') - self.updateLabel = QtGui.QLabel(self.DefaultsPage) - self.updateLabel.setGeometry(QtCore.QRect(60, 220, 351, 17)) - self.updateLabel.setObjectName(u'updateLabel') - FirstTimeWizard.setPage(FirstTimePage.Defaults, self.DefaultsPage) - + self.themeComboBox.setObjectName(u'themeComboBox') + self.defaultsLayout.addRow(self.themeLabel, self.themeComboBox) + FirstTimeWizard.setPage(FirstTimePage.Defaults, self.defaultsPage) + self.retranslateUi(FirstTimeWizard) QtCore.QMetaObject.connectSlotsByName(FirstTimeWizard) @@ -211,23 +217,21 @@ class Ui_FirstTimeWizard(object): 'button now.')) self.songsPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs')) - self.songsPage.setSubTitle(translate( - 'OpenLP.FirstTimeWizard', + self.songsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Select and download public domain songs.')) self.biblesPage.setTitle(translate('OpenLP.FirstTimeWizard', - 'Download Samples from OpenLP.org')) - self.biblesPage.setSubTitle(translate( - 'OpenLP.FirstTimeWizard', - 'Select samples to downlaod and install for use.')) - self.internetGroupBox.setTitle(translate('OpenLP.FirstTimeWizard', - 'Download Example Files')) - self.DefaultsPage.setTitle(translate('OpenLP.FirstTimeWizard', + 'Sample Bibles')) + self.biblesPage.setSubTitle(translate('OpenLP.FirstTimeWizard', + 'Select and download free Bibles.')) + self.themesPage.setTitle(translate('OpenLP.FirstTimeWizard', + 'Sample Themes')) + self.themesPage.setSubTitle(translate('OpenLP.FirstTimeWizard', + 'Select and download sample themes.')) + self.defaultsPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Default Settings')) - self.DefaultsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', - 'Set up default values to be used by OpenLP')) - self.displaySelectionLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Default output display')) - self.themeSelectionLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Select the default Theme')) - self.messageLabel.setText(translate('OpenLP.FirstTimeWizard', - 'Press finish to apply all your changes and start OpenLP')) + self.defaultsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', + 'Set up default settings to be used by OpenLP.')) + self.displayLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Default output display:')) + self.themeLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Select default theme:')) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 70b994653..f3dacee88 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -337,6 +337,7 @@ def get_web_page(url, header=None, update_openlp=False): return None if update_openlp: Receiver.send_message(u'openlp_process_events') + log.debug(page) return page def file_is_unicode(filename): From 3298fa1e15f0d110210391a92812ac219accf817 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 10 Mar 2011 17:05:12 +0100 Subject: [PATCH 085/124] reverted changed, due to database problems --- openlp/core/lib/__init__.py | 12 ------------ openlp/plugins/bibles/lib/db.py | 18 ++++++++++++++++-- openlp/plugins/songs/lib/openlyricsexport.py | 10 ++++++---- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index e92b9c64a..dc60a5a65 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -29,7 +29,6 @@ OpenLP work. """ import logging import os.path -import re import types from PyQt4 import QtCore, QtGui @@ -321,17 +320,6 @@ def check_directory_exists(dir): if not os.path.exists(dir): os.makedirs(dir) -def clean_file_name(path): - """ - Removes not supported characters from the given path. - - ``path`` - The path to clean. - """ - if not isinstance(path, unicode): - path = unicode(path, u'utf-8') - return re.sub(r'[/\\?*|<>\[\]":<>+%]+', u'_', path).strip(u'_') - from listwidgetwithdnd import ListWidgetWithDnD from displaytags import DisplayTags from spelltextedit import SpellTextEdit diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 2021afa40..5cf000ee1 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -26,13 +26,14 @@ import logging import chardet +import re from PyQt4 import QtCore from sqlalchemy import Column, ForeignKey, or_, Table, types from sqlalchemy.orm import class_mapper, mapper, relation from sqlalchemy.orm.exc import UnmappedClassError -from openlp.core.lib import clean_file_name, Receiver, translate +from openlp.core.lib import Receiver, translate from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.ui import critical_error_message_box @@ -154,7 +155,7 @@ class BibleDB(QtCore.QObject, Manager): self.name = kwargs[u'name'] if not isinstance(self.name, unicode): self.name = unicode(self.name, u'utf-8') - self.file = clean_file_name(self.name) + u'.sqlite' + self.file = self.clean_filename(self.name) if u'file' in kwargs: self.file = kwargs[u'file'] Manager.__init__(self, u'bibles', init_schema, self.file) @@ -182,6 +183,19 @@ class BibleDB(QtCore.QObject, Manager): self.name = None return self.name + def clean_filename(self, old_filename): + """ + Clean up the version name of the Bible and convert it into a valid + file name. + + ``old_filename`` + The "dirty" file name or version name. + """ + if not isinstance(old_filename, unicode): + old_filename = unicode(old_filename, u'utf-8') + old_filename = re.sub(r'[^\w]+', u'_', old_filename).strip(u'_') + return old_filename + u'.sqlite' + def register(self, wizard): """ This method basically just initialialises the database. It is called diff --git a/openlp/plugins/songs/lib/openlyricsexport.py b/openlp/plugins/songs/lib/openlyricsexport.py index f4fdd769a..42410a7e0 100644 --- a/openlp/plugins/songs/lib/openlyricsexport.py +++ b/openlp/plugins/songs/lib/openlyricsexport.py @@ -29,11 +29,11 @@ songs from the database to the OpenLyrics format. """ import logging import os +import re from lxml import etree -from openlp.core.lib import check_directory_exists, clean_file_name, Receiver, \ - translate +from openlp.core.lib import check_directory_exists, Receiver, translate from openlp.plugins.songs.lib import OpenLyrics log = logging.getLogger(__name__) @@ -69,8 +69,10 @@ class OpenLyricsExport(object): song.title) xml = openLyrics.song_to_xml(song) tree = etree.ElementTree(etree.fromstring(xml)) - filename = clean_file_name(u'%s (%s).xml' % (song.title, - u', '.join([author.display_name for author in song.authors]))) + filename = u'%s (%s).xml' % (song.title, + u', '.join([author.display_name for author in song.authors])) + filename = re.sub( + r'[/\\?*|<>\[\]":<>+%]+', u'_', filename).strip(u'_') tree.write(os.path.join(self.save_path, filename), encoding=u'utf-8', xml_declaration=True, pretty_print=True) return True From 0070488784fc0047d4fc7b21167af5c0195fea5b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 10 Mar 2011 18:56:42 +0100 Subject: [PATCH 086/124] clean up --- openlp/plugins/bibles/lib/mediaitem.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 690564182..2b2f6597e 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -449,8 +449,7 @@ class BibleMediaItem(MediaManagerItem): if restore: old_text = unicode(combo.currentText()) combo.clear() - for i in range(range_from, range_to + 1): - combo.addItem(unicode(i)) + combo.addItems([unicode(i) for i in range(range_from, range_to + 1)]) if restore and combo.findText(old_text) != -1: combo.setCurrentIndex(combo.findText(old_text)) @@ -704,8 +703,7 @@ class BibleMediaItem(MediaManagerItem): service_item.theme = None else: service_item.theme = self.settings.bible_theme - for slide in raw_slides: - service_item.add_from_text(slide[:30], slide) + [service_item.add_from_text(slide[:30], slide) for slide in raw_slides] return True def formatTitle(self, start_item, old_item): @@ -744,8 +742,7 @@ class BibleMediaItem(MediaManagerItem): else: verse_range = start_chapter + verse_separator + start_verse + \ range_separator + old_chapter + verse_separator + old_verse - title = u'%s %s (%s)' % (start_book, verse_range, bibles) - return title + return u'%s %s (%s)' % (start_book, verse_range, bibles) def checkTitle(self, item, old_item): """ From 010adf3f254e9779b2b83116362aa5f2ea9ce2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Thu, 10 Mar 2011 20:31:34 +0200 Subject: [PATCH 087/124] Improve readability a bit, as Meths suggested. --- openlp/core/ui/servicemanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 73ca4b9ca..fa2bc50f5 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -417,7 +417,7 @@ class ServiceManager(QtGui.QWidget): return self.saveFileAs() path_file_name = unicode(self.fileName()) (path, file_name) = os.path.split(path_file_name) - basename = file_name[0:file_name.rfind(u'.')-1] + (basename, extension) = os.path.splitext(file_name) service_file_name = basename + '.osd' log.debug(u'ServiceManager.saveFile - %s' % path_file_name) SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, From 8374c2d449be28fcd3417ad066ad7feb7a3f70e6 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 10 Mar 2011 20:17:05 +0100 Subject: [PATCH 088/124] redundant code --- openlp/core/lib/__init__.py | 3 +-- openlp/core/lib/plugin.py | 9 ++++----- openlp/plugins/alerts/alertsplugin.py | 2 +- openlp/plugins/bibles/bibleplugin.py | 2 +- openlp/plugins/custom/customplugin.py | 2 +- openlp/plugins/images/imageplugin.py | 3 +-- openlp/plugins/media/mediaplugin.py | 2 +- openlp/plugins/presentations/presentationplugin.py | 2 +- openlp/plugins/remotes/remoteplugin.py | 2 +- openlp/plugins/songs/songsplugin.py | 3 +-- openlp/plugins/songusage/songusageplugin.py | 2 +- 11 files changed, 14 insertions(+), 18 deletions(-) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index dc60a5a65..1fb842361 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -248,9 +248,8 @@ def resize_image(image, width, height, background=QtCore.Qt.black): ``height`` The new image height. - ``background`` + ``background`` The background colour defaults to black. - """ log.debug(u'resize_image - start') if isinstance(image, QtGui.QImage): diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index c1ff30281..6195cb248 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -114,8 +114,8 @@ class Plugin(QtCore.QObject): """ log.info(u'loaded') - def __init__(self, name, version=None, pluginHelpers=None, - mediaItemClass=None, settingsTabClass=None): + def __init__(self, name, pluginHelpers=None, mediaItemClass=None, + settingsTabClass=None, version=None): """ This is the constructor for the plugin object. This provides an easy way for descendent plugins to populate common data. This method *must* @@ -123,7 +123,7 @@ class Plugin(QtCore.QObject): class MyPlugin(Plugin): def __init__(self): - Plugin.__init__(self, u'MyPlugin', u'0.1') + Plugin.__init__(self, u'MyPlugin', version=u'0.1') ``name`` Defaults to *None*. The name of the plugin. @@ -145,8 +145,7 @@ class Plugin(QtCore.QObject): self.textStrings = {} self.setPluginTextStrings() self.nameStrings = self.textStrings[StringContent.Name] - if version: - self.version = version + self.version = version if version else u'1.9.4' self.settingsSection = self.name.lower() self.icon = None self.mediaItemClass = mediaItemClass diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 1d9bd4c61..256e78916 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -40,7 +40,7 @@ class AlertsPlugin(Plugin): log.info(u'Alerts Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Alerts', u'1.9.4', plugin_helpers, + Plugin.__init__(self, u'Alerts', plugin_helpers, settingsTabClass=AlertsTab) self.weight = -3 self.icon = build_icon(u':/plugins/plugin_alerts.png') diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 73a9b7e1d..61bca84aa 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -37,7 +37,7 @@ class BiblePlugin(Plugin): log.info(u'Bible Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Bibles', u'1.9.4', plugin_helpers, + Plugin.__init__(self, u'Bibles', plugin_helpers, BibleMediaItem, BiblesTab) self.weight = -9 self.icon_path = u':/plugins/plugin_bibles.png' diff --git a/openlp/plugins/custom/customplugin.py b/openlp/plugins/custom/customplugin.py index c6c129e68..79064b53c 100644 --- a/openlp/plugins/custom/customplugin.py +++ b/openlp/plugins/custom/customplugin.py @@ -47,7 +47,7 @@ class CustomPlugin(Plugin): log.info(u'Custom Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Custom', u'1.9.4', plugin_helpers, + Plugin.__init__(self, u'Custom', plugin_helpers, CustomMediaItem, CustomTab) self.weight = -5 self.manager = Manager(u'custom', init_schema) diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 84d7a71cc..ae7f56e1d 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -35,8 +35,7 @@ class ImagePlugin(Plugin): log.info(u'Image Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Images', u'1.9.4', plugin_helpers, - ImageMediaItem) + Plugin.__init__(self, u'Images', plugin_helpers, ImageMediaItem) self.weight = -7 self.icon_path = u':/plugins/plugin_images.png' self.icon = build_icon(self.icon_path) diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index 3438f0279..b1c1a2f3e 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -38,7 +38,7 @@ class MediaPlugin(Plugin): log.info(u'%s MediaPlugin loaded', __name__) def __init__(self, plugin_helpers): - Plugin.__init__(self, u'Media', u'1.9.4', plugin_helpers, + Plugin.__init__(self, u'Media', plugin_helpers, MediaMediaItem, MediaTab) self.weight = -6 self.icon_path = u':/plugins/plugin_media.png' diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index eb7e714f0..f45901e43 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -51,7 +51,7 @@ class PresentationPlugin(Plugin): """ log.debug(u'Initialised') self.controllers = {} - Plugin.__init__(self, u'Presentations', u'1.9.4', plugin_helpers) + Plugin.__init__(self, u'Presentations', plugin_helpers) self.weight = -8 self.icon_path = u':/plugins/plugin_presentations.png' self.icon = build_icon(self.icon_path) diff --git a/openlp/plugins/remotes/remoteplugin.py b/openlp/plugins/remotes/remoteplugin.py index 7236d7546..0ed0ec099 100644 --- a/openlp/plugins/remotes/remoteplugin.py +++ b/openlp/plugins/remotes/remoteplugin.py @@ -38,7 +38,7 @@ class RemotesPlugin(Plugin): """ remotes constructor """ - Plugin.__init__(self, u'Remotes', u'1.9.4', plugin_helpers, + Plugin.__init__(self, u'Remotes', plugin_helpers, settingsTabClass=RemoteTab) self.icon = build_icon(u':/plugins/plugin_remote.png') self.weight = -1 diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index bfd5c4eea..1e072afdf 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -53,8 +53,7 @@ class SongsPlugin(Plugin): """ Create and set up the Songs plugin. """ - Plugin.__init__(self, u'Songs', u'1.9.4', plugin_helpers, - SongMediaItem, SongsTab) + Plugin.__init__(self, u'Songs', plugin_helpers, SongMediaItem, SongsTab) self.weight = -10 self.manager = Manager(u'songs', init_schema) self.icon_path = u':/plugins/plugin_songs.png' diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index e1dc0f1a8..99446dbe4 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -42,7 +42,7 @@ class SongUsagePlugin(Plugin): log.info(u'SongUsage Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'SongUsage', u'1.9.4', plugin_helpers) + Plugin.__init__(self, u'SongUsage', plugin_helpers) self.weight = -4 self.icon = build_icon(u':/plugins/plugin_songusage.png') self.manager = None From 717a243bfcbdc639255a754f6192c293fa2cb8f8 Mon Sep 17 00:00:00 2001 From: "John Cegalis jseagull1@hotmail.com" Date: Thu, 10 Mar 2011 14:52:09 -0500 Subject: [PATCH 089/124] cleaned up grammar --- documentation/manual/source/dualmonitors.rst | 10 ++++++---- documentation/manual/source/songs.rst | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index 72384fe52..9a021223b 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -29,7 +29,8 @@ Some computers also incorporate the use of :abbr:`S-Video (Separate Video)` or A typical OpenLP setup consist of your normal single monitor, with your projector hooked up to your computer as the second monitor. With the option of -extending your desktop across the second monitor, or your operating system's equivalent. +extending your desktop across the second monitor, or your operating system's +equivalent. Microsoft Windows ----------------- @@ -46,8 +47,8 @@ press :kbd:`Windows+P`. The more traditional way is also fairly straight forward. Go to :guilabel:`Control Panel` and click on :guilabel:`Display`. This will open up -the :guilabel:`Display` dialog. You may also bypass this step by a right click on -a blank area on your desktop and selecting :guilabel:`Resolution`. +the :guilabel:`Display` dialog. You may also bypass this step by a right click +on a blank area on your desktop and selecting :guilabel:`Resolution`. .. image:: pics/winsevendisplay.png @@ -123,7 +124,8 @@ Linux Systems Using nVidia Drivers This guide is for users of the proprietary nVidia driver on Linux Distributions. It is assumed that you have properly setup your drivers according to your -distribution's documentation, and you have a working ``xorg.conf`` file in place. +distribution's documentation, and you have a working ``xorg.conf`` file in +place. If you wish to make the changes permanent in setting up your system for dual monitors it will be necessary to modify your ``xorg.conf`` file. It is always a diff --git a/documentation/manual/source/songs.rst b/documentation/manual/source/songs.rst index 53db50242..91e5539c2 100644 --- a/documentation/manual/source/songs.rst +++ b/documentation/manual/source/songs.rst @@ -58,8 +58,9 @@ the folder. .. image:: pics/selectsongs.png On most operating systems, to select all the songs, first select the first song -in the list, press the shift key, and select the last song in the list. After this -press :guilabel:`Next` and you will see that your import has been successful. +in the list, press the shift key, and select the last song in the list. After +this press :guilabel:`Next` and you will see that your import has been +successful. .. image:: pics/finishedimport.png @@ -89,8 +90,9 @@ Choose either the .txt or .usr file. You will be asked to chose a download location if your browser does not automatically select that for you. Select this file from the OpenLP import window and then click :guilabel:`Next` You can also select multiple songs for import at once on most operating systems by -selecting the first item in the list then holding the shift key and select the last -item in the list. When finished, you will see that your import has completed. +selecting the first item in the list then holding the shift key and select the +last item in the list. When finished, you will see that your import has +completed. .. image:: pics/finishedimport.png From f07797f88fcd36dbe6748a53b3ab25f8a590714c Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Thu, 10 Mar 2011 21:49:53 +0100 Subject: [PATCH 090/124] fixed copyright --- openlp/core/ui/aboutdialog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index d973c5680..aec1bad51 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -226,7 +226,7 @@ class Ui_AboutDialog(object): 'Portions copyright \xa9 2004-2011 ' 'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri,\n' 'Meinert Jordan, Andreas Preikschat, Christian Richter, Philip\n' - 'Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carstenn' + 'Ridout, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten\n' 'Tinggaard, Frode Woldsund') licence = translate('OpenLP.AboutForm', 'This program is free software; you can redistribute it and/or ' From b522247094b1a1af3dceed56fe830f323082a450 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Thu, 10 Mar 2011 22:25:58 +0000 Subject: [PATCH 091/124] Fix SoF/OOo imports --- openlp/plugins/songs/lib/oooimport.py | 10 +++++----- openlp/plugins/songs/lib/songimport.py | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 4fb6b5876..77b629398 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -96,7 +96,7 @@ class OooImport(SongImport): """ if os.name == u'nt': self.start_ooo_process() - self.desktop = self.manager.createInstance( + self.desktop = self.ooo_manager.createInstance( u'com.sun.star.frame.Desktop') else: context = uno.getComponentContext() @@ -118,9 +118,9 @@ class OooImport(SongImport): def start_ooo_process(self): try: if os.name == u'nt': - self.manager = Dispatch(u'com.sun.star.ServiceManager') - self.manager._FlagAsMethod(u'Bridge_GetStruct') - self.manager._FlagAsMethod(u'Bridge_GetValueObject') + self.ooo_manager = Dispatch(u'com.sun.star.ServiceManager') + self.ooo_manager._FlagAsMethod(u'Bridge_GetStruct') + self.ooo_manager._FlagAsMethod(u'Bridge_GetValueObject') else: cmd = get_uno_command() process = QtCore.QProcess() @@ -134,6 +134,7 @@ class OooImport(SongImport): """ Open the passed file in OpenOffice.org Impress """ + self.filepath = filepath if os.name == u'nt': url = filepath.replace(u'\\', u'/') url = url.replace(u':', u'|').replace(u' ', u'%20') @@ -191,7 +192,6 @@ class OooImport(SongImport): if slidetext.strip() == u'': slidetext = u'\f' text += slidetext - song = SongImport(self.manager) songs = SongImport.process_songs_text(self.manager, text) for song in songs: song.finish() diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index fc78b5033..78d203ae3 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -55,13 +55,14 @@ class SongImport(QtCore.QObject): """ self.manager = manager QtCore.QObject.__init__(self) - if kwargs.has_key(u'filename'): - self.import_source = kwargs[u'filename'] - elif kwargs.has_key(u'filenames'): - self.import_source = kwargs[u'filenames'] - else: - raise KeyError(u'Keyword arguments "filename[s]" not supplied.') - log.debug(self.import_source) + if kwargs: + if kwargs.has_key(u'filename'): + self.import_source = kwargs[u'filename'] + elif kwargs.has_key(u'filenames'): + self.import_source = kwargs[u'filenames'] + else: + raise KeyError(u'Keyword arguments "filename[s]" not supplied.') + log.debug(self.import_source) self.song = None self.stop_import_flag = False self.set_defaults() @@ -146,12 +147,12 @@ class SongImport(QtCore.QObject): def process_verse_text(self, text): lines = text.split(u'\n') if text.lower().find(self.copyright_string) >= 0 \ - or text.find(SongStrings.CopyrightSymbol) >= 0: + or text.find(unicode(SongStrings.CopyrightSymbol)) >= 0: copyright_found = False for line in lines: if (copyright_found or line.lower().find(self.copyright_string) >= 0 or - line.find(SongStrings.CopyrightSymbol) >= 0): + line.find(unicode(SongStrings.CopyrightSymbol)) >= 0): copyright_found = True self.add_copyright(line) else: From e77ced2e64fdfca42e5275bf06faaed8fcf194d9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 11 Mar 2011 06:50:32 +0200 Subject: [PATCH 092/124] Removed unnecessary comments. --- openlp/core/ui/mainwindow.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 54909b5a7..d638fd07d 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -228,11 +228,10 @@ class Ui_MainWindow(object): # i18n Language Items self.AutoLanguageItem = checkable_action(mainWindow, u'AutoLanguageItem', LanguageManager.auto_language) - #mainWindow.actionList.add_action(self.AutoLanguageItem, u'Settings') + mainWindow.actionList.add_action(self.AutoLanguageItem, u'Settings') self.LanguageGroup = QtGui.QActionGroup(mainWindow) self.LanguageGroup.setExclusive(True) self.LanguageGroup.setObjectName(u'LanguageGroup') - #self.LanguageGroup.setDisabled(LanguageManager.auto_language) add_actions(self.LanguageGroup, [self.AutoLanguageItem]) qmList = LanguageManager.get_qm_list() savedLanguage = LanguageManager.get_language() From 21d59235ac99b2a7585d97a009cb853b6a40fae9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 11 Mar 2011 07:15:41 +0200 Subject: [PATCH 093/124] Stop signal from running twice and set 'Autodetect' text after language names have been set. --- openlp/core/ui/mainwindow.py | 10 ++++------ openlp/core/utils/languagemanager.py | 10 +++++++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index d638fd07d..cb324a872 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -425,14 +425,14 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', '&Online Help')) self.helpWebSiteItem.setText( translate('OpenLP.MainWindow', '&Web Site')) - self.AutoLanguageItem.setText( - translate('OpenLP.MainWindow', '&Auto Detect')) - self.AutoLanguageItem.setStatusTip(translate('OpenLP.MainWindow', - 'Use the system language, if available.')) for item in self.LanguageGroup.actions(): item.setText(item.objectName()) item.setStatusTip(unicode(translate('OpenLP.MainWindow', 'Set the interface language to %s')) % item.objectName()) + self.AutoLanguageItem.setText( + translate('OpenLP.MainWindow', '&Autodetect')) + self.AutoLanguageItem.setStatusTip(translate('OpenLP.MainWindow', + 'Use the system language, if available.')) self.ToolsAddToolItem.setText( translate('OpenLP.MainWindow', 'Add &Tool...')) self.ToolsAddToolItem.setStatusTip(translate('OpenLP.MainWindow', @@ -550,8 +550,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'triggered()'), self.ServiceManagerContents.printServiceOrder) # i18n set signals for languages - QtCore.QObject.connect(self.AutoLanguageItem, - QtCore.SIGNAL(u'toggled(bool)'), self.setAutoLanguage) self.LanguageGroup.triggered.connect(LanguageManager.set_language) QtCore.QObject.connect(self.ModeDefaultItem, QtCore.SIGNAL(u'triggered()'), self.onModeDefaultItemClicked) diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 9cadf06e2..28a8b06f8 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -112,9 +112,13 @@ class LanguageManager(object): """ language = u'en' if action: - action_name = u'%s' % action.objectName() - qm_list = LanguageManager.get_qm_list() - language = u'%s' % qm_list[action_name] + action_name = unicode(action.objectName()) + if action_name == u'AutoLanguageItem': + LanguageManager.auto_language = True + else: + LanguageManager.auto_language = False + qm_list = LanguageManager.get_qm_list() + language = unicode(qm_list[action_name]) if LanguageManager.auto_language: language = u'[%s]' % language # This needs to be here for the setValue to work From b4e888067133e603ed3636e1ccd0d0dabea15c9a Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 11 Mar 2011 08:33:22 +0000 Subject: [PATCH 094/124] Remove static methods and re-work code to avoid creation of additional SongImport's. --- openlp/plugins/songs/lib/oooimport.py | 20 ++++++++++----- openlp/plugins/songs/lib/sofimport.py | 9 ++++++- openlp/plugins/songs/lib/songimport.py | 35 +++++++------------------- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index 77b629398..e9db0ac3e 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -192,9 +192,7 @@ class OooImport(SongImport): if slidetext.strip() == u'': slidetext = u'\f' text += slidetext - songs = SongImport.process_songs_text(self.manager, text) - for song in songs: - song.finish() + self.process_songs_text(text) return def process_doc(self): @@ -216,6 +214,16 @@ class OooImport(SongImport): if textportion.BreakType in (PAGE_AFTER, PAGE_BOTH): paratext += u'\f' text += paratext + u'\n' - songs = SongImport.process_songs_text(self.manager, text) - for song in songs: - song.finish() + self.process_songs_text(text) + + def process_songs_text(self, text): + songtexts = self.tidy_text(text).split(u'\f') + self.set_defaults() + for songtext in songtexts: + if songtext.strip(): + self.process_song_text(songtext.strip()) + if self.check_complete(): + self.finish() + self.set_defaults() + if self.check_complete(): + self.finish() diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 711761114..3e5334b71 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -183,7 +183,7 @@ class SofImport(OooImport): into line """ text = textportion.getString() - text = SongImport.tidy_text(text) + text = self.tidy_text(text) if text.strip() == u'': return text if textportion.CharWeight == BOLD: @@ -299,8 +299,15 @@ class SofImport(OooImport): verse += line + u'\n' if verse: self.song.add_verse(verse, versetag) + if not self.is_chorus and \ + u'C1' in self.verse_order_list_generated: + self.verse_order_list_generated.append(u'C1') + self.verse_order_list_generated_useful = True else: self.song.add_verse(self.currentverse, versetag) + if not self.is_chorus and u'C1' in self.verse_order_list_generated: + self.verse_order_list_generated.append(u'C1') + self.verse_order_list_generated_useful = True self.currentverse = u'' self.is_chorus = False diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 78d203ae3..3bc1a082f 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -55,14 +55,13 @@ class SongImport(QtCore.QObject): """ self.manager = manager QtCore.QObject.__init__(self) - if kwargs: - if kwargs.has_key(u'filename'): - self.import_source = kwargs[u'filename'] - elif kwargs.has_key(u'filenames'): - self.import_source = kwargs[u'filenames'] - else: - raise KeyError(u'Keyword arguments "filename[s]" not supplied.') - log.debug(self.import_source) + if kwargs.has_key(u'filename'): + self.import_source = kwargs[u'filename'] + elif kwargs.has_key(u'filenames'): + self.import_source = kwargs[u'filenames'] + else: + raise KeyError(u'Keyword arguments "filename[s]" not supplied.') + log.debug(self.import_source) self.song = None self.stop_import_flag = False self.set_defaults() @@ -104,23 +103,7 @@ class SongImport(QtCore.QObject): def register(self, import_wizard): self.import_wizard = import_wizard - @staticmethod - def process_songs_text(manager, text): - songs = [] - songtexts = SongImport.tidy_text(text).split(u'\f') - song = SongImport(manager) - for songtext in songtexts: - if songtext.strip(): - song.process_song_text(songtext.strip()) - if song.check_complete(): - songs.append(song) - song = SongImport(manager) - if song.check_complete(): - songs.append(song) - return songs - - @staticmethod - def tidy_text(text): + def tidy_text(self, text): """ Get rid of some dodgy unicode and formatting characters we're not interested in. Some can be converted to ascii. @@ -241,7 +224,7 @@ class SongImport(QtCore.QObject): self.verse_counts[verse_def[0]] = int(verse_def[1:]) self.verses.append([verse_def, verse_text.rstrip(), lang]) self.verse_order_list_generated.append(verse_def) - + def repeat_verse(self): """ Repeat the previous verse in the verse order From 7336575067f4db37983364330fde54200f0fa827 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Fri, 11 Mar 2011 08:46:21 +0000 Subject: [PATCH 095/124] SOF fixes, auto add chorus to verse order again --- openlp/plugins/songs/lib/sofimport.py | 73 ++++++++++++++------------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index 3e5334b71..49adcd302 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -72,6 +72,7 @@ class SofImport(OooImport): to SongImport for writing song to disk """ OooImport.__init__(self, manager, **kwargs) + self.song = False def process_ooo_document(self): """ @@ -94,8 +95,8 @@ class SofImport(OooImport): if paragraph.supportsService("com.sun.star.text.Paragraph"): self.process_paragraph(paragraph) if self.song: - self.song.finish() - self.song = None + self.finish() + self.song = False def process_paragraph(self, paragraph): """ @@ -143,7 +144,7 @@ class SofImport(OooImport): self.blanklines += 1 if self.blanklines > 1: return - if self.song.title != u'': + if self.title != u'': self.finish_verse() return self.blanklines = 0 @@ -161,17 +162,17 @@ class SofImport(OooImport): self.skip_to_close_bracket = True return if text.startswith(u'Copyright'): - self.song.add_copyright(text) + self.add_copyright(text) return if text == u'(Repeat)': self.finish_verse() - self.song.repeat_verse() + self.repeat_verse() return - if self.song.title == u'': - if self.song.copyright == u'': - self.add_author(text) + if self.title == u'': + if self.copyright == u'': + self.add_sof_author(text) else: - self.song.add_copyright(text) + self.add_copyright(text) return self.add_verse_line(text) @@ -188,10 +189,10 @@ class SofImport(OooImport): return text if textportion.CharWeight == BOLD: boldtext = text.strip() - if boldtext.isdigit() and self.song.song_number == '': + if boldtext.isdigit() and self.song_number == '': self.add_songnumber(boldtext) return u'' - if self.song.title == u'': + if self.title == u'': text = self.uncap_text(text) self.add_title(text) return text @@ -207,10 +208,11 @@ class SofImport(OooImport): """ if self.song: self.finish_verse() - if not self.song.check_complete(): + if not self.check_complete(): return - self.song.finish() - self.song = SongImport(self.manager) + self.finish() + self.song = True + self.set_defaults() self.skip_to_close_bracket = False self.is_chorus = False self.italics = False @@ -221,17 +223,17 @@ class SofImport(OooImport): Add a song number, store as alternate title. Also use the song number to work out which songbook we're in """ - self.song.song_number = song_no - self.song.alternate_title = song_no + u'.' - self.song.song_book_pub = u'Kingsway Publications' + self.song_number = song_no + self.alternate_title = song_no + u'.' + self.song_book_pub = u'Kingsway Publications' if int(song_no) <= 640: - self.song.song_book = u'Songs of Fellowship 1' + self.song_book = u'Songs of Fellowship 1' elif int(song_no) <= 1150: - self.song.song_book = u'Songs of Fellowship 2' + self.song_book = u'Songs of Fellowship 2' elif int(song_no) <= 1690: - self.song.song_book = u'Songs of Fellowship 3' + self.song_book = u'Songs of Fellowship 3' else: - self.song.song_book = u'Songs of Fellowship 4' + self.song_book = u'Songs of Fellowship 4' def add_title(self, text): """ @@ -243,10 +245,10 @@ class SofImport(OooImport): title = title[1:] if title.endswith(u','): title = title[:-1] - self.song.title = title + self.title = title self.import_wizard.incrementProgressBar(u'Processing song ' + title, 0) - def add_author(self, text): + def add_sof_author(self, text): """ Add the author. OpenLP stores them individually so split by 'and', '&' and comma. @@ -254,7 +256,7 @@ class SofImport(OooImport): "Mr Smith" and "Mrs Smith". """ text = text.replace(u' and ', u' & ') - self.song.parse_author(text) + self.parse_author(text) def add_verse_line(self, text): """ @@ -262,7 +264,7 @@ class SofImport(OooImport): we're beyond the second line of first verse, then this indicates a change of verse. Italics are a chorus """ - if self.italics != self.is_chorus and ((len(self.song.verses) > 0) or + if self.italics != self.is_chorus and ((len(self.verses) > 0) or (self.currentverse.count(u'\n') > 1)): self.finish_verse() if self.italics: @@ -282,14 +284,14 @@ class SofImport(OooImport): splitat = None else: versetag = u'V' - splitat = self.verse_splits(self.song.song_number) + splitat = self.verse_splits(self.song_number) if splitat: ln = 0 verse = u'' for line in self.currentverse.split(u'\n'): ln += 1 if line == u'' or ln > splitat: - self.song.add_verse(verse, versetag) + self.add_sof_verse(verse, versetag) ln = 0 if line: verse = line + u'\n' @@ -298,19 +300,18 @@ class SofImport(OooImport): else: verse += line + u'\n' if verse: - self.song.add_verse(verse, versetag) - if not self.is_chorus and \ - u'C1' in self.verse_order_list_generated: - self.verse_order_list_generated.append(u'C1') - self.verse_order_list_generated_useful = True + self.add_sof_verse(verse, versetag) else: - self.song.add_verse(self.currentverse, versetag) - if not self.is_chorus and u'C1' in self.verse_order_list_generated: - self.verse_order_list_generated.append(u'C1') - self.verse_order_list_generated_useful = True + self.add_sof_verse(self.currentverse, versetag) self.currentverse = u'' self.is_chorus = False + def add_sof_verse(self, lyrics, tag): + self.add_verse(lyrics, tag) + if not self.is_chorus and u'C1' in self.verse_order_list_generated: + self.verse_order_list_generated.append(u'C1') + self.verse_order_list_generated_useful = True + def uncap_text(self, text): """ Words in the title are in all capitals, so we lowercase them. From 6448ac50923560cee7bcbbc260d3ef8996dbd6c7 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 11 Mar 2011 12:20:09 +0200 Subject: [PATCH 096/124] Last few changes to the wizard. --- openlp.pyw | 4 +- openlp/core/ui/firsttimeform.py | 157 +++++++++++++++++++++--------- openlp/core/ui/firsttimewizard.py | 24 ++++- 3 files changed, 135 insertions(+), 50 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 39719a80e..ca83a143b 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -171,8 +171,8 @@ class OpenLP(QtGui.QApplication): screens = ScreenList(self.desktop()) # First time checks in settings firstTime = QtCore.QSettings().value( - u'general/first time', QtCore.QVariant(True)).toBool() - if firstTime: + u'general/has run wizard', QtCore.QVariant(False)).toBool() + if not firstTime: FirstTimeForm(screens).exec_() if os.name == u'nt': self.setStyleSheet(application_stylesheet) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index dd8c57eb0..b3f030fdc 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -54,19 +54,14 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): # check to see if we have web access self.web = u'http://openlp.org/files/frw/' self.config = SafeConfigParser() - self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg?%s' % randint(0, 20))) + self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg')) if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) for screen in screens.get_screen_list(): self.displayComboBox.addItem(screen) - self.songsText = translate('OpenLP.FirstTimeWizard', 'Songs') - self.biblesText = translate('OpenLP.FirstTimeWizard', 'Bibles') - self.themesText = translate('OpenLP.FirstTimeWizard', 'Themes') - self.startUpdates = translate('OpenLP.FirstTimeWizard', - 'Starting Updates') self.downloading = unicode(translate('OpenLP.FirstTimeWizard', - 'Downloading %s')) + 'Downloading %s...')) QtCore.QObject.connect(self, QtCore.SIGNAL(u'currentIdChanged(int)'), self.onCurrentIdChanged) @@ -141,6 +136,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): return FirstTimePage.NoInternet else: return FirstTimePage.Songs + elif self.currentId() == FirstTimePage.Progress: + return -1 else: return self.currentId() + 1 @@ -158,54 +155,128 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): item = self.themesListWidget.item(iter) if item.checkState() == QtCore.Qt.Checked: self.themeComboBox.addItem(item.text()) + elif pageId == FirstTimePage.Progress: + self._preWizard() + self._performWizard() + self._postWizard() - def accept(self): - Receiver.send_message(u'cursor_busy') - self._updateMessage(self.startUpdates) - # Set up the Plugin status's - self._pluginStatus(self.songsCheckBox, u'songs/status') - self._pluginStatus(self.bibleCheckBox, u'bibles/status') - self._pluginStatus(self.presentationCheckBox, u'presentations/status') - self._pluginStatus(self.imageCheckBox, u'images/status') - self._pluginStatus(self.mediaCheckBox, u'media/status') - self._pluginStatus(self.remoteCheckBox, u'remotes/status') - self._pluginStatus(self.customCheckBox, u'custom/status') - self._pluginStatus(self.songUsageCheckBox, u'songusage/status') - self._pluginStatus(self.alertCheckBox, u'alerts/status') + def _incrementProgressBar(self, status_text, increment=1): + """ + Update the wizard progress page. + + ``status_text`` + Current status information to display. + + ``increment`` + The value to increment the progress bar by. + """ + if status_text: + self.progressLabel.setText(status_text) + if increment > 0: + self.progressBar.setValue(self.progressBar.value() + increment) + Receiver.send_message(u'openlp_process_events') + + def _preWizard(self): + """ + Prepare the UI for the process. + """ + # We start on 9 for the 9 plugins + max_progress = 9 + # Loop through the songs list and increase for each selected item + for i in xrange(self.songsListWidget.count()): + if self.songsListWidget.item(i).checkState() == QtCore.Qt.Checked: + max_progress += 1 + # Loop through the Bibles list and increase for each selected item + iterator = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget) + while iterator.value(): + item = iterator.value() + if item.parent() and item.checkState(0) == QtCore.Qt.Checked: + max_progress += 1 + iterator += 1 + # Loop through the themes list and increase for each selected item + for i in xrange(self.themesListWidget.count()): + if self.themesListWidget.item(i).checkState() == QtCore.Qt.Checked: + max_progress += 1 + self.finishButton.setVisible(False) + self.progressBar.setValue(0) + self.progressBar.setMinimum(0) + self.progressBar.setMaximum(max_progress) + + def _postWizard(self): + """ + Clean up the UI after the process has finished. + """ + self.progressBar.setValue(self.progressBar.maximum()) + self.finishButton.setVisible(True) + self.finishButton.setEnabled(True) + self.cancelButton.setVisible(False) + self.nextButton.setVisible(False) + Receiver.send_message(u'openlp_process_events') + + def _performWizard(self): + """ + Run the tasks in the wizard. + """ + # Set plugin states + self._incrementProgressBar(translate('OpenLP.FirstTimeWizard', + 'Enabling selected plugins...')) + self._setPluginStatus(self.songsCheckBox, u'songs/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.bibleCheckBox, u'bibles/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.presentationCheckBox, u'presentations/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.imageCheckBox, u'images/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.mediaCheckBox, u'media/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.remoteCheckBox, u'remotes/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.customCheckBox, u'custom/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.songUsageCheckBox, u'songusage/status') + self._incrementProgressBar(None) + self._setPluginStatus(self.alertCheckBox, u'alerts/status') # Build directories for downloads - destination = AppLocation.get_temp_path() - check_directory_exists(destination) + songs_destination = AppLocation.get_section_data_path(u'songs') bibles_destination = AppLocation.get_section_data_path(u'bibles') - check_directory_exists(bibles_destination) themes_destination = AppLocation.get_section_data_path(u'themes') - check_directory_exists(destination) # Install songs - songs_iterator = QtGui.QListWidgetItemIterator(self.songsListWidget) - while songs_iterator.value(): - item = songs_iterator.value() + for i in xrange(self.songsListWidget.count()): + item = self.songsListWidget.item(i) if item.checkState() == QtCore.Qt.Checked: filename = item.data(QtCore.Qt.UserRole).toString() - urllib.urlretrieve(u'%s%s' % (self.web, filename), - os.path.join(destination, filename)) - #importer = SongImporter() - songs_iterator += 1 + self._incrementProgressBar(self.downloading % filename) + destination = os.path.join(songs_destination, u'songs.sqlite') + if os.path.exists(destination): + if QtGui.QMessageBox.question(self, + translate('OpenLP.FirstTimeWizard', + 'Overwrite Existing Songs?'), + translate('OpenLP.FirstTimeWizard', 'Your songs ' + 'database already exists, are you sure you want to ' + 'overwrite it?'), + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, + QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes: + continue + urllib.urlretrieve(u'%s%s' % (self.web, filename), destination) # Install Bibles bibles_iterator = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget) while bibles_iterator.value(): item = bibles_iterator.value() if item.parent() and item.checkState(0) == QtCore.Qt.Checked: bible = unicode(item.data(0, QtCore.Qt.UserRole).toString()) + self._incrementProgressBar(self.downloading % bible) urllib.urlretrieve(u'%s%s' % (self.web, bible), os.path.join(bibles_destination, bible)) bibles_iterator += 1 - themes_iterator = QtGui.QListWidgetItemIterator(self.themesListWidget) - while themes_iterator.value(): - item = themes_iterator.value() + # Install themes + for i in xrange(self.themesListWidget.count()): + item = self.themesListWidget.item(i) if item.checkState() == QtCore.Qt.Checked: theme = unicode(item.data(QtCore.Qt.UserRole).toString()) + self._incrementProgressBar(self.downloading % theme) urllib.urlretrieve(u'%s%s' % (self.web, theme), - os.path.join(theme_destination, theme)) - themes_iterator += 1 + os.path.join(themes_destination, theme)) # Set Default Display if self.displayComboBox.currentIndex() != -1: QtCore.QSettings().setValue(u'General/monitor', @@ -214,19 +285,11 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.themeComboBox.currentIndex() != -1: QtCore.QSettings().setValue(u'themes/global theme', QtCore.QVariant(self.themeComboBox.currentText())) - QtCore.QSettings().setValue(u'general/first time', - QtCore.QVariant(False)) - Receiver.send_message(u'cursor_normal') - return QtGui.QWizard.accept(self) + QtCore.QSettings().setValue(u'general/has run wizard', + QtCore.QVariant(True)) - def _pluginStatus(self, field, tag): + def _setPluginStatus(self, field, tag): status = PluginStatus.Active if field.checkState() \ == QtCore.Qt.Checked else PluginStatus.Inactive QtCore.QSettings().setValue(tag, QtCore.QVariant(status)) - def _updateMessage(self, text): - """ - Keep screen up to date - """ - self.updateLabel.setText(text) - Receiver.send_message(u'openlp_process_events') diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index d33264362..9a8d2515e 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -37,6 +37,7 @@ class FirstTimePage(object): Bibles = 4 Themes = 5 Defaults = 6 + Progress = 7 class Ui_FirstTimeWizard(object): @@ -46,10 +47,12 @@ class Ui_FirstTimeWizard(object): FirstTimeWizard.setModal(True) FirstTimeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages| - QtGui.QWizard.NoBackButtonOnStartPage) + QtGui.QWizard.NoBackButtonOnStartPage | + QtGui.QWizard.NoBackButtonOnLastPage) self.finishButton = self.button(QtGui.QWizard.FinishButton) self.cancelButton = self.button(QtGui.QWizard.CancelButton) self.nextButton = self.button(QtGui.QWizard.NextButton) + self.backButton = self.button(QtGui.QWizard.BackButton) add_welcome_page(FirstTimeWizard, u':/wizards/wizard_firsttime.bmp') # The plugins page self.pluginPage = QtGui.QWizardPage() @@ -169,6 +172,19 @@ class Ui_FirstTimeWizard(object): self.themeComboBox.setObjectName(u'themeComboBox') self.defaultsLayout.addRow(self.themeLabel, self.themeComboBox) FirstTimeWizard.setPage(FirstTimePage.Defaults, self.defaultsPage) + # Progress page + self.progressPage = QtGui.QWizardPage() + self.progressPage.setObjectName(u'progressPage') + self.progressLayout = QtGui.QVBoxLayout(self.progressPage) + self.progressLayout.setMargin(48) + self.progressLayout.setObjectName(u'progressLayout') + self.progressLabel = QtGui.QLabel(self.progressPage) + self.progressLabel.setObjectName(u'progressLabel') + self.progressLayout.addWidget(self.progressLabel) + self.progressBar = QtGui.QProgressBar(self.progressPage) + self.progressBar.setObjectName(u'progressBar') + self.progressLayout.addWidget(self.progressBar) + FirstTimeWizard.setPage(FirstTimePage.Progress, self.progressPage) self.retranslateUi(FirstTimeWizard) QtCore.QMetaObject.connectSlotsByName(FirstTimeWizard) @@ -233,7 +249,13 @@ class Ui_FirstTimeWizard(object): 'Default Settings')) self.defaultsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', 'Set up default settings to be used by OpenLP.')) + self.progressPage.setTitle(translate('OpenLP.FirstTimeWizard', + 'Setting Up And Importing')) + self.progressPage.setSubTitle(translate('OpenLP.FirstTimeWizard', + 'Please wait while OpenLP is set up and your data is imported.')) self.displayLabel.setText(translate('OpenLP.FirstTimeWizard', 'Default output display:')) self.themeLabel.setText(translate('OpenLP.FirstTimeWizard', 'Select default theme:')) + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Starting configuration process...')) From ba24cce68ef277f61b6956dde94c899b0a520eca Mon Sep 17 00:00:00 2001 From: John Cegalis Date: Fri, 11 Mar 2011 05:48:48 -0500 Subject: [PATCH 097/124] spelling fix --- documentation/manual/source/dualmonitors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index 9a021223b..5c29e8650 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -67,7 +67,7 @@ a blank place on the desktop and click :guilabel:`Personalization`. .. image:: pics/vistapersonalize.png From the :guilabel:`Personalization` window click on :guilabel:`Display -Settings`. Click on the montior that represents your projector and make sure +Settings`. Click on the monitor that represents your projector and make sure you have checked :guilabel:`Extend the desktop onto this monitor`. .. image:: pics/vistadisplaysettings.png From b7aa0e4c70474db90dfa623832e86680e4b7b109 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 11 Mar 2011 17:18:51 +0200 Subject: [PATCH 098/124] Fix up issues with merge proposal. --- openlp.pyw | 4 ++-- openlp/core/ui/firsttimeform.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index ca83a143b..cec743f01 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -170,9 +170,9 @@ class OpenLP(QtGui.QApplication): # Decide how many screens we have and their size screens = ScreenList(self.desktop()) # First time checks in settings - firstTime = QtCore.QSettings().value( + has_run_wizard = QtCore.QSettings().value( u'general/has run wizard', QtCore.QVariant(False)).toBool() - if not firstTime: + if not has_run_wizard: FirstTimeForm(screens).exec_() if os.name == u'nt': self.setStyleSheet(application_stylesheet) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index b3f030fdc..b2895cb47 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -253,8 +253,9 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): translate('OpenLP.FirstTimeWizard', 'Overwrite Existing Songs?'), translate('OpenLP.FirstTimeWizard', 'Your songs ' - 'database already exists, are you sure you want to ' - 'overwrite it?'), + 'database already exists and your current songs will ' + 'be permanently lost, are you sure you want to ' + 'replace it ?'), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes: continue From f0379925bc3a00f5f6df0abb0391667bcbcec0eb Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 11 Mar 2011 16:38:22 +0100 Subject: [PATCH 099/124] fixed bug #719102 Fixes: https://launchpad.net/bugs/719102 --- openlp/plugins/songs/lib/mediaitem.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 46c027316..64802d05f 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -274,6 +274,7 @@ class SongMediaItem(MediaManagerItem): def onNewClick(self): log.debug(u'onNewClick') + self.editItem = None self.edit_song_form.newSong() self.edit_song_form.exec_() From 7c7410a218e928d32f376398acd98dd5ff5b6376 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 11 Mar 2011 16:53:26 +0100 Subject: [PATCH 100/124] complete fixe --- openlp/plugins/songs/lib/mediaitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 64802d05f..6efeee618 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -274,7 +274,6 @@ class SongMediaItem(MediaManagerItem): def onNewClick(self): log.debug(u'onNewClick') - self.editItem = None self.edit_song_form.newSong() self.edit_song_form.exec_() @@ -311,6 +310,7 @@ class SongMediaItem(MediaManagerItem): item_id = (self.editItem.data(QtCore.Qt.UserRole)).toInt()[0] self.edit_song_form.loadSong(item_id, False) self.edit_song_form.exec_() + self.editItem = None def onDeleteClick(self): """ From 648d33688ac31f0b4cbc8556b83debccc5764df9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 11 Mar 2011 18:36:34 +0200 Subject: [PATCH 101/124] Fixed some things from my last merge proposal. --- openlp.pyw | 8 ++++---- openlp/core/ui/firsttimeform.py | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index cec743f01..3dee7452b 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -186,7 +186,7 @@ class OpenLP(QtGui.QApplication): # start the main app window self.appClipboard = self.clipboard() self.mainWindow = MainWindow(screens, app_version, self.appClipboard, - firstTime) + has_run_wizard) self.mainWindow.show() if show_splash: # now kill the splashscreen @@ -271,11 +271,11 @@ def main(): # Now create and actually run the application. app = OpenLP(qt_args) # Define the settings environment - QtCore.QSettings(u'OpenLP', u'OpenLP') + settings = QtCore.QSettings(u'OpenLP', u'OpenLP') # First time checks in settings # Use explicit reference as not inside a QT environment yet - if QtCore.QSettings(u'OpenLP', u'OpenLP').value( - u'general/first time', QtCore.QVariant(True)).toBool(): + if not settings.value(u'general/has run wizard', + QtCore.QVariant(False)).toBool(): if not FirstTimeLanguageForm().exec_(): # if cancel then stop processing sys.exit() diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index b2895cb47..9f211e49e 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -28,7 +28,6 @@ import io import logging import os import urllib -from random import randint from tempfile import gettempdir from ConfigParser import SafeConfigParser @@ -58,8 +57,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) - for screen in screens.get_screen_list(): - self.displayComboBox.addItem(screen) + self.displayComboBox.addItems(screens.get_screen_list()) self.downloading = unicode(translate('OpenLP.FirstTimeWizard', 'Downloading %s...')) QtCore.QObject.connect(self, From 94d7f4e9326bbddc054a90a1b502e1ddffd7b396 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Fri, 11 Mar 2011 19:03:16 +0100 Subject: [PATCH 102/124] speed up application start/song search --- openlp/plugins/songs/lib/db.py | 2 +- openlp/plugins/songs/lib/mediaitem.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songs/lib/db.py b/openlp/plugins/songs/lib/db.py index a6255476a..b72517f70 100644 --- a/openlp/plugins/songs/lib/db.py +++ b/openlp/plugins/songs/lib/db.py @@ -256,7 +256,7 @@ def init_schema(url): mapper(Song, songs_table, properties={ 'authors': relation(Author, backref='songs', - secondary=authors_songs_table), + secondary=authors_songs_table, lazy=False), 'book': relation(Book, backref='songs'), 'media_files': relation(MediaFile, backref='songs', secondary=media_files_songs_table), diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 46c027316..05f8b29bc 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -253,9 +253,9 @@ class SongMediaItem(MediaManagerItem): if self.searchAsYouType: search_length = 1 if self.searchTextEdit.currentSearchType() == SongSearch.Entire: - search_length = 7 + search_length = 4 elif self.searchTextEdit.currentSearchType() == SongSearch.Lyrics: - search_length = 6 + search_length = 3 if len(text) > search_length: self.onSearchTextButtonClick() elif len(text) == 0: From f1b8e53e30a255a6b09cd35228e8d1f5964c3bbc Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 11 Mar 2011 19:02:36 +0000 Subject: [PATCH 103/124] Fix missing path for song usage report generation Fixes: https://launchpad.net/bugs/733271 --- openlp/plugins/songusage/forms/songusagedetailform.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index ee37b2a9c..71cbcba96 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -88,6 +88,14 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): """ log.debug(u'accept') path = unicode(self.fileLineEdit.text()) + if path == u'': + Receiver.send_message(u'openlp_error_message', { + u'title': translate('SongUsagePlugin.SongUsageDetailForm', + 'Report Creation'), + u'message': unicode(translate( + 'SongUsagePlugin.SongUsageDetailForm', 'No output path has been' + ' selected for the report.'))}) + return check_directory_exists(path) filename = unicode(translate('SongUsagePlugin.SongUsageDetailForm', 'usage_detail_%s_%s.txt')) % ( From b3ca0ef69a3dd5db60f1d366c14dd4c69b208c84 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Fri, 11 Mar 2011 19:20:31 +0000 Subject: [PATCH 104/124] Fix text --- openlp/plugins/songusage/forms/songusagedetailform.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index 71cbcba96..edfee3595 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -91,10 +91,11 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): if path == u'': Receiver.send_message(u'openlp_error_message', { u'title': translate('SongUsagePlugin.SongUsageDetailForm', - 'Report Creation'), + 'Output Path Not Selected'), u'message': unicode(translate( - 'SongUsagePlugin.SongUsageDetailForm', 'No output path has been' - ' selected for the report.'))}) + 'SongUsagePlugin.SongUsageDetailForm', 'You have not set a ' + 'valid output location for your song usage report. Please ' + 'select an existing path on your computer.'))}) return check_directory_exists(path) filename = unicode(translate('SongUsagePlugin.SongUsageDetailForm', From 18004c396820b574421906045141004074075a93 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 11 Mar 2011 22:51:29 +0200 Subject: [PATCH 105/124] Fixed some of the last bugs in the first time wizard. --- openlp.pyw | 2 +- openlp/core/ui/firsttimeform.py | 14 ++++---------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 3dee7452b..0c7893071 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -186,7 +186,7 @@ class OpenLP(QtGui.QApplication): # start the main app window self.appClipboard = self.clipboard() self.mainWindow = MainWindow(screens, app_version, self.appClipboard, - has_run_wizard) + not has_run_wizard) self.mainWindow.show() if show_splash: # now kill the splashscreen diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 9f211e49e..b049e2ea7 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -178,8 +178,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ Prepare the UI for the process. """ - # We start on 9 for the 9 plugins - max_progress = 9 + # We start on 2 for plugins status setting plus a "finished" point. + max_progress = 2 # Loop through the songs list and increase for each selected item for i in xrange(self.songsListWidget.count()): if self.songsListWidget.item(i).checkState() == QtCore.Qt.Checked: @@ -209,6 +209,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.finishButton.setEnabled(True) self.cancelButton.setVisible(False) self.nextButton.setVisible(False) + self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', + 'Download complete. Click the finish button to start OpenLP.')) Receiver.send_message(u'openlp_process_events') def _performWizard(self): @@ -219,21 +221,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self._incrementProgressBar(translate('OpenLP.FirstTimeWizard', 'Enabling selected plugins...')) self._setPluginStatus(self.songsCheckBox, u'songs/status') - self._incrementProgressBar(None) self._setPluginStatus(self.bibleCheckBox, u'bibles/status') - self._incrementProgressBar(None) self._setPluginStatus(self.presentationCheckBox, u'presentations/status') - self._incrementProgressBar(None) self._setPluginStatus(self.imageCheckBox, u'images/status') - self._incrementProgressBar(None) self._setPluginStatus(self.mediaCheckBox, u'media/status') - self._incrementProgressBar(None) self._setPluginStatus(self.remoteCheckBox, u'remotes/status') - self._incrementProgressBar(None) self._setPluginStatus(self.customCheckBox, u'custom/status') - self._incrementProgressBar(None) self._setPluginStatus(self.songUsageCheckBox, u'songusage/status') - self._incrementProgressBar(None) self._setPluginStatus(self.alertCheckBox, u'alerts/status') # Build directories for downloads songs_destination = AppLocation.get_section_data_path(u'songs') From 0bf2962ff36863ff44851a015f8ea66133af5e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sat, 12 Mar 2011 00:04:26 +0200 Subject: [PATCH 106/124] Mediaplugin mimetypes extensions hacky fix. --- openlp/plugins/media/mediaplugin.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index b1c1a2f3e..53fc8d2cc 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -45,6 +45,18 @@ class MediaPlugin(Plugin): self.icon = build_icon(self.icon_path) # passed with drag and drop messages self.dnd_id = u'Media' + self.additional_extensions = { + u'audio/ac3': [u'.ac3'], + u'audio/flac': [u'.flac'], + u'audio/x-m4a': [u'.m4a'], + u'audio/x-mp3': [u'.mp3'], + u'audio/mpeg': [u'.mp3', u'.mp2', u'.mpga', u'.mpega', u'.m4a'], + u'audio/qcelp': [u'.qcp'], + u'audio/x-wma': [u'.wma'], + u'audio/x-ms-wma': [u'.wma'], + u'video/x-matroska': [u'.mpv', u'.mkv'], + u'video/x-wmv': [u'.wmv'], + u'video/x-ms-wmv': [u'.wmv']} self.audio_extensions_list = [] self.video_extensions_list = [] mimetypes.init() @@ -65,6 +77,17 @@ class MediaPlugin(Plugin): self.serviceManager.supportedSuffixes(extension[1:]) log.info(u'MediaPlugin: %s extensions: %s' % (mimetype, u' '.join(extensions))) + # Add extensions for this mimetype from self.additional_extensions. + # This hack clears mimetypes' and operating system's shortcomings + # by providing possibly missing extensions. + if mimetype in self.additional_extensions.keys(): + for extension in self.additional_extensions[mimetype]: + ext = u'*%s' % extensions + if ext not in list: + list.append(ext) + self.serviceManager.supportedSuffixes(extension[1:]) + log.info(u'MediaPlugin: %s additional extensions: %s' % (mimetype, + u' '.join(self.additional_extensions[mimetype]))) def about(self): about_text = translate('MediaPlugin', 'Media Plugin' From 192a3de2ad61b565bc1076a5a733d30a42808f53 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 12 Mar 2011 01:41:44 +0200 Subject: [PATCH 107/124] Moved the translation files to their proper place on Linux/BSD/*nix. --- openlp/core/utils/__init__.py | 9 ++++++++- openlp/core/utils/languagemanager.py | 2 ++ resources/debian/Makefile | 10 +++++++--- resources/debian/debian/rules | 24 ++++++++++++------------ 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index f3dacee88..381712977 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -35,6 +35,7 @@ import urllib2 from datetime import datetime from PyQt4 import QtGui, QtCore + if sys.platform != u'win32' and sys.platform != u'darwin': try: from xdg import BaseDirectory @@ -134,7 +135,7 @@ class AppLocation(object): elif dir_type == AppLocation.LanguageDir: app_path = _get_frozen_path( os.path.abspath(os.path.split(sys.argv[0])[0]), - os.path.split(openlp.__file__)[0]) + _get_os_dir_path(dir_type)) return os.path.join(app_path, u'i18n') else: return _get_os_dir_path(dir_type) @@ -169,15 +170,21 @@ def _get_os_dir_path(dir_type): if dir_type == AppLocation.DataDir: return os.path.join(unicode(os.getenv(u'APPDATA'), encoding), u'openlp', u'data') + elif dir_type == AppLocation.LanguageDir: + return os.path.split(openlp.__file__)[0] return os.path.join(unicode(os.getenv(u'APPDATA'), encoding), u'openlp') elif sys.platform == u'darwin': if dir_type == AppLocation.DataDir: return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'Library', u'Application Support', u'openlp', u'Data') + elif dir_type == AppLocation.LanguageDir: + return os.path.split(openlp.__file__)[0] return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'Library', u'Application Support', u'openlp') else: + if dir_type == AppLocation.LanguageDir: + return os.path.join(u'/usr', u'share', u'openlp') if XDG_BASE_AVAILABLE: if dir_type == AppLocation.ConfigDir: return os.path.join(unicode(BaseDirectory.xdg_config_home, diff --git a/openlp/core/utils/languagemanager.py b/openlp/core/utils/languagemanager.py index 28a8b06f8..8e5ab1f54 100644 --- a/openlp/core/utils/languagemanager.py +++ b/openlp/core/utils/languagemanager.py @@ -63,6 +63,8 @@ class LanguageManager(object): """ Find all available language files in this OpenLP install """ + log.debug(u'Translation files: %s', AppLocation.get_directory( + AppLocation.LanguageDir)) trans_dir = QtCore.QDir(AppLocation.get_directory( AppLocation.LanguageDir)) file_names = trans_dir.entryList(QtCore.QStringList(u'*.qm'), diff --git a/resources/debian/Makefile b/resources/debian/Makefile index fd19cffb7..94e6e2499 100644 --- a/resources/debian/Makefile +++ b/resources/debian/Makefile @@ -2,12 +2,16 @@ # -*- makefile -*- build: - mkdir -p openlp/i18n + mkdir -p resources/i18n/qm for TSFILE in resources/i18n/*.ts; do\ - lrelease-qt4 $$TSFILE -qm openlp/i18n/`basename $$TSFILE .ts`.qm;\ + lrelease-qt4 $$TSFILE -qm resources/i18n/qm/`basename $$TSFILE .ts`.qm;\ done install: + mkdir -p $(DESTDIR)/usr/share/openlp/i18n + cd resources/i18n/qm && for QMFILE in*.qm; do\ + mv $QMFILE $(DESTDIR)/usr/share/openlp/i18n;\ + done clean: - + rm -fR resources/i18n/qm diff --git a/resources/debian/debian/rules b/resources/debian/debian/rules index 18a593660..a9f7a5711 100755 --- a/resources/debian/debian/rules +++ b/resources/debian/debian/rules @@ -1,21 +1,21 @@ #!/usr/bin/make -f - + DEB_PYTHON_SYSTEM := pysupport DEB_MAKE_BUILD_TARGET := build -DEB_MAKE_INSTALL_TARGET := -DEB_MAKE_CLEAN_TARGET := +DEB_MAKE_INSTALL_TARGET := install +DEB_MAKE_CLEAN_TARGET := clean include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/python-distutils.mk include /usr/share/cdbs/1/class/makefile.mk binary-post-install/openlp:: - for SIZE in 16x16 32x32 48x48 64x64 128x128 256x256; do \ - mkdir -p debian/openlp/usr/share/icons/hicolor/$$SIZE/apps && \ - cp resources/images/openlp-logo-$$SIZE.png debian/openlp/usr/share/icons/hicolor/$$SIZE/apps/openlp.png; \ - done - - mkdir -p debian/openlp/usr/share/icons/hicolor/scalable/apps && \ - cp resources/images/openlp-logo.svg debian/openlp/usr/share/icons/hicolor/scalable/apps/openlp.svg - - cd debian/openlp/usr/bin/ && mv openlp.pyw openlp + for SIZE in 16x16 32x32 48x48 64x64 128x128 256x256; do \ + mkdir -p debian/openlp/usr/share/icons/hicolor/$$SIZE/apps && \ + cp resources/images/openlp-logo-$$SIZE.png debian/openlp/usr/share/icons/hicolor/$$SIZE/apps/openlp.png; \ + done + + mkdir -p debian/openlp/usr/share/icons/hicolor/scalable/apps && \ + cp resources/images/openlp-logo.svg debian/openlp/usr/share/icons/hicolor/scalable/apps/openlp.svg + + cd debian/openlp/usr/bin/ && mv openlp.pyw openlp From 21679d6a1ab570b86512028ddfb9a8e41affec2e Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 12 Mar 2011 08:12:02 +0000 Subject: [PATCH 108/124] comment fixes --- openlp/core/lib/pluginmanager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index d2b05ab7c..dc1100e4a 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -73,7 +73,7 @@ class PluginManager(object): A list of helper objects to pass to the plugins. """ - self.plugin_helpers = plugin_helpers + #self.plugin_helpers = plugin_helpers startdepth = len(os.path.abspath(plugin_dir).split(os.sep)) log.debug(u'finding plugins in %s at depth %d', unicode(plugin_dir), startdepth) @@ -102,11 +102,11 @@ class PluginManager(object): plugin_objects = [] for p in plugin_classes: try: - plugin = p(self.plugin_helpers) - log.debug(u'Loaded plugin %s with helpers', unicode(p)) + plugin = p(plugin_helpers) + log.debug(u'Loaded plugin %s', unicode(p)) plugin_objects.append(plugin) except TypeError: - log.exception(u'loaded plugin %s has no helpers', unicode(p)) + log.exception(u'Failed to load plugin %s', unicode(p)) plugins_list = sorted(plugin_objects, self.order_by_weight) for plugin in plugins_list: if plugin.checkPreConditions(): From d65cab1d157ee919c6f49850e49baf0e9be4afc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20P=C3=B5ldaru?= Date: Sat, 12 Mar 2011 11:59:38 +0200 Subject: [PATCH 109/124] Sorry, guys. --- openlp/plugins/media/mediaplugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index 53fc8d2cc..06936cd44 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -82,7 +82,7 @@ class MediaPlugin(Plugin): # by providing possibly missing extensions. if mimetype in self.additional_extensions.keys(): for extension in self.additional_extensions[mimetype]: - ext = u'*%s' % extensions + ext = u'*%s' % extension if ext not in list: list.append(ext) self.serviceManager.supportedSuffixes(extension[1:]) From 0fe62c3591c1b7a8f0e23d1a1f7b362006b39401 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 12 Mar 2011 17:02:24 +0000 Subject: [PATCH 110/124] Memory improvements and additional logging --- openlp.pyw | 3 +-- openlp/core/lib/pluginmanager.py | 7 +++---- openlp/core/lib/toolbar.py | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 3dee7452b..0d3a21c7b 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -184,8 +184,7 @@ class OpenLP(QtGui.QApplication): # make sure Qt really display the splash screen self.processEvents() # start the main app window - self.appClipboard = self.clipboard() - self.mainWindow = MainWindow(screens, app_version, self.appClipboard, + self.mainWindow = MainWindow(screens, app_version, self.clipboard(), has_run_wizard) self.mainWindow.show() if show_splash: diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index dc1100e4a..f9009d7ac 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -55,10 +55,7 @@ class PluginManager(object): sys.path.insert(0, plugin_dir) self.basepath = os.path.abspath(plugin_dir) log.debug(u'Base path %s ', self.basepath) - self.plugin_helpers = [] self.plugins = [] - # this has to happen after the UI is sorted - # self.find_plugins(plugin_dir) log.info(u'Plugin manager Initialised') def find_plugins(self, plugin_dir, plugin_helpers): @@ -73,7 +70,7 @@ class PluginManager(object): A list of helper objects to pass to the plugins. """ - #self.plugin_helpers = plugin_helpers + log.info(u'Finding plugins') startdepth = len(os.path.abspath(plugin_dir).split(os.sep)) log.debug(u'finding plugins in %s at depth %d', unicode(plugin_dir), startdepth) @@ -203,6 +200,7 @@ class PluginManager(object): Loop through all the plugins and give them an opportunity to initialise themselves. """ + log.info(u'Initialise Plugings - Started') for plugin in self.plugins: log.info(u'initialising plugins %s in a %s state' % (plugin.name, plugin.isActive())) @@ -211,6 +209,7 @@ class PluginManager(object): log.info(u'Initialisation Complete for %s ' % plugin.name) if not plugin.isActive(): plugin.removeToolboxItem() + log.info(u'Initialise Plugings - Finished') def finalise_plugins(self): """ diff --git a/openlp/core/lib/toolbar.py b/openlp/core/lib/toolbar.py index 37fb67d52..1da68d72d 100644 --- a/openlp/core/lib/toolbar.py +++ b/openlp/core/lib/toolbar.py @@ -48,7 +48,7 @@ class OpenLPToolbar(QtGui.QToolBar): self.icons = {} self.setIconSize(QtCore.QSize(20, 20)) self.actions = {} - log.debug(u'Init done') + log.debug(u'Init done for %s' % parent.__class__.__name__) def addToolbarButton(self, title, icon, tooltip=None, slot=None, checkable=False, shortcut=0, alternate=0, From 6cab8c1a9020b126a25194aafe971f4927a6e342 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 12 Mar 2011 17:35:27 +0000 Subject: [PATCH 111/124] comments corrected --- openlp/core/lib/pluginmanager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openlp/core/lib/pluginmanager.py b/openlp/core/lib/pluginmanager.py index f9009d7ac..6085b0da3 100644 --- a/openlp/core/lib/pluginmanager.py +++ b/openlp/core/lib/pluginmanager.py @@ -49,7 +49,7 @@ class PluginManager(object): ``plugin_dir`` The directory to search for plugins. """ - log.info(u'Plugin manager initing') + log.info(u'Plugin manager Initialising') if not plugin_dir in sys.path: log.debug(u'Inserting %s into sys.path', plugin_dir) sys.path.insert(0, plugin_dir) @@ -200,7 +200,7 @@ class PluginManager(object): Loop through all the plugins and give them an opportunity to initialise themselves. """ - log.info(u'Initialise Plugings - Started') + log.info(u'Initialise Plugins - Started') for plugin in self.plugins: log.info(u'initialising plugins %s in a %s state' % (plugin.name, plugin.isActive())) @@ -209,7 +209,7 @@ class PluginManager(object): log.info(u'Initialisation Complete for %s ' % plugin.name) if not plugin.isActive(): plugin.removeToolboxItem() - log.info(u'Initialise Plugings - Finished') + log.info(u'Initialise Plugins - Finished') def finalise_plugins(self): """ From d9d12f0daf1af91b664384c97ee6d7df197ebdb1 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 12 Mar 2011 22:28:37 +0200 Subject: [PATCH 112/124] Updated manifest file. --- MANIFEST.in | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 992685bcf..b51cd4c06 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,13 +4,10 @@ recursive-include openlp *.csv recursive-include openlp *.html recursive-include openlp *.js recursive-include openlp *.css -recursive-include openlp *.qm recursive-include documentation * -recursive-include resources/forms * -recursive-include resources/i18n * -recursive-include resources/images * -recursive-include scripts *.py -include resources/*.desktop +recursive-include resources * +recursive-include scripts * include copyright.txt include LICENSE +include README.txt include openlp/.version From d89b7543003d887f2e3e3a2cdeb16449274ca02e Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sat, 12 Mar 2011 22:36:33 +0200 Subject: [PATCH 113/124] Fixed up some spaces->tabs that went awry. --- resources/debian/Makefile | 10 +++++----- resources/debian/debian/rules | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/resources/debian/Makefile b/resources/debian/Makefile index 94e6e2499..1fe02b479 100644 --- a/resources/debian/Makefile +++ b/resources/debian/Makefile @@ -4,14 +4,14 @@ build: mkdir -p resources/i18n/qm for TSFILE in resources/i18n/*.ts; do\ - lrelease-qt4 $$TSFILE -qm resources/i18n/qm/`basename $$TSFILE .ts`.qm;\ + lrelease-qt4 $$TSFILE -qm resources/i18n/qm/`basename $$TSFILE .ts`.qm;\ done install: - mkdir -p $(DESTDIR)/usr/share/openlp/i18n - cd resources/i18n/qm && for QMFILE in*.qm; do\ - mv $QMFILE $(DESTDIR)/usr/share/openlp/i18n;\ - done + mkdir -p $(DESTDIR)/usr/share/openlp/i18n + cd resources/i18n/qm && for QMFILE in*.qm; do\ + mv $QMFILE $(DESTDIR)/usr/share/openlp/i18n;\ + done clean: rm -fR resources/i18n/qm diff --git a/resources/debian/debian/rules b/resources/debian/debian/rules index a9f7a5711..c8fe91ecc 100755 --- a/resources/debian/debian/rules +++ b/resources/debian/debian/rules @@ -10,12 +10,12 @@ include /usr/share/cdbs/1/class/python-distutils.mk include /usr/share/cdbs/1/class/makefile.mk binary-post-install/openlp:: - for SIZE in 16x16 32x32 48x48 64x64 128x128 256x256; do \ - mkdir -p debian/openlp/usr/share/icons/hicolor/$$SIZE/apps && \ - cp resources/images/openlp-logo-$$SIZE.png debian/openlp/usr/share/icons/hicolor/$$SIZE/apps/openlp.png; \ - done + for SIZE in 16x16 32x32 48x48 64x64 128x128 256x256; do \ + mkdir -p debian/openlp/usr/share/icons/hicolor/$$SIZE/apps && \ + cp resources/images/openlp-logo-$$SIZE.png debian/openlp/usr/share/icons/hicolor/$$SIZE/apps/openlp.png; \ + done - mkdir -p debian/openlp/usr/share/icons/hicolor/scalable/apps && \ - cp resources/images/openlp-logo.svg debian/openlp/usr/share/icons/hicolor/scalable/apps/openlp.svg + mkdir -p debian/openlp/usr/share/icons/hicolor/scalable/apps && \ + cp resources/images/openlp-logo.svg debian/openlp/usr/share/icons/hicolor/scalable/apps/openlp.svg - cd debian/openlp/usr/bin/ && mv openlp.pyw openlp + cd debian/openlp/usr/bin/ && mv openlp.pyw openlp From 8cc21cef79bf4e3bf08288646bb8698b785d5099 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 13 Mar 2011 14:50:14 +0100 Subject: [PATCH 114/124] removed need to have a verseOrder; removed attempt to fix missing verse_numbers --- openlp/plugins/songs/lib/xml.py | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index bd22ea4b2..8353fc927 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -444,7 +444,6 @@ class OpenLyrics(object): """ sxml = SongXML() search_text = u'' - temp_verse_order = [] for verse in lyrics.verse: text = u'' for lines in verse.lines: @@ -455,11 +454,6 @@ class OpenLyrics(object): verse_type_index = VerseType.from_tag(verse_name[0]) verse_type = VerseType.Names[verse_type_index] verse_number = re.compile(u'[a-zA-Z]*').sub(u'', verse_name) - verse_part = re.compile(u'[0-9]*').sub(u'', verse_name[1:]) - # OpenLyrics allows e. g. "c", but we need "c1". - if not verse_number: - verse_number = u'1' - temp_verse_order.append((verse_type, verse_number, verse_part)) lang = None if self._get(verse, u'lang'): lang = self._get(verse, u'lang') @@ -470,24 +464,6 @@ class OpenLyrics(object): # Process verse order if hasattr(properties, u'verseOrder'): song.verse_order = self._text(properties.verseOrder) - else: - # We have to process the temp_verse_order, as the verseOrder - # property is not present. - previous_type = u'' - previous_number = u'' - previous_part = u'' - verse_order = [] - # Currently we do not support different "parts"! - for name in temp_verse_order: - if name[0] == previous_type: - if name[1] != previous_number: - verse_order.append(u''.join((name[0][0], name[1]))) - else: - verse_order.append(u''.join((name[0][0], name[1]))) - previous_type = name[0] - previous_number = name[1] - previous_part = name[2] - song.verse_order = u' '.join(verse_order) def _process_songbooks(self, properties, song): """ From 99eba705c5d741808ae6b19d1271ce9af1b29129 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 13 Mar 2011 15:39:55 +0100 Subject: [PATCH 115/124] add the verse tag fix back --- openlp/plugins/songs/lib/xml.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 8353fc927..a59395d65 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -454,6 +454,10 @@ class OpenLyrics(object): verse_type_index = VerseType.from_tag(verse_name[0]) verse_type = VerseType.Names[verse_type_index] verse_number = re.compile(u'[a-zA-Z]*').sub(u'', verse_name) + # OpenLyrics allows e. g. "c", but we need "c1". However, this does + # not correct the verse order. + if not verse_number: + verse_number = u'1' lang = None if self._get(verse, u'lang'): lang = self._get(verse, u'lang') From 0ae31ce861449002a02ead3cd2b26fdaa7422677 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 13 Mar 2011 16:01:01 +0100 Subject: [PATCH 116/124] fixed old service files --- openlp/core/lib/serviceitem.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 2dd87f6f5..2d7f542d6 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -183,6 +183,10 @@ class ServiceItem(object): else: log.error(u'Invalid value renderer :%s' % self.service_item_type) self.title = clean_tags(self.title) + # The footer should never be None, but to be compatible with older + # release of OpenLP, we have to correct this to avoid tracebacks. + if self.raw_footer is None: + self.raw_footer = [] self.foot_text = \ u'
'.join([footer for footer in self.raw_footer if footer]) From 9c30635fcb350e77e81b074341ad1104b3543c1b Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sun, 13 Mar 2011 16:58:27 +0100 Subject: [PATCH 117/124] remove corrupted bibles --- openlp/plugins/bibles/lib/manager.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index dcbad3e63..c11e10588 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -25,14 +25,14 @@ ############################################################################### import logging +import os from PyQt4 import QtCore from openlp.core.lib import Receiver, SettingsManager, translate -from openlp.core.utils import AppLocation +from openlp.core.utils import AppLocation, delete_file from openlp.plugins.bibles.lib import parse_reference from openlp.plugins.bibles.lib.db import BibleDB, BibleMeta - from csvbible import CSVBible from http import HTTPBible from opensong import OpenSongBible @@ -144,6 +144,10 @@ class BibleManager(object): for filename in files: bible = BibleDB(self.parent, path=self.path, file=filename) name = bible.get_name() + # Remove corrupted files. + if name is None: + delete_file(os.path.join(self.path, filename)) + continue log.debug(u'Bible Name: "%s"', name) self.db_cache[name] = bible # Look to see if lazy load bible exists and get create getter. From a33a13ef05cf3758c8869f8a3c4ae262b2cbaf5c Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 14 Mar 2011 08:48:23 +0200 Subject: [PATCH 118/124] Make first time wizard import songs, rather than overwrite them. --- openlp.pyw | 6 +++-- openlp/core/ui/firsttimeform.py | 34 ++++++++++++++------------ openlp/core/ui/mainwindow.py | 26 +++++++++++++++----- openlp/plugins/songs/lib/olpimport.py | 10 +++++--- openlp/plugins/songs/lib/songimport.py | 1 + openlp/plugins/songs/songsplugin.py | 32 +++++++++++++++++++++++- 6 files changed, 80 insertions(+), 29 deletions(-) diff --git a/openlp.pyw b/openlp.pyw index 416b2bb13..04f65a5dd 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -184,13 +184,15 @@ class OpenLP(QtGui.QApplication): # make sure Qt really display the splash screen self.processEvents() # start the main app window - self.mainWindow = MainWindow(screens, app_version, self.clipboard(), - not has_run_wizard) + self.mainWindow = MainWindow(screens, app_version, self.clipboard()) self.mainWindow.show() if show_splash: # now kill the splashscreen self.splash.finish(self.mainWindow) self.mainWindow.repaint() + self.processEvents() + if not has_run_wizard: + self.mainWindow.firstTime() update_check = QtCore.QSettings().value( u'general/update check', QtCore.QVariant(True)).toBool() if update_check: diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index b049e2ea7..c02da2179 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -53,7 +53,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): # check to see if we have web access self.web = u'http://openlp.org/files/frw/' self.config = SafeConfigParser() - self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg')) + self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg?99')) if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) @@ -111,17 +111,19 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.biblesTreeWidget.expandAll() themes = self.config.get(u'themes', u'files') themes = themes.split(u',') + if not os.path.exists(os.path.join(gettempdir(), u'openlp')): + os.makedirs(os.path.join(gettempdir(), u'openlp')) for theme in themes: title = self.config.get(u'theme_%s' % theme, u'title') filename = self.config.get(u'theme_%s' % theme, u'filename') screenshot = self.config.get(u'theme_%s' % theme, u'screenshot') urllib.urlretrieve(u'%s/%s' % (self.web, screenshot), - os.path.join(gettempdir(), screenshot)) + os.path.join(gettempdir(), u'openlp', screenshot)) item = QtGui.QListWidgetItem(title, self.themesListWidget) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(filename)) item.setIcon(build_icon( - os.path.join(gettempdir(), screenshot))) + os.path.join(gettempdir(), u'openlp', screenshot))) item.setCheckState(QtCore.Qt.Unchecked) item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) @@ -230,7 +232,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self._setPluginStatus(self.songUsageCheckBox, u'songusage/status') self._setPluginStatus(self.alertCheckBox, u'alerts/status') # Build directories for downloads - songs_destination = AppLocation.get_section_data_path(u'songs') + songs_destination = os.path.join(unicode(gettempdir()), u'openlp') bibles_destination = AppLocation.get_section_data_path(u'bibles') themes_destination = AppLocation.get_section_data_path(u'themes') # Install songs @@ -239,18 +241,18 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): if item.checkState() == QtCore.Qt.Checked: filename = item.data(QtCore.Qt.UserRole).toString() self._incrementProgressBar(self.downloading % filename) - destination = os.path.join(songs_destination, u'songs.sqlite') - if os.path.exists(destination): - if QtGui.QMessageBox.question(self, - translate('OpenLP.FirstTimeWizard', - 'Overwrite Existing Songs?'), - translate('OpenLP.FirstTimeWizard', 'Your songs ' - 'database already exists and your current songs will ' - 'be permanently lost, are you sure you want to ' - 'replace it ?'), - QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, - QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes: - continue + destination = os.path.join(songs_destination, unicode(filename)) + #if os.path.exists(destination): + # if QtGui.QMessageBox.question(self, + # translate('OpenLP.FirstTimeWizard', + # 'Overwrite Existing Songs?'), + # translate('OpenLP.FirstTimeWizard', 'Your songs ' + # 'database already exists and your current songs will ' + # 'be permanently lost, are you sure you want to ' + # 'replace it ?'), + # QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, + # QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes: + # continue urllib.urlretrieve(u'%s%s' % (self.web, filename), destination) # Install Bibles bibles_iterator = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index cb324a872..4279673ba 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -25,6 +25,8 @@ ############################################################################### import logging +import os +from tempfile import gettempdir from PyQt4 import QtCore, QtGui @@ -461,16 +463,16 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): actionList = ActionList() - def __init__(self, screens, applicationVersion, clipboard, firstTime): + def __init__(self, screens, applicationVersion, clipboard): """ This constructor sets up the interface, the various managers, and the plugins. """ QtGui.QMainWindow.__init__(self) self.screens = screens - self.actionList = ActionList() self.applicationVersion = applicationVersion self.clipboard = clipboard + #self.firstTime = firstTime # Set up settings sections for the main application # (not for use by plugins) self.uiSettingsSection = u'user interface' @@ -478,6 +480,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.serviceSettingsSection = u'servicemanager' self.songsSettingsSection = u'songs' self.serviceNotSaved = False + self.actionList = ActionList() self.settingsmanager = SettingsManager(screens) self.aboutForm = AboutForm(self, applicationVersion) self.settingsForm = SettingsForm(self.screens, self, self) @@ -624,10 +627,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.MediaToolBox.setCurrentIndex(savedPlugin) self.settingsForm.postSetUp() Receiver.send_message(u'cursor_normal') - # Import themes if first time - if firstTime: - self.themeManagerContents.firstTime() - def setAutoLanguage(self, value): self.LanguageGroup.setDisabled(value) @@ -670,6 +669,21 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.setViewMode(False, True, False, False, True) self.ModeLiveItem.setChecked(True) + def firstTime(self): + # Import themes if first time + #if self.firstTime: + Receiver.send_message(u'openlp_process_events') + self.themeManagerContents.firstTime() + for plugin in self.pluginManager.plugins: + if hasattr(plugin, u'firstTime'): + Receiver.send_message(u'openlp_process_events') + plugin.firstTime() + Receiver.send_message(u'openlp_process_events') + temp_dir = os.path.join(unicode(gettempdir()), u'openlp') + for filename in os.listdir(temp_dir): + os.remove(os.path.join(temp_dir, filename)) + os.removedirs(temp_dir) + def blankCheck(self): """ Check and display message if screen blank on setup. diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index 11170f9a0..9bd098e47 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -151,12 +151,14 @@ class OpenLPSongImport(SongImport): source_songs = self.source_session.query(OldSong).all() song_total = len(source_songs) - self.import_wizard.progressBar.setMaximum(song_total) + if self.import_wizard: + self.import_wizard.progressBar.setMaximum(song_total) song_count = 1 for song in source_songs: - self.import_wizard.incrementProgressBar(unicode(translate( - 'SongsPlugin.OpenLPSongImport', 'Importing song %d of %d.')) % - (song_count, song_total)) + if self.import_wizard: + self.import_wizard.incrementProgressBar( + unicode(translate('SongsPlugin.OpenLPSongImport', + 'Importing song %d of %d.')) % (song_count, song_total)) new_song = Song() new_song.title = song.title if has_media_files and hasattr(song, 'alternate_title'): diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 3bc1a082f..4097af636 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -62,6 +62,7 @@ class SongImport(QtCore.QObject): else: raise KeyError(u'Keyword arguments "filename[s]" not supplied.') log.debug(self.import_source) + self.import_wizard = None self.song = None self.stop_import_flag = False self.set_defaults() diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 1e072afdf..cb49f9149 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -26,16 +26,20 @@ import logging import re +import os +from tempfile import gettempdir from PyQt4 import QtCore, QtGui -from openlp.core.lib import Plugin, StringContent, build_icon, translate +from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ + Receiver from openlp.core.lib.db import Manager from openlp.core.lib.ui import UiStrings from openlp.plugins.songs.lib import add_author_unknown, SongMediaItem, \ SongsTab, SongXML from openlp.plugins.songs.lib.db import init_schema, Song from openlp.plugins.songs.lib.importer import SongFormat +from openlp.plugins.songs.lib.olpimport import OpenLPSongImport log = logging.getLogger(__name__) @@ -244,6 +248,32 @@ class SongsPlugin(Plugin): } self.setPluginUiTextStrings(tooltips) + def firstTime(self): + """ + If the first time wizard has run, this function is run to import all the + new songs into the database. + """ + db_dir = unicode(os.path.join(gettempdir(), u'openlp')) + song_dbs = [] + for sfile in os.listdir(db_dir): + if sfile.startswith(u'songs_') and sfile.endswith(u'.sqlite'): + song_dbs.append(os.path.join(db_dir, sfile)) + progress = QtGui.QProgressDialog(self.formparent) + progress.setWindowModality(QtCore.Qt.WindowModal) + progress.setLabelText(translate('SongsPlugin', 'Importing songs...')) + progress.setCancelButton(None) + progress.setRange(0, len(song_dbs)) + progress.setMinimumDuration(0) + progress.forceShow() + for idx, db in enumerate(song_dbs): + progress.setValue(idx) + Receiver.send_message(u'openlp_process_events') + importer = OpenLPSongImport(self.manager, filename=db) + importer.do_import() + progress.setValue(len(song_dbs)) + self.mediaItem.displayResultsSong( + self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) + def finalise(self): """ Time to tidy up on exit From b3aa2bfdd19f17b739ae38af8ec7665c8e243d4a Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 14 Mar 2011 08:49:54 +0200 Subject: [PATCH 119/124] Removed some unnecessary comments. --- openlp/core/ui/firsttimeform.py | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index c02da2179..907a58819 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -235,26 +235,15 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): songs_destination = os.path.join(unicode(gettempdir()), u'openlp') bibles_destination = AppLocation.get_section_data_path(u'bibles') themes_destination = AppLocation.get_section_data_path(u'themes') - # Install songs + # Download songs for i in xrange(self.songsListWidget.count()): item = self.songsListWidget.item(i) if item.checkState() == QtCore.Qt.Checked: filename = item.data(QtCore.Qt.UserRole).toString() self._incrementProgressBar(self.downloading % filename) destination = os.path.join(songs_destination, unicode(filename)) - #if os.path.exists(destination): - # if QtGui.QMessageBox.question(self, - # translate('OpenLP.FirstTimeWizard', - # 'Overwrite Existing Songs?'), - # translate('OpenLP.FirstTimeWizard', 'Your songs ' - # 'database already exists and your current songs will ' - # 'be permanently lost, are you sure you want to ' - # 'replace it ?'), - # QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, - # QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes: - # continue urllib.urlretrieve(u'%s%s' % (self.web, filename), destination) - # Install Bibles + # Download Bibles bibles_iterator = QtGui.QTreeWidgetItemIterator(self.biblesTreeWidget) while bibles_iterator.value(): item = bibles_iterator.value() @@ -264,7 +253,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): urllib.urlretrieve(u'%s%s' % (self.web, bible), os.path.join(bibles_destination, bible)) bibles_iterator += 1 - # Install themes + # Download themes for i in xrange(self.themesListWidget.count()): item = self.themesListWidget.item(i) if item.checkState() == QtCore.Qt.Checked: From 3bb7f556c904233d367840e9f360acdd438fa617 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 14 Mar 2011 08:54:18 +0200 Subject: [PATCH 120/124] Post-development cleanup. --- openlp/core/ui/firsttimeform.py | 2 +- openlp/core/ui/mainwindow.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 907a58819..382be85b8 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -53,7 +53,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): # check to see if we have web access self.web = u'http://openlp.org/files/frw/' self.config = SafeConfigParser() - self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg?99')) + self.webAccess = get_web_page(u'%s%s' % (self.web, u'download.cfg')) if self.webAccess: files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 4279673ba..06b809a20 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -472,7 +472,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.screens = screens self.applicationVersion = applicationVersion self.clipboard = clipboard - #self.firstTime = firstTime # Set up settings sections for the main application # (not for use by plugins) self.uiSettingsSection = u'user interface' @@ -671,7 +670,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def firstTime(self): # Import themes if first time - #if self.firstTime: Receiver.send_message(u'openlp_process_events') self.themeManagerContents.firstTime() for plugin in self.pluginManager.plugins: From ffe7e838db777cbffcf5e8532e45b4135d70d5ff Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 14 Mar 2011 08:27:25 +0000 Subject: [PATCH 121/124] Add Blank at end of video Add comments for background override code. Add Hook for setting video stop time (post beta 1) Fixes: https://launchpad.net/bugs/657860 --- openlp/core/ui/maindisplay.py | 36 ++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 72ebe422a..d830fe222 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -67,6 +67,7 @@ class MainDisplay(DisplayWidget): self.isLive = live self.alertTab = None self.hideMode = None + self.videoHide = False self.override = {} mainIcon = build_icon(u':/icon/openlp-logo-16x16.png') self.setWindowIcon(mainIcon) @@ -90,7 +91,7 @@ class MainDisplay(DisplayWidget): """ Set up and build the output screen """ - log.debug(u'Start setup for monitor %s (live = %s)' % + log.debug(u'Start setup for monitor %s (live = %s)' % (self.screens.monitor_number, self.isLive)) self.usePhonon = QtCore.QSettings().value( u'media/use phonon', QtCore.QVariant(True)).toBool() @@ -110,6 +111,12 @@ class MainDisplay(DisplayWidget): QtCore.QObject.connect(self.mediaObject, QtCore.SIGNAL(u'stateChanged(Phonon::State, Phonon::State)'), self.videoStart) + QtCore.QObject.connect(self.mediaObject, + QtCore.SIGNAL(u'finished()'), + self.videoFinished) + QtCore.QObject.connect(self.mediaObject, + QtCore.SIGNAL(u'tick(qint64)'), + self.videoTick) log.debug(u'Setup webView for monitor %s' % self.screens.monitor_number) self.webView = QtWebKit.QWebView(self) self.webView.setGeometry(0, 0, @@ -262,6 +269,7 @@ class MainDisplay(DisplayWidget): self.displayImage(self.serviceItem.bg_image_bytes) else: self.displayImage(None) + # clear the cache self.override = {} # Update the preview frame. if self.isLive: @@ -349,6 +357,9 @@ class MainDisplay(DisplayWidget): self.mediaObject.stop() self.mediaObject.clearQueue() self.mediaObject.setCurrentSource(Phonon.MediaSource(videoPath)) + # Need the timer to trigger + if self.serviceItem.start_time != 0: + self.mediaObject.setTickInterval(200) self.mediaObject.play() self.webView.setVisible(False) self.videoWidget.setVisible(True) @@ -365,6 +376,23 @@ class MainDisplay(DisplayWidget): if newState == Phonon.PlayingState: self.mediaObject.seek(self.serviceItem.start_time * 1000) + def videoFinished(self): + """ + Blank the Video when it has finished so the final frame is not left + hanging + """ + self.videoStop() + self.hideDisplay(HideMode.Blank) + self.phononActive = False + self.videoHide = True + + def videoTick(self, tick): + """ + Triggered on video tick every 200 milli seconds + Will be used to manage Stop time later + """ + pass + def isWebLoaded(self): """ Called by webView event to show display is fully loaded @@ -422,10 +450,12 @@ class MainDisplay(DisplayWidget): if u'video' in self.override: Receiver.send_message(u'video_background_replaced') self.override = {} + # We have a different theme. elif self.override[u'theme'] != serviceItem.themedata.theme_name: Receiver.send_message(u'live_theme_changed') self.override = {} else: + # replace the background background = self.imageManager. \ get_image_bytes(self.override[u'image']) if self.serviceItem.themedata.background_filename: @@ -441,6 +471,10 @@ class MainDisplay(DisplayWidget): # if was hidden keep it hidden if self.hideMode and self.isLive: self.hideDisplay(self.hideMode) + # display hidden for video end we have a new item so must be shown + if self.videoHide and self.isLive: + self.videoHide = False + self.showDisplay() self.__hideMouse() def footer(self, text): From 63d60ce231b2313555f8a1c10f5bde078729b475 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Mon, 14 Mar 2011 10:10:10 +0000 Subject: [PATCH 122/124] Update comments --- openlp/core/ui/maindisplay.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index d830fe222..77538a8b0 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -357,7 +357,8 @@ class MainDisplay(DisplayWidget): self.mediaObject.stop() self.mediaObject.clearQueue() self.mediaObject.setCurrentSource(Phonon.MediaSource(videoPath)) - # Need the timer to trigger + # Need the timer to trigger set the trigger to 200ms + # Value taken from web documentation. if self.serviceItem.start_time != 0: self.mediaObject.setTickInterval(200) self.mediaObject.play() @@ -374,6 +375,7 @@ class MainDisplay(DisplayWidget): Start the video at a predetermined point. """ if newState == Phonon.PlayingState: + # set start time in milliseconds self.mediaObject.seek(self.serviceItem.start_time * 1000) def videoFinished(self): @@ -389,7 +391,7 @@ class MainDisplay(DisplayWidget): def videoTick(self, tick): """ Triggered on video tick every 200 milli seconds - Will be used to manage Stop time later + Will be used to manage stop time later """ pass From 82239abb92d93880f97ce12fa6cc792e1f6e3087 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 14 Mar 2011 20:34:48 +0200 Subject: [PATCH 123/124] Used a temporary string due to string freeze, and included the song reindex as per Andreas' request. --- openlp/plugins/songs/songsplugin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index cb49f9149..c569284d8 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -260,7 +260,7 @@ class SongsPlugin(Plugin): song_dbs.append(os.path.join(db_dir, sfile)) progress = QtGui.QProgressDialog(self.formparent) progress.setWindowModality(QtCore.Qt.WindowModal) - progress.setLabelText(translate('SongsPlugin', 'Importing songs...')) + progress.setLabelText(translate('OpenLP.Ui', 'Starting import...')) progress.setCancelButton(None) progress.setRange(0, len(song_dbs)) progress.setMinimumDuration(0) @@ -273,6 +273,7 @@ class SongsPlugin(Plugin): progress.setValue(len(song_dbs)) self.mediaItem.displayResultsSong( self.manager.get_all_objects(Song, order_by_ref=Song.search_title)) + self.onToolsReindexItemTriggered() def finalise(self): """ From e0ea2c57a3915b2ea747f9633d95894d1293faac Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 14 Mar 2011 20:40:27 +0200 Subject: [PATCH 124/124] Fixed up a bug where the song import progress dialog would show up and not disappear if a user did not select any song databases to import. --- openlp/plugins/songs/songsplugin.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index c569284d8..bd953ffac 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -258,6 +258,8 @@ class SongsPlugin(Plugin): for sfile in os.listdir(db_dir): if sfile.startswith(u'songs_') and sfile.endswith(u'.sqlite'): song_dbs.append(os.path.join(db_dir, sfile)) + if len(song_dbs) == 0: + return progress = QtGui.QProgressDialog(self.formparent) progress.setWindowModality(QtCore.Qt.WindowModal) progress.setLabelText(translate('OpenLP.Ui', 'Starting import...'))