diff --git a/openlp.pyw b/openlp.pyw index 962109592..64ffb3321 100755 --- a/openlp.pyw +++ b/openlp.pyw @@ -25,254 +25,15 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### -import os -import sys -import logging + # Import uuid now, to avoid the rare bug described in the support system: # http://support.openlp.org/issues/102 # If https://bugs.gentoo.org/show_bug.cgi?id=317557 is fixed, the import can be # removed. import uuid -from optparse import OptionParser -from traceback import format_exception -from PyQt4 import QtCore, QtGui +from openlp.core import main -from openlp.core.lib import Receiver, check_directory_exists -from openlp.core.lib.ui import UiStrings -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 -from openlp.core.utils import AppLocation, LanguageManager, VersionThread, \ - get_application_version, DelayStartThread - -log = logging.getLogger() - -application_stylesheet = u""" -QMainWindow::separator -{ - border: none; -} - -QDockWidget::title -{ - border: 1px solid palette(dark); - padding-left: 5px; - padding-top: 2px; - margin: 1px 0; -} - -QToolBar -{ - border: none; - margin: 0; - padding: 0; -} -""" - -class OpenLP(QtGui.QApplication): - """ - The core application class. This class inherits from Qt's QApplication - class in order to provide the core of the application. - """ - - args = [] - - def exec_(self): - """ - Override exec method to allow the shared memory to be released on exit - """ - QtGui.QApplication.exec_() - self.sharedMemory.detach() - - def run(self, args): - """ - Run the OpenLP application. - """ - # On Windows, the args passed into the constructor are - # ignored. Not very handy, so set the ones we want to use. - self.args.extend(args) - # provide a listener for widgets to reqest a screen update. - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'openlp_process_events'), self.processEvents) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) - QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) - # Decide how many screens we have and their size - screens = ScreenList(self.desktop()) - # First time checks in settings - has_run_wizard = QtCore.QSettings().value( - u'general/has run wizard', QtCore.QVariant(False)).toBool() - if not has_run_wizard: - if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted: - QtCore.QSettings().setValue(u'general/has run wizard', - QtCore.QVariant(True)) - if os.name == u'nt': - self.setStyleSheet(application_stylesheet) - show_splash = QtCore.QSettings().value( - u'general/show splash', QtCore.QVariant(True)).toBool() - if show_splash: - self.splash = SplashScreen() - self.splash.show() - # make sure Qt really display the splash screen - self.processEvents() - # start the main app window - self.mainWindow = MainWindow(self.clipboard(), self.args) - self.mainWindow.show() - if show_splash: - # now kill the splashscreen - self.splash.finish(self.mainWindow) - log.debug(u'Splashscreen closed') - # make sure Qt really display the splash screen - self.processEvents() - 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: - VersionThread(self.mainWindow).start() - Receiver.send_message(u'maindisplay_blank_check') - self.mainWindow.appStartup() - DelayStartThread(self.mainWindow).start() - return self.exec_() - - def isAlreadyRunning(self): - """ - Look to see if OpenLP is already running and ask if a 2nd copy - is to be started. - """ - self.sharedMemory = QtCore.QSharedMemory('OpenLP') - if self.sharedMemory.attach(): - status = QtGui.QMessageBox.critical(None, - UiStrings().Error, UiStrings().OpenLPStart, - QtGui.QMessageBox.StandardButtons( - QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) - if status == QtGui.QMessageBox.No: - return True - return False - else: - self.sharedMemory.create(1) - return False - - def hookException(self, exctype, value, traceback): - if not hasattr(self, u'mainWindow'): - log.exception(''.join(format_exception(exctype, value, traceback))) - return - if not hasattr(self, u'exceptionForm'): - self.exceptionForm = ExceptionForm(self.mainWindow) - self.exceptionForm.exceptionTextEdit.setPlainText( - ''.join(format_exception(exctype, value, traceback))) - self.setNormalCursor() - self.exceptionForm.exec_() - - def setBusyCursor(self): - """ - Sets the Busy Cursor for the Application - """ - self.setOverrideCursor(QtCore.Qt.BusyCursor) - self.processEvents() - - def setNormalCursor(self): - """ - Sets the Normal Cursor for the Application - """ - self.restoreOverrideCursor() - - def event(self, event): - """ - Enables direct file opening on OS X - """ - if event.type() == QtCore.QEvent.FileOpen: - file_name = event.file() - log.debug(u'Got open file event for %s!', file_name) - self.args.insert(0, unicode(file_name)) - return True - else: - return QtGui.QApplication.event(self, event) - -def main(): - """ - The main function which parses command line options and then runs - the PyQt4 Application. - """ - # Set up command line options. - usage = 'Usage: %prog [options] [qt-options]' - parser = OptionParser(usage=usage) - parser.add_option('-e', '--no-error-form', dest='no_error_form', - action='store_true', help='Disable the error notification form.') - parser.add_option('-l', '--log-level', dest='loglevel', - default='warning', metavar='LEVEL', help='Set logging to LEVEL ' - 'level. Valid values are "debug", "info", "warning".') - parser.add_option('-p', '--portable', dest='portable', - action='store_true', help='Specify if this should be run as a ' - 'portable app, off a USB flash drive (not implemented).') - parser.add_option('-d', '--dev-version', dest='dev_version', - action='store_true', help='Ignore the version file and pull the ' - 'version directly from Bazaar') - parser.add_option('-s', '--style', dest='style', - help='Set the Qt4 style (passed directly to Qt4).') - # Set up logging - log_path = AppLocation.get_directory(AppLocation.CacheDir) - check_directory_exists(log_path) - filename = os.path.join(log_path, u'openlp.log') - logfile = logging.FileHandler(filename, u'w') - logfile.setFormatter(logging.Formatter( - u'%(asctime)s %(name)-55s %(levelname)-8s %(message)s')) - log.addHandler(logfile) - logging.addLevelName(15, u'Timer') - # Parse command line options and deal with them. - (options, args) = parser.parse_args() - qt_args = [] - if options.loglevel.lower() in ['d', 'debug']: - log.setLevel(logging.DEBUG) - print 'Logging to:', filename - elif options.loglevel.lower() in ['w', 'warning']: - log.setLevel(logging.WARNING) - else: - log.setLevel(logging.INFO) - if options.style: - qt_args.extend(['-style', options.style]) - # Throw the rest of the arguments at Qt, just in case. - qt_args.extend(args) - # Initialise the resources - qInitResources() - # Now create and actually run the application. - app = OpenLP(qt_args) - # Instance check - if app.isAlreadyRunning(): - sys.exit() - app.setOrganizationName(u'OpenLP') - app.setOrganizationDomain(u'openlp.org') - app.setApplicationName(u'OpenLP') - app.setApplicationVersion(get_application_version()[u'version']) - # First time checks in settings - if not QtCore.QSettings().value(u'general/has run wizard', - QtCore.QVariant(False)).toBool(): - if not FirstTimeLanguageForm().exec_(): - # if cancel then stop processing - sys.exit() - if sys.platform == u'darwin': - OpenLP.addLibraryPath(QtGui.QApplication.applicationDirPath() - + "/qt4_plugins") - # i18n Set Language - language = LanguageManager.get_language() - app_translator, default_translator = \ - LanguageManager.get_translator(language) - if not app_translator.isEmpty(): - app.installTranslator(app_translator) - if not default_translator.isEmpty(): - app.installTranslator(default_translator) - else: - log.debug(u'Could not find default_translator.') - if not options.no_error_form: - sys.excepthook = app.hookException - sys.exit(app.run(qt_args)) if __name__ == u'__main__': """ diff --git a/openlp/__init__.py b/openlp/__init__.py index 9038b48cc..5f7608770 100644 --- a/openlp/__init__.py +++ b/openlp/__init__.py @@ -27,3 +27,9 @@ """ The :mod:`openlp` module contains all the project produced OpenLP functionality """ + +import core +import plugins + +__all__ = [u'core', u'plugins'] + diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index e19b9a257..3c8bdfe71 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -24,9 +24,268 @@ # with this program; if not, write to the Free Software Foundation, Inc., 59 # # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### + """ The :mod:`core` module provides all core application functions All the core functions of the OpenLP application including the GUI, settings, logging and a plugin framework are contained within the openlp.core module. """ + +import os +import sys +import logging +from optparse import OptionParser +from traceback import format_exception + +from PyQt4 import QtCore, QtGui + +from openlp.core.lib import Receiver, check_directory_exists +from openlp.core.lib.ui import UiStrings +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 +from openlp.core.utils import AppLocation, LanguageManager, VersionThread, \ + get_application_version, DelayStartThread + + +__all__ = [u'OpenLP', u'main'] + + +log = logging.getLogger() +application_stylesheet = u""" +QMainWindow::separator +{ + border: none; +} + +QDockWidget::title +{ + border: 1px solid palette(dark); + padding-left: 5px; + padding-top: 2px; + margin: 1px 0; +} + +QToolBar +{ + border: none; + margin: 0; + padding: 0; +} +""" + + +class OpenLP(QtGui.QApplication): + """ + The core application class. This class inherits from Qt's QApplication + class in order to provide the core of the application. + """ + + args = [] + + def exec_(self): + """ + Override exec method to allow the shared memory to be released on exit + """ + QtGui.QApplication.exec_() + self.sharedMemory.detach() + + def run(self, args, testing=False): + """ + Run the OpenLP application. + """ + # On Windows, the args passed into the constructor are + # ignored. Not very handy, so set the ones we want to use. + self.args.extend(args) + # provide a listener for widgets to reqest a screen update. + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'openlp_process_events'), self.processEvents) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'cursor_busy'), self.setBusyCursor) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'cursor_normal'), self.setNormalCursor) + # Decide how many screens we have and their size + screens = ScreenList(self.desktop()) + # First time checks in settings + has_run_wizard = QtCore.QSettings().value( + u'general/has run wizard', QtCore.QVariant(False)).toBool() + if not has_run_wizard: + if FirstTimeForm(screens).exec_() == QtGui.QDialog.Accepted: + QtCore.QSettings().setValue(u'general/has run wizard', + QtCore.QVariant(True)) + if os.name == u'nt': + self.setStyleSheet(application_stylesheet) + show_splash = QtCore.QSettings().value( + u'general/show splash', QtCore.QVariant(True)).toBool() + if show_splash: + self.splash = SplashScreen() + self.splash.show() + # make sure Qt really display the splash screen + self.processEvents() + # start the main app window + self.mainWindow = MainWindow(self.clipboard(), self.args) + self.mainWindow.show() + if show_splash: + # now kill the splashscreen + self.splash.finish(self.mainWindow) + log.debug(u'Splashscreen closed') + # make sure Qt really display the splash screen + self.processEvents() + 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: + VersionThread(self.mainWindow).start() + Receiver.send_message(u'maindisplay_blank_check') + self.mainWindow.appStartup() + DelayStartThread(self.mainWindow).start() + # Skip exec_() for gui tests + if not testing: + return self.exec_() + + def isAlreadyRunning(self): + """ + Look to see if OpenLP is already running and ask if a 2nd copy + is to be started. + """ + self.sharedMemory = QtCore.QSharedMemory('OpenLP') + if self.sharedMemory.attach(): + status = QtGui.QMessageBox.critical(None, + UiStrings().Error, UiStrings().OpenLPStart, + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) + if status == QtGui.QMessageBox.No: + return True + return False + else: + self.sharedMemory.create(1) + return False + + def hookException(self, exctype, value, traceback): + if not hasattr(self, u'mainWindow'): + log.exception(''.join(format_exception(exctype, value, traceback))) + return + if not hasattr(self, u'exceptionForm'): + self.exceptionForm = ExceptionForm(self.mainWindow) + self.exceptionForm.exceptionTextEdit.setPlainText( + ''.join(format_exception(exctype, value, traceback))) + self.setNormalCursor() + self.exceptionForm.exec_() + + def setBusyCursor(self): + """ + Sets the Busy Cursor for the Application + """ + self.setOverrideCursor(QtCore.Qt.BusyCursor) + self.processEvents() + + def setNormalCursor(self): + """ + Sets the Normal Cursor for the Application + """ + self.restoreOverrideCursor() + + def event(self, event): + """ + Enables direct file opening on OS X + """ + if event.type() == QtCore.QEvent.FileOpen: + file_name = event.file() + log.debug(u'Got open file event for %s!', file_name) + self.args.insert(0, unicode(file_name)) + return True + else: + return QtGui.QApplication.event(self, event) + + +def main(args=None): + """ + The main function which parses command line options and then runs + the PyQt4 Application. + """ + # Set up command line options. + usage = 'Usage: %prog [options] [qt-options]' + parser = OptionParser(usage=usage) + parser.add_option('-e', '--no-error-form', dest='no_error_form', + action='store_true', help='Disable the error notification form.') + parser.add_option('-l', '--log-level', dest='loglevel', + default='warning', metavar='LEVEL', help='Set logging to LEVEL ' + 'level. Valid values are "debug", "info", "warning".') + parser.add_option('-p', '--portable', dest='portable', + action='store_true', help='Specify if this should be run as a ' + 'portable app, off a USB flash drive (not implemented).') + parser.add_option('-d', '--dev-version', dest='dev_version', + action='store_true', help='Ignore the version file and pull the ' + 'version directly from Bazaar') + parser.add_option('-s', '--style', dest='style', + help='Set the Qt4 style (passed directly to Qt4).') + parser.add_option('--testing', dest='testing', + action='store_true', help='Run by testing framework') + # Set up logging + log_path = AppLocation.get_directory(AppLocation.CacheDir) + check_directory_exists(log_path) + filename = os.path.join(log_path, u'openlp.log') + logfile = logging.FileHandler(filename, u'w') + logfile.setFormatter(logging.Formatter( + u'%(asctime)s %(name)-55s %(levelname)-8s %(message)s')) + log.addHandler(logfile) + # Parse command line options and deal with them. + # Use args supplied programatically if possible. + (options, args) = parser.parse_args(args) if args else parser.parse_args() + qt_args = [] + if options.loglevel.lower() in ['d', 'debug']: + log.setLevel(logging.DEBUG) + print 'Logging to:', filename + elif options.loglevel.lower() in ['w', 'warning']: + log.setLevel(logging.WARNING) + else: + log.setLevel(logging.INFO) + if options.style: + qt_args.extend(['-style', options.style]) + # Throw the rest of the arguments at Qt, just in case. + qt_args.extend(args) + # Initialise the resources + qInitResources() + # Now create and actually run the application. + app = OpenLP(qt_args) + app.setOrganizationName(u'OpenLP') + app.setOrganizationDomain(u'openlp.org') + app.setApplicationName(u'OpenLP') + app.setApplicationVersion(get_application_version()[u'version']) + # Instance check + if not options.testing: + # Instance check + if app.isAlreadyRunning(): + sys.exit() + # First time checks in settings + if not QtCore.QSettings().value(u'general/has run wizard', + QtCore.QVariant(False)).toBool(): + if not FirstTimeLanguageForm().exec_(): + # if cancel then stop processing + sys.exit() + # i18n Set Language + language = LanguageManager.get_language() + app_translator, default_translator = \ + LanguageManager.get_translator(language) + if not app_translator.isEmpty(): + app.installTranslator(app_translator) + if not default_translator.isEmpty(): + app.installTranslator(default_translator) + else: + log.debug(u'Could not find default_translator.') + if not options.no_error_form: + sys.excepthook = app.hookException + # Do not run method app.exec_() when running gui tests + if options.testing: + app.run(qt_args, testing=True) + # For gui tests we need access to window intances and their components + return app + else: + sys.exit(app.run(qt_args)) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index f83e92de7..2c0b53a95 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -36,6 +36,13 @@ from PyQt4 import QtCore, QtGui log = logging.getLogger(__name__) +class MediaType(object): + """ + An enumeration class for types of media. + """ + Audio = 1 + Video = 2 + def translate(context, text, comment=None, encoding=QtCore.QCoreApplication.CodecForTr, n=-1, translate=QtCore.QCoreApplication.translate): @@ -137,7 +144,7 @@ def image_to_byte(image): # convert to base64 encoding so does not get missed! return byte_array.toBase64() -def resize_image(image_path, width, height, background=QtCore.Qt.black): +def resize_image(image_path, width, height, background): """ Resize an image to fit on the current screen. @@ -241,9 +248,7 @@ from settingsmanager import SettingsManager from plugin import PluginStatus, StringContent, Plugin from pluginmanager import PluginManager from settingstab import SettingsTab -from serviceitem import ServiceItem -from serviceitem import ServiceItemType -from serviceitem import ItemCapabilities +from serviceitem import ServiceItem, ServiceItemType, ItemCapabilities from htmlbuilder import build_html, build_lyrics_format_css, \ build_lyrics_outline_css from toolbar import OpenLPToolbar diff --git a/openlp/core/lib/db.py b/openlp/core/lib/db.py index 41b445cd5..1b8d086df 100644 --- a/openlp/core/lib/db.py +++ b/openlp/core/lib/db.py @@ -31,11 +31,13 @@ import logging import os from PyQt4 import QtCore -from sqlalchemy import create_engine, MetaData -from sqlalchemy.exc import InvalidRequestError -from sqlalchemy.orm import scoped_session, sessionmaker +from sqlalchemy import Table, MetaData, Column, types, create_engine +from sqlalchemy.exc import SQLAlchemyError, InvalidRequestError, DBAPIError +from sqlalchemy.orm import scoped_session, sessionmaker, mapper from sqlalchemy.pool import NullPool +from openlp.core.lib import translate +from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import AppLocation, delete_file log = logging.getLogger(__name__) @@ -59,6 +61,64 @@ def init_db(url, auto_flush=True, auto_commit=False): autocommit=auto_commit, bind=engine)) return session, metadata + +def upgrade_db(url, upgrade): + """ + Upgrade a database. + + ``url`` + The url of the database to upgrade. + + ``upgrade`` + The python module that contains the upgrade instructions. + """ + session, metadata = init_db(url) + + class Metadata(BaseModel): + """ + Provides a class for the metadata table. + """ + pass + load_changes = True + try: + tables = upgrade.upgrade_setup(metadata) + except (SQLAlchemyError, DBAPIError): + load_changes = False + metadata_table = Table(u'metadata', metadata, + Column(u'key', types.Unicode(64), primary_key=True), + Column(u'value', types.UnicodeText(), default=None) + ) + metadata_table.create(checkfirst=True) + mapper(Metadata, metadata_table) + version_meta = session.query(Metadata).get(u'version') + if version_meta is None: + version_meta = Metadata.populate(key=u'version', value=u'0') + version = 0 + else: + version = int(version_meta.value) + if version > upgrade.__version__: + return version, upgrade.__version__ + version += 1 + if load_changes: + while hasattr(upgrade, u'upgrade_%d' % version): + log.debug(u'Running upgrade_%d', version) + try: + getattr(upgrade, u'upgrade_%d' % version) \ + (session, metadata, tables) + version_meta.value = unicode(version) + except (SQLAlchemyError, DBAPIError): + log.exception(u'Could not run database upgrade script ' + '"upgrade_%s", upgrade process has been halted.', version) + break + version += 1 + else: + version_meta = Metadata.populate(key=u'version', + value=int(upgrade.__version__)) + session.add(version_meta) + session.commit() + return int(version_meta.value), upgrade.__version__ + + def delete_database(plugin_name, db_file_name=None): """ Remove a database file from the system. @@ -79,6 +139,7 @@ def delete_database(plugin_name, db_file_name=None): AppLocation.get_section_data_path(plugin_name), plugin_name) return delete_file(db_file_path) + class BaseModel(object): """ BaseModel provides a base object with a set of generic functions @@ -93,12 +154,12 @@ class BaseModel(object): instance.__setattr__(key, value) return instance - class Manager(object): """ Provide generic object persistence management """ - def __init__(self, plugin_name, init_schema, db_file_name=None): + def __init__(self, plugin_name, init_schema, db_file_name=None, + upgrade_mod=None): """ Runs the initialisation process that includes creating the connection to the database and the tables if they don't exist. @@ -109,6 +170,9 @@ class Manager(object): ``init_schema`` The init_schema function for this database + ``upgrade_schema`` + The upgrade_schema function for this database + ``db_file_name`` The file name to use for this database. Defaults to None resulting in the plugin_name being used. @@ -134,7 +198,28 @@ class Manager(object): unicode(settings.value(u'db hostname').toString()), unicode(settings.value(u'db database').toString())) settings.endGroup() - self.session = init_schema(self.db_url) + if upgrade_mod: + db_ver, up_ver = upgrade_db(self.db_url, upgrade_mod) + if db_ver > up_ver: + critical_error_message_box( + translate('OpenLP.Manager', 'Database Error'), + unicode(translate('OpenLP.Manager', 'The database being ' + 'loaded was created in a more recent version of ' + 'OpenLP. The database is version %d, while OpenLP ' + 'expects version %d. The database will not be loaded.' + '\n\nDatabase: %s')) % \ + (db_ver, up_ver, self.db_url) + ) + return + try: + self.session = init_schema(self.db_url) + except (SQLAlchemyError, DBAPIError): + log.exception(u'Error loading database: %s', self.db_url) + critical_error_message_box( + translate('OpenLP.Manager', 'Database Error'), + unicode(translate('OpenLP.Manager', 'OpenLP cannot load your ' + 'database.\n\nDatabase: %s')) % self.db_url + ) def save_object(self, object_instance, commit=True): """ diff --git a/openlp/core/lib/imagemanager.py b/openlp/core/lib/imagemanager.py index 37d1de79c..4d6c90078 100644 --- a/openlp/core/lib/imagemanager.py +++ b/openlp/core/lib/imagemanager.py @@ -36,7 +36,7 @@ import Queue from PyQt4 import QtCore -from openlp.core.lib import resize_image, image_to_byte +from openlp.core.lib import resize_image, image_to_byte, Receiver from openlp.core.ui import ScreenList log = logging.getLogger(__name__) @@ -100,12 +100,14 @@ class Image(object): variables ``image`` and ``image_bytes`` to ``None`` and add the image object to the queue of images to process. """ - def __init__(self, name='', path=''): + def __init__(self, name, path, source, background): self.name = name self.path = path self.image = None self.image_bytes = None self.priority = Priority.Normal + self.source = source + self.background = background class PriorityQueue(Queue.PriorityQueue): @@ -151,6 +153,8 @@ class ImageManager(QtCore.QObject): self._cache = {} self._imageThread = ImageThread(self) self._conversion_queue = PriorityQueue() + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'config_updated'), self.process_updates) def update_display(self): """ @@ -162,12 +166,42 @@ class ImageManager(QtCore.QObject): self.height = current_screen[u'size'].height() # Mark the images as dirty for a rebuild by setting the image and byte # stream to None. - self._conversion_queue = PriorityQueue() for key, image in self._cache.iteritems(): - image.priority = Priority.Normal - image.image = None - image.image_bytes = None - self._conversion_queue.put((image.priority, image)) + self._reset_image(image) + + def update_images(self, image_type, background): + """ + Border has changed so update all the images affected. + """ + log.debug(u'update_images') + # Mark the images as dirty for a rebuild by setting the image and byte + # stream to None. + for key, image in self._cache.iteritems(): + if image.source == image_type: + image.background = background + self._reset_image(image) + + def update_image(self, name, image_type, background): + """ + Border has changed so update the image affected. + """ + log.debug(u'update_images') + # Mark the images as dirty for a rebuild by setting the image and byte + # stream to None. + for key, image in self._cache.iteritems(): + if image.source == image_type and image.name == name: + image.background = background + self._reset_image(image) + + def _reset_image(self, image): + image.image = None + image.image_bytes = None + self._conversion_queue.modify_priority(image, Priority.Normal) + + def process_updates(self): + """ + Flush the queue to updated any data to update + """ # We want only one thread. if not self._imageThread.isRunning(): self._imageThread.start() @@ -215,13 +249,13 @@ class ImageManager(QtCore.QObject): self._conversion_queue.remove(self._cache[name]) del self._cache[name] - def add_image(self, name, path): + def add_image(self, name, path, source, background): """ Add image to cache if it is not already there. """ log.debug(u'add_image %s:%s' % (name, path)) if not name in self._cache: - image = Image(name, path) + image = Image(name, path, source, background) self._cache[name] = image self._conversion_queue.put((image.priority, image)) else: @@ -247,7 +281,8 @@ class ImageManager(QtCore.QObject): image = self._conversion_queue.get()[1] # Generate the QImage for the image. if image.image is None: - image.image = resize_image(image.path, self.width, self.height) + image.image = resize_image(image.path, self.width, self.height, + image.background) # Set the priority to Lowest and stop here as we need to process # more important images first. if image.priority == Priority.Normal: diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index a721fabf6..5366f3f68 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -111,7 +111,7 @@ class MediaManagerItem(QtGui.QWidget): self.requiredIcons() self.setupUi() self.retranslateUi() - self.auto_select_id = -1 + self.autoSelectId = -1 QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'%s_service_load' % self.plugin.name), self.serviceLoad) @@ -376,18 +376,23 @@ class MediaManagerItem(QtGui.QWidget): The files to be loaded """ names = [] + fullList = [] for count in range(0, self.listView.count()): - names.append(self.listView.item(count).text()) - newFiles = [] + names.append(unicode(self.listView.item(count).text())) + fullList.append(unicode(self.listView.item(count). + data(QtCore.Qt.UserRole).toString())) duplicatesFound = False + filesAdded = False for file in files: filename = os.path.split(unicode(file))[1] if filename in names: duplicatesFound = True else: - newFiles.append(file) - if newFiles: - self.loadList(newFiles) + filesAdded = True + fullList.append(file) + if fullList and filesAdded: + self.listView.clear() + self.loadList(fullList) lastDir = os.path.split(unicode(files[0]))[0] SettingsManager.set_last_dir(self.settingsSection, lastDir) SettingsManager.set_list(self.settingsSection, @@ -396,7 +401,7 @@ class MediaManagerItem(QtGui.QWidget): critical_error_message_box( UiStrings().Duplicate, unicode(translate('OpenLP.MediaManagerItem', - 'Duplicate files found on import and ignored.'))) + 'Duplicate files were found on import and were ignored.'))) def contextMenu(self, point): item = self.listView.itemAt(point) @@ -485,7 +490,8 @@ class MediaManagerItem(QtGui.QWidget): """ pass - def generateSlideData(self, serviceItem, item=None, xmlVersion=False): + def generateSlideData(self, serviceItem, item=None, xmlVersion=False, + remote=False): raise NotImplementedError(u'MediaManagerItem.generateSlideData needs ' u'to be defined by the plugin') @@ -506,7 +512,7 @@ class MediaManagerItem(QtGui.QWidget): if QtCore.QSettings().value(u'advanced/single click preview', QtCore.QVariant(False)).toBool() and self.quickPreviewAllowed \ and self.listView.selectedIndexes() \ - and self.auto_select_id == -1: + and self.autoSelectId == -1: self.onPreviewClick(True) def onPreviewClick(self, keepFocus=False): @@ -539,12 +545,12 @@ class MediaManagerItem(QtGui.QWidget): else: self.goLive() - def goLive(self, item_id=None): + def goLive(self, item_id=None, remote=False): log.debug(u'%s Live requested', self.plugin.name) item = None if item_id: item = self.createItemFromId(item_id) - serviceItem = self.buildServiceItem(item) + serviceItem = self.buildServiceItem(item, remote=remote) if serviceItem: if not item_id: serviceItem.from_plugin = True @@ -574,8 +580,8 @@ class MediaManagerItem(QtGui.QWidget): for item in items: self.addToService(item) - def addToService(self, item=None, replace=None): - serviceItem = self.buildServiceItem(item, True) + def addToService(self, item=None, replace=None, remote=False): + serviceItem = self.buildServiceItem(item, True, remote=remote) if serviceItem: serviceItem.from_plugin = False self.plugin.serviceManager.addServiceItem(serviceItem, @@ -608,13 +614,13 @@ class MediaManagerItem(QtGui.QWidget): unicode(translate('OpenLP.MediaManagerItem', 'You must select a %s service item.')) % self.title) - def buildServiceItem(self, item=None, xmlVersion=False): + def buildServiceItem(self, item=None, xmlVersion=False, remote=False): """ Common method for generating a service item """ serviceItem = ServiceItem(self.plugin) serviceItem.add_icon(self.plugin.icon_path) - if self.generateSlideData(serviceItem, item, xmlVersion): + if self.generateSlideData(serviceItem, item, xmlVersion, remote): return serviceItem else: return None @@ -626,7 +632,7 @@ class MediaManagerItem(QtGui.QWidget): """ pass - def check_search_result(self): + def checkSearchResult(self): """ Checks if the listView is empty and adds a "No Search Results" item. """ @@ -662,15 +668,15 @@ class MediaManagerItem(QtGui.QWidget): item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] return item_id - def save_auto_select_id(self): + def saveAutoSelectId(self): """ Sorts out, what item to select after loading a list. """ # The item to select has not been set. - if self.auto_select_id == -1: + if self.autoSelectId == -1: item = self.listView.currentItem() if item: - self.auto_select_id = item.data(QtCore.Qt.UserRole).toInt()[0] + self.autoSelectId = item.data(QtCore.Qt.UserRole).toInt()[0] def search(self, string): """ diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index 5b9f2185e..db7d4845b 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -368,3 +368,4 @@ class Plugin(QtCore.QObject): after this has been set. """ self.textStrings[name] = {u'title': title, u'tooltip': tooltip} + diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index ac7e95c4c..8353ddc19 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -27,7 +27,7 @@ import logging -from PyQt4 import QtCore, QtWebKit +from PyQt4 import QtGui, QtCore, QtWebKit from openlp.core.lib import ServiceItem, expand_tags, \ build_lyrics_format_css, build_lyrics_outline_css, Receiver, \ @@ -166,7 +166,8 @@ class Renderer(object): # if No file do not update cache if self.theme_data.background_filename: self.imageManager.add_image(self.theme_data.theme_name, - self.theme_data.background_filename) + self.theme_data.background_filename, u'theme', + QtGui.QColor(self.theme_data.background_border_color)) return self._rect, self._rect_footer def generate_preview(self, theme_data, force_page=False): @@ -221,21 +222,56 @@ class Renderer(object): if item.is_capable(ItemCapabilities.NoLineBreaks): line_end = u' ' # Bibles - if item.is_capable(ItemCapabilities.AllowsWordSplit): + if item.is_capable(ItemCapabilities.CanWordSplit): pages = self._paginate_slide_words(text.split(u'\n'), line_end) else: # Clean up line endings. lines = self._lines_split(text) pages = self._paginate_slide(lines, line_end) - if len(pages) > 1: - # Songs and Custom - if item.is_capable(ItemCapabilities.AllowsVirtualSplit): - # Do not forget the line breaks! - slides = text.split(u'[---]') - pages = [] - for slide in slides: - lines = slide.strip(u'\n').split(u'\n') + # Songs and Custom + if item.is_capable(ItemCapabilities.CanSoftBreak) and \ + len(pages) > 1 and u'[---]' in text: + pages = [] + while True: + slides = text.split(u'\n[---]\n', 2) + # If there are (at least) two occurrences of [---] we use + # the first two slides (and neglect the last for now). + if len(slides) == 3: + html_text = expand_tags(u'\n'.join(slides[:2])) + # We check both slides to determine if the virtual break is + # needed (there is only one virtual break). + else: + html_text = expand_tags(u'\n'.join(slides)) + html_text = html_text.replace(u'\n', u'
') + if self._text_fits_on_slide(html_text): + # The first two virtual slides fit (as a whole) on one + # slide. Replace the first occurrence of [---]. + text = text.replace(u'\n[---]', u'', 1) + else: + # The first virtual slide fits, which means we have to + # render the first virtual slide. + text_contains_break = u'[---]' in text + if text_contains_break: + text_to_render, text = text.split(u'\n[---]\n', 1) + else: + text_to_render = text + text = u'' + lines = text_to_render.strip(u'\n').split(u'\n') + slides = self._paginate_slide(lines, line_end) + if len(slides) > 1 and text: + # Add all slides apart from the last one the list. + pages.extend(slides[:-1]) + if text_contains_break: + text = slides[-1] + u'\n[---]\n' + text + else: + text = slides[-1] + u'\n'+ text + text = text.replace(u'
', u'\n') + else: + pages.extend(slides) + if u'[---]' not in text: + lines = text.strip(u'\n').split(u'\n') pages.extend(self._paginate_slide(lines, line_end)) + break new_pages = [] for page in pages: while page.endswith(u'
'): @@ -341,7 +377,7 @@ class Renderer(object): separator = u'
' html_lines = map(expand_tags, lines) # Text too long so go to next page. - if self._text_fits_on_slide(separator.join(html_lines)): + if not self._text_fits_on_slide(separator.join(html_lines)): html_text, previous_raw = self._binary_chop(formatted, previous_html, previous_raw, html_lines, lines, separator, u'') else: @@ -374,18 +410,18 @@ class Renderer(object): line = line.strip() html_line = expand_tags(line) # Text too long so go to next page. - if self._text_fits_on_slide(previous_html + html_line): + if not self._text_fits_on_slide(previous_html + html_line): # Check if there was a verse before the current one and append # it, when it fits on the page. if previous_html: - if not self._text_fits_on_slide(previous_html): + if self._text_fits_on_slide(previous_html): formatted.append(previous_raw) previous_html = u'' previous_raw = u'' # Now check if the current verse will fit, if it does # not we have to start to process the verse word by # word. - if not self._text_fits_on_slide(html_line): + if self._text_fits_on_slide(html_line): previous_html = html_line + line_end previous_raw = line + line_end continue @@ -442,7 +478,7 @@ class Renderer(object): highest_index = len(html_list) - 1 index = int(highest_index / 2) while True: - if self._text_fits_on_slide( + if not self._text_fits_on_slide( previous_html + separator.join(html_list[:index + 1]).strip()): # We know that it does not fit, so change/calculate the # new index and highest_index accordingly. @@ -465,8 +501,8 @@ class Renderer(object): else: continue # Check if the remaining elements fit on the slide. - if not self._text_fits_on_slide( - separator.join(html_list[index + 1:]).strip()): + if self._text_fits_on_slide( + separator.join(html_list[index + 1:]).strip()): previous_html = separator.join( html_list[index + 1:]).strip() + line_end previous_raw = separator.join( @@ -488,11 +524,11 @@ class Renderer(object): returned, otherwise ``False``. ``text`` - The text to check. It can contain HTML tags. + The text to check. It may contain HTML tags. """ self.web_frame.evaluateJavaScript(u'show_text("%s")' % text.replace(u'\\', u'\\\\').replace(u'\"', u'\\\"')) - return self.web_frame.contentsSize().height() > self.page_height + return self.web_frame.contentsSize().height() <= self.page_height def _words_split(self, line): """ diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 15c16c551..05a1128b1 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -52,20 +52,21 @@ class ItemCapabilities(object): """ Provides an enumeration of a serviceitem's capabilities """ - AllowsPreview = 1 - AllowsEdit = 2 - AllowsMaintain = 3 + CanPreview = 1 + CanEdit = 2 + CanMaintain = 3 RequiresMedia = 4 - AllowsLoop = 5 - AllowsAdditions = 6 + CanLoop = 5 + CanAppend = 6 NoLineBreaks = 7 OnLoadUpdate = 8 AddIfNewItem = 9 ProvidesOwnDisplay = 10 - AllowsDetailedTitleDisplay = 11 - AllowsVariableStartTime = 12 - AllowsVirtualSplit = 13 - AllowsWordSplit = 14 + HasDetailedTitleDisplay = 11 + HasVariableStartTime = 12 + CanSoftBreak = 13 + CanWordSplit = 14 + HasBackgroundAudio = 15 class ServiceItem(object): @@ -115,6 +116,8 @@ class ServiceItem(object): self.end_time = 0 self.media_length = 0 self.from_service = False + self.image_border = u'#000000' + self.background_audio = [] self._new_item() def _new_item(self): @@ -158,7 +161,7 @@ class ServiceItem(object): """ The render method is what generates the frames for the screen and obtains the display information from the renderemanager. - At this point all the slides are build for the given + At this point all the slides are built for the given display size. """ log.debug(u'Render called') @@ -195,7 +198,7 @@ class ServiceItem(object): self.foot_text = \ u'
'.join([footer for footer in self.raw_footer if footer]) - def add_from_image(self, path, title): + def add_from_image(self, path, title, background=None): """ Add an image slide to the service item. @@ -205,9 +208,12 @@ class ServiceItem(object): ``title`` A title for the slide in the service item. """ + if background: + self.image_border = background self.service_item_type = ServiceItemType.Image self._raw_frames.append({u'title': title, u'path': path}) - self.renderer.imageManager.add_image(title, path) + self.renderer.imageManager.add_image(title, path, u'image', + self.image_border) self._new_item() def add_from_text(self, title, raw_slide, verse_tag=None): @@ -268,7 +274,8 @@ class ServiceItem(object): u'xml_version': self.xml_version, u'start_time': self.start_time, u'end_time': self.end_time, - u'media_length': self.media_length + u'media_length': self.media_length, + u'background_audio': self.background_audio } service_data = [] if self.service_item_type == ServiceItemType.Text: @@ -316,6 +323,8 @@ class ServiceItem(object): self.end_time = header[u'end_time'] if u'media_length' in header: self.media_length = header[u'media_length'] + if u'background_audio' in header: + self.background_audio = header[u'background_audio'] if self.service_item_type == ServiceItemType.Text: for slide in serviceitem[u'serviceitem'][u'data']: self._raw_frames.append(slide) @@ -337,7 +346,7 @@ class ServiceItem(object): if self.is_text(): return self.title else: - if ItemCapabilities.AllowsDetailedTitleDisplay in self.capabilities: + if ItemCapabilities.HasDetailedTitleDisplay in self.capabilities: return self._raw_frames[0][u'title'] elif len(self._raw_frames) > 1: return self.title @@ -355,6 +364,8 @@ class ServiceItem(object): """ self._uuid = other._uuid self.notes = other.notes + if self.is_capable(ItemCapabilities.HasBackgroundAudio): + log.debug(self.background_audio) def __eq__(self, other): """ diff --git a/openlp/core/lib/theme.py b/openlp/core/lib/theme.py index c87f9aa2e..3b0a62f5b 100644 --- a/openlp/core/lib/theme.py +++ b/openlp/core/lib/theme.py @@ -44,6 +44,7 @@ BLANK_THEME_XML = \ + #000000 #000000 @@ -282,7 +283,7 @@ class ThemeXML(object): # Create direction element self.child_element(background, u'direction', unicode(direction)) - def add_background_image(self, filename): + def add_background_image(self, filename, borderColor): """ Add a image background. @@ -294,6 +295,8 @@ class ThemeXML(object): self.theme.appendChild(background) # Create Filename element self.child_element(background, u'filename', filename) + # Create endColor element + self.child_element(background, u'borderColor', unicode(borderColor)) def add_font(self, name, color, size, override, fonttype=u'main', bold=u'False', italics=u'False', line_adjustment=0, @@ -597,7 +600,7 @@ class ThemeXML(object): self.background_direction) else: filename = os.path.split(self.background_filename)[1] - self.add_background_image(filename) + self.add_background_image(filename, self.background_border_color) self.add_font(self.font_main_name, self.font_main_color, self.font_main_size, diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 3e941c051..f4a732fb6 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -116,7 +116,7 @@ class Ui_AboutDialog(object): u'Scott "sguerrieri" Guerrieri', u'Matthias "matthub" Hub', u'Meinert "m2j" Jordan', u'Armin "orangeshirt" K\xf6hler', u'Joshua "milleja46" Miller', - u'Stevan "StevanP" Pettit', u'Mattias "mahfiaz" P\xf5ldaru', + u'Stevan "ElderP" Pettit', u'Mattias "mahfiaz" P\xf5ldaru', u'Christian "crichter" Richter', u'Philip "Phill" Ridout', u'Simon "samscudder" Scudder', u'Jeffrey "whydoubt" Smith', u'Maikel Stuivenberg', u'Frode "frodus" Woldsund'] @@ -125,7 +125,7 @@ class Ui_AboutDialog(object): packagers = ['Thomas "tabthorpe" Abthorpe (FreeBSD)', u'Tim "TRB143" Bentley (Fedora)', u'Matthias "matthub" Hub (Mac OS X)', - u'Stevan "StevanP" Pettit (Windows)', + u'Stevan "ElderP" Pettit (Windows)', u'Raoul "superfly" Snyman (Ubuntu)'] translators = { u'af': [u'Johan "nuvolari" Mynhardt'], diff --git a/openlp/core/ui/firsttimeform.py b/openlp/core/ui/firsttimeform.py index 4beebfde6..bfa4bf6b1 100644 --- a/openlp/core/ui/firsttimeform.py +++ b/openlp/core/ui/firsttimeform.py @@ -28,7 +28,9 @@ import io import logging import os +import sys import urllib +import urllib2 from tempfile import gettempdir from ConfigParser import SafeConfigParser @@ -60,8 +62,13 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): files = self.webAccess.read() self.config.readfp(io.BytesIO(files)) self.updateScreenListCombo() + self.downloadCanceled = False self.downloading = unicode(translate('OpenLP.FirstTimeWizard', 'Downloading %s...')) + QtCore.QObject.connect(self.cancelButton,QtCore.SIGNAL('clicked()'), + self.onCancelButtonClicked) + QtCore.QObject.connect(self.noInternetFinishButton, + QtCore.SIGNAL('clicked()'), self.onNoInternetFinishButtonClicked) QtCore.QObject.connect(self, QtCore.SIGNAL(u'currentIdChanged(int)'), self.onCurrentIdChanged) QtCore.QObject.connect(Receiver.get_receiver(), @@ -80,6 +87,10 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ self.restart() check_directory_exists(os.path.join(gettempdir(), u'openlp')) + self.noInternetFinishButton.setVisible(False) + # Check if this is a re-run of the wizard. + self.hasRunWizard = QtCore.QSettings().value( + u'general/has run wizard', QtCore.QVariant(False)).toBool() # Sort out internet access for downloads if self.webAccess: songs = self.config.get(u'songs', u'languages') @@ -120,7 +131,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): 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), + urllib.urlretrieve(u'%s%s' % (self.web, screenshot), os.path.join(gettempdir(), u'openlp', screenshot)) item = QtGui.QListWidgetItem(title, self.themesListWidget) item.setData(QtCore.Qt.UserRole, @@ -135,6 +146,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ Determine the next page in the Wizard to go to. """ + Receiver.send_message(u'openlp_process_events') if self.currentId() == FirstTimePage.Plugins: if not self.webAccess: return FirstTimePage.NoInternet @@ -151,16 +163,24 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ Detects Page changes and updates as approprate. """ - if pageId == FirstTimePage.Defaults: + # Keep track of the page we are at. Pressing "Cancel" causes pageId + # to be a -1. + if pageId != -1: + self.lastId = pageId + if pageId == FirstTimePage.Plugins: + # Set the no internet page text. + if self.hasRunWizard: + self.noInternetLabel.setText(self.noInternetText) + else: + self.noInternetLabel.setText(self.noInternetText + + self.cancelWizardText) + elif pageId == FirstTimePage.Defaults: self.themeComboBox.clear() for iter in xrange(self.themesListWidget.count()): item = self.themesListWidget.item(iter) if item.checkState() == QtCore.Qt.Checked: self.themeComboBox.addItem(item.text()) - # Check if this is a re-run of the wizard. - self.has_run_wizard = QtCore.QSettings().value( - u'general/has run wizard', QtCore.QVariant(False)).toBool() - if self.has_run_wizard: + if self.hasRunWizard: # Add any existing themes to list. for theme in self.parent().themeManagerContents.getThemes(): index = self.themeComboBox.findText(theme) @@ -172,12 +192,21 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): # Pre-select the current default theme. index = self.themeComboBox.findText(default_theme) self.themeComboBox.setCurrentIndex(index) + elif pageId == FirstTimePage.NoInternet: + self.backButton.setVisible(False) + self.nextButton.setVisible(False) + self.noInternetFinishButton.setVisible(True) + if self.hasRunWizard: + self.cancelButton.setVisible(False) elif pageId == FirstTimePage.Progress: Receiver.send_message(u'cursor_busy') self._preWizard() + Receiver.send_message(u'openlp_process_events') self._performWizard() + Receiver.send_message(u'openlp_process_events') self._postWizard() Receiver.send_message(u'cursor_normal') + Receiver.send_message(u'openlp_process_events') def updateScreenListCombo(self): """ @@ -188,6 +217,53 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self.displayComboBox.addItems(self.screens.get_screen_list()) self.displayComboBox.setCurrentIndex(self.displayComboBox.count() - 1) + def onCancelButtonClicked(self): + """ + Process the pressing of the cancel button. + """ + if self.lastId == FirstTimePage.NoInternet or \ + (self.lastId <= FirstTimePage.Plugins and \ + not self.hasRunWizard): + QtCore.QCoreApplication.exit() + sys.exit() + self.downloadCanceled = True + Receiver.send_message(u'cursor_normal') + + def onNoInternetFinishButtonClicked(self): + """ + Process the pressing of the "Finish" button on the No Internet page. + """ + Receiver.send_message(u'cursor_busy') + self._performWizard() + Receiver.send_message(u'openlp_process_events') + Receiver.send_message(u'cursor_normal') + QtCore.QSettings().setValue(u'general/has run wizard', + QtCore.QVariant(True)) + self.close() + + def urlGetFile(self, url, fpath): + """" + Download a file given a URL. The file is retrieved in chunks, giving + the ability to cancel the download at any point. + """ + block_count = 0 + block_size = 4096 + urlfile = urllib2.urlopen(url) + filesize = urlfile.headers["Content-Length"] + filename = open(fpath, "wb") + # Download until finished or canceled. + while not self.downloadCanceled: + data = urlfile.read(block_size) + if not data: + break + filename.write(data) + block_count += 1 + self._downloadProgress(block_count, block_size, filesize) + filename.close() + # Delete file if canceled, it may be a partial file. + if self.downloadCanceled: + os.remove(fpath) + def _getFileSize(self, url): site = urllib.urlopen(url) meta = site.info() @@ -197,7 +273,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): increment = (count * block_size) - self.previous_size self._incrementProgressBar(None, increment) self.previous_size = count * block_size - + def _incrementProgressBar(self, status_text, increment=1): """ Update the wizard progress page. @@ -219,6 +295,8 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): Prepare the UI for the process. """ self.max_progress = 0 + self.finishButton.setVisible(False) + Receiver.send_message(u'openlp_process_events') # Loop through the songs list and increase for each selected item for i in xrange(self.songsListWidget.count()): item = self.songsListWidget.item(i) @@ -242,7 +320,6 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): filename = item.data(QtCore.Qt.UserRole).toString() size = self._getFileSize(u'%s%s' % (self.web, filename)) self.max_progress += size - self.finishButton.setVisible(False) if self.max_progress: # Add on 2 for plugins status setting plus a "finished" point. self.max_progress = self.max_progress + 2 @@ -266,7 +343,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): """ if self.max_progress: self.progressBar.setValue(self.progressBar.maximum()) - if self.has_run_wizard: + if self.hasRunWizard: self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', 'Download complete.' ' Click the finish button to return to OpenLP.')) @@ -275,7 +352,7 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): 'Download complete.' ' Click the finish button to start OpenLP.')) else: - if self.has_run_wizard: + if self.hasRunWizard: self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', 'Click the finish button to return to OpenLP.')) else: @@ -304,42 +381,42 @@ class FirstTimeForm(QtGui.QWizard, Ui_FirstTimeWizard): self._setPluginStatus(self.customCheckBox, u'custom/status') self._setPluginStatus(self.songUsageCheckBox, u'songusage/status') self._setPluginStatus(self.alertCheckBox, u'alerts/status') - # Build directories for downloads - 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') - # 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, 0) - self.previous_size = 0 - destination = os.path.join(songs_destination, unicode(filename)) - urllib.urlretrieve(u'%s%s' % (self.web, filename), destination, - self._downloadProgress) - # Download 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, 0) - self.previous_size = 0 - urllib.urlretrieve(u'%s%s' % (self.web, bible), - os.path.join(bibles_destination, bible), - self._downloadProgress) - bibles_iterator += 1 - # Download 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, 0) - self.previous_size = 0 - urllib.urlretrieve(u'%s%s' % (self.web, theme), - os.path.join(themes_destination, theme), - self._downloadProgress) + if self.webAccess: + # Build directories for downloads + 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') + # 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, 0) + self.previous_size = 0 + destination = os.path.join(songs_destination, + unicode(filename)) + self.urlGetFile(u'%s%s' % (self.web, filename), destination) + # Download 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, 0) + self.previous_size = 0 + self.urlGetFile(u'%s%s' % (self.web, bible), + os.path.join(bibles_destination, bible)) + bibles_iterator += 1 + # Download 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, 0) + self.previous_size = 0 + self.urlGetFile(u'%s%s' % (self.web, theme), + os.path.join(themes_destination, theme)) # Set Default Display if self.displayComboBox.currentIndex() != -1: QtCore.QSettings().setValue(u'General/monitor', diff --git a/openlp/core/ui/firsttimewizard.py b/openlp/core/ui/firsttimewizard.py index 7e94b4595..0f152a396 100644 --- a/openlp/core/ui/firsttimewizard.py +++ b/openlp/core/ui/firsttimewizard.py @@ -51,8 +51,10 @@ class Ui_FirstTimeWizard(object): FirstTimeWizard.setWizardStyle(QtGui.QWizard.ModernStyle) FirstTimeWizard.setOptions(QtGui.QWizard.IndependentPages | QtGui.QWizard.NoBackButtonOnStartPage | - QtGui.QWizard.NoBackButtonOnLastPage) + QtGui.QWizard.NoBackButtonOnLastPage | + QtGui.QWizard.HaveCustomButton1) self.finishButton = self.button(QtGui.QWizard.FinishButton) + self.noInternetFinishButton = self.button(QtGui.QWizard.CustomButton1) self.cancelButton = self.button(QtGui.QWizard.CancelButton) self.nextButton = self.button(QtGui.QWizard.NextButton) self.backButton = self.button(QtGui.QWizard.BackButton) @@ -189,9 +191,7 @@ class Ui_FirstTimeWizard(object): self.progressBar.setObjectName(u'progressBar') self.progressLayout.addWidget(self.progressBar) FirstTimeWizard.setPage(FirstTimePage.Progress, self.progressPage) - self.retranslateUi(FirstTimeWizard) - QtCore.QMetaObject.connectSlotsByName(FirstTimeWizard) def retranslateUi(self, FirstTimeWizard): FirstTimeWizard.setWindowTitle(translate( @@ -230,14 +230,17 @@ class Ui_FirstTimeWizard(object): self.noInternetPage.setSubTitle(translate( 'OpenLP.FirstTimeWizard', 'Unable to detect an Internet connection.')) - self.noInternetLabel.setText(translate('OpenLP.FirstTimeWizard', + self.noInternetText = 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.')) + 'songs, Bibles and themes. Press the Finish button now to start ' + 'OpenLP with initial settings and no sample data.\n\nTo re-run the ' + 'First Time Wizard and import this sample data at a later time, ' + 'check your Internet connection and re-run this wizard by ' + 'selecting "Tools/Re-run First Time Wizard" from OpenLP.') + self.cancelWizardText = translate('OpenLP.FirstTimeWizard', + '\n\nTo cancel the First Time Wizard completely (and not start ' + 'OpenLP), press the Cancel button now.') self.songsPage.setTitle(translate('OpenLP.FirstTimeWizard', 'Sample Songs')) self.songsPage.setSubTitle(translate('OpenLP.FirstTimeWizard', @@ -260,3 +263,5 @@ class Ui_FirstTimeWizard(object): 'Select default theme:')) self.progressLabel.setText(translate('OpenLP.FirstTimeWizard', 'Starting configuration process...')) + FirstTimeWizard.setButtonText(QtGui.QWizard.CustomButton1, + translate('OpenLP.FirstTimeWizard', 'Finish')) diff --git a/openlp/core/ui/generaltab.py b/openlp/core/ui/generaltab.py index 9a241473a..be02b3caa 100644 --- a/openlp/core/ui/generaltab.py +++ b/openlp/core/ui/generaltab.py @@ -170,6 +170,15 @@ class GeneralTab(SettingsTab): self.customHeightValueEdit.setMaximum(9999) self.displayLayout.addWidget(self.customHeightValueEdit, 4, 3) self.rightLayout.addWidget(self.displayGroupBox) + # Background audio + self.audioGroupBox = QtGui.QGroupBox(self.rightColumn) + self.audioGroupBox.setObjectName(u'audioGroupBox') + self.audioLayout = QtGui.QVBoxLayout(self.audioGroupBox) + self.audioLayout.setObjectName(u'audioLayout') + self.startPausedCheckBox = QtGui.QCheckBox(self.audioGroupBox) + self.startPausedCheckBox.setObjectName(u'startPausedCheckBox') + self.audioLayout.addWidget(self.startPausedCheckBox) + self.rightLayout.addWidget(self.audioGroupBox) self.rightLayout.addStretch() # Signals and slots QtCore.QObject.connect(self.overrideCheckBox, @@ -243,6 +252,10 @@ class GeneralTab(SettingsTab): self.customYLabel.setText(translate('OpenLP.GeneralTab', 'Y')) self.customHeightLabel.setText(translate('OpenLP.GeneralTab', 'Height')) self.customWidthLabel.setText(translate('OpenLP.GeneralTab', 'Width')) + self.audioGroupBox.setTitle( + translate('OpenLP.GeneralTab', 'Background Audio')) + self.startPausedCheckBox.setText( + translate('OpenLP.GeneralTab', 'Start background audio paused')) def load(self): """ @@ -290,6 +303,8 @@ class GeneralTab(SettingsTab): QtCore.QVariant(self.screens.current[u'size'].height())).toInt()[0]) self.customWidthValueEdit.setValue(settings.value(u'width', QtCore.QVariant(self.screens.current[u'size'].width())).toInt()[0]) + self.startPausedCheckBox.setChecked(settings.value( + u'audio start paused', QtCore.QVariant(True)).toBool()) settings.endGroup() self.customXValueEdit.setEnabled(self.overrideCheckBox.isChecked()) self.customYValueEdit.setEnabled(self.overrideCheckBox.isChecked()) @@ -341,6 +356,8 @@ class GeneralTab(SettingsTab): QtCore.QVariant(self.customWidthValueEdit.value())) settings.setValue(u'override position', QtCore.QVariant(self.overrideCheckBox.isChecked())) + settings.setValue(u'audio start paused', + QtCore.QVariant(self.startPausedCheckBox.isChecked())) settings.endGroup() # On save update the screens as well self.postSetUp(True) diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 9904868ce..297f5430b 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -62,6 +62,10 @@ class MainDisplay(QtGui.QGraphicsView): self.override = {} self.retranslateUi() self.mediaObject = None + if live: + self.audioPlayer = AudioPlayer(self) + else: + self.audioPlayer = None self.firstTime = True self.setStyleSheet(u'border: 0px; margin: 0px; padding: 0px;') self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | @@ -228,11 +232,11 @@ class MainDisplay(QtGui.QGraphicsView): shrinkItem.setVisible(False) self.setGeometry(self.screen[u'size']) - def directImage(self, name, path): + def directImage(self, name, path, background): """ API for replacement backgrounds so Images are added directly to cache """ - self.imageManager.add_image(name, path) + self.imageManager.add_image(name, path, u'image', background) if hasattr(self, u'serviceItem'): self.override[u'image'] = name self.override[u'theme'] = self.serviceItem.themedata.theme_name @@ -587,61 +591,76 @@ class AudioPlayer(QtCore.QObject): """ log.debug(u'AudioPlayer Initialisation started') QtCore.QObject.__init__(self, parent) - self.message = None + self.currentIndex = -1 + self.playlist = [] self.mediaObject = Phonon.MediaObject() self.audioObject = Phonon.AudioOutput(Phonon.VideoCategory) Phonon.createPath(self.mediaObject, self.audioObject) + QtCore.QObject.connect(self.mediaObject, + QtCore.SIGNAL(u'aboutToFinish()'), self.onAboutToFinish) - def setup(self): - """ - Sets up the Audio Player for use - """ - log.debug(u'AudioPlayer Setup') - - def close(self): + def __del__(self): """ Shutting down so clean up connections """ - self.onMediaStop() + self.stop() for path in self.mediaObject.outputPaths(): path.disconnect() + QtCore.QObject.__del__(self) - def onMediaQueue(self, message): + def onAboutToFinish(self): """ - Set up a video to play from the serviceitem. + Just before the audio player finishes the current track, queue the next + item in the playlist, if there is one. """ - log.debug(u'AudioPlayer Queue new media message %s' % message) - mfile = os.path.join(message[0].get_frame_path(), - message[0].get_frame_title()) - self.mediaObject.setCurrentSource(Phonon.MediaSource(mfile)) - self.onMediaPlay() + self.currentIndex += 1 + if len(self.playlist) > self.currentIndex: + self.mediaObject.enqueue(self.playlist[self.currentIndex]) - def onMediaPlay(self): + def connectVolumeSlider(self, slider): + slider.setAudioOutput(self.audioObject) + + def reset(self): """ - We want to play the play so start it + Reset the audio player, clearing the playlist and the queue. """ - log.debug(u'AudioPlayer _play called') + self.currentIndex = -1 + self.playlist = [] + self.stop() + self.mediaObject.clear() + + def play(self): + """ + We want to play the file so start it + """ + log.debug(u'AudioPlayer.play() called') + if self.currentIndex == -1: + self.onAboutToFinish() self.mediaObject.play() - def onMediaPause(self): + def pause(self): """ Pause the Audio """ - log.debug(u'AudioPlayer Media paused by user') + log.debug(u'AudioPlayer.pause() called') self.mediaObject.pause() - def onMediaStop(self): + def stop(self): """ Stop the Audio and clean up """ - log.debug(u'AudioPlayer Media stopped by user') - self.message = None + log.debug(u'AudioPlayer.stop() called') self.mediaObject.stop() - self.onMediaFinish() - def onMediaFinish(self): + def addToPlaylist(self, filenames): """ - Clean up the Object queue + Add another file to the playlist. + + ``filename`` + The file to add to the playlist. """ - log.debug(u'AudioPlayer Reached end of media playlist') - self.mediaObject.clearQueue() + if not isinstance(filenames, list): + filenames = [filenames] + for filename in filenames: + self.playlist.append(Phonon.MediaSource(filename)) + diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 4ecf792bc..9d58ff82a 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -30,11 +30,13 @@ import os import sys import shutil from tempfile import gettempdir +from datetime import datetime from PyQt4 import QtCore, QtGui from openlp.core.lib import Renderer, build_icon, OpenLPDockWidget, \ - PluginManager, Receiver, translate, ImageManager, PluginStatus + PluginManager, Receiver, translate, ImageManager, PluginStatus, \ + SettingsManager from openlp.core.lib.ui import UiStrings, base_action, checkable_action, \ icon_action, shortcut_action from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ @@ -214,7 +216,7 @@ class Ui_MainWindow(object): self.mediaManagerDock.isVisible(), UiStrings().View) self.viewThemeManagerItem = shortcut_action(mainWindow, u'viewThemeManagerItem', [QtGui.QKeySequence(u'F10')], - self.toggleThemeManager, u':/system/system_thememanager.png', + self.toggleThemeManager, u':/system/system_thememanager.png', self.themeManagerDock.isVisible(), UiStrings().View) self.viewServiceManagerItem = shortcut_action(mainWindow, u'viewServiceManagerItem', [QtGui.QKeySequence(u'F9')], @@ -284,6 +286,10 @@ class Ui_MainWindow(object): self.settingsConfigureItem = icon_action(mainWindow, u'settingsConfigureItem', u':/system/system_settings.png', category=UiStrings().Settings) + self.settingsImportItem = base_action(mainWindow, + u'settingsImportItem', category=UiStrings().Settings) + self.settingsExportItem = base_action(mainWindow, + u'settingsExportItem', category=UiStrings().Settings) action_list.add_category(UiStrings().Help, CategoryOrder.standardMenu) self.aboutItem = shortcut_action(mainWindow, u'aboutItem', [QtGui.QKeySequence(u'Ctrl+F1')], self.onAboutItemClicked, @@ -301,10 +307,10 @@ class Ui_MainWindow(object): u':/system/system_online_help.png', category=UiStrings().Help) self.webSiteItem = base_action( mainWindow, u'webSiteItem', category=UiStrings().Help) - add_actions(self.fileImportMenu, - (self.importThemeItem, self.importLanguageItem)) - add_actions(self.fileExportMenu, - (self.exportThemeItem, self.exportLanguageItem)) + add_actions(self.fileImportMenu, (self.settingsImportItem, None, + self.importThemeItem, self.importLanguageItem)) + add_actions(self.fileExportMenu, (self.settingsExportItem, None, + self.exportThemeItem, self.exportLanguageItem)) add_actions(self.fileMenu, (self.fileNewItem, self.fileOpenItem, self.fileSaveItem, self.fileSaveAsItem, self.recentFilesMenu.menuAction(), None, @@ -357,6 +363,7 @@ class Ui_MainWindow(object): self.importLanguageItem.setVisible(False) self.exportLanguageItem.setVisible(False) self.setLockPanel(panelLocked) + self.settingsImported = False def retranslateUi(self, mainWindow): """ @@ -420,6 +427,15 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', 'Configure &Formatting Tags...')) self.settingsConfigureItem.setText( translate('OpenLP.MainWindow', '&Configure OpenLP...')) + self.settingsExportItem.setStatusTip(translate('OpenLP.MainWindow', + 'Export OpenLP settings to a specified *.config file')) + self.settingsExportItem.setText( + translate('OpenLP.MainWindow', 'Settings')) + self.settingsImportItem.setStatusTip(translate('OpenLP.MainWindow', + 'Import OpenLP settings from a specified *.config file previously ' + 'exported on this or another machine')) + self.settingsImportItem.setText( + translate('OpenLP.MainWindow', 'Settings')) self.viewMediaManagerItem.setText( translate('OpenLP.MainWindow', '&Media Manager')) self.viewMediaManagerItem.setToolTip( @@ -523,8 +539,13 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # (not for use by plugins) self.uiSettingsSection = u'user interface' self.generalSettingsSection = u'general' - self.serviceSettingsSection = u'servicemanager' + self.advancedlSettingsSection = u'advanced' + self.shortcutsSettingsSection = u'shortcuts' + self.servicemanagerSettingsSection = u'servicemanager' self.songsSettingsSection = u'songs' + self.themesSettingsSection = u'themes' + self.displayTagsSection = u'displayTags' + self.headerSection = u'SettingsImport' self.serviceNotSaved = False self.aboutForm = AboutForm(self) self.settingsForm = SettingsForm(self, self) @@ -573,6 +594,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked) QtCore.QObject.connect(self.settingsShortcutsItem, QtCore.SIGNAL(u'triggered()'), self.onSettingsShortcutsItemClicked) + QtCore.QObject.connect(self.settingsImportItem, + QtCore.SIGNAL(u'triggered()'), self.onSettingsImportItemClicked) + QtCore.QObject.connect(self.settingsExportItem, + QtCore.SIGNAL(u'triggered()'), self.onSettingsExportItemClicked) # i18n set signals for languages self.languageGroup.triggered.connect(LanguageManager.set_language) QtCore.QObject.connect(self.modeDefaultItem, @@ -751,22 +776,25 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): return Receiver.send_message(u'cursor_busy') screens = ScreenList.get_instance() - if FirstTimeForm(screens, self).exec_() == QtGui.QDialog.Accepted: - self.firstTime() - for plugin in self.pluginManager.plugins: - self.activePlugin = plugin - oldStatus = self.activePlugin.status - self.activePlugin.setStatus() - if oldStatus != self.activePlugin.status: - if self.activePlugin.status == PluginStatus.Active: - self.activePlugin.toggleStatus(PluginStatus.Active) - self.activePlugin.appStartup() - else: - self.activePlugin.toggleStatus(PluginStatus.Inactive) - self.themeManagerContents.configUpdated() - self.themeManagerContents.loadThemes(True) - Receiver.send_message(u'theme_update_global', - self.themeManagerContents.global_theme) + FirstTimeForm(screens, self).exec_() + self.firstTime() + for plugin in self.pluginManager.plugins: + self.activePlugin = plugin + oldStatus = self.activePlugin.status + self.activePlugin.setStatus() + if oldStatus != self.activePlugin.status: + if self.activePlugin.status == PluginStatus.Active: + self.activePlugin.toggleStatus(PluginStatus.Active) + self.activePlugin.appStartup() + else: + self.activePlugin.toggleStatus(PluginStatus.Inactive) + self.themeManagerContents.configUpdated() + self.themeManagerContents.loadThemes(True) + Receiver.send_message(u'theme_update_global', + self.themeManagerContents.global_theme) + # Check if any Bibles downloaded. If there are, they will be + # processed. + Receiver.send_message(u'bibles_load_list', True) def blankCheck(self): """ @@ -868,6 +896,171 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.shortcutForm.exec_(): self.shortcutForm.save() + def onSettingsImportItemClicked(self): + """ + Import settings from an export INI file + """ + answer = QtGui.QMessageBox.critical(self, + translate('OpenLP.MainWindow', 'Import settings?'), + translate('OpenLP.MainWindow', + 'Are you sure you want to import settings?\n\n' + 'Importing settings will make permanent changes to your current ' + 'OpenLP configuration.\n\n' + 'Importing incorrect settings may cause erratic behaviour or ' + 'OpenLP to terminate abnormally.'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.No) + if answer == QtGui.QMessageBox.No: + return + import_file_name = unicode(QtGui.QFileDialog.getOpenFileName(self, + translate('OpenLP.MainWindow', 'Open File'), + '', + translate('OpenLP.MainWindow', + 'OpenLP Export Settings Files (*.conf)'))) + if not import_file_name: + return + setting_sections = [] + # Add main sections. + setting_sections.extend([self.generalSettingsSection]) + setting_sections.extend([self.advancedlSettingsSection]) + setting_sections.extend([self.uiSettingsSection]) + setting_sections.extend([self.shortcutsSettingsSection]) + setting_sections.extend([self.servicemanagerSettingsSection]) + setting_sections.extend([self.themesSettingsSection]) + setting_sections.extend([self.displayTagsSection]) + setting_sections.extend([self.headerSection]) + # Add plugin sections. + for plugin in self.pluginManager.plugins: + setting_sections.extend([plugin.name]) + settings = QtCore.QSettings() + import_settings = QtCore.QSettings(import_file_name, + QtCore.QSettings.IniFormat) + import_keys = import_settings.allKeys() + for section_key in import_keys: + # We need to handle the really bad files. + try: + section, key = section_key.split(u'/') + except ValueError: + section = u'unknown' + key = u'' + # Switch General back to lowercase. + if section == u'General': + section = u'general' + section_key = section + "/" + key + # Make sure it's a valid section for us. + if not section in setting_sections: + QtGui.QMessageBox.critical(self, + translate('OpenLP.MainWindow', 'Import settings'), + translate('OpenLP.MainWindow', + 'The file you selected does appear to be a valid OpenLP ' + 'settings file.\n\n' + 'Section [%s] is not valid \n\n' + 'Processing has terminated and no changed have been made.' + % section), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Ok)) + return + # We have a good file, import it. + for section_key in import_keys: + value = import_settings.value(section_key) + settings.setValue(u'%s' % (section_key) , + QtCore.QVariant(value)) + now = datetime.now() + settings.beginGroup(self.headerSection) + settings.setValue( u'file_imported' , QtCore.QVariant(import_file_name)) + settings.setValue(u'file_date_imported', + now.strftime("%Y-%m-%d %H:%M")) + settings.endGroup() + settings.sync() + # We must do an immediate restart or current configuration will + # overwrite what was just imported when application terminates + # normally. We need to exit without saving configuration. + QtGui.QMessageBox.information(self, + translate('OpenLP.MainWindow', 'Import settings'), + translate('OpenLP.MainWindow', + 'OpenLP will now close. Imported settings will ' + 'be applied the next time you start OpenLP.'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Ok)) + self.settingsImported = True + self.cleanUp() + QtCore.QCoreApplication.exit() + + def onSettingsExportItemClicked(self): + """ + Export settings to a .conf file in INI format + """ + export_file_name = unicode(QtGui.QFileDialog.getSaveFileName(self, + translate('OpenLP.MainWindow', 'Export Settings File'), '', + translate('OpenLP.MainWindow', + 'OpenLP Export Settings File (*.conf)'))) + if not export_file_name: + return + # Make sure it's a .conf file. + if not export_file_name.endswith(u'conf'): + export_file_name = export_file_name + u'.conf' + temp_file = os.path.join(unicode(gettempdir()), + u'openlp', u'exportConf.tmp') + self.saveSettings() + setting_sections = [] + # Add main sections. + setting_sections.extend([self.generalSettingsSection]) + setting_sections.extend([self.advancedlSettingsSection]) + setting_sections.extend([self.uiSettingsSection]) + setting_sections.extend([self.shortcutsSettingsSection]) + setting_sections.extend([self.servicemanagerSettingsSection]) + setting_sections.extend([self.themesSettingsSection]) + setting_sections.extend([self.displayTagsSection]) + # Add plugin sections. + for plugin in self.pluginManager.plugins: + setting_sections.extend([plugin.name]) + # Delete old files if found. + if os.path.exists(temp_file): + os.remove(temp_file) + if os.path.exists(export_file_name): + os.remove(export_file_name) + settings = QtCore.QSettings() + settings.remove(self.headerSection) + # Get the settings. + keys = settings.allKeys() + export_settings = QtCore.QSettings(temp_file, + QtCore.QSettings.IniFormat) + # Add a header section. + # This is to insure it's our conf file for import. + now = datetime.now() + application_version = get_application_version() + # Write INI format using Qsettings. + # Write our header. + export_settings.beginGroup(self.headerSection) + export_settings.setValue(u'Make_Changes', u'At_Own_RISK') + export_settings.setValue(u'type', u'OpenLP_settings_export') + export_settings.setValue(u'file_date_created', + now.strftime("%Y-%m-%d %H:%M")) + export_settings.setValue(u'version', application_version[u'full']) + export_settings.endGroup() + # Write all the sections and keys. + for section_key in keys: + section, key = section_key.split(u'/') + key_value = settings.value(section_key) + export_settings.setValue(section_key, key_value) + export_settings.sync() + # Temp CONF file has been written. Blanks in keys are now '%20'. + # Read the temp file and output the user's CONF file with blanks to + # make it more readable. + temp_conf = open(temp_file, u'r') + export_conf = open(export_file_name, u'w') + for file_record in temp_conf: + # Get rid of any invalid entries. + if file_record.find(u'@Invalid()') == -1: + file_record = file_record.replace(u'%20', u' ') + export_conf.write(file_record) + temp_conf.close() + export_conf.close() + os.remove(temp_file) + return + def onModeDefaultItemClicked(self): """ Put OpenLP into "Default" view mode. @@ -920,6 +1113,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Hook to close the main window and display windows on exit """ + # If we just did a settings import, close without saving changes. + if self.settingsImported: + event.accept() if self.serviceManagerContents.isModified(): ret = self.serviceManagerContents.saveModifiedService() if ret == QtGui.QMessageBox.Save: @@ -1095,6 +1291,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ log.debug(u'Loading QSettings') settings = QtCore.QSettings() + # Remove obsolete entries. + settings.remove(u'custom slide') + settings.remove(u'service') settings.beginGroup(self.generalSettingsSection) self.recentFiles = settings.value(u'recent files').toStringList() settings.endGroup() @@ -1117,6 +1316,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Save the main window settings. """ + # Exit if we just did a settings import. + if self.settingsImported: + return log.debug(u'Saving QSettings') settings = QtCore.QSettings() settings.beginGroup(self.generalSettingsSection) diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index 55fc6eb3c..c08b6293e 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -31,7 +31,7 @@ import os from PyQt4 import QtCore, QtGui from lxml import html -from openlp.core.lib import translate, get_text_file_string +from openlp.core.lib import translate, get_text_file_string, Receiver from openlp.core.lib.ui import UiStrings from openlp.core.ui.printservicedialog import Ui_PrintServiceDialog, ZoomSize from openlp.core.utils import AppLocation @@ -327,12 +327,14 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ Copies the display text to the clipboard as plain text """ + self.update_song_usage() self.mainWindow.clipboard.setText(self.document.toPlainText()) def copyHtmlText(self): """ Copies the display text to the clipboard as Html """ + self.update_song_usage() self.mainWindow.clipboard.setText(self.document.toHtml()) def printServiceOrder(self): @@ -341,6 +343,7 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): """ if not self.printDialog.exec_(): return + self.update_song_usage() # Print the document. self.document.print_(self.printer) @@ -397,3 +400,9 @@ class PrintServiceForm(QtGui.QDialog, Ui_PrintServiceDialog): settings.setValue(u'print notes', QtCore.QVariant(self.notesCheckBox.isChecked())) settings.endGroup() + + def update_song_usage(self): + for index, item in enumerate(self.serviceManager.serviceItems): + # Trigger Audit requests + Receiver.send_message(u'print_service_started', + [item[u'service_item']]) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 3ab2e9239..d2d7450ca 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -28,6 +28,7 @@ import cgi import cPickle import logging import os +import shutil import zipfile log = logging.getLogger(__name__) @@ -290,7 +291,7 @@ class ServiceManager(QtGui.QWidget): QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate) # Last little bits of setting up self.service_theme = unicode(QtCore.QSettings().value( - self.mainwindow.serviceSettingsSection + u'/service theme', + self.mainwindow.servicemanagerSettingsSection + u'/service theme', QtCore.QVariant(u'')).toString()) self.servicePath = AppLocation.get_section_data_path(u'servicemanager') # build the drag and drop context menu @@ -371,7 +372,7 @@ class ServiceManager(QtGui.QWidget): self.mainwindow.setServiceModified(self.isModified(), self.shortFileName()) QtCore.QSettings(). \ - setValue(u'service/last file',QtCore.QVariant(fileName)) + setValue(u'servicemanager/last file',QtCore.QVariant(fileName)) def fileName(self): """ @@ -429,14 +430,15 @@ class ServiceManager(QtGui.QWidget): self.mainwindow, translate('OpenLP.ServiceManager', 'Open File'), SettingsManager.get_last_dir( - self.mainwindow.serviceSettingsSection), + self.mainwindow.servicemanagerSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) if not fileName: return False else: fileName = loadFile - SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, + SettingsManager.set_last_dir( + self.mainwindow.servicemanagerSettingsSection, split_filename(fileName)[0]) self.loadFile(fileName) @@ -461,7 +463,7 @@ class ServiceManager(QtGui.QWidget): self.setFileName(u'') self.setModified(False) QtCore.QSettings(). \ - setValue(u'service/last file',QtCore.QVariant(u'')) + setValue(u'servicemanager/last file',QtCore.QVariant(u'')) def saveFile(self): """ @@ -470,22 +472,34 @@ class ServiceManager(QtGui.QWidget): if not self.fileName(): return self.saveFileAs() path_file_name = unicode(self.fileName()) - (path, file_name) = os.path.split(path_file_name) - (basename, extension) = os.path.splitext(file_name) - service_file_name = basename + '.osd' + path, file_name = os.path.split(path_file_name) + basename, extension = os.path.splitext(file_name) + service_file_name = '%s.osd' % basename log.debug(u'ServiceManager.saveFile - %s' % path_file_name) - SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, + SettingsManager.set_last_dir( + self.mainwindow.servicemanagerSettingsSection, path) service = [] write_list = [] + audio_files = [] total_size = 0 Receiver.send_message(u'cursor_busy') # Number of items + 1 to zip it self.mainwindow.displayProgressBar(len(self.serviceItems) + 1) for item in self.serviceItems: self.mainwindow.incrementProgressBar() - service.append({u'serviceitem': - item[u'service_item'].get_service_repr()}) + service_item = item[u'service_item'].get_service_repr() + # Get all the audio files, and ready them for embedding in the + # service file. + if len(service_item[u'header'][u'background_audio']) > 0: + for i, filename in \ + enumerate(service_item[u'header'][u'background_audio']): + new_file = os.path.join(u'audio', item[u'service_item']._uuid, + os.path.split(filename)[1]) + audio_files.append((filename, new_file)) + service_item[u'header'][u'background_audio'][i] = new_file + # Add the service item to the service. + service.append({u'serviceitem': service_item}) if not item[u'service_item'].uses_file(): continue skipMissing = False @@ -539,6 +553,8 @@ class ServiceManager(QtGui.QWidget): # Finally add all the listed media files. for path_from in write_list: zip.write(path_from, path_from.encode(u'utf-8')) + for path_from, path_to in audio_files: + zip.write(path_from, path_to.encode(u'utf-8')) except IOError: log.exception(u'Failed to save service to disk') success = False @@ -562,7 +578,7 @@ class ServiceManager(QtGui.QWidget): fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, UiStrings().SaveService, SettingsManager.get_last_dir( - self.mainwindow.serviceSettingsSection), + self.mainwindow.servicemanagerSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) if not fileName: return False @@ -584,8 +600,8 @@ class ServiceManager(QtGui.QWidget): fileTo = None try: zip = zipfile.ZipFile(fileName) - for file in zip.namelist(): - ucsfile = file_is_unicode(file) + for zipinfo in zip.infolist(): + ucsfile = file_is_unicode(zipinfo.filename) if not ucsfile: critical_error_message_box( message=translate('OpenLP.ServiceManager', @@ -593,14 +609,12 @@ class ServiceManager(QtGui.QWidget): 'The content encoding is not UTF-8.')) continue osfile = unicode(QtCore.QDir.toNativeSeparators(ucsfile)) - filePath = os.path.join(self.servicePath, - os.path.split(osfile)[1]) - fileTo = open(filePath, u'wb') - fileTo.write(zip.read(file)) - fileTo.flush() - fileTo.close() - if filePath.endswith(u'osd'): - p_file = filePath + if not osfile.startswith(u'audio'): + osfile = os.path.split(osfile)[1] + zipinfo.filename = osfile + zip.extract(zipinfo, self.servicePath) + if osfile.endswith(u'osd'): + p_file = os.path.join(self.servicePath, osfile) if 'p_file' in locals(): Receiver.send_message(u'cursor_busy') fileTo = open(p_file, u'r') @@ -624,17 +638,17 @@ class ServiceManager(QtGui.QWidget): self.mainwindow.addRecentFile(fileName) self.setModified(False) QtCore.QSettings().setValue( - 'service/last file', QtCore.QVariant(fileName)) + 'servicemanager/last file', QtCore.QVariant(fileName)) else: critical_error_message_box( message=translate('OpenLP.ServiceManager', 'File is not a valid service.')) log.exception(u'File contains no service data') except (IOError, NameError, zipfile.BadZipfile): + log.exception(u'Problem loading service file %s' % fileName) critical_error_message_box( message=translate('OpenLP.ServiceManager', 'File could not be opened because it is corrupt.')) - log.exception(u'Problem loading service file %s' % fileName) except zipfile.BadZipfile: if os.path.getsize(fileName) == 0: log.exception(u'Service file is zero sized: %s' % fileName) @@ -666,7 +680,7 @@ class ServiceManager(QtGui.QWidget): present. """ fileName = QtCore.QSettings(). \ - value(u'service/last file',QtCore.QVariant(u'')).toString() + value(u'servicemanager/last file',QtCore.QVariant(u'')).toString() if fileName: self.loadFile(fileName) @@ -683,16 +697,16 @@ class ServiceManager(QtGui.QWidget): self.maintainAction.setVisible(False) self.notesAction.setVisible(False) self.timeAction.setVisible(False) - if serviceItem[u'service_item'].is_capable(ItemCapabilities.AllowsEdit)\ + if serviceItem[u'service_item'].is_capable(ItemCapabilities.CanEdit)\ and serviceItem[u'service_item'].edit_id: self.editAction.setVisible(True) if serviceItem[u'service_item']\ - .is_capable(ItemCapabilities.AllowsMaintain): + .is_capable(ItemCapabilities.CanMaintain): self.maintainAction.setVisible(True) if item.parent() is None: self.notesAction.setVisible(True) if serviceItem[u'service_item']\ - .is_capable(ItemCapabilities.AllowsVariableStartTime): + .is_capable(ItemCapabilities.HasVariableStartTime): self.timeAction.setVisible(True) self.themeMenu.menuAction().setVisible(False) # Set up the theme menu. @@ -963,7 +977,7 @@ class ServiceManager(QtGui.QWidget): (unicode(translate('OpenLP.ServiceManager', 'Notes')), cgi.escape(unicode(serviceitem.notes)))) if item[u'service_item'] \ - .is_capable(ItemCapabilities.AllowsVariableStartTime): + .is_capable(ItemCapabilities.HasVariableStartTime): tips.append(item[u'service_item'].get_media_time()) treewidgetitem.setToolTip(0, u'
'.join(tips)) treewidgetitem.setData(0, QtCore.Qt.UserRole, @@ -999,6 +1013,8 @@ class ServiceManager(QtGui.QWidget): for file in os.listdir(self.servicePath): file_path = os.path.join(self.servicePath, file) delete_file(file_path) + if os.path.exists(os.path.join(self.servicePath, u'audio')): + shutil.rmtree(os.path.join(self.servicePath, u'audio'), False) def onThemeComboBoxSelected(self, currentIndex): """ @@ -1008,7 +1024,8 @@ class ServiceManager(QtGui.QWidget): self.service_theme = unicode(self.themeComboBox.currentText()) self.mainwindow.renderer.set_service_theme(self.service_theme) QtCore.QSettings().setValue( - self.mainwindow.serviceSettingsSection + u'/service theme', + self.mainwindow.servicemanagerSettingsSection + + u'/service theme', QtCore.QVariant(self.service_theme)) self.regenerateServiceItems() @@ -1196,7 +1213,7 @@ class ServiceManager(QtGui.QWidget): item += 1 if self.serviceItems and item < len(self.serviceItems) and \ self.serviceItems[item][u'service_item'].is_capable( - ItemCapabilities.AllowsPreview): + ItemCapabilities.CanPreview): self.mainwindow.previewController.addServiceManagerItem( self.serviceItems[item][u'service_item'], 0) self.mainwindow.liveController.previewListWidget.setFocus() @@ -1214,7 +1231,7 @@ class ServiceManager(QtGui.QWidget): """ item = self.findServiceItem()[0] if self.serviceItems[item][u'service_item']\ - .is_capable(ItemCapabilities.AllowsEdit): + .is_capable(ItemCapabilities.CanEdit): Receiver.send_message(u'%s_edit' % self.serviceItems[item][u'service_item'].name.lower(), u'L:%s' % self.serviceItems[item][u'service_item'].edit_id) @@ -1297,7 +1314,7 @@ class ServiceManager(QtGui.QWidget): serviceItem = self.serviceItems[pos] if (plugin == serviceItem[u'service_item'].name and serviceItem[u'service_item'].is_capable( - ItemCapabilities.AllowsAdditions)): + ItemCapabilities.CanAppend)): action = self.dndMenu.exec_(QtGui.QCursor.pos()) # New action required if action == self.newAction: diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 0f83cbc30..6615d0e35 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -256,6 +256,12 @@ class SlideController(QtGui.QWidget): self.songMenu.setMenu(QtGui.QMenu( translate('OpenLP.SlideController', 'Go To'), self.toolbar)) self.toolbar.makeWidgetsInvisible([u'Song Menu']) + # Stuff for items with background audio. + self.audioPauseItem = self.toolbar.addToolbarButton( + u'Pause Audio', u':/slides/media_playback_pause.png', + translate('OpenLP.SlideController', 'Pause audio.'), + self.onAudioPauseClicked, True) + self.audioPauseItem.setVisible(False) # Build the volumeSlider. self.volumeSlider = QtGui.QSlider(QtCore.Qt.Horizontal) self.volumeSlider.setTickInterval(1) @@ -512,13 +518,13 @@ class SlideController(QtGui.QWidget): self.playSlidesOnce.setChecked(False) self.playSlidesOnce.setIcon(build_icon(u':/media/media_time.png')) self.playSlidesLoop.setChecked(False) - self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) + self.playSlidesLoop.setIcon(build_icon(u':/media/media_time.png')) if item.is_text(): if QtCore.QSettings().value( self.parent().songsSettingsSection + u'/display songbar', QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: self.toolbar.makeWidgetsVisible([u'Song Menu']) - if item.is_capable(ItemCapabilities.AllowsLoop) and \ + if item.is_capable(ItemCapabilities.CanLoop) and \ len(item.get_frames()) > 1: self.toolbar.makeWidgetsVisible(self.loopList) if item.is_media(): @@ -538,7 +544,7 @@ class SlideController(QtGui.QWidget): self.toolbar.hide() self.mediabar.setVisible(False) self.toolbar.makeWidgetsInvisible(self.songEditList) - if item.is_capable(ItemCapabilities.AllowsEdit) and item.from_plugin: + if item.is_capable(ItemCapabilities.CanEdit) and item.from_plugin: self.toolbar.makeWidgetsVisible(self.songEditList) elif item.is_media(): self.toolbar.setVisible(False) @@ -576,7 +582,7 @@ class SlideController(QtGui.QWidget): """ Replacement item following a remote edit """ - if item.__eq__(self.serviceItem): + if item == self.serviceItem: self._processItem(item, self.previewListWidget.currentRow()) def addServiceManagerItem(self, item, slideno): @@ -586,15 +592,17 @@ class SlideController(QtGui.QWidget): Called by ServiceManager """ log.debug(u'addServiceManagerItem live = %s' % self.isLive) - # If no valid slide number is specified we take the first one. + # If no valid slide number is specified we take the first one, but we + # remember the initial value to see if we should reload the song or not + slidenum = slideno if slideno == -1: - slideno = 0 - # If service item is the same as the current on only change slide - if item.__eq__(self.serviceItem): - self.__checkUpdateSelectedSlide(slideno) + slidenum = 0 + # If service item is the same as the current one, only change slide + if slideno >= 0 and item == self.serviceItem: + self.__checkUpdateSelectedSlide(slidenum) self.slideSelected() - return - self._processItem(item, slideno) + else: + self._processItem(item, slidenum) def _processItem(self, serviceItem, slideno): """ @@ -618,6 +626,22 @@ class SlideController(QtGui.QWidget): self.previewListWidget.setColumnWidth(0, width) if self.isLive: self.songMenu.menu().clear() + self.display.audioPlayer.reset() + self.setAudioItemsVisibility(False) + self.audioPauseItem.setChecked(False) + if self.serviceItem.is_capable(ItemCapabilities.HasBackgroundAudio): + log.debug(u'Starting to play...') + self.display.audioPlayer.addToPlaylist( + self.serviceItem.background_audio) + if QtCore.QSettings().value( + self.parent().generalSettingsSection + \ + u'/audio start paused', + QtCore.QVariant(True)).toBool(): + self.audioPauseItem.setChecked(True) + self.display.audioPlayer.pause() + else: + self.display.audioPlayer.play() + self.setAudioItemsVisibility(True) row = 0 text = [] for framenumber, frame in enumerate(self.serviceItem.get_frames()): @@ -767,6 +791,8 @@ class SlideController(QtGui.QWidget): self.onBlankDisplay(True) else: Receiver.send_message(u'maindisplay_show') + else: + Receiver.send_message(u'maindisplay_hide', HideMode.Screen) def onSlideBlank(self): """ @@ -1097,6 +1123,17 @@ class SlideController(QtGui.QWidget): self.playSlidesLoop.setChecked(False) self.onToggleLoop() + def setAudioItemsVisibility(self, visible): + self.audioPauseItem.setVisible(visible) + + def onAudioPauseClicked(self, checked): + if not self.audioPauseItem.isVisible(): + return + if checked: + self.display.audioPlayer.pause() + else: + self.display.audioPlayer.play() + def timerEvent(self, event): """ If the timer event is for this window select next slide diff --git a/openlp/core/ui/themeform.py b/openlp/core/ui/themeform.py index d5d955926..dc3c23d0d 100644 --- a/openlp/core/ui/themeform.py +++ b/openlp/core/ui/themeform.py @@ -66,6 +66,8 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.onGradientComboBoxCurrentIndexChanged) QtCore.QObject.connect(self.colorButton, QtCore.SIGNAL(u'clicked()'), self.onColorButtonClicked) + QtCore.QObject.connect(self.imageColorButton, + QtCore.SIGNAL(u'clicked()'), self.onImageColorButtonClicked) QtCore.QObject.connect(self.gradientStartButton, QtCore.SIGNAL(u'clicked()'), self.onGradientStartButtonClicked) QtCore.QObject.connect(self.gradientEndButton, @@ -330,6 +332,8 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self.theme.background_end_color) self.setField(u'background_type', QtCore.QVariant(1)) else: + self.imageColorButton.setStyleSheet(u'background-color: %s' % + self.theme.background_border_color) self.imageFileEdit.setText(self.theme.background_filename) self.setField(u'background_type', QtCore.QVariant(2)) if self.theme.background_direction == \ @@ -464,6 +468,14 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): self._colorButton(self.theme.background_color) self.setBackgroundPageValues() + def onImageColorButtonClicked(self): + """ + Background / Gradient 1 Color button pushed. + """ + self.theme.background_border_color = \ + self._colorButton(self.theme.background_border_color) + self.setBackgroundPageValues() + def onGradientStartButtonClicked(self): """ Gradient 2 Color button pushed. @@ -564,7 +576,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard): def accept(self): """ - Lets save the them as Finish has been pressed + Lets save the theme as Finish has been pressed """ # Save the theme name self.theme.theme_name = unicode(self.field(u'name').toString()) diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 69c229532..fdd0d74f3 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -610,6 +610,11 @@ class ThemeManager(QtGui.QWidget): and to trigger the reload of the theme list """ self._writeTheme(theme, imageFrom, imageTo) + if theme.background_type == \ + BackgroundType.to_string(BackgroundType.Image): + self.mainwindow.imageManager.update_image(theme.theme_name, + u'theme', QtGui.QColor(theme.background_border_color)) + self.mainwindow.imageManager.process_updates() self.loadThemes() def _writeTheme(self, theme, imageFrom, imageTo): diff --git a/openlp/core/ui/themewizard.py b/openlp/core/ui/themewizard.py index 27ac3a182..6001c83d6 100644 --- a/openlp/core/ui/themewizard.py +++ b/openlp/core/ui/themewizard.py @@ -105,6 +105,11 @@ class Ui_ThemeWizard(object): self.imageLayout = QtGui.QFormLayout(self.imageWidget) self.imageLayout.setMargin(0) self.imageLayout.setObjectName(u'ImageLayout') + self.imageColorLabel = QtGui.QLabel(self.colorWidget) + self.imageColorLabel.setObjectName(u'ImageColorLabel') + self.imageColorButton = QtGui.QPushButton(self.colorWidget) + self.imageColorButton.setObjectName(u'ImageColorButton') + self.imageLayout.addRow(self.imageColorLabel, self.imageColorButton) self.imageLabel = QtGui.QLabel(self.imageWidget) self.imageLabel.setObjectName(u'ImageLabel') self.imageFileLayout = QtGui.QHBoxLayout() @@ -118,7 +123,7 @@ class Ui_ThemeWizard(object): build_icon(u':/general/general_open.png')) self.imageFileLayout.addWidget(self.imageBrowseButton) self.imageLayout.addRow(self.imageLabel, self.imageFileLayout) - self.imageLayout.setItem(1, QtGui.QFormLayout.LabelRole, self.spacer) + self.imageLayout.setItem(2, QtGui.QFormLayout.LabelRole, self.spacer) self.backgroundStack.addWidget(self.imageWidget) self.backgroundLayout.addLayout(self.backgroundStack) themeWizard.addPage(self.backgroundPage) @@ -443,6 +448,8 @@ class Ui_ThemeWizard(object): translate('OpenLP.ThemeWizard', 'Top Left - Bottom Right')) self.gradientComboBox.setItemText(BackgroundGradientType.LeftBottom, translate('OpenLP.ThemeWizard', 'Bottom Left - Top Right')) + self.imageColorLabel.setText( + translate(u'OpenLP.ThemeWizard', 'Background color:')) self.imageLabel.setText(u'%s:' % UiStrings().Image) self.mainAreaPage.setTitle( translate('OpenLP.ThemeWizard', 'Main Area Font Details')) diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 290da104c..2d8e16c4c 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -218,7 +218,7 @@ class BSExtract(object): send_error_message(u'parse') return None content = content.find(u'div').findAll(u'div') - verse_number = re.compile(r'v(\d{1,2})(\d{3})(\d{3}) verse') + verse_number = re.compile(r'v(\d{1,2})(\d{3})(\d{3}) verse.*') verses = {} for verse in content: Receiver.send_message(u'openlp_process_events') diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index 91009424c..31effe189 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -67,7 +67,7 @@ class BibleMediaItem(MediaManagerItem): self.hasSearch = True self.search_results = {} self.second_search_results = {} - self.check_search_result() + self.checkSearchResult() QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'bibles_load_list'), self.reloadBibles) @@ -391,10 +391,13 @@ class BibleMediaItem(MediaManagerItem): elif len(bibles): self.initialiseAdvancedBible(bibles[0]) - def reloadBibles(self): + def reloadBibles(self, process=False): log.debug(u'Reloading Bibles') self.plugin.manager.reload_bibles() self.loadBibles() + # If called from first time wizard re-run, process any new bibles. + if process: + self.plugin.appStartup() self.updateAutoCompleter() def initialiseAdvancedBible(self, bible): @@ -648,7 +651,7 @@ class BibleMediaItem(MediaManagerItem): elif self.search_results: self.displayResults(bible, second_bible) self.advancedSearchButton.setEnabled(True) - self.check_search_result() + self.checkSearchResult() Receiver.send_message(u'cursor_normal') Receiver.send_message(u'openlp_process_events') @@ -712,7 +715,7 @@ class BibleMediaItem(MediaManagerItem): elif self.search_results: self.displayResults(bible, second_bible) self.quickSearchButton.setEnabled(True) - self.check_search_result() + self.checkSearchResult() Receiver.send_message(u'cursor_normal') Receiver.send_message(u'openlp_process_events') @@ -785,7 +788,8 @@ class BibleMediaItem(MediaManagerItem): items.append(bible_verse) return items - def generateSlideData(self, service_item, item=None, xmlVersion=False): + def generateSlideData(self, service_item, item=None, xmlVersion=False, + remote=False): """ Generates and formats the slides for the service item as well as the service item's title. @@ -860,9 +864,9 @@ class BibleMediaItem(MediaManagerItem): not second_bible: # Split the line but do not replace line breaks in renderer. service_item.add_capability(ItemCapabilities.NoLineBreaks) - service_item.add_capability(ItemCapabilities.AllowsPreview) - service_item.add_capability(ItemCapabilities.AllowsLoop) - service_item.add_capability(ItemCapabilities.AllowsWordSplit) + service_item.add_capability(ItemCapabilities.CanPreview) + service_item.add_capability(ItemCapabilities.CanLoop) + service_item.add_capability(ItemCapabilities.CanWordSplit) # Service Item: Title service_item.title = u', '.join(raw_title) # Service Item: Theme diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index a3a80caf9..0eadf6021 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -135,7 +135,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): self.customSlide.credits = unicode(self.creditEdit.text()) self.customSlide.theme_name = unicode(self.themeComboBox.currentText()) success = self.manager.save_object(self.customSlide) - self.mediaitem.auto_select_id = self.customSlide.id + self.mediaitem.autoSelectId = self.customSlide.id return success def onUpButtonClicked(self): diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 667434a8b..59d6b4fb6 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -132,7 +132,7 @@ class CustomMediaItem(MediaManagerItem): def loadList(self, custom_slides): # Sort out what custom we want to select after loading the list. - self.save_auto_select_id() + self.saveAutoSelectId() self.listView.clear() # Sort the customs by its title considering language specific # characters. lower() is needed for windows! @@ -144,9 +144,9 @@ class CustomMediaItem(MediaManagerItem): QtCore.Qt.UserRole, QtCore.QVariant(custom_slide.id)) self.listView.addItem(custom_name) # Auto-select the custom. - if custom_slide.id == self.auto_select_id: + if custom_slide.id == self.autoSelectId: self.listView.setCurrentItem(custom_name) - self.auto_select_id = -1 + self.autoSelectId = -1 # Called to redisplay the custom list screen edith from a search # or from the exit of the Custom edit dialog. If remote editing is # active trigger it and clean up so it will not update again. @@ -180,7 +180,7 @@ class CustomMediaItem(MediaManagerItem): self.remoteTriggered = remote_type self.edit_custom_form.loadCustom(custom_id, (remote_type == u'P')) self.edit_custom_form.exec_() - self.auto_select_id = -1 + self.autoSelectId = -1 self.onSearchTextButtonClick() def onEditClick(self): @@ -192,7 +192,7 @@ class CustomMediaItem(MediaManagerItem): item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.edit_custom_form.loadCustom(item_id, False) self.edit_custom_form.exec_() - self.auto_select_id = -1 + self.autoSelectId = -1 self.onSearchTextButtonClick() def onDeleteClick(self): @@ -217,21 +217,21 @@ class CustomMediaItem(MediaManagerItem): for item in self.listView.selectedIndexes()] for id in id_list: self.plugin.manager.delete_object(CustomSlide, id) - for row in row_list: - self.listView.takeItem(row) + self.onSearchTextButtonClick() def onFocus(self): self.searchTextEdit.setFocus() - def generateSlideData(self, service_item, item=None, xmlVersion=False): + def generateSlideData(self, service_item, item=None, xmlVersion=False, + remote=False): raw_footer = [] slide = None theme = None item_id = self._getIdOfItemToGenerate(item, self.remoteCustom) - service_item.add_capability(ItemCapabilities.AllowsEdit) - service_item.add_capability(ItemCapabilities.AllowsPreview) - service_item.add_capability(ItemCapabilities.AllowsLoop) - service_item.add_capability(ItemCapabilities.AllowsVirtualSplit) + service_item.add_capability(ItemCapabilities.CanEdit) + service_item.add_capability(ItemCapabilities.CanPreview) + service_item.add_capability(ItemCapabilities.CanLoop) + service_item.add_capability(ItemCapabilities.CanSoftBreak) customSlide = self.plugin.manager.get_object(CustomSlide, item_id) title = customSlide.title credit = customSlide.credits @@ -274,7 +274,7 @@ class CustomMediaItem(MediaManagerItem): CustomSlide.theme_name.like(u'%' + self.whitespace.sub(u' ', search_keywords) + u'%'), order_by_ref=CustomSlide.title) self.loadList(search_results) - self.check_search_result() + self.checkSearchResult() def onSearchTextEditChanged(self, text): """ diff --git a/openlp/plugins/images/imageplugin.py b/openlp/plugins/images/imageplugin.py index 1ddbe8357..4b5a6f3c0 100644 --- a/openlp/plugins/images/imageplugin.py +++ b/openlp/plugins/images/imageplugin.py @@ -25,10 +25,13 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +from PyQt4 import QtCore, QtGui + import logging -from openlp.core.lib import Plugin, StringContent, build_icon, translate -from openlp.plugins.images.lib import ImageMediaItem +from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ + Receiver +from openlp.plugins.images.lib import ImageMediaItem, ImageTab log = logging.getLogger(__name__) @@ -36,10 +39,13 @@ class ImagePlugin(Plugin): log.info(u'Image Plugin loaded') def __init__(self, plugin_helpers): - Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem) + Plugin.__init__(self, u'images', plugin_helpers, ImageMediaItem, + ImageTab) self.weight = -7 self.icon_path = u':/plugins/plugin_images.png' self.icon = build_icon(self.icon_path) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'image_updated'), self.image_updated) def about(self): about_text = translate('ImagePlugin', 'Image Plugin' @@ -81,3 +87,13 @@ class ImagePlugin(Plugin): 'Add the selected image to the service.') } self.setPluginUiTextStrings(tooltips) + + def image_updated(self): + """ + Triggered by saving and changing the image border. Sets the images in + image manager to require updates. Actual update is triggered by the + last part of saving the config. + """ + background = QtGui.QColor(QtCore.QSettings().value(self.settingsSection + + u'/background color', QtCore.QVariant(u'#000000'))) + self.liveController.imageManager.update_images(u'image', background) diff --git a/openlp/plugins/images/lib/__init__.py b/openlp/plugins/images/lib/__init__.py index b26d00184..e216623cd 100644 --- a/openlp/plugins/images/lib/__init__.py +++ b/openlp/plugins/images/lib/__init__.py @@ -26,3 +26,4 @@ ############################################################################### from mediaitem import ImageMediaItem +from imagetab import ImageTab diff --git a/openlp/plugins/images/lib/imagetab.py b/openlp/plugins/images/lib/imagetab.py new file mode 100644 index 000000000..98fbd203f --- /dev/null +++ b/openlp/plugins/images/lib/imagetab.py @@ -0,0 +1,101 @@ +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 SettingsTab, translate, Receiver +from openlp.core.lib.ui import UiStrings, create_valign_combo + +class ImageTab(SettingsTab): + """ + ImageTab is the images settings tab in the settings dialog. + """ + def __init__(self, parent, name, visible_title, icon_path): + SettingsTab.__init__(self, parent, name, visible_title, icon_path) + + def setupUi(self): + self.setObjectName(u'ImagesTab') + SettingsTab.setupUi(self) + self.bgColorGroupBox = QtGui.QGroupBox(self.leftColumn) + self.bgColorGroupBox.setObjectName(u'FontGroupBox') + self.formLayout = QtGui.QFormLayout(self.bgColorGroupBox) + self.formLayout.setObjectName(u'FormLayout') + self.colorLayout = QtGui.QHBoxLayout() + self.backgroundColorLabel = QtGui.QLabel(self.bgColorGroupBox) + self.backgroundColorLabel.setObjectName(u'BackgroundColorLabel') + self.colorLayout.addWidget(self.backgroundColorLabel) + self.backgroundColorButton = QtGui.QPushButton(self.bgColorGroupBox) + self.backgroundColorButton.setObjectName(u'BackgroundColorButton') + self.colorLayout.addWidget(self.backgroundColorButton) + self.formLayout.addRow(self.colorLayout) + self.informationLabel = QtGui.QLabel(self.bgColorGroupBox) + self.informationLabel.setObjectName(u'InformationLabel') + self.formLayout.addRow(self.informationLabel) + self.leftLayout.addWidget(self.bgColorGroupBox) + self.leftLayout.addStretch() + self.rightColumn.setSizePolicy( + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) + self.rightLayout.addStretch() + # Signals and slots + QtCore.QObject.connect(self.backgroundColorButton, + QtCore.SIGNAL(u'pressed()'), self.onbackgroundColorButtonClicked) + + def retranslateUi(self): + self.bgColorGroupBox.setTitle( + translate('ImagesPlugin.ImageTab', 'Background Color')) + self.backgroundColorLabel.setText( + translate('ImagesPlugin.ImageTab', 'Default Color:')) + self.informationLabel.setText( + translate('ImagesPlugin.ImageTab', 'Provides border where image ' + 'is not the correct dimensions for the screen when resized.')) + + def onbackgroundColorButtonClicked(self): + new_color = QtGui.QColorDialog.getColor( + QtGui.QColor(self.bg_color), self) + if new_color.isValid(): + self.bg_color = new_color.name() + self.backgroundColorButton.setStyleSheet( + u'background-color: %s' % self.bg_color) + + def load(self): + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + self.bg_color = unicode(settings.value( + u'background color', QtCore.QVariant(u'#000000')).toString()) + self.initial_color = self.bg_color + settings.endGroup() + self.backgroundColorButton.setStyleSheet( + u'background-color: %s' % self.bg_color) + + def save(self): + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + settings.setValue(u'background color', QtCore.QVariant(self.bg_color)) + settings.endGroup() + if self.initial_color != self.bg_color: + Receiver.send_message(u'image_updated') + diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index acd420880..cb73a132f 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -99,6 +99,8 @@ class ImageMediaItem(MediaManagerItem): """ Remove an image item from the list """ + # Turn off auto preview triggers. + self.listView.blockSignals(True) if check_item_selected(self.listView, translate('ImagePlugin.MediaItem', 'You must select an image to delete.')): row_list = [item.row() for item in self.listView.selectedIndexes()] @@ -111,6 +113,7 @@ class ImageMediaItem(MediaManagerItem): self.listView.takeItem(row) SettingsManager.set_list(self.settingsSection, u'images', self.getFileList()) + self.listView.blockSignals(False) def loadList(self, images, initialLoad=False): if not initialLoad: @@ -139,7 +142,10 @@ class ImageMediaItem(MediaManagerItem): if not initialLoad: self.plugin.formparent.finishedProgressBar() - def generateSlideData(self, service_item, item=None, xmlVersion=False): + def generateSlideData(self, service_item, item=None, xmlVersion=False, + remote=False): + background = QtGui.QColor(QtCore.QSettings().value(self.settingsSection + + u'/background color', QtCore.QVariant(u'#000000'))) if item: items = [item] else: @@ -147,10 +153,10 @@ class ImageMediaItem(MediaManagerItem): if not items: return False service_item.title = unicode(self.plugin.nameStrings[u'plural']) - service_item.add_capability(ItemCapabilities.AllowsMaintain) - service_item.add_capability(ItemCapabilities.AllowsPreview) - service_item.add_capability(ItemCapabilities.AllowsLoop) - service_item.add_capability(ItemCapabilities.AllowsAdditions) + service_item.add_capability(ItemCapabilities.CanMaintain) + service_item.add_capability(ItemCapabilities.CanPreview) + service_item.add_capability(ItemCapabilities.CanLoop) + service_item.add_capability(ItemCapabilities.CanAppend) # force a nonexistent theme service_item.theme = -1 missing_items = [] @@ -164,11 +170,12 @@ class ImageMediaItem(MediaManagerItem): items.remove(item) # We cannot continue, as all images do not exist. if not items: - critical_error_message_box( - translate('ImagePlugin.MediaItem', 'Missing Image(s)'), - unicode(translate('ImagePlugin.MediaItem', - 'The following image(s) no longer exist: %s')) % - u'\n'.join(missing_items_filenames)) + if not remote: + critical_error_message_box( + translate('ImagePlugin.MediaItem', 'Missing Image(s)'), + unicode(translate('ImagePlugin.MediaItem', + 'The following image(s) no longer exist: %s')) % + u'\n'.join(missing_items_filenames)) return False # We have missing as well as existing images. We ask what to do. elif missing_items and QtGui.QMessageBox.question(self, @@ -183,7 +190,7 @@ class ImageMediaItem(MediaManagerItem): for bitem in items: filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) (path, name) = os.path.split(filename) - service_item.add_from_image(filename, name) + service_item.add_from_image(filename, name, background) return True def onResetClick(self): @@ -206,13 +213,16 @@ class ImageMediaItem(MediaManagerItem): if check_item_selected(self.listView, translate('ImagePlugin.MediaItem', 'You must select an image to replace the background with.')): + background = QtGui.QColor(QtCore.QSettings().value( + self.settingsSection + u'/background color', + QtCore.QVariant(u'#000000'))) item = self.listView.selectedIndexes()[0] bitem = self.listView.item(item.row()) filename = unicode(bitem.data(QtCore.Qt.UserRole).toString()) if os.path.exists(filename): (path, name) = os.path.split(filename) if self.plugin.liveController.display.directImage(name, - filename): + filename, background): self.resetAction.setVisible(True) else: critical_error_message_box(UiStrings().LiveBGError, diff --git a/openlp/plugins/media/lib/mediaitem.py b/openlp/plugins/media/lib/mediaitem.py index e3c36bd77..f2e0bbc06 100644 --- a/openlp/plugins/media/lib/mediaitem.py +++ b/openlp/plugins/media/lib/mediaitem.py @@ -31,11 +31,11 @@ import os import locale from PyQt4 import QtCore, QtGui +from PyQt4.phonon import Phonon from openlp.core.lib import MediaManagerItem, build_icon, ItemCapabilities, \ - SettingsManager, translate, check_item_selected, Receiver + SettingsManager, translate, check_item_selected, Receiver, MediaType from openlp.core.lib.ui import UiStrings, critical_error_message_box -from PyQt4.phonon import Phonon log = logging.getLogger(__name__) @@ -48,9 +48,9 @@ class MediaMediaItem(MediaManagerItem): log.info(u'%s MediaMediaItem loaded', __name__) def __init__(self, parent, plugin, icon): - self.IconPath = u'images/image' + self.iconPath = u'images/image' self.background = False - self.PreviewFunction = CLAPPERBOARD + self.previewFunction = CLAPPERBOARD MediaManagerItem.__init__(self, parent, plugin, icon) self.singleServiceItem = False self.hasSearch = True @@ -129,18 +129,20 @@ class MediaMediaItem(MediaManagerItem): 'There was a problem replacing your background, ' 'the media file "%s" no longer exists.')) % filename) - def generateSlideData(self, service_item, item=None, xmlVersion=False): + def generateSlideData(self, service_item, item=None, xmlVersion=False, + remote=False): if item is None: item = self.listView.currentItem() if item is None: return False filename = unicode(item.data(QtCore.Qt.UserRole).toString()) if not os.path.exists(filename): - # File is no longer present - critical_error_message_box( - translate('MediaPlugin.MediaItem', 'Missing Media File'), - unicode(translate('MediaPlugin.MediaItem', - 'The file %s no longer exists.')) % filename) + if not remote: + # File is no longer present + critical_error_message_box( + translate('MediaPlugin.MediaItem', 'Missing Media File'), + unicode(translate('MediaPlugin.MediaItem', + 'The file %s no longer exists.')) % filename) return False self.mediaObject.stop() self.mediaObject.clearQueue() @@ -156,13 +158,16 @@ class MediaMediaItem(MediaManagerItem): or self.mediaObject.currentSource().type() \ == Phonon.MediaSource.Invalid: self.mediaObject.stop() - critical_error_message_box(UiStrings().UnsupportedFile, - UiStrings().UnsupportedFile) + critical_error_message_box( + translate('MediaPlugin.MediaItem', 'File Too Big'), + translate('MediaPlugin.MediaItem', 'The file you are ' + 'trying to load is too big. Please reduce it to less ' + 'than 50MiB.')) return False self.mediaObject.stop() service_item.media_length = self.mediaObject.totalTime() / 1000 service_item.add_capability( - ItemCapabilities.AllowsVariableStartTime) + ItemCapabilities.HasVariableStartTime) service_item.title = unicode(self.plugin.nameStrings[u'singular']) service_item.add_capability(ItemCapabilities.RequiresMedia) # force a non-existent theme @@ -217,6 +222,19 @@ class MediaMediaItem(MediaManagerItem): item_name.setToolTip(track) self.listView.addItem(item_name) + def getList(self, type=MediaType.Audio): + media = SettingsManager.load_list(self.settingsSection, u'media') + media.sort(cmp=locale.strcoll, + key=lambda filename: os.path.split(unicode(filename))[1].lower()) + ext = [] + if type == MediaType.Audio: + ext = self.plugin.audio_extensions_list + else: + ext = self.plugin.video_extensions_list + ext = map(lambda x: x[1:], ext) + media = filter(lambda x: os.path.splitext(x)[1] in ext, media) + return media + def createPhonon(self): log.debug(u'CreatePhonon') if not self.mediaObject: diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index 85721c65d..6c997a6b6 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -233,7 +233,8 @@ class PresentationMediaItem(MediaManagerItem): SettingsManager.set_list(self.settingsSection, u'presentations', self.getFileList()) - def generateSlideData(self, service_item, item=None, xmlVersion=False): + def generateSlideData(self, service_item, item=None, xmlVersion=False, + remote=False): """ Load the relevant information for displaying the presentation in the slidecontroller. In the case of powerpoints, an image @@ -248,7 +249,7 @@ class PresentationMediaItem(MediaManagerItem): service_item.title = unicode(self.displayTypeComboBox.currentText()) service_item.shortname = unicode(self.displayTypeComboBox.currentText()) service_item.add_capability(ItemCapabilities.ProvidesOwnDisplay) - service_item.add_capability(ItemCapabilities.AllowsDetailedTitleDisplay) + service_item.add_capability(ItemCapabilities.HasDetailedTitleDisplay) shortname = service_item.shortname if shortname: for bitem in items: @@ -275,12 +276,13 @@ class PresentationMediaItem(MediaManagerItem): return True else: # File is no longer present - critical_error_message_box( - translate('PresentationPlugin.MediaItem', - 'Missing Presentation'), - unicode(translate('PresentationPlugin.MediaItem', - 'The Presentation %s is incomplete,' - ' please reload.')) % filename) + if not remote: + critical_error_message_box( + translate('PresentationPlugin.MediaItem', + 'Missing Presentation'), + unicode(translate('PresentationPlugin.MediaItem', + 'The Presentation %s is incomplete,' + ' please reload.')) % filename) return False else: # File is no longer present diff --git a/openlp/plugins/remotes/lib/httpserver.py b/openlp/plugins/remotes/lib/httpserver.py index 1545986f0..c81c83d92 100644 --- a/openlp/plugins/remotes/lib/httpserver.py +++ b/openlp/plugins/remotes/lib/httpserver.py @@ -528,7 +528,7 @@ class HttpConnection(object): id = json.loads(self.url_params[u'data'][0])[u'request'][u'id'] plugin = self.parent.plugin.pluginManager.get_plugin_by_name(type) if plugin.status == PluginStatus.Active and plugin.mediaItem: - plugin.mediaItem.goLive(id) + plugin.mediaItem.goLive(id, remote=True) def add_to_service(self, type): """ @@ -538,7 +538,7 @@ class HttpConnection(object): plugin = self.parent.plugin.pluginManager.get_plugin_by_name(type) if plugin.status == PluginStatus.Active and plugin.mediaItem: item_id = plugin.mediaItem.createItemFromId(id) - plugin.mediaItem.addToService(item_id) + plugin.mediaItem.addToService(item_id, remote=True) def send_response(self, response): http = u'HTTP/1.1 %s\r\n' % response.code diff --git a/openlp/plugins/songs/forms/__init__.py b/openlp/plugins/songs/forms/__init__.py index 0c2434275..d82e3dea3 100644 --- a/openlp/plugins/songs/forms/__init__.py +++ b/openlp/plugins/songs/forms/__init__.py @@ -52,6 +52,7 @@ them separate from the functionality, so that it is easier to recreate the GUI from the .ui files later if necessary. """ +from mediafilesform import MediaFilesForm from authorsform import AuthorsForm from topicsform import TopicsForm from songbookform import SongBookForm diff --git a/openlp/plugins/songs/forms/editsongdialog.py b/openlp/plugins/songs/forms/editsongdialog.py index 26c799c00..469716f6b 100644 --- a/openlp/plugins/songs/forms/editsongdialog.py +++ b/openlp/plugins/songs/forms/editsongdialog.py @@ -28,7 +28,8 @@ from PyQt4 import QtCore, QtGui from openlp.core.lib import build_icon, translate -from openlp.core.lib.ui import UiStrings, create_accept_reject_button_box +from openlp.core.lib.ui import UiStrings, create_accept_reject_button_box, \ + create_up_down_push_button_set from openlp.plugins.songs.lib.ui import SongStrings class Ui_EditSongDialog(object): @@ -36,9 +37,11 @@ class Ui_EditSongDialog(object): editSongDialog.setObjectName(u'editSongDialog') editSongDialog.resize(650, 400) editSongDialog.setWindowIcon( - build_icon(u':/icon/openlp.org-icon-32.bmp')) + build_icon(u':/icon/openlp-logo-16x16.png')) editSongDialog.setModal(True) self.dialogLayout = QtGui.QVBoxLayout(editSongDialog) + self.dialogLayout.setSpacing(8) + self.dialogLayout.setContentsMargins(8, 8, 8, 8) self.dialogLayout.setObjectName(u'dialogLayout') self.songTabWidget = QtGui.QTabWidget(editSongDialog) self.songTabWidget.setObjectName(u'songTabWidget') @@ -246,6 +249,36 @@ class Ui_EditSongDialog(object): self.commentsLayout.addWidget(self.commentsEdit) self.themeTabLayout.addWidget(self.commentsGroupBox) self.songTabWidget.addTab(self.themeTab, u'') + # audio tab + self.audioTab = QtGui.QWidget() + self.audioTab.setObjectName(u'audioTab') + self.audioLayout = QtGui.QHBoxLayout(self.audioTab) + self.audioLayout.setObjectName(u'audioLayout') + self.audioListWidget = QtGui.QListWidget(self.audioTab) + self.audioListWidget.setObjectName(u'audioListWidget') + self.audioLayout.addWidget(self.audioListWidget) + self.audioButtonsLayout = QtGui.QVBoxLayout() + self.audioButtonsLayout.setObjectName(u'audioButtonsLayout') + self.audioAddFromFileButton = QtGui.QPushButton(self.audioTab) + self.audioAddFromFileButton.setObjectName(u'audioAddFromFileButton') + self.audioButtonsLayout.addWidget(self.audioAddFromFileButton) + self.audioAddFromMediaButton = QtGui.QPushButton(self.audioTab) + self.audioAddFromMediaButton.setObjectName(u'audioAddFromMediaButton') + self.audioButtonsLayout.addWidget(self.audioAddFromMediaButton) + self.audioRemoveButton = QtGui.QPushButton(self.audioTab) + self.audioRemoveButton.setObjectName(u'audioRemoveButton') + self.audioButtonsLayout.addWidget(self.audioRemoveButton) + self.audioRemoveAllButton = QtGui.QPushButton(self.audioTab) + self.audioRemoveAllButton.setObjectName(u'audioRemoveAllButton') + self.audioButtonsLayout.addWidget(self.audioRemoveAllButton) + self.audioButtonsLayout.addStretch(1) + self.upButton, self.downButton = \ + create_up_down_push_button_set(self) + self.audioButtonsLayout.addWidget(self.upButton) + self.audioButtonsLayout.addWidget(self.downButton) + self.audioLayout.addLayout(self.audioButtonsLayout) + self.songTabWidget.addTab(self.audioTab, u'') + # Last few bits self.dialogLayout.addWidget(self.songTabWidget) self.buttonBox = create_accept_reject_button_box(editSongDialog) self.dialogLayout.addWidget(self.buttonBox) @@ -305,6 +338,17 @@ class Ui_EditSongDialog(object): self.songTabWidget.indexOf(self.themeTab), translate('SongsPlugin.EditSongForm', 'Theme, Copyright Info && Comments')) + self.songTabWidget.setTabText( + self.songTabWidget.indexOf(self.audioTab), + translate('SongsPlugin.EditSongForm', 'Linked Audio')) + self.audioAddFromFileButton.setText( + translate('SongsPlugin.EditSongForm', 'Add &File(s)')) + self.audioAddFromMediaButton.setText( + translate('SongsPlugin.EditSongForm', 'Add &Media')) + self.audioRemoveButton.setText( + translate('SongsPlugin.EditSongForm', '&Remove')) + self.audioRemoveAllButton.setText( + translate('SongsPlugin.EditSongForm', 'Remove &All')) def editSongDialogComboBox(parent, name): """ diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index c7dbf85cf..146ef0422 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -27,15 +27,18 @@ import logging import re +import os +import shutil from PyQt4 import QtCore, QtGui -from openlp.core.lib import Receiver, translate +from openlp.core.lib import PluginStatus, Receiver, MediaType, translate from openlp.core.lib.ui import UiStrings, add_widget_completer, \ critical_error_message_box, find_and_set_in_combo_box -from openlp.plugins.songs.forms import EditVerseForm +from openlp.core.utils import AppLocation +from openlp.plugins.songs.forms import EditVerseForm, MediaFilesForm from openlp.plugins.songs.lib import SongXML, VerseType, clean_song -from openlp.plugins.songs.lib.db import Book, Song, Author, Topic +from openlp.plugins.songs.lib.db import Book, Song, Author, Topic, MediaFile from openlp.plugins.songs.lib.ui import SongStrings from editsongdialog import Ui_EditSongDialog @@ -93,6 +96,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.mediaitem.plugin.renderer.themeManager.onAddTheme) QtCore.QObject.connect(self.maintenanceButton, QtCore.SIGNAL(u'clicked()'), self.onMaintenanceButtonClicked) + QtCore.QObject.connect(self.audioAddFromFileButton, + QtCore.SIGNAL(u'clicked()'), self.onAudioAddFromFileButtonClicked) + QtCore.QObject.connect(self.audioAddFromMediaButton, + QtCore.SIGNAL(u'clicked()'), self.onAudioAddFromMediaButtonClicked) + QtCore.QObject.connect(self.audioRemoveButton, + QtCore.SIGNAL(u'clicked()'), self.onAudioRemoveButtonClicked) + QtCore.QObject.connect(self.audioRemoveAllButton, + QtCore.SIGNAL(u'clicked()'), self.onAudioRemoveAllButtonClicked) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'theme_update_list'), self.loadThemes) self.previewButton = QtGui.QPushButton() @@ -104,12 +115,14 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): QtCore.SIGNAL(u'clicked(QAbstractButton*)'), self.onPreview) # Create other objects and forms self.manager = manager - self.verse_form = EditVerseForm(self) + self.verseForm = EditVerseForm(self) + self.mediaForm = MediaFilesForm(self) self.initialise() self.authorsListView.setSortingEnabled(False) self.authorsListView.setAlternatingRowColors(True) self.topicsListView.setSortingEnabled(False) self.topicsListView.setAlternatingRowColors(True) + self.audioListWidget.setAlternatingRowColors(True) self.findVerseSplit = re.compile(u'---\[\]---\n', re.UNICODE) self.whitespace = re.compile(r'\W+', re.UNICODE) @@ -161,6 +174,16 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.themes.append(theme) add_widget_completer(self.themes, self.themeComboBox) + def loadMediaFiles(self): + self.audioAddFromMediaButton.setVisible(False) + for plugin in self.parent().pluginManager.plugins: + if plugin.name == u'media' and \ + plugin.status == PluginStatus.Active: + self.audioAddFromMediaButton.setVisible(True) + self.mediaForm.populateFiles( + plugin.getMediaManagerItem().getList(MediaType.Audio)) + break + def newSong(self): log.debug(u'New Song') self.song = None @@ -176,11 +199,13 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verseListWidget.setRowCount(0) self.authorsListView.clear() self.topicsListView.clear() + self.audioListWidget.clear() self.titleEdit.setFocus(QtCore.Qt.OtherFocusReason) self.songBookNumberEdit.setText(u'') self.loadAuthors() self.loadTopics() self.loadBooks() + self.loadMediaFiles() self.themeComboBox.setCurrentIndex(0) # it's a new song to preview is not possible self.previewButton.setVisible(False) @@ -201,6 +226,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.loadAuthors() self.loadTopics() self.loadBooks() + self.loadMediaFiles() self.song = self.manager.get_object(Song, id) self.titleEdit.setText(self.song.title) if self.song.alternate_title: @@ -303,6 +329,11 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): topic_name = QtGui.QListWidgetItem(unicode(topic.name)) topic_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(topic.id)) self.topicsListView.addItem(topic_name) + self.audioListWidget.clear() + for media in self.song.media_files: + media_file = QtGui.QListWidgetItem(os.path.split(media.file_name)[1]) + media_file.setData(QtCore.Qt.UserRole, QtCore.QVariant(media.file_name)) + self.audioListWidget.addItem(media_file) self.titleEdit.setFocus(QtCore.Qt.OtherFocusReason) # Hide or show the preview button. self.previewButton.setVisible(preview) @@ -436,9 +467,9 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.verseDeleteButton.setEnabled(True) def onVerseAddButtonClicked(self): - self.verse_form.setVerse(u'', True) - if self.verse_form.exec_(): - after_text, verse_tag, verse_num = self.verse_form.getVerse() + self.verseForm.setVerse(u'', True) + if self.verseForm.exec_(): + after_text, verse_tag, verse_num = self.verseForm.getVerse() verse_def = u'%s%s' % (verse_tag, verse_num) item = QtGui.QTableWidgetItem(after_text) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) @@ -454,20 +485,21 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if item: tempText = item.text() verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) - self.verse_form.setVerse(tempText, True, verseId) - if self.verse_form.exec_(): - after_text, verse_tag, verse_num = self.verse_form.getVerse() + self.verseForm.setVerse(tempText, True, verseId) + if self.verseForm.exec_(): + after_text, verse_tag, verse_num = self.verseForm.getVerse() verse_def = u'%s%s' % (verse_tag, verse_num) item.setData(QtCore.Qt.UserRole, QtCore.QVariant(verse_def)) item.setText(after_text) - # number of lines has change so repaint the list moving the data + # number of lines has changed, repaint the list moving the data if len(tempText.split(u'\n')) != len(after_text.split(u'\n')): tempList = {} tempId = {} for row in range(0, self.verseListWidget.rowCount()): - tempList[row] = self.verseListWidget.item(row, 0).text() - tempId[row] = self.verseListWidget.item(row, 0).\ - data(QtCore.Qt.UserRole) + tempList[row] = self.verseListWidget.item(row, 0)\ + .text() + tempId[row] = self.verseListWidget.item(row, 0)\ + .data(QtCore.Qt.UserRole) self.verseListWidget.clear() for row in range (0, len(tempList)): item = QtGui.QTableWidgetItem(tempList[row], 0) @@ -486,12 +518,12 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): verse_list += u'---[%s:%s]---\n' % (verse_tag, verse_num) verse_list += item.text() verse_list += u'\n' - self.verse_form.setVerse(verse_list) + self.verseForm.setVerse(verse_list) else: - self.verse_form.setVerse(u'') - if not self.verse_form.exec_(): + self.verseForm.setVerse(u'') + if not self.verseForm.exec_(): return - verse_list = self.verse_form.getVerseAll() + verse_list = self.verseForm.getVerseAll() verse_list = unicode(verse_list.replace(u'\r\n', u'\n')) self.verseListWidget.clear() self.verseListWidget.setRowCount(0) @@ -670,6 +702,66 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.saveSong(True) Receiver.send_message(u'songs_preview') + def onAudioAddFromFileButtonClicked(self): + """ + Loads file(s) from the filesystem. + """ + filters = u'%s (*)' % UiStrings().AllFiles + filenames = QtGui.QFileDialog.getOpenFileNames(self, + translate('SongsPlugin.EditSongForm', 'Open File(s)'), + QtCore.QString(), filters) + for filename in filenames: + item = QtGui.QListWidgetItem(os.path.split(unicode(filename))[1]) + item.setData(QtCore.Qt.UserRole, filename) + self.audioListWidget.addItem(item) + + def onAudioAddFromMediaButtonClicked(self): + """ + Loads file(s) from the media plugin. + """ + if self.mediaForm.exec_(): + for filename in self.mediaForm.getSelectedFiles(): + item = QtGui.QListWidgetItem(os.path.split(unicode(filename))[1]) + item.setData(QtCore.Qt.UserRole, filename) + self.audioListWidget.addItem(item) + + def onAudioRemoveButtonClicked(self): + """ + Removes a file from the list. + """ + row = self.audioListWidget.currentRow() + if row == -1: + return + self.audioListWidget.takeItem(row) + + def onAudioRemoveAllButtonClicked(self): + """ + Removes all files from the list. + """ + self.audioListWidget.clear() + + def onUpButtonClicked(self): + """ + Moves a file up when the user clicks the up button on the audio tab. + """ + row = self.audioListWidget.currentRow() + if row <= 0: + return + item = self.audioListWidget.takeItem(row) + self.audioListWidget.insertItem(row - 1, item) + self.audioListWidget.setCurrentRow(row - 1) + + def onDownButtonClicked(self): + """ + Moves a file down when the user clicks the up button on the audio tab. + """ + row = self.audioListWidget.currentRow() + if row == -1 or row > self.audioListWidget.count() - 1: + return + item = self.audioListWidget.takeItem(row) + self.audioListWidget.insertItem(row + 1, item) + self.audioListWidget.setCurrentRow(row + 1) + def clearCaches(self): """ Free up autocompletion memory on dialog exit @@ -744,18 +836,55 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): self.song.theme_name = None self._processLyrics() self.song.authors = [] - for row in range(self.authorsListView.count()): + for row in xrange(self.authorsListView.count()): item = self.authorsListView.item(row) authorId = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.song.authors.append(self.manager.get_object(Author, authorId)) self.song.topics = [] - for row in range(self.topicsListView.count()): + for row in xrange(self.topicsListView.count()): item = self.topicsListView.item(row) topicId = (item.data(QtCore.Qt.UserRole)).toInt()[0] self.song.topics.append(self.manager.get_object(Topic, topicId)) + # Save the song here because we need a valid id for the audio files. clean_song(self.manager, self.song) self.manager.save_object(self.song) - self.mediaitem.auto_select_id = self.song.id + audio_files = map(lambda a: a.file_name, self.song.media_files) + log.debug(audio_files) + save_path = os.path.join( + AppLocation.get_section_data_path(self.mediaitem.plugin.name), + 'audio', str(self.song.id)) + if not os.path.exists(save_path): + os.makedirs(save_path) + self.song.media_files = [] + files = [] + for row in xrange(self.audioListWidget.count()): + item = self.audioListWidget.item(row) + filename = unicode(item.data(QtCore.Qt.UserRole).toString()) + if not filename.startswith(save_path): + oldfile, filename = filename, os.path.join(save_path, + os.path.split(filename)[1]) + shutil.copyfile(oldfile, filename) + files.append(filename) + media_file = MediaFile() + media_file.file_name = filename + media_file.type = u'audio' + media_file.weight = row + self.song.media_files.append(media_file) + for audio in audio_files: + if audio not in files: + try: + os.remove(audio) + except: + log.exception('Could not remove file: %s', audio) + pass + if not files: + try: + os.rmdir(save_path) + except OSError: + log.exception(u'Could not remove directory: %s', save_path) + clean_song(self.manager, self.song) + self.manager.save_object(self.song) + self.mediaitem.autoSelectId = self.song.id def _processLyrics(self): """ @@ -783,3 +912,4 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): except: log.exception(u'Problem processing song Lyrics \n%s', sxml.dump_xml()) + diff --git a/openlp/plugins/songs/forms/mediafilesdialog.py b/openlp/plugins/songs/forms/mediafilesdialog.py new file mode 100644 index 000000000..252dac5ff --- /dev/null +++ b/openlp/plugins/songs/forms/mediafilesdialog.py @@ -0,0 +1,75 @@ +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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, build_icon + +class Ui_MediaFilesDialog(object): + def setupUi(self, mediaFilesDialog): + mediaFilesDialog.setObjectName(u'mediaFilesDialog') + mediaFilesDialog.setWindowModality(QtCore.Qt.ApplicationModal) + mediaFilesDialog.resize(400, 300) + mediaFilesDialog.setModal(True) + mediaFilesDialog.setWindowIcon( + build_icon(u':/icon/openlp-logo-16x16.png')) + self.filesVerticalLayout = QtGui.QVBoxLayout(mediaFilesDialog) + self.filesVerticalLayout.setSpacing(8) + self.filesVerticalLayout.setMargin(8) + self.filesVerticalLayout.setObjectName(u'filesVerticalLayout') + self.selectLabel = QtGui.QLabel(mediaFilesDialog) + self.selectLabel.setWordWrap(True) + self.selectLabel.setObjectName(u'selectLabel') + self.filesVerticalLayout.addWidget(self.selectLabel) + self.fileListWidget = QtGui.QListWidget(mediaFilesDialog) + self.fileListWidget.setAlternatingRowColors(True) + self.fileListWidget.setSelectionMode( + QtGui.QAbstractItemView.ExtendedSelection) + self.fileListWidget.setObjectName(u'fileListWidget') + self.filesVerticalLayout.addWidget(self.fileListWidget) + self.buttonBox = QtGui.QDialogButtonBox(mediaFilesDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons( + QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok) + self.buttonBox.setObjectName(u'buttonBox') + self.filesVerticalLayout.addWidget(self.buttonBox) + + self.retranslateUi(mediaFilesDialog) + QtCore.QObject.connect(self.buttonBox, + QtCore.SIGNAL(u'accepted()'), mediaFilesDialog.accept) + QtCore.QObject.connect(self.buttonBox, + QtCore.SIGNAL(u'rejected()'), mediaFilesDialog.reject) + QtCore.QMetaObject.connectSlotsByName(mediaFilesDialog) + + def retranslateUi(self, mediaFilesDialog): + mediaFilesDialog.setWindowTitle( + translate('SongsPlugin.MediaFilesForm', 'Select Media File(s)')) + self.selectLabel.setText( + translate('SongsPlugin.MediaFilesForm', u'Select one or more ' + 'audio files from the list below, and click OK to import them ' + 'into this song.')) + diff --git a/openlp/plugins/songs/forms/mediafilesform.py b/openlp/plugins/songs/forms/mediafilesform.py new file mode 100644 index 000000000..34dac0390 --- /dev/null +++ b/openlp/plugins/songs/forms/mediafilesform.py @@ -0,0 +1,57 @@ +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### + +import logging +import os + +from PyQt4 import QtCore, QtGui + +from mediafilesdialog import Ui_MediaFilesDialog + +log = logging.getLogger(__name__) + +class MediaFilesForm(QtGui.QDialog, Ui_MediaFilesDialog): + """ + Class to show a list of files from the + """ + log.info(u'%s MediaFilesForm loaded', __name__) + + def __init__(self, parent): + QtGui.QDialog.__init__(self) + self.setupUi(self) + + def populateFiles(self, files): + self.fileListWidget.clear() + for file in files: + item = QtGui.QListWidgetItem(os.path.split(file)[1]) + item.setData(QtCore.Qt.UserRole, file) + self.fileListWidget.addItem(item) + + def getSelectedFiles(self): + return map(lambda x: unicode(x.data(QtCore.Qt.UserRole).toString()), + self.fileListWidget.selectedItems()) + diff --git a/openlp/plugins/songs/forms/songexportform.py b/openlp/plugins/songs/forms/songexportform.py index 90c3b0275..22020a401 100644 --- a/openlp/plugins/songs/forms/songexportform.py +++ b/openlp/plugins/songs/forms/songexportform.py @@ -170,8 +170,8 @@ class SongExportForm(OpenLPWizard): translate('OpenLP.Ui', 'Welcome to the Song Export Wizard')) self.informationLabel.setText( translate('SongsPlugin.ExportWizardForm', 'This wizard will help to' - ' export your songs to the open and free OpenLyrics worship song ' - 'format.')) + ' export your songs to the open and free OpenLyrics' + ' worship song format.')) self.availableSongsPage.setTitle( translate('SongsPlugin.ExportWizardForm', 'Select Songs')) self.availableSongsPage.setSubTitle( @@ -285,7 +285,9 @@ class SongExportForm(OpenLPWizard): self, songs, unicode(self.directoryLineEdit.text())) if exporter.do_export(): self.progressLabel.setText( - translate('SongsPlugin.SongExportForm', 'Finished export.')) + translate('SongsPlugin.SongExportForm', 'Finished export. To ' + 'import these files use the OpenLyrics ' + 'importer.')) else: self.progressLabel.setText( translate('SongsPlugin.SongExportForm', diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 52524b838..6f09c9b8c 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -686,7 +686,7 @@ class SongImportForm(OpenLPWizard): def performWizard(self): """ Perform the actual import. This method pulls in the correct importer - class, and then runs the ``do_import`` method of the importer to do + class, and then runs the ``doImport`` method of the importer to do the actual importing. """ source_format = self.formatComboBox.currentIndex() @@ -759,8 +759,8 @@ class SongImportForm(OpenLPWizard): importer = self.plugin.importSongs(SongFormat.FoilPresenter, filenames=self.getListOfFiles(self.foilPresenterFileListWidget) ) - importer.do_import() - if importer.error_log: + importer.doImport() + if importer.errorLog: self.progressLabel.setText(translate( 'SongsPlugin.SongImportForm', 'Your song import failed.')) else: diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index e2996ff8f..1b0ca316e 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -184,10 +184,11 @@ class VerseType(object): verse_index = VerseType.from_translated_string(verse_name) if verse_index is None: verse_index = VerseType.from_string(verse_name) - if verse_index is None: - verse_index = VerseType.from_translated_tag(verse_name) - if verse_index is None: - verse_index = VerseType.from_tag(verse_name) + elif len(verse_name) == 1: + if verse_index is None: + verse_index = VerseType.from_translated_tag(verse_name) + if verse_index is None: + verse_index = VerseType.from_tag(verse_name) return verse_index def retrieve_windows_encoding(recommendation=None): diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 0ce9488c2..e15f898ab 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -55,13 +55,13 @@ class CCLIFileImport(SongImport): """ SongImport.__init__(self, manager, **kwargs) - def do_import(self): + def doImport(self): """ Import either a ``.usr`` or a ``.txt`` SongSelect file. """ log.debug(u'Starting CCLI File Import') - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for filename in self.import_source: + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for filename in self.importSource: filename = unicode(filename) log.debug(u'Importing CCLI File: %s', filename) lines = [] @@ -80,23 +80,23 @@ class CCLIFileImport(SongImport): ext = os.path.splitext(filename)[1] if ext.lower() == u'.usr': log.info(u'SongSelect .usr format file found: %s', filename) - if not self.do_import_usr_file(lines): - self.log_error(filename) + if not self.doImportUsrFile(lines): + self.logError(filename) elif ext.lower() == u'.txt': log.info(u'SongSelect .txt format file found: %s', filename) - if not self.do_import_txt_file(lines): - self.log_error(filename) + if not self.doImportTxtFile(lines): + self.logError(filename) else: - self.log_error(filename, + self.logError(filename, translate('SongsPlugin.CCLIFileImport', 'The file does not have a valid extension.')) log.info(u'Extension %s is not valid', filename) - if self.stop_import_flag: + if self.stopImportFlag: return - def do_import_usr_file(self, textList): + def doImportUsrFile(self, textList): """ - The :func:`do_import_usr_file` method provides OpenLP with the ability + The :func:`doImport_usr_file` method provides OpenLP with the ability to import CCLI SongSelect songs in *USR* file format. ``textList`` @@ -165,7 +165,7 @@ class CCLIFileImport(SongImport): elif line.startswith(u'Themes='): song_topics = line[7:].strip() elif line.startswith(u'[S A'): - self.ccli_number = line[4:-3].strip() + self.ccliNumber = line[4:-3].strip() elif line.startswith(u'Fields='): # Fields contain single line indicating verse, chorus, etc, # /t delimited, same as with words field. store seperately @@ -204,7 +204,7 @@ class CCLIFileImport(SongImport): verse_type = VerseType.Tags[VerseType.Other] verse_text = verse_lines[1] if len(verse_text) > 0: - self.add_verse(verse_text, verse_type) + self.addVerse(verse_text, verse_type) check_first_verse_line = False # Handle multiple authors author_list = song_author.split(u'/') @@ -213,15 +213,15 @@ class CCLIFileImport(SongImport): for author in author_list: separated = author.split(u',') if len(separated) > 1: - self.add_author(u' '.join(reversed(separated))) + self.addAuthor(u' '.join(reversed(separated))) else: - self.add_author(author) + self.addAuthor(author) self.topics = [topic.strip() for topic in song_topics.split(u'/t')] return self.finish() - def do_import_txt_file(self, textList): + def doImportTxtFile(self, textList): """ - The :func:`do_import_txt_file` method provides OpenLP with the ability + The :func:`doImport_txt_file` method provides OpenLP with the ability to import CCLI SongSelect songs in *TXT* file format. ``textList`` @@ -264,7 +264,7 @@ class CCLIFileImport(SongImport): continue elif verse_start: if verse_text: - self.add_verse(verse_text, verse_type) + self.addVerse(verse_text, verse_type) verse_text = u'' verse_start = False else: @@ -278,7 +278,7 @@ class CCLIFileImport(SongImport): if clean_line.startswith(u'CCLI'): line_number += 1 ccli_parts = clean_line.split(' ') - self.ccli_number = ccli_parts[len(ccli_parts) - 1] + self.ccliNumber = ccli_parts[len(ccli_parts) - 1] elif not verse_start: # We have the verse descriptor verse_desc_parts = clean_line.split(u' ') @@ -333,5 +333,5 @@ class CCLIFileImport(SongImport): if len(author_list) < 2: author_list = song_author.split(u'|') # Clean spaces before and after author names. - [self.add_author(author_name.strip()) for author_name in author_list] + [self.addAuthor(author_name.strip()) for author_name in author_list] return self.finish() diff --git a/openlp/plugins/songs/lib/db.py b/openlp/plugins/songs/lib/db.py index c5c019c3c..37ee42451 100644 --- a/openlp/plugins/songs/lib/db.py +++ b/openlp/plugins/songs/lib/db.py @@ -31,6 +31,7 @@ the Songs plugin from sqlalchemy import Column, ForeignKey, Table, types from sqlalchemy.orm import mapper, relation +from sqlalchemy.sql.expression import func from openlp.core.lib.db import BaseModel, init_db @@ -70,7 +71,6 @@ class Topic(BaseModel): """ pass - def init_schema(url): """ Setup the songs database connection and initialise the database schema. @@ -111,10 +111,6 @@ def init_schema(url): * file_name * type - **media_files_songs Table** - * media_file_id - * song_id - **song_books Table** The *song_books* table holds a list of books that a congregation gets their songs from, or old hymnals now no longer used. This table has the @@ -162,7 +158,7 @@ def init_schema(url): # Definition of the "authors" table authors_table = Table(u'authors', metadata, - Column(u'id', types.Integer, primary_key=True), + Column(u'id', types.Integer(), primary_key=True), Column(u'first_name', types.Unicode(128)), Column(u'last_name', types.Unicode(128)), Column(u'display_name', types.Unicode(255), index=True, nullable=False) @@ -170,22 +166,25 @@ def init_schema(url): # Definition of the "media_files" table media_files_table = Table(u'media_files', metadata, - Column(u'id', types.Integer, primary_key=True), + Column(u'id', types.Integer(), primary_key=True), + Column(u'song_id', types.Integer(), ForeignKey(u'songs.id'), + default=None), Column(u'file_name', types.Unicode(255), nullable=False), - Column(u'type', types.Unicode(64), nullable=False, default=u'audio') + Column(u'type', types.Unicode(64), nullable=False, default=u'audio'), + Column(u'weight', types.Integer(), default=0) ) # Definition of the "song_books" table song_books_table = Table(u'song_books', metadata, - Column(u'id', types.Integer, primary_key=True), + Column(u'id', types.Integer(), primary_key=True), Column(u'name', types.Unicode(128), nullable=False), Column(u'publisher', types.Unicode(128)) ) # Definition of the "songs" table songs_table = Table(u'songs', metadata, - Column(u'id', types.Integer, primary_key=True), - Column(u'song_book_id', types.Integer, + Column(u'id', types.Integer(), primary_key=True), + Column(u'song_book_id', types.Integer(), ForeignKey(u'song_books.id'), default=None), Column(u'title', types.Unicode(255), nullable=False), Column(u'alternate_title', types.Unicode(255)), @@ -197,36 +196,31 @@ def init_schema(url): Column(u'song_number', types.Unicode(64)), Column(u'theme_name', types.Unicode(128)), Column(u'search_title', types.Unicode(255), index=True, nullable=False), - Column(u'search_lyrics', types.UnicodeText, nullable=False) + Column(u'search_lyrics', types.UnicodeText, nullable=False), + Column(u'create_date', types.DateTime(), default=func.now()), + Column(u'last_modified', types.DateTime(), default=func.now(), + onupdate=func.now()) ) # Definition of the "topics" table topics_table = Table(u'topics', metadata, - Column(u'id', types.Integer, primary_key=True), + Column(u'id', types.Integer(), primary_key=True), Column(u'name', types.Unicode(128), index=True, nullable=False) ) # Definition of the "authors_songs" table authors_songs_table = Table(u'authors_songs', metadata, - Column(u'author_id', types.Integer, + Column(u'author_id', types.Integer(), ForeignKey(u'authors.id'), primary_key=True), - Column(u'song_id', types.Integer, - ForeignKey(u'songs.id'), primary_key=True) - ) - - # Definition of the "media_files_songs" table - media_files_songs_table = Table(u'media_files_songs', metadata, - Column(u'media_file_id', types.Integer, - ForeignKey(u'media_files.id'), primary_key=True), - Column(u'song_id', types.Integer, + Column(u'song_id', types.Integer(), ForeignKey(u'songs.id'), primary_key=True) ) # Definition of the "songs_topics" table songs_topics_table = Table(u'songs_topics', metadata, - Column(u'song_id', types.Integer, + Column(u'song_id', types.Integer(), ForeignKey(u'songs.id'), primary_key=True), - Column(u'topic_id', types.Integer, + Column(u'topic_id', types.Integer(), ForeignKey(u'topics.id'), primary_key=True) ) @@ -239,7 +233,7 @@ def init_schema(url): secondary=authors_songs_table, lazy=False), 'book': relation(Book, backref='songs'), 'media_files': relation(MediaFile, backref='songs', - secondary=media_files_songs_table), + order_by=media_files_table.c.weight), 'topics': relation(Topic, backref='songs', secondary=songs_topics_table) }) diff --git a/openlp/plugins/songs/lib/easislidesimport.py b/openlp/plugins/songs/lib/easislidesimport.py index b24287130..6d3bde025 100644 --- a/openlp/plugins/songs/lib/easislidesimport.py +++ b/openlp/plugins/songs/lib/easislidesimport.py @@ -49,50 +49,50 @@ class EasiSlidesImport(SongImport): SongImport.__init__(self, manager, **kwargs) self.commit = True - def do_import(self): + def doImport(self): """ - Import either each of the files in self.import_sources - each element of + Import either each of the files in self.importSources - each element of which can be either a single opensong file, or a zipfile containing multiple opensong files. If `self.commit` is set False, the import will not be committed to the database (useful for test scripts). """ - log.info(u'Importing EasiSlides XML file %s', self.import_source) + log.info(u'Importing EasiSlides XML file %s', self.importSource) parser = etree.XMLParser(remove_blank_text=True) - parsed_file = etree.parse(self.import_source, parser) + parsed_file = etree.parse(self.importSource, parser) xml = unicode(etree.tostring(parsed_file)) song_xml = objectify.fromstring(xml) - self.import_wizard.progressBar.setMaximum(len(song_xml.Item)) + self.importWizard.progressBar.setMaximum(len(song_xml.Item)) for song in song_xml.Item: - if self.stop_import_flag: + if self.stopImportFlag: return - self._parse_song(song) + self._parseSong(song) - def _parse_song(self, song): + def _parseSong(self, song): self._success = True - self._add_unicode_attribute(u'title', song.Title1, True) + self._addUnicodeAttribute(u'title', song.Title1, True) if hasattr(song, u'Title2'): - self._add_unicode_attribute(u'alternate_title', song.Title2) + self._addUnicodeAttribute(u'alternateTitle', song.Title2) if hasattr(song, u'SongNumber'): - self._add_unicode_attribute(u'song_number', song.SongNumber) - if self.song_number == u'0': - self.song_number = u'' - self._add_authors(song) + self._addUnicodeAttribute(u'songNumber', song.SongNumber) + if self.songNumber == u'0': + self.songNumber = u'' + self._addAuthors(song) if hasattr(song, u'Copyright'): - self._add_copyright(song.Copyright) + self._addCopyright(song.Copyright) if hasattr(song, u'LicenceAdmin1'): - self._add_copyright(song.LicenceAdmin1) + self._addCopyright(song.LicenceAdmin1) if hasattr(song, u'LicenceAdmin2'): - self._add_copyright(song.LicenceAdmin2) + self._addCopyright(song.LicenceAdmin2) if hasattr(song, u'BookReference'): - self._add_unicode_attribute(u'song_book_name', song.BookReference) - self._parse_and_add_lyrics(song) + self._addUnicodeAttribute(u'songBookName', song.BookReference) + self._parseAndAddLyrics(song) if self._success: if not self.finish(): - self.log_error(song.Title1 if song.Title1 else u'') + self.logError(song.Title1 if song.Title1 else u'') else: - self.set_defaults() + self.setDefaults() - def _add_unicode_attribute(self, self_attribute, import_attribute, + def _addUnicodeAttribute(self, self_attribute, import_attribute, mandatory=False): """ Add imported values to the song model converting them to unicode at the @@ -119,7 +119,7 @@ class EasiSlidesImport(SongImport): if mandatory: self._success = False - def _add_authors(self, song): + def _addAuthors(self, song): try: authors = unicode(song.Writer).split(u',') self.authors = \ @@ -130,7 +130,7 @@ class EasiSlidesImport(SongImport): except AttributeError: pass - def _add_copyright(self, element): + def _addCopyright(self, element): """ Add a piece of copyright to the total copyright information for the song. @@ -139,14 +139,14 @@ class EasiSlidesImport(SongImport): The imported variable to get the data from. """ try: - self.add_copyright(unicode(element).strip()) + self.addCopyright(unicode(element).strip()) except UnicodeDecodeError: log.exception(u'Unicode error on decoding copyright: %s' % element) self._success = False except AttributeError: pass - def _parse_and_add_lyrics(self, song): + def _parseAndAddLyrics(self, song): try: lyrics = unicode(song.Contents).strip() except UnicodeDecodeError: @@ -295,7 +295,7 @@ class EasiSlidesImport(SongImport): else: continue if tag in versetags: - self.verse_order_list.append(tag) + self.verseOrderList.append(tag) else: log.info(u'Got order item %s, which is not in versetags,' u'dropping item from presentation order', tag) diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index 820cf595a..e89fbc4a0 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -49,15 +49,15 @@ def strip_rtf(blob, encoding): control = False clear_text = [] control_word = [] - - # workaround for \tx bug: remove one pair of curly braces + + # workaround for \tx bug: remove one pair of curly braces # if \tx is encountered match = RTF_STRIPPING_REGEX.search(blob) if match: # start and end indices of match are curly braces - filter them out - blob = ''.join([blob[i] for i in xrange(len(blob)) + blob = ''.join([blob[i] for i in xrange(len(blob)) if i != match.start() and i !=match.end()]) - + for c in blob: if control: # for delimiters, set control to False @@ -155,24 +155,24 @@ class EasyWorshipSongImport(SongImport): def __init__(self, manager, **kwargs): SongImport.__init__(self, manager, **kwargs) - def do_import(self): + def doImport(self): # Open the DB and MB files if they exist - import_source_mb = self.import_source.replace('.DB', '.MB') - if not os.path.isfile(self.import_source): + import_source_mb = self.importSource.replace('.DB', '.MB') + if not os.path.isfile(self.importSource): return if not os.path.isfile(import_source_mb): return - db_size = os.path.getsize(self.import_source) + db_size = os.path.getsize(self.importSource) if db_size < 0x800: return - db_file = open(self.import_source, 'rb') - self.memo_file = open(import_source_mb, 'rb') + db_file = open(self.importSource, 'rb') + self.memoFile = open(import_source_mb, 'rb') # Don't accept files that are clearly not paradox files record_size, header_size, block_size, first_block, num_fields \ = struct.unpack(' 4: db_file.close() - self.memo_file.close() + self.memoFile.close() return # Take a stab at how text is encoded self.encoding = u'cp1252' @@ -204,7 +204,7 @@ class EasyWorshipSongImport(SongImport): # There does not appear to be a _reliable_ way of getting the number # of songs/records, so let's use file blocks for measuring progress. total_blocks = (db_size - header_size) / (block_size * 1024) - self.import_wizard.progressBar.setMaximum(total_blocks) + self.importWizard.progressBar.setMaximum(total_blocks) # Read the field description information db_file.seek(120) field_info = db_file.read(num_fields * 2) @@ -218,16 +218,16 @@ class EasyWorshipSongImport(SongImport): field_info, i * 2) field_descs.append(FieldDescEntry(field_name, field_type, field_size)) - self.set_record_struct(field_descs) + self.setRecordStruct(field_descs) # Pick out the field description indexes we will need try: success = True - fi_title = self.find_field(u'Title') - fi_author = self.find_field(u'Author') - fi_copy = self.find_field(u'Copyright') - fi_admin = self.find_field(u'Administrator') - fi_words = self.find_field(u'Words') - fi_ccli = self.find_field(u'Song Number') + fi_title = self.findField(u'Title') + fi_author = self.findField(u'Author') + fi_copy = self.findField(u'Copyright') + fi_admin = self.findField(u'Administrator') + fi_words = self.findField(u'Words') + fi_ccli = self.findField(u'Song Number') except IndexError: # This is the wrong table success = False @@ -239,18 +239,18 @@ class EasyWorshipSongImport(SongImport): rec_count = (rec_count + record_size) / record_size # Loop through each record within the current block for i in range(rec_count): - if self.stop_import_flag: + if self.stopImportFlag: break raw_record = db_file.read(record_size) self.fields = self.record_struct.unpack(raw_record) - self.set_defaults() - self.title = self.get_field(fi_title) + self.setDefaults() + self.title = self.getField(fi_title) # Get remaining fields. - copy = self.get_field(fi_copy) - admin = self.get_field(fi_admin) - ccli = self.get_field(fi_ccli) - authors = self.get_field(fi_author) - words = self.get_field(fi_words) + copy = self.getField(fi_copy) + admin = self.getField(fi_admin) + ccli = self.getField(fi_ccli) + authors = self.getField(fi_author) + words = self.getField(fi_words) # Set the SongImport object members. if copy: self.copyright = copy @@ -261,7 +261,7 @@ class EasyWorshipSongImport(SongImport): unicode(translate('SongsPlugin.EasyWorshipSongImport', 'Administered by %s')) % admin if ccli: - self.ccli_number = ccli + self.ccliNumber = ccli if authors: # Split up the authors author_list = authors.split(u'/') @@ -270,7 +270,7 @@ class EasyWorshipSongImport(SongImport): if len(author_list) < 2: author_list = authors.split(u',') for author_name in author_list: - self.add_author(author_name.strip()) + self.addAuthor(author_name.strip()) if words: # Format the lyrics words = strip_rtf(words, self.encoding) @@ -281,9 +281,9 @@ class EasyWorshipSongImport(SongImport): continue verse_split = verse.split(u'\n', 1) first_line_is_tag = False - # EW tags: verse, chorus, pre-chorus, bridge, tag, + # EW tags: verse, chorus, pre-chorus, bridge, tag, # intro, ending, slide - for type in VerseType.Names+[u'tag', u'slide']: + for type in VerseType.Names+[u'tag', u'slide']: type = type.lower() ew_tag = verse_split[0].strip().lower() if ew_tag.startswith(type): @@ -293,7 +293,7 @@ class EasyWorshipSongImport(SongImport): first_line_is_tag = True number_found = False # check if tag is followed by number and/or note - if len(ew_tag) > len(type): + if len(ew_tag) > len(type): match = NUMBER_REGEX.search(ew_tag) if match: number = match.group() @@ -305,23 +305,24 @@ class EasyWorshipSongImport(SongImport): if not number_found: verse_type += u'1' break - self.add_verse( - verse_split[-1].strip() if first_line_is_tag else verse, + self.addVerse( + verse_split[-1].strip() \ + if first_line_is_tag else verse, verse_type) if len(self.comments) > 5: self.comments += unicode( translate('SongsPlugin.EasyWorshipSongImport', '\n[above are Song Tags with notes imported from \ EasyWorship]')) - if self.stop_import_flag: + if self.stopImportFlag: break if not self.finish(): - self.log_error(self.import_source) + self.logError(self.importSource) db_file.close() - self.memo_file.close() + self.memoFile.close() def find_field(self, field_name): - return [i for i, x in enumerate(self.field_descs) + return [i for i, x in enumerate(self.fieldDescs) if x.name == field_name][0] def set_record_struct(self, field_descs): @@ -351,12 +352,12 @@ class EasyWorshipSongImport(SongImport): fsl.append('Q') else: fsl.append('%ds' % field_desc.size) - self.record_struct = struct.Struct(''.join(fsl)) - self.field_descs = field_descs + self.recordStruct = struct.Struct(''.join(fsl)) + self.fieldDescs = field_descs def get_field(self, field_desc_index): field = self.fields[field_desc_index] - field_desc = self.field_descs[field_desc_index] + field_desc = self.fieldDescs[field_desc_index] # Return None in case of 'blank' entries if isinstance(field, str): if len(field.rstrip('\0')) == 0: @@ -382,18 +383,18 @@ class EasyWorshipSongImport(SongImport): struct.unpack_from(' 63: return u'' - self.memo_file.seek(11 + (5 * sub_block), os.SEEK_CUR) - sub_block_start, = struct.unpack('B', self.memo_file.read(1)) - self.memo_file.seek(block_start + (sub_block_start * 16)) + self.memoFile.seek(11 + (5 * sub_block), os.SEEK_CUR) + sub_block_start, = struct.unpack('B', self.memoFile.read(1)) + self.memoFile.seek(block_start + (sub_block_start * 16)) else: return u'' - return self.memo_file.read(blob_size) + return self.memoFile.read(blob_size) else: return 0 diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index 4d3aa0982..90ffde8a0 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -115,23 +115,23 @@ class FoilPresenterImport(SongImport): SongImport.__init__(self, manager, **kwargs) self.FoilPresenter = FoilPresenter(self.manager) - def do_import(self): + def doImport(self): """ Imports the songs. """ - self.import_wizard.progressBar.setMaximum(len(self.import_source)) + self.importWizard.progressBar.setMaximum(len(self.importSource)) parser = etree.XMLParser(remove_blank_text=True) - for file_path in self.import_source: - if self.stop_import_flag: + for file_path in self.importSource: + if self.stopImportFlag: return - self.import_wizard.incrementProgressBar( + self.importWizard.incrementProgressBar( WizardStrings.ImportingType % os.path.basename(file_path)) try: parsed_file = etree.parse(file_path, parser) xml = unicode(etree.tostring(parsed_file)) self.FoilPresenter.xml_to_song(xml) except etree.XMLSyntaxError: - self.log_error(file_path, SongStrings.XMLSyntaxError) + self.logError(file_path, SongStrings.XMLSyntaxError) log.exception(u'XML syntax error in file %s' % file_path) diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index a2814a1df..7d5e85af5 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -28,6 +28,8 @@ import logging import locale import re +import os +import shutil from PyQt4 import QtCore, QtGui from sqlalchemy.sql import or_ @@ -37,11 +39,12 @@ from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \ from openlp.core.lib.searchedit import SearchEdit from openlp.core.lib.ui import UiStrings, context_menu_action, \ context_menu_separator +from openlp.core.utils import AppLocation from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \ SongImportForm, SongExportForm from openlp.plugins.songs.lib import OpenLyrics, SongXML, VerseType, \ clean_string -from openlp.plugins.songs.lib.db import Author, Song +from openlp.plugins.songs.lib.db import Author, Song, MediaFile from openlp.plugins.songs.lib.ui import SongStrings log = logging.getLogger(__name__) @@ -66,11 +69,11 @@ class SongMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'songs/song' MediaManagerItem.__init__(self, parent, plugin, icon) - self.edit_song_form = EditSongForm(self, self.plugin.formparent, + self.editSongForm = EditSongForm(self, self.plugin.formparent, self.plugin.manager) self.openLyrics = OpenLyrics(self.plugin.manager) self.singleServiceItem = False - self.song_maintenance_form = SongMaintenanceForm( + self.songMaintenanceForm = SongMaintenanceForm( self.plugin.manager, self) # Holds information about whether the edit is remotly triggered and # which Song is required. @@ -79,6 +82,22 @@ class SongMediaItem(MediaManagerItem): self.quickPreviewAllowed = True self.hasSearch = True + def _updateBackgroundAudio(self, song, item): + song.media_files = [] + for i, bga in enumerate(item.background_audio): + dest_file = os.path.join( + AppLocation.get_section_data_path(self.plugin.name), + u'audio', str(song.id), os.path.split(bga)[1]) + if not os.path.exists(os.path.split(dest_file)[0]): + os.makedirs(os.path.split(dest_file)[0]) + shutil.copyfile(os.path.join( + AppLocation.get_section_data_path( + u'servicemanager'), bga), + dest_file) + song.media_files.append(MediaFile.populate( + weight=i, file_name=dest_file)) + self.plugin.manager.save_object(song, True) + def addEndHeaderBar(self): self.addToolbarSeparator() ## Song Maintenance Button ## @@ -210,7 +229,7 @@ class SongMediaItem(MediaManagerItem): search_results = self.plugin.manager.get_all_objects(Song, Song.theme_name.like(u'%' + search_keywords + u'%')) self.displayResultsSong(search_results) - self.check_search_result() + self.checkSearchResult() def searchEntire(self, search_keywords): return self.plugin.manager.get_all_objects(Song, @@ -244,7 +263,7 @@ class SongMediaItem(MediaManagerItem): def displayResultsSong(self, searchresults): log.debug(u'display results Song') - self.save_auto_select_id() + self.saveAutoSelectId() self.listView.clear() # Sort the songs by its title considering language specific characters. # lower() is needed for windows! @@ -258,9 +277,9 @@ class SongMediaItem(MediaManagerItem): song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) self.listView.addItem(song_name) # Auto-select the item if name has been set - if song.id == self.auto_select_id: + if song.id == self.autoSelectId: self.listView.setCurrentItem(song_name) - self.auto_select_id = -1 + self.autoSelectId = -1 def displayResultsAuthor(self, searchresults): log.debug(u'display results Author') @@ -297,25 +316,26 @@ class SongMediaItem(MediaManagerItem): self.onClearTextButtonClick() def onImportClick(self): - if not hasattr(self, u'import_wizard'): - self.import_wizard = SongImportForm(self, self.plugin) - if self.import_wizard.exec_() == QtGui.QDialog.Accepted: + if not hasattr(self, u'importWizard'): + self.importWizard = SongImportForm(self, self.plugin) + if self.importWizard.exec_() == QtGui.QDialog.Accepted: Receiver.send_message(u'songs_load_list') def onExportClick(self): - export_wizard = SongExportForm(self, self.plugin) - export_wizard.exec_() + if not hasattr(self, u'exportWizard'): + self.exportWizard = SongExportForm(self, self.plugin) + self.exportWizard.exec_() def onNewClick(self): log.debug(u'onNewClick') - self.edit_song_form.newSong() - self.edit_song_form.exec_() + self.editSongForm.newSong() + self.editSongForm.exec_() self.onClearTextButtonClick() self.onSelectionChange() - self.auto_select_id = -1 + self.autoSelectId = -1 def onSongMaintenanceClick(self): - self.song_maintenance_form.exec_() + self.songMaintenanceForm.exec_() def onRemoteEditClear(self): log.debug(u'onRemoteEditClear') @@ -335,9 +355,9 @@ class SongMediaItem(MediaManagerItem): if valid: self.remoteSong = song_id self.remoteTriggered = remote_type - self.edit_song_form.loadSong(song_id, (remote_type == u'P')) - self.edit_song_form.exec_() - self.auto_select_id = -1 + self.editSongForm.loadSong(song_id, remote_type == u'P') + self.editSongForm.exec_() + self.autoSelectId = -1 self.onSongListLoad() def onEditClick(self): @@ -348,9 +368,9 @@ class SongMediaItem(MediaManagerItem): if check_item_selected(self.listView, UiStrings().SelectEdit): self.editItem = self.listView.currentItem() item_id = (self.editItem.data(QtCore.Qt.UserRole)).toInt()[0] - self.edit_song_form.loadSong(item_id, False) - self.edit_song_form.exec_() - self.auto_select_id = -1 + self.editSongForm.loadSong(item_id, False) + self.editSongForm.exec_() + self.autoSelectId = -1 self.onSongListLoad() self.editItem = None @@ -371,6 +391,20 @@ class SongMediaItem(MediaManagerItem): return for item in items: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] + media_files = self.plugin.manager.get_all_objects(MediaFile, + MediaFile.song_id == item_id) + for media_file in media_files: + try: + os.remove(media_file.file_name) + except: + log.exception('Could not remove file: %s', audio) + try: + save_path = os.path.join(AppLocation.get_section_data_path( + self.plugin.name), 'audio', str(item_id)) + if os.path.exists(save_path): + os.rmdir(save_path) + except OSError: + log.exception(u'Could not remove directory: %s', save_path) self.plugin.manager.delete_object(Song, item_id) self.onSearchTextButtonClick() @@ -392,15 +426,16 @@ class SongMediaItem(MediaManagerItem): self.plugin.manager.save_object(new_song) self.onSongListLoad() - def generateSlideData(self, service_item, item=None, xmlVersion=False): + def generateSlideData(self, service_item, item=None, xmlVersion=False, + remote=False): log.debug(u'generateSlideData (%s:%s)' % (service_item, item)) item_id = self._getIdOfItemToGenerate(item, self.remoteSong) - service_item.add_capability(ItemCapabilities.AllowsEdit) - service_item.add_capability(ItemCapabilities.AllowsPreview) - service_item.add_capability(ItemCapabilities.AllowsLoop) + service_item.add_capability(ItemCapabilities.CanEdit) + service_item.add_capability(ItemCapabilities.CanPreview) + service_item.add_capability(ItemCapabilities.CanLoop) service_item.add_capability(ItemCapabilities.OnLoadUpdate) service_item.add_capability(ItemCapabilities.AddIfNewItem) - service_item.add_capability(ItemCapabilities.AllowsVirtualSplit) + service_item.add_capability(ItemCapabilities.CanSoftBreak) song = self.plugin.manager.get_object(Song, item_id) service_item.theme = song.theme_name service_item.edit_id = item_id @@ -471,6 +506,10 @@ class SongMediaItem(MediaManagerItem): service_item.data_string = {u'title': song.search_title, u'authors': u', '.join(author_list)} service_item.xml_version = self.openLyrics.song_to_xml(song) + # Add the audio file to the service item. + if len(song.media_files) > 0: + service_item.add_capability(ItemCapabilities.HasBackgroundAudio) + service_item.background_audio = [m.file_name for m in song.media_files] return True def serviceLoad(self, item): @@ -510,8 +549,15 @@ class SongMediaItem(MediaManagerItem): add_song = False editId = song.id break + # If there's any backing tracks, copy them over. + if len(item.background_audio) > 0: + self._updateBackgroundAudio(song, item) if add_song and self.addSongFromService: - editId = self.openLyrics.xml_to_song(item.xml_version) + song = self.openLyrics.xml_to_song(item.xml_version) + # If there's any backing tracks, copy them over. + if len(item.background_audio) > 0: + self._updateBackgroundAudio(song, item) + editId = song.id self.onSearchTextButtonClick() # Update service with correct song id. if editId: diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index de7264a5b..72bd5f952 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -32,6 +32,8 @@ openlp.org 1.x song databases into the current installation database. import logging from chardet.universaldetector import UniversalDetector import sqlite +import sys +import os from openlp.core.lib import translate from openlp.plugins.songs.lib import retrieve_windows_encoding @@ -44,7 +46,7 @@ class OpenLP1SongImport(SongImport): The :class:`OpenLP1SongImport` class provides OpenLP with the ability to import song databases from installations of openlp.org 1.x. """ - last_encoding = u'windows-1252' + lastEncoding = u'windows-1252' def __init__(self, manager, **kwargs): """ @@ -57,23 +59,23 @@ class OpenLP1SongImport(SongImport): The database providing the data to import. """ SongImport.__init__(self, manager, **kwargs) - self.available_themes = \ + self.availableThemes = \ kwargs[u'plugin'].formparent.themeManagerContents.getThemes() - def do_import(self): + def doImport(self): """ Run the import for an openlp.org 1.x song database. """ - if not self.import_source.endswith(u'.olp'): - self.log_error(self.import_source, + if not self.importSource.endswith(u'.olp'): + self.logError(self.importSource, translate('SongsPlugin.OpenLP1SongImport', 'Not a valid openlp.org 1.x song database.')) return - encoding = self.get_encoding() + encoding = self.getEncoding() if not encoding: return # Connect to the database. - connection = sqlite.connect(self.import_source, mode=0444, + connection = sqlite.connect(self.importSource, mode=0444, encoding=(encoding, 'replace')) cursor = connection.cursor() # Determine if we're using a new or an old DB. @@ -94,64 +96,66 @@ class OpenLP1SongImport(SongImport): cursor.execute(u'SELECT settingsid, settingsname FROM settings') themes = {} for theme_id, theme_name in cursor.fetchall(): - if theme_name in self.available_themes: + if theme_name in self.availableThemes: themes[theme_id] = theme_name # Import the songs. cursor.execute(u'-- types int, unicode, unicode, unicode, int') cursor.execute(u'SELECT songid, songtitle, lyrics || \'\' AS lyrics, ' u'copyrightinfo, settingsid FROM songs') songs = cursor.fetchall() - self.import_wizard.progressBar.setMaximum(len(songs)) + self.importWizard.progressBar.setMaximum(len(songs)) for song in songs: - self.set_defaults() - if self.stop_import_flag: + self.setDefaults() + if self.stopImportFlag: break song_id = song[0] self.title = song[1] lyrics = song[2].replace(u'\r\n', u'\n') - self.add_copyright(song[3]) + self.addCopyright(song[3]) if themes.has_key(song[4]): - self.theme_name = themes[song[4]] + self.themeName = themes[song[4]] verses = lyrics.split(u'\n\n') for verse in verses: if verse.strip(): - self.add_verse(verse.strip()) + self.addVerse(verse.strip()) cursor.execute(u'-- types int') cursor.execute(u'SELECT authorid FROM songauthors ' u'WHERE songid = %s' % song_id) author_ids = cursor.fetchall() for author_id in author_ids: - if self.stop_import_flag: + if self.stopImportFlag: break for author in authors: if author[0] == author_id[0]: - self.parse_author(author[1]) + self.parseAuthor(author[1]) break - if self.stop_import_flag: + if self.stopImportFlag: break if new_db: - cursor.execute(u'-- types int') - cursor.execute(u'SELECT trackid FROM songtracks ' + cursor.execute(u'-- types int, int') + cursor.execute(u'SELECT trackid, listindex ' + u'FROM songtracks ' u'WHERE songid = %s ORDER BY listindex' % song_id) track_ids = cursor.fetchall() - for track_id in track_ids: - if self.stop_import_flag: + for track_id, listindex in track_ids: + if self.stopImportFlag: break for track in tracks: - if track[0] == track_id[0]: - self.add_media_file(track[1]) + if track[0] == track_id: + media_file = self.expandMediaFile(track[1]) + self.addMediaFile(media_file, listindex) break - if self.stop_import_flag: + if self.stopImportFlag: break if not self.finish(): - self.log_error(self.import_source) + self.logError(self.importSource) - def get_encoding(self): + def getEncoding(self): """ Detect character encoding of an openlp.org 1.x song database. """ # Connect to the database. - connection = sqlite.connect(self.import_source, mode=0444) + connection = sqlite.connect(self.importSource, mode=0444) cursor = connection.cursor() detector = UniversalDetector() @@ -186,3 +190,22 @@ class OpenLP1SongImport(SongImport): return detector.result[u'encoding'] detector.close() return retrieve_windows_encoding(detector.result[u'encoding']) + + def expandMediaFile(self, filename): + """ + When you're on Windows, this function expands the file name to include + the path to OpenLP's application data directory. If you are not on + Windows, it returns the original file name. + + ``filename`` + The filename to expand. + """ + if sys.platform != u'win32' and \ + not os.environ.get(u'ALLUSERSPROFILE') and \ + not os.environ.get(u'APPDATA'): + return filename + common_app_data = os.path.join(os.environ[u'ALLUSERSPROFILE'], + os.path.split(os.environ[u'APPDATA'])[1]) + if not common_app_data: + return filename + return os.path.join(common_app_data, u'openlp.org', 'Audio', filename) diff --git a/openlp/plugins/songs/lib/olpimport.py b/openlp/plugins/songs/lib/olpimport.py index 6bb08a19a..7d2558ce8 100644 --- a/openlp/plugins/songs/lib/olpimport.py +++ b/openlp/plugins/songs/lib/olpimport.py @@ -95,22 +95,22 @@ class OpenLPSongImport(SongImport): The database providing the data to import. """ SongImport.__init__(self, manager, **kwargs) - self.source_session = None + self.sourceSession = None - def do_import(self): + def doImport(self): """ Run the import for an OpenLP version 2 song database. """ - if not self.import_source.endswith(u'.sqlite'): - self.log_error(self.import_source, + if not self.importSource.endswith(u'.sqlite'): + self.logError(self.importSource, translate('SongsPlugin.OpenLPSongImport', 'Not a valid OpenLP 2.0 song database.')) return - self.import_source = u'sqlite:///%s' % self.import_source - engine = create_engine(self.import_source) + self.importSource = u'sqlite:///%s' % self.importSource + engine = create_engine(self.importSource) source_meta = MetaData() source_meta.reflect(engine) - self.source_session = scoped_session(sessionmaker(bind=engine)) + self.sourceSession = scoped_session(sessionmaker(bind=engine)) if u'media_files' in source_meta.tables.keys(): has_media_files = True else: @@ -156,9 +156,9 @@ class OpenLPSongImport(SongImport): except UnmappedClassError: mapper(OldTopic, source_topics_table) - source_songs = self.source_session.query(OldSong).all() - if self.import_wizard: - self.import_wizard.progressBar.setMaximum(len(source_songs)) + source_songs = self.sourceSession.query(OldSong).all() + if self.importWizard: + self.importWizard.progressBar.setMaximum(len(source_songs)) for song in source_songs: new_song = Song() new_song.title = song.title @@ -201,22 +201,22 @@ class OpenLPSongImport(SongImport): if existing_topic is None: existing_topic = Topic.populate(name=topic.name) new_song.topics.append(existing_topic) -# if has_media_files: -# if song.media_files: -# for media_file in song.media_files: -# existing_media_file = \ -# self.manager.get_object_filtered(MediaFile, -# MediaFile.file_name == media_file.file_name) -# if existing_media_file: -# new_song.media_files.append(existing_media_file) -# else: -# new_song.media_files.append(MediaFile.populate( -# file_name=media_file.file_name)) + if has_media_files: + if song.media_files: + for media_file in song.media_files: + existing_media_file = \ + self.manager.get_object_filtered(MediaFile, + MediaFile.file_name == media_file.file_name) + if existing_media_file: + new_song.media_files.append(existing_media_file) + else: + new_song.media_files.append(MediaFile.populate( + file_name=media_file.file_name)) clean_song(self.manager, new_song) self.manager.save_object(new_song) - if self.import_wizard: - self.import_wizard.incrementProgressBar( + if self.importWizard: + self.importWizard.incrementProgressBar( WizardStrings.ImportingType % new_song.title) - if self.stop_import_flag: + if self.stopImportFlag: break engine.dispose() diff --git a/openlp/plugins/songs/lib/oooimport.py b/openlp/plugins/songs/lib/oooimport.py index ba442bb35..4a97e43b0 100644 --- a/openlp/plugins/songs/lib/oooimport.py +++ b/openlp/plugins/songs/lib/oooimport.py @@ -59,58 +59,58 @@ class OooImport(SongImport): """ SongImport.__init__(self, manager, **kwargs) self.document = None - self.process_started = False + self.processStarted = False - def do_import(self): - if not isinstance(self.import_source, list): + def doImport(self): + if not isinstance(self.importSource, list): return try: self.start_ooo() except NoConnectException as exc: - self.log_error( - self.import_source[0], + self.logError( + self.importSource[0], translate('SongsPlugin.SongImport', 'Cannot access OpenOffice or LibreOffice')) log.error(exc) return - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for filename in self.import_source: - if self.stop_import_flag: + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for filename in self.importSource: + if self.stopImportFlag: break filename = unicode(filename) if os.path.isfile(filename): - self.open_ooo_file(filename) + self.openOooFile(filename) if self.document: - self.process_ooo_document() - self.close_ooo_file() + self.processOooDocument() + self.closeOooFile() else: - self.log_error(self.filepath, + self.logError(self.filepath, translate('SongsPlugin.SongImport', 'Unable to open file')) else: - self.log_error(self.filepath, + self.logError(self.filepath, translate('SongsPlugin.SongImport', 'File not found')) - self.close_ooo() + self.closeOoo() - def process_ooo_document(self): + def processOooDocument(self): """ Handle the import process for OpenOffice files. This method facilitates allowing subclasses to handle specific types of OpenOffice files. """ if self.document.supportsService( "com.sun.star.presentation.PresentationDocument"): - self.process_pres() + self.processPres() if self.document.supportsService("com.sun.star.text.TextDocument"): - self.process_doc() + self.processDoc() - def start_ooo(self): + def startOoo(self): """ Start OpenOffice.org process TODO: The presentation/Impress plugin may already have it running """ if os.name == u'nt': - self.start_ooo_process() - self.desktop = self.ooo_manager.createInstance( + self.startOooProcess() + self.desktop = self.oooManager.createInstance( u'com.sun.star.frame.Desktop') else: context = uno.getComponentContext() @@ -123,7 +123,7 @@ class OooImport(SongImport): uno_instance = get_uno_instance(resolver) except NoConnectException: log.exception("Failed to resolve uno connection") - self.start_ooo_process() + self.startOooProcess() loop += 1 else: manager = uno_instance.ServiceManager @@ -132,22 +132,22 @@ class OooImport(SongImport): return raise - def start_ooo_process(self): + def startOooProcess(self): try: if os.name == u'nt': - self.ooo_manager = Dispatch(u'com.sun.star.ServiceManager') - self.ooo_manager._FlagAsMethod(u'Bridge_GetStruct') - self.ooo_manager._FlagAsMethod(u'Bridge_GetValueObject') + self.oooManager = Dispatch(u'com.sun.star.ServiceManager') + self.oooManager._FlagAsMethod(u'Bridge_GetStruct') + self.oooManager._FlagAsMethod(u'Bridge_GetValueObject') else: cmd = get_uno_command() process = QtCore.QProcess() process.startDetached(cmd) process.waitForStarted() - self.process_started = True + self.processStarted = True except: log.exception("start_ooo_process failed") - def open_ooo_file(self, filepath): + def openOooFile(self, filepath): """ Open the passed file in OpenOffice.org Impress """ @@ -166,29 +166,29 @@ class OooImport(SongImport): if not self.document.supportsService( "com.sun.star.presentation.PresentationDocument") and not \ self.document.supportsService("com.sun.star.text.TextDocument"): - self.close_ooo_file() + self.closeOooFile() else: - self.import_wizard.incrementProgressBar( + self.importWizard.incrementProgressBar( u'Processing file ' + filepath, 0) except AttributeError: log.exception("open_ooo_file failed: %s", url) return - def close_ooo_file(self): + def closeOooFile(self): """ Close file. """ self.document.close(True) self.document = None - def close_ooo(self): + def closeOoo(self): """ Close OOo. But only if we started it and not on windows """ - if self.process_started: + if self.processStarted: self.desktop.terminate() - def process_pres(self): + def processPres(self): """ Process the file """ @@ -196,8 +196,8 @@ class OooImport(SongImport): slides = doc.getDrawPages() text = u'' for slide_no in range(slides.getCount()): - if self.stop_import_flag: - self.import_wizard.incrementProgressBar(u'Import cancelled', 0) + if self.stopImportFlag: + self.importWizard.incrementProgressBar(u'Import cancelled', 0) return slide = slides.getByIndex(slide_no) slidetext = u'' @@ -209,10 +209,10 @@ class OooImport(SongImport): if slidetext.strip() == u'': slidetext = u'\f' text += slidetext - self.process_songs_text(text) + self.processSongsText(text) return - def process_doc(self): + def processDoc(self): """ Process the doc file, a paragraph at a time """ @@ -231,16 +231,16 @@ class OooImport(SongImport): if textportion.BreakType in (PAGE_AFTER, PAGE_BOTH): paratext += u'\f' text += paratext + u'\n' - self.process_songs_text(text) + self.processSongsText(text) - def process_songs_text(self, text): - songtexts = self.tidy_text(text).split(u'\f') - self.set_defaults() + def processSongsText(self, text): + songtexts = self.tidyText(text).split(u'\f') + self.setDefaults() for songtext in songtexts: if songtext.strip(): - self.process_song_text(songtext.strip()) - if self.check_complete(): + self.processSongText(songtext.strip()) + if self.checkComplete(): self.finish() - self.set_defaults() - if self.check_complete(): + self.setDefaults() + if self.checkComplete(): self.finish() diff --git a/openlp/plugins/songs/lib/openlyricsimport.py b/openlp/plugins/songs/lib/openlyricsimport.py index b46383772..f3639fc3b 100644 --- a/openlp/plugins/songs/lib/openlyricsimport.py +++ b/openlp/plugins/songs/lib/openlyricsimport.py @@ -53,16 +53,16 @@ class OpenLyricsImport(SongImport): SongImport.__init__(self, manager, **kwargs) self.openLyrics = OpenLyrics(self.manager) - def do_import(self): + def doImport(self): """ Imports the songs. """ - self.import_wizard.progressBar.setMaximum(len(self.import_source)) + self.importWizard.progressBar.setMaximum(len(self.importSource)) parser = etree.XMLParser(remove_blank_text=True) - for file_path in self.import_source: - if self.stop_import_flag: + for file_path in self.importSource: + if self.stopImportFlag: return - self.import_wizard.incrementProgressBar( + self.importWizard.incrementProgressBar( WizardStrings.ImportingType % os.path.basename(file_path)) try: # Pass a file object, because lxml does not cope with some @@ -72,4 +72,4 @@ class OpenLyricsImport(SongImport): self.openLyrics.xml_to_song(xml) except etree.XMLSyntaxError: log.exception(u'XML syntax error in file %s' % file_path) - self.log_error(file_path, SongStrings.XMLSyntaxError) + self.logError(file_path, SongStrings.XMLSyntaxError) diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index 7fca88262..da5809095 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -107,32 +107,32 @@ class OpenSongImport(SongImport): """ SongImport.__init__(self, manager, **kwargs) - def do_import(self): - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for filename in self.import_source: - if self.stop_import_flag: + def doImport(self): + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for filename in self.importSource: + if self.stopImportFlag: return song_file = open(filename) - self.do_import_file(song_file) + self.doImportFile(song_file) song_file.close() - def do_import_file(self, file): + def doImportFile(self, file): """ Process the OpenSong file - pass in a file-like object, not a file path. """ - self.set_defaults() + self.setDefaults() try: tree = objectify.parse(file) except (Error, LxmlError): - self.log_error(file.name, SongStrings.XMLSyntaxError) + self.logError(file.name, SongStrings.XMLSyntaxError) log.exception(u'Error parsing XML') return root = tree.getroot() fields = dir(root) decode = { - u'copyright': self.add_copyright, + u'copyright': self.addCopyright, u'ccli': u'ccli_number', - u'author': self.parse_author, + u'author': self.parseAuthor, u'title': u'title', u'aka': u'alternate_title', u'hymn_number': u'song_number' @@ -190,7 +190,10 @@ class OpenSongImport(SongImport): # the verse tag verse_tag = content verse_num = u'1' - verse_index = VerseType.from_loose_input(verse_tag) + if len(verse_tag) == 0: + verse_index = 0 + else: + verse_index = VerseType.from_loose_input(verse_tag) verse_tag = VerseType.Tags[verse_index] inst = 1 if [verse_tag, verse_num, inst] in our_verse_order \ @@ -211,7 +214,7 @@ class OpenSongImport(SongImport): verses[verse_tag][verse_num][inst] = [] our_verse_order.append([verse_tag, verse_num, inst]) # Tidy text and remove the ____s from extended words - this_line = self.tidy_text(this_line) + this_line = self.tidyText(this_line) this_line = this_line.replace(u'_', u'') this_line = this_line.replace(u'|', u'\n') verses[verse_tag][verse_num][inst].append(this_line) @@ -220,9 +223,9 @@ class OpenSongImport(SongImport): for (verse_tag, verse_num, inst) in our_verse_order: verse_def = u'%s%s' % (verse_tag, verse_num) lines = u'\n'.join(verses[verse_tag][verse_num][inst]) - self.add_verse(lines, verse_def) + self.addVerse(lines, verse_def) if not self.verses: - self.add_verse('') + self.addVerse('') # figure out the presentation order, if present if u'presentation' in fields and root.presentation: order = unicode(root.presentation) @@ -243,9 +246,9 @@ class OpenSongImport(SongImport): verse_def = u'%s%s' % (verse_tag, verse_num) if verses.has_key(verse_tag) and \ verses[verse_tag].has_key(verse_num): - self.verse_order_list.append(verse_def) + self.verseOrderList.append(verse_def) else: log.info(u'Got order %s but not in verse tags, dropping' u'this item from presentation order', verse_def) if not self.finish(): - self.log_error(file.name) + self.logError(file.name) diff --git a/openlp/plugins/songs/lib/sofimport.py b/openlp/plugins/songs/lib/sofimport.py index e0134f282..6294f211e 100644 --- a/openlp/plugins/songs/lib/sofimport.py +++ b/openlp/plugins/songs/lib/sofimport.py @@ -83,32 +83,32 @@ class SofImport(OooImport): OooImport.__init__(self, manager, **kwargs) self.song = False - def process_ooo_document(self): + def processOooDocument(self): """ Handle the import process for SoF files. """ - self.process_sof_file() + self.processSofFile() - def process_sof_file(self): + def processSofFile(self): """ Process the RTF file, a paragraph at a time """ - self.blanklines = 0 - self.new_song() + self.blankLines = 0 + self.newSong() try: paragraphs = self.document.getText().createEnumeration() while paragraphs.hasMoreElements(): - if self.stop_import_flag: + if self.stopImportFlag: return paragraph = paragraphs.nextElement() if paragraph.supportsService("com.sun.star.text.Paragraph"): - self.process_paragraph(paragraph) + self.processParagraph(paragraph) except RuntimeException as exc: log.exception(u'Error processing file: %s', exc) if not self.finish(): - self.log_error(self.filepath) + self.logError(self.filepath) - def process_paragraph(self, paragraph): + def processParagraph(self, paragraph): """ Process a paragraph. In the first book, a paragraph is a single line. In the latter ones @@ -124,26 +124,26 @@ class SofImport(OooImport): while textportions.hasMoreElements(): textportion = textportions.nextElement() if textportion.BreakType in (PAGE_BEFORE, PAGE_BOTH): - self.process_paragraph_text(text) - self.new_song() + self.processParagraphText(text) + self.newSong() text = u'' text += self.process_textportion(textportion) if textportion.BreakType in (PAGE_AFTER, PAGE_BOTH): - self.process_paragraph_text(text) - self.new_song() + self.processParagraphText(text) + self.newSong() text = u'' - self.process_paragraph_text(text) + self.processParagraphText(text) - def process_paragraph_text(self, text): + def processParagraphText(self, text): """ Split the paragraph text into multiple lines and process """ for line in text.split(u'\n'): - self.process_paragraph_line(line) - if self.blanklines > 2: - self.new_song() + self.processParagraphLine(line) + if self.blankLines > 2: + self.newSong() - def process_paragraph_line(self, text): + def processParagraphLine(self, text): """ Process a single line. Throw away that text which isn't relevant, i.e. stuff that appears at the end of the song. @@ -151,16 +151,16 @@ class SofImport(OooImport): """ text = text.strip() if text == u'': - self.blanklines += 1 - if self.blanklines > 1: + self.blankLines += 1 + if self.blankLines > 1: return if self.title != u'': - self.finish_verse() + self.finishVerse() return - self.blanklines = 0 - if self.skip_to_close_bracket: + self.blankLines = 0 + if self.skipToCloseBracket: if text.endswith(u')'): - self.skip_to_close_bracket = False + self.skipToCloseBracket = False return if text.startswith(u'CCL Licence'): self.italics = False @@ -169,24 +169,24 @@ class SofImport(OooImport): return if text.startswith(u'(NB.') or text.startswith(u'(Regrettably') \ or text.startswith(u'(From'): - self.skip_to_close_bracket = True + self.skipToCloseBracket = True return if text.startswith(u'Copyright'): - self.add_copyright(text) + self.addCopyright(text) return if text == u'(Repeat)': - self.finish_verse() - self.repeat_verse() + self.finishVerse() + self.repeatVerse() return if self.title == u'': if self.copyright == u'': - self.add_sof_author(text) + self.addSofAuthor(text) else: - self.add_copyright(text) + self.addCopyright(text) return - self.add_verse_line(text) + self.addVerseLine(text) - def process_textportion(self, textportion): + def processTextPortion(self, textportion): """ Process a text portion. Here we just get the text and detect if it's bold or italics. If it's bold then its a song number or song title. @@ -199,53 +199,53 @@ class SofImport(OooImport): return text if textportion.CharWeight == BOLD: boldtext = text.strip() - if boldtext.isdigit() and self.song_number == '': - self.add_songnumber(boldtext) + if boldtext.isdigit() and self.songNumber == '': + self.addSongNumber(boldtext) return u'' if self.title == u'': text = self.uncap_text(text) - self.add_title(text) + self.addTitle(text) return text if text.strip().startswith(u'('): return text self.italics = (textportion.CharPosture == ITALIC) return text - def new_song(self): + def newSong(self): """ A change of song. Store the old, create a new ... but only if the last song was complete. If not, stick with it """ if self.song: - self.finish_verse() - if not self.check_complete(): + self.finishVerse() + if not self.checkComplete(): return self.finish() self.song = True - self.set_defaults() - self.skip_to_close_bracket = False - self.is_chorus = False + self.setDefaults() + self.skipToCloseBracket = False + self.isChorus = False self.italics = False - self.currentverse = u'' + self.currentVerse = u'' - def add_songnumber(self, song_no): + def addSongNumber(self, song_no): """ Add a song number, store as alternate title. Also use the song number to work out which songbook we're in """ - self.song_number = song_no - self.alternate_title = song_no + u'.' - self.song_book_pub = u'Kingsway Publications' + self.songNumber = song_no + self.alternateTitle = song_no + u'.' + self.songBook_pub = u'Kingsway Publications' if int(song_no) <= 640: - self.song_book = u'Songs of Fellowship 1' + self.songBook = u'Songs of Fellowship 1' elif int(song_no) <= 1150: - self.song_book = u'Songs of Fellowship 2' + self.songBook = u'Songs of Fellowship 2' elif int(song_no) <= 1690: - self.song_book = u'Songs of Fellowship 3' + self.songBook = u'Songs of Fellowship 3' else: - self.song_book = u'Songs of Fellowship 4' + self.songBook = u'Songs of Fellowship 4' - def add_title(self, text): + def addTitle(self, text): """ Add the title to the song. Strip some leading/trailing punctuation that we don't want in a title @@ -256,9 +256,9 @@ class SofImport(OooImport): if title.endswith(u','): title = title[:-1] self.title = title - self.import_wizard.incrementProgressBar(u'Processing song ' + title, 0) + self.importWizard.incrementProgressBar(u'Processing song ' + title, 0) - def add_sof_author(self, text): + def addSofAuthor(self, text): """ Add the author. OpenLP stores them individually so split by 'and', '&' and comma. @@ -266,42 +266,42 @@ class SofImport(OooImport): "Mr Smith" and "Mrs Smith". """ text = text.replace(u' and ', u' & ') - self.parse_author(text) + self.parseAuthor(text) - def add_verse_line(self, text): + def addVerseLine(self, text): """ Add a line to the current verse. If the formatting has changed and 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.verses) > 0) or - (self.currentverse.count(u'\n') > 1)): - self.finish_verse() + if self.italics != self.isChorus and ((len(self.verses) > 0) or + (self.currentVerse.count(u'\n') > 1)): + self.finishVerse() if self.italics: - self.is_chorus = True - self.currentverse += text + u'\n' + self.isChorus = True + self.currentVerse += text + u'\n' - def finish_verse(self): + def finishVerse(self): """ Verse is finished, store it. Note in book 1+2, some songs are formatted incorrectly. Here we try and split songs with missing line breaks into the correct number of verses. """ - if self.currentverse.strip() == u'': + if self.currentVerse.strip() == u'': return - if self.is_chorus: + if self.isChorus: versetag = u'C' splitat = None else: versetag = u'V' - splitat = self.verse_splits(self.song_number) + splitat = self.verseSplits(self.songNumber) if splitat: ln = 0 verse = u'' - for line in self.currentverse.split(u'\n'): + for line in self.currentVerse.split(u'\n'): ln += 1 if line == u'' or ln > splitat: - self.add_sof_verse(verse, versetag) + self.addSofVerse(verse, versetag) ln = 0 if line: verse = line + u'\n' @@ -310,19 +310,19 @@ class SofImport(OooImport): else: verse += line + u'\n' if verse: - self.add_sof_verse(verse, versetag) + self.addSofVerse(verse, versetag) else: - self.add_sof_verse(self.currentverse, versetag) - self.currentverse = u'' - self.is_chorus = False + self.addSofVerse(self.currentVerse, versetag) + self.currentVerse = u'' + self.isChorus = 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 addSofVerse(self, lyrics, tag): + self.addVerse(lyrics, tag) + if not self.isChorus and u'C1' in self.verseOrderListGenerated: + self.verseOrderListGenerated.append(u'C1') + self.verseOrderListGenerated_useful = True - def uncap_text(self, text): + def uncapText(self, text): """ Words in the title are in all capitals, so we lowercase them. However some of these words, e.g. referring to God need a leading @@ -348,7 +348,7 @@ class SofImport(OooImport): text = u''.join(textarr) return text - def verse_splits(self, song_number): + def verseSplits(self, song_number): """ Because someone at Kingsway forgot to check the 1+2 RTF file, some verses were not formatted correctly. diff --git a/openlp/plugins/songs/lib/songbeamerimport.py b/openlp/plugins/songs/lib/songbeamerimport.py index 400db8f9a..2ed900544 100644 --- a/openlp/plugins/songs/lib/songbeamerimport.py +++ b/openlp/plugins/songs/lib/songbeamerimport.py @@ -91,27 +91,27 @@ class SongBeamerImport(SongImport): (re.compile(u''), u''), (re.compile(u''), u'') ] - + def __init__(self, manager, **kwargs): """ Initialise the Song Beamer importer. """ SongImport.__init__(self, manager, **kwargs) - def do_import(self): + def doImport(self): """ Receive a single file or a list of files to import. """ - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - if not isinstance(self.import_source, list): + self.importWizard.progressBar.setMaximum(len(self.importSource)) + if not isinstance(self.importSource, list): return - for file in self.import_source: + for file in self.importSource: # TODO: check that it is a valid SongBeamer file - if self.stop_import_flag: + if self.stopImportFlag: return - self.set_defaults() - self.current_verse = u'' - self.current_verse_type = VerseType.Tags[VerseType.Verse] + self.setDefaults() + self.currentVerse = u'' + self.currentVerseType = VerseType.Tags[VerseType.Verse] read_verses = False file_name = os.path.split(file)[1] if os.path.isfile(file): @@ -119,48 +119,48 @@ class SongBeamerImport(SongImport): details = chardet.detect(detect_file.read()) detect_file.close() infile = codecs.open(file, u'r', details['encoding']) - songData = infile.readlines() + song_data = infile.readlines() infile.close() else: continue self.title = file_name.split('.sng')[0] read_verses = False - for line in songData: + for line in song_data: # Just make sure that the line is of the type 'Unicode'. line = unicode(line).strip() if line.startswith(u'#') and not read_verses: - self.parse_tags(line) + self.parseTags(line) elif line.startswith(u'---'): - if self.current_verse: - self.replace_html_tags() - self.add_verse(self.current_verse, - self.current_verse_type) - self.current_verse = u'' - self.current_verse_type = VerseType.Tags[VerseType.Verse] + if self.currentVerse: + self.replaceHtmlTags() + self.addVerse(self.currentVerse, + self.currentVerseType) + self.currentVerse = u'' + self.currentVerseType = VerseType.Tags[VerseType.Verse] read_verses = True verse_start = True elif read_verses: if verse_start: verse_start = False - if not self.check_verse_marks(line): - self.current_verse = line + u'\n' + if not self.checkVerseMarks(line): + self.currentVerse = line + u'\n' else: - self.current_verse += line + u'\n' - if self.current_verse: - self.replace_html_tags() - self.add_verse(self.current_verse, self.current_verse_type) + self.currentVerse += line + u'\n' + if self.currentVerse: + self.replaceHtmlTags() + self.addVerse(self.currentVerse, self.currentVerseType) if not self.finish(): - self.log_error(file) + self.logError(file) - def replace_html_tags(self): + def replaceHtmlTags(self): """ This can be called to replace SongBeamer's specific (html) tags with OpenLP's specific (html) tags. """ for pair in SongBeamerImport.HTML_TAG_PAIRS: - self.current_verse = pair[0].sub(pair[1], self.current_verse) + self.currentVerse = pair[0].sub(pair[1], self.currentVerse) - def parse_tags(self, line): + def parseTags(self, line): """ Parses a meta data line. @@ -176,11 +176,11 @@ class SongBeamerImport(SongImport): if not tag_val[0] or not tag_val[1]: return if tag_val[0] == u'#(c)': - self.add_copyright(tag_val[1]) + self.addCopyright(tag_val[1]) elif tag_val[0] == u'#AddCopyrightInfo': pass elif tag_val[0] == u'#Author': - self.parse_author(tag_val[1]) + self.parseAuthor(tag_val[1]) elif tag_val[0] == u'#BackgroundImage': pass elif tag_val[0] == u'#Bible': @@ -188,7 +188,7 @@ class SongBeamerImport(SongImport): elif tag_val[0] == u'#Categories': self.topics = tag_val[1].split(',') elif tag_val[0] == u'#CCLI': - self.ccli_number = tag_val[1] + self.ccliNumber = tag_val[1] elif tag_val[0] == u'#Chords': pass elif tag_val[0] == u'#ChurchSongID': @@ -220,7 +220,7 @@ class SongBeamerImport(SongImport): elif tag_val[0] == u'#LangCount': pass elif tag_val[0] == u'#Melody': - self.parse_author(tag_val[1]) + self.parseAuthor(tag_val[1]) elif tag_val[0] == u'#NatCopyright': pass elif tag_val[0] == u'#OTitle': @@ -235,10 +235,10 @@ class SongBeamerImport(SongImport): song_book_pub = tag_val[1] elif tag_val[0] == u'#Songbook' or tag_val[0] == u'#SongBook': book_data = tag_val[1].split(u'/') - self.song_book_name = book_data[0].strip() + self.songBookName = book_data[0].strip() if len(book_data) == 2: number = book_data[1].strip() - self.song_number = number if number.isdigit() else u'' + self.songNumber = number if number.isdigit() else u'' elif tag_val[0] == u'#Speed': pass elif tag_val[0] == u'Tempo': @@ -269,7 +269,7 @@ class SongBeamerImport(SongImport): # TODO: add the verse order. pass - def check_verse_marks(self, line): + def checkVerseMarks(self, line): """ Check and add the verse's MarkType. Returns ``True`` if the given line contains a correct verse mark otherwise ``False``. @@ -279,10 +279,10 @@ class SongBeamerImport(SongImport): """ marks = line.split(u' ') if len(marks) <= 2 and marks[0] in SongBeamerTypes.MarkTypes: - self.current_verse_type = SongBeamerTypes.MarkTypes[marks[0]] + self.currentVerseType = SongBeamerTypes.MarkTypes[marks[0]] if len(marks) == 2: # If we have a digit, we append it to current_verse_type. if marks[1].isdigit(): - self.current_verse_type += marks[1] + self.currentVerseType += marks[1] return True return False diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index dc45764e4..ee6c7da41 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -26,11 +26,14 @@ ############################################################################### import logging import re +import shutil +import os from PyQt4 import QtCore from openlp.core.lib import Receiver, translate from openlp.core.ui.wizard import WizardStrings +from openlp.core.utils import AppLocation from openlp.plugins.songs.lib import clean_song, VerseType from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile from openlp.plugins.songs.lib.ui import SongStrings @@ -58,51 +61,51 @@ class SongImport(QtCore.QObject): self.manager = manager QtCore.QObject.__init__(self) if kwargs.has_key(u'filename'): - self.import_source = kwargs[u'filename'] + self.importSource = kwargs[u'filename'] elif kwargs.has_key(u'filenames'): - self.import_source = kwargs[u'filenames'] + self.importSource = kwargs[u'filenames'] else: raise KeyError(u'Keyword arguments "filename[s]" not supplied.') - log.debug(self.import_source) - self.import_wizard = None + log.debug(self.importSource) + self.importWizard = None self.song = None - self.stop_import_flag = False - self.set_defaults() - self.error_log = [] + self.stopImportFlag = False + self.setDefaults() + self.errorLog = [] QtCore.QObject.connect(Receiver.get_receiver(), - QtCore.SIGNAL(u'openlp_stop_wizard'), self.stop_import) + QtCore.SIGNAL(u'openlp_stop_wizard'), self.stopImport) - def set_defaults(self): + def setDefaults(self): """ Create defaults for properties - call this before each song if importing many songs at once to ensure a clean beginning """ self.title = u'' - self.song_number = u'' - self.alternate_title = u'' + self.songNumber = u'' + self.alternateTitle = u'' self.copyright = u'' self.comments = u'' - self.theme_name = u'' - self.ccli_number = u'' + self.themeName = u'' + self.ccliNumber = u'' self.authors = [] self.topics = [] - self.media_files = [] - self.song_book_name = u'' - self.song_book_pub = u'' - self.verse_order_list_generated_useful = False - self.verse_order_list_generated = [] - self.verse_order_list = [] + self.mediaFiles = [] + self.songBookName = u'' + self.songBookPub = u'' + self.verseOrderListGeneratedUseful = False + self.verseOrderListGenerated = [] + self.verseOrderList = [] self.verses = [] - self.verse_counts = {} - self.copyright_string = unicode(translate( + self.verseCounts = {} + self.copyrightString = unicode(translate( 'SongsPlugin.SongImport', 'copyright')) - def log_error(self, filepath, reason=SongStrings.SongIncomplete): + def logError(self, filepath, reason=SongStrings.SongIncomplete): """ This should be called, when a song could not be imported. ``filepath`` - This should be the file path if ``self.import_source`` is a list + This should be the file path if ``self.importSource`` is a list with different files. If it is not a list, but a single file (for instance a database), then this should be the song's title. @@ -110,30 +113,30 @@ class SongImport(QtCore.QObject): The reason, why the import failed. The string should be as informative as possible. """ - self.set_defaults() - if self.import_wizard is None: + self.setDefaults() + if self.importWizard is None: return - if self.import_wizard.errorReportTextEdit.isHidden(): - self.import_wizard.errorReportTextEdit.setText( + if self.importWizard.errorReportTextEdit.isHidden(): + self.importWizard.errorReportTextEdit.setText( translate('SongsPlugin.SongImport', 'The following songs could not be imported:')) - self.import_wizard.errorReportTextEdit.setVisible(True) - self.import_wizard.errorCopyToButton.setVisible(True) - self.import_wizard.errorSaveToButton.setVisible(True) - self.import_wizard.errorReportTextEdit.append( + self.importWizard.errorReportTextEdit.setVisible(True) + self.importWizard.errorCopyToButton.setVisible(True) + self.importWizard.errorSaveToButton.setVisible(True) + self.importWizard.errorReportTextEdit.append( u'- %s (%s)' % (filepath, reason)) - def stop_import(self): + def stopImport(self): """ Sets the flag for importers to stop their import """ log.debug(u'Stopping songs import') - self.stop_import_flag = True + self.stopImportFlag = True def register(self, import_wizard): - self.import_wizard = import_wizard + self.importWizard = import_wizard - def tidy_text(self, text): + def tidyText(self, text): """ Get rid of some dodgy unicode and formatting characters we're not interested in. Some can be converted to ascii. @@ -151,34 +154,34 @@ class SongImport(QtCore.QObject): text = re.sub(r' ?(\n{5}|\f)+ ?', u'\f', text) return text - def process_song_text(self, text): + def processSongText(self, text): verse_texts = text.split(u'\n\n') for verse_text in verse_texts: if verse_text.strip() != u'': - self.process_verse_text(verse_text.strip()) + self.processVerseText(verse_text.strip()) - def process_verse_text(self, text): + def processVerseText(self, text): lines = text.split(u'\n') - if text.lower().find(self.copyright_string) >= 0 \ + if text.lower().find(self.copyrightString) >= 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.lower().find(self.copyrightString) >= 0 or line.find(unicode(SongStrings.CopyrightSymbol)) >= 0): copyright_found = True - self.add_copyright(line) + self.addCopyright(line) else: - self.parse_author(line) + self.parseAuthor(line) return if len(lines) == 1: - self.parse_author(lines[0]) + self.parseAuthor(lines[0]) return if not self.title: self.title = lines[0] - self.add_verse(text) + self.addVerse(text) - def add_copyright(self, copyright): + def addCopyright(self, copyright): """ Build the copyright field """ @@ -188,7 +191,7 @@ class SongImport(QtCore.QObject): self.copyright += ' ' self.copyright += copyright - def parse_author(self, text): + def parseAuthor(self, text): """ Add the author. OpenLP stores them individually so split by 'and', '&' and comma. However need to check for 'Mr and Mrs Smith' and turn it to @@ -204,9 +207,9 @@ class SongImport(QtCore.QObject): if author2.endswith(u'.'): author2 = author2[:-1] if author2: - self.add_author(author2) + self.addAuthor(author2) - def add_author(self, author): + def addAuthor(self, author): """ Add an author to the list """ @@ -214,15 +217,15 @@ class SongImport(QtCore.QObject): return self.authors.append(author) - def add_media_file(self, filename): + def addMediaFile(self, filename, weight=0): """ Add a media file to the list """ - if filename in self.media_files: + if filename in map(lambda x: x[0], self.mediaFiles): return - self.media_files.append(filename) + self.mediaFiles.append((filename, weight)) - def add_verse(self, verse_text, verse_def=u'v', lang=None): + def addVerse(self, verse_text, verse_def=u'v', lang=None): """ Add a verse. This is the whole verse, lines split by \\n. It will also attempt to detect duplicates. In this case it will just add to the verse @@ -241,29 +244,29 @@ class SongImport(QtCore.QObject): """ for (old_verse_def, old_verse, old_lang) in self.verses: if old_verse.strip() == verse_text.strip(): - self.verse_order_list_generated.append(old_verse_def) - self.verse_order_list_generated_useful = True + self.verseOrderListGenerated.append(old_verse_def) + self.verseOrderListGeneratedUseful = True return - if verse_def[0] in self.verse_counts: - self.verse_counts[verse_def[0]] += 1 + if verse_def[0] in self.verseCounts: + self.verseCounts[verse_def[0]] += 1 else: - self.verse_counts[verse_def[0]] = 1 + self.verseCounts[verse_def[0]] = 1 if len(verse_def) == 1: - verse_def += unicode(self.verse_counts[verse_def[0]]) - elif int(verse_def[1:]) > self.verse_counts[verse_def[0]]: - self.verse_counts[verse_def[0]] = int(verse_def[1:]) + verse_def += unicode(self.verseCounts[verse_def[0]]) + elif int(verse_def[1:]) > self.verseCounts[verse_def[0]]: + self.verseCounts[verse_def[0]] = int(verse_def[1:]) self.verses.append([verse_def, verse_text.rstrip(), lang]) - self.verse_order_list_generated.append(verse_def) + self.verseOrderListGenerated.append(verse_def) - def repeat_verse(self): + def repeatVerse(self): """ Repeat the previous verse in the verse order """ - self.verse_order_list_generated.append( - self.verse_order_list_generated[-1]) - self.verse_order_list_generated_useful = True + self.verseOrderListGenerated.append( + self.verseOrderListGenerated[-1]) + self.verseOrderListGeneratedUseful = True - def check_complete(self): + def checkComplete(self): """ Check the mandatory fields are entered (i.e. title and a verse) Author not checked here, if no author then "Author unknown" is @@ -278,21 +281,21 @@ class SongImport(QtCore.QObject): """ All fields have been set to this song. Write the song to disk. """ - if not self.check_complete(): - self.set_defaults() + if not self.checkComplete(): + self.setDefaults() return False log.info(u'committing song %s to database', self.title) song = Song() song.title = self.title - if self.import_wizard is not None: - self.import_wizard.incrementProgressBar( + if self.importWizard is not None: + self.importWizard.incrementProgressBar( WizardStrings.ImportingType % song.title) - song.alternate_title = self.alternate_title + song.alternate_title = self.alternateTitle # Values will be set when cleaning the song. song.search_title = u'' song.search_lyrics = u'' song.verse_order = u'' - song.song_number = self.song_number + song.song_number = self.songNumber verses_changed_to_other = {} sxml = SongXML() other_count = 1 @@ -310,18 +313,18 @@ class SongImport(QtCore.QObject): verse_def = new_verse_def sxml.add_verse_to_lyrics(verse_tag, verse_def[1:], verse_text, lang) song.lyrics = unicode(sxml.extract_xml(), u'utf-8') - if not len(self.verse_order_list) and \ - self.verse_order_list_generated_useful: - self.verse_order_list = self.verse_order_list_generated - for i, current_verse_def in enumerate(self.verse_order_list): + if not len(self.verseOrderList) and \ + self.verseOrderListGeneratedUseful: + self.verseOrderList = self.verseOrderListGenerated + for i, current_verse_def in enumerate(self.verseOrderList): if verses_changed_to_other.has_key(current_verse_def): - self.verse_order_list[i] = \ + self.verseOrderList[i] = \ verses_changed_to_other[current_verse_def] - song.verse_order = u' '.join(self.verse_order_list) + song.verse_order = u' '.join(self.verseOrderList) song.copyright = self.copyright song.comments = self.comments - song.theme_name = self.theme_name - song.ccli_number = self.ccli_number + song.theme_name = self.themeName + song.ccli_number = self.ccliNumber for authortext in self.authors: author = self.manager.get_object_filtered(Author, Author.display_name == authortext) @@ -330,17 +333,12 @@ class SongImport(QtCore.QObject): last_name=authortext.split(u' ')[-1], first_name=u' '.join(authortext.split(u' ')[:-1])) song.authors.append(author) - for filename in self.media_files: - media_file = self.manager.get_object_filtered(MediaFile, - MediaFile.file_name == filename) - if not media_file: - song.media_files.append(MediaFile.populate(file_name=filename)) - if self.song_book_name: + if self.songBookName: song_book = self.manager.get_object_filtered(Book, - Book.name == self.song_book_name) + Book.name == self.songBookName) if song_book is None: - song_book = Book.populate(name=self.song_book_name, - publisher=self.song_book_pub) + song_book = Book.populate(name=self.songBookName, + publisher=self.songBookPub) song.book = song_book for topictext in self.topics: if not topictext: @@ -350,38 +348,42 @@ class SongImport(QtCore.QObject): if topic is None: topic = Topic.populate(name=topictext) song.topics.append(topic) + # We need to save the song now, before adding the media files, so that + # we know where to save the media files to. clean_song(self.manager, song) self.manager.save_object(song) - self.set_defaults() + # Now loop through the media files, copy them to the correct location, + # and save the song again. + for filename, weight in self.mediaFiles: + media_file = self.manager.get_object_filtered(MediaFile, + MediaFile.file_name == filename) + if not media_file: + if os.path.dirname(filename): + filename = self.copyMediaFile(song.id, filename) + song.media_files.append( + MediaFile.populate(file_name=filename, weight=weight) + ) + self.manager.save_object(song) + self.setDefaults() return True - def print_song(self): + def copyMediaFile(self, song_id, filename): """ - For debugging + This method copies the media file to the correct location and returns + the new file location. + + ``filename`` + The file to copy. """ - print u'========================================' \ - + u'========================================' - print u'TITLE: ' + self.title - print u'ALT TITLE: ' + self.alternate_title - for (verse_def, verse_text, lang) in self.verses: - print u'VERSE ' + verse_def + u': ' + verse_text - print u'ORDER: ' + u' '.join(self.verse_order_list) - print u'GENERATED ORDER: ' + u' '.join(self.verse_order_list_generated) - for author in self.authors: - print u'AUTHOR: ' + author - if self.copyright: - print u'COPYRIGHT: ' + self.copyright - if self.song_book_name: - print u'BOOK: ' + self.song_book_name - if self.song_book_pub: - print u'BOOK PUBLISHER: ' + self.song_book_pub - if self.song_number: - print u'NUMBER: ' + self.song_number - for topictext in self.topics: - print u'TOPIC: ' + topictext - if self.comments: - print u'COMMENTS: ' + self.comments - if self.theme_name: - print u'THEME: ' + self.theme_name - if self.ccli_number: - print u'CCLI: ' + self.ccli_number + if not hasattr(self, u'save_path'): + self.save_path = os.path.join( + AppLocation.get_section_data_path( + self.importWizard.plugin.name), + 'audio', str(song_id)) + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + if not filename.startswith(self.save_path): + oldfile, filename = filename, os.path.join(self.save_path, + os.path.split(filename)[1]) + shutil.copyfile(oldfile, filename) + return filename diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index c50df8752..109b7389f 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -95,118 +95,120 @@ class SongShowPlusImport(SongImport): """ SongImport.__init__(self, manager, **kwargs) - def do_import(self): + def doImport(self): """ Receive a single file or a list of files to import. """ - if not isinstance(self.import_source, list): + if not isinstance(self.importSource, list): return - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for file in self.import_source: + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for file in self.importSource: + if self.stopImportFlag: + return self.sspVerseOrderList = [] - otherCount = 0 - otherList = {} + other_count = 0 + other_list = {} file_name = os.path.split(file)[1] - self.import_wizard.incrementProgressBar( + self.importWizard.incrementProgressBar( WizardStrings.ImportingType % file_name, 0) - songData = open(file, 'rb') + song_data = open(file, 'rb') while True: - blockKey, = struct.unpack("I", songData.read(4)) + block_key, = struct.unpack("I", song_data.read(4)) # The file ends with 4 NUL's - if blockKey == 0: + if block_key == 0: break - nextBlockStarts, = struct.unpack("I", songData.read(4)) - nextBlockStarts += songData.tell() - if blockKey in (VERSE, CHORUS, BRIDGE): - null, verseNo, = struct.unpack("BB", songData.read(2)) - elif blockKey == CUSTOM_VERSE: - null, verseNameLength, = struct.unpack("BB", - songData.read(2)) - verseName = songData.read(verseNameLength) - lengthDescriptorSize, = struct.unpack("B", songData.read(1)) - log.debug(lengthDescriptorSize) + next_block_starts, = struct.unpack("I", song_data.read(4)) + next_block_starts += song_data.tell() + if block_key in (VERSE, CHORUS, BRIDGE): + null, verse_no, = struct.unpack("BB", song_data.read(2)) + elif block_key == CUSTOM_VERSE: + null, verse_name_length, = struct.unpack("BB", + song_data.read(2)) + verse_name = song_data.read(verse_name_length) + length_descriptor_size, = struct.unpack("B", song_data.read(1)) + log.debug(length_descriptor_size) # Detect if/how long the length descriptor is - if lengthDescriptorSize == 12 or lengthDescriptorSize == 20: - lengthDescriptor, = struct.unpack("I", songData.read(4)) - elif lengthDescriptorSize == 2: - lengthDescriptor = 1 - elif lengthDescriptorSize == 9: - lengthDescriptor = 0 + if length_descriptor_size == 12 or length_descriptor_size == 20: + length_descriptor, = struct.unpack("I", song_data.read(4)) + elif length_descriptor_size == 2: + length_descriptor = 1 + elif length_descriptor_size == 9: + length_descriptor = 0 else: - lengthDescriptor, = struct.unpack("B", songData.read(1)) - log.debug(lengthDescriptorSize) - data = songData.read(lengthDescriptor) - if blockKey == TITLE: + length_descriptor, = struct.unpack("B", song_data.read(1)) + log.debug(length_descriptor_size) + data = song_data.read(length_descriptor) + if block_key == TITLE: self.title = unicode(data, u'cp1252') - elif blockKey == AUTHOR: + elif block_key == AUTHOR: authors = data.split(" / ") for author in authors: if author.find(",") !=-1: authorParts = author.split(", ") author = authorParts[1] + " " + authorParts[0] - self.parse_author(unicode(author, u'cp1252')) - elif blockKey == COPYRIGHT: - self.add_copyright(unicode(data, u'cp1252')) - elif blockKey == CCLI_NO: - self.ccli_number = int(data) - elif blockKey == VERSE: - self.add_verse(unicode(data, u'cp1252'), - "%s%s" % (VerseType.Tags[VerseType.Verse], verseNo)) - elif blockKey == CHORUS: - self.add_verse(unicode(data, u'cp1252'), - "%s%s" % (VerseType.Tags[VerseType.Chorus], verseNo)) - elif blockKey == BRIDGE: - self.add_verse(unicode(data, u'cp1252'), - "%s%s" % (VerseType.Tags[VerseType.Bridge], verseNo)) - elif blockKey == TOPIC: + self.parseAuthor(unicode(author, u'cp1252')) + elif block_key == COPYRIGHT: + self.addCopyright(unicode(data, u'cp1252')) + elif block_key == CCLI_NO: + self.ccliNumber = int(data) + elif block_key == VERSE: + self.addVerse(unicode(data, u'cp1252'), + "%s%s" % (VerseType.Tags[VerseType.Verse], verse_no)) + elif block_key == CHORUS: + self.addVerse(unicode(data, u'cp1252'), + "%s%s" % (VerseType.Tags[VerseType.Chorus], verse_no)) + elif block_key == BRIDGE: + self.addVerse(unicode(data, u'cp1252'), + "%s%s" % (VerseType.Tags[VerseType.Bridge], verse_no)) + elif block_key == TOPIC: self.topics.append(unicode(data, u'cp1252')) - elif blockKey == COMMENTS: + elif block_key == COMMENTS: self.comments = unicode(data, u'cp1252') - elif blockKey == VERSE_ORDER: - verseTag = self.toOpenLPVerseTag(data, True) - if verseTag: - if not isinstance(verseTag, unicode): - verseTag = unicode(verseTag, u'cp1252') - self.sspVerseOrderList.append(verseTag) - elif blockKey == SONG_BOOK: - self.song_book_name = unicode(data, u'cp1252') - elif blockKey == SONG_NUMBER: - self.song_number = ord(data) - elif blockKey == CUSTOM_VERSE: - verseTag = self.toOpenLPVerseTag(verseName) - self.add_verse(unicode(data, u'cp1252'), verseTag) + elif block_key == VERSE_ORDER: + verse_tag = self.toOpenLPVerseTag(data, True) + if verse_tag: + if not isinstance(verse_tag, unicode): + verse_tag = unicode(verse_tag, u'cp1252') + self.sspVerseOrderList.append(verse_tag) + elif block_key == SONG_BOOK: + self.songBookName = unicode(data, u'cp1252') + elif block_key == SONG_NUMBER: + self.songNumber = ord(data) + elif block_key == CUSTOM_VERSE: + verse_tag = self.toOpenLPVerseTag(verse_name) + self.addVerse(unicode(data, u'cp1252'), verse_tag) else: log.debug("Unrecognised blockKey: %s, data: %s" - % (blockKey, data)) - songData.seek(nextBlockStarts) - self.verse_order_list = self.sspVerseOrderList - songData.close() + % (block_key, data)) + song_data.seek(next_block_starts) + self.verseOrderList = self.sspVerseOrderList + song_data.close() if not self.finish(): - self.log_error(file) + self.logError(file) - def toOpenLPVerseTag(self, verseName, ignoreUnique=False): - if verseName.find(" ") != -1: - verseParts = verseName.split(" ") - verseType = verseParts[0] - verseNumber = verseParts[1] + def toOpenLPVerseTag(self, verse_name, ignore_unique=False): + if verse_name.find(" ") != -1: + verse_parts = verse_name.split(" ") + verse_type = verse_parts[0] + verse_number = verse_parts[1] else: - verseType = verseName - verseNumber = "1" - verseType = verseType.lower() - if verseType == "verse": - verseTag = VerseType.Tags[VerseType.Verse] - elif verseType == "chorus": - verseTag = VerseType.Tags[VerseType.Chorus] - elif verseType == "bridge": - verseTag = VerseType.Tags[VerseType.Bridge] - elif verseType == "pre-chorus": - verseTag = VerseType.Tags[VerseType.PreChorus] + verse_type = verse_name + verse_number = "1" + verse_type = verse_type.lower() + if verse_type == "verse": + verse_tag = VerseType.Tags[VerseType.Verse] + elif verse_type == "chorus": + verse_tag = VerseType.Tags[VerseType.Chorus] + elif verse_type == "bridge": + verse_tag = VerseType.Tags[VerseType.Bridge] + elif verse_type == "pre-chorus": + verse_tag = VerseType.Tags[VerseType.PreChorus] else: - if not self.otherList.has_key(verseName): - if ignoreUnique: + if not self.otherList.has_key(verse_name): + if ignore_unique: return None self.otherCount = self.otherCount + 1 - self.otherList[verseName] = str(self.otherCount) - verseTag = VerseType.Tags[VerseType.Other] - verseNumber = self.otherList[verseName] - return verseTag + verseNumber + self.otherList[verse_name] = str(self.otherCount) + verse_tag = VerseType.Tags[VerseType.Other] + verse_number = self.otherList[verse_name] + return verse_tag + verse_number diff --git a/openlp/plugins/songs/lib/upgrade.py b/openlp/plugins/songs/lib/upgrade.py new file mode 100644 index 000000000..fae3400c2 --- /dev/null +++ b/openlp/plugins/songs/lib/upgrade.py @@ -0,0 +1,88 @@ +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### +""" +The :mod:`upgrade` module provides a way for the database and schema that is the +backend for the Songs plugin +""" + +from sqlalchemy import Column, ForeignKey, Table, types +from sqlalchemy.sql.expression import func +from migrate import changeset +from migrate.changeset.constraint import ForeignKeyConstraint + +__version__ = 2 + +def upgrade_setup(metadata): + """ + Set up the latest revision all tables, with reflection, needed for the + upgrade process. If you want to drop a table, you need to remove it from + here, and add it to your upgrade function. + """ + tables = { + u'authors': Table(u'authors', metadata, autoload=True), + u'media_files': Table(u'media_files', metadata, autoload=True), + u'song_books': Table(u'song_books', metadata, autoload=True), + u'songs': Table(u'songs', metadata, autoload=True), + u'topics': Table(u'topics', metadata, autoload=True), + u'authors_songs': Table(u'authors_songs', metadata, autoload=True), + u'songs_topics': Table(u'songs_topics', metadata, autoload=True) + } + return tables + + +def upgrade_1(session, metadata, tables): + """ + Version 1 upgrade. + + This upgrade removes the many-to-many relationship between songs and + media_files and replaces it with a one-to-many, which is far more + representative of the real relationship between the two entities. + + In order to facilitate this one-to-many relationship, a song_id column is + added to the media_files table, and a weight column so that the media + files can be ordered. + """ + Table(u'media_files_songs', metadata, autoload=True).drop(checkfirst=True) + Column(u'song_id', types.Integer(), default=None)\ + .create(table=tables[u'media_files'], populate_default=True) + Column(u'weight', types.Integer(), default=0)\ + .create(table=tables[u'media_files'], populate_default=True) + if metadata.bind.url.get_dialect().name != 'sqlite': + # SQLite doesn't support ALTER TABLE ADD CONSTRAINT + ForeignKeyConstraint([u'song_id'], [u'songs.id'], + table=tables[u'media_files']).create() + +def upgrade_2(session, metadata, tables): + """ + Version 2 upgrade. + + This upgrade adds a create_date and last_modified date to the songs table + """ + Column(u'create_date', types.DateTime(), default=func.now())\ + .create(table=tables[u'songs'], populate_default=True) + Column(u'last_modified', types.DateTime(), default=func.now())\ + .create(table=tables[u'songs'], populate_default=True) diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index e2a5820a5..19ed3e9c0 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -98,56 +98,58 @@ class WowImport(SongImport): """ SongImport.__init__(self, manager, **kwargs) - def do_import(self): + def doImport(self): """ Receive a single file or a list of files to import. """ - if isinstance(self.import_source, list): - self.import_wizard.progressBar.setMaximum(len(self.import_source)) - for file in self.import_source: + if isinstance(self.importSource, list): + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for file in self.importSource: + if self.stopImportFlag: + return file_name = os.path.split(file)[1] # Get the song title self.title = file_name.rpartition(u'.')[0] - songData = open(file, 'rb') - if songData.read(19) != u'WoW File\nSong Words': - self.log_error(file) + song_data = open(file, 'rb') + if song_data.read(19) != u'WoW File\nSong Words': + self.logError(file) continue # Seek to byte which stores number of blocks in the song - songData.seek(56) - no_of_blocks = ord(songData.read(1)) + song_data.seek(56) + no_of_blocks = ord(song_data.read(1)) # Seek to the beging of the first block - songData.seek(82) + song_data.seek(82) for block in range(no_of_blocks): - self.lines_to_read = ord(songData.read(1)) + self.linesToRead = ord(song_data.read(1)) # Skip 3 nulls to the beginnig of the 1st line - songData.seek(3, os.SEEK_CUR) + song_data.seek(3, os.SEEK_CUR) block_text = u'' - while self.lines_to_read: - self.line_text = unicode( - songData.read(ord(songData.read(1))), u'cp1252') - songData.seek(1, os.SEEK_CUR) + while self.linesToRead: + self.lineText = unicode( + song_data.read(ord(song_data.read(1))), u'cp1252') + song_data.seek(1, os.SEEK_CUR) if block_text: block_text += u'\n' - block_text += self.line_text - self.lines_to_read -= 1 - block_type = BLOCK_TYPES[ord(songData.read(1))] + block_text += self.lineText + self.linesToRead -= 1 + block_type = BLOCK_TYPES[ord(song_data.read(1))] # Skip 3 nulls at the end of the block - songData.seek(3, os.SEEK_CUR) + song_data.seek(3, os.SEEK_CUR) # Blocks are seperated by 2 bytes, skip them, but not if # this is the last block! if block + 1 < no_of_blocks: - songData.seek(2, os.SEEK_CUR) - self.add_verse(block_text, block_type) + song_data.seek(2, os.SEEK_CUR) + self.addVerse(block_text, block_type) # Now to extract the author - author_length = ord(songData.read(1)) + author_length = ord(song_data.read(1)) if author_length: - self.parse_author( - unicode(songData.read(author_length), u'cp1252')) + self.parseAuthor( + unicode(song_data.read(author_length), u'cp1252')) # Finally the copyright - copyright_length = ord(songData.read(1)) + copyright_length = ord(song_data.read(1)) if copyright_length: - self.add_copyright(unicode( - songData.read(copyright_length), u'cp1252')) - songData.close() + self.addCopyright(unicode( + song_data.read(copyright_length), u'cp1252')) + song_data.close() if not self.finish(): - self.log_error(file) + self.logError(file) diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 193a823d5..9da7a0a65 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -343,7 +343,7 @@ class OpenLyrics(object): self._process_topics(properties, song) clean_song(self.manager, song) self.manager.save_object(song) - return song.id + return song def _add_text_to_element(self, tag, parent, text=None, label=None): if label: diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 8a773be90..54b1d3f1f 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -36,7 +36,8 @@ from openlp.core.lib import Plugin, StringContent, build_icon, translate, \ from openlp.core.lib.db import Manager from openlp.core.lib.ui import UiStrings, base_action, icon_action from openlp.core.utils.actions import ActionList -from openlp.plugins.songs.lib import clean_song, SongMediaItem, SongsTab +from openlp.plugins.songs.lib import clean_song, upgrade, SongMediaItem, \ + SongsTab 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 @@ -58,8 +59,8 @@ class SongsPlugin(Plugin): Create and set up the Songs plugin. """ Plugin.__init__(self, u'songs', plugin_helpers, SongMediaItem, SongsTab) + self.manager = Manager(u'songs', init_schema, upgrade_mod=upgrade) self.weight = -10 - self.manager = Manager(u'songs', init_schema) self.icon_path = u':/plugins/plugin_songs.png' self.icon = build_icon(self.icon_path) @@ -195,7 +196,7 @@ class SongsPlugin(Plugin): def importSongs(self, format, **kwargs): class_ = SongFormat.get_class(format) importer = class_(self.manager, **kwargs) - importer.register(self.mediaItem.import_wizard) + importer.register(self.mediaItem.importWizard) return importer def setPluginTextStrings(self): @@ -251,7 +252,7 @@ class SongsPlugin(Plugin): progress.setValue(idx) Receiver.send_message(u'openlp_process_events') importer = OpenLPSongImport(self.manager, filename=db) - importer.do_import() + importer.doImport() progress.setValue(len(song_dbs)) self.mediaItem.onSearchTextButtonClick() diff --git a/openlp/plugins/songusage/forms/songusagedetailform.py b/openlp/plugins/songusage/forms/songusagedetailform.py index 303789d20..f7b04a656 100644 --- a/openlp/plugins/songusage/forms/songusagedetailform.py +++ b/openlp/plugins/songusage/forms/songusagedetailform.py @@ -117,9 +117,11 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog): try: fileHandle = open(outname, u'w') for instance in usage: - record = u'\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"\n' % ( - instance.usagedate, instance.usagetime, instance.title, - instance.copyright, instance.ccl_number, instance.authors) + record = u'\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",' \ + u'\"%s\",\"%s\"\n' % ( instance.usagedate, + instance.usagetime, instance.title, instance.copyright, + instance.ccl_number, instance.authors, + instance.plugin_name, instance.source) fileHandle.write(record.encode(u'utf-8')) Receiver.send_message(u'openlp_information_message', { u'title': translate('SongUsagePlugin.SongUsageDetailForm', diff --git a/openlp/plugins/songusage/lib/db.py b/openlp/plugins/songusage/lib/db.py index 9a11ef16b..bbd645634 100644 --- a/openlp/plugins/songusage/lib/db.py +++ b/openlp/plugins/songusage/lib/db.py @@ -56,7 +56,9 @@ def init_schema(url): Column(u'title', types.Unicode(255), nullable=False), Column(u'authors', types.Unicode(255), nullable=False), Column(u'copyright', types.Unicode(255)), - Column(u'ccl_number', types.Unicode(65)) + Column(u'ccl_number', types.Unicode(65)), + Column(u'plugin_name', types.Unicode(20)), + Column(u'source', types.Unicode(10)) ) mapper(SongUsageItem, songusage_table) diff --git a/openlp/plugins/songusage/lib/upgrade.py b/openlp/plugins/songusage/lib/upgrade.py new file mode 100644 index 000000000..50ca32fcd --- /dev/null +++ b/openlp/plugins/songusage/lib/upgrade.py @@ -0,0 +1,58 @@ +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### +""" +The :mod:`upgrade` module provides a way for the database and schema that is the +backend for the SongsUsage plugin +""" + +from sqlalchemy import Column, Table, types +from migrate import changeset + +__version__ = 1 + +def upgrade_setup(metadata): + """ + Set up the latest revision all tables, with reflection, needed for the + upgrade process. If you want to drop a table, you need to remove it from + here, and add it to your upgrade function. + """ + tables = { + u'songusage_data': Table(u'songusage_data', metadata, autoload=True) + } + return tables + + +def upgrade_1(session, metadata, tables): + """ + Version 1 upgrade. + + This upgrade adds two new fields to the songusage database + """ + Column(u'plugin_name', types.Unicode(20), default=u'') \ + .create(table=tables[u'songusage_data'], populate_default=True) + Column(u'source', types.Unicode(10), default=u'') \ + .create(table=tables[u'songusage_data'], populate_default=True) diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index d63467792..495d3103d 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -37,6 +37,7 @@ from openlp.core.lib.ui import base_action, shortcut_action from openlp.core.utils.actions import ActionList from openlp.plugins.songusage.forms import SongUsageDetailForm, \ SongUsageDeleteForm +from openlp.plugins.songusage.lib import upgrade from openlp.plugins.songusage.lib.db import init_schema, SongUsageItem log = logging.getLogger(__name__) @@ -46,11 +47,11 @@ class SongUsagePlugin(Plugin): def __init__(self, plugin_helpers): Plugin.__init__(self, u'songusage', plugin_helpers) + self.manager = Manager(u'songusage', init_schema, upgrade_mod=upgrade) self.weight = -4 self.icon = build_icon(u':/plugins/plugin_songusage.png') self.activeIcon = build_icon(u':/songusage/song_usage_active.png') self.inactiveIcon = build_icon(u':/songusage/song_usage_inactive.png') - self.manager = None self.songUsageActive = False def addToolsMenuItem(self, tools_menu): @@ -121,7 +122,10 @@ class SongUsagePlugin(Plugin): Plugin.initialise(self) QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'slidecontroller_live_started'), - self.onReceiveSongUsage) + self.displaySongUsage) + QtCore.QObject.connect(Receiver.get_receiver(), + QtCore.SIGNAL(u'print_service_started'), + self.printSongUsage) self.songUsageActive = QtCore.QSettings().value( self.settingsSection + u'/active', QtCore.QVariant(False)).toBool() @@ -134,8 +138,6 @@ class SongUsagePlugin(Plugin): translate('SongUsagePlugin', 'Song Usage')) action_list.add_action(self.songUsageReport, translate('SongUsagePlugin', 'Song Usage')) - if self.manager is None: - self.manager = Manager(u'songusage', init_schema) self.songUsageDeleteForm = SongUsageDeleteForm(self.manager, self.formparent) self.songUsageDetailForm = SongUsageDetailForm(self, self.formparent) @@ -194,10 +196,21 @@ class SongUsagePlugin(Plugin): self.songUsageStatus.blockSignals(False) - def onReceiveSongUsage(self, item): + def displaySongUsage(self, item): """ - Song Usage for live song from SlideController + Song Usage for which has been displayed """ + self._add_song_usage(unicode(translate('SongUsagePlugin', + 'display')), item) + + def printSongUsage(self, item): + """ + Song Usage for which has been printed + """ + self._add_song_usage(unicode(translate('SongUsagePlugin', + 'printed')), item) + + def _add_song_usage(self, source, item): audit = item[0].audit if self.songUsageActive and audit: song_usage_item = SongUsageItem() @@ -207,6 +220,8 @@ class SongUsagePlugin(Plugin): song_usage_item.copyright = audit[2] song_usage_item.ccl_number = audit[3] song_usage_item.authors = u' '.join(audit[1]) + song_usage_item.plugin_name = item[0].name + song_usage_item.source = source self.manager.save_object(song_usage_item) def onSongUsageDelete(self): diff --git a/resources/debian/debian/control b/resources/debian/debian/control index 220b500d2..a1c2298e9 100644 --- a/resources/debian/debian/control +++ b/resources/debian/debian/control @@ -11,7 +11,7 @@ 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 + python-lxml, python-sqlite, python-enchant, python-mako, python-migrate Conflicts: python-openlp Description: Church lyrics projection application OpenLP is free church presentation software, or lyrics projection software, diff --git a/resources/forms/mediafilesdialog.ui b/resources/forms/mediafilesdialog.ui new file mode 100644 index 000000000..427e27548 --- /dev/null +++ b/resources/forms/mediafilesdialog.ui @@ -0,0 +1,95 @@ + + + MediaFilesDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 400 + 300 + + + + Select Media File(s) + + + true + + + + 8 + + + 8 + + + + + Select one or more audio files from the list below, and click OK to import them into this song. + + + true + + + + + + + true + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + MediaFilesDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + MediaFilesDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index 1b7cf22c5..df722c5a8 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -827,17 +827,17 @@ vraag afgelaai word en dus is 'n internet konneksie nodig. Enkel en dubbel Bybel vers soek resultate kan nie kombineer word nie. Wis die resultate uit en begin 'n nuwe soektog? - + Bible not fully loaded. Die Bybel is nie ten volle gelaai nie. - + Information Informasie - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. Die tweede Bybel het nie al die verse wat in die hoof Bybel is nie. Slegs verse wat in beide Bybels voorkom, sal gewys word. %d verse is nie by die resultate ingesluit nie. @@ -1329,24 +1329,24 @@ word en dus is 'n Internet verbinding nodig. ImagePlugin - + <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>Beeld Mini-program</strong><br/>Die beeld mini-program verskaf vertoning van beelde.<br/>Een van die onderskeidende kenmerke van hierdie mini-program is die vermoë om beelde te groepeer in die diensbestuurder wat dit maklik maak om verskeie beelde te vertoon. Die mini-program kan ook van OpenLP se "tydgebonde herhaling"-funksie gebruik maak om 'n automatiese skyfe-vertoning te verkry. Verder kan beelde van hierdie mini-program gebruik word om die huidige tema se agtergrond te vervang hoewel 'n tema sy eie agtergrond het. - + Image name singular Beeld - + Images name plural Beelde - + Images container title Beelde @@ -1387,37 +1387,37 @@ word en dus is 'n Internet verbinding nodig. Voeg die geselekteerde Beeld by die diens. - + 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. Skou 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. @@ -1443,38 +1443,56 @@ word en dus is 'n Internet verbinding nodig. 'n Beeld om uit te wis moet geselekteer word. - + You must select an image to replace the background with. 'n Beeld wat die agtergrond vervang moet gekies word. - + 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. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2777,287 +2795,287 @@ Om die Eerste-keer gids heeltemal te kanselleer, druk die vollledig-knoppie hier OpenLP.MainWindow - + &File &Lêer - + &Import &Invoer - + &Export Uitvo&er - + &View &Bekyk - + M&ode M&odus - + &Tools &Gereedskap - + &Settings Ver&stellings - + &Language Taa&l - + &Help &Hulp - + Media Manager Media Bestuurder - + Service Manager Diens Bestuurder - + Theme Manager Tema Bestuurder - + &New &Nuwe - + &Open Maak &Oop - + Open an existing service. Maak 'n bestaande diens oop. - + &Save &Stoor - + Save the current service to disk. Stoor die huidige diens na skyf. - + Save &As... Stoor &As... - + Save Service As Stoor Diens As - + Save the current service under a new name. Stoor die huidige diens onder 'n nuwe naam. - + E&xit &Uitgang - + Quit OpenLP Sluit OpenLP Af - + &Theme &Tema - + &Configure OpenLP... &Konfigureer OpenLP... - + &Media Manager &Media Bestuurder - + Toggle Media Manager Wissel Media Bestuurder - + Toggle the visibility of the media manager. Wissel sigbaarheid van die media bestuurder. - + &Theme Manager &Tema Bestuurder - + Toggle Theme Manager Wissel Tema Bestuurder - + Toggle the visibility of the theme manager. Wissel sigbaarheid van die tema bestuurder. - + &Service Manager &Diens Bestuurder - + Toggle Service Manager Wissel Diens Bestuurder - + Toggle the visibility of the service manager. Wissel sigbaarheid van die diens bestuurder. - + &Preview Panel Voorskou &Paneel - + Toggle Preview Panel Wissel Voorskou Paneel - + Toggle the visibility of the preview panel. Wissel sigbaarheid van die voorskou paneel. - + &Live Panel Regstreekse Panee&l - + Toggle Live Panel Wissel Regstreekse Paneel - + Toggle the visibility of the live panel. Wissel sigbaarheid van die regstreekse paneel. - + &Plugin List Mini-&program Lys - + List the Plugins Lys die Mini-programme - + &User Guide Gebr&uikers Gids - + &About &Aangaande - + More information about OpenLP Meer inligting aangaande OpenLP - + &Online Help &Aanlyn Hulp - + &Web Site &Web Tuiste - + Use the system language, if available. Gebruik die sisteem se taal as dit beskikbaar is. - + Set the interface language to %s Verstel die koppelvlak taal na %s - + Add &Tool... Voeg Gereedskaps&tuk by... - + Add an application to the list of tools. Voeg 'n applikasie by die lys van gereedskapstukke. - + &Default &Verstek - + Set the view mode back to the default. Verstel skou modus terug na verstek modus. - + &Setup Op&stel - + Set the view mode to Setup. Verstel die skou modus na Opstel modus. - + &Live &Regstreeks - + Set the view mode to Live. 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/. @@ -3066,22 +3084,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 @@ -3092,17 +3110,17 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. Afrikaans - + Configure &Shortcuts... Konfigureer Kor&tpaaie... - + Close OpenLP Mook OpenLP toe - + Are you sure you want to close OpenLP? Maak OpenLP sekerlik toe? @@ -3112,12 +3130,12 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. Druk die huidige Diens Bestelling. - + 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. @@ -3127,78 +3145,159 @@ Die nuutste weergawe kan afgelaai word vanaf http://openlp.org/. &Konfigureer Vertoon Haakies - + &Autodetect Spoor outom&aties op - + Update Theme Images Opdateer Tema Beelde - + Update the preview images for all themes. Opdateer die voorskou beelde vir alle temas. - + Print the current service. Druk die huidige diens. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Verstellings + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Maak Lêer oop + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3284,7 +3383,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3448,12 +3547,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3549,14 +3648,14 @@ Suffix not supported &Verander Item Tema - + File is not a valid service. The content encoding is not UTF-8. Lêer is nie 'n geldige diens nie. Die inhoud enkodering is nie UTF-8 nie. - + File is not a valid service. Lêer is nie 'n geldige diens nie. @@ -3601,7 +3700,7 @@ Die inhoud enkodering is nie UTF-8 nie. Maak Lêer oop - + OpenLP Service Files (*.osz) OpenLP Diens Lêers (*.osz) @@ -3631,7 +3730,7 @@ Die inhoud enkodering is nie UTF-8 nie. Stuur die geselekteerde item Regstreeks. - + Modified Service Redigeer Diens @@ -3651,27 +3750,27 @@ Die inhoud enkodering is nie UTF-8 nie. Vertoo&n Regstreeks - + The current service has been modified. Would you like to save this service? Die huidige diens was verander. Stoor hierdie diens? - + File could not be opened because it is corrupt. Lêer kon nie oopgemaak word nie omdat dit korrup is. - + Empty File Leë Lêer - + This service file does not contain any data. Die diens lêer het geen data inhoud nie. - + Corrupt File Korrupte Lêer @@ -3716,22 +3815,22 @@ Die inhoud enkodering is nie UTF-8 nie. Kies 'n tema vir die diens. - + This file is either corrupt or it is not an OpenLP 2.0 service file. Die lêer is óf korrup óf is nie 'n OpenLP 2.0 diens lêer nie. - + Slide theme - + Notes - + Service File Missing @@ -4012,32 +4111,32 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ThemeForm - + Select Image 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. - + (approximately %d lines per slide) (ongeveer %d lyne per skyfie) @@ -4115,7 +4214,7 @@ Die inhoud enkodering is nie UTF-8 nie. Kies 'n tema om te redigeer. - + You are unable to delete the default theme. Die standaard tema kan nie uitgewis word nie. @@ -4167,7 +4266,7 @@ Die inhoud enkodering is nie UTF-8 nie. 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. @@ -4217,7 +4316,7 @@ Die inhoud enkodering is nie UTF-8 nie. Wis %s tema uit? - + Validation Error Validerings Fout @@ -4241,255 +4340,260 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ThemeWizard - + 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: - + Solid Color Soliede Kleur - + Gradient Gradiënt - + Color: Kleur: - + Gradient: Gradiënt: - + Horizontal Horisontaal - + Vertical Vertikaal - + Circular Sirkelvormig - + 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 - + Font: Skrif: - + Size: Grootte: - + Line Spacing: Lyn Spasiëring: - + &Outline: &Buitelyn: - + &Shadow: &Skaduwee: - + Bold Vetdruk - + 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: - + Left Links - + Right Regs - + Center Middel - + 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 - + X position: X posisie: - + px px - + Y position: Y posisie: - + Width: Wydte: - + Height: Hoogte: - + Use default location Gebruik verstek ligging - + 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 - + Starting color: - + Ending color: + + + Background color: + Agtergrond kleur: + OpenLP.ThemesTab @@ -4880,7 +4984,7 @@ Die inhoud enkodering is nie UTF-8 nie. Gereed. - + Starting import... Invoer begin... @@ -5425,126 +5529,141 @@ Die inhoud enkodering is nie UTF-8 nie. SongUsagePlugin - + &Song Usage Tracking &Volg Lied Gebruik - + &Delete Tracking Data Wis Volg &Data Uit - + Delete song usage data up to a specified date. Wis lied volg data uit tot en met 'n spesifieke datum. - + &Extract Tracking Data Onttr&ek Volg Data - + Generate a report on song usage. Genereer 'n verslag oor lied-gebruik. - + Toggle Tracking Wissel Volging - + Toggle the tracking of song usage. Wissel lied-gebruik volging. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>LiedGebruik Mini-program</strong><br/>Die mini-program volg die gebruik van liedere in dienste. - + SongUsage name singular Lied Gebruik - + SongUsage name plural Lied Gebruik - + SongUsage container title Lied Gebruik - + Song Usage Lied Gebruik - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Wis Lied Gebruik Data Uit - + Delete Selected Song Usage Events? Wis Geselekteerde Lied Gebruik Gebeure uit? - + Are you sure you want to delete selected Song Usage data? Wis regtig die geselekteerde Diens Gebruik data uit? - + Deletion Successful Uitwissing Suksesvol - + All requested data has been deleted successfully. Al die gevraagde data is suksesvol uitgewis. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Diens Gebruik Ontrekking - + Select Date Range Selekteer Datum Grense - + to tot - + Report Location Rapporteer Ligging @@ -5559,12 +5678,12 @@ Die inhoud enkodering is nie UTF-8 nie. usage_detail_%s_%s.txt - + Report Creation Verslag Skepping - + Report %s has been successfully created. @@ -5586,130 +5705,130 @@ was suksesvol geskep. SongsPlugin - + &Song &Lied - + Import songs using the import wizard. Voer liedere in deur van die invoer helper gebruik te maak. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Liedere Mini-program</strong><br/>Die liedere mini-program verskaf die vermoë om liedere te vertoon en te bestuur. - + &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... - + Song name singular Lied - + Songs name plural Liedere - + Songs container title Liedere - + 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. @@ -5719,14 +5838,14 @@ 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. @@ -5761,32 +5880,32 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling.Voeg die geselekteerde Lied by die diens. - + 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. @@ -6078,7 +6197,7 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. 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. + Hierdie gids sal help om die liedere na die oop en gratis OpenLyrics aanbiddigs-formaat uit te voer. @@ -6141,7 +6260,7 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling.'n Lêer gids moet gespesifiseer word. - + Select Destination Folder Kies Bestemming Lêer gids @@ -6150,6 +6269,11 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling.Select the directory where you want the songs to be saved. Kies die gids waar die liedere gestoor moet word. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6368,13 +6492,18 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. Finished export. - Uitvoer voltooi. + Uitvoer voltooi. - + Your song export failed. Die lied uitvoer het misluk. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/cs.ts b/resources/i18n/cs.ts index 27c975638..00f4f80d8 100644 --- a/resources/i18n/cs.ts +++ b/resources/i18n/cs.ts @@ -813,17 +813,17 @@ demand and thus an internet connection is required. Nelze kombinovat jednoduché a dvojité výsledky hledání veršů v Bibli. Přejete si smazat výsledky hledání a začít s novým vyhledáváním? - + Bible not fully loaded. Bible není celá načtena. - + Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1251,24 +1251,24 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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>Modul obrázek</strong><br />Modul obrázek se stará o zobrazování obrázků.<br />Jedna z charakteristických funkcí tohoto modulu je schopnost ve správci služby seskupit několik obrázků dohromady. Tato vlastnost zjednodušuje zobrazení více obrázků. Tento modul také využívá vlastnosti "časová smyčka" aplikace OpenLP a je tudíž možno vytvořit prezentaci obrázků, která poběží samostatně. Nadto lze využitím obrázků z modulu překrýt pozadí současného motivu. - + Image name singular Obrázek - + Images name plural Obrázky - + Images container title Obrázky @@ -1309,37 +1309,37 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Přidat vybraný obrázek ke službě. - + Load a new image. - + Add a new image. - + Edit the selected image. - + Delete the selected image. - + Preview the selected image. - + Send the selected image live. - + Add the selected image to the service. @@ -1365,38 +1365,56 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Pro smazání musíte nejdříve vybrat obrázek. - + You must select an image to replace the background with. K nahrazení pozadí musíte nejdříve vybrat obrázek. - + Missing Image(s) Chybějící obrázky - + The following image(s) no longer exist: %s Následující obrázky už neexistují: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Následující obrázky už neexistují: % Chcete přidat ostatní obrázky? - + There was a problem replacing your background, the image file "%s" no longer exists. Problém s nahrazením pozadí. Obrázek "%s" už neexistuje. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2614,287 +2632,287 @@ Pro úplné zrušení Průvodce prvním spuštění klepněte nyní na tlačítk OpenLP.MainWindow - + &File &Soubor - + &Import &Import - + &Export &Export - + &View &Zobrazit - + M&ode &Režim - + &Tools &Nástroje - + &Settings &Nastavení - + &Language &Jazyk - + &Help &Nápověda - + Media Manager Správce médií - + Service Manager Správce služby - + Theme Manager Správce motivů - + &New &Nový - + &Open &Otevřít - + Open an existing service. Otevřít existující službu. - + &Save &Uložit - + Save the current service to disk. Uložit současnou službu na disk. - + Save &As... Uložit &jako... - + Save Service As Uložit službu jako - + Save the current service under a new name. Uložit současnou službu s novým názvem. - + E&xit U&končit - + Quit OpenLP Ukončit OpenLP - + &Theme &Motiv - + &Configure OpenLP... &Nastavit OpenLP... - + &Media Manager Správce &médií - + Toggle Media Manager Přepnout správce médií - + Toggle the visibility of the media manager. Přepnout viditelnost správce médií. - + &Theme Manager Správce &motivů - + Toggle Theme Manager Přepnout správce motivů - + Toggle the visibility of the theme manager. Přepnout viditelnost správce motivů. - + &Service Manager Správce &služby - + Toggle Service Manager Přepnout správce služby - + Toggle the visibility of the service manager. Přepnout viditelnost správce služby. - + &Preview Panel Panel &náhledu - + Toggle Preview Panel Přepnout panel náhledu - + Toggle the visibility of the preview panel. Přepnout viditelnost panelu náhled. - + &Live Panel Panel na&živo - + Toggle Live Panel Přepnout panel naživo - + Toggle the visibility of the live panel. Přepnout viditelnost panelu naživo. - + &Plugin List Seznam &modulů - + List the Plugins Vypsat moduly - + &User Guide &Uživatelská příručka - + &About &O aplikaci - + More information about OpenLP Více informací o aplikaci OpenLP - + &Online Help &Online nápověda - + &Web Site &Webová stránka - + Use the system language, if available. Použít jazyk systému, pokud je dostupný. - + Set the interface language to %s Jazyk rozhraní nastaven na %s - + Add &Tool... Přidat &nástroj... - + Add an application to the list of tools. Přidat aplikaci do seznamu nástrojů. - + &Default &Výchozí - + Set the view mode back to the default. Nastavit režim zobrazení zpět na výchozí. - + &Setup &Nastavení - + Set the view mode to Setup. Nastavit režim zobrazení na Nastavení. - + &Live &Naživo - + Set the view mode to Live. Nastavit režim zobrazení na Naživo. - + 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/. @@ -2903,22 +2921,22 @@ You can download the latest version from http://openlp.org/. Nejnovější verzi lze stáhnout z http://openlp.org/. - + OpenLP Version Updated Verze OpenLP aktualizována - + OpenLP Main Display Blanked Hlavní zobrazení OpenLP je prázdné - + The Main Display has been blanked out Hlavní zobrazení nastaveno na prázdný snímek - + Default Theme: %s Výchozí motiv: %s @@ -2929,17 +2947,17 @@ Nejnovější verzi lze stáhnout z http://openlp.org/. Angličtina - + Configure &Shortcuts... Nastavuji &zkratky... - + Close OpenLP Zavřít OpenLP - + Are you sure you want to close OpenLP? Chcete opravdu zavřít aplikaci OpenLP? @@ -2954,27 +2972,27 @@ Nejnovější verzi lze stáhnout z http://openlp.org/. &Nastavit značky zobrazení - + Open &Data Folder... Otevřít složku s &daty... - + Open the folder where songs, bibles and other data resides. Otevřít složku, kde se nachází písně, Bible a ostatní data. - + &Autodetect &Automaticky detekovat - + Update Theme Images Aktualizovat obrázky motivu - + Update the preview images for all themes. Aktualizovat náhledy obrázků všech motivů. @@ -2984,63 +3002,144 @@ Nejnovější verzi lze stáhnout z http://openlp.org/. F1 - + Print the current service. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Nastavení + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Otevřít soubor + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3119,7 +3218,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3283,12 +3382,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3384,19 +3483,19 @@ Suffix not supported &Změnit motiv položky - + OpenLP Service Files (*.osz) Soubory služby OpenLP (*.osz) - + File is not a valid service. The content encoding is not UTF-8. Soubor není platná služba. Obsah souboru není v kódování UTF-8. - + File is not a valid service. Soubor není platná služba. @@ -3481,32 +3580,32 @@ Obsah souboru není v kódování UTF-8. Zobrazit n&aživo - + Modified Service Změněná služba - + The current service has been modified. Would you like to save this service? Současná služba byla změněna. Přejete si službu uložit? - + File could not be opened because it is corrupt. Soubor se nepodařilo otevřít, protože je poškozený. - + Empty File Prázdný soubor - + This service file does not contain any data. Tento soubor služby neobsahuje žádná data. - + Corrupt File Poškozený soubor @@ -3551,22 +3650,22 @@ Obsah souboru není v kódování UTF-8. Vybrat motiv pro službu. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3887,27 +3986,27 @@ Obsah souboru není v kódování UTF-8. OpenLP.ThemeForm - + Select Image Vybrat obrázek - + Theme Name Missing Chybí název motivu - + There is no name for this theme. Please enter one. Není vyplněn název motivu. Prosím zadejte ho. - + Theme Name Invalid Neplatný název motivu - + Invalid theme name. Please enter one. Neplatný název motivu. Prosím zadejte nový. @@ -3917,7 +4016,7 @@ Obsah souboru není v kódování UTF-8. (%d řádek na snímek) - + (approximately %d lines per slide) @@ -3995,12 +4094,12 @@ Obsah souboru není v kódování UTF-8. Pro úpravy je třeba vybrat motiv. - + You are unable to delete the default theme. Není možno smazat výchozí motiv. - + Theme %s is used in the %s plugin. Motiv %s je používán v modulu %s. @@ -4097,7 +4196,7 @@ Obsah souboru není v kódování UTF-8. Smazat motiv %s? - + Validation Error Chyba ověřování @@ -4121,255 +4220,260 @@ Obsah souboru není v kódování UTF-8. OpenLP.ThemeWizard - + Theme Wizard Průvodce motivem - + Welcome to the Theme Wizard Vítejte v průvodci motivem - + Set Up Background Nastavení pozadí - + Set up your theme's background according to the parameters below. Podle parametrů níže nastavte pozadí motivu. - + Background type: Typ pozadí: - + Solid Color Plná barva - + Gradient Přechod - + Color: Barva: - + Gradient: Přechod: - + Horizontal Vodorovný - + Vertical Svislý - + Circular Kruhový - + Top Left - Bottom Right Vlevo nahoře - vpravo dole - + Bottom Left - Top Right Vlevo dole - vpravo nahoře - + Main Area Font Details Podrobnosti písma hlavní oblasti - + Define the font and display characteristics for the Display text Definovat písmo a charakteristiku zobrazení pro zobrazený text - + Font: Písmo: - + Size: Velikost: - + Line Spacing: Řádkování: - + &Outline: &Obrys: - + &Shadow: &Stín: - + Bold Tučné - + Italic Kurzíva - + Footer Area Font Details Podrobnosti písma oblasti zápatí - + Define the font and display characteristics for the Footer text Definovat písmo a charakteristiku zobrazení pro text zápatí - + Text Formatting Details Podrobnosti formátování textu - + Allows additional display formatting information to be defined Dovoluje definovat další formátovací informace zobrazení - + Horizontal Align: Vodorovné zarovnání: - + Left Vlevo - + Right Vpravo - + Center Na střed - + Output Area Locations Umístění výstupní oblasti - + Allows you to change and move the main and footer areas. Dovoluje změnit a přesunout hlavní oblast a oblast zápatí. - + &Main Area &Hlavní oblast - + &Use default location &Použít výchozí umístění - + X position: Pozice X: - + px px - + Y position: Pozice Y: - + Width: Šířka: - + Height: Výška: - + Use default location Použít výchozí umístění - + Save and Preview Uložit a náhled - + View the theme and save it replacing the current one or change the name to create a new theme Zobrazit motiv a uložit ho, dojde k přepsání současného nebo změňte název, aby se vytvořil nový motiv - + Theme name: Název motivu: - + Edit Theme - %s Upravit motiv - %s - + 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. Tento průvodce pomáhá s vytvořením a úpravou vašich motivu. Klepněte níže na tlačítko další pro spuštění procesu nastavení vašeho pozadí. - + Transitions: Přechody: - + &Footer Area Oblast &zápatí - + Starting color: - + Ending color: + + + Background color: + Barva pozadí: + OpenLP.ThemesTab @@ -4760,7 +4864,7 @@ Obsah souboru není v kódování UTF-8. Připraven. - + Starting import... Spouštím import... @@ -5300,126 +5404,141 @@ Obsah souboru není v kódování UTF-8. SongUsagePlugin - + &Song Usage Tracking Sledování použití &písní - + &Delete Tracking Data &Smazat data sledování - + Delete song usage data up to a specified date. Smazat data použití písní až ke konkrétnímu kalendářnímu datu. - + &Extract Tracking Data &Rozbalit data sledování - + Generate a report on song usage. Vytvořit hlášení z používání písní. - + Toggle Tracking Přepnout sledování - + Toggle the tracking of song usage. Přepnout sledování použití písní. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Modul používání písní</strong><br />Tento modul sleduje používání písní ve službách. - + SongUsage name singular Používání písně - + SongUsage name plural Používání písní - + SongUsage container title Používání písní - + Song Usage Používání písní - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Smazat data používání písní - + Delete Selected Song Usage Events? Smazat události vybraného používání písní? - + Are you sure you want to delete selected Song Usage data? Jste si jist, že chcete smazat vybraná data o používání písní? - + Deletion Successful Smazání úspěšné - + All requested data has been deleted successfully. Všechny požadovaná data byla úspěšně smazána. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Rozbalení používání písní - + Select Date Range Vybrat rozsah datumu - + to do - + Report Location Umístění hlášení @@ -5434,12 +5553,12 @@ Obsah souboru není v kódování UTF-8. usage_detail_%s_%s.txt - + Report Creation Vytvoření hlášení - + Report %s has been successfully created. @@ -5461,112 +5580,112 @@ bylo úspěšně vytvořeno. SongsPlugin - + &Song &Píseň - + Import songs using the import wizard. Import písní průvodcem importu. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Modul písně</strong><br />Modul písně umožňuje zobrazovat a spravovat písně. - + &Re-index Songs &Přeindexovat písně - + Re-index the songs database to improve searching and ordering. Přeindexovat písně v databázi pro vylepšení hledání a řazení. - + Reindexing songs... Přeindexovávám písně... - + Arabic (CP-1256) Arabština (CP-1256) - + Baltic (CP-1257) Baltské jazyky (CP-1257) - + Central European (CP-1250) Středoevropské jazyky (CP-1250) - + Cyrillic (CP-1251) Cyrilice (CP-1251) - + Greek (CP-1253) Řečtina (CP-1253) - + Hebrew (CP-1255) Hebrejština (CP-1255) - + Japanese (CP-932) Japonština (CP-932) - + Korean (CP-949) Korejština (CP-949) - + Simplified Chinese (CP-936) Zjednodušená čínština (CP-936) - + Thai (CP-874) Thajština (CP-874) - + Traditional Chinese (CP-950) Tradiční čínština (CP-950) - + Turkish (CP-1254) Turečtina (CP-1254) - + Vietnam (CP-1258) Vietnamština (CP-1258) - + Western European (CP-1252) Západoevropské jazyky (CP-1252) - + Character Encoding Kódování znaků - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5575,32 +5694,32 @@ za správnou reprezentaci znaků. Předvybraná volba by obvykle měla být správná. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Vyberte prosím kódování znaků. Kódování zodpovídá za správnou reprezentaci znaků. - + Song name singular Píseň - + Songs name plural Písně - + Songs container title Písně - + Exports songs using the export wizard. Exportuje písně průvodcem exportu. @@ -5635,32 +5754,32 @@ Kódování zodpovídá za správnou reprezentaci znaků. Přidat vybranou píseň ke službě. - + 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. @@ -5952,7 +6071,7 @@ Kódování zodpovídá za správnou reprezentaci znaků. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - Tento průvodce pomáhá exportovat vaše písně do otevřeného a svobodného formátu chval OpenLyrics. + Tento průvodce pomáhá exportovat vaše písně do otevřeného a svobodného formátu chval OpenLyrics. @@ -6015,7 +6134,7 @@ Kódování zodpovídá za správnou reprezentaci znaků. Je potřeba zadat adresář. - + Select Destination Folder Vybrat cílovou složku @@ -6024,6 +6143,11 @@ Kódování zodpovídá za správnou reprezentaci znaků. Select the directory where you want the songs to be saved. Vybrat složku, kam se budou ukládat písně. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6243,13 +6367,18 @@ Kódování zodpovídá za správnou reprezentaci znaků. Finished export. - Export dokončen. + Export dokončen. - + Your song export failed. Export písně selhal. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index 09c5a2c6d..a57b1ad4e 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -708,17 +708,17 @@ werden. Daher ist eine Internetverbindung erforderlich. Es ist nicht möglich Einzel- und Zweifach Bibelvers Suchergebnisse zu kombinieren. Sollen die Suchergebnisse gelöscht und eine neue Suche gestartet werden? - + Bible not fully loaded. Bibel wurde nicht vollständig geladen. - + Information Hinweis - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. Die Vergleichsbibel enthält nicht alle Verse, die in der Hauptbibel vorhanden sind. Nur die Verse, die in beiden Bibeln vorhanden sind, werden angezeigt. %d Verse sind nicht enthalten. @@ -803,16 +803,6 @@ werden. Daher ist eine Internetverbindung erforderlich. Please select the Bibles to upgrade Bitte wählen Sie die Bibeln welche aktualisiert werden sollen - - - Version name: - Bibelausgabe: - - - - This Bible still exists. Please change the name or uncheck it. - Diese Bibel existiert bereits. Bitte ändern Sie den Namen oder wählen Sie die Bibel in der Liste ab. - Upgrading @@ -823,21 +813,6 @@ werden. Daher ist eine Internetverbindung erforderlich. Please wait while your Bibles are upgraded. Bitte warten Sie bis Ihre Bibeln aktualisiert sind. - - - You need to specify a version name for your Bible. - Bitte geben Sie den Namen der Bibelübersetzung ein. - - - - Bible Exists - Übersetzung bereits vorhanden - - - - This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. - Diese Bibel existiert bereits. Bitte aktualisieren Sie eine andere Bibel, löschen Sie die bereits vorhandene oder wählen Sie die Bibel in der Liste ab. - Upgrading Bible %s of %s: "%s" @@ -1077,60 +1052,60 @@ Bitte beachten Sie, dass Bibeltexte von Onlinebibeln bei Bedarf heruntergeladen ImagePlugin - + <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>Bilder Erweiterung</strong><br />Die Bilder Erweiterung ermöglicht die Anzeige von Bildern.<br />Eine der besonderen Eigenschaften dieser Erweiterung ist die Möglichkeit, in der Ablaufverwaltung, mehrere Bilder zu einer Gruppe zusammen zu fassen. Dies vereinfacht die die Anzeige mehrerer Bilder. Ebenso kann mit Hilfe der Zeitschleife, sehr einfach eine Diaschau erzeugt werden, welche dann automatisch abläuft. Des weiteren können mit dieser Erweiterung Bilder benutzt werden, um das Hintergrundbild des aktuellen Design zu ersetzen. - + Image name singular Bild - + Images name plural Bilder - + Images container title Bilder - + Load a new image. Lade ein neues Bild. - + Add a new image. Füge eine neues Bild hinzu. - + Edit the selected image. Bearbeite das ausgewählte Bild. - + Delete the selected image. Lösche das ausgewählte Bild. - + Preview the selected image. Zeige das ausgewählte Bild in der Vorschau. - + Send the selected image live. Zeige die ausgewählte Bild Live. - + Add the selected image to the service. Füge das ausgewählte Bild zum Ablauf hinzu. @@ -1156,38 +1131,56 @@ Bitte beachten Sie, dass Bibeltexte von Onlinebibeln bei Bedarf heruntergeladen Das Bild, das entfernt werden soll, muss ausgewählt sein. - + You must select an image to replace the background with. Das Bild, das Sie als Hintergrund setzen möchten, muss ausgewählt sein. - + Missing Image(s) Fehlende Bilder - + The following image(s) no longer exist: %s Auf die folgenden Bilder kann nicht mehr zugegriffen werden: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Auf die folgenden Bilder kann nicht mehr zugegriffen werden: %s Wollen Sie die anderen Bilder trotzdem hinzufügen? - + There was a problem replacing your background, the image file "%s" no longer exists. Da auf das Bild »%s« nicht mehr zugegriffen werden kann, konnte es nicht als Hintergrund gesetzt werden. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + Hintergrundfarbe + + + + Default Color: + Standardfarbe: + + + + Provides border where image is not the correct dimensions for the screen when resized. + Wenn Bilder ein anderes Seitenverhältniss als der Projektionsbildschirm haben, dann wird ein fabiger Rand hinzufgefügt. + + MediaPlugin @@ -1601,170 +1594,6 @@ der Medienverwaltung angklickt werden Standard-Logo wiederherstellen. - - OpenLP.DisplayTagDialog - - - Edit Selection - Auswahl bearbeiten - - - - Description - Beschreibung - - - - Tag - Tag - - - - Start tag - Anfangs Tag - - - - End tag - End Tag - - - - Tag Id - Tag Nr. - - - - Start HTML - Anfangs HTML - - - - End HTML - End HTML - - - - Save - Speichern - - - - OpenLP.DisplayTagTab - - - Update Error - Aktualisierungsfehler - - - - Tag "n" already defined. - Tag »n« bereits definiert. - - - - Tag %s already defined. - Tag »%s« bereits definiert. - - - - New Tag - Neuer Tag - - - - </and here> - </und hier> - - - - <HTML here> - <HTML hier> - - - - OpenLP.DisplayTags - - - Red - rot - - - - Black - schwarz - - - - Blue - blau - - - - Yellow - gelb - - - - Green - grün - - - - Pink - rosa - - - - Orange - orange - - - - Purple - lila - - - - White - weiß - - - - Superscript - hochgestellt - - - - Subscript - tiefgestellt - - - - Paragraph - Textabsatz - - - - Bold - fett - - - - Italics - kursiv - - - - Underline - unterstrichen - - - - Break - Textumbruch - - OpenLP.ExceptionDialog @@ -1812,7 +1641,7 @@ dieser Fehler auftrat. Bitte verwenden Sie (wenn möglich) Englisch. Platform: %s - Plattform: %s + Plattform: %s @@ -2442,307 +2271,307 @@ Um den Einrichtungsassistent nicht auszuführen, drücken Sie »Abschließen«.< OpenLP.MainWindow - + &File &Datei - + &Import &Importieren - + &Export &Exportieren - + &View &Ansicht - + M&ode An&sichtsmodus - + &Tools E&xtras - + &Settings &Einstellungen - + &Language &Sprache - + &Help &Hilfe - + Media Manager Medienverwaltung - + Service Manager Ablaufverwaltung - + Theme Manager Designverwaltung - + &New &Neu - + &Open Ö&ffnen - + Open an existing service. Einen vorhandenen Ablauf öffnen. - + &Save &Speichern - + Save the current service to disk. Den aktuellen Ablauf speichern. - + Save &As... Speichern &unter... - + Save Service As Den aktuellen Ablauf unter einem neuen Namen speichern - + Save the current service under a new name. Den aktuellen Ablauf unter einem neuen Namen speichern. - + E&xit &Beenden - + Quit OpenLP OpenLP beenden - + &Theme &Design - + &Configure OpenLP... &Einstellungen... - + &Media Manager &Medienverwaltung - + Toggle Media Manager Die Medienverwaltung ein- bzw. ausblenden - + Toggle the visibility of the media manager. Die Medienverwaltung ein- bzw. ausblenden. - + &Theme Manager &Designverwaltung - + Toggle Theme Manager Die Designverwaltung ein- bzw. ausblenden - + Toggle the visibility of the theme manager. Die Designverwaltung ein- bzw. ausblenden. - + &Service Manager &Ablaufverwaltung - + Toggle Service Manager Die Ablaufverwaltung ein- bzw. ausblenden - + Toggle the visibility of the service manager. Die Ablaufverwaltung ein- bzw. ausblenden. - + &Preview Panel &Vorschau-Ansicht - + Toggle Preview Panel Die Vorschau ein- bzw. ausblenden - + Toggle the visibility of the preview panel. Die Vorschau ein- bzw. ausschalten. - + &Live Panel &Live-Ansicht - + Toggle Live Panel Die Live Ansicht ein- bzw. ausschalten - + Toggle the visibility of the live panel. Die Live Ansicht ein- bzw. ausschalten. - + &Plugin List Er&weiterungen... - + List the Plugins Erweiterungen verwalten - + &User Guide Benutzer&handbuch - + &About &Info über OpenLP - + More information about OpenLP Mehr Informationen über OpenLP - + &Online Help &Online Hilfe - + &Web Site &Webseite - + Use the system language, if available. Die Systemsprache, sofern diese verfügbar ist, verwenden. - + Set the interface language to %s Die Sprache von OpenLP auf %s stellen - + Add &Tool... Hilfsprogramm hin&zufügen... - + Add an application to the list of tools. Eine Anwendung zur Liste der Hilfsprogramme hinzufügen. - + &Default &Standard - + Set the view mode back to the default. Den Ansichtsmodus auf Standardeinstellung setzen. - + &Setup &Einrichten - + Set the view mode to Setup. Die Ansicht für die Ablauferstellung optimieren. - + &Live &Live - + Set the view mode to Live. 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/. @@ -2757,82 +2586,77 @@ Sie können die letzte Version auf http://openlp.org abrufen. Deutsch - + Configure &Shortcuts... Konfiguriere &Tastenkürzel... - + Close OpenLP OpenLP beenden - + Are you sure you want to close OpenLP? Sind Sie sicher, dass OpenLP beendet werden soll? - + Open &Data Folder... Öffne &Datenverzeichnis... - + Open the folder where songs, bibles and other data resides. Öffne das Verzeichnis, wo Lieder, Bibeln und andere Daten gespeichert sind. - - &Configure Display Tags - &Formatvorlagen - - - + &Autodetect &Automatisch - + Update Theme Images Aktualisiere Design Bilder - + Update the preview images for all themes. Aktualisiert die Vorschaubilder aller Designs. - + Print the current service. Drucke den aktuellen Ablauf. - + L&ock Panels &Sperre Leisten - + Prevent the panels being moved. Unterbindet das Bewegen der Leisten. - + Re-run First Time Wizard Einrichtungsassistent starten - + Re-run the First Time Wizard, importing songs, Bibles and themes. Einrichtungsassistent erneut starten um Beispiel-Lieder, Bibeln und Designs zu importieren. - + Re-run First Time Wizard? Einrichtungsassistent starten? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. @@ -2841,26 +2665,116 @@ Re-running this wizard may make changes to your current OpenLP configuration and Der Einrichtungsassistent kann einige Einstellungen verändern und ggf. neue Lieder, Bibeln und Designs zu den bereits vorhandenen hinzufügen. - + &Recent Files &Zuletzte geöffnete Abläufe &Configure Formatting Tags... - Konfiguriere &Formatvorlagen... + Konfiguriere &Formatvorlagen... - + Clear List Clear List of recent files Leeren - + Clear the list of recent files. Leert die Liste der zuletzte geöffnete Abläufe. + + + Configure &Formatting Tags... + Konfiguriere &Formatvorlagen... + + + + Settings + Einstellungen + + + + Import settings? + Importiere Einstellungen? + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + Sind Sie sicher, dass Sie Einstellungen importieren möchten? + +Der Import wird dauerhafte Veränderungen an Ihrer OpenLP Konfiguration machen. + +Falsche Einstellungen können fehlerhaftes Verhalten von OpenLP verursachen. + + + + Open File + Öffne Datei + + + + OpenLP Export Settings Files (*.conf) + OpenLP Einstellungsdatei (*.conf) + + + + Import settings + Importiere Einstellungen + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + OpenLP wird nun geschlossen. Importierte Einstellungen werden bei dem nächsten Start übernommen. + + + + Export Settings File + Exportiere Einstellungsdatei + + + + OpenLP Export Settings File (*.conf) + OpenLP Einstellungsdatei (*.conf) + + + + Export OpenLP settings to a specified *.config file + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + OpenLP.Manager + + + Database Error + Datenbankfehler + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -2914,13 +2828,6 @@ Der Einrichtungsassistent kann einige Einstellungen verändern und ggf. neue Lie You must select one or more items to add. Sie müssen ein oder mehrer Element auswählen. - - - Duplicate filename %s. -This filename is already in the list - Doppelter Dateiname %s. -Dateiname existiert bereits in der Liste. - &Clone @@ -2940,7 +2847,7 @@ Dateiendung nicht unterstützt. - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3094,12 +3001,12 @@ Dateiendung nicht unterstützt. OpenLP.ServiceItem - + <strong>Start</strong>: %s <strong>Anfang</strong>: %s - + <strong>Length</strong>: %s <strong>Spiellänge</strong>: %s @@ -3195,14 +3102,14 @@ Dateiendung nicht unterstützt. &Design des Elements ändern - + File is not a valid service. The content encoding is not UTF-8. Die gewählte Datei ist keine gültige OpenLP Ablaufdatei. Der Inhalt ist nicht in UTF-8 kodiert. - + File is not a valid service. Die Datei ist keine gültige OpenLP Ablaufdatei. @@ -3247,7 +3154,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. Ablauf öffnen - + OpenLP Service Files (*.osz) OpenLP Ablaufdateien (*.osz) @@ -3277,12 +3184,12 @@ Der Inhalt ist nicht in UTF-8 kodiert. Ausgewähltes nach unten schieben - + Modified Service Modifizierter Ablauf - + The current service has been modified. Would you like to save this service? Der momentane Ablauf wurde modifiziert. Möchten Sie ihn speichern? @@ -3302,22 +3209,22 @@ Der Inhalt ist nicht in UTF-8 kodiert. &Live - + File could not be opened because it is corrupt. Datei konnte nicht geöffnet werden, da sie fehlerhaft ist. - + Empty File Leere Datei - + This service file does not contain any data. Diese Datei enthält keine Daten. - + Corrupt File Dehlerhaft Datei @@ -3357,22 +3264,22 @@ Der Inhalt ist nicht in UTF-8 kodiert. Design für den Ablauf auswählen. - + This file is either corrupt or it is not an OpenLP 2.0 service file. Entweder ist die Datei fehlerhaft oder sie ist keine OpenLP 2.0 Ablauf-Datei. - + Slide theme Element-Design - + Notes Notizen - + Service File Missing Ablaufdatei fehlt @@ -3395,11 +3302,6 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.ShortcutListDialog - - - Customize Shortcuts - Tastenkürzel anpassen - Action @@ -3633,32 +3535,32 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.ThemeForm - + Select Image Bild auswählen - + Theme Name Missing Designname fehlt - + There is no name for this theme. Please enter one. Es wurde kein Designname angegeben. Bitte benennen Sie das Design. - + Theme Name Invalid Designname ungültig - + Invalid theme name. Please enter one. Der Designname ist ungültig. Bitte ändern Sie diesen. - + (approximately %d lines per slide) (ungefähr %d Zeilen pro Folie) @@ -3711,7 +3613,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. 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. @@ -3763,7 +3665,7 @@ Sie ist nicht in UTF-8 kodiert. 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. @@ -3813,7 +3715,7 @@ Sie ist nicht in UTF-8 kodiert. Soll das Design »%s« wirklich gelöscht werden? - + Validation Error Validierungsfehler @@ -3862,255 +3764,260 @@ Sie ist nicht in UTF-8 kodiert. OpenLP.ThemeWizard - + Theme Wizard Designassistent - + Welcome to the Theme Wizard Willkommen beim Designassistenten - + Set Up Background Hintergrund einrichten - + Set up your theme's background according to the parameters below. Der Designhintergrund wird anhand der Parameter unten eingerichtet. - + Background type: Hintergrundart: - + Solid Color Füllfarbe - + Gradient Farbverlauf - + Color: Farbe: - + Gradient: Verlauf: - + Horizontal horizontal - + Vertical vertikal - + Circular radial - + Top Left - Bottom Right diagonal abwärts - + Bottom Left - Top Right diagonal aufwärts - + Main Area Font Details Schriftschnitt und -farbe - + Define the font and display characteristics for the Display text Die Schrift und die Anzeigeeigenschaften für die Hauptanzeigefläche einrichten - + Font: Schriftart: - + Size: Schriftgröße: - + Line Spacing: Zeilenabstand: - + &Outline: &Umrandung: - + &Shadow: S&chatten: - + Bold Fett - + Italic Kursiv - + Footer Area Font Details Fußzeile einrichten - + Define the font and display characteristics for the Footer text Die Schrift und die Anzeigeeigenschaften für die Fußzeile einrichten - + Text Formatting Details Weitere Formatierung - + Allows additional display formatting information to be defined Hier können zusätzliche Anzeigeeigenschaften eingerichtet werden. - + Horizontal Align: Horizontale Ausrichtung: - + Left links - + Right rechts - + Center zentriert - + Output Area Locations Anzeigeflächen - + Allows you to change and move the main and footer areas. Hier ist es möglich Hauptanzeigefläche und die Fußzeile zu verschieben. - + &Main Area &Hauptanzeigefläche - + &Use default location &Automatisch positionieren - + X position: Von links: - + px px - + Y position: Von oben: - + Width: Breite: - + Height: Höhe: - + Use default location Automatisch positionieren - + Save and Preview Vorschau und Speichern - + View the theme and save it replacing the current one or change the name to create a new theme Eine Vorschau anzeigen und das Design abspeichern - + Theme name: Designname: - + 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. Dieser Assistent hilft Ihnen Designs zu erstellen oder zu bearbeiten. Klicken Sie auf »Weiter« um den Hintergrund einzurichten. - + Transitions: Übergänge: - + &Footer Area &Fußzeile - + Edit Theme - %s Bearbeite Design - %s - + Starting color: - + Ending color: + + + Background color: + Hintergrundfarbe: + OpenLP.ThemesTab @@ -4466,7 +4373,7 @@ Sie ist nicht in UTF-8 kodiert. Fertig. - + Starting import... Beginne Import... @@ -4701,14 +4608,6 @@ Sie ist nicht in UTF-8 kodiert. Halte Schleife an - - OpenLP.displayTagDialog - - - Configure Display Tags - Konfiguriere Formatvorlagen - - PresentationPlugin @@ -4981,126 +4880,141 @@ Sie ist nicht in UTF-8 kodiert. SongUsagePlugin - + &Song Usage Tracking &Protokollierung - + &Delete Tracking Data &Protokoll löschen - + Delete song usage data up to a specified date. Das Protokoll ab einem bestimmten Datum löschen. - + &Extract Tracking Data &Protokoll extrahieren - + Generate a report on song usage. Einen Protokoll-Bericht erstellen. - + Toggle Tracking Aktiviere Protokollierung - + Toggle the tracking of song usage. Setzt die Protokollierung aus. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Erweiterung Liedprotokollierung</strong><br />Diese Erweiterung zählt die Verwendung von Liedern in Veranstaltungen. - + SongUsage name singular Liedprotokollierung - + SongUsage name plural Liedprotokollierung - + SongUsage container title Liedprotokollierung - + Song Usage Liedprotokollierung - + Song usage tracking is active. Liedprotokollierung ist aktiv. - + Song usage tracking is inactive. Liedprotokollierung ist nicht aktiv. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Protokolldaten löschen - + Delete Selected Song Usage Events? Wollen sie die ausgewählten Ereignisse löschen? - + Are you sure you want to delete selected Song Usage data? Sind sie sicher, dass die ausgewählten Protokolldaten löschen wollen? - + Deletion Successful Löschung erfolgreich - + All requested data has been deleted successfully. Die Protokolldaten wurden erfolgreich gelöscht. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Protokoll extrahieren - + Select Date Range Zeitspanne - + to bis - + Report Location Zielverzeichnis für die Statistiken @@ -5115,12 +5029,12 @@ Sie ist nicht in UTF-8 kodiert. Aufrufprotokoll_%s_%s.txt - + Report Creation Statistik Erstellung - + Report %s has been successfully created. @@ -5142,137 +5056,137 @@ wurde erfolgreich erstellt. SongsPlugin - + &Song &Lied - + Import songs using the import wizard. Lieder importieren. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Erweiterung Lieder</strong><br />Die Erweiterung Lieder ermöglicht die Darstellung und Verwaltung von Liedtexten. - + &Re-index Songs Liederverzeichnis &reindizieren - + Re-index the songs database to improve searching and ordering. Das reindizieren der Liederdatenbank kann die Suchergebnisse verbessern. - + Reindexing songs... Reindiziere die Liederdatenbank... - + Song name singular Lied - + Songs name plural Lieder - + Songs container title Lieder - + Arabic (CP-1256) Arabisch (CP-1256) - + Baltic (CP-1257) Baltisch (CP-1257) - + Central European (CP-1250) Zentraleuropäisch (CP-1250) - + Cyrillic (CP-1251) Kyrillisch (CP-1251) - + Greek (CP-1253) Griechisch (CP-1253) - + Hebrew (CP-1255) Hebräisch (CP-1255) - + Japanese (CP-932) Japanisch (CP-932) - + Korean (CP-949) Koreanisch (CP-949) - + Simplified Chinese (CP-936) Chinesisch, vereinfacht (CP-936) - + Thai (CP-874) Thailändisch (CP-874) - + Traditional Chinese (CP-950) Chinesisch, traditionell (CP-950) - + Turkish (CP-1254) Türkisch (CP-1254) - + Vietnam (CP-1258) Vietnamesisch (CP-1258) - + Western European (CP-1252) Westeuropäisch (CP-1252) - + Character Encoding Zeichenkodierung - + Please choose the character encoding. The encoding is responsible for the correct character representation. Bitte wählen sie die Zeichenkodierung. Diese ist für die korrekte Darstellung der Sonderzeichen verantwortlich. - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5282,37 +5196,37 @@ Gewöhnlich ist die vorausgewählte Einstellung korrekt. - + Exports songs using the export wizard. Exportiert Lieder mit dem Exportassistenten. - + Add a new song. Erstelle eine neues Lied. - + Edit the selected song. Bearbeite das ausgewählte Lied. - + Delete the selected song. Lösche das ausgewählte Lied. - + Preview the selected song. Zeige das ausgewählte Lied in der Vorschau. - + Send the selected song live. Zeige das ausgewählte Lied Live. - + Add the selected song to the service. Füge das ausgewählte Lied zum Ablauf hinzu. @@ -5594,7 +5508,7 @@ Einstellung korrekt. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - Dieser Assistent wird Ihnen helfen Lieder in das freie und offene OpenLyrics Lobpreis Lieder Format zu exportieren. + Dieser Assistent wird Ihnen helfen Lieder in das freie und offene OpenLyrics Lobpreis Lieder Format zu exportieren. @@ -5657,7 +5571,7 @@ Einstellung korrekt. Sie müssen ein Verzeichnis angeben. - + Select Destination Folder Zielverzeichnis wählen @@ -5666,6 +5580,11 @@ Einstellung korrekt. Select the directory where you want the songs to be saved. Geben Sie das Zielverzeichnis an. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + Dieser Assistent wird Ihnen helfen Lieder in das freie und offene <strong>OpenLyrics</strong> Lobpreis Lieder Format zu exportieren. + SongsPlugin.ImportWizardForm @@ -5869,13 +5788,18 @@ Einstellung korrekt. Finished export. - Export beendet. + Export beendet. - + Your song export failed. Der Liedexport schlug fehl. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + Export beendet. Diese Dateien können mit dem <strong>OpenLyrics</strong> Importer wieder importiert werden. + SongsPlugin.SongImport diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index 0aef9c929..65cf0b8b9 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -1,8 +1,5 @@ - - AlertPlugin.AlertForm - AlertsPlugin @@ -150,18 +147,6 @@ Do you want to continue anyway? - - BibleDB.Wizard - - - BiblePlugin - - - BiblePlugin.HTTPBible - - - BiblePlugin.MediaItem - BiblesPlugin @@ -710,17 +695,17 @@ demand and thus an internet connection is required. - + Bible not fully loaded. - + Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1044,66 +1029,63 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - - GeneralTab - ImagePlugin - + <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. - + Image name singular - + Images name plural - + Images container title - + Load a new image. - + Add a new image. - + Edit the selected image. - + Delete the selected image. - + Preview the selected image. - + Send the selected image live. - + Add the selected image to the service. @@ -1129,37 +1111,55 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + You must select an image to replace the background with. - + Missing Image(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? - + There was a problem replacing your background, the image file "%s" no longer exists. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -1500,15 +1500,6 @@ Portions copyright © 2004-2011 %s - - OpenLP.DisplayTagDialog - - - OpenLP.DisplayTagTab - - - OpenLP.DisplayTags - OpenLP.ExceptionDialog @@ -2153,309 +2144,309 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File - + &Import - + &Export - + &View - + M&ode - + &Tools - + &Settings - + &Language - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New - + &Open - + Open an existing service. - + &Save - + Save the current service to disk. - + Save &As... - + Save Service As - + Save the current service under a new name. - + E&xit - + Quit OpenLP - + &Theme - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - + &Theme Manager - + Toggle Theme Manager - + Toggle the visibility of the theme manager. - + &Service Manager - + Toggle Service Manager - + Toggle the visibility of the service manager. - + &Preview Panel - + Toggle Preview Panel - + Toggle the visibility of the preview panel. - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - + &Plugin List - + List the Plugins - + &User Guide - + &About - + More information about OpenLP - + &Online Help - + &Web Site - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live - + 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/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2466,103 +2457,184 @@ You can download the latest version from http://openlp.org/. - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect - + Update Theme Images - + Update the preview images for all themes. - + Print the current service. - + &Recent Files - - &Configure Formatting Tags... - - - - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -2628,13 +2700,13 @@ Suffix not supported - - Duplicate files found on import and ignored. + + &Clone - - &Clone + + Duplicate files were found on import and were ignored. @@ -2788,12 +2860,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -2889,18 +2961,18 @@ Suffix not supported - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. @@ -2985,12 +3057,12 @@ The content encoding is not UTF-8. - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3015,22 +3087,22 @@ The content encoding is not UTF-8. - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File @@ -3050,22 +3122,22 @@ The content encoding is not UTF-8. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Service File Missing - + Slide theme - + Notes @@ -3321,32 +3393,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - + (approximately %d lines per slide) @@ -3424,12 +3496,12 @@ The content encoding is not UTF-8. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. @@ -3525,7 +3597,7 @@ The content encoding is not UTF-8. - + Validation Error @@ -3549,255 +3621,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + Edit Theme - %s - + 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: - + &Footer Area - + Starting color: - + Ending color: + + + Background color: + + OpenLP.ThemesTab @@ -4153,7 +4230,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -4388,9 +4465,6 @@ The content encoding is not UTF-8. - - OpenLP.displayTagDialog - PresentationPlugin @@ -4663,126 +4737,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. - + Toggle Tracking - + Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular - + SongUsage name plural - + SongUsage container title - + Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -4797,12 +4886,12 @@ The content encoding is not UTF-8. - + Report Creation - + Report %s has been successfully created. @@ -4822,173 +4911,173 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + 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. - + Song name singular - + Songs name plural - + Songs container title - + Exports songs using the export wizard. - + 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. @@ -5267,11 +5356,6 @@ 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. - - Select Songs @@ -5333,7 +5417,7 @@ The encoding is responsible for the correct character representation. - + Select Destination Folder @@ -5342,6 +5426,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -5542,13 +5631,13 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - - Finished export. + + Your song export failed. - - Your song export failed. + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. @@ -5780,7 +5869,4 @@ The encoding is responsible for the correct character representation. - - ThemeTab - diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index a04554ea8..05631c139 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -827,17 +827,17 @@ demand and thus an internet connection is required. You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + Bible not fully loaded. Bible not fully loaded. - + Information Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1322,60 +1322,60 @@ on demand and so an Internet connection is required. ImagePlugin - + <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>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. - + Image name singular Image - + Images name plural Images - + Images container title Images - + Load a new image. Load a new image. - + Add a new image. Add a new image. - + Edit the selected image. Edit the selected image. - + Delete the selected image. Delete the selected image. - + Preview the selected image. Preview the selected image. - + Send the selected image live. Send the selected image live. - + Add the selected image to the service. Add the selected image to the service. @@ -1436,38 +1436,56 @@ on demand and so an Internet connection is required. You must select an image to delete. - + You must select an image to replace the background with. You must select an image to replace the background with. - + 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. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2772,287 +2790,287 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &File - + &Import &Import - + &Export &Export - + &View &View - + M&ode M&ode - + &Tools &Tools - + &Settings &Settings - + &Language &Language - + &Help &Help - + Media Manager Media Manager - + Service Manager Service Manager - + Theme Manager Theme Manager - + &New &New - + &Open &Open - + Open an existing service. Open an existing service. - + &Save &Save - + Save the current service to disk. Save the current service to disk. - + Save &As... Save &As... - + Save Service As Save Service As - + Save the current service under a new name. Save the current service under a new name. - + E&xit E&xit - + Quit OpenLP Quit OpenLP - + &Theme &Theme - + &Configure OpenLP... &Configure OpenLP... - + &Media Manager &Media Manager - + Toggle Media Manager Toggle Media Manager - + Toggle the visibility of the media manager. Toggle the visibility of the media manager. - + &Theme Manager &Theme Manager - + Toggle Theme Manager Toggle Theme Manager - + Toggle the visibility of the theme manager. Toggle the visibility of the theme manager. - + &Service Manager &Service Manager - + Toggle Service Manager Toggle Service Manager - + Toggle the visibility of the service manager. Toggle the visibility of the service manager. - + &Preview Panel &Preview Panel - + Toggle Preview Panel Toggle Preview Panel - + Toggle the visibility of the preview panel. Toggle the visibility of the preview panel. - + &Live Panel &Live Panel - + Toggle Live Panel Toggle Live Panel - + Toggle the visibility of the live panel. Toggle the visibility of the live panel. - + &Plugin List &Plugin List - + List the Plugins List the Plugins - + &User Guide &User Guide - + &About &About - + More information about OpenLP More information about OpenLP - + &Online Help &Online Help - + &Web Site &Web Site - + Use the system language, if available. Use the system language, if available. - + Set the interface language to %s Set the interface language to %s - + Add &Tool... Add &Tool... - + Add an application to the list of tools. Add an application to the list of tools. - + &Default &Default - + Set the view mode back to the default. Set the view mode back to the default. - + &Setup &Setup - + Set the view mode to Setup. Set the view mode to Setup. - + &Live &Live - + Set the view mode to Live. 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/. @@ -3060,22 +3078,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 @@ -3086,27 +3104,27 @@ You can download the latest version from http://openlp.org/. English (United Kingdom) - + Configure &Shortcuts... Configure &Shortcuts... - + Close OpenLP Close OpenLP - + Are you sure you want to close OpenLP? Are you sure you want to close OpenLP? - + 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. @@ -3116,22 +3134,22 @@ You can download the latest version from http://openlp.org/. &Configure Display Tags - + &Autodetect &Autodetect - + Update Theme Images Update Theme Images - + Update the preview images for all themes. Update the preview images for all themes. - + Print the current service. Print the current service. @@ -3141,58 +3159,139 @@ You can download the latest version from http://openlp.org/. Print the current Service Order. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Settings + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Open File + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3278,7 +3377,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3442,12 +3541,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3543,14 +3642,14 @@ Suffix not supported &Change Item Theme - + File is not a valid service. The content encoding is not UTF-8. File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. File is not a valid service. @@ -3595,7 +3694,7 @@ The content encoding is not UTF-8. Open File - + OpenLP Service Files (*.osz) OpenLP Service Files (*.osz) @@ -3625,7 +3724,7 @@ The content encoding is not UTF-8. Send the selected item to Live. - + Modified Service Modified Service @@ -3645,27 +3744,27 @@ The content encoding is not UTF-8. 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? - + File could not be opened because it is corrupt. File could not be opened because it is corrupt. - + Empty File Empty File - + This service file does not contain any data. This service file does not contain any data. - + Corrupt File Corrupt File @@ -3705,7 +3804,7 @@ The content encoding is not UTF-8. Select a theme for the service. - + This file is either corrupt or it is not an OpenLP 2.0 service file. This file is either corrupt or it is not an OpenLP 2.0 service file. @@ -3715,17 +3814,17 @@ The content encoding is not UTF-8. This file is either corrupt or not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -4006,32 +4105,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image Select Image - + Theme Name Missing Theme Name Missing - + There is no name for this theme. Please enter one. There is no name for this theme. Please enter one. - + Theme Name Invalid Theme Name Invalid - + Invalid theme name. Please enter one. Invalid theme name. Please enter one. - + (approximately %d lines per slide) (approximately %d lines per slide) @@ -4109,7 +4208,7 @@ The content encoding is not UTF-8. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. @@ -4161,7 +4260,7 @@ The content encoding is not UTF-8. File is not a valid theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. @@ -4211,7 +4310,7 @@ The content encoding is not UTF-8. Delete %s theme? - + Validation Error Validation Error @@ -4235,255 +4334,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard Theme Wizard - + Welcome to the Theme Wizard Welcome to the Theme Wizard - + Set Up Background Set Up Background - + Set up your theme's background according to the parameters below. Set up your theme's background according to the parameters below. - + Background type: Background type: - + Solid Color Solid Colour - + Gradient Gradient - + Color: Colour: - + Gradient: Gradient: - + Horizontal Horizontal - + Vertical Vertical - + Circular Circular - + Top Left - Bottom Right Top Left - Bottom Right - + Bottom Left - Top Right Bottom Left - Top Right - + Main Area Font Details Main Area Font Details - + Define the font and display characteristics for the Display text Define the font and display characteristics for the Display text - + Font: Font: - + Size: Size: - + Line Spacing: Line Spacing: - + &Outline: &Outline: - + &Shadow: &Shadow: - + Bold Bold - + Italic Italic - + Footer Area Font Details Footer Area Font Details - + Define the font and display characteristics for the Footer text Define the font and display characteristics for the Footer text - + Text Formatting Details Text Formatting Details - + Allows additional display formatting information to be defined Allows additional display formatting information to be defined - + Horizontal Align: Horizontal Align: - + Left Left - + Right Right - + Center Centre - + 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 - + X position: X position: - + px px - + Y position: Y position: - + Width: Width: - + Height: Height: - + Use default location Use default location - + 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 - + Starting color: - + Ending color: + + + Background color: + Background colour: + OpenLP.ThemesTab @@ -4844,7 +4948,7 @@ The content encoding is not UTF-8. Ready. - + Starting import... Starting import... @@ -5419,126 +5523,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking &Song Usage Tracking - + &Delete Tracking Data &Delete Tracking Data - + Delete song usage data up to a specified date. Delete song usage data up to a specified date. - + &Extract Tracking Data &Extract Tracking Data - + Generate a report on song usage. Generate a report on song usage. - + Toggle Tracking Toggle Tracking - + Toggle the tracking of song usage. 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 />This plugin tracks the usage of songs in services. - + SongUsage name singular SongUsage - + SongUsage name plural SongUsage - + SongUsage container title SongUsage - + Song Usage Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Delete Song Usage Data - + Delete Selected Song Usage Events? Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? Are you sure you want to delete selected Song Usage data? - + Deletion Successful Deletion Successful - + All requested data has been deleted successfully. All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Song Usage Extraction - + Select Date Range Select Date Range - + to to - + Report Location Report Location @@ -5553,12 +5672,12 @@ The content encoding is not UTF-8. usage_detail_%s_%s.txt - + Report Creation Report Creation - + Report %s has been successfully created. @@ -5580,130 +5699,130 @@ has been successfully created. SongsPlugin - + &Song &Song - + Import songs using the import wizard. Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &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... - + Song name singular Song - + Songs name plural Songs - + Songs container title Songs - + 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. @@ -5712,44 +5831,44 @@ 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. - + 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. @@ -6071,7 +6190,7 @@ The encoding is responsible for the correct character representation. 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. + This wizard will help to export your songs to the open and free OpenLyrics worship song format. @@ -6134,7 +6253,7 @@ The encoding is responsible for the correct character representation.You need to specify a directory. - + Select Destination Folder Select Destination Folder @@ -6143,6 +6262,11 @@ The encoding is responsible for the correct character representation.Select the directory where you want the songs to be saved. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6361,13 +6485,18 @@ The encoding is responsible for the correct character representation. Finished export. - Finished export. + Finished export. - + Your song export failed. Your song export failed. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index 220e08f85..114409dac 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -817,17 +817,17 @@ demand and thus an internet connection is required. You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + Bible not fully loaded. Bible not fully loaded. - + Information Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1209,60 +1209,60 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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>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. - + Image name singular Image - + Images name plural Images - + Images container title Images - + Load a new image. Load a new image. - + Add a new image. Add a new image. - + Edit the selected image. Edit the selected image. - + Delete the selected image. Delete the selected image. - + Preview the selected image. Preview the selected image. - + Send the selected image live. Send the selected image live. - + Add the selected image to the service. Add the selected image to the service. @@ -1288,38 +1288,56 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I You must select an image to delete. - + You must select an image to replace the background with. You must select an image to replace the background with. - + 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. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2574,307 +2592,307 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &File - + &Import &Import - + &Export &Export - + &View &View - + M&ode M&ode - + &Tools &Tools - + &Settings &Settings - + &Language &Language - + &Help &Help - + Media Manager Media Manager - + Service Manager Service Manager - + Theme Manager Theme Manager - + &New &New - + &Open &Open - + Open an existing service. Open an existing service. - + &Save &Save - + Save the current service to disk. Save the current service to disk. - + Save &As... Save &As... - + Save Service As Save Service As - + Save the current service under a new name. Save the current service under a new name. - + E&xit E&xit - + Quit OpenLP Quit OpenLP - + &Theme &Theme - + &Configure OpenLP... &Configure OpenLP... - + &Media Manager &Media Manager - + Toggle Media Manager Toggle Media Manager - + Toggle the visibility of the media manager. Toggle the visibility of the media manager. - + &Theme Manager &Theme Manager - + Toggle Theme Manager Toggle Theme Manager - + Toggle the visibility of the theme manager. Toggle the visibility of the theme manager. - + &Service Manager &Service Manager - + Toggle Service Manager Toggle Service Manager - + Toggle the visibility of the service manager. Toggle the visibility of the service manager. - + &Preview Panel &Preview Panel - + Toggle Preview Panel Toggle Preview Panel - + Toggle the visibility of the preview panel. Toggle the visibility of the preview panel. - + &Live Panel &Live Panel - + Toggle Live Panel Toggle Live Panel - + Toggle the visibility of the live panel. Toggle the visibility of the live panel. - + &Plugin List &Plugin List - + List the Plugins List the Plugins - + &User Guide &User Guide - + &About &About - + More information about OpenLP More information about OpenLP - + &Online Help &Online Help - + &Web Site &Web Site - + Use the system language, if available. Use the system language, if available. - + Set the interface language to %s Set the interface language to %s - + Add &Tool... Add &Tool... - + Add an application to the list of tools. Add an application to the list of tools. - + &Default &Default - + Set the view mode back to the default. Set the view mode back to the default. - + &Setup &Setup - + Set the view mode to Setup. Set the view mode to Setup. - + &Live &Live - + Set the view mode to Live. 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/. @@ -2889,27 +2907,27 @@ You can download the latest version from http://openlp.org/. English (South Africa) - + Configure &Shortcuts... Configure &Shortcuts... - + Close OpenLP Close OpenLP - + Are you sure you want to close OpenLP? Are you sure you want to close OpenLP? - + 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. @@ -2919,78 +2937,159 @@ You can download the latest version from http://openlp.org/. &Configure Display Tags - + &Autodetect &Autodetect - + Update Theme Images Update Theme Images - + Update the preview images for all themes. Update the preview images for all themes. - + Print the current service. Print the current service. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Settings + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Open File + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3069,7 +3168,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3228,12 +3327,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3329,14 +3428,14 @@ Suffix not supported &Change Item Theme - + File is not a valid service. The content encoding is not UTF-8. File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. File is not a valid service. @@ -3381,7 +3480,7 @@ The content encoding is not UTF-8. Open File - + OpenLP Service Files (*.osz) OpenLP Service Files (*.osz) @@ -3411,7 +3510,7 @@ The content encoding is not UTF-8. Send the selected item to Live. - + Modified Service Modified Service @@ -3431,27 +3530,27 @@ The content encoding is not UTF-8. 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? - + File could not be opened because it is corrupt. File could not be opened because it is corrupt. - + Empty File Empty File - + This service file does not contain any data. This service file does not contain any data. - + Corrupt File Corrupt File @@ -3491,22 +3590,22 @@ The content encoding is not UTF-8. Select a theme for the service. - + This file is either corrupt or it is not an OpenLP 2.0 service file. This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3777,32 +3876,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image Select Image - + Theme Name Missing Theme Name Missing - + There is no name for this theme. Please enter one. There is no name for this theme. Please enter one. - + Theme Name Invalid Theme Name Invalid - + Invalid theme name. Please enter one. Invalid theme name. Please enter one. - + (approximately %d lines per slide) (approximately %d lines per slide) @@ -3880,7 +3979,7 @@ The content encoding is not UTF-8. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. @@ -3932,7 +4031,7 @@ The content encoding is not UTF-8. File is not a valid theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. @@ -3982,7 +4081,7 @@ The content encoding is not UTF-8. Delete %s theme? - + Validation Error Validation Error @@ -4006,255 +4105,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard Theme Wizard - + Welcome to the Theme Wizard Welcome to the Theme Wizard - + Set Up Background Set Up Background - + Set up your theme's background according to the parameters below. Set up your theme's background according to the parameters below. - + Background type: Background type: - + Solid Color Solid Colour - + Gradient Gradient - + Color: Colour: - + Gradient: Gradient: - + Horizontal Horizontal - + Vertical Vertical - + Circular Circular - + Top Left - Bottom Right Top Left - Bottom Right - + Bottom Left - Top Right Bottom Left - Top Right - + Main Area Font Details Main Area Font Details - + Define the font and display characteristics for the Display text Define the font and display characteristics for the Display text - + Font: Font: - + Size: Size: - + Line Spacing: Line Spacing: - + &Outline: &Outline: - + &Shadow: &Shadow: - + Bold Bold - + Italic Italic - + Footer Area Font Details Footer Area Font Details - + Define the font and display characteristics for the Footer text Define the font and display characteristics for the Footer text - + Text Formatting Details Text Formatting Details - + Allows additional display formatting information to be defined Allows additional display formatting information to be defined - + Horizontal Align: Horizontal Align: - + Left Left - + Right Right - + Center Centre - + 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 - + X position: X position: - + px px - + Y position: Y position: - + Width: Width: - + Height: Height: - + Use default location Use default location - + 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 - + Starting color: - + Ending color: + + + Background color: + + OpenLP.ThemesTab @@ -4615,7 +4719,7 @@ The content encoding is not UTF-8. Ready. - + Starting import... Starting import... @@ -5135,106 +5239,121 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking &Song Usage Tracking - + &Delete Tracking Data &Delete Tracking Data - + Delete song usage data up to a specified date. Delete song usage data up to a specified date. - + &Extract Tracking Data &Extract Tracking Data - + Generate a report on song usage. Generate a report on song usage. - + Toggle Tracking Toggle Tracking - + Toggle the tracking of song usage. 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 />This plugin tracks the usage of songs in services. - + SongUsage name singular SongUsage - + SongUsage name plural SongUsage - + SongUsage container title SongUsage - + Song Usage Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Selected Song Usage Events? Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? Are you sure you want to delete selected Song Usage data? - + Delete Song Usage Data Delete Song Usage Data - + Deletion Successful Deletion Successful - + All requested data has been deleted successfully. All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm @@ -5244,22 +5363,22 @@ The content encoding is not UTF-8. Output File Location - + Song Usage Extraction Song Usage Extraction - + Select Date Range Select Date Range - + to to - + Report Location Report Location @@ -5269,12 +5388,12 @@ The content encoding is not UTF-8. usage_detail_%s_%s.txt - + Report Creation Report Creation - + Report %s has been successfully created. @@ -5296,130 +5415,130 @@ has been successfully created. SongsPlugin - + &Song &Song - + Import songs using the import wizard. Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &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... - + Song name singular Song - + Songs name plural Songs - + Songs container title Songs - + 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. @@ -5428,44 +5547,44 @@ 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. - + 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. @@ -5747,7 +5866,7 @@ The encoding is responsible for the correct character representation. 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. + This wizard will help to export your songs to the open and free OpenLyrics worship song format. @@ -5810,7 +5929,7 @@ The encoding is responsible for the correct character representation.You need to specify a directory. - + Select Destination Folder Select Destination Folder @@ -5819,6 +5938,11 @@ The encoding is responsible for the correct character representation.Select the directory where you want the songs to be saved. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6027,13 +6151,18 @@ The encoding is responsible for the correct character representation. Finished export. - Finished export. + Finished export. - + Your song export failed. Your song export failed. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index 573212a08..e74a370ec 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -827,17 +827,17 @@ sea necesario, por lo que debe contar con una conexión a internet.No puede mezclar busquedas individuales y dobles de versículos. ¿Desea borrar los resultados y abrir una busqueda nueva? - + Bible not fully loaded. Carga incompleta. - + Information Información - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. La Biblia secundaria no contiene todos los versículos de la Bilbia principal. Solo se muestran los versículos comunes. Versículos %d no se incluyen en los resultados. @@ -1328,24 +1328,24 @@ Note que los versículos se descargarán según sea necesario, por lo que debe c ImagePlugin - + <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>Complemento de Imagen</strong><br />El complemento de imagen permite proyectar imágenes.<br />Una de sus características, es que permite agrupar imagenes para facilitar su proyección. Este plugin puede utilizar el "bulce de tiempo" de OpenLP para crear una presentación que avance automáticamente. Aparte, las imágenes de este plugin se pueden utilizar para reemplazar la imagen de fondo del tema en actual. - + Image name singular Imagen - + Images name plural Imágenes - + Images container title Imágenes @@ -1386,37 +1386,37 @@ Note que los versículos se descargarán según sea necesario, por lo que debe c Agregar esta Imagen al servicio. - + Load a new image. Cargar una imagen nueva. - + Add a new image. Agregar una imagen nueva. - + Edit the selected image. Editar la imagen seleccionada. - + Delete the selected image. Eliminar la imagen seleccionada. - + Preview the selected image. Visualizar la imagen seleccionada. - + Send the selected image live. Proyectar la imagen seleccionada. - + Add the selected image to the service. Agregar esta imagen al servicio. @@ -1442,38 +1442,56 @@ Note que los versículos se descargarán según sea necesario, por lo que debe c Debe seleccionar una imagen para eliminar. - + You must select an image to replace the background with. Debe seleccionar una imagen para reemplazar el fondo. - + Missing Image(s) Imágen(es) faltante - + The following image(s) no longer exist: %s La siguiente imagen(es) ya no esta disponible: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? La siguiente imagen(es) ya no esta disponible: %s ¿Desea agregar las demás imágenes? - + There was a problem replacing your background, the image file "%s" no longer exists. Ocurrió un problema al reemplazar el fondo, el archivo "%s" ya no existe. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2779,287 +2797,287 @@ Para cancelar el Asistente Inicial por completo, pulse el botón Finalizar ahora OpenLP.MainWindow - + &File &Archivo - + &Import &Importar - + &Export &Exportar - + &View &Ver - + M&ode M&odo - + &Tools &Herramientas - + &Settings &Preferencias - + &Language &Idioma - + &Help &Ayuda - + Media Manager Gestor de Medios - + Service Manager Gestor de Servicio - + Theme Manager Gestor de Temas - + &New &Nuevo - + &Open &Abrir - + Open an existing service. Abrir un servicio existente. - + &Save &Guardar - + Save the current service to disk. Guardar el servicio actual en el disco. - + Save &As... Guardar &Como... - + Save Service As Guardar Servicio Como - + Save the current service under a new name. Guardar el servicio actual con un nombre nuevo. - + E&xit &Salir - + Quit OpenLP Salir de OpenLP - + &Theme &Tema - + &Configure OpenLP... &Configurar OpenLP... - + &Media Manager Gestor de &Medios - + Toggle Media Manager Alternar Gestor de Medios - + Toggle the visibility of the media manager. Alernar la visibilidad del gestor de medios. - + &Theme Manager Gestor de &Temas - + Toggle Theme Manager Alternar Gestor de Temas - + Toggle the visibility of the theme manager. Alernar la visibilidad del gestor de temas. - + &Service Manager Gestor de &Servicio - + Toggle Service Manager Alternar Gestor de Servicio - + Toggle the visibility of the service manager. Alernar la visibilidad del gestor de servicio. - + &Preview Panel &Panel de Vista Previa - + Toggle Preview Panel Alternar Panel de Vista Previa - + Toggle the visibility of the preview panel. Alernar la visibilidad del panel de vista previa. - + &Live Panel Panel de Pro&yección - + Toggle Live Panel Alternar Panel de Proyección - + Toggle the visibility of the live panel. Alternar la visibilidad del panel de proyección. - + &Plugin List Lista de &Complementos - + List the Plugins Lista de Complementos - + &User Guide Guía de &Usuario - + &About &Acerca de - + More information about OpenLP Más información acerca de OpenLP - + &Online Help &Ayuda En Línea - + &Web Site Sitio &Web - + Use the system language, if available. Usar el idioma del sistema, si esta disponible. - + Set the interface language to %s Fijar el idioma de la interface en %s - + Add &Tool... Agregar &Herramienta... - + Add an application to the list of tools. Agregar una aplicación a la lista de herramientas. - + &Default Por &defecto - + Set the view mode back to the default. Modo de vizualización por defecto. - + &Setup &Administración - + Set the view mode to Setup. Modo de Administración. - + &Live En &vivo - + Set the view mode to Live. Modo de visualización.en Vivo. - + 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/. @@ -3068,22 +3086,22 @@ You can download the latest version from http://openlp.org/. Puede descargar la última versión desde 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 se ha puesto en blanco - + Default Theme: %s Tema por defecto: %s @@ -3094,17 +3112,17 @@ Puede descargar la última versión desde http://openlp.org/. Español - + Configure &Shortcuts... Configurar &Atajos... - + Close OpenLP Cerrar OpenLP - + Are you sure you want to close OpenLP? ¿Desea realmente salir de OpenLP? @@ -3114,12 +3132,12 @@ Puede descargar la última versión desde http://openlp.org/. Imprimir Orden del Servicio actual. - + Open &Data Folder... Abrir Folder de &Datos... - + Open the folder where songs, bibles and other data resides. Abrir el folder donde se almacenan las canciones, biblias y otros datos. @@ -3129,78 +3147,159 @@ Puede descargar la última versión desde http://openlp.org/. &Configurar Etiquetas de Visualización - + &Autodetect &Autodetectar - + Update Theme Images Actualizar Imágenes de Tema - + Update the preview images for all themes. Actualizar imagen de vista previa de todos los temas. - + Print the current service. Imprimir Orden del Servicio actual. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Preferencias + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Abrir Archivo + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3286,7 +3385,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3450,12 +3549,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3551,14 +3650,14 @@ Suffix not supported &Cambiar Tema de ítem - + File is not a valid service. The content encoding is not UTF-8. Este no es un servicio válido. La codificación del contenido no es UTF-8. - + File is not a valid service. El archivo no es un servicio válido. @@ -3603,7 +3702,7 @@ La codificación del contenido no es UTF-8. Abrir Archivo - + OpenLP Service Files (*.osz) Archivo de Servicio OpenLP (*.osz) @@ -3633,7 +3732,7 @@ La codificación del contenido no es UTF-8. Proyectar el ítem seleccionado. - + Modified Service Servicio Modificado @@ -3653,27 +3752,27 @@ La codificación del contenido no es UTF-8. Mostrar &Proyección - + The current service has been modified. Would you like to save this service? El servicio actual a sido modificado. ¿Desea guardar este servicio? - + File could not be opened because it is corrupt. No se pudo abrir el archivo porque está corrompido. - + Empty File Archivo Vacio - + This service file does not contain any data. El archivo de servicio no contiene ningún dato. - + Corrupt File Archivo Corrompido @@ -3718,22 +3817,22 @@ La codificación del contenido no es UTF-8. Seleccione un tema para el servicio. - + This file is either corrupt or it is not an OpenLP 2.0 service file. El archivo está corrupto o no es un archivo OpenLP 2.0 válido. - + Slide theme - + Notes - + Service File Missing @@ -4014,32 +4113,32 @@ La codificación del contenido no es UTF-8. OpenLP.ThemeForm - + Select Image Seleccionar Imagen - + Theme Name Missing Falta Nombre de Tema - + There is no name for this theme. Please enter one. No existe nombre para este tema. Ingrese uno. - + Theme Name Invalid Nombre de Tema no válido - + Invalid theme name. Please enter one. Nombre de tema no válido. Ingrese uno. - + (approximately %d lines per slide) (aproximadamente %d líneas por diapositiva) @@ -4117,7 +4216,7 @@ La codificación del contenido no es UTF-8. Debe seleccionar un tema para editar. - + You are unable to delete the default theme. No se puede eliminar el tema predeterminado. @@ -4169,7 +4268,7 @@ La codificación del contenido no es UTF-8. El archivo no es un tema válido. - + Theme %s is used in the %s plugin. El tema %s se usa en el complemento %s. @@ -4219,7 +4318,7 @@ La codificación del contenido no es UTF-8. ¿Eliminar el tema %s? - + Validation Error Error de Validación @@ -4243,255 +4342,260 @@ La codificación del contenido no es UTF-8. OpenLP.ThemeWizard - + Theme Wizard Asistente para Temas - + Welcome to the Theme Wizard Bienvenido al Asistente para Temas - + Set Up Background Establecer un fondo - + Set up your theme's background according to the parameters below. Establecer el fondo de su tema según los siguientes parámetros. - + Background type: Tipo de fondo: - + Solid Color Color Sólido - + Gradient Gradiente - + Color: Color: - + Gradient: Gradiente: - + Horizontal Horizontal - + Vertical Vertical - + Circular Circular - + Top Left - Bottom Right Arriba Izquierda - Abajo Derecha - + Bottom Left - Top Right Abajo Izquierda - Abajo Derecha - + Main Area Font Details Fuente del Área Principal - + Define the font and display characteristics for the Display text Definir la fuente y las características para el texto en Pantalla - + Font: Fuente: - + Size: Tamaño: - + Line Spacing: Epaciado de Líneas: - + &Outline: &Contorno: - + &Shadow: &Sombra: - + Bold Negrita - + Italic Cursiva - + Footer Area Font Details Fuente de Pié de página - + Define the font and display characteristics for the Footer text Definir la fuente y las características para el texto de Pié de página - + Text Formatting Details Detalles de Formato - + Allows additional display formatting information to be defined Permite definir información adicional de formato - + Horizontal Align: Alinea. Horizontal: - + Left Izquierda - + Right Derecha - + Center Centro - + Output Area Locations Ubicación del Área de Proyección - + Allows you to change and move the main and footer areas. Le permite mover y cambiar la ubicación del área principal y de pié de página. - + &Main Area Área &Principal - + &Use default location &Usar ubicación por defecto - + X position: Posición x: - + px px - + Y position: Posición y: - + Width: Ancho: - + Height: Altura: - + Use default location Usar ubicación por defecto - + Save and Preview Guardar && Previsualizar - + View the theme and save it replacing the current one or change the name to create a new theme Ver el tema y guardarlo reemplazando el actual o cambiando el nombre para crear un tema nuevo - + Theme name: Nombre: - + 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. Este asistente le ayudará a crear y editar temas. Presione Siguiente para iniciar el proceso al establecer el fondo. - + Transitions: Transiciones: - + &Footer Area &Pie de Página - + Edit Theme - %s Editar Tema - %s - + Starting color: - + Ending color: + + + Background color: + Color de fondo: + OpenLP.ThemesTab @@ -4882,7 +4986,7 @@ La codificación del contenido no es UTF-8. Listo. - + Starting import... Iniciando importación... @@ -5427,126 +5531,141 @@ La codificación del contenido no es UTF-8. SongUsagePlugin - + &Song Usage Tracking &Historial de Uso - + &Delete Tracking Data &Eliminar datos de Historial - + Delete song usage data up to a specified date. Borrar el historial de datos hasta la fecha especificada. - + &Extract Tracking Data &Extraer datos de Historial - + Generate a report on song usage. Generar un reporte del uso de las canciones. - + Toggle Tracking Alternar Historial - + Toggle the tracking of song usage. Alternar seguimiento del uso de las canciones. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Historial</strong><br />Este complemento mantiene un registro del número de veces que se usa una canción en los servicios. - + SongUsage name singular Historial - + SongUsage name plural Historiales - + SongUsage container title Historial - + Song Usage Historial - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Borrar historial de canción - + Delete Selected Song Usage Events? ¿Borrar el historial de esta canción? - + Are you sure you want to delete selected Song Usage data? ¿Desea realmente borrar los datos del historial de la canción seleccionada? - + Deletion Successful Limpieza Exitosa - + All requested data has been deleted successfully. Todos los datos han sido borrados exitosamente. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Extracción del Historial - + Select Date Range Seleccionar Rango de Fechas - + to hasta - + Report Location Ubicación de Reporte @@ -5561,12 +5680,12 @@ La codificación del contenido no es UTF-8. historial_%s_%s.txt - + Report Creation Crear Reporte - + Report %s has been successfully created. @@ -5588,130 +5707,130 @@ se ha creado satisfactoriamente. SongsPlugin - + &Song &Canción - + Import songs using the import wizard. Importar canciones usando el asistente. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Complemento de Canciones</strong><br />El complemento de canciones permite mostar y editar canciones. - + &Re-index Songs &Re-indexar Canciones - + Re-index the songs database to improve searching and ordering. Reorganiza la base de datos para mejorar la busqueda y ordenamiento. - + Reindexing songs... Reindexando canciones... - + Song name singular Canción - + Songs name plural Canciones - + Songs container title Canciones - + Arabic (CP-1256) Árabe (CP-1256) - + Baltic (CP-1257) Báltico (CP-1257) - + Central European (CP-1250) Europa Central (CP-1250) - + Cyrillic (CP-1251) Cirílico (CP-1251) - + Greek (CP-1253) Griego (CP-1253) - + Hebrew (CP-1255) Hebreo (CP-1255) - + Japanese (CP-932) Japonés (CP-932) - + Korean (CP-949) Koreano (CP-949) - + Simplified Chinese (CP-936) Chino Simplificado (CP-936) - + Thai (CP-874) Tailandés (CP-874) - + Traditional Chinese (CP-950) Chino Tradicional (CP-950) - + Turkish (CP-1254) Turco (CP-1254) - + Vietnam (CP-1258) Vietnamita (CP-1258) - + Western European (CP-1252) Europa Occidental (CP-1252) - + Character Encoding Codificación de Caracteres - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5720,14 +5839,14 @@ por la correcta representación de los caracteres. Por lo general, la opción preseleccionada es la adecuada. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Por favor elija una codificación de caracteres. La codificación se encarga de la correcta representación de caracteres. - + Exports songs using the export wizard. Exportar canciones usando el asistente. @@ -5762,32 +5881,32 @@ La codificación se encarga de la correcta representación de caracteres.Agregar esta Canción al servicio. - + Add a new song. Agregar una canción nueva. - + Edit the selected song. Editar la canción seleccionada. - + Delete the selected song. Eliminar la canción seleccionada. - + Preview the selected song. Visualizar la canción seleccionada. - + Send the selected song live. Proyectar la canción seleccionada. - + Add the selected song to the service. Agregar esta canción al servicio. @@ -6079,7 +6198,7 @@ La codificación se encarga de la correcta representación de caracteres. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - Este asistente le ayudará a exportar canciones al formato OpenLyrics que es gratuito y de código abierto. + Este asistente le ayudará a exportar canciones al formato OpenLyrics que es gratuito y de código abierto. @@ -6142,7 +6261,7 @@ La codificación se encarga de la correcta representación de caracteres.Debe especificar un directorio. - + Select Destination Folder Seleccione Carpeta de Destino @@ -6151,6 +6270,11 @@ La codificación se encarga de la correcta representación de caracteres.Select the directory where you want the songs to be saved. Seleccionar el directorio para guardar las canciones. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6369,13 +6493,18 @@ La codificación se encarga de la correcta representación de caracteres. Finished export. - Exportación finalizada. + Exportación finalizada. - + Your song export failed. La importación falló. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index 2de001456..777eee651 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -521,7 +521,7 @@ Muudatused ei rakendu juba teenistusesse lisatud salmidele. Importing verses from %s... Importing verses from <book name>... - Salmide importimine failist %s... + Salmide importimine raamatust <book name>... @@ -827,17 +827,17 @@ vastavalt vajadusele ning seetõttu on vaja internetiühendust. Ühe- ja kahekeelseid piiblisalmide otsitulemusi pole võimalik kombineerida. Kas tahad otsingu tulemused kustutada ja alustada uue otsinguga? - + Bible not fully loaded. Piibel ei ole täielikult laaditud. - + Information Andmed - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. Teine Piibel ei sisalda kõiki salme, mis on peamises Piiblis. Näidatakse ainult neid salme, mis leiduvad mõlemas Piiblis. %d salmi ei kaasatud tulemustesse. @@ -1297,24 +1297,24 @@ Pane tähele, et veebipiiblite salmid laaditakse internetist vajadusel, seega on ImagePlugin - + <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>Pildiplugin</strong><br />Pildiplugin võimaldab piltide kuvamise.<br />Üks selle plugina 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. - + Image name singular Pilt - + Images name plural Pildid - + Images container title Pildid @@ -1355,37 +1355,37 @@ Pane tähele, et veebipiiblite salmid laaditakse internetist vajadusel, seega on Valitud pildi lisamine teenistusele. - + Load a new image. Uue pildi laadimine. - + Add a new image. Uue pildi lisamine. - + Edit the selected image. Valitud pildi muutmine. - + Delete the selected image. Valitud pildi kustutamine. - + Preview the selected image. Valitud pildi eelvaatlus. - + Send the selected image live. Valitud pildi saatmine ekraanile. - + Add the selected image to the service. Valitud pildi lisamine teenistusele. @@ -1411,34 +1411,52 @@ Pane tähele, et veebipiiblite salmid laaditakse internetist vajadusel, seega on Pead valima pildi, mida kustutada. - + You must select an image to replace the background with. Pead enne valima pildi, millega tausta asendada. - + Missing Image(s) Puuduvad pildid - + The following image(s) no longer exist: %s Järgnevaid pilte enam pole: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Järgnevaid pilte enam pole: %sKas tahad teised pildid sellest hoolimata lisada? - + There was a problem replacing your background, the image file "%s" no longer exists. Tausta asendamisel esines viga, pildifaili "%s" enam pole. - + There was no display item to amend. + Polnud ühtegi kuvatavat elementi, mida täiendada. + + + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. @@ -1578,7 +1596,7 @@ Do you want to add the other images anyway? There was no display item to amend. - + Polnud ühtegi kuvatavat elementi, mida täiendada. @@ -1793,7 +1811,8 @@ OpenLP on kirjutanud ja seda haldavad vabatahtlikud. Kui sa tahad näha rohkem t Copyright © 2004-2011 %s Portions copyright © 2004-2011 %s - + Autoriõigus © 2004-2011 %s +Osade autoriõigus © 2004-2011 %s @@ -2405,12 +2424,12 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. Download complete. Click the finish button to return to OpenLP. - + Allalaadimine lõpetatud. Klõpsa lõpetamise nupule, et naaseda OpenLP-sse. Click the finish button to return to OpenLP. - + Klõpsa lõpetamise nupule, et naaseda OpenLP-sse. @@ -2418,7 +2437,7 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. Configure Formatting Tags - + Vormindussiltide seadistamine @@ -2443,12 +2462,12 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. Start tag - Alustamise silt + Alustav silt End tag - Lõpu silt + Lõpetav silt @@ -2458,12 +2477,12 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. Start HTML - HTML alguses + Alustav HTML End HTML - HTML lõpus + Lõpetav HTML @@ -2579,7 +2598,7 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. Break - + Murdmine @@ -2734,307 +2753,307 @@ Esmakäivituse nõustajast loobumiseks klõpsa lõpetamise nupule. OpenLP.MainWindow - + &File &Fail - + &Import &Impordi - + &Export &Ekspordi - + &View &Vaade - + M&ode &Režiim - + &Tools &Tööriistad - + &Settings &Sätted - + &Language &Keel - + &Help A&bi - + Media Manager Meediahaldur - + Service Manager Teenistuse haldur - + Theme Manager Kujunduse haldur - + &New &Uus - + &Open &Ava - + Open an existing service. Olemasoleva teenistuse avamine. - + &Save &Salvesta - + Save the current service to disk. Praeguse teenistuse salvestamine kettale. - + Save &As... Salvesta &kui... - + Save Service As Salvesta teenistus kui - + Save the current service under a new name. Praeguse teenistuse salvestamine uue nimega. - + E&xit &Välju - + Quit OpenLP Lahku OpenLPst - + &Theme &Kujundus - + &Configure OpenLP... &Seadista OpenLP... - + &Media Manager &Meediahaldur - + Toggle Media Manager Meediahalduri lüliti - + Toggle the visibility of the media manager. Meediahalduri nähtavuse ümberlüliti. - + &Theme Manager &Kujunduse haldur - + Toggle Theme Manager Kujunduse halduri lüliti - + Toggle the visibility of the theme manager. Kujunduse halduri nähtavuse ümberlülitamine. - + &Service Manager &Teenistuse haldur - + Toggle Service Manager Teenistuse halduri lüliti - + Toggle the visibility of the service manager. Teenistuse halduri nähtavuse ümberlülitamine. - + &Preview Panel &Eelvaatluspaneel - + Toggle Preview Panel Eelvaatluspaneeli lüliti - + Toggle the visibility of the preview panel. Eelvaatluspaneeli nähtavuse ümberlülitamine. - + &Live Panel &Ekraani paneel - + Toggle Live Panel Ekraani paneeli lüliti - + Toggle the visibility of the live panel. Ekraani paneeli nähtavuse muutmine. - + &Plugin List &Pluginate loend - + List the Plugins Pluginate loend - + &User Guide &Kasutajajuhend - + &About &Lähemalt - + More information about OpenLP Lähem teave OpenLP kohta - + &Online Help &Abi veebis - + &Web Site &Veebileht - + Use the system language, if available. Kui saadaval, kasutatakse süsteemi keelt. - + Set the interface language to %s Kasutajaliidese keeleks %s määramine - + Add &Tool... Lisa &tööriist... - + Add an application to the list of tools. Rakenduse lisamine tööriistade loendisse. - + &Default &Vaikimisi - + Set the view mode back to the default. Vaikimisi kuvarežiimi taastamine. - + &Setup &Ettevalmistus - + Set the view mode to Setup. Ettevalmistuse kuvarežiimi valimine. - + &Live &Otse - + Set the view mode to Live. 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/. @@ -3049,17 +3068,17 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/.Eesti - + Configure &Shortcuts... &Kiirklahvide seadistamine... - + Close OpenLP OpenLP sulgemine - + Are you sure you want to close OpenLP? Kas oled kindel, et tahad OpenLP sulgeda? @@ -3074,62 +3093,62 @@ Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/.&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. - + &Autodetect &Isetuvastus - + Update Theme Images Teemapiltide uuendamine - + Update the preview images for all themes. Kõigi teemade eelvaatepiltide uuendamine. - + Print the current service. Praeguse teenistuse printimine. - + L&ock Panels &Lukusta paneelid - + Prevent the panels being moved. Paneelide liigutamise kaitse. - + Re-run First Time Wizard Käivita esmanõustaja uuesti - + Re-run the First Time Wizard, importing songs, Bibles and themes. Käivita esmanõustaja uuesti laulude, Piiblite ja kujunduste importimiseks. - + Re-run First Time Wizard? Kas käivitada esmanõustaja uuesti? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. @@ -3138,26 +3157,107 @@ Re-running this wizard may make changes to your current OpenLP configuration and Selle nõustaja taaskäivitamine muudab sinu praegust OpenLP seadistust ja võib lisada laule olemasolevate laulude loetelusse ning muuta vaikimisi kujundust. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Sätted + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Faili avamine + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3236,7 +3336,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3400,12 +3500,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3501,14 +3601,14 @@ Suffix not supported &Muuda elemendi kujundust - + File is not a valid service. The content encoding is not UTF-8. Fail ei ole sobiv teenistus. Sisu ei ole UTF-8 kodeeringus. - + File is not a valid service. Fail pole sobiv teenistus. @@ -3553,7 +3653,7 @@ Sisu ei ole UTF-8 kodeeringus. Faili avamine - + OpenLP Service Files (*.osz) OpenLP teenistuse failid (*.osz) @@ -3583,7 +3683,7 @@ Sisu ei ole UTF-8 kodeeringus. Valitud kirje saatmine ekraanile. - + Modified Service Teenistust on muudetud @@ -3603,27 +3703,27 @@ Sisu ei ole UTF-8 kodeeringus. 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? - + File could not be opened because it is corrupt. Faili pole võimalik avada, kuna see on rikutud. - + Empty File Tühi fail - + This service file does not contain any data. Selles teenistuse failis pole andmeid. - + Corrupt File Rikutud fail @@ -3668,22 +3768,22 @@ Sisu ei ole UTF-8 kodeeringus. Teenistuse jaoks kujunduse valimine. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3954,32 +4054,32 @@ Sisu ei ole UTF-8 kodeeringus. OpenLP.ThemeForm - + Select Image Pildi valimine - + Theme Name Missing Kujundusel puudub nimi - + There is no name for this theme. Please enter one. Kujundusel ei ole nime. Palun sisesta nimi. - + Theme Name Invalid Sobimatu kujunduse nimi - + Invalid theme name. Please enter one. Kujunduse nimi pole sobiv. Palun sisesta sobiv nimi. - + (approximately %d lines per slide) @@ -4057,12 +4157,12 @@ Sisu ei ole UTF-8 kodeeringus. 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. @@ -4159,7 +4259,7 @@ Sisu kodeering ei ole UTF-8. Kas kustutada kujundus %s? - + Validation Error Valideerimise viga @@ -4183,255 +4283,260 @@ Sisu kodeering ei ole UTF-8. OpenLP.ThemeWizard - + Theme Wizard Kujunduse nõustaja - + Welcome to the Theme Wizard Tere tulemast kujunduse nõustajasse - + Set Up Background Tausta määramine - + Set up your theme's background according to the parameters below. Määra kujunduse taust, kasutades järgnevaid parameetreid. - + Background type: Tausta liik: - + Solid Color Ühtlane värv - + Gradient Üleminek - + Color: Värvus: - + Gradient: Üleminek: - + Horizontal Horisontaalne - + Vertical Vertikaalne - + Circular Radiaalne - + Top Left - Bottom Right Loodest kagusse - + Bottom Left - Top Right Edelast kirdesse - + Main Area Font Details Peamise teksti üksikasjad - + Define the font and display characteristics for the Display text Määra font ja teised teksti omadused - + Font: Font: - + Size: Suurus: - + Line Spacing: Reavahe: - + &Outline: &Kontuurjoon: - + &Shadow: &Vari: - + Bold Rasvane - + Italic Kaldkiri - + Footer Area Font Details Jaluse fondi üksikasjad - + Define the font and display characteristics for the Footer text Määra jaluse font ja muud omadused - + Text Formatting Details Teksti vorminduse üksikasjad - + Allows additional display formatting information to be defined Võimaldab määrata lisaks vorminduse andmeid - + Horizontal Align: Rõhtjoondus: - + Left Vasakul - + Right Paremal - + Center Keskel - + Output Area Locations Väljundala asukoht - + Allows you to change and move the main and footer areas. Võimaldab muuta ja liigutada peamist ja jaluse ala. - + &Main Area &Peamine ala - + &Use default location &Vaikimisi asukoha kasutamine - + X position: X-asukoht: - + px px - + Y position: Y-asukoht: - + Width: Laius: - + Height: Kõrgus: - + Use default location Vaikimisi asukoha kasutamine - + Save and Preview Salvestamine ja eelvaade - + View the theme and save it replacing the current one or change the name to create a new theme Vaata kujundus üle ja salvesta see, asendades olemasolev või muuda nime, et luua uus kujundus - + Theme name: Kujunduse nimi: - + 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. See nõustaja aitab kujundusi luua ja muuta. Klõpsa edasi nupul, et alustada tausta määramisest. - + Transitions: Üleminekud: - + &Footer Area &Jaluse ala - + Edit Theme - %s Teema muutmine - %s - + Starting color: - + Ending color: + + + Background color: + + OpenLP.ThemesTab @@ -4822,7 +4927,7 @@ Sisu kodeering ei ole UTF-8. Valmis. - + Starting import... Importimise alustamine... @@ -5362,126 +5467,141 @@ Sisu kodeering ei ole UTF-8. SongUsagePlugin - + &Song Usage Tracking &Laulude kasutuse jälgimine - + &Delete Tracking Data &Kustuta kogutud andmed - + Delete song usage data up to a specified date. Laulude kasutuse andmete kustutamine kuni antud kuupäevani. - + &Extract Tracking Data &Eralda laulukasutuse andmed - + Generate a report on song usage. Genereeri raport laulude kasutuse kohta. - + Toggle Tracking Laulukasutuse jälgimine - + Toggle the tracking of song usage. Laulukasutuse jälgimise sisse- ja väljalülitamine. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Laulude plugin</strong><br />See plugin võimaldab laulude kuvamise ja haldamise. - + SongUsage name singular Laulukasutus - + SongUsage name plural Laulukasutus - + SongUsage container title Laulukasutus - + Song Usage Laulude kasutus - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Laulukasutuse andmete kustutamine - + Delete Selected Song Usage Events? Kas kustutada valitud laulude kasutamise sündmused? - + Are you sure you want to delete selected Song Usage data? Kas oled kindel, et tahad kustutada valitud laulude kasutuse andmed? - + Deletion Successful Kustutamine edukas - + All requested data has been deleted successfully. Kõik kustutamisele määratud andmed kustutati edukalt. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Laulukasutuse salvestamine - + Select Date Range Vali kuupäevade vahemik - + to kuni - + Report Location Raporti asukoht @@ -5496,12 +5616,12 @@ Sisu kodeering ei ole UTF-8. laulukasutuse_andmed_%s_%s.txt - + Report Creation Raporti koostamine - + Report %s has been successfully created. @@ -5523,130 +5643,130 @@ on edukalt loodud. SongsPlugin - + &Song &Laul - + Import songs using the import wizard. Laulude importimine importimise nõustajaga. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Laulude plugin</strong><br />See plugin võimaldab laulude kuvamise ja haldamise. - + &Re-index Songs &Indekseeri laulud uuesti - + Re-index the songs database to improve searching and ordering. Laulude andmebaasi kordusindekseerimine, et parendada otsimist ja järjekorda. - + Reindexing songs... Laulude kordusindekseerimine... - + Song name singular Laul - + Songs name plural Laulud - + Songs container title Laulud - + Arabic (CP-1256) Araabia (CP-1256) - + Baltic (CP-1257) Balti (CP-1257) - + Central European (CP-1250) Kesk-Euroopa (CP-1250) - + Cyrillic (CP-1251) Kirillitsa (CP-1251) - + Greek (CP-1253) Kreeka (CP-1253) - + Hebrew (CP-1255) Heebrea (CP-1255) - + Japanese (CP-932) Jaapani (CP-932) - + Korean (CP-949) Korea (CP-949) - + Simplified Chinese (CP-936) Lihtsustatud Hiina (CP-936) - + Thai (CP-874) Tai (CP-874) - + Traditional Chinese (CP-950) Tradistiooniline Hiina (CP-950) - + Turkish (CP-1254) Türgi (CP-1254) - + Vietnam (CP-1258) Vietnami (CP-1258) - + Western European (CP-1252) Lääne-Euroopa (CP-1252) - + Character Encoding Märgikodeering - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5654,14 +5774,14 @@ Usually you are fine with the preselected choice. Tavaliselt on vaikimisi valik õige. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Palun vali märgikodeering. Kodeering on vajalik märkide õige esitamise jaoks. - + Exports songs using the export wizard. Eksportimise nõustaja abil laulude eksportimine. @@ -5696,32 +5816,32 @@ Kodeering on vajalik märkide õige esitamise jaoks. Valitud laulu lisamine teenistusele. - + 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. @@ -6003,7 +6123,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. 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. + See nõustaja aitab laulud eksportida avatud ülistuslaulude vormingus OpenLyrics. @@ -6066,7 +6186,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Pead määrama kataloogi. - + Select Destination Folder Sihtkausta valimine @@ -6075,6 +6195,11 @@ Kodeering on vajalik märkide õige esitamise jaoks. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6293,13 +6418,18 @@ Kodeering on vajalik märkide õige esitamise jaoks. Finished export. - Eksportimine lõpetatud. + Eksportimine lõpetatud. - + Your song export failed. Laulude eksportimine nurjus. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/fr.ts b/resources/i18n/fr.ts index 45caa753e..f5c8408eb 100644 --- a/resources/i18n/fr.ts +++ b/resources/i18n/fr.ts @@ -827,17 +827,17 @@ téléchargé à la demande, une connexion Internet fiable est donc nécessaire. Vous ne pouvez pas combiner simple et double Bible dans les résultats de recherche. Voulez vous effacer les résultats et commencer une nouvelle recherche ? - + Bible not fully loaded. Bible pas entièrement chargée. - + Information Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. La deuxième Bible ne contient pas tous les versets présents dans la Bible principale. Seulement les versets trouvés dans les deux Bibles vont être affichés. %s versets n'ont pas été inclus dans le résultat. @@ -1322,24 +1322,24 @@ Veuillez remarquer, que les versets des Bibles Web sont téléchargés à la dem ImagePlugin - + <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>Module Image</strong><br />Le module Image permet l'affichage d'image.<br />L'un des traits distinctifs de ce module est la possibilité de regrouper un certain nombre d'images dans le gestionnaire de services, ce qui rend l'affichage de plusieurs images plus facile. Ce module permet également d'afficher les image sous forme de diaporama en boucle et avec un retard. En plus de cela, les images du module peut être utilisé pour remplacer l'arrière-plan du thème en cours. - + Image name singular Image - + Images name plural Images - + Images container title Images @@ -1380,37 +1380,37 @@ Veuillez remarquer, que les versets des Bibles Web sont téléchargés à la dem Ajoute l'Image sélectionnée au service. - + Load a new image. Charge une nouvelle image. - + Add a new image. Ajoute une nouvelle image. - + Edit the selected image. Édite l'image sélectionnée. - + Delete the selected image. Efface l'image sélectionnée. - + Preview the selected image. Prévisualise l'image sélectionnée. - + Send the selected image live. Envoie en direct l'image sélectionnée. - + Add the selected image to the service. Ajoute l'image sélectionnée au service. @@ -1436,38 +1436,56 @@ Veuillez remarquer, que les versets des Bibles Web sont téléchargés à la dem Vous devez sélectionner une image a effacer. - + Missing Image(s) Image(s) manquante - + The following image(s) no longer exist: %s L(es) image(s) suivante(s) n'existe(nt) plus : %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? L(es) image(s) suivante(s) n'existe(nt) plus : %s Voulez-vous ajouter de toute façon d'autres images ? - + You must select an image to replace the background with. Vous devez sélectionner une image pour remplacer le fond. - + There was a problem replacing your background, the image file "%s" no longer exists. Il y a un problème pour remplacer votre fond, le fichier d'image "%s" n'existe plus. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2773,292 +2791,292 @@ Pour annuler l'assistant de démarrage, appuyer sur le bouton fin maintenan OpenLP.MainWindow - + &File &Fichier - + &Import &Import - + &Export &Export - + &View &Visualise - + M&ode M&ode - + &Tools &Outils - + &Settings &Options - + &Language &Langue - + &Help &Aide - + Media Manager Gestionnaire de médias - + Service Manager Gestionnaire de services - + Theme Manager Gestionnaire de thèmes - + &New &Nouveau - + &Open &Ouvrir - + Open an existing service. Ouvre un service existant. - + &Save &Enregistre - + Save the current service to disk. Enregistre le service courant sur le disque. - + Save &As... Enregistre &sous... - + Save Service As Enregistre le service sous - + Save the current service under a new name. Enregistre le service courant sous un nouveau nom. - + E&xit &Quitter - + Quit OpenLP Quitter OpenLP - + &Theme &Thème - + Configure &Shortcuts... Personnalise les &raccourcis... - + &Configure OpenLP... &Personnalise OpenLP... - + &Media Manager Gestionnaire de &médias - + Toggle Media Manager Gestionnaire de Média - + Toggle the visibility of the media manager. Change la visibilité du gestionnaire de média. - + &Theme Manager Gestionnaire de &thèmes - + Toggle Theme Manager Gestionnaire de Thème - + Toggle the visibility of the theme manager. Change la visibilité du gestionnaire de tème. - + &Service Manager Gestionnaire de &services - + Toggle Service Manager Gestionnaire de service - + Toggle the visibility of the service manager. Change la visibilité du gestionnaire de service. - + &Preview Panel Panneau de &prévisualisation - + Toggle Preview Panel Panneau de prévisualisation - + Toggle the visibility of the preview panel. Change la visibilité du panel de prévisualisation. - + &Live Panel Panneau du &direct - + Toggle Live Panel Panneau du direct - + Toggle the visibility of the live panel. Change la visibilité du directe. - + &Plugin List Liste des &modules - + List the Plugins Liste des modules - + &User Guide &Guide utilisateur - + &About &À propos - + More information about OpenLP Plus d'information sur OpenLP - + &Online Help &Aide en ligne - + &Web Site Site &Web - + Use the system language, if available. Utilise le langage système, si disponible. - + Set the interface language to %s Défini la langue de l'interface à %s - + Add &Tool... Ajoute un &outils... - + Add an application to the list of tools. Ajoute une application a la liste des outils. - + &Default &Défaut - + Set the view mode back to the default. Redéfini le mode vue comme par défaut. - + &Setup &Configuration - + Set the view mode to Setup. Mode vue Configuration. - + &Live &Direct - + Set the view mode to Live. Mode vue Direct. - + 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/. @@ -3067,32 +3085,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 @@ -3108,12 +3126,12 @@ Vous pouvez télécharger la dernière version depuis http://openlp.org/.Imprime l'ordre du service courant. - + Open &Data Folder... Ouvre le répertoire de &données... - + Open the folder where songs, bibles and other data resides. Ouvre le répertoire ou les chants, bibles et les autres données sont placées. @@ -3123,78 +3141,159 @@ Vous pouvez télécharger la dernière version depuis http://openlp.org/.&Configure les balise d'affichage - + &Autodetect &Détecte automatiquement - + Update Theme Images Met a jours les images de thèmes - + Update the preview images for all themes. Met a jours les images de tous les thèmes. - + Print the current service. Imprime le service courant. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Configuration + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Ouvre un fichier + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3280,7 +3379,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3444,12 +3543,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3590,19 +3689,19 @@ Suffix not supported Ouvre un fichier - + OpenLP Service Files (*.osz) Fichier service OpenLP (*.osz) - + File is not a valid service. The content encoding is not UTF-8. Le fichier n'est un service valide. Le contenu n'est pas de l'UTF-8. - + File is not a valid service. Le fichier n'est pas un service valide. @@ -3627,7 +3726,7 @@ Le contenu n'est pas de l'UTF-8. Déplace la sélection en bas de la fenêtre. - + Modified Service Service modifié @@ -3647,27 +3746,27 @@ Le contenu n'est pas de l'UTF-8. Affiche en &direct - + The current service has been modified. Would you like to save this service? Le service courant à été modifier. Voulez-vous l'enregistrer ? - + File could not be opened because it is corrupt. Le fichier n'a pas pu être ouvert car il est corrompu. - + Empty File Fichier vide - + This service file does not contain any data. Ce fichier de service ne contiens aucune données. - + Corrupt File Fichier corrompu @@ -3712,22 +3811,22 @@ Le contenu n'est pas de l'UTF-8. Sélectionne un thème pour le service. - + This file is either corrupt or it is not an OpenLP 2.0 service file. Ce fichier est sois corrompu ou n'est pas un fichier de service OpenLP 2.0. - + Slide theme - + Notes - + Service File Missing @@ -4008,32 +4107,32 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ThemeForm - + Select Image Sélectionne l'image - + Theme Name Missing Nom du thème manquant - + There is no name for this theme. Please enter one. Il n'y a pas ne nom pour ce thème. Veillez en introduire un. - + Theme Name Invalid Nom du thème invalide - + Invalid theme name. Please enter one. Nom du thème invalide. Veuillez en introduire un. - + (approximately %d lines per slide) (approximativement %d lignes pas diapositive) @@ -4198,7 +4297,7 @@ The content encoding is not UTF-8. Le contenu n'est pas de l'UTF-8. - + Validation Error Erreur de validation @@ -4213,12 +4312,12 @@ Le contenu n'est pas de l'UTF-8. 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. @@ -4237,255 +4336,260 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ThemeWizard - + Edit Theme - %s Édite le thème - %s - + Theme Wizard Assistant thème - + Welcome to the Theme Wizard Bienvenue dans l'assistant thème - + 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. Cet assistant va vous aider à créer et éditer votre thème. Cliquer sur la bouton suivant pour démarrer le processus par configurer votre fond. - + Set Up Background Établir le font - + Set up your theme's background according to the parameters below. Établir le fond de votre thème en fonction des paramètre si dessous. - + Background type: Type de font : - + Solid Color Couleur unie - + Gradient Dégrader - + Color: Couleur : - + Gradient: Dégrader : - + Horizontal Horizontal - + Vertical Vertical - + Circular Circulaire - + Top Left - Bottom Right Haut gauche - Bas droite - + Bottom Left - Top Right Bas gauche - Haut droite - + Main Area Font Details Aire principale détails de police - + Define the font and display characteristics for the Display text Définir la police et les caractéristique d'affichage pour afficher le text - + Font: Police : - + Size: Taille : - + Line Spacing: Espace des lignes : - + &Outline: &Contour : - + &Shadow: &Ombre : - + Bold Gras - + Italic Italique - + Footer Area Font Details Détailles de la police du pied de page - + Define the font and display characteristics for the Footer text Définir la police et les caractéristiques d'affichage du texte en pied de page - + Text Formatting Details Détails de formatage du texte - + Allows additional display formatting information to be defined Permet de définir des paramètre d'affichage supplémentaire - + Horizontal Align: Alignement horizontal : - + Left Gauche - + Right Droite - + Center Centrer - + Transitions: Traductions : - + Output Area Locations Emplacement de la zone d'affichage - + Allows you to change and move the main and footer areas. Vous permettre de déplacer les zone principale et de pied de page. - + &Main Area Zone &principale - + &Use default location &Utilise l'emplacement par défaut - + X position: Position x : - + px px - + Y position: Position y : - + Width: Largeur : - + Height: Hauteur : - + &Footer Area Zone de &pied de page - + Use default location Utilise l'emplacement pas défaut - + Save and Preview Enregistre et prévisualise - + View the theme and save it replacing the current one or change the name to create a new theme Visualise le thème et l'enregistre a la place du thème courent, ou change le nom pour en créer un nouveau - + Theme name: Nom du thème : - + Starting color: - + Ending color: + + + Background color: + Couleur de fond : + OpenLP.ThemesTab @@ -4876,7 +4980,7 @@ Le contenu n'est pas de l'UTF-8. Prêt. - + Starting import... Commence l'import... @@ -5421,126 +5525,141 @@ Le contenu n'est pas de l'UTF-8. SongUsagePlugin - + &Song Usage Tracking Suivre de l'utilisation des chants - + &Delete Tracking Data &Supprime les données de suivi - + Delete song usage data up to a specified date. Supprime les données de l'utilisation des chants jusqu'à une date déterminée. - + &Extract Tracking Data &Extraire les données de suivi - + Generate a report on song usage. Génère un rapport de l'utilisation des chants. - + Toggle Tracking Enclenche/déclenche suivi - + Toggle the tracking of song usage. Enclenche/déclenche le suivi de l'utilisation des chants. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Module de suivi</strong><br />Ce module permet de suivre l'utilisation des chants dans les services. - + SongUsage name singular Suivi de l'utilisation des chants - + SongUsage name plural Suivi de l'utilisation des chants - + SongUsage container title Suivi de l'utilisation des chants - + Song Usage Suivi de l'utilisation des chants - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Supprime les données de suivi de l'utilisation des chants - + Delete Selected Song Usage Events? Supprime les événement d'usages sélectionné ? - + Are you sure you want to delete selected Song Usage data? Êtes vous sur de vouloir supprimer les donnée de suivi sélectionnée ? - + Deletion Successful Suppression effectuée - + All requested data has been deleted successfully. Toutes les données demandées a été supprimées avec succès. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Extraction de l'utilisation des chants - + Select Date Range Sélectionne une période - + to à - + Report Location Emplacement du rapport @@ -5555,12 +5674,12 @@ Le contenu n'est pas de l'UTF-8. rapport_d_utilisation_%s_%s.txt - + Report Creation Création du rapport - + Report %s has been successfully created. @@ -5582,82 +5701,82 @@ has been successfully created. SongsPlugin - + Arabic (CP-1256) Arabe (CP-1256) - + Baltic (CP-1257) Baltique (CP-1257) - + Central European (CP-1250) Europe centrale (CP-1250) - + Cyrillic (CP-1251) Cyrillique (CP-1251) - + Greek (CP-1253) Grecque (CP-1253) - + Hebrew (CP-1255) Hébreux (CP-1255) - + Japanese (CP-932) Japonais (CP-932) - + Korean (CP-949) Coréen (CP-949) - + Simplified Chinese (CP-936) Chinois simplifié (CP-936) - + Thai (CP-874) Thaï (CP-874) - + Traditional Chinese (CP-950) Chinois Traditionnel (CP-950) - + Turkish (CP-1254) Turque (CP-1254) - + Vietnam (CP-1258) Vietnamiens (CP-1258) - + Western European (CP-1252) Europe de l'ouest (CP-1252) - + Character Encoding Enccodage des caractères - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5666,62 +5785,62 @@ de l'affichage correct des caractères. Habituellement le choix présélectionné est pertinent. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Veillez choisir l'enccodage des caractères. L'enccodage est responsable de l'affichage correct des caractères. - + &Song &Chant - + Import songs using the import wizard. Import des chants en utilisant l'assistant d'import. - + &Re-index Songs &Re-index Chants - + Re-index the songs database to improve searching and ordering. Re-index la base de donnée des chants pour accélérer la recherche et le tri. - + Reindexing songs... Récréation des index des chants en cours... - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Module Chants</strong><br />Le module des Chants permet d'afficher et de gérer les chants. - + Song name singular Chant - + Songs name plural Chants - + Songs container title Chants - + Exports songs using the export wizard. Export les chants en utilisant l'assistant d'export. @@ -5756,32 +5875,32 @@ L'enccodage est responsable de l'affichage correct des caractères.Ajoute le Chant sélectionné au service. - + Add a new song. Ajouter un nouveau chant. - + Edit the selected song. Édite la chant sélectionné. - + Delete the selected song. Efface le chant sélectionné. - + Preview the selected song. Prévisualise le chant sélectionné. - + Send the selected song live. Affiche en direct le chant sélectionné. - + Add the selected song to the service. Ajoute le chant sélectionné au service. @@ -6073,7 +6192,7 @@ L'enccodage est responsable de l'affichage correct des caractères. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - Cet assistant va sous aider a exporter vos chant fans le format de chant libre et gratuit OpenLyrics worship. + Cet assistant va sous aider a exporter vos chant fans le format de chant libre et gratuit OpenLyrics worship. @@ -6136,7 +6255,7 @@ L'enccodage est responsable de l'affichage correct des caractères.Vous devez spécifier un répertoire. - + Select Destination Folder Sélectionne le répertoire de destination @@ -6145,6 +6264,11 @@ L'enccodage est responsable de l'affichage correct des caractères.Select the directory where you want the songs to be saved. Sélectionne le répertoire ou vous voulez enregistrer vos chants. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6363,13 +6487,18 @@ L'enccodage est responsable de l'affichage correct des caractères. Finished export. - Export terminé. + Export terminé. - + Your song export failed. Votre export de chant à échouer. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index 4d3cf600e..17fb60028 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -1,31 +1,5 @@ - - AlertPlugin.AlertForm - - - You have not entered a parameter to be replaced. -Do you want to continue anyway? - Nincs megadva a cserélend? paraméter. Folytatható? - - - - No Parameter Found - Nem található a paraméter - - - - No Placeholder Found - Nem található a helyjelöl? - - - - The alert text does not contain '<>'. -Do you want to continue anyway? - Az értesít? szöveg nem tartalmaz „<>” karaktereket. -Folytatható? - - AlertsPlugin @@ -38,11 +12,6 @@ Folytatható? Show an alert message. Értesítést jelenít meg. - - - <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen - <strong>Értesítés b?vítmény</strong><br />Az értesítés b?vítmény kezeli a gyermekfelügyelet felhívásait a vetít?n. - Alert @@ -64,7 +33,7 @@ Folytatható? <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen. - + <strong>Értesítés bővítmény</strong><br />Az értesítés bővítmény kezeli a gyermekfelügyelet felhívásait a vetítőn. @@ -72,7 +41,7 @@ Folytatható? Alert Message - Értesít? üzenet + Értesítő üzenet @@ -107,7 +76,7 @@ Folytatható? You haven't specified any text for your alert. Please type in some text before clicking New. - Az értesítés szövege nincs megadva. Adj meg valamilyen szöveget az Új gombra való kattintás el?tt. + Az értesítés szövege nincs megadva. Adj meg valamilyen szöveget az Új gombra való kattintás előtt. @@ -117,24 +86,24 @@ Folytatható? No Parameter Found - Nem található a paraméter + Nem található a paraméter You have not entered a parameter to be replaced. Do you want to continue anyway? - Nincs megadva a cserélend? paraméter. Folytatható? + Nincs megadva a cserélendő paraméter. Folytatható? No Placeholder Found - Nem található a helyjelöl? + Nem található a helyjelölő The alert text does not contain '<>'. Do you want to continue anyway? - Az értesít? szöveg nem tartalmaz „<>” karaktereket. + Az értesítő szöveg nem tartalmaz „<>” karaktereket. Folytatható? @@ -143,7 +112,7 @@ Folytatható? Alert message created and displayed. - Az értesít? üzenet létrejött és megjelent. + Az értesítő üzenet létrejött és megjelent. @@ -151,17 +120,17 @@ Folytatható? Font - Bet?készlet + Betűkészlet Font name: - Bet?készlet neve: + Betűkészlet neve: Font color: - Bet?szín: + Betűszín: @@ -171,100 +140,12 @@ Folytatható? Font size: - Bet?méret: + Betűméret: Alert timeout: - Értesítés id?tartama: - - - - BibleDB.Wizard - - - Importing books... %s - Könyvek importálása… %s - - - - Importing verses from %s... - Importing verses from <book name>... - Versek importálása ebb?l a könyvb?l: %… - - - - Importing verses... done. - Versek importálása… kész. - - - - BiblePlugin - - - &Upgrade older Bibles - &Régebbi bibliák frissítés - - - - Upgrade the Bible databases to the latest format - Frissíti a biblia adatbázisokat a legutolsó formára - - - - Upgrade the Bible databases to the latest format. - Frissíti a biblia adatbázisokat a legutolsó formára. - - - - BiblePlugin.HTTPBible - - - Download Error - Letöltési hiba - - - - 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. - Probléma történt a kijelölt versek letöltésekor. Kérem, ellen?rizd a az internetkapcsolatot, és ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. - - - - Parse Error - Feldolgozási hiba - - - - There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - Probléma történt a kiválasztott versek kicsomagolásakor. Ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. - - - - BiblePlugin.MediaItem - - - Bible not fully loaded. - A biblia nem tölt?dött be teljesen. - - - - You cannot combine single and dual Bible verse search results. 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? - - - - Information - Információ - - - - The second Bibles does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. - A második biblia nem tartalmaz minden verset, ami az els?ben megtalálható. Csak a mindkét bibliában fellelhet? versek fognak mgejelenni. Ezek a versek nem lesznek megtalálhatóak: %d. - - - - The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. - A második biblia nem tartalmaz minden verset, ami az els?ben megtalálható. Csak a mindkét bibliában fellelhet? versek fognak mgejelenni. Ezek a versek nem lesznek megtalálhatóak: %d. + Értesítés időtartama: @@ -300,7 +181,7 @@ Folytatható? No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - A kért könyv nem található ebben a bibliában. Kérlek, ellen?rizd a könyv nevének helyesírását. + A kért könyv nem található ebben a bibliában. Kérlek, ellenőrizd a könyv nevének helyesírását. @@ -325,12 +206,12 @@ Folytatható? Preview the selected Bible. - A kijelölt biblia el?nézete. + A kijelölt biblia előnézete. Send the selected Bible live. - A kijelölt biblia él? adásba küldése. + A kijelölt biblia élő adásba küldése. @@ -340,17 +221,17 @@ Folytatható? <strong>Bible Plugin</strong><br />The Bible plugin provides the ability to display Bible verses from different sources during the service. - <strong>Biblia b?vítmény</strong><br />A biblia b?vítmény különféle forrásokból származó igehelyek vetítését teszi lehet?vé a szolgálat alatt. + <strong>Biblia bővítmény</strong><br />A biblia bővítmény különféle forrásokból származó igehelyek vetítését teszi lehetővé a szolgálat alatt. &Upgrade older Bibles - &Régebbi bibliák frissítés + &Régebbi bibliák frissítés Upgrade the Bible databases to the latest format. - Frissíti a biblia adatbázisokat a legutolsó formára. + Frissíti a biblia adatbázisokat a legutolsó formátumra. @@ -370,7 +251,7 @@ Book Chapter:Verse-Verse Book Chapter:Verse-Verse,Verse-Verse Book Chapter:Verse-Verse,Chapter:Verse-Verse Book Chapter:Verse-Chapter:Verse - Ezt az igehely hivatkozást nem támogatja az OpenLP vagy nem helyes. Kérlek, ellen?rizd, hogy a hivatkozás megfelel-e az egyik alábbi mintának: + Ezt az igehely hivatkozást nem támogatja az OpenLP vagy nem helyes. Kérlek, ellenőrizd, hogy a hivatkozás megfelel-e az egyik alábbi mintának: Könyv fejezet Könyv fejezet-fejezet @@ -387,19 +268,19 @@ Könyv fejezet:Vers-Fejezet:Vers Text Search is not available with Web Bibles. - A keresés nem érhet? el online biblián. + A keresés nem érhető el online biblián. 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. Nincs megadva keresési kifejezés. -Több kifejezés is megadható. Szóközzel történ? elválasztás esetén minden egyes kifejezésre történik a keresés, míg vessz?vel való elválasztás esetén csak az egyikre. +Több kifejezés is megadható. Szóközzel történő elválasztás esetén minden egyes kifejezésre történik a keresés, míg vesszővel való elválasztás esetén csak az egyikre. No Bibles Available - Nincsenek elérhet? bibliák + Nincsenek elérhető bibliák @@ -449,12 +330,12 @@ Több kifejezés is megadható. Szóközzel történ? elválasztás esetén mind Note: Changes do not affect verses already in the service. Megjegyzés: -A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. +A módosítások nem érintik a már a szolgálati sorrendben lévő verseket. Display second Bible verses - Kett?zött bibliaversek megjelenítése + Kettőzött bibliaversek megjelenítése @@ -462,42 +343,42 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. Select Book Name - Válaszd ki a könyv nevét + The following book name cannot be matched up internally. Please select the corresponding English name from the list. - A következ? könyvnév nem ismerhet? fel. Válassz egy helyes angol nevet a következ? listából. + Current name: - Jelenlegi név: + Corresponding name: - Megfelel? név: + Show Books From - Könyvek megjelenítése + Old Testament - Ószövetség + New Testament - Újszövetség + Apocrypha - Apokrif + @@ -505,7 +386,7 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. You need to select a book. - Ki kell jelölni egy könyvet. + @@ -513,18 +394,18 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. Importing books... %s - Könyvek importálása… %s + Könyvek importálása… %s Importing verses from %s... Importing verses from <book name>... - Versek importálása ebb?l a könyvb?l: %… + Versek importálása ebből a könyvből: %… Importing verses... done. - Versek importálása… kész. + Versek importálása… kész. @@ -548,22 +429,22 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. Download Error - Letöltési hiba + Letöltési hiba 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. - Probléma történt a kijelölt versek letöltésekor. Kérem, ellen?rizd a az internetkapcsolatot, és ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. + Probléma történt a kijelölt versek letöltésekor. Kérem, ellenőrizd a az internetkapcsolatot, és ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. Parse Error - Feldolgozási hiba + Feldolgozási hiba There was a problem extracting your verse selection. If this error continues to occur please consider reporting a bug. - Probléma történt a kiválasztott versek kicsomagolásakor. Ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. + Probléma történt a kiválasztott versek kicsomagolásakor. Ha a hiba nem oldódik meg, fontold meg a hiba bejelentését. @@ -576,7 +457,7 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from. - A tündér segít a különféle formátumú bibliák importálásában. Kattints az alábbi Következ? gombra a folyamat els? lépésének indításhoz, a formátum kiválasztásához. + A tündér segít a különféle formátumú bibliák importálásában. Kattints az alábbi Következő gombra a folyamat első lépésének indításhoz, a formátum kiválasztásához. @@ -646,7 +527,7 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. Copyright: - Szerz?i jog: + Szerzői jog: @@ -656,12 +537,12 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. You need to specify a file with books of the Bible to use in the import. - Meg kell adni egy fájlt a bibliai könyvekr?l az importáláshoz. + Meg kell adni egy fájlt a bibliai könyvekről az importáláshoz. You need to specify a file of Bible verses to import. - Meg kell adni egy fájlt a bibliai versekr?l az importáláshoz. + Meg kell adni egy fájlt a bibliai versekről az importáláshoz. @@ -681,12 +562,12 @@ A módosítások nem érintik a már a szolgálati sorrendben lév? verseket. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - Meg kell adni a biblia szerz?i jogait. A közkincs? bibliákat meg kell jelölni ilyennek. + Meg kell adni a biblia szerzői jogait. A közkincsű bibliákat meg kell jelölni ilyennek. This Bible already exists. Please import a different Bible or first delete the existing one. - 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. + 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. @@ -740,17 +621,17 @@ demand and thus an internet connection is required. Select Language - Nyelvválasztás + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - Az OpenLP nem képes meghatározni ennek a bibliafordítás nyelvét. Válaszd ki az alábbi listából. + Language: - Nyelv: + Nyelv: @@ -758,7 +639,7 @@ demand and thus an internet connection is required. You need to choose a language. - Meg kell adnod a nyelvet. + @@ -791,7 +672,7 @@ demand and thus an internet connection is required. From: - Innent?l: + Innentől: @@ -816,27 +697,27 @@ demand and thus an internet connection is required. Toggle to keep or clear the previous results. - Átváltás az el?z? eredmény meg?rzése, ill. törlése között. + Átváltás az előző eredmény megőrzése, ill. törlése között. You cannot combine single and dual Bible verse search results. 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? + 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. - A biblia nem tölt?dött be teljesen. + A biblia nem töltődött be teljesen. - + Information - Információ + Információ - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. - A második biblia nem tartalmaz minden verset, ami az els?ben megtalálható. Csak a mindkét bibliában fellelhet? versek fognak mgejelenni. Ezek a versek nem lesznek megtalálhatóak: %d. + A második biblia nem tartalmaz minden verset, ami az elsőben megtalálható. Csak a mindkét bibliában fellelhető versek fognak mgejelenni. Ezek a versek nem lesznek megtalálhatóak: %d. @@ -867,211 +748,77 @@ demand and thus an internet connection is required. Select a Backup Directory - Válassz egy mappát a biztonsági mentésnek + Bible Upgrade Wizard - Bibliafrissít? tündér + This wizard will help you to upgrade your existing Bibles from a prior version of OpenLP 2. Click the next button below to start the upgrade process. - A tündér segít az OpenLP 2 korábbi verzióiból származó bibliák frissítésében. Kattints az alábbi Következ? gombra a folyamat indításhoz. + Select Backup Directory - Biztonsági mentés mappája + Please select a backup directory for your Bibles - Válassz egy mappát a Biliáid biztonsági mentésének + Previous releases of OpenLP 2.0 are unable to use upgraded Bibles. This will create a backup of your current Bibles so that you can simply copy the files back to your OpenLP data directory if you need to revert to a previous release of OpenLP. Instructions on how to restore the files can be found in our <a href="http://wiki.openlp.org/faq">Frequently Asked Questions</a>. - Az OpenLP 2.0 el?z? verziói nem képesek a frissített bibliákat alkalmazni. Ez a tündér segít bitonsági mentést készíteni a jelenlegi bibliákról, így ha vissza kell térni az OpenLP egy régebbi verziójára, akkor ezeket csak be kell majd másolni az OpenLP adatmappájába. A helyreállítási tudnivalók a <a href="http://wiki.openlp.org/faq">Gyakran Ismételt Kérdések</a> között találhatók. + Please select a backup location for your Bibles. - Válassz egy helyet a Biliáid biztonsági mentésének. + Backup Directory: - Biztonsági mentés helye: + There is no need to backup my Bibles - Nincs szükségem biztonsági másolatra + Select Bibles - Bibliák kijelölése + Please select the Bibles to upgrade - Jelöld ki a frissítend? bibliákat - - - - Version name: - Verzió neve: - - - - This Bible still exists. Please change the name or uncheck it. - A Bibia már létezik. Változtasd meg a nevét vagy ne jelöld be. + Upgrading - Frissítés + Please wait while your Bibles are upgraded. - Kérlek, várj, míg a biblia frissítés alatt áll. + - - You need to specify a Backup Directory for your Bibles. - Meg kell adni a bibliáid biztonsági mentésének helyét. - - - - The backup was not successful. -To backup your Bibles you need permission to write to the given directory. If you have write permissions and this error still occurs, please report a bug. - A bizontonsági mentés nem teljes. -A bibliák biztonsági mentéséhez írási jogosultság szükséges a megadott mappára. Ha az írási jogosultság fennáll, és mégis el?fordul ez a hiba, jelentsd be a hibát. - - - - You need to specify a version name for your Bible. - Meg kell adni a biblia verziószámát. - - - - Bible Exists - Biblia létezik - - - - This Bible already exists. Please upgrade a different Bible, delete the existing one or uncheck. - A bibia már létezik. Kérlek, frissíts egy másik bibliát, töröld a már meglév?t vagy ne jelöld be. - - - - Starting upgrading Bible(s)... - Bibliák frissítésének kezdése… - - - - There are no Bibles available to upgrade. - Nincs frissíthet? biblia. - - - - Upgrading Bible %s of %s: "%s" -Failed - Biblia frissítése: %s/%s: „%s” -Sikertelen - - - - Upgrading Bible %s of %s: "%s" -Upgrading ... - Biblia frissítése: %s/%s: „%s” -Frissítés… - - - - Download Error - Letöltési hiba - - - - To upgrade your Web Bibles an Internet connection is required. If you have a working Internet connection and this error still occurs, please report a bug. - A webes bibliák frissítéséshez internet kapcsolat szükséges. Ha van m?köd? internet kapcsolat, és mégis el?fordul ez a hiba, jelentsd be a hibát. - - - - Upgrading Bible %s of %s: "%s" -Upgrading %s ... - Biblia frissítése: %s/%s: „%s” -Frissítés: %s … - - - - Upgrading Bible %s of %s: "%s" -Done - Biblia frissítése: %s/%s: „%s” -Kész - - - - , %s failed - , %s sikertelen - - - - Upgrading Bible(s): %s successful%s -Please note, that verses from Web Bibles will be downloaded -on demand and so an Internet connection is required. - Bibliák frissítése: %s teljesítve %s. -Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve -és ekkor is internet kapcsolat szükségeltetik. - - - - Upgrading Bible(s): %s successful%s - Biblia frissítése: %s teljesítve %s - - - - Upgrade failed. - A frissítés nem sikerült. + + You need to specify a backup directory for your Bibles. + The backup was not successful. To backup your Bibles you need permission to write to the given directory. - A bizontonsági mentés nem teljes. -A bibliák biztonsági mentéséhez írási jogosultság szükséges a megadott mappára. - - - - Starting Bible upgrade... - Bibliák frissítésének kezdése… - - - - To upgrade your Web Bibles an Internet connection is required. - A webes bibliák frissítéséshez internet kapcsolat szükséges. - - - - Upgrading Bible %s of %s: "%s" -Complete - Biblia frissítése: %s/%s: „%s” -Teljes - - - - Upgrading Bible(s): %s successful%s -Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. - Bibliák frissítése: %s teljesítve %s. -Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor is internet kapcsolat szükségeltetik. - - - - You need to specify a backup directory for your Bibles. @@ -1084,18 +831,68 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor There are no Bibles that need to be upgraded. + + + Upgrading Bible %s of %s: "%s" +Upgrading ... + + + + + Download Error + Letöltési hiba + + + + To upgrade your Web Bibles an Internet connection is required. + + + + + Upgrading Bible %s of %s: "%s" +Failed + + + + + Upgrading Bible %s of %s: "%s" +Upgrading %s ... + + + + + Upgrading Bible %s of %s: "%s" +Complete + + + + + , %s failed + + + + + Upgrading Bible(s): %s successful%s +Please note that verses from Web Bibles will be downloaded on demand and so an Internet connection is required. + + + + + Upgrading Bible(s): %s successful%s + + + + + Upgrade failed. + + CustomPlugin - - - <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>Speciális b?vítmény</strong><br />A speciális b?vítmény dalokhoz hasonló egyéni diasor vetítését teszi lehet?vé. Ugyanakkor több szabadságot enged meg, mint a dalok b?vítmény. - <strong>Custom Slide Plugin</strong><br />The custom slide 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>Speciális dia b?vítmény</strong><br />A speciális dia b?vítmény dalokhoz hasonló egyéni diasor vetítését teszi lehet?vé. Ugyanakkor több szabadságot enged meg, mint a dalok b?vítmény. + <strong>Speciális dia bővítmény</strong><br />A speciális dia bővítmény dalokhoz hasonló egyéni diasor vetítését teszi lehetővé. Ugyanakkor több szabadságot enged meg, mint a dalok bővítmény. @@ -1143,12 +940,12 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor Preview the selected custom slide. - A kijelölt speciális dia el?nézete. + A kijelölt speciális dia előnézete. Send the selected custom slide live. - A kijelölt speciális dia él? adásba küldése. + A kijelölt speciális dia élő adásba küldése. @@ -1161,7 +958,7 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor Custom Display - Speciális megjelenése + Speciális dia megjelenése @@ -1196,11 +993,6 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor Edit all the slides at once. Minden kijelölt dia szerkesztése egyszerre. - - - Split Slide - Szétválasztás - Split a slide into two by inserting a slide splitter. @@ -1214,7 +1006,7 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor &Credits: - &Közrem?köd?k: + &Közreműködők: @@ -1231,11 +1023,6 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor Ed&it All &Összes szerkesztése - - - Split a slide into two only if it does not fit on the screen as one slide. - Diák kettéválasztása csak akkor, ha nem fér ki a képerny?n egy diaként. - Insert Slide @@ -1247,172 +1034,68 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor Are you sure you want to delete the %n selected custom slides(s)? - - + + Valóban törölhetők a kijelölt speciális diák: %n? - - CustomsPlugin - - - Custom - name singular - Speciális - - - - Customs - name plural - Speciális diák - - - - Custom - container title - Speciális - - - - Load a new Custom. - Új speciális betöltése. - - - - Import a Custom. - Speciális importálása. - - - - Add a new Custom. - Új speciális hozzáadása. - - - - Edit the selected Custom. - A kijelölt speciális szerkesztése. - - - - Delete the selected Custom. - A kijelölt speciális törlése. - - - - Preview the selected Custom. - A kijelölt speciális el?nézete. - - - - Send the selected Custom live. - A kijelölt speciális él? adásba küldése. - - - - Add the selected Custom to the service. - A kijelölt speciális hozzáadása a szolgálati sorrendhez. - - - - GeneralTab - - - General - Általános - - ImagePlugin - + <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>Kép b?vítmény</strong><br />A kép a b?vítmény különféle képek vetítését teszi lehet?vé.<br />A b?vítmény egyik különös figyelmet érdeml? képessége az, hogy képes a sorrendkezel?n csoportba foglalni a képeket, így könnyebbé téve képek tömeges vetítését. A b?vítmény képes az OpenLP „id?zített körkörös” lejátszásra is, amivel a diasort automatikusan tudjuk léptetni. Továbbá, a b?vítményben megadott képekkel felülírhatjuk a téma háttérképét, amellyel a szöveg alapú elemek, mint pl. a dalok, a megadott háttérképpel jelennek meg, a témában beállított háttérkép helyett. + <strong>Kép bővítmény</strong><br />A kép a bővítmény különféle képek vetítését teszi lehetővé.<br />A bővítmény egyik különös figyelmet érdemlő képessége az, hogy képes a sorrendkezelőn csoportba foglalni a képeket, így könnyebbé téve képek tömeges vetítését. A bővítmény képes az OpenLP „időzített körkörös” lejátszásra is, amivel a diasort automatikusan tudjuk léptetni. Továbbá, a bővítményben megadott képekkel felülírhatjuk a téma háttérképét, amellyel a szöveg alapú elemek, mint pl. a dalok, a megadott háttérképpel jelennek meg, a témában beállított háttérkép helyett. - + Image name singular Kép - + Images name plural Képek - + Images container title Képek - - Load a new Image. - Új kép betöltése. - - - - Add a new Image. - Új kép hozzáadása. - - - - Edit the selected Image. - A kijelölt kép szerkesztése. - - - - Delete the selected Image. - A kijelölt kép törlése. - - - - Preview the selected Image. - A kijelölt kép el?nézete. - - - - Send the selected Image live. - A kijelölt kép él? adásba küldése. - - - - Add the selected Image to the service. - A kijelölt kép hozzáadása a szolgálati sorrendhez. - - - + Load a new image. Új kép betöltése. - + Add a new image. Új kép hozzáadása. - + Edit the selected image. A kijelölt kép szerkesztése. - + Delete the selected image. A kijelölt kép törlése. - + Preview the selected image. - A kijelölt kép el?nézete. + A kijelölt kép előnézete. - + Send the selected image live. - A kijelölt kép él? adásba küldése. + A kijelölt kép élő adásba küldése. - + Add the selected image to the service. A kijelölt kép hozzáadása a szolgálati sorrendhez. @@ -1438,35 +1121,53 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor Ki kell választani egy képet a törléshez. - + You must select an image to replace the background with. Ki kell választani egy képet a háttér cseréjéhez. - + Missing Image(s) - + The following image(s) no longer exist: %s - A következ? kép(ek) nem létezik: %s + A következő kép(ek) nem létezik: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? - A következ? kép(ek) nem létezik: %s + A következő kép(ek) nem létezik: %s Szeretnél más képeket megadni? - + There was a problem replacing your background, the image file "%s" no longer exists. Probléma történt a háttér cseréje során, a(z) „%s” kép nem létezik. - + There was no display item to amend. + Nem volt módosított megjelenő elem. + + + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. @@ -1475,7 +1176,7 @@ Szeretnél más képeket megadni? <strong>Media Plugin</strong><br />The media plugin provides playback of audio and video. - <strong>Média b?vítmény</strong><br />A média b?vítmény hangok és videók lejátszását teszi lehet?vé. + <strong>Média bővítmény</strong><br />A média bővítmény hangok és videók lejátszását teszi lehetővé. @@ -1495,41 +1196,6 @@ Szeretnél más képeket megadni? container title Média - - - Load a new Media. - Új médiafájl betöltése. - - - - Add a new Media. - Új médiafájl hozzáadása. - - - - Edit the selected Media. - A kijelölt médiafájl szerkesztése. - - - - Delete the selected Media. - A kijelölt médiafájl törlése. - - - - Preview the selected Media. - A kijelölt médiafájl el?nézete. - - - - Send the selected Media live. - A kijelölt médiafájl él? adásba küldése. - - - - Add the selected Media to the service. - A kijelölt médiafájl hozzáadása a szolgálati sorrendhez. - Load new media. @@ -1553,12 +1219,12 @@ Szeretnél más képeket megadni? Preview the selected media. - A kijelölt médiafájl el?nézete. + A kijelölt médiafájl előnézete. Send the selected media live. - A kijelölt médiafájl él? adásba küldése. + A kijelölt médiafájl élő adásba küldése. @@ -1606,7 +1272,7 @@ Szeretnél más képeket megadni? There was no display item to amend. - + Nem volt módosított megjelenő elem. @@ -1619,7 +1285,7 @@ Szeretnél más képeket megadni? Use Phonon for video playback - A Phonon médiakezel? keretrendszer alkalmazása videók lejátszására + A Phonon médiakezelő keretrendszer alkalmazása videók lejátszására @@ -1640,7 +1306,7 @@ Szeretnél más képeket megadni? You have to upgrade your existing Bibles. Should OpenLP upgrade now? A bibliák formátuma megváltozott, -ezért frissíteni kell a már meglév? bibliákat. +ezért frissíteni kell a már meglévő bibliákat. Frissítheti most az OpenLP? @@ -1649,7 +1315,7 @@ Frissítheti most az OpenLP? Credits - Közrem?köd?k + Közreműködők @@ -1732,16 +1398,16 @@ Final Credit Projektvezetés %s -Fejleszt?k +Fejlesztők %s Hozzájárulók %s -Tesztel?k +Tesztelők %s -Csomagkészít?k +Csomagkészítők %s Fordítók @@ -1759,7 +1425,7 @@ Fordítók %s Magyar (hu) %s - Jap?n (ja) + Japűn (ja) %s Norvég bokmål (nb) %s @@ -1779,22 +1445,22 @@ Fordítás PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro Oxygen ikonok: http://oxygen-icons.org/ -Végs? köszönet +Végső köszönet „Úgy szerette Isten a világot, hogy egyszülött Fiát adta oda, hogy egyetlen - benne hív? se vesszen el, hanem + benne hívő se vesszen el, hanem örök élete legyen.” (Jn 3,16) - És végül, de nem utolsósorban, a végs? köszönet + És végül, de nem utolsósorban, a végső köszönet Istené, Atyánké, mert elküldte a Fiát, hogy meghaljon - a kereszten, megszabadítva bennünket a b?nt?l. Ezért + a kereszten, megszabadítva bennünket a bűntől. Ezért ezt a programot szabadnak és ingyenesnek készítettük, - mert ? tett minket szabaddá. + mert Ő tett minket szabaddá. 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. - Ez egy szabad szoftver; terjeszthet? illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint - 2. verzió -, melyet a Szabad Szoftver Alapítvány ad ki. + Ez egy szabad szoftver; terjeszthető illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint - 2. verzió -, melyet a Szabad Szoftver Alapítvány ad ki. @@ -1810,11 +1476,11 @@ 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> – Nyílt forrású dalszöveg vetít? + OpenLP <version><revision> – Nyílt forrású dalszöveg vetítő -Az OpenLP egy templomi/gyülekezeti bemutató, ill. dalszöveg vetít? szabad szoftver, mely használható énekek, bibliai versek, videók, képek és bemutatók (ha az Impress, PowerPoint vagy a PowerPoint Viewer telepítve van) vetítésére a gyülekezeti dics?ítés alatt egy számítógép és egy projektor segítségével. +Az OpenLP egy templomi/gyülekezeti bemutató, ill. dalszöveg vetítő szabad szoftver, mely használható énekek, bibliai versek, videók, képek és bemutatók (ha az Impress, PowerPoint vagy a PowerPoint Viewer telepítve van) vetítésére a gyülekezeti dicsőítés alatt egy számítógép és egy projektor segítségével. -Többet az OpenLP-r?l: http://openlp.org/ +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 projektben való részvételt az alábbi gombbal. @@ -1822,8 +1488,8 @@ Az OpenLP-t önkéntesek készítették és tartják karban. Ha szeretnél több Copyright © 2004-2011 %s Portions copyright © 2004-2011 %s - Szerz?i jog © 2004-2011 %s -Részleges szerz?i jog © 2004-2011 %s + Szerzői jog © 2004-2011 %s +Részleges szerzői jog © 2004-2011 %s @@ -1836,27 +1502,27 @@ Részleges szerz?i jog © 2004-2011 %s Number of recent files to display: - El?zmények megjelenítésének hossza: + Előzmények megjelenítésének hossza: Remember active media manager tab on startup - Újraindításkor az aktív médiakezel? fülek visszaállítása + Újraindításkor az aktív médiakezelő fülek visszaállítása Double-click to send items straight to live - Dupla kattintással az elemek azonnali él? adásba küldése + Dupla kattintással az elemek azonnali élő adásba küldése Expand new service items on creation - A sorrendbe kerül? elemek kibontása létrehozáskor + A sorrendbe kerülő elemek kibontása létrehozáskor Enable application exit confirmation - Kilépési meger?sítés engedélyezése + Kilépési megerősítés engedélyezése @@ -1866,7 +1532,7 @@ Részleges szerz?i jog © 2004-2011 %s Hide mouse cursor when over display window - Egérmutató elrejtése a vetítési képerny? felett + Egérmutató elrejtése a vetítési képernyő felett @@ -1891,7 +1557,7 @@ Részleges szerz?i jog © 2004-2011 %s Preview items when clicked in Media Manager - Elem el?nézete a médiakezel?ben való kattintáskor + Elem előnézete a médiakezelőben való kattintáskor @@ -1906,7 +1572,7 @@ Részleges szerz?i jog © 2004-2011 %s Browse for an image file to display. - Tallózd be a megjelenítend? képfájlt. + Tallózd be a megjelenítendő képfájlt. @@ -1914,181 +1580,12 @@ Részleges szerz?i jog © 2004-2011 %s Az eredeti OpenLP logó visszaállítása. - - OpenLP.DisplayTagDialog - - - Edit Selection - Kijelölés szerkesztése - - - - Description - Leírás - - - - Tag - Címke - - - - Start tag - Nyitó címke - - - - End tag - Záró címke - - - - Tag Id - ID - - - - Start HTML - Nyitó HTML - - - - End HTML - Befejez? HTML - - - - Save - Mentés - - - - OpenLP.DisplayTagTab - - - Update Error - Frissítési hiba - - - - Tag "n" already defined. - Az „n” címke már létezik. - - - - Tag %s already defined. - A címke már létezik: %s. - - - - New Tag - Új címke - - - - <Html_here> - <Html_itt> - - - - </and here> - </és itt> - - - - <HTML here> - <HTML itt> - - - - OpenLP.DisplayTags - - - Red - Vörös - - - - Black - Fekete - - - - Blue - Kék - - - - Yellow - Sárga - - - - Green - Zöld - - - - Pink - Rózsaszín - - - - Orange - Narancs - - - - Purple - Lila - - - - White - Fehér - - - - Superscript - Fels? index - - - - Subscript - Alsó index - - - - Paragraph - Bekezdés - - - - Bold - Félkövér - - - - Italics - D?lt - - - - Underline - Aláhúzott - - - - Break - Sortörés - - OpenLP.ExceptionDialog Oops! OpenLP hit a problem, and couldn't recover. The text in the box below contains information that might be helpful to the OpenLP developers, so please e-mail it to bugs@openlp.org, along with a detailed description of what you were doing when the problem occurred. - Hoppá! Az OpenLP hibába ütközött, és nem tudta lekezelni. Az alsó szövegdoboz olyan információkat tartalmaz, amelyek hasznosak lehetnek az OpenLP fejleszt?i számára, tehát kérjük, küld el a bugs@openlp.org email címre egy részletes leírás mellett, amely tartalmazza, hogy éppen hol és mit tettél, amikor a hiba történt. + Hoppá! Az OpenLP hibába ütközött, és nem tudta lekezelni. Az alsó szövegdoboz olyan információkat tartalmaz, amelyek hasznosak lehetnek az OpenLP fejlesztői számára, tehát kérjük, küld el a bugs@openlp.org email címre egy részletes leírás mellett, amely tartalmazza, hogy éppen hol és mit tettél, amikor a hiba történt. @@ -2229,38 +1726,33 @@ Version: %s Enabling selected plugins... - Kijelölt b?vítmények engedélyezése… + Kijelölt bővítmények engedélyezése… First Time Wizard - Els? indítás tündér + Első indítás tündér Welcome to the First Time Wizard - Üdvözlet az els? indítás tündérben + Üdvözlet az első indítás tündérben Activate required Plugins - Igényelt b?vítmények aktiválása + Igényelt bővítmények aktiválása Select the Plugins you wish to use. - Jelöld ki az alkalmazni kívánt b?vítményeket. + Jelöld ki az alkalmazni kívánt bővítményeket. Songs Dalok - - - Custom Text - Speciális - Bible @@ -2313,11 +1805,11 @@ Version: %s To 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. To cancel the First Time Wizard completely, press the finish button now. - Nem sikerült internetkapcsolatot találni. Az Els? indulás tündérnek internetkapcsolatra van szüksége ahhoz, hogy a példa dalokat, bibliákat és témákat le tudja tölteni. + Nem sikerült internetkapcsolatot találni. Az Első indulás tündérnek internetkapcsolatra van szüksége ahhoz, hogy a példa dalokat, bibliákat és témákat le tudja tölteni. -Az Els? indulás tündér újbóli indításához most a Mégse gobra kattints el?ször, ellen?rizd az internetkapcsolatot és indítsd újra az OpenLP-t. +Az Első indulás tündér újbóli indításához most a Mégse gobra kattints először, ellenőrizd az internetkapcsolatot és indítsd újra az OpenLP-t. -Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gombot. +Az Első indulás tündér további megkerüléséhez, nyomd meg a Befejezés gombot. @@ -2359,20 +1851,10 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Set up default settings to be used by OpenLP. Az OpenLP alapértelmezett beállításai. - - - Setting Up And Importing - Beállítás és importálás - - - - Please wait while OpenLP is set up and your data is imported. - Várj, amíg az OpenLP beállítások érvényre jutnak és míg az adatok importálódnak. - Default output display: - Alapértelmezett kimeneti képerny?: + Alapértelmezett kimeneti képernyő: @@ -2387,7 +1869,7 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom This wizard will help you to configure OpenLP for initial use. Click the next button below to start. - A tündér segít elkezdeni az OpenLP használatát. Kattints az alábbi Következ? gombra az indításhoz. + A tündér segít elkezdeni az OpenLP használatát. Kattints az alábbi Következő gombra az indításhoz. @@ -2397,7 +1879,7 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Please wait while OpenLP is set up and your data is downloaded. - Várj, amíg az OpenLP beállítások érvényre jutnak és míg az adatok letölt?dnek. + Várj, amíg az OpenLP beállítások érvényre jutnak és míg az adatok letöltődnek. @@ -2409,20 +1891,20 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Click the finish button to start OpenLP. Kattints a Befejezés gombra az OpenLP indításához. - - - Custom Slides - - Download complete. Click the finish button to return to OpenLP. - + Letöltés kész. Kattints a Befejezés gombra az OpenLP-hez való visszatéréshez. Click the finish button to return to OpenLP. - + Kattints a Befejezés gombra az OpenLP-hez való visszatéréshez. + + + + Custom Slides + Speciális diák @@ -2435,47 +1917,47 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Edit Selection - Kijelölés szerkesztése + Save - Mentés + Description - Leírás + Tag - Címke + Start tag - Nyitó címke + End tag - Záró címke + Tag Id - ID + Start HTML - Nyitó HTML + End HTML - Befejez? HTML + @@ -2483,32 +1965,32 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Update Error - Frissítési hiba + Tag "n" already defined. - Az „n” címke már létezik. + New Tag - Új címke + <HTML here> - <HTML itt> + </and here> - </és itt> + Tag %s already defined. - A címke már létezik: %s. + @@ -2516,62 +1998,62 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Red - Vörös + Black - Fekete + Blue - Kék + Yellow - Sárga + Green - Zöld + Pink - Rózsaszín + Orange - Narancs + Purple - Lila + White - Fehér + Superscript - Fels? index + Subscript - Alsó index + Paragraph - Bekezdés + @@ -2581,17 +2063,17 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Italics - D?lt + Underline - Aláhúzott + Break - Sortörés + @@ -2609,12 +2091,12 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Select monitor for output display: - Jelöld ki a vetítési képerny?t: + Jelöld ki a vetítési képernyőt: Display if a single screen - Megjelenítés egy képerny? esetén + Megjelenítés egy képernyő esetén @@ -2624,7 +2106,7 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Show blank screen warning - Figyelmeztetés megjelenítése az elsötétített képerny?r?l + Figyelmeztetés megjelenítése az elsötétített képernyőről @@ -2634,7 +2116,7 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Show the splash screen - Indító képerny? megjelenítése + Indító képernyő megjelenítése @@ -2644,12 +2126,12 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Prompt to save before starting a new service - Rákérdezés mentésre új sorrend létrehozása el?tt + Rákérdezés mentésre új sorrend létrehozása előtt Automatically preview next item in service - Következ? elem automatikus el?nézete a sorrendben + Következő elem automatikus előnézete a sorrendben @@ -2709,7 +2191,7 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Unblank display when adding new live item - Képerny? elsötétítésének visszavonása új elem él? adásba küldésekor + Képernyő elsötétítésének visszavonása új elem élő adásba küldésekor @@ -2719,7 +2201,7 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom Timed slide interval: - Id?zített dia intervalluma: + Időzített dia intervalluma: @@ -2746,318 +2228,318 @@ Az Els? indulás tündér további megkerüléséhez, nyomd meg a Befejezés gom OpenLP.MainWindow - + &File &Fájl - + &Import &Importálás - + &Export &Exportálás - + &View &Nézet - + M&ode &Mód - + &Tools &Eszközök - + &Settings &Beállítások - + &Language &Nyelv - + &Help &Súgó - + Media Manager - Médiakezel? + Médiakezelő - + Service Manager - Sorrendkezel? + Sorrendkezelő - + Theme Manager - Témakezel? + Témakezelő - + &New &Új - + &Open Meg&nyitás - + Open an existing service. - Meglév? sorrend megnyitása. + Meglévő sorrend megnyitása. - + &Save &Mentés - + Save the current service to disk. Aktuális sorrend mentése lemezre. - + Save &As... Mentés má&sként… - + Save Service As Sorrend mentése másként - + Save the current service under a new name. Az aktuális sorrend más néven való mentése. - + E&xit &Kilépés - + Quit OpenLP OpenLP bezárása - + &Theme &Téma - + &Configure OpenLP... OpenLP &beállítása… - - - &Media Manager - &Médiakezel? - - - - Toggle Media Manager - Médiakezel? átváltása - - - - Toggle the visibility of the media manager. - A médiakezel? láthatóságának átváltása. - - - - &Theme Manager - &Témakezel? - - - - Toggle Theme Manager - Témakezel? átváltása - - - - Toggle the visibility of the theme manager. - A témakezel? láthatóságának átváltása. - - - - &Service Manager - &Sorrendkezel? - - - - Toggle Service Manager - Sorrendkezel? átváltása - - Toggle the visibility of the service manager. - A sorrendkezel? láthatóságának átváltása. + &Media Manager + &Médiakezelő - &Preview Panel - &El?nézet panel + Toggle Media Manager + Médiakezelő átváltása - Toggle Preview Panel - El?nézet panel átváltása + Toggle the visibility of the media manager. + A médiakezelő láthatóságának átváltása. - Toggle the visibility of the preview panel. - Az el?nézet panel láthatóságának átváltása. + &Theme Manager + &Témakezelő - &Live Panel - &Él? adás panel + Toggle Theme Manager + Témakezelő átváltása - Toggle Live Panel - Él? adás panel átváltása + Toggle the visibility of the theme manager. + A témakezelő láthatóságának átváltása. + + + + &Service Manager + &Sorrendkezelő + + + + Toggle Service Manager + Sorrendkezelő átváltása - Toggle the visibility of the live panel. - Az él? adás panel láthatóságának átváltása. + Toggle the visibility of the service manager. + A sorrendkezelő láthatóságának átváltása. - &Plugin List - &B?vítménylista + &Preview Panel + &Előnézet panel - List the Plugins - B?vítmények listája + Toggle Preview Panel + Előnézet panel átváltása + + + + Toggle the visibility of the preview panel. + Az előnézet panel láthatóságának átváltása. + + + + &Live Panel + &Élő adás panel + Toggle Live Panel + Élő adás panel átváltása + + + + Toggle the visibility of the live panel. + Az élő adás panel láthatóságának átváltása. + + + + &Plugin List + &Bővítménylista + + + + List the Plugins + Bővítmények listája + + + &User Guide &Felhasználói kézikönyv - + &About &Névjegy - + More information about OpenLP - További információ az OpenLP-r?l + További információ az OpenLP-ről - + &Online Help &Online súgó - + &Web Site &Weboldal - + Use the system language, if available. - Rendszernyelv használata, ha elérhet?. + Rendszernyelv használata, ha elérhető. - + Set the interface language to %s A felhasználói felület nyelvének átváltása erre: %s - + Add &Tool... &Eszköz hozzáadása… - + Add an application to the list of tools. Egy alkalmazás hozzáadása az eszközök listához. - + &Default &Alapértelmezett - + Set the view mode back to the default. Nézetmód visszaállítása az alapértelmezettre. - + &Setup &Szerkesztés - + Set the view mode to Setup. Nézetmód váltása a Beállítás módra. - + &Live - &Él? adás + &Élő adás - + Set the view mode to Live. - Nézetmód váltása a Él? módra. + 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/. - Már letölthet? az OpenLP %s verziója (jelenleg a %s verzió fut). + Már letölthető az OpenLP %s verziója (jelenleg a %s verzió fut). -A legfrissebb verzió a http://openlp.org/ oldalról szerezhet? be. +A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. - + OpenLP Version Updated OpenLP verziófrissítés - + OpenLP Main Display Blanked - Elsötétített OpenLP f? képerny? + Elsötétített OpenLP fő képernyő - + The Main Display has been blanked out - A f? képerny? el lett sötétítve + A fő képernyő el lett sötétítve - + Default Theme: %s Alapértelmezett téma: %s - + Configure &Shortcuts... - &Gyorsbillenty?k beállítása… + &Gyorsbillentyűk beállítása… @@ -3066,108 +2548,185 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhet? be.Magyar - - Print the current Service Order. - Az aktuális sorrend nyomtatása. - - - - &Configure Display Tags - Megjelenítési &címkék beállítása - - - + &Autodetect &Automatikus felismerés - + Open &Data Folder... &Adatmappa megnyitása… - + Open the folder where songs, bibles and other data resides. A dalokat, bibliákat és egyéb adatokat tartalmazó mappa megnyitása. - + Close OpenLP OpenLP bezárása - + Are you sure you want to close OpenLP? Biztosan bezárható az OpenLP? - + Update Theme Images Témaképek frissítése - + Update the preview images for all themes. - Összes téma el?nézeti képének frissítése. + Összes téma előnézeti képének frissítése. - + Print the current service. Az aktuális sorrend nyomtatása. - + + &Recent Files + &Legutóbbi fájlok + + + + Configure &Formatting Tags... + Formázó &címkék beállítása… + + + L&ock Panels - + Panelek &zárolása - + Prevent the panels being moved. - + Megakadályozza a panelek mozgatását. - + Re-run First Time Wizard - + Első indítás tündér - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Első indítás tündér újbóli futtatása dalok, bibliák, témák importálásához. - + Re-run First Time Wizard? - + Újra futtatható az Első indítás tündér? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + Valóban újra futtatható az Első indítás tündér? + +A tündér újbóli futtatása során megváltozhatnak az OpenLP aktuális beállításai, az alapértelmezett téma és új dalok adhatók hozzá a jelenlegi dallistákhoz. - - &Recent Files - - - - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files + Lista törlése + + + + Clear the list of recent files. + Törli a legutóbbi fájlok listáját. + + + + Export OpenLP settings to a specified *.config file - - Clear the list of recent files. + + Settings + Beállítások + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Fájl megnyitása + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + Adatbázis hiba + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + A betöltés alatt álló adatbázis az OpenLP egy frisebb változatával készült. Az adatbázis verziószáma: %d, míg az OpenLP %d verziót vár el. Az adatbázis nem lesz betöltve. + +Adatbázis: %s + + + + OpenLP cannot load your database. + +Database: %s + Az OpenLP nem képes beolvasni az adatbázist. + +Adatbázis: %s + OpenLP.MediaManagerItem @@ -3184,12 +2743,12 @@ Re-running this wizard may make changes to your current OpenLP configuration and You must select one or more items to preview. - Ki kell jelölni egy elemet az el?nézethez. + Ki kell jelölni egy elemet az előnézethez. You must select one or more items to send live. - Ki kell jelölni egy él? adásba küldend? elemet. + Ki kell jelölni egy élő adásba küldendő elemet. @@ -3211,13 +2770,6 @@ Re-running this wizard may make changes to your current OpenLP configuration and You must select a %s service item. Ki kell jelölni egy %s sorrend elemet. - - - Duplicate file name %s. -Filename already exists in list - Duplikátum fájlnév: %s. -A fájlnév már benn van a listában - You must select one or more items to add. @@ -3228,32 +2780,31 @@ A fájlnév már benn van a listában No Search Results Nincs találat - - - Duplicate filename %s. -This filename is already in the list - Duplikátum fájlnév: %s. -A fájlnév már benn van a listában - - - - &Clone - - Invalid File Type - + Érvénytelen fájltípus Invalid File %s. Suffix not supported - + Érvénytelen fájl: %s. +Az utótag nem támogatott Duplicate files found on import and ignored. + Importálás közben duplikált fájl bukkant elő, figyelmet kívül lett hagyva. + + + + &Clone + &Klónozás + + + + Duplicate files were found on import and were ignored. @@ -3262,12 +2813,12 @@ Suffix not supported Plugin List - B?vítménylista + Bővítménylista Plugin Details - B?vítmény részletei + Bővítmény részletei @@ -3320,11 +2871,6 @@ Suffix not supported Options Beállítások - - - Close - Bezárás - Copy @@ -3358,7 +2904,7 @@ Suffix not supported Include slide text if available - Dia szövegének beillesztése, ha elérhet? + Dia szövegének beillesztése, ha elérhető @@ -3370,11 +2916,6 @@ Suffix not supported Include play length of media items Sorrend elem lejátszási hosszának beillesztése - - - Service Order Sheet - Szolgálati sorrend adatlap - Add page break before each text item @@ -3388,17 +2929,17 @@ Suffix not supported Print - + Nyomtatás Title: - + Cím: Custom Footer Text: - + Egyedi lábjegyzet szöveg: @@ -3406,25 +2947,25 @@ Suffix not supported Screen - Képerny? + Képernyő primary - els?dleges + elsődleges OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Kezdés</strong>: %s - + <strong>Length</strong>: %s - + <strong>Hossz</strong>: %s @@ -3480,12 +3021,12 @@ Suffix not supported &Delete From Service - &Törlés a sorrendb?l + &Törlés a sorrendből Delete the selected item from the service. - Kijelölt elem törlése a sorrendb?l. + Kijelölt elem törlése a sorrendből. @@ -3518,36 +3059,36 @@ Suffix not supported Elem témájának &módosítása - + OpenLP Service Files (*.osz) OpenLP sorrend fájlok (*.osz) - + File is not a valid service. The content encoding is not UTF-8. A fájl nem érvényes sorrend. A tartalom kódolása nem UTF-8. - + File is not a valid service. A fájl nem érvényes sorrend. Missing Display Handler - Hiányzó képerny? kezel? + 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é + 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 + Az elemet nem lehet megjeleníteni, mert a bővítmény, amely kezelné, hiányzik vagy inaktív @@ -3587,27 +3128,27 @@ A tartalom kódolása nem UTF-8. Go Live - Él? adásba + Élő adásba Send the selected item to Live. - A kiválasztott elem él? adásba küldése. + A kiválasztott elem élő adásba küldése. &Start Time - &Kezd? id?pont + &Kezdő időpont Show &Preview - &El?nézet megjelenítése + &Előnézet megjelenítése Show &Live - Él? &adás megjelenítése + Élő &adás megjelenítése @@ -3615,32 +3156,32 @@ A tartalom kódolása nem UTF-8. Fájl megnyitása - + Modified Service Módosított sorrend - + The current service has been modified. Would you like to save this service? Az aktuális sorrend módosult. Szeretnéd elmenteni? - + File could not be opened because it is corrupt. A fájl nem nyitható meg, mivel sérült. - + Empty File Üres fájl - + This service file does not contain any data. A szolgálati sorrend fájl nem tartalmaz semmilyen adatot. - + Corrupt File Sérült fájl @@ -3657,22 +3198,17 @@ A tartalom kódolása nem UTF-8. Playing time: - Lejátszási id?: + Lejátszási idő: Untitled Service Névnélküli szolgálat - - - This file is either corrupt or not an OpenLP 2.0 service file. - A fájl vagy sérült vagy nem egy OpenLP 2.0 szolgálati sorrend fájl. - Load an existing service. - Egy meglév? szolgálati sorrend betöltése. + Egy meglévő szolgálati sorrend betöltése. @@ -3685,24 +3221,24 @@ A tartalom kódolása nem UTF-8. Jelöljön ki egy témát a sorrendhez. - + This file is either corrupt or it is not an OpenLP 2.0 service file. A fájl vagy sérült vagy nem egy OpenLP 2.0 szolgálati sorrend fájl. - - Slide theme - - - - - Notes - - - - + Service File Missing - + Hiányzó sorrend fájl + + + + Slide theme + Dia téma + + + + Notes + Jegyzetek @@ -3723,11 +3259,6 @@ A tartalom kódolása nem UTF-8. OpenLP.ShortcutListDialog - - - Customize Shortcuts - Egyedi gyorsbillenty?k - Action @@ -3736,17 +3267,17 @@ A tartalom kódolása nem UTF-8. Shortcut - Gyorsbillenty? + Gyorsbillentyű Duplicate Shortcut - Azonos gyorsbillenty? + Azonos gyorsbillentyű The shortcut "%s" is already assigned to another action, please use a different shortcut. - A „%s” gyorsbillenty? már foglalt. + A „%s” gyorsbillentyű már foglalt. @@ -3756,7 +3287,7 @@ A tartalom kódolása nem UTF-8. Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. - Válassz egy parancsot és kattints egyenként az egyik alul található gombra az els?dleges vagy alternatív gyorbillenyt? elfogásához. + Válassz egy parancsot és kattints egyenként az egyik alul található gombra az elsődleges vagy alternatív gyorbillenytű elfogásához. @@ -3771,27 +3302,27 @@ A tartalom kódolása nem UTF-8. Capture shortcut. - Gyorbillenty? elfogása. + Gyorbillentyű elfogása. Restore the default shortcut of this action. - Az eredeti gyorsbillenty? visszaállítása. + Az eredeti gyorsbillentyű visszaállítása. Restore Default Shortcuts - Alapértelmezett gyorsbillenty?k visszaállítása + Alapértelmezett gyorsbillentyűk visszaállítása Do you want to restore all shortcuts to their defaults? - Valóban minden gyorsbillenyt? visszaállítandó az alapértelmezettjére? + Valóban minden gyorsbillenytű visszaállítandó az alapértelmezettjére? Configure Shortcuts - + Gyorsbillentyűk beállítása @@ -3809,7 +3340,7 @@ A tartalom kódolása nem UTF-8. Blank Screen - Képerny? elsötétítése + Képernyő elsötétítése @@ -3824,53 +3355,43 @@ A tartalom kódolása nem UTF-8. Previous Slide - El?z? dia + Előző dia Next Slide - Következ? dia + Következő dia Previous Service - El?z? sorrend + Előző sorrend Next Service - Következ? sorrend + Következő sorrend Escape Item - Kilépés az elemb?l + Kilépés az elemből Move to previous. - Mozgatás az el?z?re. + Mozgatás az előzőre. Move to next. - Mozgatás a következ?re. + Mozgatás a következőre. Play Slides Diák vetítése - - - Play Slides in Loop - Diák ismétl?d? vetítése - - - - Play Slides to End - Diak vetítése végig - Delay between slides in seconds. @@ -3879,7 +3400,7 @@ A tartalom kódolása nem UTF-8. Move to live. - Él? adásba küldés. + Élő adásba küldés. @@ -3889,7 +3410,7 @@ A tartalom kódolása nem UTF-8. Edit and reload song preview. - Szerkesztés és az dal el?nézetének újraolvasása. + Szerkesztés és az dal előnézetének újraolvasása. @@ -3935,7 +3456,7 @@ A tartalom kódolása nem UTF-8. Item Start and Finish Time - Elem kezd? és befejez? id? + Elem kezdő és befejező idő @@ -3955,58 +3476,48 @@ A tartalom kódolása nem UTF-8. Time Validation Error - Id? érvényességi hiba - - - - End time is set after the end of the media item - A médiaelem befejez? id?pontja kés?bb van, mint a befejezése - - - - Start time is after the End Time of the media item - A médiaelem kezd? id?pontja kés?bb van, mint a befejezése + Idő érvényességi hiba Finish time is set after the end of the media item - A médiaelem befejez? id?pontja kés?bbre van állítva van, mint a hossza + A médiaelem befejező időpontja későbbre van állítva van, mint a hossza Start time is after the finish time of the media item - A médiaelem kezd? id?pontja kés?bbre van állítva, mint a befejezése + A médiaelem kezdő időpontja későbbre van állítva, mint a befejezése OpenLP.ThemeForm - + Select Image Kép kijelölése - + Theme Name Missing Téma neve nincs megadva - + There is no name for this theme. Please enter one. A témának nincs neve, meg kell adni. - + Theme Name Invalid Érvénytelen téma név - + Invalid theme name. Please enter one. A téma neve érvénytelen, érvényeset kell megadni. - + (approximately %d lines per slide) (körülbelül %d sor diánként) @@ -4091,10 +3602,10 @@ A tartalom kódolása nem UTF-8. Delete Confirmation - Törlés meger?sítése + Törlés megerősítése - + You are unable to delete the default theme. Az alapértelmezett témát nem lehet törölni. @@ -4146,9 +3657,9 @@ A tartalom kódolása nem UTF-8. 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. + A(z) %s témát a(z) %s bővítmény használja. @@ -4168,7 +3679,7 @@ A tartalom kódolása nem UTF-8. Delete %s theme? - Törölhet? ez a téma: %s? + Törölhető ez a téma: %s? @@ -4178,12 +3689,12 @@ A tartalom kódolása nem UTF-8. Rename Confirmation - Átnevezési meger?sítés + Átnevezési megerősítés Rename %s theme? - A téma átnevezhet?: %s? + A téma átnevezhető: %s? @@ -4191,7 +3702,7 @@ A tartalom kódolása nem UTF-8. OpenLP témák (*.theme *.otz) - + Validation Error Érvényességi hiba @@ -4204,261 +3715,266 @@ A tartalom kódolása nem UTF-8. Copy of %s Copy of <theme name> - + %s másolata OpenLP.ThemeWizard - + Theme Wizard Téma tündér - + Welcome to the Theme Wizard Üdvözlet a téma tündérben - + Set Up Background Háttér beállítása - + Set up your theme's background according to the parameters below. A téma háttere az alábbi paraméterekkel állítható be. - + Background type: Háttér típusa: - + Solid Color Homogén szín - + Gradient Színátmenet - + Color: Szín: - + Gradient: Színátmenet: - + Horizontal Vízszintes - + Vertical - Függ?leges + Függőleges - + Circular Körkörös - - - Top Left - Bottom Right - Bal fels? sarokból jobb alsó sarokba - - - - Bottom Left - Top Right - Bal alsó sarokból jobb fels? sarokba - - Main Area Font Details - F? tartalom bet?készlet jellemz?i + Top Left - Bottom Right + Bal felső sarokból jobb alsó sarokba + Bottom Left - Top Right + Bal alsó sarokból jobb felső sarokba + + + + Main Area Font Details + Fő tartalom betűkészlet jellemzői + + + Define the font and display characteristics for the Display text - A f? szöveg bet?készlete és megjelenési tulajdonságai + A fő szöveg betűkészlete és megjelenési tulajdonságai - + Font: - Bet?készlet: + Betűkészlet: - + Size: Méret: - + Line Spacing: Sorköz: - + &Outline: &Körvonal: - + &Shadow: &Árnyék: - + Bold Félkövér - + Italic - D?lt + Dőlt - + Footer Area Font Details - Lábléc bet?készlet jellemz?i - - - - Define the font and display characteristics for the Footer text - A lábléc szöveg bet?készlete és megjelenési tulajdonságai + Lábléc betűkészlet jellemzői - Text Formatting Details - Szövegformázás jellemz?i + Define the font and display characteristics for the Footer text + A lábléc szöveg betűkészlete és megjelenési tulajdonságai - + + Text Formatting Details + Szövegformázás jellemzői + + + Allows additional display formatting information to be defined További megjelenési formázások - + Horizontal Align: Vízszintes igazítás: - + Left Balra zárt - + Right Jobbra zárt - + Center Középre igazított - + Output Area Locations Pozíciók - + Allows you to change and move the main and footer areas. - A f? szöveg és a lábléc helyzetének mozgatása. + A fő szöveg és a lábléc helyzetének mozgatása. - + &Main Area - &F? szöveg + &Fő szöveg - + &Use default location &Alapértelmezett helyen - + X position: X pozíció: - + px - + Y position: Y pozíció: - + Width: Szélesség: - + Height: Magasság: - + Use default location Alapértelmezett helyen - + Save and Preview - Mentés és el?nézet + Mentés és előnézet - + View the theme and save it replacing the current one or change the name to create a new theme - A téma el?nézete és mentése: egy már meglév? téma felülírható vagy egy új név megadásával új téma hozható létre + A téma előnézete és mentése: egy már meglévő téma felülírható vagy egy új név megadásával új téma hozható létre - + Theme name: Téma neve: - + Edit Theme - %s Téma szerkesztése – %s - + 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. - A tündér segít témákat létrehozni és módosítani. Kattints az alábbi Következ? gombra a folyamat els? lépésének indításhoz, a háttér beállításához. + A tündér segít témákat létrehozni és módosítani. Kattints az alábbi Következő gombra a folyamat első lépésének indításhoz, a háttér beállításához. - + Transitions: Átmenetek: - + &Footer Area &Lábléc - + Starting color: - + Ending color: + + + Background color: + Háttérszín: + OpenLP.ThemesTab @@ -4505,7 +4021,7 @@ A tartalom kódolása nem UTF-8. Themes - Témák + Témák @@ -4568,7 +4084,7 @@ A tartalom kódolása nem UTF-8. Empty Field - Üres mez? + Üres mező @@ -4596,25 +4112,15 @@ A tartalom kódolása nem UTF-8. Import Importálás - - - Length %s - Hossz %s - Live - Él? adás + Élő adás Live Background Error - Él? háttér hiba - - - - Live Panel - Él? panel + Élő háttér hiba @@ -4675,46 +4181,21 @@ A tartalom kódolása nem UTF-8. OpenLP 2.0 - - - Open Service - Sorrend megnyitása - Preview - El?nézet - - - - Preview Panel - El?nézet panel - - - - Print Service Order - Szolgálati sorrend nyomtatása + Előnézet Replace Background Háttér cseréje - - - Replace Live Background - Él? adás hátterének cseréje - Reset Background Háttér visszaállítása - - - Reset Live Background - Él? adás hátterének visszaállítása - s @@ -4724,7 +4205,7 @@ A tartalom kódolása nem UTF-8. Save && Preview - Mentés és el?nézet + Mentés és előnézet @@ -4734,12 +4215,12 @@ A tartalom kódolása nem UTF-8. You must select an item to delete. - Ki kell jelölni egy törlend? elemet. + Ki kell jelölni egy törlendő elemet. You must select an item to edit. - Ki kell jelölni egy szerkesztend? elemet. + Ki kell jelölni egy szerkesztendő elemet. @@ -4749,7 +4230,7 @@ A tartalom kódolása nem UTF-8. Service - Sorrend + Sorrendbe @@ -4796,12 +4277,12 @@ A tartalom kódolása nem UTF-8. &Vertical Align: - &Függ?leges igazítás: + &Függőleges igazítás: Finished import. - Az importálás befejez?dött. + Az importálás befejeződött. @@ -4849,7 +4330,7 @@ A tartalom kódolása nem UTF-8. Kész. - + Starting import... Importálás indítása… @@ -4878,13 +4359,13 @@ A tartalom kódolása nem UTF-8. Author Singular - Szerz? + Szerző Authors Plural - Szerz?k + Szerzők @@ -4955,12 +4436,12 @@ A tartalom kódolása nem UTF-8. Layout style: - Elrendezési stílus: + Elrendezés: Live Toolbar - Él? eszköztár + Élő eszköztár @@ -5023,11 +4504,6 @@ A tartalom kódolása nem UTF-8. View Mode Nézetmód - - - Welcome to the Bible Upgrade Wizard - Üdvözlet a bibliafrissít? tündérben - Open service. @@ -5041,12 +4517,12 @@ A tartalom kódolása nem UTF-8. Replace live background. - Él? adás hátterének cseréje. + Élő adás hátterének cseréje. Reset live background. - Él? adás hátterének visszaállítása. + Élő adás hátterének visszaállítása. @@ -5056,40 +4532,37 @@ A tartalom kódolása nem UTF-8. Split a slide into two only if it does not fit on the screen as one slide. - Diák kettéválasztása csak akkor, ha nem fér ki a képerny?n egy diaként. + Diák kettéválasztása csak akkor, ha nem fér ki a képernyőn egy diaként. Confirm Delete - + Törlés megerősítése Play Slides in Loop - Diák ismétl?d? vetítése + Diák ismétlődő vetítése Play Slides to End - Diak vetítése végig + Diak vetítése végig Stop Play Slides in Loop - + Ismétlődő vetítés megállítása Stop Play Slides to End - + Vetítés megállítása - - - OpenLP.displayTagDialog - - Configure Display Tags - Megjelenítési címkék beállítása + + Welcome to the Bible Upgrade Wizard + @@ -5097,7 +4570,7 @@ A tartalom kódolása nem 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>Bemutató b?vítmény</strong><br />A bemutató b?vítmény különböz? küls? programok segítségével bemutatók megjelenítését teszi lehet?vé. A prezentációs programok egy listából választhatók ki. + <strong>Bemutató bővítmény</strong><br />A bemutató bővítmény különböző külső programok segítségével bemutatók megjelenítését teszi lehetővé. A prezentációs programok egy listából választhatók ki. @@ -5117,31 +4590,6 @@ A tartalom kódolása nem UTF-8. container title Bemutatók - - - Load a new Presentation. - Új bemutató betöltése. - - - - Delete the selected Presentation. - A kijelölt bemutató törlése. - - - - Preview the selected Presentation. - A kijelölt bemutató el?nézete. - - - - Send the selected Presentation live. - A kijelölt bemutató él? adásba küldése. - - - - Add the selected Presentation to the service. - A kijelölt bemutató hozzáadása a sorrendhez. - Load a new presentation. @@ -5155,12 +4603,12 @@ A tartalom kódolása nem UTF-8. Preview the selected presentation. - A kijelölt bemutató el?nézete. + A kijelölt bemutató előnézete. Send the selected presentation live. - A kijelölt bemutató él? adásba küldése. + A kijelölt bemutató élő adásba küldése. @@ -5226,7 +4674,7 @@ A tartalom kódolása nem UTF-8. Available Controllers - Elérhet? vezérl?k + Elérhető vezérlők @@ -5244,7 +4692,7 @@ A tartalom kódolása nem 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>Távirányító b?vítmény</strong><br />A távirányító b?vítmény egy böngész? vagy egy távoli API segítségével lehet?vé teszi egy másik számítógépen futó OpenLP számára való üzenetküldést. + <strong>Távirányító bővítmény</strong><br />A távirányító bővítmény egy böngésző vagy egy távoli API segítségével lehetővé teszi egy másik számítógépen futó OpenLP számára való üzenetküldést. @@ -5280,12 +4728,12 @@ A tartalom kódolása nem UTF-8. Service Manager - Sorrendkezel? + Sorrendkezelő Slide Controller - Diakezel? + Diakezelő @@ -5320,12 +4768,12 @@ A tartalom kódolása nem UTF-8. Prev - El?z? + Előző Next - Következ? + Következő @@ -5340,12 +4788,7 @@ A tartalom kódolása nem UTF-8. Go Live - Él? adásba - - - - Add To Service - Hozzáadás a sorrendhez + Élő adásba @@ -5360,7 +4803,7 @@ A tartalom kódolása nem UTF-8. Add to Service - + Hozzáadás a sorrendhez @@ -5394,126 +4837,141 @@ A tartalom kódolása nem UTF-8. SongUsagePlugin - + &Song Usage Tracking &Dalstatisztika rögzítése - + &Delete Tracking Data Rögzített adatok &törlése - + Delete song usage data up to a specified date. Dalstatisztika adatok törlése egy meghatározott dátumig. - + &Extract Tracking Data Rögzített adatok &kicsomagolása - + Generate a report on song usage. Dalstatisztika jelentés összeállítása. - + Toggle Tracking Rögzítés - + Toggle the tracking of song usage. Dalstatisztika rögzítésének átváltása. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - <strong>Dalstatisztika b?vítmény</strong><br />Ez a b?vítmény rögzíti, hogy a dalok mikor lettek vetítve egy él? szolgálat vagy istentisztelet során. + <strong>Dalstatisztika bővítmény</strong><br />Ez a bővítmény rögzíti, hogy a dalok mikor lettek vetítve egy élő szolgálat vagy istentisztelet során. - + SongUsage name singular Dalstatisztika - + SongUsage name plural Dalstatisztika - + SongUsage container title Dalstatisztika - + Song Usage Dalstatisztika - + Song usage tracking is active. + A dalstatisztika rögzítésre kerül. + + + + Song usage tracking is inactive. + A dalstatisztika nincs rögzítés alatt. + + + + display - - Song usage tracking is inactive. + + printed SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Dalstatisztika adatok törlése - + Delete Selected Song Usage Events? - Valóban törölhet?k a kijelölt dalstatisztika események? + Valóban törölhetők a kijelölt dalstatisztika események? - + Are you sure you want to delete selected Song Usage data? - Valóban törölhet?k a kijelölt dalstatisztika adatok? + Valóban törölhetők a kijelölt dalstatisztika adatok? - + Deletion Successful Sikeres törlés - + All requested data has been deleted successfully. Minden kért adat sikeresen törlésre került. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + Ki kell választani egy dátumot, amely előtt a statisztika adatok törlése kerülnek. Minden ezelőtt rögzített adat véglegesen törlődni fog. + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Dalstatisztika kicsomagolása - + Select Date Range - Id?intervallum kijelölése + Időintervallum kijelölése - + to - + Report Location Helyszín jelentése @@ -5530,7 +4988,7 @@ A tartalom kódolása nem UTF-8. You have not set a valid output location for your song usage report. Please select an existing path on your computer. - Egy nem létez? útvonalat adtál meg a dalstatisztika riporthoz. Jelölj ki egy érvényes ?tvonalat a számítógépen. + Egy nem létező útvonalat adtál meg a dalstatisztika riporthoz. Jelölj ki egy érvényes űtvonalat a számítógépen. @@ -5538,12 +4996,12 @@ A tartalom kódolása nem UTF-8. Dalstatisztika_%s%s.txt - + Report Creation Riport készítése - + Report %s has been successfully created. @@ -5553,206 +5011,176 @@ has been successfully created. SongsPlugin - + &Song &Dal - + Import songs using the import wizard. Dalok importálása az importálás tündérrel. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - <strong>Dal b?vítmény</strong><br />A dal b?vítmény dalok megjelenítését és kezelését teszi lehet?vé. + <strong>Dal bővítmény</strong><br />A dal bővítmény dalok megjelenítését és kezelését teszi lehetővé. - + &Re-index Songs Dalok újra&indexelése - + Re-index the songs database to improve searching and ordering. Dal adatbázis újraindexelése a keresés és a rendezés javításához. - + Reindexing songs... Dalok indexelése folyamatban… - + Arabic (CP-1256) Arab (CP-1256) - + Baltic (CP-1257) Balti (CP-1257) - + Central European (CP-1250) Közép-európai (CP-1250) - + Cyrillic (CP-1251) Cirill (CP-1251) - + Greek (CP-1253) Görög (CP-1253) - + Hebrew (CP-1255) Héber (CP-1255) - + Japanese (CP-932) Japán (CP-932) - + Korean (CP-949) Koreai (CP-949) - + Simplified Chinese (CP-936) - Egyszer?sített kínai (CP-936) + Egyszerűsített kínai (CP-936) - + Thai (CP-874) Thai (CP-874) - + Traditional Chinese (CP-950) Hagyományos kínai (CP-950) - + Turkish (CP-1254) Török (CP-1254) - + Vietnam (CP-1258) Vietnami (CP-1258) - + Western European (CP-1252) Nyugat-európai (CP-1252) - + Character Encoding Karakterkódolás - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. - A kódlap beállítás felel?s + A kódlap beállítás felelős a karakterek helyes megjelenítéséért. -Általában az el?re beállított érték megfelel?. +Általában az előre beállított érték megfelelő. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Válasszd ki a karakterkódolást. -A kódlap felel?s a karakterek helyes megjelenítéséért. +A kódlap felelős a karakterek helyes megjelenítéséért. - + Exports songs using the export wizard. Dalok exportálása a dalexportáló tündérrel. - + Song name singular Dal - + Songs name plural Dalok - + Songs container title Dalok - - Add a new Song. - Új dal hozzáadása. - - - - Edit the selected Song. - A kijelölt dal szerkesztése. - - - - Delete the selected Song. - A kijelölt dal törlése. - - - - Preview the selected Song. - A kijelölt dal el?nézete. - - - - Send the selected Song live. - A kijelölt dal él? adásba küldése. - - - - Add the selected Song to the service. - A kijelölt dal hozzáadása a sorrendhez. - - - + Add a new song. Új dal hozzáadása. - + Edit the selected song. A kijelölt dal szerkesztése. - + Delete the selected song. A kijelölt dal törlése. - - - Preview the selected song. - A kijelölt dal el?nézete. - - Send the selected song live. - A kijelölt dal él? adásba küldése. + Preview the selected song. + A kijelölt dal előnézete. + Send the selected song live. + A kijelölt dal élő adásba küldése. + + + Add the selected song to the service. A kijelölt dal hozzáadása a sorrendhez. @@ -5762,7 +5190,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Author Maintenance - Szerz?k kezelése + Szerzők kezelése @@ -5782,17 +5210,17 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. You need to type in the first name of the author. - Meg kell adni a szerz? vezetéknevét. + Meg kell adni a szerző vezetéknevét. You need to type in the last name of the author. - Meg kell adni a szerz? keresztnevét. + Meg kell adni a szerző keresztnevét. You have not set a display name for the author, combine the first and last names? - Nincs megadva a szerz? megjelenített neve, legyen el?állítva a vezeték és keresztnevéb?l? + Nincs megadva a szerző megjelenített neve, legyen előállítva a vezeték és keresztnevéből? @@ -5815,7 +5243,9 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. [above are Song Tags with notes imported from EasyWorship] - + +[a fenti dal címkék a megjegyzésekkel az +EasyWorshipbőlkerültek importálásra] @@ -5823,7 +5253,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Song Editor - Dalszerkeszt? + Dalszerkesztő @@ -5868,7 +5298,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. &Manage Authors, Topics, Song Books - Szerz?k, témakörök, énekeskönyvek &kezelése + Szerzők, témakörök, énekeskönyvek &kezelése @@ -5893,7 +5323,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Authors, Topics && Song Book - Szerz?k, témakörök és énekeskönyvek + Szerzők, témakörök és énekeskönyvek @@ -5903,7 +5333,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Copyright Information - Szerz?i jogi információ + Szerzői jogi információ @@ -5913,27 +5343,27 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Theme, Copyright Info && Comments - Téma, szerz?i jog és megjegyzések + Téma, szerzői jog és megjegyzések Add Author - Szerz? hozzáadása + Szerző hozzáadása This author does not exist, do you want to add them? - Ez a szerz? még nem létezik, valóban hozzá kívánja adni? + Ez a szerző még nem létezik, valóban hozzá kívánja adni? This author is already in the list. - A szerz? már benne van a listában. + A szerző már benne van a listában. 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. - Nincs kijelölve egyetlen szerz? sem. Vagy válassz egy szerz?t a listából, vagy írj az új szerz? mez?be és kattints a Hozzáadás gombra a szerz? megjelöléséhez. + Nincs kijelölve egyetlen szerző sem. Vagy válassz egy szerzőt a listából, vagy írj az új szerző mezőbe és kattints a Hozzáadás gombra a szerző megjelöléséhez. @@ -5953,7 +5383,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. 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. - Nincs kijelölve egyetlen témakör sem. Vagy válassz egy témakört a listából, vagy írj az új témakör mez?be és kattints a Hozzáadás gombraa témakör megjelöléséhez. + Nincs kijelölve egyetlen témakör sem. Vagy válassz egy témakört a listából, vagy írj az új témakör mezőbe és kattints a Hozzáadás gombraa témakör megjelöléséhez. @@ -5993,7 +5423,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. You need to have an author for this song. - Egy szerz?t meg kell adnod ehhez a dalhoz. + Egy szerzőt meg kell adnod ehhez a dalhoz. @@ -6018,16 +5448,6 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. &Insert &Beszúrás - - - &Split - &Szétválasztása - - - - Split a slide into two only if it does not fit on the screen as one slide. - Diák kettéválasztása csak akkor, ha nem fér ki a képerny?n egy diaként. - Split a slide into two by inserting a verse splitter. @@ -6044,7 +5464,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - A tündér segít a dalok szabad OpenLyrics formátumba való exportálásában. + A tündér segít a dalok szabad OpenLyrics formátumba való exportálásában. @@ -6107,7 +5527,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Exportálás indítása… - + Select Destination Folder Célmappa kijelölése @@ -6116,6 +5536,11 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Select the directory where you want the songs to be saved. Jelöld ki a mappát, ahová a dalok mentésre kerülnek. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6132,7 +5557,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. 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. - A tündér segít a különféle formátumú dalok importálásában. Kattints az alábbi Következ? gombra a folyamat els? lépésének indításhoz, a formátum kiválasztásához. + A tündér segít a különféle formátumú dalok importálásában. Kattints az alábbi Következő gombra a folyamat első lépésének indításhoz, a formátum kiválasztásához. @@ -6154,16 +5579,6 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Remove File(s) Fájl(ok) törlése - - - The Songs of Fellowship importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - A Songs of Fellowship importáló le lett tiltva, mivel az OpenLP nem találja az OpenOffice.org-ot a számítógépen. - - - - The generic document/presentation importer has been disabled because OpenLP cannot find OpenOffice.org on your computer. - Az általános dokumentum, ill. bemutató importáló le lett tiltva, mivel az OpenLP nem találja az OpenOffice.org-ot a számítógépen. - Please wait while your songs are imported. @@ -6172,7 +5587,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. 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. - Az OpenLyrics importáló még nem lett kifejlesztve, de amint már láthatod, szándékozunk elkészíteni. Remélhet?leg a következ? kiadásban már benne lesz. + Az OpenLyrics importáló még nem lett kifejlesztve, de amint már láthatod, szándékozunk elkészíteni. Remélhetőleg a következő kiadásban már benne lesz. @@ -6247,11 +5662,6 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Lyrics Dalszöveg - - - Delete Song(s)? - Törölhet?(ek) a dal(ok)? - CCLI License: @@ -6266,19 +5676,19 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Are you sure you want to delete the %n selected song(s)? - Törölhet?k a kijelölt dalok: %n? + Törölhetők a kijelölt dalok: %n? Maintain the lists of authors, topics and books. - Szerz?k, témakörök, könyvek listájának kezelése. + Szerzők, témakörök, könyvek listájának kezelése. copy For song cloning - + másolás @@ -6333,30 +5743,30 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Finished export. - Exportálás befejez?dött. + Exportálás befejeződött. - + Your song export failed. Dalexportálás meghiúsult. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport copyright - szerz?i jog + szerzői jog The following songs could not be imported: - A következ? dalok nem importálhatók: - - - - Unable to open OpenOffice.org or LibreOffice - Nem sikerült megnyitni az OpenOffice.org-ot vagy a LibreOffice-t + A következő dalok nem importálhatók: @@ -6387,12 +5797,12 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Could not add your author. - A szerz?t nem lehet hozzáadni. + A szerzőt nem lehet hozzáadni. This author already exists. - Ez a szerz? már létezik. + Ez a szerző már létezik. @@ -6427,17 +5837,17 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Delete Author - Szerz? törlése + Szerző törlése Are you sure you want to delete the selected author? - A kijelölt szerz? biztosan törölhet?? + A kijelölt szerző biztosan törölhető? This author cannot be deleted, they are currently assigned to at least one song. - Ezt a szerz?t nem lehet törölni, mivel jelenleg legalább egy dalhoz hozzá van rendelve. + Ezt a szerzőt nem lehet törölni, mivel jelenleg legalább egy dalhoz hozzá van rendelve. @@ -6447,7 +5857,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Are you sure you want to delete the selected topic? - A kijelölt témakör biztosan törölhet?? + A kijelölt témakör biztosan törölhető? @@ -6462,7 +5872,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Are you sure you want to delete the selected book? - A kijelölt könyv biztosan törölhet?? + A kijelölt könyv biztosan törölhető? @@ -6472,22 +5882,22 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Could not save your modified author, because the author already exists. - A módosított szerz?t nem lehet elmenteni, mivel már a szerz? létezik. + A módosított szerzőt nem lehet elmenteni, mivel már a szerző létezik. The author %s already exists. Would you like to make songs with author %s use the existing author %s? - Ez a szerz? már létezik: %s. Szeretnéd, hogy a dal – melynek szerz?je %s – a már létez? szerz? (%s) dalai közé kerüljön rögzítésre? + Ez a szerző már létezik: %s. Szeretnéd, hogy a dal – melynek szerzője %s – a már létező szerző (%s) dalai közé kerüljön rögzítésre? The topic %s already exists. Would you like to make songs with topic %s use the existing topic %s? - Ez a témakör már létezik: %s. Szeretnéd, hogy a dal – melynek témaköre: %s – a már létez? témakörben (%s) kerüljön rögzítésre? + Ez a témakör már létezik: %s. Szeretnéd, hogy a dal – melynek témaköre: %s – a már létező témakörben (%s) kerüljön rögzítésre? The book %s already exists. Would you like to make songs with book %s use the existing book %s? - Ez a könyv már létezik: %s. Szeretnéd, hogy a dal – melynek köynve: %s – a már létez? könyvben (%s) kerüljön rögzítésre? + Ez a könyv már létezik: %s. Szeretnéd, hogy a dal – melynek köynve: %s – a már létező könyvben (%s) kerüljön rögzítésre? @@ -6505,7 +5915,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Display verses on live tool bar - Versszakok megjelenítése az él? adás eszköztáron + Versszakok megjelenítése az élő adás eszköztáron @@ -6556,7 +5966,7 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Pre-Chorus - El?-refrén + Elő-refrén @@ -6574,12 +5984,4 @@ A kódlap felel?s a karakterek helyes megjelenítéséért. Egyéb - - ThemeTab - - - Themes - Témák - - diff --git a/resources/i18n/id.ts b/resources/i18n/id.ts index 314bdca72..9b4eac07b 100644 --- a/resources/i18n/id.ts +++ b/resources/i18n/id.ts @@ -827,17 +827,17 @@ dibutuhkan dan membutuhkan koneksi internet. Tidak dapat menggabungkan hasil pencarian ayat. Ingin menghapus hasil pencarian dan mulai pencarian baru? - + Bible not fully loaded. Alkitab belum termuat seluruhnya. - + Information Informasi - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. Alkitab kedua tidak memiliki seluruh ayat yang ada di Alkitab utama. Hanya ayat yang ditemukan di kedua Alkitab yang akan ditampilkan. %d ayat tidak terlihat di hasil. @@ -1320,24 +1320,24 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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 Gambar</strong><br />Plugin gambar memungkinkan penayangan gambar.<br />Salah satu keunggulan fitur ini adalah kemampuan untuk menggabungkan beberapa gambar pada Service Manager, yang menjadikan penayangan beberapa gambar mudah. Plugin ini juga dapat menggunakan "perulangan terwaktu" dari OpenLP untuk membuat slide show yang berjalan otomatis. Juga, gambar dari plugin dapat digunakan untuk menggantikan latar tema. - + Image name singular Gambar - + Images name plural Gambar - + Images container title Gambar @@ -1378,37 +1378,37 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Tambahkan Gambar terpilih ke layanan. - + Load a new image. - + Add a new image. - + Edit the selected image. - + Delete the selected image. - + Preview the selected image. - + Send the selected image live. - + Add the selected image to the service. @@ -1434,38 +1434,56 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Pilih sebuah gambar untuk dihapus. - + You must select an image to replace the background with. Pilih sebuah gambar untuk menggantikan latar. - + Missing Image(s) Gambar Tidak Ditemukan - + The following image(s) no longer exist: %s Gambar berikut tidak ada lagi: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Gambar berikut tidak ada lagi: %s Ingin tetap menambah gambar lain? - + There was a problem replacing your background, the image file "%s" no longer exists. Ada masalah dalam mengganti latar, berkas gambar "%s" tidak ada lagi. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2654,287 +2672,287 @@ Untuk membatalkan Wisaya Kali Pertama, tekan tombol selesai. OpenLP.MainWindow - + &File &File - + &Import &Impor - + &Export &Ekspor - + &View &Lihat - + M&ode M&ode - + &Tools Ala&t - + &Settings &Pengaturan - + &Language &Bahasa - + &Help Bantua&n - + Media Manager Manajer Media - + Service Manager Manajer Layanan - + Theme Manager Manajer Tema - + &New &Baru - + &Open &Buka - + Open an existing service. Buka layanan yang ada. - + &Save &Simpan - + Save the current service to disk. Menyimpan layanan aktif ke dalam diska. - + Save &As... Simp&an Sebagai... - + Save Service As Simpan Layanan Sebagai - + Save the current service under a new name. Menyimpan layanan aktif dengan nama baru. - + E&xit Kelua&r - + Quit OpenLP Keluar dari OpenLP - + &Theme &Tema - + &Configure OpenLP... &Konfigurasi OpenLP... - + &Media Manager Manajer &Media - + Toggle Media Manager Ganti Manajer Media - + Toggle the visibility of the media manager. Mengganti kenampakan manajer media. - + &Theme Manager Manajer &Tema - + Toggle Theme Manager Ganti Manajer Tema - + Toggle the visibility of the theme manager. Mengganti kenampakan manajer tema. - + &Service Manager Manajer &Layanan - + Toggle Service Manager Ganti Manajer Layanan - + Toggle the visibility of the service manager. Mengganti kenampakan manajer layanan. - + &Preview Panel Panel &Pratinjau - + Toggle Preview Panel Ganti Panel Pratinjau - + Toggle the visibility of the preview panel. Ganti kenampakan panel pratinjau - + &Live Panel Pane&l Tayang - + Toggle Live Panel Ganti Panel Tayang - + Toggle the visibility of the live panel. Mengganti kenampakan panel tayang. - + &Plugin List Daftar &Plugin - + List the Plugins Melihat daftar Plugin - + &User Guide T&untunan Pengguna - + &About Tent&ang - + More information about OpenLP Informasi lebih lanjut tentang OpenLP - + &Online Help Bantuan &Daring - + &Web Site Situs &Web - + Use the system language, if available. Gunakan bahasa sistem, jika ada. - + Set the interface language to %s Ubah bahasa antarmuka menjadi %s - + Add &Tool... Tambahkan Ala&t... - + Add an application to the list of tools. Tambahkan aplikasi ke daftar alat. - + &Default &Bawaan - + Set the view mode back to the default. Ubah mode tampilan ke bawaan. - + &Setup &Persiapan - + Set the view mode to Setup. Pasang mode tampilan ke Persiapan. - + &Live &Tayang - + Set the view mode to Live. Pasang mode tampilan ke Tayang. - + 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/. @@ -2943,22 +2961,22 @@ You can download the latest version from http://openlp.org/. Versi terbaru dapat diunduh dari http://openlp.org/. - + OpenLP Version Updated Versi OpenLP Terbarui - + OpenLP Main Display Blanked Tampilan Utama OpenLP Kosong - + The Main Display has been blanked out Tampilan Utama telah dikosongkan - + Default Theme: %s Tema Bawaan: %s @@ -2969,17 +2987,17 @@ Versi terbaru dapat diunduh dari http://openlp.org/. Inggris - + Configure &Shortcuts... Atur &Pintasan - + Close OpenLP Tutup OpenLP - + Are you sure you want to close OpenLP? Yakin ingin menutup OpenLP? @@ -2989,12 +3007,12 @@ Versi terbaru dapat diunduh dari http://openlp.org/. Cetak Daftar Layanan aktif - + Open &Data Folder... Buka Folder &Data - + Open the folder where songs, bibles and other data resides. Buka folder tempat lagu, Alkitab, dan data lain disimpan. @@ -3004,78 +3022,159 @@ Versi terbaru dapat diunduh dari http://openlp.org/. &Konfigurasi Label Tampilan - + &Autodetect &Autodeteksi - + Update Theme Images - + Update the preview images for all themes. - + Print the current service. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Buka Berkas + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3154,7 +3253,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3318,12 +3417,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3419,19 +3518,19 @@ Suffix not supported &Ubah Tema - + OpenLP Service Files (*.osz) Berkas Layanan OpenLP (*.osz) - + File is not a valid service. The content encoding is not UTF-8. Berkas bukan berupa layanan. Isi berkas tidak berupa UTF-8. - + File is not a valid service. Berkas bukan layanan sahih. @@ -3516,32 +3615,32 @@ Isi berkas tidak berupa UTF-8. Tampi&lkan Tayang - + Modified Service - + The current service has been modified. Would you like to save this service? - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File @@ -3581,22 +3680,22 @@ Isi berkas tidak berupa UTF-8. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3852,32 +3951,32 @@ Isi berkas tidak berupa UTF-8. OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - + (approximately %d lines per slide) @@ -3955,12 +4054,12 @@ Isi berkas tidak berupa UTF-8. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. @@ -4056,7 +4155,7 @@ The content encoding is not UTF-8. - + Validation Error @@ -4080,255 +4179,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + Edit Theme - %s - + 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: - + &Footer Area - + Starting color: - + Ending color: + + + Background color: + Warna latar: + OpenLP.ThemesTab @@ -4684,7 +4788,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -5191,126 +5295,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. - + Toggle Tracking - + Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular - + SongUsage name plural - + SongUsage container title - + Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -5325,12 +5444,12 @@ The content encoding is not UTF-8. - + Report Creation - + Report %s has been successfully created. @@ -5350,173 +5469,173 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + 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. - + Song name singular - + Songs name plural Lagu - + Songs container title Lagu - + Exports songs using the export wizard. - + 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. @@ -5795,11 +5914,6 @@ 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. - - Select Songs @@ -5861,7 +5975,7 @@ The encoding is responsible for the correct character representation. - + Select Destination Folder @@ -5870,6 +5984,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6070,13 +6189,13 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - - Finished export. + + Your song export failed. - - Your song export failed. + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. diff --git a/resources/i18n/ja.ts b/resources/i18n/ja.ts index 17b1b8596..fc6a83b56 100644 --- a/resources/i18n/ja.ts +++ b/resources/i18n/ja.ts @@ -825,17 +825,17 @@ demand and thus an internet connection is required. 一つの聖書と複数の聖書の検索結果をくっつける事はできません。検索結果を削除して、再検索しますか? - + Bible not fully loaded. 聖書が完全に読み込まれていません。 - + Information 情報 - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. 第二訳には検索した箇所全てが含まれていません。両方の聖書に含まれている箇所を表示します。第%d節が除外されます。 @@ -1325,24 +1325,24 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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 />礼拝プログラムで複数の画像をグループ化したり、複数の画像を簡単に表示することができます。タイムアウトループの機能を使用してスライドショーを自動的に表示することもできます。さらに、賛美などのテキストベースの項目の背景を、外観テーマで指定されたものからこのプラグインの画像に変更することもできます。 - + Image name singular 画像 - + Images name plural 画像 - + Images container title 画像 @@ -1383,37 +1383,37 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I 選択した画像を礼拝プログラムに追加します。 - + Load a new image. 新しい画像を取込み。 - + Add a new image. 新しい画像を追加します。 - + Edit the selected image. 選択した画像を編集します。 - + Delete the selected image. 選択した画像を削除します。 - + Preview the selected image. 選択した画像をプレビューします。 - + Send the selected image live. 選択した画像をライブへ送ります。 - + Add the selected image to the service. 選択した画像を礼拝プログラムに追加します。 @@ -1439,38 +1439,56 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I 削除する画像を選択してください。 - + You must select an image to replace the background with. 置き換える画像を選択してください。 - + Missing Image(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? 以下の画像は既に存在しません:%s それでも他の画像を追加しますか? - + There was a problem replacing your background, the image file "%s" no longer exists. 背景画像を置換する際に問題が発生しました。画像ファイル"%s"が存在しません。 - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2777,287 +2795,287 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File ファイル(&F) - + &Import インポート(&I) - + &Export エクスポート(&E) - + &View 表示(&V) - + M&ode モード(&O) - + &Tools ツール(&T) - + &Settings 設定(&S) - + &Language 言語(&L) - + &Help ヘルプ(&H) - + Media Manager メディアマネジャー - + Service Manager 礼拝プログラム - + Theme Manager 外観テーママネジャー - + &New 新規作成(&N) - + &Open 開く(&O) - + Open an existing service. 存在する礼拝プログラムを開きます。 - + &Save 保存(&S) - + Save the current service to disk. 現在の礼拝プログラムをディスクに保存します。 - + Save &As... 名前を付けて保存(&A)... - + Save Service As 名前をつけて礼拝プログラムを保存 - + Save the current service under a new name. 現在の礼拝プログラムを新しい名前で保存します。 - + E&xit 終了(&X) - + Quit OpenLP Open LPを終了 - + &Theme 外観テーマ(&T) - + &Configure OpenLP... OpenLPの設定(&C)... - + &Media Manager メディアマネジャー(&M) - + Toggle Media Manager メディアマネジャーを切り替える - + Toggle the visibility of the media manager. メディアマネジャーの可視性を切り替える。 - + &Theme Manager 外観テーママネジャー(&T) - + Toggle Theme Manager 外観テーママネジャーの切り替え - + Toggle the visibility of the theme manager. 外観テーママネジャーの可視性を切り替える。 - + &Service Manager 礼拝プログラム(&S) - + Toggle Service Manager 礼拝プログラムを切り替え - + Toggle the visibility of the service manager. 礼拝プログラムの可視性を切り替える。 - + &Preview Panel プレビューパネル(&P) - + Toggle Preview Panel プレビューパネルの切り替え - + Toggle the visibility of the preview panel. プレビューパネルの可視性を切り替える。 - + &Live Panel ライブパネル(&L) - + Toggle Live Panel ライブパネルの切り替え - + Toggle the visibility of the live panel. ライブパネルの可視性を切り替える。 - + &Plugin List プラグイン一覧(&P) - + List the Plugins プラグイン一覧 - + &User Guide ユーザガイド(&U) - + &About バージョン情報(&A) - + More information about OpenLP OpenLPの詳細情報 - + &Online Help オンラインヘルプ(&O) - + &Web Site ウェブサイト(&W) - + Use the system language, if available. システム言語を可能であれば使用します。 - + Set the interface language to %s インターフェイス言語を%sに設定 - + Add &Tool... ツールの追加(&T)... - + Add an application to the list of tools. ツールの一覧にアプリケーションを追加。 - + &Default デフォルト(&D) - + Set the view mode back to the default. 表示モードを既定に戻す。 - + &Setup 設定(&S) - + Set the view mode to Setup. ビューモードに設定します。 - + &Live ライブ(&L) - + 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/. @@ -3066,22 +3084,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 既定外観テーマ: %s @@ -3092,17 +3110,17 @@ http://openlp.org/から最新版がダウンロード可能です。日本語 - + Configure &Shortcuts... ショートカットの設定(&S)... - + Close OpenLP OpenLPの終了 - + Are you sure you want to close OpenLP? 本当にOpenLPを終了してもよろしいですか? @@ -3117,88 +3135,169 @@ http://openlp.org/から最新版がダウンロード可能です。表示タグを設定(&C) - + Open &Data Folder... データフォルダを開く(&D)... - + Open the folder where songs, bibles and other data resides. 賛美、聖書データなどのデータが含まれているフォルダを開く。 - + &Autodetect 自動検出(&A) - + Update Theme Images テーマの縮小画像を更新 - + Update the preview images for all themes. 全てのテーマの縮小画像を更新します。 - + Print the current service. 現在の礼拝プログラムを印刷します。 - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + 設定 + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + ファイルを開く + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3284,7 +3383,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3448,12 +3547,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3549,14 +3648,14 @@ Suffix not supported 項目の外観テーマを変更(&C) - + File is not a valid service. The content encoding is not UTF-8. 礼拝プログラムファイルが有効でありません。 エンコードがUTF-8でありません。 - + File is not a valid service. 礼拝プログラムファイルが有効でありません。 @@ -3601,7 +3700,7 @@ The content encoding is not UTF-8. ファイルを開く - + OpenLP Service Files (*.osz) OpenLP 礼拝プログラムファイル (*.osz) @@ -3631,7 +3730,7 @@ The content encoding is not UTF-8. 選択された項目をライブ表示する。 - + Modified Service 礼拝プログラムの編集 @@ -3651,27 +3750,27 @@ The content encoding is not UTF-8. ライブ表示(&L) - + The current service has been modified. Would you like to save this service? 現在の礼拝プログラムは、編集されています。保存しますか? - + File could not be opened because it is corrupt. ファイルが破損しているため開けません。 - + Empty File 空のファイル - + This service file does not contain any data. この礼拝プログラムファイルは空です。 - + Corrupt File 破損したファイル @@ -3716,22 +3815,22 @@ The content encoding is not UTF-8. 礼拝プログラムの外観テーマを選択します。 - + This file is either corrupt or it is not an OpenLP 2.0 service file. このファイルは破損しているかOpenLP 2.0の礼拝プログラムファイルではありません。 - + Slide theme - + Notes - + Service File Missing @@ -4012,32 +4111,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image 画像の選択 - + Theme Name Missing 外観テーマ名が不明です - + There is no name for this theme. Please enter one. 外観テーマ名がありません。入力してください。 - + Theme Name Invalid 無効な外観テーマ名 - + Invalid theme name. Please enter one. 無効な外観テーマ名です。入力してください。 - + (approximately %d lines per slide) (スライド1枚におよそ%d行) @@ -4115,12 +4214,12 @@ The content encoding is not UTF-8. 編集する外観テーマを選択してください。 - + You are unable to delete the default theme. 既定の外観テーマを削除する事はできません。 - + Theme %s is used in the %s plugin. %s プラグインでこの外観テーマは利用されています。 @@ -4216,7 +4315,7 @@ The content encoding is not UTF-8. %s 外観テーマを削除します。宜しいですか? - + Validation Error 検証エラー @@ -4240,255 +4339,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard 外観テーマウィザード - + Welcome to the Theme Wizard 外観テーマウィザードをようこそ - + Set Up Background 背景設定 - + Set up your theme's background according to the parameters below. 以下の項目に応じて、外観テーマに使用する背景を設定してください。 - + Background type: 背景の種類: - + Solid Color 単色 - + Gradient グラデーション - + Color: 色: - + Gradient: グラデーション: - + Horizontal - + Vertical - + Circular 放射状 - + Top Left - Bottom Right 左上 - 右下 - + Bottom Left - Top Right 左下 - 右上 - + Main Area Font Details 中央表示エリアのフォント詳細 - + Define the font and display characteristics for the Display text 中央エリアの表示のための文字設定とフォントを定義してください - + Font: フォント: - + Size: 文字サイズ: - + Line Spacing: 文字間: - + &Outline: アウトライン(&O): - + &Shadow: 影(&S): - + Bold 太字 - + Italic 斜体 - + Footer Area Font Details フッターフォント詳細 - + Define the font and display characteristics for the Footer text フッター表示のための文字設定とフォントを定義してください - + Text Formatting Details テキストフォーマット詳細 - + Allows additional display formatting information to be defined 追加の表示フォーマット情報が定義される事を許可する - + Horizontal Align: 水平位置: - + Left 左揃え - + Right 右揃え - + Center 中央揃え - + Output Area Locations 出力エリアの場所 - + Allows you to change and move the main and footer areas. 中央エリアとフッターエリアの場所が変更される事を許可する。 - + &Main Area 中央エリア(&M) - + &Use default location 既定の場所を使う(&U) - + X position: X位置: - + px px - + Y position: Y位置: - + Width: 幅: - + Height: 高: - + Use default location 既定の場所を使う - + Save and Preview 保存とプレビュー - + View the theme and save it replacing the current one or change the name to create a new theme 外観テーマを表示し、現在の外観テーマを置き換えるか名前を変更して新しい外観テーマを作成し、保存する - + 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. このウィザードで、外観テーマを作成し編集します。次へをクリックして、背景を選択してください。 - + Transitions: 切り替え: - + &Footer Area フッター(&F) - + Edit Theme - %s 外観テーマ編集 - %s - + Starting color: - + Ending color: + + + Background color: + 背景色: + OpenLP.ThemesTab @@ -4879,7 +4983,7 @@ The content encoding is not UTF-8. 準備完了。 - + Starting import... インポートを開始しています.... @@ -5424,126 +5528,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking 賛美の利用記録(&S) - + &Delete Tracking Data 利用記録を削除(&D) - + Delete song usage data up to a specified date. 削除する利用記録の対象となるまでの日付を指定してください。 - + &Extract Tracking Data 利用記録の抽出(&E) - + Generate a report on song usage. 利用記録のレポートを出力する。 - + Toggle Tracking 記録の切り替え - + 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 />このプラグインは、賛美の利用頻度を記録します。 - + SongUsage name singular 利用記録 - + SongUsage name plural 利用記録 - + SongUsage container title 利用記録 - + Song Usage 利用記録 - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data 利用記録削除 - + Delete Selected Song Usage Events? 選択された賛美の利用記録を削除しますか? - + Are you sure you want to delete selected Song Usage data? 選択された賛美の利用記録を削除します。よろしいですか? - + Deletion Successful 正常に削除されました - + All requested data has been deleted successfully. 正常に削除されました。 + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction 賛美利用記録の抽出 - + Select Date Range 賛美利用の期間 - + to から - + Report Location レポートの出力 @@ -5558,12 +5677,12 @@ The content encoding is not UTF-8. usage_detail_%s_%s.txt - + Report Creation レポート生成 - + Report %s has been successfully created. @@ -5585,143 +5704,143 @@ has been successfully created. SongsPlugin - + &Song 賛美(&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 />賛美プラグインは、賛美を表示し管理する機能を提供します。 - + &Re-index Songs 賛美のインデックスを再作成(&R) - + Re-index the songs database to improve searching and ordering. 賛美データベースのインデックスを再作成し、検索や並べ替えを速くします。 - + Reindexing songs... 賛美のインデックスを再作成中... - + Song name singular 賛美 - + Songs name plural 賛美 - + Songs container title 賛美 - + Arabic (CP-1256) アラブ語 (CP-1256) - + Baltic (CP-1257) バルト語 (CP-1257) - + Central European (CP-1250) 中央ヨーロッパ (CP-1250) - + Cyrillic (CP-1251) キリル文字 (CP-1251) - + Greek (CP-1253) ギリシャ語 (CP-1253) - + Hebrew (CP-1255) ヘブライ語 (CP-1255) - + Japanese (CP-932) 日本語 (CP-932) - + Korean (CP-949) 韓国語 (CP-949) - + Simplified Chinese (CP-936) 簡体中国語 (CP-936) - + Thai (CP-874) タイ語 (CP-874) - + Traditional Chinese (CP-950) 繁体中国語 (CP-950) - + Turkish (CP-1254) トルコ語 (CP-1254) - + Vietnam (CP-1258) ベトナム語 (CP-1258) - + Western European (CP-1252) 西ヨーロッパ (CP-1252) - + Character Encoding 文字コード - + 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. 文字コードを選択してください。文字が正常に表示されるのに必要な設定です。 - + Exports songs using the export wizard. エキスポートウィザードを使って賛美をエキスポートする。 @@ -5756,32 +5875,32 @@ The encoding is responsible for the correct character representation. 選択した賛美を礼拝プログラムに追加します。 - + 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. 選択した賛美を礼拝プログラムに追加します。 @@ -6073,7 +6192,7 @@ The encoding is responsible for the correct character representation. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - このウィザードで、賛美をオープンで無償なOpenLyrics worship song形式としてエキスポートできます。 + このウィザードで、賛美をオープンで無償なOpenLyrics worship song形式としてエキスポートできます。 @@ -6136,7 +6255,7 @@ The encoding is responsible for the correct character representation. ディレクトリを選択して下さい。 - + Select Destination Folder 出力先フォルダを選択して下さい @@ -6145,6 +6264,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. 賛美を保存したいディレクトリを選択してください。 + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6362,13 +6486,18 @@ The encoding is responsible for the correct character representation. Finished export. - エキスポート完了。 + エキスポート完了。 - + Your song export failed. 賛美のエキスポートに失敗しました。 + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index c378a6692..d47154c3c 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -701,17 +701,17 @@ demand and thus an internet connection is required. - + Bible not fully loaded. - + Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1043,60 +1043,60 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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. - + Image name singular - + Images name plural - + Images container title - + Load a new image. - + Add a new image. - + Edit the selected image. - + Delete the selected image. - + Preview the selected image. - + Send the selected image live. - + Add the selected image to the service. @@ -1122,37 +1122,55 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + You must select an image to replace the background with. - + Missing Image(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? - + There was a problem replacing your background, the image file "%s" no longer exists. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2137,309 +2155,309 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File - + &Import - + &Export - + &View - + M&ode - + &Tools - + &Settings - + &Language - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New 새로 만들기(&N) - + &Open - + Open an existing service. - + &Save 저장(&S) - + Save the current service to disk. - + Save &As... - + Save Service As - + Save the current service under a new name. - + E&xit - + Quit OpenLP - + &Theme - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - + &Theme Manager - + Toggle Theme Manager - + Toggle the visibility of the theme manager. - + &Service Manager - + Toggle Service Manager - + Toggle the visibility of the service manager. - + &Preview Panel - + Toggle Preview Panel - + Toggle the visibility of the preview panel. - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - + &Plugin List - + List the Plugins - + &User Guide - + &About - + More information about OpenLP - + &Online Help - + &Web Site - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live - + 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/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2450,103 +2468,184 @@ You can download the latest version from http://openlp.org/. - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect - + Update Theme Images - + Update the preview images for all themes. - + Print the current service. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -2618,7 +2717,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -2772,12 +2871,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -2873,13 +2972,13 @@ Suffix not supported - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. @@ -2924,7 +3023,7 @@ The content encoding is not UTF-8. - + OpenLP Service Files (*.osz) @@ -2954,7 +3053,7 @@ The content encoding is not UTF-8. - + Modified Service @@ -2974,27 +3073,27 @@ The content encoding is not UTF-8. - + The current service has been modified. Would you like to save this service? - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File @@ -3034,22 +3133,22 @@ The content encoding is not UTF-8. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3305,32 +3404,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - + (approximately %d lines per slide) @@ -3408,7 +3507,7 @@ The content encoding is not UTF-8. - + You are unable to delete the default theme. @@ -3459,7 +3558,7 @@ The content encoding is not UTF-8. - + Theme %s is used in the %s plugin. @@ -3509,7 +3608,7 @@ The content encoding is not UTF-8. - + Validation Error @@ -3533,255 +3632,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + 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. - + Transitions: - + &Footer Area - + Edit Theme - %s - + Starting color: - + Ending color: + + + Background color: + 배경색: + OpenLP.ThemesTab @@ -4137,7 +4241,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -4644,126 +4748,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. - + Toggle Tracking - + Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular - + SongUsage name plural - + SongUsage container title - + Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -4778,12 +4897,12 @@ The content encoding is not UTF-8. - + Report Creation - + Report %s has been successfully created. @@ -4803,173 +4922,173 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - + Song name singular - + Songs name plural - + Songs container title - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + 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. - + Exports songs using the export wizard. - + 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. @@ -5248,11 +5367,6 @@ 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. - - Select Songs @@ -5314,7 +5428,7 @@ The encoding is responsible for the correct character representation. - + Select Destination Folder @@ -5323,6 +5437,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -5523,13 +5642,13 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - - Finished export. + + Your song export failed. - - Your song export failed. + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index a11c96a43..a8e666bd8 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -793,17 +793,17 @@ demand and thus an internet connection is required. Du kan ikke kombinere enkle og doble bibelverssøkeresultat. Vil du fjerne søkeresultatene og starte et nytt søk? - + Bible not fully loaded. Bibelen er ikke ferdiglastet. - + Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1185,60 +1185,60 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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>Bildetillegg</strong><br />Bildetillegget gir mulighet til visning av bilder.<br />Et av særtrekkene med dette tillegget er muligheten til å gruppere flere bilder sammen i møteplanleggeren, noe som gjør visning av flere bilder enklere. Programtillegget kan også benytte seg av OpenLP's "tidsbestemte løkke"-funksjon til å lage en lysbildefremvisning som kjører automatisk. I tillegg kan bilder fra tillegget brukes til å overstyre gjeldende temabakgrunn, noe som gir tekstbaserte saker, som sanger, det valgte bildet som bakgrunn. - + Image name singular Bilde - + Images name plural Bilder - + Images container title Bilder - + Load a new image. - + Add a new image. - + Edit the selected image. - + Delete the selected image. - + Preview the selected image. - + Send the selected image live. - + Add the selected image to the service. @@ -1264,38 +1264,56 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Du må velge et bilde å slette. - + You must select an image to replace the background with. Du må velge et bilde å erstatte bakgrunnen med. - + Missing Image(s) Bilde(r) mangler - + The following image(s) no longer exist: %s De følgende bilde(r) finnes ikke lenger: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? De følgende bilde(r) finnes ikke lenger: %s Vil du likevel legge til de andre bildene? - + There was a problem replacing your background, the image file "%s" no longer exists. Det oppstod et problem ved erstatting av bakgrunnen, bildefilen "%s" finnes ikke lenger. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2340,309 +2358,309 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &Fil - + &Import &Importer - + &Export &Eksporter - + &View &Vis - + M&ode - + &Tools - + &Settings &Innstillinger - + &Language &Språk - + &Help &Hjelp - + Media Manager Innholdselementer - + Service Manager - + Theme Manager - + &New &Ny - + &Open &Åpne - + Open an existing service. - + &Save &Lagre - + Save the current service to disk. - + Save &As... - + Save Service As - + Save the current service under a new name. - + E&xit &Avslutt - + Quit OpenLP Avslutt OpenLP - + &Theme &Tema - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - + &Theme Manager - + Toggle Theme Manager Åpne tema-behandler - + Toggle the visibility of the theme manager. - + &Service Manager - + Toggle Service Manager Vis møteplanlegger - + Toggle the visibility of the service manager. - + &Preview Panel &Forhåndsvisningspanel - + Toggle Preview Panel Vis forhåndsvisningspanel - + Toggle the visibility of the preview panel. - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - + &Plugin List &Tillegsliste - + List the Plugins Hent liste over tillegg - + &User Guide &Brukerveiledning - + &About &Om - + More information about OpenLP - + &Online Help - + &Web Site &Internett side - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... Legg til & Verktøy... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live &Direkte - + 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/. - + OpenLP Version Updated OpenLP versjonen har blitt oppdatert - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2653,103 +2671,184 @@ You can download the latest version from http://openlp.org/. Norsk - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect - + Update Theme Images - + Update the preview images for all themes. - + Print the current service. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -2821,7 +2920,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -2975,12 +3074,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3076,13 +3175,13 @@ Suffix not supported &Bytt objekttema - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. @@ -3127,7 +3226,7 @@ The content encoding is not UTF-8. - + OpenLP Service Files (*.osz) @@ -3157,7 +3256,7 @@ The content encoding is not UTF-8. - + Modified Service @@ -3177,27 +3276,27 @@ The content encoding is not UTF-8. - + The current service has been modified. Would you like to save this service? - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File @@ -3237,22 +3336,22 @@ The content encoding is not UTF-8. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3508,32 +3607,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - + (approximately %d lines per slide) @@ -3611,7 +3710,7 @@ The content encoding is not UTF-8. - + You are unable to delete the default theme. Du kan ikke slette det globale temaet. @@ -3662,7 +3761,7 @@ The content encoding is not UTF-8. Filen er ikke et gyldig tema. - + Theme %s is used in the %s plugin. @@ -3712,7 +3811,7 @@ The content encoding is not UTF-8. - + Validation Error @@ -3736,255 +3835,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color Ensfarget - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical Vertikal - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: Størrelse: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold Fet - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center Sentrert - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: Bredde: - + Height: Høyde: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + 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. - + Transitions: - + &Footer Area - + Edit Theme - %s - + Starting color: - + Ending color: + + + Background color: + Bakgrunnsfarge: + OpenLP.ThemesTab @@ -4345,7 +4449,7 @@ The content encoding is not UTF-8. Klar. - + Starting import... Starter å importere... @@ -4852,126 +4956,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. - + Toggle Tracking - + Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular - + SongUsage name plural - + SongUsage container title - + Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range Velg dato-område - + to til - + Report Location @@ -4986,12 +5105,12 @@ The content encoding is not UTF-8. - + Report Creation - + Report %s has been successfully created. @@ -5011,173 +5130,173 @@ has been successfully created. SongsPlugin - + &Song &Sang - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - + Song name singular Sang - + Songs name plural Sanger - + Songs container title Sanger - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + 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. - + Exports songs using the export wizard. - + 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. @@ -5456,11 +5575,6 @@ 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. - - Select Songs @@ -5522,7 +5636,7 @@ The encoding is responsible for the correct character representation. - + Select Destination Folder @@ -5531,6 +5645,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -5732,13 +5851,13 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - - Finished export. + + Your song export failed. - - Your song export failed. + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. diff --git a/resources/i18n/nl.ts b/resources/i18n/nl.ts index dfea10929..1e135c56f 100644 --- a/resources/i18n/nl.ts +++ b/resources/i18n/nl.ts @@ -827,17 +827,17 @@ indien nodig en een internetverbinding is dus noodzakelijk. Enkele en dubbele bijbelvers zoekresultaten kunnen niet gecombineerd worden. Resultaten wissen en opnieuw beginnen? - + Bible not fully loaded. Bijbel niet geheel geladen. - + Information Informatie - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. De tweede bijbelvertaling bevat niet alle verzen die in de eerste bijbelvertaling staan. Alleen de verzen die in beide vertalingen voorkomen worden getoond. %d verzen zijn niet opgenomen in de resultaten. @@ -1328,24 +1328,24 @@ Let op, de bijbelverzen worden gedownload indien nodig en een internetverbinding ImagePlugin - + <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>Afbeeldingen Plugin</strong><br />De afbeeldingen plugin voorziet in de mogelijkheid afbeeldingen te laten zien.<br />Een van de bijzondere mogelijkheden is dat meerdere afbeeldingen als groep in de liturgie worden opgenomen, zodat weergave van meerdere afbeeldingen eenvoudiger wordt. Deze plugin maakt doorlopende diashows (bijv. om de 3 sec. een nieuwe dia) mogelijk. Ook kun met deze plugin de achtergrondafbeelding van het thema vervangen met een andere afbeelding. Ook de combinatie van tekst en beeld is mogelijk. - + Image name singular Afbeelding - + Images name plural Bilder - + Images container title Afbeeldingen @@ -1386,37 +1386,37 @@ Let op, de bijbelverzen worden gedownload indien nodig en een internetverbinding Geselecteerde afbeeldingen aan liturgie toevoegen. - + Load a new image. Afbeelding laden. - + Add a new image. Afbeelding toevoegen. - + Edit the selected image. Afbeelding bewerken. - + Delete the selected image. Geselecteerde afbeelding wissen. - + Preview the selected image. Geselecteerde afbeelding voorbeeld bekijken. - + Send the selected image live. Geselecteerde afbeelding Live tonen. - + Add the selected image to the service. Geselecteerde afbeelding aan liturgie toevoegen. @@ -1442,38 +1442,56 @@ Let op, de bijbelverzen worden gedownload indien nodig en een internetverbinding Selecteer een afbeelding om te verwijderen. - + You must select an image to replace the background with. Selecteer een afbeelding om de achtergrond te vervangen. - + Missing Image(s) Ontbrekende afbeelding(en) - + The following image(s) no longer exist: %s De volgende afbeelding(en) ontbreken: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? De volgende afbeelding(en) ontbreken: %s De andere afbeeldingen alsnog toevoegen? - + There was a problem replacing your background, the image file "%s" no longer exists. Achtergrond kan niet vervangen worden, omdat de afbeelding "%s" ontbreekt. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2781,307 +2799,307 @@ Om deze assistent over te slaan, klik op klaar. OpenLP.MainWindow - + &File &Bestand - + &Import &Importeren - + &Export &Exporteren - + &View &Weergave - + M&ode M&odus - + &Tools &Hulpmiddelen - + &Settings &Instellingen - + &Language Taa&l - + &Help &Help - + Media Manager Mediabeheer - + Service Manager Liturgie beheer - + Theme Manager Thema beheer - + &New &Nieuw - + &Open &Open - + Open an existing service. Open een bestaande liturgie. - + &Save Op&slaan - + Save the current service to disk. Deze liturgie opslaan. - + Save &As... Opslaan &als... - + Save Service As Liturgie opslaan als - + Save the current service under a new name. Deze liturgie onder een andere naam opslaan. - + E&xit &Afsluiten - + Quit OpenLP OpenLP afsluiten - + &Theme &Thema - + &Configure OpenLP... &Instellingen... - + &Media Manager &Media beheer - + Toggle Media Manager Media beheer wel / niet tonen - + Toggle the visibility of the media manager. Media beheer wel / niet tonen. - + &Theme Manager &Thema beheer - + Toggle Theme Manager Thema beheer wel / niet tonen - + Toggle the visibility of the theme manager. Thema beheer wel / niet tonen. - + &Service Manager &Liturgie beheer - + Toggle Service Manager Liturgie beheer wel / niet tonen - + Toggle the visibility of the service manager. Liturgie beheer wel / niet tonen. - + &Preview Panel &Voorbeeld - + Toggle Preview Panel Voorbeeld wel / niet tonen - + Toggle the visibility of the preview panel. Voorbeeld wel / niet tonen. - + &Live Panel &Live venster - + Toggle Live Panel Live venster wel / niet tonen - + Toggle the visibility of the live panel. Live venster wel / niet tonen. - + &Plugin List &Plugin Lijst - + List the Plugins Lijst met plugins =uitbreidingen van OpenLP - + &User Guide Gebr&uikshandleiding - + &About &Over OpenLP - + More information about OpenLP Meer Informatie over OpenLP - + &Online Help &Online help - + &Web Site &Website - + Use the system language, if available. Gebruik systeem standaardtaal, indien mogelijk. - + Set the interface language to %s %s als taal in OpenLP gebruiken - + Add &Tool... Hulpprogramma &toevoegen... - + Add an application to the list of tools. Voeg een hulpprogramma toe aan de lijst. - + &Default &Standaard - + Set the view mode back to the default. Terug naar de standaard weergave modus. - + &Setup &Setup - + Set the view mode to Setup. Weergave modus naar Setup. - + &Live &Live - + Set the view mode to Live. 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/. @@ -3096,17 +3114,17 @@ U kunt de laatste versie op http://openlp.org/ downloaden. Nederlands - + Configure &Shortcuts... &Sneltoetsen instellen... - + Close OpenLP OpenLP afsluiten - + Are you sure you want to close OpenLP? OpenLP afsluiten? @@ -3116,12 +3134,12 @@ U kunt de laatste versie op http://openlp.org/ downloaden. Druk de huidige liturgie af. - + Open &Data Folder... Open &Data map... - + Open the folder where songs, bibles and other data resides. Open de map waar liederen, bijbels en andere data staat. @@ -3131,78 +3149,159 @@ U kunt de laatste versie op http://openlp.org/ downloaden. &Configureer Weergave Tags - + &Autodetect &Autodetecteer - + Update Theme Images Thema afbeeldingen opwaarderen - + Update the preview images for all themes. Voorbeeld afbeeldingen opwaarderen voor alle thema’s. - + Print the current service. Druk de huidige liturgie af. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Instellingen + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Open bestand + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3288,7 +3387,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3452,12 +3551,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3553,14 +3652,14 @@ Suffix not supported &Wijzig onderdeel thema - + File is not a valid service. The content encoding is not UTF-8. Geen geldig liturgie bestand. Tekst codering is geen UTF-8. - + File is not a valid service. Geen geldig liturgie bestand. @@ -3605,7 +3704,7 @@ Tekst codering is geen UTF-8. Open bestand - + OpenLP Service Files (*.osz) OpenLP liturgie bestanden (*.osz) @@ -3635,7 +3734,7 @@ Tekst codering is geen UTF-8. Verplaatst de selectie naar beneden. - + Modified Service Gewijzigde liturgie @@ -3655,27 +3754,27 @@ Tekst codering is geen UTF-8. Toon &Live - + The current service has been modified. Would you like to save this service? De huidige liturgie is gewijzigd. Veranderingen opslaan? - + File could not be opened because it is corrupt. Bestand kan niet worden geopend omdat het beschadigd is. - + Empty File Leeg bestand - + This service file does not contain any data. Deze liturgie bevat nog geen gegevens. - + Corrupt File Corrupt bestand @@ -3720,22 +3819,22 @@ Tekst codering is geen UTF-8. Selecteer een thema voor de liturgie. - + This file is either corrupt or it is not an OpenLP 2.0 service file. Dit bestand is beschadigd of geen OpenLP 2.0 liturgie bestand. - + Slide theme - + Notes - + Service File Missing @@ -4016,32 +4115,32 @@ Tekst codering is geen UTF-8. OpenLP.ThemeForm - + Select Image Selecteer afbeelding - + Theme Name Missing Thema naam ontbreekt - + There is no name for this theme. Please enter one. Dit thema heeft nog geen naam. Geef een naam voor dit thema. - + Theme Name Invalid Ongeldige naam - + Invalid theme name. Please enter one. Deze naam kan niet worden gebruikt als thema naam. Kies een andere naam. - + (approximately %d lines per slide) (ongeveer %d regels per dia) @@ -4119,7 +4218,7 @@ Tekst codering is geen UTF-8. Selecteer een thema om te bewerken. - + You are unable to delete the default theme. Het standaard thema kan niet worden verwijderd. @@ -4171,7 +4270,7 @@ Tekst codering is geen UTF-8. Geen geldig thema bestand. - + Theme %s is used in the %s plugin. Thema %s wordt gebruikt in de %s plugin. @@ -4221,7 +4320,7 @@ Tekst codering is geen UTF-8. %s thema verwijderen? - + Validation Error Validatie fout @@ -4245,255 +4344,260 @@ Tekst codering is geen UTF-8. OpenLP.ThemeWizard - + Theme Wizard Thema assistent - + Welcome to the Theme Wizard Welkom bij de thema assistent - + Set Up Background Achtergrond instellen - + Set up your theme's background according to the parameters below. Thema achtergrond instellen met onderstaande parameters. - + Background type: Achtergrond type: - + Solid Color Vaste kleur - + Gradient Kleurverloop - + Color: Kleur: - + Gradient: Kleurverloop: - + Horizontal Horizontaal - + Vertical Verticaal - + Circular Radiaal - + Top Left - Bottom Right Links boven - rechts onder - + Bottom Left - Top Right Links onder - Rechts boven - + Main Area Font Details Font instellingen algemeen - + Define the font and display characteristics for the Display text Stel de eigenschappen voor de tekst weergave in - + Font: Font: - + Size: Grootte: - + Line Spacing: Interlinie: - + &Outline: &Omtrek: - + &Shadow: &Schaduw: - + Bold Vet - + Italic Cursief - + Footer Area Font Details Eigenschappen voettekst - + Define the font and display characteristics for the Footer text Stel de eigenschappen voor de voettekst weergave in - + Text Formatting Details Tekst opmaak eigenschappen - + Allows additional display formatting information to be defined Toestaan dat er afwijkende opmaak kan worden bepaald - + Horizontal Align: Horizontaal uitlijnen: - + Left links - + Right rechts - + Center Centreren - + Output Area Locations Uitvoer gebied locaties - + Allows you to change and move the main and footer areas. Toestaan dat tekstvelden gewijzigd en verplaatst worden. - + &Main Area &Hoofdgebied - + &Use default location Gebr&uik standaard locatie - + X position: X positie: - + px px - + Y position: Y positie: - + Width: Breedte: - + Height: Hoogte: - + Use default location Gebruik standaard locatie - + Save and Preview Opslaan en voorbeeld - + View the theme and save it replacing the current one or change the name to create a new theme Thema bekijken en sla het op onder dezelfde naam om te vervangen of onder een andere naam om een nieuw thema te maken - + Theme name: Thema 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. Deze assistent helpt bij het maken en bewerken van thema's. Klik op volgende om als eerste een achtergrond in te stellen. - + Transitions: Overgangen: - + &Footer Area &Voettekst gebied - + Edit Theme - %s Bewerk thema - %s - + Starting color: - + Ending color: + + + Background color: + Achtergrondkleur: + OpenLP.ThemesTab @@ -4884,7 +4988,7 @@ Tekst codering is geen UTF-8. Klaar. - + Starting import... Start importeren... @@ -5429,126 +5533,141 @@ Tekst codering is geen UTF-8. SongUsagePlugin - + &Song Usage Tracking &Lied gebruik bijhouden - + &Delete Tracking Data Verwij&der gegevens liedgebruik - + Delete song usage data up to a specified date. Verwijder alle gegevens over lied gebruik tot een bepaalde datum. - + &Extract Tracking Data &Extraheer gegevens liedgebruik - + Generate a report on song usage. Geneer rapportage liedgebruik. - + Toggle Tracking Gegevens bijhouden aan|uit - + Toggle the tracking of song usage. Gegevens liedgebruik bijhouden aan of uit zetten. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Liedgebruik plugin</strong><br />Met deze plugin kunt u bijhouden welke liederen tijdens de vieringen gezongen worden. - + SongUsage name singular Liedprotokollierung - + SongUsage name plural Liedprotokollierung - + SongUsage container title Liedgebruik - + Song Usage Liedgebruik - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Gegevens liedgebruik verwijderen - + Delete Selected Song Usage Events? Wilt u de gegevens liedgebruik verwijderen? - + Are you sure you want to delete selected Song Usage data? Weet u zeker dat u de gegevens liedgebruik wilt verwijderen? - + Deletion Successful Succesvol verwijderd - + All requested data has been deleted successfully. Alle opgegeven data is verwijderd. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Gegevens liedgebruik extraheren - + Select Date Range Selecteer periode - + to tot - + Report Location Locatie rapport @@ -5563,12 +5682,12 @@ Tekst codering is geen UTF-8. liedgebruik_details_%s_%s.txt - + Report Creation Maak rapportage - + Report %s has been successfully created. @@ -5590,137 +5709,137 @@ is gemaakt. SongsPlugin - + &Song &Lied - + Import songs using the import wizard. Importeer liederen met de lied assistent. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Lied plugin</strong><br />De lied plugin regelt de weergave en het beheer van liederen. - + &Re-index Songs He&r-indexeer liederen - + Re-index the songs database to improve searching and ordering. Her-indexxer de liederen in de database om het zoeken en ordenen te verbeteren. - + Reindexing songs... Liederen her-indexeren... - + Song name singular Lied - + Songs name plural Lieder - + Songs container title Liederen - + Arabic (CP-1256) Arabisch (CP-1256) - + Baltic (CP-1257) Baltisch (CP-1257) - + Central European (CP-1250) Centraal Europees (CP-1250) - + Cyrillic (CP-1251) Cyrillisch (CP-1251) - + Greek (CP-1253) Grieks (CP-1253) - + Hebrew (CP-1255) Hebreeuws (CP-1255) - + Japanese (CP-932) Japans (CP-932) - + Korean (CP-949) Koreaans (CP-949) - + Simplified Chinese (CP-936) Chinees, eenvoudig (CP-936) - + Thai (CP-874) Thais (CP-874) - + Traditional Chinese (CP-950) Traditioneel Chinees (CP-950) - + Turkish (CP-1254) Turks (CP-1254) - + Vietnam (CP-1258) Vietnamees (CP-1258) - + Western European (CP-1252) Westeuropees (CP-1252) - + Character Encoding Tekst codering - + Please choose the character encoding. The encoding is responsible for the correct character representation. Kies een tekstcodering (codepage). De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens. - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5729,7 +5848,7 @@ een correcte weergave van lettertekens. Meestal voldoet de suggestie van OpenLP. - + Exports songs using the export wizard. Exporteer liederen met de export assistent. @@ -5764,32 +5883,32 @@ Meestal voldoet de suggestie van OpenLP. Voeg geselecteerde lied toe aan de liturgie. - + Add a new song. Voeg nieuw lied toe. - + Edit the selected song. Bewerk geselecteerde lied. - + Delete the selected song. Verwijder geselecteerde lied. - + Preview the selected song. Toon voorbeeld geselecteerd lied. - + Send the selected song live. Toon lied Live. - + Add the selected song to the service. Voeg geselecteerde lied toe aan de liturgie. @@ -6081,7 +6200,7 @@ Meestal voldoet de suggestie van OpenLP. 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. + Deze assistent helpt u uw liederen te exporteren naar het openen vrije OpenLyrics worship lied bestand formaat. @@ -6144,7 +6263,7 @@ Meestal voldoet de suggestie van OpenLP. Geef aan waar het bestand moet worden opgeslagen. - + Select Destination Folder Selecteer een doelmap @@ -6153,6 +6272,11 @@ Meestal voldoet de suggestie van OpenLP. Select the directory where you want the songs to be saved. Selecteer een map waarin de liederen moeten worden bewaard. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6371,13 +6495,18 @@ Meestal voldoet de suggestie van OpenLP. Finished export. - Exporteren afgerond. + Exporteren afgerond. - + Your song export failed. Liederen export is mislukt. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index 5351f34b6..10fbad74e 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -827,17 +827,17 @@ com o usu, portanto uma conexão com a internet é necessária. Você não pode combinar um versículo simples e um duplo nos resultados das buscas. Você deseja deletar os resultados da sua busca e comecar uma nova? - + Bible not fully loaded. Bíblia não carregada completamente. - + Information Informações - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. A Bíblia secundária não contém todos os versículos que estão na Bíblia principal. Somente versículos encontrados em ambas as Bíblias serão exibidas. %d versículos não foram inclusos nos resultados. @@ -1328,24 +1328,24 @@ Observe, que versículos das Bíblias Internet serão transferidos sob demanda e ImagePlugin - + <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 permite a exibição de imagens.<br />Uma das funcionalidades importantes deste plugin é a possibilidade de agrupar várias imagens no culto, facilitando a exibição de várias imagens. Este plugin também pode usar a funcionalidade de "repetição temporizada" 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. - + Image name singular Imagem - + Images name plural Imagens - + Images container title Imagens @@ -1386,37 +1386,37 @@ Observe, que versículos das Bíblias Internet serão transferidos sob demanda e Adicionar a Imagem selecionada ao culto. - + Load a new image. Carregar uma nova imagem. - + Add a new image. Adicionar uma nova imagem. - + Edit the selected image. Editar a imagem selecionada. - + Delete the selected image. Excluir a imagem selecionada. - + Preview the selected image. Pré-visualizar a imagem selecionada. - + Send the selected image live. Enviar a imagem selecionada para a projeção. - + Add the selected image to the service. Adicionar a imagem selecionada ao culto. @@ -1442,38 +1442,56 @@ Observe, que versículos das Bíblias Internet serão transferidos sob demanda e Você precisa selecionar uma imagem para excluir. - + You must select an image to replace the background with. Você precisa selecionar uma imagem para definir como plano de fundo. - + Missing Image(s) Imagem(s) não encontrada(s) - + The following image(s) no longer exist: %s A(s) seguinte(s) imagem(s) não existe(m) mais: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? A(s) seguinte(s) imagem(s) não existe(m) mais: %s Mesmo assim, deseja continuar adicionando as outras imagens? - + There was a problem replacing your background, the image file "%s" no longer exists. Ocorreu um erro ao substituir o plano de fundo, o arquivo de imagem "%s" não existe. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2779,287 +2797,287 @@ Para cancelar o assistente completamente, clique no botão finalizar. OpenLP.MainWindow - + &File &Arquivo - + &Import &Importar - + &Export &Exportar - + &View &Exibir - + M&ode M&odo - + &Tools &Ferramentas - + &Settings &Configurações - + &Language &Idioma - + &Help Aj&uda - + Media Manager Gerenciador de Mídia - + Service Manager Gerenciador de Culto - + Theme Manager Gerenciador de Tema - + &New &Novo - + &Open &Abrir - + Open an existing service. Abrir um culto existente. - + &Save &Salvar - + Save the current service to disk. Salvar o culto atual no disco. - + Save &As... Salvar &Como... - + Save Service As Salvar Culto Como - + Save the current service under a new name. Salvar o culto atual com um novo nome. - + E&xit S&air - + Quit OpenLP Fechar o OpenLP - + &Theme &Tema - + &Configure OpenLP... &Configurar o OpenLP... - + &Media Manager &Gerenciador de Mídia - + Toggle Media Manager Alternar Gerenciador de Mídia - + Toggle the visibility of the media manager. Alternar a visibilidade do gerenciador de mídia. - + &Theme Manager &Gerenciador de Tema - + Toggle Theme Manager Alternar para Gerenciamento de Tema - + Toggle the visibility of the theme manager. Alternar a visibilidade do gerenciador de tema. - + &Service Manager Gerenciador de &Culto - + Toggle Service Manager Alternar o Gerenciador de Culto - + Toggle the visibility of the service manager. Alternar visibilidade do gerenciador de culto. - + &Preview Panel &Painel de Pré-Visualização - + Toggle Preview Panel Alternar o Painel de Pré-Visualização - + Toggle the visibility of the preview panel. Alternar a visibilidade do painel de pré-visualização. - + &Live Panel &Painel de Projeção - + Toggle Live Panel Alternar Painel da Projeção - + Toggle the visibility of the live panel. Alternar a visibilidade do painel de projeção. - + &Plugin List &Lista de Plugins - + List the Plugins Listar os Plugins - + &User Guide &Guia do Usuário - + &About &Sobre - + More information about OpenLP Mais informações sobre o OpenLP - + &Online Help &Ajuda Online - + &Web Site &Web Site - + Use the system language, if available. Usar o idioma do sistema, caso disponível. - + Set the interface language to %s Definir o idioma da interface como %s - + Add &Tool... Adicionar &Ferramenta... - + Add an application to the list of tools. Adicionar um aplicativo à lista de ferramentas. - + &Default &Padrão - + Set the view mode back to the default. Reverter o modo de visualização ao padrão. - + &Setup &Configuração - + Set the view mode to Setup. Configurar o modo de visualização para Configuração. - + &Live &Ao Vivo - + Set the view mode to Live. Configurar o modo de visualização como Ao Vivo. - + 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/. @@ -3068,22 +3086,22 @@ You can download the latest version from http://openlp.org/. Voce pode baixar a última versão em http://openlp.org/. - + OpenLP Version Updated Versão do OpenLP Atualizada - + OpenLP Main Display Blanked Tela Principal do OpenLP desativada - + The Main Display has been blanked out A Tela Principal foi desativada - + Default Theme: %s Tema padrão: %s @@ -3094,17 +3112,17 @@ Voce pode baixar a última versão em http://openlp.org/. Português do Brasil - + Configure &Shortcuts... Configurar &Atalhos... - + Close OpenLP Fechar o OpenLP - + Are you sure you want to close OpenLP? Você tem certeza de que deseja fechar o OpenLP? @@ -3119,88 +3137,169 @@ Voce pode baixar a última versão em http://openlp.org/. &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. - + &Autodetect &Auto detectar - + Update Theme Images Atualizar Imagens de Tema - + Update the preview images for all themes. Atualizar as imagens de pré-visualização de todos os temas. - + Print the current service. Imprimir o culto atual. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + Configurações + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Abrir Arquivo + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -3286,7 +3385,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -3450,12 +3549,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3551,14 +3650,14 @@ Suffix not supported &Alterar Tema do Item - + File is not a valid service. The content encoding is not UTF-8. O arquivo não é um culto válida. A codificação do conteúdo não é UTF-8. - + File is not a valid service. Arquivo não é uma ordem de culto válida. @@ -3603,7 +3702,7 @@ A codificação do conteúdo não é UTF-8. Abrir Arquivo - + OpenLP Service Files (*.osz) Arquivos de Culto do OpenLP (*.osz) @@ -3633,7 +3732,7 @@ A codificação do conteúdo não é UTF-8. Enviar o item selecionado para a Projeção. - + Modified Service Culto Modificado @@ -3653,27 +3752,27 @@ A codificação do conteúdo não é UTF-8. Exibir &Projeção - + The current service has been modified. Would you like to save this service? O culto atual foi modificada. Você gostaria de salvar este culto? - + File could not be opened because it is corrupt. Arquivo não pôde ser aberto porque está corrompido. - + Empty File Arquivo vazio - + This service file does not contain any data. Este arquivo de culto não contém dados. - + Corrupt File Arquivo corrompido @@ -3718,22 +3817,22 @@ A codificação do conteúdo não é UTF-8. Selecionar um tema para o culto. - + This file is either corrupt or it is not an OpenLP 2.0 service file. Este arquivo está corrompido ou não é um arquivo de culto do OpenLP 2.0. - + Slide theme - + Notes - + Service File Missing @@ -4014,32 +4113,32 @@ A codificação do conteúdo não é UTF-8. OpenLP.ThemeForm - + Select Image Selecionar Imagem - + Theme Name Missing Faltando Nome do Tema - + There is no name for this theme. Please enter one. Não há nome para este tema. Por favor forneça um. - + Theme Name Invalid Nome do Tema Inválido - + Invalid theme name. Please enter one. O nome do tema é inválido. Por favor forneça um. - + (approximately %d lines per slide) (aproximadamente %d linhas por slide) @@ -4117,7 +4216,7 @@ A codificação do conteúdo não é UTF-8. Você precisa selecionar um tema para editar. - + You are unable to delete the default theme. Você não pode apagar o tema padrão. @@ -4169,7 +4268,7 @@ A codificação do conteúdo não é UTF-8. O arquivo não é um tema válido. - + Theme %s is used in the %s plugin. O tema %s é usado no plugin %s. @@ -4219,7 +4318,7 @@ A codificação do conteúdo não é UTF-8. Apagar o tema %s? - + Validation Error Erro de Validação @@ -4243,255 +4342,260 @@ A codificação do conteúdo não é UTF-8. OpenLP.ThemeWizard - + Theme Wizard Assistente de Tema - + Welcome to the Theme Wizard Bem-vindo ao Assistente de Tema - + Set Up Background Configurar Plano de Fundo - + Set up your theme's background according to the parameters below. Configure o plano de fundo de seu tema de acordo com os parâmetros abaixo. - + Background type: Tipo de plano de fundo: - + Solid Color Cor Sólida - + Gradient Degradê - + Color: Cor: - + Gradient: Degradê: - + Horizontal Horizontal - + Vertical Vertical - + Circular Circular - + Top Left - Bottom Right Esquerda Superior - Direita Inferior - + Bottom Left - Top Right Esquerda Inferior - Direita Superior - + Main Area Font Details Detalhes da Fonte da Área Principal - + Define the font and display characteristics for the Display text Definir a fonte e características de exibição para o texto de Exibição - + Font: Fonte: - + Size: Tamanho: - + Line Spacing: Espaçamento entre linhas: - + &Outline: &Contorno: - + &Shadow: &Sombra: - + Bold Negrito - + Italic Itálico - + Footer Area Font Details Detalhes de Fonte da Área de Rodapé - + Define the font and display characteristics for the Footer text Defina a fone e as características de exibição do texto de Rodapé - + Text Formatting Details Detalhes da Formatação de Texto - + Allows additional display formatting information to be defined Permite que informações adicionais de formatações de exibição sejam definidas - + Horizontal Align: Alinhamento Horizontal: - + Left Esquerda - + Right Direita - + Center Centralizado - + Output Area Locations Posições das Áreas de Saída - + Allows you to change and move the main and footer areas. Permite modificar e mover as áreas principal e de rodapé. - + &Main Area &Área Principal - + &Use default location &Usar posição padrão - + X position: Posição X: - + px px - + Y position: Posição Y: - + Width: Largura: - + Height: Altura: - + Use default location Usar posição padrão - + Save and Preview Salvar e pré-visualizar - + View the theme and save it replacing the current one or change the name to create a new theme Visualizar o tema e salvá-lo, substituindo o atual ou mudar o nome para criar um novo tema - + Theme name: Nome do tema: - + 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. Este assistente vai ajudá-lo a criar e editar seus temas. Clique no botão avançar abaixo para iniciar o processo, configurando seu plano de fundo. - + Transitions: Transições: - + &Footer Area Área do &Rodapé - + Edit Theme - %s Editar Tema - %s - + Starting color: - + Ending color: + + + Background color: + + OpenLP.ThemesTab @@ -4882,7 +4986,7 @@ A codificação do conteúdo não é UTF-8. Pronto. - + Starting import... Iniciando importação... @@ -5427,126 +5531,141 @@ A codificação do conteúdo não é UTF-8. SongUsagePlugin - + &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 Uso das Músicas - + Song Usage Uso das Músicas - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Excluir Dados de Registro das Músicas - + Delete Selected Song Usage Events? Deseja Excluir os Eventos de Uso das Músicas? - + Are you sure you want to delete selected Song Usage data? Você tem certeza de que deseja excluir os dados selecionados de Uso das Músicas? - + Deletion Successful Exclusão Bem Sucedida - + All requested data has been deleted successfully. Todos os dados solicitados foram apagados com sucesso. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Extração de Uso das Músicas - + Select Date Range Selecionar Faixa de Datas - + to até - + Report Location Localização do Relatório @@ -5561,12 +5680,12 @@ A codificação do conteúdo não é UTF-8. detalhe_uso_%s_%s.txt - + Report Creation Criação de Relatório - + Report %s has been successfully created. @@ -5588,130 +5707,130 @@ foi criado com sucesso. SongsPlugin - + &Song &Música - + Import songs using the import wizard. Importar músicas com o assistente de importação. - + <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 permite exibir e gerenciar músicas. - + &Re-index Songs &Re-indexar Músicas - + Re-index the songs database to improve searching and ordering. Re-indexar o banco de dados de músicas para melhorar a busca e a ordenação. - + Reindexing songs... Reindexando músicas... - + Song name singular Música - + Songs name plural Músicas - + Songs container title Músicas - + Arabic (CP-1256) Arábico (CP-1256) - + Baltic (CP-1257) Báltico (CP-1257) - + Central European (CP-1250) Europeu Central (CP-1250) - + Cyrillic (CP-1251) Cirílico (CP-1251) - + Greek (CP-1253) Grego (CP-1253) - + Hebrew (CP-1255) Hebraico (CP-1255) - + Japanese (CP-932) Japonês (CP-932) - + Korean (CP-949) Coreano (CP-949) - + Simplified Chinese (CP-936) Chinês Simplificado (CP-936) - + Thai (CP-874) Tailandês (CP-874) - + Traditional Chinese (CP-950) Chinês Tradicional (CP-950) - + Turkish (CP-1254) Turco (CP-1254) - + Vietnam (CP-1258) Vietnamita (CP-1258) - + Western European (CP-1252) Europeu Ocidental (CP-1252) - + Character Encoding Codificação de Caracteres - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5720,14 +5839,14 @@ pela correta representação dos caracteres. Normalmente pode usar a opção pré-selecionada. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Escolha a codificação dos caracteres. A codificação é responsável pela correta representação dos caracteres. - + Exports songs using the export wizard. Exporta músicas utilizando o assistente de exportação. @@ -5762,32 +5881,32 @@ A codificação é responsável pela correta representação dos caracteres.Adicionar a Música selecionada ao culto. - + Add a new song. Adicionar uma nova música. - + Edit the selected song. Editar a música selecionada. - + Delete the selected song. Excluir a música selecionada. - + Preview the selected song. Pré-visualizar a música selecionada. - + Send the selected song live. Enviar a música selecionada para a projeção. - + Add the selected song to the service. Adicionar a música selecionada ao culto. @@ -6079,7 +6198,7 @@ A codificação é responsável pela correta representação dos caracteres. 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 de músicas de louvor aberto e gratuito OpenLyrics. + Este assistente irá ajudá-lo a exportar as suas músicas para o formato de músicas de louvor aberto e gratuito OpenLyrics. @@ -6142,7 +6261,7 @@ A codificação é responsável pela correta representação dos caracteres.Você precisa especificar um diretório. - + Select Destination Folder Selecione a Pasta de Destino @@ -6151,6 +6270,11 @@ A codificação é responsável pela correta representação dos caracteres.Select the directory where you want the songs to be saved. Selecionar o diretório onde deseja salvar as músicas. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -6369,13 +6493,18 @@ A codificação é responsável pela correta representação dos caracteres. Finished export. - Exportação finalizada. + Exportação finalizada. - + Your song export failed. A sua exportação de músicas falhou. + + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. + + SongsPlugin.SongImport diff --git a/resources/i18n/ru.ts b/resources/i18n/ru.ts index 1f413dd87..383306a5b 100644 --- a/resources/i18n/ru.ts +++ b/resources/i18n/ru.ts @@ -65,7 +65,7 @@ Do you want to continue anyway? <strong>Alerts Plugin</strong><br />The alert plugin controls the displaying of nursery alerts on the display screen. - <strong>Плагин оповещений</strong><br/>Плагин оповещений контролирует отображения срочной информации на экране. + <strong>Плагин оповещений</strong><br />Плагин оповещений контролирует отображения срочной информации на экране. @@ -794,17 +794,17 @@ demand and thus an internet connection is required. Вы не можете комбинировать результат поиска для одной и двух Библий. Желаете удалить результаты поиска и начать новый поиск? - + Bible not fully loaded. Библия загружена не полностью. - + Information Информация - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. Альтернативный перевод Библии не содержит всех стихов, которые требует основной перевод. Будут показаны только те стихи, которые найдены в обеих вариантах перевод. %d стихов не будут включены в результаты. @@ -1164,60 +1164,60 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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 />Одной из отличительных возможностей этого плагина является возможность группировать выбранные изображение в менеджере служения, что делает работу с большим количеством изображений более легкой. Этот плагин также позволяет использовать возможности "временной петли" OpenLP, чтобы создавать слайд-шоу, которые выполняются автоматически. В дополнение к этому, изображения из плагина могут быть использованы, чтобы заменить текущий фон, что позволяет отображать текстовые элементы, такие как песни, с выбранным изображением в качестве фона, вместо фона, который указан в теме. - + Image name singular Изображение - + Images name plural Изображения - + Images container title Изображения - + Load a new image. Загрузить новое изображение. - + Add a new image. Добавить новое изображение - + Edit the selected image. Изменить выбранное изображение. - + Delete the selected image. Удалить выбранное изображение. - + Preview the selected image. Просмотреть выбранное изображение. - + Send the selected image live. Отправить выбранное изображение на проектор. - + Add the selected image to the service. Добавить выбранное изображение к служению. @@ -1243,36 +1243,54 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Вы должны выбрать изображение для удаления. - + Missing Image(s) Отсутствует изображение(я) - + The following image(s) no longer exist: %s Следующие изображения больше не существуют: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Следующих изображений больше не существуют: %s Добавить остальные изображения? - + You must select an image to replace the background with. Вы должны выбрать изображение, которым следует заменить фон. - + There was a problem replacing your background, the image file "%s" no longer exists. Возникла проблема при замене Фона проектора, файл "%s" больше не существует. - + There was no display item to amend. - + Отсутствует объект для изменений. + + + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + @@ -1376,7 +1394,7 @@ Do you want to add the other images anyway? There was no display item to amend. - + Отсутствует объект для изменений. @@ -2047,7 +2065,7 @@ Version: %s Songs - Псалмы + Песни @@ -2195,12 +2213,12 @@ To cancel the First Time Wizard completely, press the finish button now. Download complete. Click the finish button to return to OpenLP. - + Загрузка завершена. Нажмите кнопку Завершить, чтобы вернуться в OpenLP. Click the finish button to return to OpenLP. - + Нажмите кнопку Завершить для возврата в OpenLP. @@ -2208,7 +2226,7 @@ To cancel the First Time Wizard completely, press the finish button now. Configure Formatting Tags - + Настроить теги форматирования @@ -2276,7 +2294,7 @@ To cancel the First Time Wizard completely, press the finish button now. <HTML here> - <HTML сюда> + <HTML здесь> @@ -2524,414 +2542,504 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &Файл - + &Import &Импорт - + &Export &Экспорт - + &View &Вид - + M&ode Р&ежим - + &Tools &Инструменты - + &Settings &Настройки - + &Language &Язык - + &Help &Помощь - + Media Manager Менеджер Мультимедиа - + Service Manager Менеджер служения - + Theme Manager Менеджер Тем - + &New &Новая - + &Open &Открыть - + Open an existing service. Открыть существующее служение. - + &Save &Сохранить - + Save the current service to disk. Сохранить текущее служение на диск. - + Save &As... Сохранить к&ак... - + Save Service As Сохранить служение как - + Save the current service under a new name. Сохранить текущее служение под новым именем. - + E&xit Вы&ход - + Quit OpenLP Завершить работу OpenLP - + &Theme Т&ема - + Configure &Shortcuts... Настройки и б&ыстрые клавиши... - + &Configure OpenLP... &Настроить OpenLP... - + &Media Manager Управление &Материалами - + Toggle Media Manager Свернуть Менеджер Медиа - + Toggle the visibility of the media manager. Свернуть видимость менеджера мультимедиа. - + &Theme Manager Управление &темами - + Toggle Theme Manager Свернуть Менеджер Тем - + Toggle the visibility of the theme manager. Свернуть видимость Менеджера Тем. - + &Service Manager Управление &Служением - + Toggle Service Manager Свернуть Менеджер Служения - + Toggle the visibility of the service manager. Свернуть видимость Менеджера Служения. - + &Preview Panel Пан&ель предпросмотра - + Toggle Preview Panel Toggle Preview Panel - + Toggle the visibility of the preview panel. Toggle the visibility of the preview panel. - + &Live Panel &Панель проектора - + Toggle Live Panel Toggle Live Panel - + Toggle the visibility of the live panel. Toggle the visibility of the live panel. - + &Plugin List &Список плагинов - + List the Plugins Выводит список плагинов - + &User Guide &Руководство пользователя - + &About &О программе - + More information about OpenLP Больше информации про OpenLP - + &Online Help &Помощь онлайн - + &Web Site &Веб-сайт - + Use the system language, if available. Использовать системный язык, если доступно. - + Set the interface language to %s Изменить язык интерфеса на %s - + Add &Tool... Добавить &Инструмент... - + Add an application to the list of tools. Добавить приложение к списку инструментов - + &Default &По умолчанию - + Set the view mode back to the default. Установить вид в режим по умолчанию. - + &Setup &Настройка - + Set the view mode to Setup. - + Установить вид в режим настройки. - + &Live - + &Демонстрация - + 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/. - + Для загрузки доступна версия OpenLP %s (в настоящее время вы используете версию %s). + +Вы можете загрузить последнюю версию с http://openlp.org/. - + OpenLP Version Updated - + Версия OpenLP обновлена - + OpenLP Main Display Blanked - + Главный дисплей OpenLP очищен - + The Main Display has been blanked out - + Главный дисплей был очищен - + Close OpenLP - + Закрыть OpenLP - + Are you sure you want to close OpenLP? - + Вы уверены что хотите закрыть OpenLP? - + Default Theme: %s - + Тема по умолчанию: %s English Please add the name of your language here - Английский + Русский - + Open &Data Folder... - + Открыть &папку данных... - + Open the folder where songs, bibles and other data resides. - - - - - &Autodetect - + Открыть папку размещения песен, Библий и других данных. + &Autodetect + &Автоопределение + + + Update Theme Images - + Обновить изображение Темы - + Update the preview images for all themes. - + Обновить миниатюры тем. - + Print the current service. - + Распечатать текущее служение. - + L&ock Panels - + За&блокировать панели - + Prevent the panels being moved. - + Сохраняет панели от перемещения. - + Re-run First Time Wizard - + Перезапустить мастер первого запуска - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Перезапуск Мастера первого запуска, импорт песен, Библий и тем. - + Re-run First Time Wizard? - + Перезапустить Мастер первого запуска? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + Вы уверены что хотите перезапустить Мастер первого запуска? + +Перезапуск мастера сделает изменения в текущей конфигурации OpenLP и, возможно, добавит песни к существующему списку и произведет изменения темы по умолчанию. - + &Recent Files - + &Недавние файлы &Configure Formatting Tags... - + &Настроить теги форматирования... - + Clear List Clear List of recent files + Очистить список + + + + Clear the list of recent files. + Очистить список недавних файлов. + + + + Configure &Formatting Tags... - - Clear the list of recent files. + + Export OpenLP settings to a specified *.config file + + + + + Settings + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + Открыть файл + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s @@ -2945,67 +3053,73 @@ Re-running this wizard may make changes to your current OpenLP configuration and &Add to selected Service Item - + &Добавить в выбранный объект Служения You must select one or more items to preview. - + Вы должны выбрать объекты для просмотра. You must select one or more items to send live. - + Вы должны выбрать элементы для показа. You must select one or more items. - + Вы должны выбрать один или более элементов. You must select an existing service item to add to. - + Для добавления вы должны выбрать существующий элемент служения. Invalid Service Item - + Неправильный элемент Служения You must select a %s service item. - + Вы должны выбрать объект служения %s. You must select one or more items to add. - + Для добавления вы должны выбрать один или более элементов. No Search Results - + Результаты поиска отсутствуют &Clone - + &Клонировать Invalid File Type - + Неправильный тип файла Invalid File %s. Suffix not supported - + Неправильный файл %s. +Расширение не поддерживается Duplicate files found on import and ignored. + Во время импорта обнаружены и проигнорированы дубликаты. + + + + Duplicate files were found on import and were ignored. @@ -3014,42 +3128,42 @@ Suffix not supported Plugin List - + Список плагинов Plugin Details - + Описание плагина Status: - + Статус: Active - + Активирован Inactive - + Деактивирован %s (Disabled) - + %s (Запрещен) %s (Active) - + %s (Активирован) %s (Inactive) - + %s (Деактивирован) @@ -3057,12 +3171,12 @@ Suffix not supported Fit Page - + Вписать в страницу Fit Width - + По ширине @@ -3070,77 +3184,77 @@ Suffix not supported Options - + Опции Copy - + Копировать Copy as HTML - + Копировать как HTML Zoom In - + Увеличить Zoom Out - + Уменьшить Zoom Original - + 1:1 Other Options - + Другие опции Include slide text if available - + Включить текст слайда, если доступно Include service item notes - + Включить заметки к элементам служения Include play length of media items - + Включить время для мультимедиа объектов Add page break before each text item - + Добавить разрыв страницы перед каждым текстовым элементом Service Sheet - + Лист Служения Print - + Печать Title: - + Название: Custom Footer Text: - + Специальный текст подписи: @@ -3148,25 +3262,25 @@ Suffix not supported Screen - + Экран primary - + основной OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Начать</strong>: %s - + <strong>Length</strong>: %s - + <strong>Длина</strong>: %s @@ -3182,127 +3296,127 @@ Suffix not supported Move to &top - + Передвинуть &вверх Move item to the top of the service. - + Передвинуть объект в начало служения. Move &up - + Передвинуть &вверх Move item up one position in the service. - + Передвинуть объект на одну позицию в служении Move &down - + Передвинуть &вниз Move item down one position in the service. - + Передвинуть объект на одну позицию вниз в служении. Move to &bottom - + Передвинуть &вниз Move item to the end of the service. - + Передвинуть объект в конец служения. Moves the selection down the window. - + Передвинуть выделенное вниз окна. Move up - + Передвинуть вверх Moves the selection up the window. - + Передвинуть выделенное вверх окна. &Delete From Service - + &Удалить из служения Delete the selected item from the service. - + Удалить выбранный объект из служения. &Expand all - + &Расширить все Expand all the service items. - + Расширить все объекты служения. &Collapse all - + &Свернуть все Collapse all the service items. - + Свернуть все объекты служения. Go Live - + Показать Send the selected item to Live. - + Показать выбранный объект. &Add New Item - + &Добавить новый элемент &Add to Selected Item - + &Добавить к выбранному элементу &Edit Item - + &Изменить элемент &Reorder Item - + &Упорядочить элементы &Notes - + &Заметки &Change Item Theme - + &Изменить тему элемента @@ -3310,135 +3424,136 @@ Suffix not supported Открыть файл - + OpenLP Service Files (*.osz) - + Открыть файл служения OpenLP (*.osz) - + Modified Service - + Измененное служение - + 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 - + Элемент служения не может быть показан, поскольку требуемый плагин отсутствует или отключен &Start Time - + &Время начала Show &Preview - + Показать &Просмотр Show &Live - + Показать &на проектор - + The current service has been modified. Would you like to save this service? - + Текущее служение было изменено. Вы хотите сохранить это служение? - + File could not be opened because it is corrupt. - + Файл не может быть открыт, поскольку он поврежден. - + Empty File - + Пустой файл - + This service file does not contain any data. - + Файл служения не содержит данных. - + Corrupt File - + Поврежденный файл Custom Service Notes: - + Заметки к служению: Notes: - + Заметки: Playing time: - + Время игры: Untitled Service - + Служение без названия Load an existing service. - + Загрузить существующее служение. Save this service. - + Сохранить это служение. Select a theme for the service. - + Выбрать тему для служения. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Этот файл поврежден или не является файлом служения OpenLP 2.0. - + Slide theme - + Тема слайда - + Notes - + Заметки - + Service File Missing - + Файл служения отсутствует @@ -3462,67 +3577,67 @@ The content encoding is not UTF-8. Action - + Действие Shortcut - + Быстрые клавиши Duplicate Shortcut - + Дублировать быстрые клавиши The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Сочетание "%s" уже назначено для другого действия. Пожалуйста используйте другое сокращение. Alternate - + Альтернатива Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. - + Выберите действие и щелкните на кнопку ниже, чтобы начать захват основного или альтернативного сочетания клавиш. Default - + По-умолчанию Custom - + Особое Capture shortcut. - + Захватить сочетание. Restore the default shortcut of this action. - + Восстановить сочетание клавиш по умолчанию для этого действия. Restore Default Shortcuts - + Восстановить быстрые клавиши по умолчанию Do you want to restore all shortcuts to their defaults? - + Вы хотите восстановить все быстрые клавиши на значения по умолчанию? Configure Shortcuts - + Настроить быстрые клавиши @@ -3530,47 +3645,47 @@ The content encoding is not UTF-8. Previous Slide - + Предыдущий слайд Next Slide - + Следующий слайд Hide - + Скрыть Blank Screen - + Пустой экран Blank to Theme - + Фон темы Show Desktop - + Показать рабочий стол Go To - + Перейти к Previous Service - + Предыдущее служение Next Service - + Следующее служение @@ -3580,42 +3695,42 @@ The content encoding is not UTF-8. Move to previous. - + Переместить к предыдущему. Move to next. - + Переместить к следующему. Play Slides - + Проиграть слайды. Delay between slides in seconds. - + Задержка между слайдами в секундах. Move to live. - + Переместить к показу. Add to Service. - + Добавить к служению. Edit and reload song preview. - + Изменить и перезагрузить предпросмотр песни. Start playing media. - + Начать проигрывание медиафайла. @@ -3623,12 +3738,12 @@ The content encoding is not UTF-8. Spelling Suggestions - + Правописание Formatting Tags - + Теги форматирования @@ -3641,85 +3756,85 @@ The content encoding is not UTF-8. Hours: - + Часов: Minutes: - + Минут: Seconds: - + Секунд: Item Start and Finish Time - + Время начала и конца для элемента Start - + Начало Finish - + Конец Length - + Длительность Time Validation Error - + Ошибка проверки времени Finish time is set after the end of the media item - + Время окончания больше длительности медиа файла Start time is after the finish time of the media item - + Время начало больше длительности медиа файла OpenLP.ThemeForm - + Select Image - + Выбрать изображение - + Theme Name Missing - + Название темы отсутствует - + There is no name for this theme. Please enter one. - + Не указано название темы. Укажите его. - + Theme Name Invalid - + Название темы неправильное - + Invalid theme name. Please enter one. - + Наверное название темы. Исправьте его. - + (approximately %d lines per slide) - + (приблизительно %d строк на слайд) @@ -3727,188 +3842,189 @@ The content encoding is not UTF-8. Create a new theme. - + Создать новую тему. Edit Theme - + Изменить Тему Edit a theme. - + Изменить тему. Delete Theme - + Удалить Тему. Delete a theme. - + Удаляет тему. Import Theme - + Импортировать Тему. Import a theme. - + Импортирует тему. Export Theme - + Экспортировать Тему Export a theme. - + Экспортирует тему. &Edit Theme - + &Изменить Тему &Copy Theme - + &Скопировать Тему &Rename Theme - + &Переименовать Тему &Delete Theme - + &Удалить Тему Set As &Global Default - + Установить &по-умолчания для всех &Export Theme - + &Экспортировать Тему %s (default) - + %s (по-умолчанию) You must select a theme to rename. - + Вы должны выбрать тему для переименования. Rename Confirmation - + Подтверждения переименования Rename %s theme? - + Переименовать тему %s? You must select a theme to edit. - + Вы должны выбрать тему для редактирования. You must select a theme to delete. - + Вы должны выбрать тему для удаления. Delete Confirmation - + Подтверждение удаления Delete %s theme? - + Удалить тему %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. - + 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. - + Тема %s используется в плагине %s. OpenLP Themes (*.theme *.otz) - + Тема OpenLP (*.theme *.otz) @@ -3920,255 +4036,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Edit Theme - %s - + Theme Wizard - + Welcome to the Theme Wizard - + 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. - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold Жирный - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Transitions: - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + &Footer Area - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + Starting color: - + Ending color: + + + Background color: + Цвет фона: + OpenLP.ThemesTab @@ -4529,7 +4650,7 @@ The content encoding is not UTF-8. Готов. - + Starting import... Начинаю импорт... @@ -4609,7 +4730,7 @@ The content encoding is not UTF-8. Default - + По-умолчанию @@ -4987,7 +5108,7 @@ The content encoding is not UTF-8. Go Live - + Показать @@ -4997,7 +5118,7 @@ The content encoding is not UTF-8. Options - + Опции @@ -5036,126 +5157,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking &Отслеживание использования песен - + &Delete Tracking Data &Удалить данные отслеживания - + Delete song usage data up to a specified date. Удалить данные использования песен до указанной даты. - + &Extract Tracking Data &Извлечь данные использования - + Generate a report on song usage. Отчет по использованию песен. - + Toggle Tracking - + Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. <strong>Плагин Использования песен</strong><br />Этот плагин отслеживает использование песен в служениях. - + SongUsage name singular Использование песен - + SongUsage name plural Использование песен - + SongUsage container title Использование песен - + Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Удалить данные использования песен - + Delete Selected Song Usage Events? Удалить выбранное событие использования песни? - + Are you sure you want to delete selected Song Usage data? Вы уверены, что хотите удалить выбранные данные использования песен? - + Deletion Successful Успешно удалено - + All requested data has been deleted successfully. Все запросы были успешно удалены. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -5170,12 +5306,12 @@ The content encoding is not UTF-8. - + Report Creation - + Report %s has been successfully created. @@ -5195,82 +5331,82 @@ has been successfully created. SongsPlugin - + 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 Кодировка символов - + The codepage setting is responsible for the correct character representation. Usually you are fine with the preselected choice. @@ -5280,92 +5416,92 @@ Usually you are fine with the preselected choice. - + Please choose the character encoding. The encoding is responsible for the correct character representation. Пожалуйста, выберите кодировку символов. Кодировка ответственна за корректное отображение символов. - + &Song &Песня - + Import songs using the import wizard. Импортировать песни используя мастер импорта. - + &Re-index Songs &Переиндексировать песни - + Re-index the songs database to improve searching and ordering. Переиндексировать песни, чтобы улучшить поиск и сортировку. - + Reindexing songs... Индексация песен... - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. <strong>Плагин Песен</strong><br />Плагин песен обеспечивает возможность отображения и управления песнями. - + Song name singular Песня - + Songs name plural ПесниПсалмы - + Songs container title Псалмы - + Exports songs using the export wizard. Экспортировать песни используя мастер экспорта. - + 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. @@ -5647,7 +5783,7 @@ The encoding is responsible for the correct character representation. This wizard will help to export your songs to the open and free OpenLyrics worship song format. - Этот мастер поможет вам экспортировать песни в открытый и свободный формат OpenLyrics. + Этот мастер поможет вам экспортировать песни в открытый и свободный формат OpenLyrics. @@ -5710,7 +5846,7 @@ The encoding is responsible for the correct character representation. Вы должны указать папку. - + Select Destination Folder Выберите целевую папку @@ -5719,6 +5855,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -5810,7 +5951,7 @@ The encoding is responsible for the correct character representation. Copy - + Копировать @@ -5926,13 +6067,13 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - - Finished export. + + Your song export failed. - - Your song export failed. + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index 3940470cb..b337a7acc 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -781,17 +781,17 @@ demand and thus an internet connection is required. Du kan inte kombinera sökresultat från en bibel och två biblar. Vill du ta bort dina sökresultat och starta en ny sökning? - + Bible not fully loaded. Bibeln är inte helt laddad. - + Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1154,24 +1154,24 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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. - + Image name singular Bild - + Images name plural Bilder - + Images container title Bilder @@ -1202,37 +1202,37 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Förhandsgranska den valda bilden. - + Load a new image. - + Add a new image. - + Edit the selected image. - + Delete the selected image. - + Preview the selected image. - + Send the selected image live. - + Add the selected image to the service. @@ -1258,38 +1258,56 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I 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. - + Missing Image(s) Bild(er) saknas - + The following image(s) no longer exist: %s Följande bild(er) finns inte längre: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? Följande bild(er) finns inte längre: %s Vill du lägga till dom andra bilderna ändå? - + There was a problem replacing your background, the image file "%s" no longer exists. Det uppstod ett problem med att ersätta din bakgrund, bildfilen "%s" finns inte längre. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2274,309 +2292,309 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File &Fil - + &Import &Importera - + &Export &Exportera - + &View &Visa - + M&ode &Läge - + &Tools &Verktyg - + &Settings &Inställningar - + &Language &Språk - + &Help &Hjälp - + Media Manager Mediahanterare - + Service Manager Planeringshanterare - + Theme Manager Temahanterare - + &New &Ny - + &Open &Öppna - + Open an existing service. Öppna en befintlig planering. - + &Save &Spara - + Save the current service to disk. Spara den aktuella planeringen till disk. - + Save &As... S&para som... - + Save Service As Spara planering som - + Save the current service under a new name. Spara den aktuella planeringen under ett nytt namn. - + E&xit &Avsluta - + Quit OpenLP Avsluta OpenLP - + &Theme &Tema - + &Configure OpenLP... &Konfigurera OpenLP... - + &Media Manager &Mediahanterare - + Toggle Media Manager Växla mediahanterare - + Toggle the visibility of the media manager. Växla synligheten för mediahanteraren. - + &Theme Manager &Temahanterare - + Toggle Theme Manager Växla temahanteraren - + Toggle the visibility of the theme manager. Växla synligheten för temahanteraren. - + &Service Manager &Planeringshanterare - + Toggle Service Manager Växla planeringshanterare - + Toggle the visibility of the service manager. Växla synligheten för planeringshanteraren. - + &Preview Panel &Förhandsgranskningpanel - + Toggle Preview Panel Växla förhandsgranskningspanel - + Toggle the visibility of the preview panel. Växla synligheten för förhandsgranskningspanelen. - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - + &Plugin List &Pluginlista - + List the Plugins Lista pluginen - + &User Guide &Användarguide - + &About &Om - + More information about OpenLP Mer information om OpenLP - + &Online Help &Hjälp online - + &Web Site &Webbsida - + Use the system language, if available. Använd systemspråket om möjligt. - + Set the interface language to %s Sätt användargränssnittets språk till %s - + Add &Tool... Lägg till &verktyg... - + Add an application to the list of tools. Lägg till en applikation i verktygslistan. - + &Default &Standard - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live &Live - + 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/. - + 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 @@ -2587,103 +2605,184 @@ You can download the latest version from http://openlp.org/. Svenska - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect - + Update Theme Images - + Update the preview images for all themes. - + Print the current service. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -2755,7 +2854,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -2914,12 +3013,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -3015,13 +3114,13 @@ Suffix not supported &Byt objektets tema - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. @@ -3066,7 +3165,7 @@ The content encoding is not UTF-8. - + OpenLP Service Files (*.osz) @@ -3096,7 +3195,7 @@ The content encoding is not UTF-8. - + Modified Service @@ -3116,27 +3215,27 @@ The content encoding is not UTF-8. - + The current service has been modified. Would you like to save this service? - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File @@ -3176,22 +3275,22 @@ The content encoding is not UTF-8. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3447,32 +3546,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image Välj bild - + Theme Name Missing Temanamn saknas - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - + (approximately %d lines per slide) @@ -3550,7 +3649,7 @@ The content encoding is not UTF-8. - + You are unable to delete the default theme. Du kan inte ta bort standardtemat. @@ -3601,7 +3700,7 @@ The content encoding is not UTF-8. Filen är inte ett giltigt tema. - + Theme %s is used in the %s plugin. @@ -3651,7 +3750,7 @@ The content encoding is not UTF-8. - + Validation Error @@ -3675,255 +3774,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color Solid färg - + Gradient Stegvis - + Color: Färg: - + Gradient: Stegvis: - + Horizontal Horisontal - + Vertical Vertikal - + Circular Cirkulär - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: Typsnitt: - + Size: Storlek: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold Fetstil - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left Vänster - + Right Höger - + Center Centrera - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: X-position: - + px px - + Y position: Y-position: - + Width: Bredd: - + Height: Höjd: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + 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. - + Transitions: - + &Footer Area - + Edit Theme - %s - + Starting color: - + Ending color: + + + Background color: + Bakgrundsfärg: + OpenLP.ThemesTab @@ -4284,7 +4388,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -4791,126 +4895,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. - + Toggle Tracking - + Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular - + SongUsage name plural - + SongUsage container title - + Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? Ta bort valda sånganvändningsdata? - + Are you sure you want to delete selected Song Usage data? Vill du verkligen ta bort vald sånganvändningsdata? - + Deletion Successful - + All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Sånganvändningsutdrag - + Select Date Range Välj datumspann - + to till - + Report Location Rapportera placering @@ -4925,12 +5044,12 @@ The content encoding is not UTF-8. - + Report Creation - + Report %s has been successfully created. @@ -4950,173 +5069,173 @@ has been successfully created. SongsPlugin - + &Song &Sång - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - + Song name singular Sång - + Songs name plural Sånger - + Songs container title Sånger - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + 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. - + Exports songs using the export wizard. - + 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. @@ -5395,11 +5514,6 @@ 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. - - Select Songs @@ -5461,7 +5575,7 @@ The encoding is responsible for the correct character representation. - + Select Destination Folder @@ -5470,6 +5584,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -5671,13 +5790,13 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - - Finished export. + + Your song export failed. - - Your song export failed. + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. diff --git a/resources/i18n/zh_CN.ts b/resources/i18n/zh_CN.ts index 690dd8753..a026043bf 100644 --- a/resources/i18n/zh_CN.ts +++ b/resources/i18n/zh_CN.ts @@ -695,17 +695,17 @@ demand and thus an internet connection is required. - + Bible not fully loaded. - + Information - + The second Bible does not contain all the verses that are in the main Bible. Only verses found in both Bibles will be shown. %d verses have not been included in the results. @@ -1032,60 +1032,60 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I ImagePlugin - + <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. - + Image name singular - + Images name plural - + Images container title - + Load a new image. - + Add a new image. - + Edit the selected image. - + Delete the selected image. - + Preview the selected image. - + Send the selected image live. - + Add the selected image to the service. @@ -1111,37 +1111,55 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + You must select an image to replace the background with. - + Missing Image(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? - + There was a problem replacing your background, the image file "%s" no longer exists. - + There was no display item to amend. + + ImagesPlugin.ImageTab + + + Background Color + + + + + Default Color: + + + + + Provides border where image is not the correct dimensions for the screen when resized. + + + MediaPlugin @@ -2126,309 +2144,309 @@ To cancel the First Time Wizard completely, press the finish button now. OpenLP.MainWindow - + &File - + &Import - + &Export - + &View - + M&ode - + &Tools - + &Settings - + &Language - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New - + &Open - + Open an existing service. - + &Save - + Save the current service to disk. - + Save &As... - + Save Service As - + Save the current service under a new name. - + E&xit - + Quit OpenLP - + &Theme - + &Configure OpenLP... - + &Media Manager - + Toggle Media Manager - + Toggle the visibility of the media manager. - + &Theme Manager - + Toggle Theme Manager - + Toggle the visibility of the theme manager. - + &Service Manager - + Toggle Service Manager - + Toggle the visibility of the service manager. - + &Preview Panel - + Toggle Preview Panel - + Toggle the visibility of the preview panel. - + &Live Panel - + Toggle Live Panel - + Toggle the visibility of the live panel. - + &Plugin List - + List the Plugins - + &User Guide - + &About - + More information about OpenLP - + &Online Help - + &Web Site - + Use the system language, if available. - + Set the interface language to %s - + Add &Tool... - + Add an application to the list of tools. - + &Default - + Set the view mode back to the default. - + &Setup - + Set the view mode to Setup. - + &Live - + 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/. - + OpenLP Version Updated - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s @@ -2439,103 +2457,184 @@ You can download the latest version from http://openlp.org/. 中国 - + Configure &Shortcuts... - + Close OpenLP - + Are you sure you want to close OpenLP? - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect - + Update Theme Images - + Update the preview images for all themes. - + Print the current service. - + L&ock Panels - + Prevent the panels being moved. - + Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? - + Are you sure you want to re-run the First Time Wizard? Re-running this wizard may make changes to your current OpenLP configuration and possibly add songs to your existing songs list and change your default theme. - + &Recent Files - - &Configure Formatting Tags... - - - - + Clear List Clear List of recent files - + Clear the list of recent files. + + + Configure &Formatting Tags... + + + + + Export OpenLP settings to a specified *.config file + + + + + Settings + + + + + Import OpenLP settings from a specified *.config file previously exported on this or another machine + + + + + Import settings? + + + + + Are you sure you want to import settings? + +Importing settings will make permanent changes to your current OpenLP configuration. + +Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. + + + + + Open File + + + + + OpenLP Export Settings Files (*.conf) + + + + + Import settings + + + + + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. + + + + + Export Settings File + + + + + OpenLP Export Settings File (*.conf) + + + + + OpenLP.Manager + + + Database Error + + + + + The database being loaded was created in a more recent version of OpenLP. The database is version %d, while OpenLP expects version %d. The database will not be loaded. + +Database: %s + + + + + OpenLP cannot load your database. + +Database: %s + + OpenLP.MediaManagerItem @@ -2607,7 +2706,7 @@ Suffix not supported - Duplicate files found on import and ignored. + Duplicate files were found on import and were ignored. @@ -2761,12 +2860,12 @@ Suffix not supported OpenLP.ServiceItem - + <strong>Start</strong>: %s - + <strong>Length</strong>: %s @@ -2862,18 +2961,18 @@ Suffix not supported - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not UTF-8. - + File is not a valid service. @@ -2958,32 +3057,32 @@ The content encoding is not UTF-8. - + Modified Service - + The current service has been modified. Would you like to save this service? - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File @@ -3023,22 +3122,22 @@ The content encoding is not UTF-8. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Slide theme - + Notes - + Service File Missing @@ -3294,32 +3393,32 @@ The content encoding is not UTF-8. OpenLP.ThemeForm - + Select Image - + Theme Name Missing - + There is no name for this theme. Please enter one. - + Theme Name Invalid - + Invalid theme name. Please enter one. - + (approximately %d lines per slide) @@ -3397,12 +3496,12 @@ The content encoding is not UTF-8. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. @@ -3498,7 +3597,7 @@ The content encoding is not UTF-8. - + Validation Error @@ -3522,255 +3621,260 @@ The content encoding is not UTF-8. OpenLP.ThemeWizard - + Theme Wizard - + Welcome to the Theme Wizard - + Set Up Background - + Set up your theme's background according to the parameters below. - + Background type: - + Solid Color - + Gradient - + Color: - + Gradient: - + Horizontal - + Vertical - + Circular - + Top Left - Bottom Right - + Bottom Left - Top Right - + Main Area Font Details - + Define the font and display characteristics for the Display text - + Font: - + Size: - + Line Spacing: - + &Outline: - + &Shadow: - + Bold - + Italic - + Footer Area Font Details - + Define the font and display characteristics for the Footer text - + Text Formatting Details - + Allows additional display formatting information to be defined - + Horizontal Align: - + Left - + Right - + Center - + Output Area Locations - + Allows you to change and move the main and footer areas. - + &Main Area - + &Use default location - + X position: - + px - + Y position: - + Width: - + Height: - + Use default location - + Save and Preview - + View the theme and save it replacing the current one or change the name to create a new theme - + Theme name: - + Edit Theme - %s - + 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: - + &Footer Area - + Starting color: - + Ending color: + + + Background color: + + OpenLP.ThemesTab @@ -4126,7 +4230,7 @@ The content encoding is not UTF-8. - + Starting import... @@ -4633,126 +4737,141 @@ The content encoding is not UTF-8. SongUsagePlugin - + &Song Usage Tracking - + &Delete Tracking Data - + Delete song usage data up to a specified date. - + &Extract Tracking Data - + Generate a report on song usage. - + Toggle Tracking - + Toggle the tracking of song usage. - + <strong>SongUsage Plugin</strong><br />This plugin tracks the usage of songs in services. - + SongUsage name singular - + SongUsage name plural - + SongUsage container title - + Song Usage - + Song usage tracking is active. - + Song usage tracking is inactive. + + + display + + + + + printed + + SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data - + Delete Selected Song Usage Events? - + Are you sure you want to delete selected Song Usage data? - + Deletion Successful - + All requested data has been deleted successfully. + + + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. + + SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -4767,12 +4886,12 @@ The content encoding is not UTF-8. - + Report Creation - + Report %s has been successfully created. @@ -4792,173 +4911,173 @@ has been successfully created. SongsPlugin - + &Song - + Import songs using the import wizard. - + <strong>Songs Plugin</strong><br />The songs plugin provides the ability to display and manage songs. - + &Re-index Songs - + Re-index the songs database to improve searching and ordering. - + Reindexing songs... - + Arabic (CP-1256) - + Baltic (CP-1257) - + Central European (CP-1250) - + Cyrillic (CP-1251) - + Greek (CP-1253) - + Hebrew (CP-1255) - + Japanese (CP-932) - + Korean (CP-949) - + Simplified Chinese (CP-936) - + Thai (CP-874) - + Traditional Chinese (CP-950) - + Turkish (CP-1254) - + Vietnam (CP-1258) - + Western European (CP-1252) - + Character Encoding - + 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. - + Song name singular - + Songs name plural - + Songs container title - + Exports songs using the export wizard. - + 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. @@ -5237,11 +5356,6 @@ 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. - - Select Songs @@ -5303,7 +5417,7 @@ The encoding is responsible for the correct character representation. - + Select Destination Folder @@ -5312,6 +5426,11 @@ The encoding is responsible for the correct character representation. Select the directory where you want the songs to be saved. + + + This wizard will help to export your songs to the open and free <strong>OpenLyrics</strong> worship song format. + + SongsPlugin.ImportWizardForm @@ -5512,13 +5631,13 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongExportForm - - Finished export. + + Your song export failed. - - Your song export failed. + + Finished export. To import these files use the <strong>OpenLyrics</strong> importer. diff --git a/scripts/check_dependencies.py b/scripts/check_dependencies.py index 7048ceeab..14d27fb81 100755 --- a/scripts/check_dependencies.py +++ b/scripts/check_dependencies.py @@ -46,14 +46,14 @@ VERS = { 'sqlalchemy': '0.5', # pyenchant 1.6 required on Windows 'enchant': '1.6' if is_win else '1.3' - } +} # pywin32 WIN32_MODULES = [ 'win32com', 'win32ui', 'pywintypes', - ] +] MODULES = [ 'PyQt4', @@ -72,13 +72,15 @@ MODULES = [ 'enchant', 'BeautifulSoup', 'mako', - ] + 'migrate', +] OPTIONAL_MODULES = [ ('sqlite', ' (SQLite 2 support)'), ('MySQLdb', ' (MySQL support)'), ('psycopg2', ' (PostgreSQL support)'), + ('pytest', ' (testing framework)'), ] w = sys.stdout.write diff --git a/scripts/translation_utils.py b/scripts/translation_utils.py index db1788aba..935ef97e8 100755 --- a/scripts/translation_utils.py +++ b/scripts/translation_utils.py @@ -186,25 +186,6 @@ def update_export_at_pootle(source_filename): page = urllib.urlopen(REVIEW_URL) page.close() - -def download_file(source_filename, dest_filename): - """ - Download a file and save it to disk. - - ``source_filename`` - The file to download. - - ``dest_filename`` - The new local file name. - """ - print_verbose(u'Downloading from: %s' % (SERVER_URL + source_filename)) - page = urllib.urlopen(SERVER_URL + source_filename) - content = page.read().decode('utf8') - page.close() - file = open(dest_filename, u'w') - file.write(content.encode('utf8')) - file.close() - def download_translations(): """ This method downloads the translation files from the Pootle server. @@ -219,7 +200,7 @@ def download_translations(): filename = os.path.join(os.path.abspath(u'..'), u'resources', u'i18n', language_file) print_verbose(u'Get Translation File: %s' % filename) - download_file(language_file, filename) + urllib.urlretrieve(SERVER_URL + language_file, filename) print_quiet(u' Done.') def prepare_project(): @@ -304,7 +285,7 @@ def create_translation(language): if not language.endswith(u'.ts'): language += u'.ts' filename = os.path.join(os.path.abspath(u'..'), u'resources', u'i18n', language) - download_file(u'en.ts', filename) + urllib.urlretrieve(SERVER_URL + u'en.ts', filename) print_quiet(u' ** Please Note **') print_quiet(u' In order to get this file into OpenLP and onto the ' u'Pootle translation server you will need to subscribe to the ' diff --git a/testing/conftest.py b/testing/conftest.py new file mode 100644 index 000000000..f38018c17 --- /dev/null +++ b/testing/conftest.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### + +""" +Configuration file for pytest framework. +""" + +from openlp.core import main as openlp_main + + +# Test function argument to make openlp gui instance persistent for all tests. +# All test cases have to access the same instance. To allow create multiple +# instances it would be necessary use diffrent configuraion and data files. +# Created instance will use your OpenLP settings. +def pytest_funcarg__openlpapp(request): + def setup(): + return openlp_main(['--testing']) + def teardown(app): + pass + return request.cached_setup(setup=setup, teardown=teardown, scope='session') diff --git a/testing/run.py b/testing/run.py new file mode 100755 index 000000000..1f0f54858 --- /dev/null +++ b/testing/run.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Miller, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 # +############################################################################### + +""" +This script is used to run set of automated tests of OpenLP. To start tests, +simply run this script:: + + @:~$ ./run.py + +""" + +import os.path +import sys + +TESTS_PATH = os.path.dirname(os.path.abspath(__file__)) +SRC_PATH = os.path.join(TESTS_PATH, '..') + +PYTEST_OPTIONS = [TESTS_PATH] + +# Extend python PATH with openlp source +sys.path.insert(0, SRC_PATH) + +# Python testing framework +# http://pytest.org +import pytest + + +def main(): + print 'pytest options:', PYTEST_OPTIONS + pytest.main(PYTEST_OPTIONS) + + +if __name__ == u'__main__': + main() diff --git a/testing/test_app.py b/testing/test_app.py new file mode 100644 index 000000000..00cd744ba --- /dev/null +++ b/testing/test_app.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# -*- 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, Gerald Britton, Jonathan # +# Corwin, Michael Gorven, Scott Guerrieri, Matthias Hub, Meinert Jordan, # +# Armin Köhler, Joshua Millar, Stevan Pettit, Andreas Preikschat, Mattias # +# Põldaru, Christian Richter, Philip Ridout, Simon Scudder, Jeffrey Smith, # +# Maikel Stuivenberg, Martin Thompson, Jon Tibble, 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 openlp.core import OpenLP +from openlp.core.ui.mainwindow import MainWindow + + +def test_start_app(openlpapp): + assert type(openlpapp) == OpenLP + assert type(openlpapp.mainWindow) == MainWindow + assert unicode(openlpapp.mainWindow.windowTitle()) == u'OpenLP 2.0'