From b68300bdc66f39d9f217270c020d8ce8e7b04719 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 24 Mar 2012 16:41:29 +0000 Subject: [PATCH 01/66] New importer for DreamBeam song files. One small fix to SongShowPlus importer --- openlp/core/ui/wizard.py | 1 + openlp/plugins/songs/forms/songimportform.py | 45 +++++- openlp/plugins/songs/lib/dreambeamimport.py | 146 ++++++++++++++++++ openlp/plugins/songs/lib/importer.py | 23 +-- .../plugins/songs/lib/songshowplusimport.py | 4 +- 5 files changed, 207 insertions(+), 12 deletions(-) create mode 100644 openlp/plugins/songs/lib/dreambeamimport.py diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index 91aa42e43..004494b9a 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -46,6 +46,7 @@ class WizardStrings(object): # the writers translating their own product name. CCLI = u'CCLI/SongSelect' CSV = u'CSV' + DB = u'DreamBeam' EW = u'EasyWorship' ES = u'EasySlides' FP = u'Foilpresenter' diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index db4d9bf56..3323f5cbb 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -129,6 +129,12 @@ class SongImportForm(OpenLPWizard): QtCore.QObject.connect(self.ccliRemoveButton, QtCore.SIGNAL(u'clicked()'), self.onCCLIRemoveButtonClicked) + QtCore.QObject.connect(self.dreamBeamAddButton, + QtCore.SIGNAL(u'clicked()'), + self.onDreamBeamAddButtonClicked) + QtCore.QObject.connect(self.dreamBeamRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.onDreamBeamRemoveButtonClicked) QtCore.QObject.connect(self.songsOfFellowshipAddButton, QtCore.SIGNAL(u'clicked()'), self.onSongsOfFellowshipAddButtonClicked) @@ -201,6 +207,8 @@ class SongImportForm(OpenLPWizard): self.addFileSelectItem(u'generic', None, True) # CCLI File import self.addFileSelectItem(u'ccli') + # DreamBeam + self.addFileSelectItem(u'dreamBeam') # EasySlides self.addFileSelectItem(u'easySlides', single_select=True) # EasyWorship @@ -247,6 +255,8 @@ class SongImportForm(OpenLPWizard): translate('SongsPlugin.ImportWizardForm', 'Generic Document/Presentation')) self.formatComboBox.setItemText(SongFormat.CCLI, WizardStrings.CCLI) + self.formatComboBox.setItemText( + SongFormat.DreamBeam, WizardStrings.DB) self.formatComboBox.setItemText( SongFormat.EasySlides, WizardStrings.ES) self.formatComboBox.setItemText( @@ -291,6 +301,10 @@ class SongImportForm(OpenLPWizard): translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.ccliRemoveButton.setText( translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) + self.dreamBeamAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.dreamBeamRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) self.songsOfFellowshipAddButton.setText( translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.songsOfFellowshipRemoveButton.setText( @@ -397,6 +411,12 @@ class SongImportForm(OpenLPWizard): WizardStrings.YouSpecifyFile % WizardStrings.CCLI) self.ccliAddButton.setFocus() return False + elif source_format == SongFormat.DreamBeam: + if self.dreamBeamFileListWidget.count() == 0: + critical_error_message_box(UiStrings().NFSp, + WizardStrings.YouSpecifyFile % WizardStrings.DB) + self.dreamBeamAddButton.setFocus() + return False elif source_format == SongFormat.SongsOfFellowship: if self.songsOfFellowshipFileListWidget.count() == 0: critical_error_message_box(UiStrings().NFSp, @@ -433,7 +453,7 @@ class SongImportForm(OpenLPWizard): if self.songShowPlusFileListWidget.count() == 0: critical_error_message_box(UiStrings().NFSp, WizardStrings.YouSpecifyFile % WizardStrings.SSP) - self.wordsOfWorshipAddButton.setFocus() + self.songShowPlusAddButton.setFocus() return False elif source_format == SongFormat.FoilPresenter: if self.foilPresenterFileListWidget.count() == 0: @@ -562,6 +582,22 @@ class SongImportForm(OpenLPWizard): """ self.removeSelectedItems(self.ccliFileListWidget) + def onDreamBeamAddButtonClicked(self): + """ + Get DreamBeam song database files + """ + self.getFiles(WizardStrings.OpenTypeFile % WizardStrings.DB, + self.dreamBeamFileListWidget, u'%s (*.xml)' + % translate('SongsPlugin.ImportWizardForm', + 'DreamBeam Song Files') + ) + + def onDreamBeamRemoveButtonClicked(self): + """ + Remove selected DreamBeam files from the import list + """ + self.removeSelectedItems(self.dreamBeamFileListWidget) + def onSongsOfFellowshipAddButtonClicked(self): """ Get Songs of Fellowship song database files @@ -671,6 +707,7 @@ class SongImportForm(OpenLPWizard): self.openSongFileListWidget.clear() self.wordsOfWorshipFileListWidget.clear() self.ccliFileListWidget.clear() + self.dreamBeamFileListWidget.clear() self.songsOfFellowshipFileListWidget.clear() self.genericFileListWidget.clear() self.easySlidesFilenameEdit.setText(u'') @@ -732,6 +769,12 @@ class SongImportForm(OpenLPWizard): importer = self.plugin.importSongs(SongFormat.CCLI, filenames=self.getListOfFiles(self.ccliFileListWidget) ) + elif source_format == SongFormat.DreamBeam: + # Import DreamBeam songs + importer = self.plugin.importSongs(SongFormat.DreamBeam, + filenames=self.getListOfFiles( + self.dreamBeamFileListWidget) + ) elif source_format == SongFormat.SongsOfFellowship: # Import a Songs of Fellowship RTF file importer = self.plugin.importSongs(SongFormat.SongsOfFellowship, diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py new file mode 100644 index 000000000..1b7d5c4bd --- /dev/null +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2012 Raoul Snyman # +# Portions copyright (c) 2008-2012 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:`dreambeamimport` module provides the functionality for importing +DreamBeam songs into the OpenLP database. +""" +import os, sys +import logging + +from lxml import etree, objectify + +from openlp.core.lib import translate +from openlp.plugins.songs.lib.songimport import SongImport +from openlp.plugins.songs.lib.ui import SongStrings + + + + +log = logging.getLogger(__name__) + +class DreamBeamImport(SongImport): + """ + The :class:`DreamBeamImport` class provides the ability to import song files from + DreamBeam. + + An example of DreamBeam xml mark-up: + + + + false + 0.80 + Amazing Grace + John Newton + + + + F + G + false + false + + Amazing Grace, how sweet the sound, + That saved a wretch like me. + I once was lost but now am found, + Was blind, but now, I see. + T’was Grace that taught my heart to fear. + And Grace, my fears relieved. + How precious did that Grace appear… + the hour I first believed. + + + + + + false + + + Valid extensions for a DreamBeam song file are: + + * .xml + """ + + def __init__(self, manager, **kwargs): + """ + Initialise the Words of Worship importer. + """ + SongImport.__init__(self, manager, **kwargs) + + def doImport(self): + """ + Receive a single file or a list of files to import. + """ + if isinstance(self.importSource, list): + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for file in self.importSource: + if self.stopImportFlag: + return + self.setDefaults() + parser = etree.XMLParser(remove_blank_text=True) + try: + parsed_file = etree.parse(open(file, u'r'), parser) + except etree.XMLSyntaxError: + log.exception(u'XML syntax error in file %s' % file) + self.logError(file, SongStrings.XMLSyntaxError) + continue + xml = unicode(etree.tostring(parsed_file)) + song_xml = objectify.fromstring(xml) + print song_xml.tag + if song_xml.tag != u'DreamSong': + self.logError(file, unicode( + translate('SongsPlugin.DreamBeamImport', + ('Invalid DreamBeam song file. Missing ' + 'DreamSong tag.')))) + continue + if hasattr(song_xml, u'Title'): + self.title = unicode(song_xml.Title.text) + if hasattr(song_xml, u'Author'): + # Dreambeam does not have a copyright field, instead it + # some times uses the author feild + self.addCopyright(unicode(song_xml.Author.text)) + self.parseAuthor(unicode(song_xml.Author.text)) + if hasattr(song_xml, u'SongLyrics'): + for lyrics_item in song_xml.SongLyrics.iterchildren(): + verse_type = lyrics_item.get(u'Type') + verse_number = lyrics_item.get(u'Number') + verse_text = unicode(lyrics_item.text) + self.addVerse(verse_text, + (u'%s%s' % (verse_type[:1], verse_number))) + if hasattr(song_xml, u'Collection'): + self.songBookName = unicode(song_xml.Collection.text) + if hasattr(song_xml, u'Number'): + self.songNumber = unicode(song_xml.Number.text) + if hasattr(song_xml, u'Sequence'): + for LyricsSequenceItem in song_xml.Sequence.iterchildren(): + self.verseOrderList.append( + "%s%s" % (LyricsSequenceItem.get(u'Type')[:1], + LyricsSequenceItem.get(u'Number'))) + if hasattr(song_xml, u'Notes'): + self.comments = unicode(song_xml.Notes.text) + if not self.finish(): + self.logError(file) diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 867b28c91..ea13c5065 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -35,6 +35,7 @@ from olpimport import OpenLPSongImport from openlyricsimport import OpenLyricsImport from wowimport import WowImport from cclifileimport import CCLIFileImport +from dreambeamimport import DreamBeamImport from ewimport import EasyWorshipSongImport from songbeamerimport import SongBeamerImport from songshowplusimport import SongShowPlusImport @@ -73,15 +74,16 @@ class SongFormat(object): OpenLP1 = 2 Generic = 3 CCLI = 4 - EasySlides = 5 - EasyWorship = 6 - FoilPresenter = 7 - OpenSong = 8 - SongBeamer = 9 - SongShowPlus = 10 - SongsOfFellowship = 11 - WordsOfWorship = 12 - #CSV = 13 + DreamBeam = 5 + EasySlides = 6 + EasyWorship = 7 + FoilPresenter = 8 + OpenSong = 9 + SongBeamer = 10 + SongShowPlus = 11 + SongsOfFellowship = 12 + WordsOfWorship = 13 + #CSV = 14 @staticmethod def get_class(format): @@ -107,6 +109,8 @@ class SongFormat(object): return OooImport elif format == SongFormat.CCLI: return CCLIFileImport + elif format == SongFormat.DreamBeam: + return DreamBeamImport elif format == SongFormat.EasySlides: return EasySlidesImport elif format == SongFormat.EasyWorship: @@ -130,6 +134,7 @@ class SongFormat(object): SongFormat.OpenLP1, SongFormat.Generic, SongFormat.CCLI, + SongFormat.DreamBeam, SongFormat.EasySlides, SongFormat.EasyWorship, SongFormat.FoilPresenter, diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index aba2f6d05..d7317ff9f 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -25,8 +25,8 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ -The :mod:`wowimport` module provides the functionality for importing Words of -Worship songs into the OpenLP database. +The :mod:`songshowplusimport` module provides the functionality for importing +Song Show Plus songs into the OpenLP database. """ import os import logging From a75102a868f44f7fc781d6e9410111e29b63d366 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 24 Mar 2012 18:20:19 +0000 Subject: [PATCH 02/66] Removed errant print statment --- openlp/plugins/songs/lib/dreambeamimport.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index 1b7d5c4bd..b43b2cf8b 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -110,7 +110,6 @@ class DreamBeamImport(SongImport): continue xml = unicode(etree.tostring(parsed_file)) song_xml = objectify.fromstring(xml) - print song_xml.tag if song_xml.tag != u'DreamSong': self.logError(file, unicode( translate('SongsPlugin.DreamBeamImport', From 5925fb624ec48d16db7c132b67decc2bc249762b Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sun, 25 Mar 2012 18:25:08 +0100 Subject: [PATCH 03/66] Changed Restructured text layout --- openlp/plugins/songs/lib/dreambeamimport.py | 64 ++++++++++----------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index b43b2cf8b..ecd0d7c79 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -47,42 +47,42 @@ class DreamBeamImport(SongImport): The :class:`DreamBeamImport` class provides the ability to import song files from DreamBeam. - An example of DreamBeam xml mark-up: + An example of DreamBeam xml mark-up:: - - - false - 0.80 - Amazing Grace - John Newton - - - - F - G - false - false - - Amazing Grace, how sweet the sound, - That saved a wretch like me. - I once was lost but now am found, - Was blind, but now, I see. - T’was Grace that taught my heart to fear. - And Grace, my fears relieved. - How precious did that Grace appear… - the hour I first believed. - - - - - - false - + + + false + 0.80 + Amazing Grace + John Newton + + + + F + G + false + false + + Amazing Grace, how sweet the sound, + That saved a wretch like me. + I once was lost but now am found, + Was blind, but now, I see. + T’was Grace that taught my heart to fear. + And Grace, my fears relieved. + How precious did that Grace appear… + the hour I first believed. + + + + + + false + Valid extensions for a DreamBeam song file are: - * .xml + * \*.xml """ def __init__(self, manager, **kwargs): From 7260dee1d63eefaf9ab3014a6fca74886d9182a4 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Tue, 27 Mar 2012 21:09:01 +0100 Subject: [PATCH 04/66] Made changes as to Jonathan's requests --- openlp/plugins/songs/lib/dreambeamimport.py | 11 ++++------- openlp/plugins/songs/lib/songshowplusimport.py | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index ecd0d7c79..381beb033 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -31,15 +31,12 @@ DreamBeam songs into the OpenLP database. import os, sys import logging -from lxml import etree, objectify +from lxml import etree, objectify from openlp.core.lib import translate from openlp.plugins.songs.lib.songimport import SongImport from openlp.plugins.songs.lib.ui import SongStrings - - - log = logging.getLogger(__name__) class DreamBeamImport(SongImport): @@ -87,7 +84,7 @@ class DreamBeamImport(SongImport): def __init__(self, manager, **kwargs): """ - Initialise the Words of Worship importer. + Initialise the DreamBeam importer. """ SongImport.__init__(self, manager, **kwargs) @@ -119,8 +116,8 @@ class DreamBeamImport(SongImport): if hasattr(song_xml, u'Title'): self.title = unicode(song_xml.Title.text) if hasattr(song_xml, u'Author'): - # Dreambeam does not have a copyright field, instead it - # some times uses the author feild + # DreamBeam does not have a copyright field, instead it + # some times uses the author field self.addCopyright(unicode(song_xml.Author.text)) self.parseAuthor(unicode(song_xml.Author.text)) if hasattr(song_xml, u'SongLyrics'): diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index d7317ff9f..8d2af5514 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -26,7 +26,7 @@ ############################################################################### """ The :mod:`songshowplusimport` module provides the functionality for importing -Song Show Plus songs into the OpenLP database. +SongShow Plus songs into the OpenLP database. """ import os import logging From e6af8d8bef5b2efcb35a05803eeaa2d9026eb34f Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Thu, 29 Mar 2012 19:37:05 +0100 Subject: [PATCH 05/66] Remove constructor as per Raouls comment. --- openlp/plugins/songs/lib/dreambeamimport.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index 381beb033..569f0006a 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -81,13 +81,7 @@ class DreamBeamImport(SongImport): * \*.xml """ - - def __init__(self, manager, **kwargs): - """ - Initialise the DreamBeam importer. - """ - SongImport.__init__(self, manager, **kwargs) - + def doImport(self): """ Receive a single file or a list of files to import. From 4ce95e9d5630c2d69a7fb40f2fbdd08292b3dd82 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Fri, 30 Mar 2012 22:52:50 +0100 Subject: [PATCH 06/66] Made changes as per Andreas comments. --- openlp/plugins/songs/lib/dreambeamimport.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index 569f0006a..68868baa1 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -28,7 +28,8 @@ The :mod:`dreambeamimport` module provides the functionality for importing DreamBeam songs into the OpenLP database. """ -import os, sys +import os +import sys import logging from lxml import etree, objectify @@ -111,7 +112,7 @@ class DreamBeamImport(SongImport): self.title = unicode(song_xml.Title.text) if hasattr(song_xml, u'Author'): # DreamBeam does not have a copyright field, instead it - # some times uses the author field + # sometimes uses the author field self.addCopyright(unicode(song_xml.Author.text)) self.parseAuthor(unicode(song_xml.Author.text)) if hasattr(song_xml, u'SongLyrics'): From 9c11494364b1b5d4a6a41f11ff94bdc93e622cd7 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 7 Apr 2012 17:41:03 +0100 Subject: [PATCH 07/66] Added support for ALL DreamBeam file formats. --- openlp/plugins/songs/lib/dreambeamimport.py | 72 ++++++++++++++------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index 68868baa1..d5373cf39 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -108,30 +108,52 @@ class DreamBeamImport(SongImport): ('Invalid DreamBeam song file. Missing ' 'DreamSong tag.')))) continue - if hasattr(song_xml, u'Title'): - self.title = unicode(song_xml.Title.text) - if hasattr(song_xml, u'Author'): - # DreamBeam does not have a copyright field, instead it - # sometimes uses the author field - self.addCopyright(unicode(song_xml.Author.text)) - self.parseAuthor(unicode(song_xml.Author.text)) - if hasattr(song_xml, u'SongLyrics'): - for lyrics_item in song_xml.SongLyrics.iterchildren(): - verse_type = lyrics_item.get(u'Type') - verse_number = lyrics_item.get(u'Number') - verse_text = unicode(lyrics_item.text) - self.addVerse(verse_text, - (u'%s%s' % (verse_type[:1], verse_number))) - if hasattr(song_xml, u'Collection'): - self.songBookName = unicode(song_xml.Collection.text) - if hasattr(song_xml, u'Number'): - self.songNumber = unicode(song_xml.Number.text) - if hasattr(song_xml, u'Sequence'): - for LyricsSequenceItem in song_xml.Sequence.iterchildren(): - self.verseOrderList.append( - "%s%s" % (LyricsSequenceItem.get(u'Type')[:1], - LyricsSequenceItem.get(u'Number'))) - if hasattr(song_xml, u'Notes'): - self.comments = unicode(song_xml.Notes.text) + if hasattr(song_xml, u'Version'): + self.version = float(song_xml.Version.text) + # Version numbers found in DreamBeam Source /FileTypes/Song.cs + if self.version <= 0.49: + if hasattr(song_xml.Text0, u'Text'): + self.title = unicode(song_xml.Text0.Text.text) + if hasattr(song_xml.Text1, u'Text'): + self.lyrics = unicode(song_xml.Text1.Text.text) + for verse in self.lyrics.split(u'\n\n\n'): + self.addVerse(verse) + if hasattr(song_xml.Text2, u'Text'): + # DreamBeam does not have a copyright field, instead it + # sometimes uses the author field + self.addCopyright(unicode(song_xml.Text2.Text.text)) + self.parseAuthor(unicode(song_xml.Text2.Text.text)) + elif self.version >= 0.5: + if hasattr(song_xml, u'Title'): + self.title = unicode(song_xml.Title.text) + if hasattr(song_xml, u'Author'): + # DreamBeam does not have a copyright field, instead it + # sometimes uses the author field + self.addCopyright(unicode(song_xml.Author.text)) + self.parseAuthor(unicode(song_xml.Author.text)) + if hasattr(song_xml, u'SongLyrics'): + for lyrics_item in song_xml.SongLyrics.iterchildren(): + verse_type = lyrics_item.get(u'Type') + verse_number = lyrics_item.get(u'Number') + verse_text = unicode(lyrics_item.text) + self.addVerse(verse_text, + (u'%s%s' % (verse_type[:1], verse_number))) + if hasattr(song_xml, u'Collection'): + self.songBookName = unicode(song_xml.Collection.text) + if hasattr(song_xml, u'Number'): + self.songNumber = unicode(song_xml.Number.text) + if hasattr(song_xml, u'Sequence'): + for LyricsSequenceItem in ( + song_xml.Sequence.iterchildren()): + self.verseOrderList.append( + "%s%s" % (LyricsSequenceItem.get(u'Type')[:1], + LyricsSequenceItem.get(u'Number'))) + if hasattr(song_xml, u'Notes'): + self.comments = unicode(song_xml.Notes.text) + else: + log.exception(u'No valid version information.' + 'Invalid file %s' % file) + self.logError(file, SongStrings.XMLSyntaxError) + continue if not self.finish(): self.logError(file) From 20eab8b9178678bd24e1c99b9938146833e98ee7 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Sat, 7 Apr 2012 20:47:41 +0100 Subject: [PATCH 08/66] Fixed case when there is no version information --- openlp/plugins/songs/lib/dreambeamimport.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index d5373cf39..6d8e994c8 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -110,6 +110,13 @@ class DreamBeamImport(SongImport): continue if hasattr(song_xml, u'Version'): self.version = float(song_xml.Version.text) + else: + log.exception(u'No valid version information.' + 'Invalid file %s' % file) + self.logError(file, unicode( + translate('SongsPlugin.DreamBeamImport', + ('No valid version information.')))) + continue # Version numbers found in DreamBeam Source /FileTypes/Song.cs if self.version <= 0.49: if hasattr(song_xml.Text0, u'Text'): @@ -150,10 +157,5 @@ class DreamBeamImport(SongImport): LyricsSequenceItem.get(u'Number'))) if hasattr(song_xml, u'Notes'): self.comments = unicode(song_xml.Notes.text) - else: - log.exception(u'No valid version information.' - 'Invalid file %s' % file) - self.logError(file, SongStrings.XMLSyntaxError) - continue if not self.finish(): self.logError(file) From be3da3368e04bd75925de71cfe5cfccc00e03a8e Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Fri, 13 Apr 2012 21:22:55 +0100 Subject: [PATCH 09/66] changed file version handeling. Added check for (c) symbol if not use it for the author --- openlp/plugins/songs/lib/dreambeamimport.py | 43 ++++++++++----------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index 6d8e994c8..da649bba9 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -31,6 +31,7 @@ DreamBeam songs into the OpenLP database. import os import sys import logging +import types from lxml import etree, objectify @@ -111,33 +112,13 @@ class DreamBeamImport(SongImport): if hasattr(song_xml, u'Version'): self.version = float(song_xml.Version.text) else: - log.exception(u'No valid version information.' - 'Invalid file %s' % file) - self.logError(file, unicode( - translate('SongsPlugin.DreamBeamImport', - ('No valid version information.')))) - continue + self.version = 0 # Version numbers found in DreamBeam Source /FileTypes/Song.cs - if self.version <= 0.49: - if hasattr(song_xml.Text0, u'Text'): - self.title = unicode(song_xml.Text0.Text.text) - if hasattr(song_xml.Text1, u'Text'): - self.lyrics = unicode(song_xml.Text1.Text.text) - for verse in self.lyrics.split(u'\n\n\n'): - self.addVerse(verse) - if hasattr(song_xml.Text2, u'Text'): - # DreamBeam does not have a copyright field, instead it - # sometimes uses the author field - self.addCopyright(unicode(song_xml.Text2.Text.text)) - self.parseAuthor(unicode(song_xml.Text2.Text.text)) - elif self.version >= 0.5: + if self.version >= 0.5: if hasattr(song_xml, u'Title'): self.title = unicode(song_xml.Title.text) if hasattr(song_xml, u'Author'): - # DreamBeam does not have a copyright field, instead it - # sometimes uses the author field - self.addCopyright(unicode(song_xml.Author.text)) - self.parseAuthor(unicode(song_xml.Author.text)) + author_copyright = song_xml.Author.text if hasattr(song_xml, u'SongLyrics'): for lyrics_item in song_xml.SongLyrics.iterchildren(): verse_type = lyrics_item.get(u'Type') @@ -157,5 +138,21 @@ class DreamBeamImport(SongImport): LyricsSequenceItem.get(u'Number'))) if hasattr(song_xml, u'Notes'): self.comments = unicode(song_xml.Notes.text) + else: + if hasattr(song_xml.Text0, u'Text'): + self.title = unicode(song_xml.Text0.Text.text) + if hasattr(song_xml.Text1, u'Text'): + self.lyrics = unicode(song_xml.Text1.Text.text) + for verse in self.lyrics.split(u'\n\n\n'): + self.addVerse(verse) + if hasattr(song_xml.Text2, u'Text'): + author_copyright = song_xml.Text2.Text.text + if author_copyright: + author_copyright = unicode(author_copyright) + if author_copyright.find( + unicode(SongStrings.CopyrightSymbol)) >= 0: + self.addCopyright(author_copyright) + else: + self.parseAuthor(author_copyright) if not self.finish(): self.logError(file) From 0fdf3b7f7c050d63e7e5481c64474dbf51ec23ee Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Mon, 16 Apr 2012 09:02:24 +0200 Subject: [PATCH 10/66] trivial clean ups --- openlp/core/lib/renderer.py | 2 +- openlp/core/lib/settingsmanager.py | 4 +- openlp/plugins/bibles/bibleplugin.py | 7 +- openlp/plugins/presentations/lib/mediaitem.py | 78 +++++++++---------- .../presentations/presentationplugin.py | 5 +- 5 files changed, 45 insertions(+), 51 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 8da5967a1..cb5b1a5a5 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -364,7 +364,7 @@ class Renderer(object): self.web.setVisible(False) self.web.resize(self.page_width, self.page_height) self.web_frame = self.web.page().mainFrame() - # Adjust width and height to account for shadow. outline done in css + # Adjust width and height to account for shadow. outline done in css. html = u""" diff --git a/openlp/plugins/remotes/html/stage.html b/openlp/plugins/remotes/html/stage.html index 067a8e485..f3d4ab349 100644 --- a/openlp/plugins/remotes/html/stage.html +++ b/openlp/plugins/remotes/html/stage.html @@ -29,6 +29,7 @@ ${stage_title} + From 7e5d4b001a6ebb84de7a9b14f33db16a1b66c602 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 21 Apr 2012 09:12:00 +0200 Subject: [PATCH 17/66] i18n update - part 1 --- resources/i18n/af.ts | 1310 ++++++++++++++++++--------------- resources/i18n/cs.ts | 1310 ++++++++++++++++++--------------- resources/i18n/da.ts | 1294 +++++++++++++++++--------------- resources/i18n/de.ts | 1322 ++++++++++++++++++--------------- resources/i18n/el.ts | 1310 ++++++++++++++++++--------------- resources/i18n/en.ts | 1306 ++++++++++++++++++--------------- resources/i18n/en_GB.ts | 1310 ++++++++++++++++++--------------- resources/i18n/en_ZA.ts | 1310 ++++++++++++++++++--------------- resources/i18n/es.ts | 1394 +++++++++++++++++++---------------- resources/i18n/et.ts | 1314 ++++++++++++++++++--------------- resources/i18n/fi.ts | 1292 +++++++++++++++++--------------- resources/i18n/fr.ts | 1304 +++++++++++++++++--------------- resources/i18n/hu.ts | 1310 ++++++++++++++++++--------------- resources/i18n/id.ts | 1302 +++++++++++++++++--------------- resources/i18n/it.ts | 1292 +++++++++++++++++--------------- resources/i18n/ja.ts | 1549 +++++++++++++++++++++------------------ resources/i18n/ko.ts | 1292 +++++++++++++++++--------------- resources/i18n/nb.ts | 1292 +++++++++++++++++--------------- resources/i18n/nl.ts | 1328 ++++++++++++++++++--------------- resources/i18n/pl.ts | 1292 +++++++++++++++++--------------- resources/i18n/pt_BR.ts | 1309 ++++++++++++++++++--------------- resources/i18n/ru.ts | 1292 +++++++++++++++++--------------- resources/i18n/sq.ts | 1292 +++++++++++++++++--------------- resources/i18n/sv.ts | 1310 ++++++++++++++++++--------------- resources/i18n/zh_CN.ts | 1292 +++++++++++++++++--------------- 25 files changed, 17977 insertions(+), 14951 deletions(-) diff --git a/resources/i18n/af.ts b/resources/i18n/af.ts index d750e6fa2..b30c1f7c4 100644 --- a/resources/i18n/af.ts +++ b/resources/i18n/af.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Waarskuwing Boodskap - + Alert &text: Waarskuwing &teks: - + &New &Nuwe - + &Save &Stoor - + Displ&ay V&ertoon - + Display && Cl&ose Vert&oon && Maak toe @@ -79,7 +79,7 @@ Daar is geen teks vir die waarskuwing gespesifiseer nie. Tik asseblief teks in voordat 'n nuwe een bygevoeg word. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Gaan steeds voort? AlertsPlugin.AlertsTab - + Font Skrif - + Font name: Skrif naam: - + Font color: Skrif kleur: - + Background color: Agtergrond kleur: - + Font size: Skrif grootte: - + Alert timeout: Waarskuwing verstreke-tyd: @@ -661,42 +661,87 @@ Gaan steeds voort? :|v|V|verse|verses;;-|to;;,|and;;end + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + 'n Weergawe naam moet vir die Bybel gespesifiseer word. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Die Bybel benodig 'n kopiereg. Bybels in die Publieke Domein moet daarvolgens gemerk word. + + + + Bible Exists + Bybel Bestaan reeds + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Hierdie Bybel bestaan reeds. Voer asseblief 'n ander Bybel in of wis eers die bestaande een uit. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Skrif Verwysing Fout - + Web Bible cannot be used Web Bybel kan nie gebruik word nie - + Text Search is not available with Web Bibles. Teks Soektog is nie beskikbaar met Web Bybels nie. - + You did not enter a search keyword. You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. Daar is nie 'n soek sleutelwoord ingevoer nie. Vir 'n soektog wat alle sleutelwoorde bevat, skei die woorde deur middel van 'n spasie. Vir 'n soektog wat een van die sleutelwoorde bevat, skei die woorde deur middel van 'n komma. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Huidig is daar geen Bybels geïnstalleer nie. Gebruik asseblief die Invoer Gids om een of meer Bybels te installeer. - + No Bibles Available Geeb Bybels Beskikbaar nie - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. Hulle moet geskei word deur 'n vertikale staaf "|". Maak asseblief hierdie redigeer lyn skoon om die verstek waarde te gebruik. - - - Preferred Bookname Language - Voorkeur Boek Naam Taal - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Kies die taal waarin die boek name van die -Bybel vertoon moet word in die Bybel soektog: - - - - Bible language - Bybel taal - - - - Application language - Program taal - English Engels - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Veelvoudige opsies: -Bybel taal - die taal waarin die Bybel name ingevoer was -Program taal - die taal wat gekies is om te gebruik in OpenLP -Engels - gebruik altyd Engelse boek name + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Selekteer Boek Naam - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Die volgende boek naam kan nie intern gepas word nie. Kies asseblief die ooreenstemmende Engelse naam van die lys. - + Current name: Huidige naam: - + Corresponding name: Ooreenstemmende naam: - + Show Books From Wys Boeke Van - + Old Testament Ou Testament - + New Testament Nuwe Testament - + Apocrypha Apokriewe @@ -935,6 +968,75 @@ Engels - gebruik altyd Engelse boek name Vers invoer... voltooi. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Lisensie Besonderhede + + + + Version name: + Weergawe naam: + + + + Copyright: + Kopiereg: + + + + Permissions: + Toestemming: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ Engels - gebruik altyd Engelse boek name BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bybel Invoer Gids - + 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. Hierdie gids sal u help om Bybels van 'n verskeidenheid formate in te voer. Kliek die volgende knoppie hieronder om die proses te begin deur 'n formaat te kies om in te voer. - + Web Download Web Aflaai - + Location: Ligging: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bybel: - + Download Options Aflaai Opsies - + Server: Bediener: - + Username: Gebruikersnaam: - + Password: Wagwoord: - + Proxy Server (Optional) Tussenganger Bediener (Opsioneel) - + License Details Lisensie Besonderhede - + Set up the Bible's license details. Stel hierdie Bybel se lisensie besonderhede op. - + Version name: Weergawe naam: - + Copyright: Kopiereg: - + Please wait while your Bible is imported. Wag asseblief terwyl u Bybel ingevoer word. - + You need to specify a file with books of the Bible to use in the import. 'n Lêer met boeke van die Bybel moet gespesifiseer word vir gebruik tydens die invoer. - + You need to specify a file of Bible verses to import. 'n Lêer met Bybel verse moet gespesifiseer word om in te voer. - + You need to specify a version name for your Bible. 'n Weergawe naam moet vir die Bybel gespesifiseer word. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Die Bybel benodig 'n kopiereg. Bybels in die Publieke Domein moet daarvolgens gemerk word. - + Bible Exists Bybel Bestaan reeds - + This Bible already exists. Please import a different Bible or first delete the existing one. Hierdie Bybel bestaan reeds. Voer asseblief 'n ander Bybel in of wis eers die bestaande een uit. - + Your Bible import failed. Die Bybel invoer het misluk. - + CSV File KGW Lêer - + Bibleserver Bybelbediener - + Permissions: Toestemming: - + Bible file: Bybel lêer: - + Books file: Boeke lêer: - + Verses file: Verse lêer: - + openlp.org 1.x Bible Files openlp.org 1.x Bybel Lêers - + Registering Bible... Bybel word geregistreer... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Geregistreerde Bybel. Neem asseblief kennis dat verse op aan- @@ -1147,17 +1249,17 @@ vraag afgelaai word en dus is 'n internet konneksie nodig. BiblesPlugin.LanguageDialog - + Select Language Kies 'n Taal - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP is nie in staat om die taal van hierdie vertaling Bybel te bepaal nie. Kies asseblief die taal van die lys hieronder. - + Language: Taal: @@ -1173,90 +1275,95 @@ vraag afgelaai word en dus is 'n internet konneksie nodig. BiblesPlugin.MediaItem - + Quick Vinnig - + Find: Vind: - + Book: Boek: - + Chapter: Hoofstuk: - + Verse: Vers: - + From: Vanaf: - + To: Tot: - + Text Search Teks Soektog - + Second: Tweede: - + Scripture Reference Skrif Verwysing - + Toggle to keep or clear the previous results. Wissel om die vorige resultate te behou of te verwyder. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Enkel en dubbel Bybel-vers soek-resultate kan nie gekombineer 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ vraag afgelaai word en dus is 'n internet konneksie nodig. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Bepaal enkodering (dit mag 'n paar minuute neem)... - + Importing %s %s... Importing <book name> <chapter>... Invoer %s %s... @@ -1514,42 +1621,42 @@ word en dus is 'n Internet verbinding nodig. CustomPlugin.EditCustomForm - + Edit Custom Slides Redigeer Aangepaste Skyfies - + &Title: &Titel: - + Add a new slide at bottom. Voeg nuwe skyfie by aan die onderkant. - + Edit the selected slide. Redigeer die geselekteerde skyfie. - + Edit all the slides at once. Redigeer al die skyfies tegelyk. - + Split a slide into two by inserting a slide splitter. Verdeel 'n skyfie deur 'n skyfie-verdeler te gebruik. - + The&me: Te&ma: - + &Credits: &Krediete: @@ -1564,12 +1671,12 @@ word en dus is 'n Internet verbinding nodig. Ten minste een skyfie moet bygevoeg word - + Ed&it All Red&igeer Alles - + Insert Slide Voeg 'n Skyfie in @@ -1667,34 +1774,34 @@ 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. Daar was geen vertoon item om by te voeg nie. @@ -1702,19 +1809,19 @@ Voeg steeds die ander beelde by? ImagesPlugin.ImageTab - + Background Color Agtergrond Kleur - + Default Color: Verstek Kleur: - - Provides border where image is not the correct dimensions for the screen when resized. - Verskaf rand waar die beeld nie die korrekte afmetings het wanneer vir die skerm verander word nie. + + Visible background for images with aspect ratio different to screen. + @@ -1839,22 +1946,22 @@ Voeg steeds die ander beelde by? MediaPlugin.MediaTab - + Available Media Players Beskikbare Media Spelers - + %s (unavailable) %s (onbeskikbaar) - + Player Order Speler Orde - + Allow media player to be overridden Laat toe dat media speler oorheers word @@ -1882,17 +1989,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits Krediete - + License Lisensie - + Contribute Dra By @@ -1902,17 +2009,17 @@ Should OpenLP upgrade now? bou %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Hierdie program is gratis sagteware; dit kan verspei en/of verander word onder die terme van die GNU Algemene Publieke Lisensie soos deur die Gratis Sagteware Vondasie gepubliseer is; weergawe 2 van die Lisensie. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Hierdie program word versprei in die hoop dat dit nuttig sal wees, maar SONDER ENIGE WAARBORG; sonder die geïmpliseerde waarborg van VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL. Sien hieronder vir meer inligting. - + Project Lead %s @@ -2038,7 +2145,7 @@ Finale Krediet Hy ons vry gemaak het. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2055,7 +2162,7 @@ Vind meer uit oor OpenLP: http://openlp.org/ OpenLP is geskryf en word onderhou deur vrywilligers. As u graag wil sien dat meer Christelike sagteware geskryf word, oorweeg dit asseblief om by te dra deur die knoppie hieronder te gebruik. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Kopiereg © 2004-2012 %s @@ -2065,62 +2172,62 @@ Gedeeltelike kopiereg © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings GK (UI) Verstellings - + Number of recent files to display: Hoeveelheid onlangse lêers om te vertoon: - + Remember active media manager tab on startup Onthou die laaste media bestuurder oortjie wanneer die program begin - + Double-click to send items straight to live Dubbel-kliek om die items regstreeks te stuur - + Expand new service items on creation Sit die nuwe diens items uit wanneer dit geskep word - + Enable application exit confirmation Stel die program in staat om die uitgang bevestiging te vertoon - + Mouse Cursor Muis Wyser - + Hide mouse cursor when over display window Steek die muis wyser weg wanneer dit oor die vertoon venster beweeg - + Default Image Verstek Beeld - + Background color: Agtergrond kleur: - + Image file: Beeld lêer: - + Open File Maak Lêer oop @@ -2130,124 +2237,124 @@ Gedeeltelike kopiereg © 2004-2012 %s Gevorderd - + Preview items when clicked in Media Manager Skou items wanneer gekliek word in die Media Bestuurder - + Click to select a color. Kliek om 'n kleur te kies. - + Browse for an image file to display. Blaai vir 'n beeld lêer om te vertoon. - + Revert to the default OpenLP logo. Verander terug na die verstek OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Diens %Y-%m-%d %H-%M - + Default Service Name Verstek Diens Naam - + Enable default service name Laat verstek diens naam toe - + Date and Time: Datum en Tyd: - + Monday Maandag - + Tuesday Dinsdag - + Wednesday Woensdag - + Thurdsday Donderdag - + Friday Vrydag - + Saturday Saterdag - + Sunday Sondag - + Now Nou - + Time when usual service starts. Tyd wanneer gewone diens begin. - + Name: Naam: - + Consult the OpenLP manual for usage. Konsulteer die OpenLP handleiding vir gebruik. - + Revert to the default service name "%s". Herstel tot die verstek diens naam "%s". - + Example: Voorbeeld: - + X11 X11 - + Bypass X11 Window Manager Werk om X11 Venster Bestuurder - + Syntax error. Sintaks fout. @@ -2255,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred 'n Fout het opgeduik - + 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. Oeps! OpenLP het 'n probleem ondervind en kon nie daarvanaf herstel nie. Die teks in die boks hieronder bevat inligting wat van hulp kan wees aan die OpenLP ontwikkelaars, so stuur dit asseblief per e-pos na bugs@openlp.org saam met 'n gedetaileerde beskrywing van wat gedoen was toe die probleem plaasgevind het. - + Send E-Mail Stuur E-pos - + Save to File Stoor na Lêer - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Voer asseblief 'n beskrywing in van waarmee jy besig was toe de probleem ontstaan het (Mimimum 20 karrakters) - + Attach File Heg 'n Lêer aan @@ -2593,79 +2700,75 @@ Version: %s Custom Slides Aangepasde Skyfies + + + Finish + Eindig + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Geen Internet verbinding was gevind nie. Die Eerste Keer Gids benodig 'n Internet verbinding sodat voorbeeld liedere, Bybels en temas afgelaai kan word. Druk die Klaar knoppie om OpenLP nou te begin met verstek instellings en geen voorbeeld data. - -Om die Eerste-gebruik Gids later te gebruik om hierde data in te trek, gaan die Internet verbinding na en begin weer hierdie gids deur die volgende te kies: "Gereedskap/Her-gebruik Eerste Keer Gids" vanaf OpenLP. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Om die Eerste Keer Gids in geheel te kanselleer (en OpenLP nie te begin nie), druk die Kanselleer knoppie nou. - - - - Finish - Eindig +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Konfigureer Formattering Etiket - + Edit Selection Redigeer Seleksie - + Save Stoor - + Description Beskrywing - + Tag Etiket - + Start tag Begin etiket - + End tag Eind-etiket - + Tag Id Etiket Id - + Start HTML Begin HTML - + End HTML Eindig HTML @@ -2909,40 +3012,10 @@ Om die Eerste Keer Gids in geheel te kanselleer (en OpenLP nie te begin nie), dr Begin agtergrond oudio gestop - + Service Item Slide Limits Diens Item Skyfie Limiete - - - &End Slide - Laast&e Skyfie - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Op en af pyltjie knoppies stop by die boonste en onderste skyfies van elke Diens Item. - - - - &Wrap Slide - Omvou Skyfie - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Op en af pyltjie knoppies gaan by die bo- en onderkant van elke Diens Item aan. - - - - &Next Item - Volge&nde Item - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Op en af pyltjie knoppies gaan na die volgende of vorige Diens Item vanaf die boonste en onderste skyfie van elke Diens Item. - Override display position: @@ -2953,6 +3026,26 @@ Om die Eerste Keer Gids in geheel te kanselleer (en OpenLP nie te begin nie), dr Repeat track list Herhaal snit lys + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2978,287 +3071,287 @@ Om die Eerste Keer Gids in geheel te kanselleer (en OpenLP nie te begin nie), dr 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/. @@ -3267,22 +3360,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 @@ -3293,82 +3386,82 @@ 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? - + 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. - + &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. - + &Recent Files Onlangse Lêe&rs - + L&ock Panels Sl&uit Panele - + Prevent the panels being moved. Voorkom dat die panele rondgeskuif word. - + Re-run First Time Wizard Her-gebruik Eerste Keer Gids - + Re-run the First Time Wizard, importing songs, Bibles and themes. Her-gebruik die Eerste Keer Gids om liedere, Bybels en tema's in te voer. - + Re-run First Time Wizard? Her-gebruik Eerste Keer Gids? - + 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. @@ -3377,43 +3470,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Her-gebruik van hierdie gids mag veranderinge aan die huidige OpenLP konfigurasie aanbring en kan moontlik liedere byvoeg by die bestaande liedere lys en kan ook die verstek tema verander. - + Clear List Clear List of recent files Maak Lys Skoon - + Clear the list of recent files. Maak die lys van onlangse lêers skoon. - + Configure &Formatting Tags... Konfigureer &Formattering Etikette... - + Export OpenLP settings to a specified *.config file Voer OpenLP verstellings uit na 'n spesifieke *.config lêer - + Settings Verstellings - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Voer OpenLP verstellings in vanaf 'n gespesifiseerde *.config lêer wat voorheen op hierdie of 'n ander masjien uitgevoer is - + Import settings? Voer verstellings in? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3426,32 +3519,32 @@ Deur verstellings in te voer, sal permanente veranderinge aan die huidige OpenLP As verkeerde verstellings ingevoer word, mag dit onvoorspelbare optrede tot gevolg hê, of OpenLP kan abnormaal termineer. - + Open File Maak Lêer oop - + OpenLP Export Settings Files (*.conf) OpenLP Uitvoer Verstelling Lêers (*.conf) - + Import settings Voer verstellings in - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP sal nou toe maak. Ingevoerde verstellings sal toegepas word die volgende keer as OpenLP begin word. - + Export Settings File Voer Verstellings Lêer Uit - + OpenLP Export Settings File (*.conf) OpenLP Uitvoer Verstellings Lêer (*.conf) @@ -3485,7 +3578,7 @@ Databasis: %s OpenLP.MediaManagerItem - + No Items Selected Geen item geselekteer nie @@ -3572,27 +3665,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List Mini-program Lys - + Plugin Details Mini-program Besonderhede - + Status: Status: - + Active Aktief - + Inactive Onaktief @@ -3615,12 +3708,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page Pas Blaai - + Fit Width Pas Wydte @@ -3628,7 +3721,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options Opsies @@ -3643,47 +3736,47 @@ Suffix not supported Kopieër as HTML - + Zoom In Zoom In - + Zoom Out Zoem Uit - + Zoom Original Zoem Oorspronklike - + Other Options Ander Opsies - + Include slide text if available Sluit skyfie teks in indien beskikbaar - + Include service item notes Sluit diens item notas in - + Include play length of media items Sluit die speel tyd van die media items in - + Add page break before each text item Voeg 'n bladsy-breking voor elke teks item - + Service Sheet Diens Blad @@ -3693,12 +3786,12 @@ Suffix not supported Druk - + Title: Titel: - + Custom Footer Text: Verpersoonlike Voetskrif Teks: @@ -3732,7 +3825,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item Hergroepeer Diens Item @@ -3740,189 +3833,189 @@ Suffix not supported OpenLP.ServiceManager - + Move to &top Skuif boon&toe - + Move item to the top of the service. Skuif item tot heel bo in die diens. - + Move &up Sk&uif op - + Move item up one position in the service. Skuif item een posisie boontoe in die diens. - + Move &down Skuif &af - + Move item down one position in the service. Skuif item een posisie af in die diens. - + Move to &bottom Skuif &tot heel onder - + Move item to the end of the service. Skuif item tot aan die einde van die diens. - + &Delete From Service Wis uit vanaf die &Diens - + Delete the selected item from the service. Wis geselekteerde item van die diens af. - + &Add New Item &Voeg Nuwe Item By - + &Add to Selected Item &Voeg by Geselekteerde Item - + &Edit Item R&edigeer Item - + &Reorder Item Ve&rander Item orde - + &Notes &Notas - + &Change Item Theme &Verander Item Tema - + OpenLP Service Files (*.osz) OpenLP Diens Lêers (*.osz) - + 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. - + Missing Display Handler Vermisde Vertoon Hanteerder - + Your item cannot be displayed as there is no handler to display it Die item kan nie vertoon word nie omdat daar nie 'n hanteerder is om dit te vertoon nie - + Your item cannot be displayed as the plugin required to display it is missing or inactive Die item kan nie vertoon word nie omdat die mini-program wat dit moet vertoon vermis of onaktief is - + &Expand all Br&ei alles uit - + Expand all the service items. Brei al die diens items uit. - + &Collapse all Sto&rt alles ineen - + Collapse all the service items. Stort al die diens items ineen. - + Open File Maak Lêer oop - + Moves the selection down the window. Skuif die geselekteerde afwaarts in die venster. - + Move up Skuif op - + Moves the selection up the window. Skuif die geselekteerde opwaarts in die venster. - + Go Live Gaan Regstreeks - + Send the selected item to Live. Stuur die geselekteerde item Regstreeks. - + &Start Time &Begin Tyd - + Show &Preview Wys &Voorskou - + Show &Live Vertoo&n Regstreeks - + Modified Service Redigeer Diens - + The current service has been modified. Would you like to save this service? Die huidige diens was verander. Stoor hierdie diens? @@ -3942,72 +4035,72 @@ Die inhoud enkodering is nie UTF-8 nie. Speel tyd: - + Untitled Service Ongetitelde 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 - + Load an existing service. Laai 'n bestaande diens. - + Save this service. Stoor die diens. - + Select a theme for the service. 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. - + Service File Missing Diens Lêer Vermis - + Slide theme Skyfie tema - + Notes Notas - + Edit Redigeer - + Service copy only Slegs diens kopie. @@ -4015,7 +4108,7 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ServiceNoteForm - + Service Item Notes Diens Item Notas @@ -4031,12 +4124,12 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ShortcutListDialog - + Action Aksie - + Shortcut Kortpad @@ -4051,32 +4144,32 @@ Die inhoud enkodering is nie UTF-8 nie. Die kortpad "%s" is alreeds toegeken aan 'n ander aksie, kies asseblief 'n ander kortpad. - + Alternate Alternatief - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Kies 'n aksie en kliek een van die knoppies hieronder om 'n primêre of alternatiewe kortpad vas te vang. - + Default Verstek - + Custom Aanpasing - + Capture shortcut. Vang kortpad. - + Restore the default shortcut of this action. Stel die verstek kortpad terug vir hierdie aksie. @@ -4091,7 +4184,7 @@ Die inhoud enkodering is nie UTF-8 nie. Herstel alle kortpaaie na hul verstek waarde? - + Configure Shortcuts Konfigureer Kortpaaie @@ -4258,11 +4351,6 @@ Die inhoud enkodering is nie UTF-8 nie. Background Audio Agtergrond Oudio - - - Next Track - Volgende Snit - Go to next audio track. @@ -4345,17 +4433,17 @@ Die inhoud enkodering is nie UTF-8 nie. Begin tyd is na die eind tyd van die media item - + Theme Layout Tema Uitleg - + The blue box shows the main area. Die blou boks wys die hoof area. - + The red box shows the footer. Die rooi boks wys die voet area. @@ -4456,62 +4544,62 @@ Die inhoud enkodering is nie UTF-8 nie. Stel in As &Globale Standaard - + %s (default) %s (standaard) - + You must select a theme to edit. Kies 'n tema om te redigeer. - + You are unable to delete the default theme. Die standaard tema kan nie uitgewis word nie. - + Theme %s is used in the %s plugin. Tema %s is in gebruik deur die %s mini-program. - + You have not selected a theme. Geen tema is geselekteer nie. - + Save Theme - (%s) Stoor Tema - (%s) - + Theme Exported Tema Uitvoer - + Your theme has been successfully exported. Die tema was suksesvol uitgevoer. - + Theme Export Failed Tema Uitvoer het Misluk - + Your theme could not be exported due to an error. Die tema kon nie uitgevoer word nie weens 'n fout. - + Select Theme Import File Kies Tema Invoer Lêer - + File is not a valid theme. Lêer is nie 'n geldige tema nie. @@ -4531,58 +4619,58 @@ Die inhoud enkodering is nie UTF-8 nie. Vo&er Tema uit - + You must select a theme to rename. Kies 'n tema om te hernoem. - + Rename Confirmation Hernoem Bevestiging - + Rename %s theme? Hernoem %s tema? - + You must select a theme to delete. Kies 'n tema om uit te wis. - + Delete Confirmation Uitwis Bevestiging - + Delete %s theme? Wis %s tema uit? - + Validation Error Validerings Fout - + A theme with this name already exists. 'n Tema met hierdie naam bestaan alreeds. - + OpenLP Themes (*.theme *.otz) OpenLP Temas (*.theme *.otz) - + Copy of %s Copy of <theme name> Duplikaat van %s - + Theme Already Exists Tema Bestaan Reeds @@ -4590,222 +4678,222 @@ 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: @@ -4815,47 +4903,47 @@ Die inhoud enkodering is nie UTF-8 nie. Redigeer Tema - %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. 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 - + Starting color: Begin Kleur: - + Ending color: Eind Kleur: - + Background color: Agtergrond kleur: - + Justify Uitsgespan - + Layout Preview Uitleg Voorskou - + Transparent Deurskynend @@ -4863,42 +4951,42 @@ Die inhoud enkodering is nie UTF-8 nie. OpenLP.ThemesTab - + Global Theme Globale Tema - + Theme Level Tema Vlak - + S&ong Level Lied Vl&ak - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Gebruik die tema van elke lied in die lied-databasis. As 'n lied nie 'n geassosieërde tema het nie, gebruik die diens se tema. As die diens nie 'n tema het nie, gebruik dan die globale tema. - + &Service Level Dien&s Vlak - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Gebruik die tema van die diens en verplaas enige van die individuele liedere se temas. As die diens nie 'n tema het nie, gebruik dan die globale tema. - + &Global Level &Globale Vlak - + Use the global theme, overriding any themes associated with either the service or the songs. Gebruik die globale tema om enige temas wat met die diens of liedere geassosieer is te vervang. @@ -5144,22 +5232,22 @@ Die inhoud enkodering is nie UTF-8 nie. Weergawe - + Delete the selected item. Wis die geselekteerde item uit. - + Move selection up one position. Skuif die seleksie een posisie op. - + Move selection down one position. Skuif die seleksie een posisie af. - + &Vertical Align: &Vertikale Sporing: @@ -5225,7 +5313,7 @@ Die inhoud enkodering is nie UTF-8 nie. Spesifiseer ten minste een %s lêer om vanaf in te voer. - + Welcome to the Bible Import Wizard Welkom by die Bybel Invoer Gids @@ -5408,11 +5496,6 @@ Die inhoud enkodering is nie UTF-8 nie. Reset live background. Herstel regstreekse agtergrond. - - - &Split - &Verdeel - Split a slide into two only if it does not fit on the screen as one slide. @@ -5459,29 +5542,34 @@ Die inhoud enkodering is nie UTF-8 nie. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 en %2 - + %1, and %2 Locale list separator: end %1, en %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5556,17 +5644,17 @@ Die inhoud enkodering is nie UTF-8 nie. Bied aan met: - + File Exists Lêer Bestaan Reeds - + A presentation with that filename already exists. 'n Aanbieding met daardie lêernaam bestaan reeds. - + This type of presentation is not supported. Hierdie tipe aanbieding word nie ondersteun nie. @@ -5576,17 +5664,17 @@ Die inhoud enkodering is nie UTF-8 nie. Aanbiedinge (%s) - + Missing Presentation Vermisde Aanbieding - + The Presentation %s no longer exists. Die Aanbieding %s bestaan nie meer nie. - + The Presentation %s is incomplete, please reload. Die Aanbieding %s is onvolledig, herlaai asseblief. @@ -5667,11 +5755,6 @@ Die inhoud enkodering is nie UTF-8 nie. Search Soek - - - Back - Terug - Refresh @@ -5683,50 +5766,70 @@ Die inhoud enkodering is nie UTF-8 nie. Blanko - + Show Wys - + Prev Vorige - + Next Volgende - + Text Teks - + Show Alert Wys Waarskuwing - + Go Live Gaan Regstreeks - + No Results Geen Resultate - + Options Opsies - + Add to Service Voeg By Diens + + + Home + + + + + Theme + Tema + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5860,7 +5963,7 @@ Die inhoud enkodering is nie UTF-8 nie. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Wis Lied Gebruik Data Uit @@ -5885,7 +5988,7 @@ Die inhoud enkodering is nie UTF-8 nie. 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. Selekteer die datum tot waarop die liedere gebruik uitgewis moet word. Alle opgeneemde data voor hierdie datum sal permanent verwyder word. @@ -5893,22 +5996,22 @@ Die inhoud enkodering is nie UTF-8 nie. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Diens Gebruik Ontrekking - + Select Date Range Selekteer Datum Grense - + to tot - + Report Location Rapporteer Ligging @@ -6188,210 +6291,223 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Lied Redigeerder - + &Title: &Titel: - + Alt&ernate title: Alt&ernatiewe titel: - + &Lyrics: &Lirieke: - + &Verse order: &Vers orde: - + Ed&it All Red&igeer Alles - + Title && Lyrics Titel && Lirieke - + &Add to Song &Voeg by Lied - + &Remove Ve&rwyder - + &Manage Authors, Topics, Song Books &Bestuur Skrywers, Onderwerpe en Lied Boeke - + A&dd to Song Voeg by Lie&d - + R&emove V&erwyder - + Book: Boek: - + Number: Nommer: - + Authors, Topics && Song Book Skrywers, Onderwerpe && Lied Boek - + New &Theme Nuwe &Tema - + Copyright Information Kopiereg Informasie - + Comments Kommentaar - + Theme, Copyright Info && Comments Tema, Kopiereg Informasie && Kommentaar - + Add Author Voeg Skrywer By - + This author does not exist, do you want to add them? Hierdie skrywer bestaan nie, moet die skrywer bygevoeg word? - + This author is already in the list. Hierdie skrywer is alreeds in die lys. - + 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. Die geselekteerde skrywer is ongeldig. Kies 'n skrywer vanaf die lys of voer 'n nuwe skrywer in en kliek op die "Voeg Skrywer by Lied" knoppie om die skrywer by te voeg. - + Add Topic Voeg Onderwerp by - + This topic does not exist, do you want to add it? Die onderwerp bestaan nie. Voeg dit by? - + This topic is already in the list. Die onderwerp is reeds in die lys. - + 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. Geselekteerde onderwerp is ongeldig. Kies 'n onderwerp vanaf die lys of voer 'n nuwe onderwerp in en kliek die "Voeg Onderwerp by Lied" knoppie om die onderwerp by te voeg. - + You need to type in a song title. Tik 'n lied titel in. - + You need to type in at least one verse. Ten minste een vers moet ingevoer word. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Die vers orde is ongeldig. Daar is geen vers wat ooreenstem met %s nie. Geldige opsies is %s. - + Add Book Voeg Boek by - + This song book does not exist, do you want to add it? Die lied boek bestaan nie. Voeg dit by? - + You need to have an author for this song. Daar word 'n outeur benodig vir hierdie lied. - + You need to type some text in to the verse. Daar word teks benodig vir die vers. - + Linked Audio Geskakelde Oudio - + Add &File(s) &Voeg Leêr(s) By - + Add &Media Voeg &Media By - + Remove &All Verwyder &Alles - + Open File(s) Maak Lêer(s) Oop - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Waarskuwing:</strong> Nie al die verse is in gebruik nie. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. Die vers orde is ongeldig. Daar is geen verse wat ooreenstem met %s nie. Geldige inskrywings is %s. @@ -6638,12 +6754,12 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.MediaFilesForm - + Select Media File(s) Selekteer Media Lêer(s) - + Select one or more audio files from the list below, and click OK to import them into this song. Selekteer een of meer oudio lêers van die lys hieronder, en kliek OK om hulle na hierdie lied in te voer. @@ -6661,7 +6777,7 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling.Lirieke - + CCLI License: CCLI Lisensie: @@ -6684,7 +6800,7 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling.Onderhou die lys van skrywers, onderwerpe en boeke. - + copy For song cloning kopieër @@ -6778,12 +6894,12 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. SongsPlugin.SongImport - + copyright kopiereg - + The following songs could not be imported: Die volgende liedere kon nie ingevoer word nie: @@ -6943,8 +7059,8 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling. - Add missing songs when opening service - Voer vermisde liedere by wanneer die diens oopgemaak word + Import missing songs from service files + diff --git a/resources/i18n/cs.ts b/resources/i18n/cs.ts index 7c77059a3..ddb437ea6 100644 --- a/resources/i18n/cs.ts +++ b/resources/i18n/cs.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Vzkaz upozornění - + Alert &text: &Text upozornění: - + &New &Nový - + &Save &Uložit - + Displ&ay &Zobrazit - + Display && Cl&ose Zobrazit a za&vřít @@ -79,7 +79,7 @@ Nebyl zadán žádný text upozornění. Před klepnutím na Nový prosím zadejte nějaký text. - + &Parameter: &Parametr: @@ -119,32 +119,32 @@ Chcete přesto pokračovat? AlertsPlugin.AlertsTab - + Font Písmo - + Font name: Název písma: - + Font color: Barva písma: - + Background color: Barva pozadí: - + Font size: Velikost písma: - + Alert timeout: Čas vypršení upozornění: @@ -661,42 +661,87 @@ Chcete přesto pokračovat? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Je nutno uvést název verze Bible. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + K Bibli je potřeba nastavit autorská práva. Bible, které jsou volná díla, je nutno takto označit. + + + + Bible Exists + Bible existuje + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Tato Bible už existuje. Importujte prosím jinou Bibli nebo nejdříve smažte tu existující. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Chyba v odkazu do Bible - + Web Bible cannot be used Bibli z www nelze použít - + Text Search is not available with Web Bibles. Hledání textu není dostupné v Bibli z www. - + 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. Nebylo zadáno slovo pro hledání. K hledání textu obsahující všechna slova je nutno tato slova oddělit mezerou. Oddělením slov čárkou se bude hledat text obsahující alespoň jedno ze zadaných slov. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Žádné Bible nejsou nainstalovány. K p?idání jedné nebo více Biblí prosím použijte Pr?vodce importem. - + No Bibles Available Žádné Bible k dispozici - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. Musí být odděleny vislou čárou "|". Pro použití výchozí hodnoty smažte tento řádek. - - - Preferred Bookname Language - Upřednostňovaný jazyk názvů knih - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Vybrat jazyk, ve kterém se mají zobrazovat -názvy knih Bible ve Hledat v Bibli: - - - - Bible language - Jazyk Bible - - - - Application language - Jazyk aplikace - English Angličtina - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Více voleb: - Jazyk Bible - jazyk, ve kterém byly importovány názvy knih Bible - Jazyk aplikace - jazyk, který byl vybrán pro aplikaci OpenLP - Angličtina - vždy použít anglické názvy knih + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Vybrat název knihy - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Pro následující název knihy nebyl nalezen interní název. Vyberte prosím ze seznamu odpovídající anglický název. - + Current name: Současný název: - + Corresponding name: Odpovídající název: - + Show Books From Zobrazit knihy od - + Old Testament Starý zákon - + New Testament Nový zákon - + Apocrypha Apokryfy @@ -935,6 +968,75 @@ názvy knih Bible ve Hledat v Bibli: Importuji verše... hotovo. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Podrobnosti licence + + + + Version name: + Název verze: + + + + Copyright: + Autorská práva: + + + + Permissions: + Povolení: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + Angličtina + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ názvy knih Bible ve Hledat v Bibli: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Průvodce importem Bible - + 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. Tento průvodce usnadní import Biblí z různých formátů. Proces importu se spustí klepnutím níže na tlačítko další. Potom vyberte formát, ze kterého se bude Bible importovat. - + Web Download Stáhnutí z www - + Location: Umístění: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bible: - + Download Options Volby stahování - + Server: Server: - + Username: Uživatelské jméno: - + Password: Heslo: - + Proxy Server (Optional) Proxy Server (Volitelné) - + License Details Podrobnosti licence - + Set up the Bible's license details. Nastavit podrobnosti k licenci Bible. - + Version name: Název verze: - + Copyright: Autorská práva: - + Please wait while your Bible is imported. Prosím vyčkejte, než se Bible importuje. - + You need to specify a file with books of the Bible to use in the import. Je potřeba určit soubor s knihami Bible. Tento soubor se použije při importu. - + You need to specify a file of Bible verses to import. K importu je třeba určit soubor s veršemi Bible. - + You need to specify a version name for your Bible. Je nutno uvést název verze Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. K Bibli je potřeba nastavit autorská práva. Bible, které jsou volná díla, je nutno takto označit. - + Bible Exists Bible existuje - + This Bible already exists. Please import a different Bible or first delete the existing one. Tato Bible už existuje. Importujte prosím jinou Bibli nebo nejdříve smažte tu existující. - + Your Bible import failed. Import Bible selhal. - + CSV File CSV soubor - + Bibleserver Bibleserver - + Permissions: Povolení: - + Bible file: Soubor s Biblí: - + Books file: Soubor s knihami: - + Verses file: Soubor s verši: - + openlp.org 1.x Bible Files Soubory s Biblemi z openlp.org 1.x - + Registering Bible... Registruji Bibli... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Bible registrovaná. Upozornění: Verše budou stahovány na vyžádání a proto je vyžadováno internetové připojení. @@ -1146,17 +1248,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language Vybrat jazyk - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP není schopen určit jazyk tohoto překladu Bible. Vyberte prosím jazyk ze seznamu níže. - + Language: Jazyk: @@ -1172,90 +1274,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Rychlý - + Find: Hledat: - + Book: Kniha: - + Chapter: Kapitola: - + Verse: Verš: - + From: Od: - + To: Do: - + Text Search Hledání textu - + Second: Druhý: - + Scripture Reference Odkaz do Bible - + Toggle to keep or clear the previous results. Přepnout ponechání nebo smazání předchozích výsledků. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? 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í načtena celá. - + Information Informace - + 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. Druhá Bible neobsahuje všechny verše jako jsou v hlavní Bibli. Budou zobrazeny jen verše nalezené v obou Biblích. %d veršů nebylo zahrnuto ve výsledcích. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1269,12 +1376,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Zjištuji kódování (může trvat několik minut)... - + Importing %s %s... Importing <book name> <chapter>... Importuji %s %s... @@ -1511,42 +1618,42 @@ Upozornění: Verše z www Bible budou stáhnuty na vyžádání a proto je vyž CustomPlugin.EditCustomForm - + Edit Custom Slides Upravit vlastní snímky - + &Title: &Název: - + Add a new slide at bottom. Přidat nový snímek na konec. - + Edit the selected slide. Upravit vybraný snímek. - + Edit all the slides at once. Upravit všechny snímky najednou. - + Split a slide into two by inserting a slide splitter. Vložením oddělovače se snímek rozdělí na dva. - + The&me: &Motiv: - + &Credits: &Zásluhy: @@ -1561,12 +1668,12 @@ Upozornění: Verše z www Bible budou stáhnuty na vyžádání a proto je vyž Je nutno přidat alespoň jeden snímek - + Ed&it All Upra&it vše - + Insert Slide Vložit snímek @@ -1665,34 +1772,34 @@ Upozornění: Verše z www Bible budou stáhnuty na vyžádání a proto je vyž 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. Žádná položka k zobrazení nebyla pozměněna. @@ -1700,19 +1807,19 @@ Chcete přidat ostatní obrázky? ImagesPlugin.ImageTab - + Background Color Barva pozadí - + Default Color: Výchozí barva: - - Provides border where image is not the correct dimensions for the screen when resized. - Při změně velikosti zajišťuje okraje obrázku, pokud nemá správné rozměry pro obrazovku. + + Visible background for images with aspect ratio different to screen. + @@ -1837,22 +1944,22 @@ Chcete přidat ostatní obrázky? MediaPlugin.MediaTab - + Available Media Players Dostupné přehrávače médií - + %s (unavailable) %s (nedostupný) - + Player Order Pořadí přehrávače - + Allow media player to be overridden Povolit překrytí přehrávače médií @@ -1882,17 +1989,17 @@ Má se aktualizace provét teď? OpenLP.AboutForm - + Credits Zásluhy - + License Licence - + Contribute Přispět @@ -1902,17 +2009,17 @@ Má se aktualizace provét teď? sestavení %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Tato aplikace je svobodný software. Lze ji libovolně šířit a upravovat v souladu s GNU General Public licencí, vydané Free Software Foundation; a to v souladu s verzí 2 této licence. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Tato aplikace je šířena v naději, že bude užitečná, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL. Další podrobnosti viz níže. - + Project Lead %s @@ -2037,7 +2144,7 @@ Finální zásluhy On nás učinil svobodnými. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2054,7 +2161,7 @@ Více informací o OpenLP: http://openlp.org/ OpenLP vytváří a udržují dobrovolníci. Pokud má existovat více volně dostupného křesťanského software, zvažte prosím přispění tlačítkem níže. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Autorská práva © 2004-2012 %s @@ -2064,62 +2171,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Nastavení rozhraní - + Number of recent files to display: Počet zobrazených nedávných souborů: - + Remember active media manager tab on startup Pamatovat si při spuštění aktivní kartu správce médií - + Double-click to send items straight to live Dvojklik zobrazí položku přímo naživo - + Expand new service items on creation Při vytvoření rozbalit nové položky služby - + Enable application exit confirmation Zapnout potvrzování ukončení aplikace - + Mouse Cursor Kurzor myši - + Hide mouse cursor when over display window Skrýt kurzor myši v okně zobrazení - + Default Image Výchozí obrázek - + Background color: Barva pozadí: - + Image file: Soubor s obrázkem: - + Open File Otevřít soubor @@ -2129,124 +2236,124 @@ Portions copyright © 2004-2012 %s Pokročilé - + Preview items when clicked in Media Manager Náhled položek při klepnutí ve správci médií - + Click to select a color. Klepnout pro výběr barvy. - + Browse for an image file to display. Procházet pro obrázek k zobrazení. - + Revert to the default OpenLP logo. Vrátit na výchozí OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Služba %Y-%m-%d %H-%M - + Default Service Name Výchozí název služby - + Enable default service name Zapnout výchozí název služby - + Date and Time: Datum a čas: - + Monday Pondělí - + Tuesday Úterý - + Wednesday Středa - + Thurdsday Čtvrtek - + Friday Pátek - + Saturday Sobota - + Sunday Neděle - + Now Teď - + Time when usual service starts. Čas, kdy obvykle začíná bohoslužba. - + Name: Název: - + Consult the OpenLP manual for usage. Pro použití se podívejte do dokumentace. - + Revert to the default service name "%s". Vrátit na výchozí název služby "%s". - + Example: Příklad: - + X11 X11 - + Bypass X11 Window Manager Obejít správce oken X11 - + Syntax error. Chyba syntaxe. @@ -2254,34 +2361,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Vznikla chyba - + 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. Jejda! V aplikaci OpenLP vznikl problém, ze kterého není možné se zotavit. Text v polícku níže obsahuje informace, které mohou být užitečné pro vývojáře aplikace OpenLP. Zašlete je prosím spolu s podrobným popisem toho, co jste dělal, když problém vzniknul, na adresu bugs@openlp.org. - + Send E-Mail Poslat e-mail - + Save to File Uložit do souboru - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Zadejte prosím popis toho, co jste prováděl, když vznikla tato chyba (Minimálně 20 znaků) - + Attach File Přiložit soubor @@ -2592,79 +2699,75 @@ Version: %s Custom Slides Uživatelské snímky + + + Finish + Konec + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Není dostupné internetové připojení. Průvodce prvním spuštění potřebuje internetové připojení ke stažení ukázek písní, Biblí a motivů. Pro spuštění aplikace OpenLP ve výchozím nastavení a bez ukázkových dat klepněte na tlačítko Konec. - -Průvodce prvním spuštění a import ukázkových dat lze znovu spustit později. Prověřte internetové připojení a v aplikaci OpenLP znovu spusťte průvode vybráním "Nástroje/Znovu spustit průvode prvním spuštění". + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Zrušit Průvodce prvním spuštění úplně (OpenLP nebude spuštěno), klepněte teď na tlačítko zrušit. - - - - Finish - Konec +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Nastavit formátovací značky - + Edit Selection Upravit výběr - + Save Uložit - + Description Popis - + Tag Značka - + Start tag Začátek značky - + End tag Konec značky - + Tag Id Id značky - + Start HTML Začátek HTML - + End HTML Konec HTML @@ -2908,40 +3011,10 @@ Zrušit Průvodce prvním spuštění úplně (OpenLP nebude spuštěno), klepn Spustit audio na pozadí pozastavené - + Service Item Slide Limits Omezení snímku položky služby - - - &End Slide - &Poslední snímek - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Klávesy nahoru a dolu se zastaví na prvním a posledním snímku každé položky služby. - - - - &Wrap Slide - &Pokračovat prvním - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Klávesy nahoru a dolu přechází dokola z posledního na první snímek každé položky služby. - - - - &Next Item - &Další položka - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Klávesy nahoru a dolu přecházejí na další nebo předchozí položku služby od prvního k poslednímu snímku každé položky služby. - Override display position: @@ -2952,6 +3025,26 @@ Zrušit Průvodce prvním spuštění úplně (OpenLP nebude spuštěno), klepn Repeat track list Opakovat seznam stop + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2977,287 +3070,287 @@ Zrušit Průvodce prvním spuštění úplně (OpenLP nebude spuštěno), klepn 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/. @@ -3266,22 +3359,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 @@ -3292,82 +3385,82 @@ 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? - + 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ů. - + Print the current service. Tisk současné služby. - + &Recent Files &Nedávné soubory - + L&ock Panels &Uzamknout panely - + Prevent the panels being moved. Zabrání přesunu panelů. - + Re-run First Time Wizard Znovu spustit Průvodce prvním spuštění - + Re-run the First Time Wizard, importing songs, Bibles and themes. Znovu spustit Průvodce prvním spuštění, importovat písně, Bible a motivy. - + Re-run First Time Wizard? Znovu spustit Průvodce prvním spuštění? - + 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. @@ -3376,43 +3469,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Znovu spuštěním tohoto průvodce může dojít ke změně současného nastavení aplikace OpenLP a pravděpodobně budou přidány písně k existujícímu seznamu a změněn výchozí motiv. - + Clear List Clear List of recent files Vyprázdnit seznam - + Clear the list of recent files. Vyprázdnit seznam nedávných souborů. - + Configure &Formatting Tags... Nastavit &formátovací značky... - + Export OpenLP settings to a specified *.config file Export nastavení OpenLP do určitého *.config souboru - + Settings Nastavení - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Import nastavení OpenLP ze určitého *.config souboru dříve exportovaného na tomto nebo jiném stroji - + Import settings? Importovat nastavení? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3425,32 +3518,32 @@ Importováním nastavení dojde k trvalým změnám současného nastavení apli Importování nesprávných nastavení může zapříčinit náladové chování nebo nenormální ukončení aplikace OpenLP. - + Open File Otevřít soubor - + OpenLP Export Settings Files (*.conf) Soubory exportovaného nastavení OpenLP (*.conf) - + Import settings Import nastavení - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. Aplikace OpenLP se nyní zavře. Importovaná nastavení se použijí při příštim spuštění. - + Export Settings File Soubor exportovaného nastavení - + OpenLP Export Settings File (*.conf) Soubor exportovaného nastavení OpenLP (*.conf) @@ -3484,7 +3577,7 @@ Databáze: %s OpenLP.MediaManagerItem - + No Items Selected Nevybraná zádná položka @@ -3572,27 +3665,27 @@ Přípona není podporována OpenLP.PluginForm - + Plugin List Seznam modulů - + Plugin Details Podrobnosti k modulu - + Status: Stav: - + Active Aktivní - + Inactive Neaktivní @@ -3615,12 +3708,12 @@ Přípona není podporována OpenLP.PrintServiceDialog - + Fit Page Přizpůsobit stránce - + Fit Width Přizpůsobit šířce @@ -3628,7 +3721,7 @@ Přípona není podporována OpenLP.PrintServiceForm - + Options Možnosti @@ -3643,47 +3736,47 @@ Přípona není podporována Kopírovat jako HTML - + Zoom In Zvětšit - + Zoom Out Zmenšit - + Zoom Original Původní velikost - + Other Options Ostatní možnosti - + Include slide text if available Zahrnout text snímku, pokud je k dispozici - + Include service item notes Zahrnout poznámky položky služby - + Include play length of media items Zahrnout délku přehrávání mediálních položek - + Add page break before each text item Přidat zalomení stránky před každou textovou položku - + Service Sheet List služby @@ -3693,12 +3786,12 @@ Přípona není podporována Tisk - + Title: Nadpis: - + Custom Footer Text: Uživatelský text zápatí: @@ -3732,7 +3825,7 @@ Přípona není podporována OpenLP.ServiceItemEditForm - + Reorder Service Item Změnit pořadí Položky služby @@ -3740,189 +3833,189 @@ Přípona není podporována OpenLP.ServiceManager - + Move to &top Přesun &nahoru - + Move item to the top of the service. Přesun položky ve službě úplně nahoru. - + Move &up Přesun &výše - + Move item up one position in the service. Přesun položky ve službě o jednu pozici výše. - + Move &down P?esun &níže - + Move item down one position in the service. P?esun položky ve služb? o jednu pozici níže. - + Move to &bottom Přesun &dolu - + Move item to the end of the service. Přesun položky ve službě úplně dolů. - + &Delete From Service &Smazat ze služby - + Delete the selected item from the service. Smazat vybranou položku ze služby. - + &Add New Item &Přidat novou položku - + &Add to Selected Item &Přidat k vybrané položce - + &Edit Item &Upravit položku - + &Reorder Item &Změnit pořadí položky - + &Notes &Poznámky - + &Change Item Theme &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. - + Missing Display Handler Chybějící obsluha zobrazení - + Your item cannot be displayed as there is no handler to display it Položku není možno zobrazit, protože chybí obsluha pro její zobrazení - + Your item cannot be displayed as the plugin required to display it is missing or inactive Položku není možno zobrazit, protože modul potřebný pro zobrazení položky chybí nebo je neaktivní - + &Expand all &Rozvinou vše - + Expand all the service items. Rozvinout všechny položky služby. - + &Collapse all &Svinout vše - + Collapse all the service items. Svinout všechny položky služby. - + Open File Otevřít soubor - + Moves the selection down the window. Přesune výběr v rámci okna dolu. - + Move up Přesun nahoru - + Moves the selection up the window. Přesune výběr v rámci okna nahoru. - + Go Live Zobrazit naživo - + Send the selected item to Live. Zobrazí vybranou položku naživo. - + &Start Time &Spustit čas - + Show &Preview Zobrazit &náhled - + Show &Live 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? @@ -3942,72 +4035,72 @@ Obsah souboru není v kódování UTF-8. Čas přehrávání: - + Untitled Service Prázdná služba - + 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 - + Load an existing service. Načíst existující službu. - + Save this service. Uložit tuto službu. - + Select a theme for the service. Vybrat motiv pro službu. - + This file is either corrupt or it is not an OpenLP 2.0 service file. Soubor je buďto poškozen nebo se nejedná o soubor se službou z aplikace OpenLP 2.0. - + Service File Missing Chybějící soubor se službou - + Slide theme Motiv snímku - + Notes Poznámky - + Edit Upravit - + Service copy only Kopírovat jen službu @@ -4015,7 +4108,7 @@ Obsah souboru není v kódování UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Poznámky položky služby @@ -4031,12 +4124,12 @@ Obsah souboru není v kódování UTF-8. OpenLP.ShortcutListDialog - + Action Činnost - + Shortcut Zkratka @@ -4051,32 +4144,32 @@ Obsah souboru není v kódování UTF-8. Zkratka "%s" je už přiřazena jiné činnosti. Použijte prosím jinou zkratku. - + Alternate Alternativa - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Zadání nové hlavní nebo alternativní zkratky se spustí vybráním činnosti a klepnutím na jedno z tlačítek níže. - + Default Výchozí - + Custom Uživatelský - + Capture shortcut. Zachytit zkratku. - + Restore the default shortcut of this action. Obnovit výchozí zkratku činnosti. @@ -4091,7 +4184,7 @@ Obsah souboru není v kódování UTF-8. Chcete obnovit všechny zkratky na jejich výchozí hodnoty? - + Configure Shortcuts Nastavit zkratky @@ -4258,11 +4351,6 @@ Obsah souboru není v kódování UTF-8. Background Audio Zvuk na pozadí - - - Next Track - Další stopa - Go to next audio track. @@ -4345,17 +4433,17 @@ Obsah souboru není v kódování UTF-8. Čas začátku je nastaven po času konce mediální položky - + Theme Layout Rozvržení motivu - + The blue box shows the main area. Modré políčko ukazuje hlavní oblast. - + The red box shows the footer. Červené políčko ukazuje zápatí. @@ -4456,62 +4544,62 @@ Obsah souboru není v kódování UTF-8. Nastavit jako &Globální výchozí - + %s (default) %s (výchozí) - + You must select a theme to edit. 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. - + You have not selected a theme. Není vybrán žádný motiv. - + Save Theme - (%s) Uložit motiv - (%s) - + Theme Exported Motiv exportován - + Your theme has been successfully exported. Motiv byl úspěšně exportován. - + Theme Export Failed Export motivu selhal - + Your theme could not be exported due to an error. Kvůli chybě nebylo možno motiv exportovat. - + Select Theme Import File Vybrat soubor k importu motivu - + File is not a valid theme. Soubor není platný motiv. @@ -4531,58 +4619,58 @@ Obsah souboru není v kódování UTF-8. &Export motivu - + You must select a theme to rename. K přejmenování je třeba vybrat motiv. - + Rename Confirmation Potvrzení přejmenování - + Rename %s theme? Přejmenovat motiv %s? - + You must select a theme to delete. Pro smazání je třeba vybrat motiv. - + Delete Confirmation Potvrzení smazání - + Delete %s theme? Smazat motiv %s? - + Validation Error Chyba ověřování - + A theme with this name already exists. Motiv s tímto názvem již existuje. - + OpenLP Themes (*.theme *.otz) OpenLP motivy (*.theme *.otz) - + Copy of %s Copy of <theme name> Kopie %s - + Theme Already Exists Motiv již existuje @@ -4590,222 +4678,222 @@ 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: @@ -4815,47 +4903,47 @@ Obsah souboru není v kódování UTF-8. 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: Barva začátku: - + Ending color: Barva konce: - + Background color: Barva pozadí: - + Justify Do bloku - + Layout Preview Náhled rozvržení - + Transparent Průhledný @@ -4863,42 +4951,42 @@ Obsah souboru není v kódování UTF-8. OpenLP.ThemesTab - + Global Theme Globální motiv - + Theme Level Úroveň motivu - + S&ong Level Úroveň &písně - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Použít motiv z každé písně z databáze. Pokud píseň nemá přiřazen motiv, potom se použije motiv služby. Pokud služba nemá motiv, pak se použije globální motiv. - + &Service Level Úroveň &služby - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Použitím motivu ze služby se překryje motiv jednotlivých písní. Pokud služba nemá motiv, tak se použije globální motiv. - + &Global Level &Globální úroveň - + Use the global theme, overriding any themes associated with either the service or the songs. Použitím globálního motivu se překryjí motivy, které jsou přiřazeny službám nebo písním. @@ -5144,22 +5232,22 @@ Obsah souboru není v kódování UTF-8. Verze - + Delete the selected item. Smazat vybranou položku. - + Move selection up one position. Přesun výběru o jednu pozici výše. - + Move selection down one position. Přesun výběru o jednu pozici níže. - + &Vertical Align: &Svislé zarovnání: @@ -5225,7 +5313,7 @@ Obsah souboru není v kódování UTF-8. Je třeba specifikovat alespoň jeden %s soubor, ze kterého se bude importovat. - + Welcome to the Bible Import Wizard Vítejte v průvodci importu Bible @@ -5408,11 +5496,6 @@ Obsah souboru není v kódování UTF-8. Reset live background. Obnovit pozadí naživo. - - - &Split - &Rozdělit - Split a slide into two only if it does not fit on the screen as one slide. @@ -5459,29 +5542,34 @@ Obsah souboru není v kódování UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 a %2 - + %1, and %2 Locale list separator: end %1 and %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5556,17 +5644,17 @@ Obsah souboru není v kódování UTF-8. Nyní používající: - + File Exists Soubor existuje - + A presentation with that filename already exists. Prezentace s tímto názvem souboru už existuje. - + This type of presentation is not supported. Tento typ prezentace není podporován. @@ -5576,17 +5664,17 @@ Obsah souboru není v kódování UTF-8. Prezentace (%s) - + Missing Presentation Chybějící prezentace - + The Presentation %s no longer exists. Prezentace %s už neexistuje. - + The Presentation %s is incomplete, please reload. Prezentace %s není kompletní, prosím načtěte ji znovu. @@ -5667,11 +5755,6 @@ Obsah souboru není v kódování UTF-8. Search Hledat - - - Back - Zpět - Refresh @@ -5683,50 +5766,70 @@ Obsah souboru není v kódování UTF-8. Prázdný - + Show Zobrazit - + Prev Předchozí - + Next Další - + Text Text - + Show Alert Zobrazit upozornění - + Go Live Zobrazit naživo - + No Results Žádné hledání - + Options Možnosti - + Add to Service Přidat ke službě + + + Home + + + + + Theme + Motiv + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5860,7 +5963,7 @@ Obsah souboru není v kódování UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Smazat data používání písní @@ -5885,7 +5988,7 @@ Obsah souboru není v kódování UTF-8. 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. Vyberte datum, ke kterému se smažou data o používání písní. Všechna data, zaznamenaná před tímto datumem budou natrvalo smazána. @@ -5893,22 +5996,22 @@ Obsah souboru není v kódování UTF-8. 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í @@ -6187,210 +6290,223 @@ Kódování zodpovídá za správnou reprezentaci znaků. EasyWorship] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Editor písně - + &Title: &Název: - + Alt&ernate title: &Jiný název: - + &Lyrics: &Text písně: - + &Verse order: &Pořadí veršů: - + Ed&it All &Upravit vše - + Title && Lyrics Název a text písně - + &Add to Song &Přidat k písni - + &Remove &Odstranit - + &Manage Authors, Topics, Song Books &Správa autorů, témat a zpěvníků - + A&dd to Song &Přidat k písni - + R&emove &Odstranit - + Book: Zpěvník: - + Number: Číslo: - + Authors, Topics && Song Book Autoři, témata a zpěvníky - + New &Theme Nový &motiv - + Copyright Information Informace o autorském právu - + Comments Komentáře - + Theme, Copyright Info && Comments Motiv, autorská práva a komentáře - + Add Author Přidat autora - + This author does not exist, do you want to add them? Tento autor neexistuje. Chcete ho přidat? - + This author is already in the list. Tento autor je už v seznamu. - + 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. Není vybrán platný autor. Buďto vyberte autora ze seznamu nebo zadejte nového autora a pro přidání nového autora klepněte na tlačítko "Přidat autora k písni". - + Add Topic Přidat téma - + This topic does not exist, do you want to add it? Toto téma neexistuje. Chcete ho přidat? - + This topic is already in the list. Toto téma je už v seznamu. - + 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. Není vybráno platné téma. Buďto vyberte téma ze seznamu nebo zadejte nové téma a pro přidání nového tématu klepněte na tlačítko "Přidat téma k písni". - + You need to type in a song title. Je potřeba zadat název písne. - + You need to type in at least one verse. Je potřeba zadat alespoň jednu sloku. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Pořadí částí písně není platné. Část odpovídající %s neexistuje. Platné položky jsou %s. - + Add Book Přidat zpěvník - + This song book does not exist, do you want to add it? Tento zpěvník neexistuje. Chcete ho přidat? - + You need to have an author for this song. Pro tuto píseň je potřeba zadat autora. - + You need to type some text in to the verse. Ke sloce je potřeba zadat nějaký text. - + Linked Audio Připojený zvuk - + Add &File(s) Přidat &soubor(y) - + Add &Media Přidat &Médium - + Remove &All Odstranit &Vše - + Open File(s) Otevřít soubor(y) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Varování:</strong> Nejsou použity všechny sloky. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. Pořadí částí písně není platné. Část odpovídající %s neexistuje. Platné položky jsou %s. @@ -6637,12 +6753,12 @@ Kódování zodpovídá za správnou reprezentaci znaků. SongsPlugin.MediaFilesForm - + Select Media File(s) Vybrat mediální soubor(y) - + Select one or more audio files from the list below, and click OK to import them into this song. Vyberte jeden nebo více zvukových souborů ze seznamu níže a importovat je k písni lze klepnutím na tlačítko OK. @@ -6660,7 +6776,7 @@ Kódování zodpovídá za správnou reprezentaci znaků. Text písně - + CCLI License: CCLI Licence: @@ -6684,7 +6800,7 @@ Kódování zodpovídá za správnou reprezentaci znaků. Spravovat seznamy autorů, témat a zpěvníků. - + copy For song cloning kopírovat @@ -6778,12 +6894,12 @@ Kódování zodpovídá za správnou reprezentaci znaků. SongsPlugin.SongImport - + copyright autorská práva - + The following songs could not be imported: Následující písně nemohly být importovány: @@ -6943,8 +7059,8 @@ Kódování zodpovídá za správnou reprezentaci znaků. - Add missing songs when opening service - Přidat chybějící písně při otevření služby + Import missing songs from service files + diff --git a/resources/i18n/da.ts b/resources/i18n/da.ts index fa42a29cb..551520e25 100644 --- a/resources/i18n/da.ts +++ b/resources/i18n/da.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Meddelelse - + Alert &text: Te&kst: - + &New &Ny - + &Save &Gem - + Displ&ay V&is - + Display && Cl&ose Vis && l&uk @@ -79,7 +79,7 @@ Du har ikke angivet nogen tekst til din meddelelse. Skriv noget tekst og tryk så på Ny. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Vil du fortsætte alligevel? AlertsPlugin.AlertsTab - + Font Skrifttype - + Font name: Skriftnavn: - + Font color: Skriftfarve: - + Background color: Baggrundsfarve: - + Font size: Skriftstørrelse: - + Alert timeout: Varighed af meddelse: @@ -661,42 +661,87 @@ Vil du fortsætte alligevel? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Vælg et udgavenavn til din bibel. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Angiv din bibels ophavsret. Bibler i Public Domain skal markeres som værende sådan. + + + + Bible Exists + Bibel eksisterer + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Denne bibel eksisterer allerede. Importér en anden bibel, eller slet først den eksisterende bibel. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Fejl med skriftsted - + Web Bible cannot be used Netbibelen kan ikke bruges - + Text Search is not available with Web Bibles. Tekstsøgning virker ikke med netbibler. - + 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. Du indtastede ikke et søgeord. Du kan opdele forskellige søgeord med mellemrum for at søge efter alle søgeordene, og du kan opdele dem med et komma for at søge efter ét af dem. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Der er ikke installeret nogle bibler på nuværende tidspunkt. Benyt import-guiden til at installere én eller flere bibler. - + No Bibles Available Ingen bibler tilgængelige - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -811,80 +856,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English Dansk - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name Vælg bogens navn - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Det følgende bognavn kan stemmer ikke overens. Vælg det tilsvarende engelske navn fra listen. - + Current name: Nuværende navn: - + Corresponding name: Tilsvarende navn: - + Show Books From Vis bøger fra - + Old Testament Gamle Testamente - + New Testament Nye Testamente - + Apocrypha Apokryfe skrifter @@ -916,6 +953,75 @@ Bible should be displayed in the Bible search: Importerer vers... færdig. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Licens detaljer + + + + Version name: + Navn på udgave: + + + + Copyright: + Ophavsret: + + + + Permissions: + Tilladelser: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + Dansk + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -958,167 +1064,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bibel-import guide - + 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. Denne guide vil hjælpe dig med at importere bibler med forskellige formater. Klik på næsteknappen herunder for at begynde processen ved at vælge et format at importere fra. - + Web Download Hentning fra netten - + Location: Placering: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bibel: - + Download Options Hentingsmuligheder - + Server: Server: - + Username: Brugernavn: - + Password: Adgangskode: - + Proxy Server (Optional) Proxy server (valgfri) - + License Details Licens detaljer - + Set up the Bible's license details. Indstil bibelens licensdetaljer. - + Version name: Navn på udgave: - + Copyright: Ophavsret: - + Please wait while your Bible is imported. Vent venligst imens din bibel bliver importeret. - + You need to specify a file with books of the Bible to use in the import. Angiv en fil med bøger fra Bibelen der skal importeres. - + You need to specify a file of Bible verses to import. Vælg en fil med bibelvers der skal importeres. - + You need to specify a version name for your Bible. Vælg et udgavenavn til din bibel. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Angiv din bibels ophavsret. Bibler i Public Domain skal markeres som værende sådan. - + Bible Exists Bibel eksisterer - + This Bible already exists. Please import a different Bible or first delete the existing one. Denne bibel eksisterer allerede. Importér en anden bibel, eller slet først den eksisterende bibel. - + Your Bible import failed. Din bibelimport slog fejl. - + CSV File CSV fil - + Bibleserver Bibelserver - + Permissions: Tilladelser: - + Bible file: Bibelfil: - + Books file: Bogfil: - + Verses file: Versfil: - + openlp.org 1.x Bible Files openlp.org 1.x bibelfiler - + Registering Bible... Registrerer bibel... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Registrerede bibel. Bemærk venligst at vers hentes på @@ -1128,17 +1234,17 @@ forespørgsel og en internetforbindelse er derfor påkrævet. BiblesPlugin.LanguageDialog - + Select Language Vælg sprog - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP er ikke i stand til at bestemme bibeloversættelsens sprog. Vælg sproget fra listen herunder. - + Language: Sprog: @@ -1154,90 +1260,95 @@ forespørgsel og en internetforbindelse er derfor påkrævet. BiblesPlugin.MediaItem - + Quick Hurtig - + Find: Find: - + Book: Bog: - + Chapter: Kapitel: - + Verse: Vers: - + From: Fra: - + To: Til: - + Text Search Tekstsøgning - + Second: Anden: - + Scripture Reference Skriftsted - + Toggle to keep or clear the previous results. Vælg om du vil beholde eller fjerne de forrige resultater. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Du kan ikke kombinere søgeresultater med enkelte og dobbelte bibelvers. Vil du slette dine søgeresultater og starte en ny søgning? - + Bible not fully loaded. Bibel ikke færdigindlæst. - + 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. Den sekundære bibel indeholder ikke alle versene der er i den primære bibel. Kun de vers der kan findes i begge bibler vil blive vist. %d vers er ikke blevet inkluderet blandt resultaterne. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1251,12 +1362,12 @@ forespørgsel og en internetforbindelse er derfor påkrævet. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Bestemmer indkodning (dette kan tage et par minutter)... - + Importing %s %s... Importing <book name> <chapter>... Importerer %s %s... @@ -1493,42 +1604,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides Redigér brugerdefinerede dias - + &Title: &Titel: - + Add a new slide at bottom. Tilføj et nyt dias i bunden. - + Edit the selected slide. Redigér det valgte dias. - + Edit all the slides at once. Redigér alle dias på samme tid. - + Split a slide into two by inserting a slide splitter. Del et dias op i to ved at indsætte en diasopdeler. - + The&me: T&ema: - + &Credits: &Bidragsydere: @@ -1543,12 +1654,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Du skal tilføje mindst ét dias - + Ed&it All Re&digér alle - + Insert Slide Indsæt dias @@ -1646,34 +1757,34 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Du skal vælge et billede som skal slettes. - + You must select an image to replace the background with. - + Missing Image(s) Manglende billede(r) - + The following image(s) no longer exist: %s De følgende billeder eksisterer ikke længere: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? De følgende billeder eksisterer ikke længere: %s Vil du tilføje de andre billede alligevel? - + There was a problem replacing your background, the image file "%s" no longer exists. - + There was no display item to amend. @@ -1681,18 +1792,18 @@ Vil du tilføje de andre billede alligevel? ImagesPlugin.ImageTab - + Background Color Baggrundsfarve - + Default Color: Standardfarve: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1818,22 +1929,22 @@ Vil du tilføje de andre billede alligevel? MediaPlugin.MediaTab - + Available Media Players Tilgængelige medieafspillere - + %s (unavailable) %s (utilgængelig) - + Player Order Afspilningsrækkefølge - + Allow media player to be overridden @@ -1863,17 +1974,17 @@ Skal OpenLP opgradere dem nu? OpenLP.AboutForm - + Credits Bidragsydere - + License Licens - + Contribute Hjælp os @@ -1883,17 +1994,17 @@ Skal OpenLP opgradere dem nu? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Dette program er fri software; du kan redistribuere det og/eller redigere det under betingelserne i GNU General Public License, som udgivet af Free Software Foundation; version 2 af licensen. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Dette program udgives i håbet om at det vil være brugbart, men UDEN NOGEN GARANTI; endda uden den forudsatte garanti om SALGSEGNETHED eller EGNETHED TIL ET BESTEMT FORMÅL. Se herunder for flere detaljer. - + Project Lead %s @@ -2018,7 +2129,7 @@ Afsluttende tak han har gjort os fri. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2029,7 +2140,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -2038,62 +2149,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Brugerfladeindstillinger - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor Musemarkør - + Hide mouse cursor when over display window Gem musemarkøren når den er over visningsvinduet - + Default Image Standardbillede - + Background color: Baggrundsfarve: - + Image file: Billedfil: - + Open File Åben fil @@ -2103,124 +2214,124 @@ Portions copyright © 2004-2012 %s Avanceret - + Preview items when clicked in Media Manager - + Click to select a color. Klik for at vælge en farve. - + Browse for an image file to display. Find en billedfil som skal vises. - + Revert to the default OpenLP logo. Vend tilbage til standard OpenLP logoet. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2228,34 +2339,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Fejl opstod - + 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. Ups! OpenLP stødte ind i et problem, og kunne ikke gendanne. Teksten i kassen herunder indeholder information som kan være nyttig for OpenLP-udviklerne, så send venligst en e-mail til bugs@openlp.org sammen med en detaljeret beskrivelse af, hvad du foretog dig da problemet opstod. - + Send E-Mail Send e-mail - + Save to File Gem til fil - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Indtast venligst en beskrivelse af det du foretog dig der fik denne fejl til at opstå (Mindst 20 tegn) - + Attach File Vedhæft fil @@ -2540,9 +2651,14 @@ Version: %s Custom Slides Brugerdefinerede dias + + + Finish + Færdig + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2551,64 +2667,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. - - - Finish - Færdig - OpenLP.FormattingTagDialog - + Configure Formatting Tags Konfigurér formatteringsmærker - + Edit Selection Redigér markering - + Save Gem - + Description Beskrivelse - + Tag Mærke - + Start tag Start mærke - + End tag Afslut mærke - + Tag Id Mærke id - + Start HTML Start HTML - + End HTML Afslut HTML @@ -2852,40 +2963,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Start baggrundslyd på pause - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2896,6 +2977,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2921,309 +3022,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can OpenLP.MainWindow - + &File &Fil - + &Import &Importér - + &Export &Eksportér - + &View &Vis - + M&ode O&psætning - + &Tools &Værktøjer - + &Settings &Indstillinger - + &Language &Sprog - + &Help &Hjælp - + Media Manager Mediehåndtering - + Service Manager - + Theme Manager Temahåndtering - + &New &Ny - + &Open &Åben - + Open an existing service. - + &Save &Gem - + Save the current service to disk. - + Save &As... Gem &som... - + Save Service As Gem program som - + Save the current service under a new name. Gem det nuværende program under et nyt navn. - + E&xit A&fslut - + Quit OpenLP Luk OpenLP - + &Theme &Tema - + &Configure OpenLP... &Indstil OpenLP... - + &Media Manager &Mediehåndtering - + Toggle Media Manager - + Toggle the visibility of the media manager. Skift synligheden af mediehåndteringen. - + &Theme Manager &Temahåndtering - + Toggle Theme Manager - + Toggle the visibility of the theme manager. Skift synligheden af temahåndteringen. - + &Service Manager - + Toggle Service Manager - + Toggle the visibility of the service manager. - + &Preview Panel &Forhåndsvisningspanelet - + Toggle Preview Panel - + Toggle the visibility of the preview panel. Skift synligheden af forhåndsvisningspanelet. - + &Live Panel &Livepanel - + Toggle Live Panel - + Toggle the visibility of the live panel. Skift synligheden af livepanelet. - + &Plugin List - + List the Plugins - + &User Guide - + &About &Om - + More information about OpenLP Mere information om OpenLP - + &Online Help &Online hjælp - + &Web Site &Hjemmeside - + Use the system language, if available. Benyt systemsproget, hvis det er muligt. - + Set the interface language to %s - + Add &Tool... Tilføj &Værktøj... - + Add an application to the list of tools. Tilføj et program til listen over værktøjer. - + &Default &Standard - + Set the view mode back to the default. Sæt visningsopsætningen tilbage til stadard. - + &Setup &Opsætning - + Set the view mode to Setup. Sæt visningsopsætningen til Opsætning. - + &Live &Live - + Set the view mode to Live. Sæt visningsopsætningen til 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 version opdateret - + OpenLP Main Display Blanked - + The Main Display has been blanked out - + Default Theme: %s Standard tema: %s @@ -3234,125 +3335,125 @@ You can download the latest version from http://openlp.org/. Dansk - + Configure &Shortcuts... Konfigurér g&enveje... - + Close OpenLP Luk OpenLP - + Are you sure you want to close OpenLP? Er du sikker på at du vil lukke OpenLP? - + Open &Data Folder... - + Open the folder where songs, bibles and other data resides. - + &Autodetect &Autodetektér - + Update Theme Images Opdatér temabilleder - + Update the preview images for all themes. - + Print the current service. Udskriv det nuværende program. - + &Recent Files - + L&ock Panels L&ås paneler - + 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 Ryd liste - + Clear the list of recent files. - + Configure &Formatting Tags... - + Export OpenLP settings to a specified *.config file - + Settings Indstillinger - + Import OpenLP settings from a specified *.config file previously exported on this or another machine - + Import settings? Importér indstillinger? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3361,32 +3462,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + Open File Åben fil - + OpenLP Export Settings Files (*.conf) - + Import settings Importér indstillinger - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. - + Export Settings File - + OpenLP Export Settings File (*.conf) @@ -3418,7 +3519,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected Ingen elementer valgt @@ -3506,27 +3607,27 @@ Endelsen er ikke understøttet OpenLP.PluginForm - + Plugin List Liste over udvidelser - + Plugin Details Detaljer om udvidelser - + Status: Status: - + Active Aktiv - + Inactive Inaktiv @@ -3549,12 +3650,12 @@ Endelsen er ikke understøttet OpenLP.PrintServiceDialog - + Fit Page Tilpas til siden - + Fit Width Tilpas til bredden @@ -3562,7 +3663,7 @@ Endelsen er ikke understøttet OpenLP.PrintServiceForm - + Options Indstillinger @@ -3577,47 +3678,47 @@ Endelsen er ikke understøttet Kopiér som HTML - + Zoom In Zoom ind - + Zoom Out Zoom ud - + Zoom Original Zoom Original - + Other Options Andre indstillinger - + Include slide text if available - + Include service item notes - + Include play length of media items - + Add page break before each text item - + Service Sheet @@ -3627,12 +3728,12 @@ Endelsen er ikke understøttet Udskriv - + Title: Titel: - + Custom Footer Text: Brugerdefineret sidefod: @@ -3666,7 +3767,7 @@ Endelsen er ikke understøttet OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3674,189 +3775,189 @@ Endelsen er ikke understøttet OpenLP.ServiceManager - + Move to &top Flyt til &top - + Move item to the top of the service. Flyt element til toppen af programmet. - + Move &up Flyt &op - + Move item up one position in the service. Flyt element en placering op i programmet. - + Move &down Flyt &ned - + Move item down one position in the service. Flyt element en placering ned i programmet. - + Move to &bottom Flyt til &bunden - + Move item to the end of the service. Flyt element til slutningen af programmet. - + &Delete From Service &Slet fra programmet - + Delete the selected item from the service. Slet det valgte element fra programmet. - + &Add New Item &Tilføj nyt emne - + &Add to Selected Item &Tilføj til det valgte emne - + &Edit Item &Redigér emne - + &Reorder Item &Omrokér element - + &Notes &Noter - + &Change Item Theme - + OpenLP Service Files (*.osz) OpenLP-programfiler (*.osz) - + File is not a valid service. The content encoding is not UTF-8. Fil er ikke et gyldigt program. Indholdet er ikke UTF-8. - + File is not a valid service. Fil er ikke et gyldigt program. - + 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 - + &Expand all &Udvid alle - + Expand all the service items. Udvid alle program-elementerne. - + &Collapse all &Sammenfold alle - + Collapse all the service items. Sammenfold alle program-elementerne. - + Open File Åben fil - + Moves the selection down the window. - + Move up Flyt op - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time &Start tid - + Show &Preview Vis &forhåndsvisning - + Show &Live Vis &live - + Modified Service Modificeret program - + The current service has been modified. Would you like to save this service? Det nuværende program er blevet ændret. Vil du gemme dette program? @@ -3876,72 +3977,72 @@ Indholdet er ikke UTF-8. Afspilningstid: - + Untitled Service Unavngivet program - + File could not be opened because it is corrupt. Fil kunne ikke åbnes da den er korrupt. - + Empty File Tom fil - + This service file does not contain any data. - + Corrupt File Korrupt fil - + Load an existing service. Indlæs et eksisterende program. - + Save this service. Gem dette program. - + Select a theme for the service. Vælg et tema for dette program. - + This file is either corrupt or it is not an OpenLP 2.0 service file. - + Service File Missing - + Slide theme Diastema - + Notes Noter - + Edit Redigér - + Service copy only @@ -3949,7 +4050,7 @@ Indholdet er ikke UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3965,12 +4066,12 @@ Indholdet er ikke UTF-8. OpenLP.ShortcutListDialog - + Action Handling - + Shortcut Genvej @@ -3985,32 +4086,32 @@ Indholdet er ikke UTF-8. Genvejen "%s" er allerede tilknyttet til en anden handling, brug en anden genvej. - + Alternate - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. - + Default Standard - + Custom Brugerdefineret - + Capture shortcut. Indfang genvej. - + Restore the default shortcut of this action. Gendan denne handlings standardgenvej. @@ -4025,7 +4126,7 @@ Indholdet er ikke UTF-8. Vil du gendanne alle genveje til deres standardværdier? - + Configure Shortcuts Konfigurér genveje @@ -4192,11 +4293,6 @@ Indholdet er ikke UTF-8. Background Audio Baggrundslyd - - - Next Track - - Go to next audio track. @@ -4279,17 +4375,17 @@ Indholdet er ikke UTF-8. - + Theme Layout Tema layout - + The blue box shows the main area. Den blå kasse viser hovedområdet. - + The red box shows the footer. Den røde kasse viser sidefoden. @@ -4390,62 +4486,62 @@ Indholdet er ikke UTF-8. Indstil som &global standard - + %s (default) %s (standard) - + You must select a theme to edit. Vælg det tema det skal redigeres. - + You are unable to delete the default theme. Du kan ikke slette standardtemaet. - + Theme %s is used in the %s plugin. Temaet %s bruges i tilføjelsen %s. - + You have not selected a theme. Du har ikke valgt et tema. - + Save Theme - (%s) Gem tema - (%s) - + Theme Exported Tema eksporteret - + Your theme has been successfully exported. Dit tema er nu blevet eksporteret. - + Theme Export Failed Eksport af tema slog fejl - + Your theme could not be exported due to an error. Dit tema kunne ikke eksporteres på grund af en fejl. - + Select Theme Import File Vælg tema-importfil - + File is not a valid theme. Filen er ikke et gyldigt tema. @@ -4465,58 +4561,58 @@ Indholdet er ikke UTF-8. &Eksportér tema - + You must select a theme to rename. Vælg det tema der skal omdøbes. - + Rename Confirmation Bekræt omdøbning - + Rename %s theme? Omdøb temaet %s? - + You must select a theme to delete. Vælg det tema der skal slettes. - + Delete Confirmation Bekræft sletning - + Delete %s theme? Slet temaet %s? - + Validation Error Fejl - + A theme with this name already exists. Et tema med dette navn eksisterer allerede. - + OpenLP Themes (*.theme *.otz) OpenLP temaer (*.theme *.otz) - + Copy of %s Copy of <theme name> Kopi af %s - + Theme Already Exists @@ -4524,222 +4620,222 @@ Indholdet er ikke UTF-8. OpenLP.ThemeWizard - + Theme Wizard Temaguide - + Welcome to the Theme Wizard Velkommen til temaguiden - + Set Up Background Indstil baggrund - + Set up your theme's background according to the parameters below. Indstil dit temas baggrund i henhold til parametrene herunder. - + Background type: Baggrundstype: - + Solid Color Ensfarvet - + Gradient Overgang - + Color: Farve: - + Gradient: Overgang: - + Horizontal Vandret - + Vertical Højret - + Circular Cirkulær - + Top Left - Bottom Right Øverst til venstre - nederst til højre - + Bottom Left - Top Right Nederst til venstre - øverst til højre - + Main Area Font Details Skriftdetaljer for hovedområdet - + Define the font and display characteristics for the Display text Definér skrifttypen og visningskarakteristik for visningsteksten - + Font: Skrifttype: - + Size: Størrelse: - + Line Spacing: Linjeafstand: - + &Outline: &Disposition: - + &Shadow: &Skygge: - + Bold Fed - + Italic Kursiv - + Footer Area Font Details Skriftdetaljer for sidefoden - + Define the font and display characteristics for the Footer text Definér skrifttypen og visningskarakteristik for teksten i sidefoden - + Text Formatting Details Detaljeret tekstformattering - + Allows additional display formatting information to be defined - + Horizontal Align: Justér horisontalt: - + Left Venstre - + Right Højre - + Center Centrér - + Output Area Locations Placeringer for output-området - + Allows you to change and move the main and footer areas. - + &Main Area &Hovedområde - + &Use default location &Benyt standardplacering - + X position: X position: - + px px - + Y position: Y position: - + Width: Bredde: - + Height: Højde: - + Use default location Benyt standardplacering - + Save and Preview Gem og forhåndsvis - + View the theme and save it replacing the current one or change the name to create a new theme Vis temaet og gem det ved at erstatte det nuværende, eller ved at skifte navnet for at oprette et nyt tema - + Theme name: Temanavn: @@ -4749,47 +4845,47 @@ Indholdet er ikke UTF-8. Redigér tema - %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. Denne guide vil hjælp dig med at oprette og redigere dine temaer. Klik på næste-knappen for at begynde processen ved at indstille din baggrund. - + Transitions: Overgange: - + &Footer Area &Sidefodsområde - + Starting color: Startfarve: - + Ending color: Slutfarve: - + Background color: Baggrundsfarve: - + Justify Lige margener - + Layout Preview Layout forhåndsvisning - + Transparent @@ -4797,42 +4893,42 @@ Indholdet er ikke UTF-8. OpenLP.ThemesTab - + Global Theme Globalt tema - + Theme Level Tema niveau - + S&ong Level S&ang niveau - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level &Globalt niveau - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -5078,22 +5174,22 @@ Indholdet er ikke UTF-8. Udgave - + Delete the selected item. Slet det valgte element. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: &Justér lodret: @@ -5159,7 +5255,7 @@ Indholdet er ikke UTF-8. - + Welcome to the Bible Import Wizard @@ -5342,11 +5438,6 @@ Indholdet er ikke UTF-8. Reset live background. Nulstil live-baggrund. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5393,29 +5484,34 @@ Indholdet er ikke UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5490,17 +5586,17 @@ Indholdet er ikke UTF-8. Præsentér med: - + File Exists Fil eksisterer - + A presentation with that filename already exists. En præsentation med dette filnavn eksisterer allereder. - + This type of presentation is not supported. Denne type præsentation er ikke understøttet. @@ -5510,17 +5606,17 @@ Indholdet er ikke UTF-8. Præsentationer (%s) - + Missing Presentation Manglende præsentation - + The Presentation %s no longer exists. Præsentationen %s eksisterer ikke længere. - + The Presentation %s is incomplete, please reload. Præsentationen %s er ufuldstændig, prøv at genindlæse. @@ -5601,11 +5697,6 @@ Indholdet er ikke UTF-8. Search Søg - - - Back - Tilbage - Refresh @@ -5617,50 +5708,70 @@ Indholdet er ikke UTF-8. Gør blank - + Show Vis - + Prev Forrige - + Next Næste - + Text Tekst - + Show Alert Vis meddelelse - + Go Live - + No Results Ingen resultater - + Options Indstillinger - + Add to Service Tilføj til program + + + Home + + + + + Theme + Tema + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5794,7 +5905,7 @@ Indholdet er ikke UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Slet sangforbrugsdata @@ -5819,7 +5930,7 @@ Indholdet er ikke UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5827,22 +5938,22 @@ Indholdet er ikke UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range Vælg dataomfang - + to til - + Report Location Rapportér lokation @@ -6116,210 +6227,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: &Titel: - + Alt&ernate title: Alt&ernativ titel: - + &Lyrics: &Sangtekst: - + &Verse order: &Rækkefølge af vers: - + Ed&it All Re&digér alle - + Title && Lyrics Titel && sangtekst - + &Add to Song &Tilføj til sang - + &Remove &Fjern - + &Manage Authors, Topics, Song Books &Administrér forfattere, emner, sangbøger - + A&dd to Song T&ilføj til sang - + R&emove F&jern - + Book: Bog: - + Number: Nummer: - + Authors, Topics && Song Book Forfattere, emner && sangbøger - + New &Theme Nyt &tema - + Copyright Information Information om ophavsret - + Comments Kommentarer - + Theme, Copyright Info && Comments Tema, ophavsret && kommentarer - + Add Author Tilføj forfatter - + This author does not exist, do you want to add them? Denne forfatter eksisterer ikke. Vil du tilføje dem? - + This author is already in the list. Denne forfatter er allerede på listen. - + 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. Du har ikke valgt en gyldig forfatter. Vælg enten en forfatter fra liste, eller indtast en ny forfatter og klik på "Tilføj forfatter til sang"-knappen for at tilføje den nye forfatter. - + Add Topic Tilføj emne - + This topic does not exist, do you want to add it? Dette emne eksisterer ikke. Vil du tilføje det? - + This topic is already in the list. Dette emne er allerede på listen. - + 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. Du har ikke valgt et gyldigt emne. Vælg enten et emne fra listen, eller indtast et nyt emne og klik på "Tilføj emne til sang"-knappen for at tilføje det nye emne. - + You need to type in a song title. Vælg først en sangtitel. - + You need to type in at least one verse. Skriv mindst ét vers. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Rækkefølgen af vers er ikke gyldig. Der ikke noget vers som svarer til %s. Gyldige elementer er %s. - + Add Book Tilføj bog - + This song book does not exist, do you want to add it? Denne sangbog eksisterer ikke. Ønsker du at tilføje den? - + You need to have an author for this song. Du mangler en forfatter til denne sang. - + You need to type some text in to the verse. Du mangler at skrive noget tekst ind til verset. - + Linked Audio Sammenkædet lydspor - + Add &File(s) Tilføj &fil(er) - + Add &Media Tilføj &medier - + Remove &All Fjern &alt - + Open File(s) Åben fil(er) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6566,12 +6690,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) Vælg mediefil(er) - + Select one or more audio files from the list below, and click OK to import them into this song. Vælg én eller flere lydfiler fra listen herunder, og klik OK for at importere dem ind i denne sang. @@ -6589,7 +6713,7 @@ The encoding is responsible for the correct character representation. Sangtekst - + CCLI License: CCLI Licens: @@ -6612,7 +6736,7 @@ The encoding is responsible for the correct character representation. Vedligehold listen over forfattere, emner og bøger. - + copy For song cloning @@ -6706,12 +6830,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright ophavsret - + The following songs could not be imported: De følgende sange kunne ikke importeres: @@ -6871,8 +6995,8 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service - Tilføj manglende sange når programmet åbnes + Import missing songs from service files + diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index 607d55aae..c57853b6f 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Hinweis - + Alert &text: Hinweis&text: - + &New &Neu - + &Save &Speichern - + Displ&ay &Anzeigen - + Display && Cl&ose An&zeigen && Schließen @@ -79,7 +79,7 @@ Der Hinweis enthält noch keinen Text. Bitte geben Sie einen Text an, bevor Sie auf »Neu« klicken. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Möchten Sie trotzdem fortfahren? AlertsPlugin.AlertsTab - + Font Schrift - + Font name: Schriftart: - + Font color: Schriftfarbe: - + Background color: Hintergrundfarbe: - + Font size: Schriftgröße: - + Alert timeout: Anzeigedauer: @@ -661,42 +661,87 @@ Möchten Sie trotzdem fortfahren? ,|v|V|Vers|Verse|:;;-|bis;;.|;|+|und;;Ende + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Bitte geben Sie den Namen der Bibelübersetzung ein. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Das Copyright muss angegeben werden. Gemeinfreie Bibeln ohne Copyright sind als solche zu kennzeichnen. + + + + Bible Exists + Übersetzung bereits vorhanden + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Diese Bibel existiert bereit. Bitte geben Sie einen anderen Übersetzungsnamen an oder löschen Sie zuerst die Existierende. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Fehler im Textverweis - + Web Bible cannot be used Für Onlinebibeln nicht verfügbar - + Text Search is not available with Web Bibles. In Onlinebibeln ist Textsuche nicht möglich. - + 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. Es wurde kein Suchbegriff eingegeben. Um nach mehreren Begriffen gleichzeitig zu suchen, müssen die Begriffe durch ein Leerzeichen getrennt sein. Alternative Suchbegriffe müssen per Komma getrennt sein. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Zurzeit sind keine Bibelübersetzungen installiert. Zur Suche muss eine solche mit dem Importassistent importiert werden. - + No Bibles Available Keine Bibeln verfügbar - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -796,49 +841,36 @@ Changes do not affect verses already in the service. Multiple alternative verse separators may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - Alternative Verstrenner können durch senkrechte Striche »|« getrennt angegeben werden. Der erste Trenner wird zur Darstellung in OpenLP genutzt. + Alternative Verstrenner können durch senkrechte +Striche »|« getrennt angegeben werden. Der erste +Trenner wird zur Darstellung in OpenLP genutzt. Multiple alternative range separators may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - Alternative Bereichstrenner können durch senkrechte Striche »|« getrennt angegeben werden. Der erste Trenner wird zur Darstellung in OpenLP genutzt. + Alternative Bereichstrenner können durch senkrechte +Striche »|« getrennt angegeben werden. Der erste +Trenner wird zur Darstellung in OpenLP genutzt. Multiple alternative list separators may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - Alternative Aufzählungstrenner können durch senkrechte Striche »|« getrennt angegeben werden. Der erste Trenner wird zur Darstellung in OpenLP genutzt. + Alternative Aufzählungstrenner können durch senkrechte +Striche »|« getrennt angegeben werden. Der erste +Trenner wird zur Darstellung in OpenLP genutzt. Multiple alternative end marks may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - Alternative Endmarkierungen können durch senkrechte Striche »|« getrennt angegeben werden. - - - - Preferred Bookname Language - Bevorzugte Sprache der Buchnamen - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Sprache der Buchnamen im Suchfeld: - - - - Bible language - Sprache der Bibel - - - - Application language - Sprache der Benutzeroberfläche + Alternative Endmarkierungen können durch senkrechte +Striche »|« getrennt angegeben werden. Der erste +Trenner wird zur Darstellung in OpenLP genutzt. @@ -846,53 +878,66 @@ Bible should be displayed in the Bible search: Englisch - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Buchnamen wählen - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Das folgende Buch konnte intern nicht zugeordnet werden. Bitte wählen Sie den entsprechenden englischen Namen. - + Current name: Aktueller Name: - + Corresponding name: Entsprechender Name: - + Show Books From Zeige Bücher aus dem: - + Old Testament Altes Testament - + New Testament Neues Testament - + Apocrypha Apokryphen @@ -924,6 +969,75 @@ Bible should be displayed in the Bible search: Importiere Verse... Fertig. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Lizenzdetails + + + + Version name: + Bibelausgabe: + + + + Copyright: + Copyright: + + + + Permissions: + Genehmigung: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -966,167 +1080,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bibel Importassistent - + 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. Dieser Assistent hilft Ihnen Bibeln aus verschiedenen Formaten zu importieren. Um den Assistenten zu starten klicken Sie auf »Weiter«. - + Web Download Onlinebibel - + Location: Quelle: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Übersetzung: - + Download Options Download-Optionen - + Server: Server: - + Username: Benutzername: - + Password: Passwort: - + Proxy Server (Optional) Proxy-Server (optional) - + License Details Lizenzdetails - + Set up the Bible's license details. Eingabe der Urheberrechtsangaben der Bibelübersetzung. - + Version name: Bibelausgabe: - + Copyright: Copyright: - + Please wait while your Bible is imported. Bitte warten Sie während Ihre Bibel importiert wird. - + You need to specify a file with books of the Bible to use in the import. Eine Buchinformations-Datei muss zum Import angegeben werden. - + You need to specify a file of Bible verses to import. Eine Bibeltext-Datei muss zum Import angegeben werden. - + You need to specify a version name for your Bible. Bitte geben Sie den Namen der Bibelübersetzung ein. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Das Copyright muss angegeben werden. Gemeinfreie Bibeln ohne Copyright sind als solche zu kennzeichnen. - + Bible Exists Übersetzung bereits vorhanden - + This Bible already exists. Please import a different Bible or first delete the existing one. Diese Bibel existiert bereit. Bitte geben Sie einen anderen Übersetzungsnamen an oder löschen Sie zuerst die Existierende. - + Your Bible import failed. Der Bibelimport ist fehlgeschlagen. - + CSV File CSV-Datei - + Bibleserver Bibleserver.com - + Permissions: Genehmigung: - + Bible file: Bibeldatei: - + Books file: Bücherdatei: - + Verses file: Versedatei: - + openlp.org 1.x Bible Files openlp.org 1.x Bibel-Dateien - + Registering Bible... Registriere Bibel... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Registrierung abgeschlossen. @@ -1137,17 +1251,17 @@ werden. Daher ist eine Internetverbindung erforderlich. BiblesPlugin.LanguageDialog - + Select Language Sprache auswählen - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP kann die Sprache dieser Bibeln nicht ermitteln. Bitte wählen Sie die Sprache dieser Bibel aus der Liste aus. - + Language: Sprache: @@ -1163,90 +1277,95 @@ werden. Daher ist eine Internetverbindung erforderlich. BiblesPlugin.MediaItem - + Quick Schnellsuche - + Find: Suchen: - + Book: Buch: - + Chapter: Kapitel: - + Verse: Vers: - + From: Von: - + To: Bis: - + Text Search Textsuche - + Second: Vergleichstext: - + Scripture Reference Bibelstelle - + Toggle to keep or clear the previous results. Vorheriges Suchergebnis behalten oder verwerfen. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? 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. - + Search Scripture Reference... Suche Bibelstelle... - + Search Text... Suche Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1260,12 +1379,12 @@ werden. Daher ist eine Internetverbindung erforderlich. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kodierung wird ermittelt (dies kann etwas dauern)... - + Importing %s %s... Importing <book name> <chapter>... %s %s wird importiert... @@ -1503,42 +1622,42 @@ Bitte beachten Sie, dass Bibeltexte von Onlinebibeln bei Bedarf heruntergeladen CustomPlugin.EditCustomForm - + Edit Custom Slides Sonderfolien bearbeiten - + &Title: &Titel: - + Add a new slide at bottom. Füge eine neue Folie am Ende ein. - + Edit the selected slide. Bearbeite ausgewählte Folie. - + Edit all the slides at once. Bearbeite alle Folien. - + Split a slide into two by inserting a slide splitter. Füge einen Folienumbruch ein. - + The&me: Desig&n: - + &Credits: A&utoren: @@ -1553,12 +1672,12 @@ Bitte beachten Sie, dass Bibeltexte von Onlinebibeln bei Bedarf heruntergeladen Es muss mindestens eine Folie erstellt werden. - + Ed&it All &Alle bearbeiten - + Insert Slide Folie einfügen @@ -1656,34 +1775,34 @@ 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. Es waren keine Änderungen nötig. @@ -1691,19 +1810,19 @@ Wollen Sie die anderen Bilder trotzdem hinzufügen? 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. + + Visible background for images with aspect ratio different to screen. + @@ -1828,22 +1947,22 @@ Wollen Sie die anderen Bilder trotzdem hinzufügen? MediaPlugin.MediaTab - + Available Media Players Verfügbare Medien Player - + %s (unavailable) %s (nicht verfügbar) - + Player Order Player Reihenfolge - + Allow media player to be overridden Überschreiben des Multimediabackends zulassen @@ -1873,17 +1992,17 @@ Möchten Sie dies jetzt tun? OpenLP.AboutForm - + Credits Danksagungen - + License Lizenz - + Contribute Mitmachen @@ -1893,17 +2012,17 @@ Möchten Sie dies jetzt tun? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -2031,7 +2150,7 @@ Danke Halleluja! - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2048,7 +2167,7 @@ Erkunden Sie OpenLP: http://openlp.org/ OpenLP wird von freiwilligen Helfern programmiert und gewartet. Wenn Sie sich mehr freie christliche Programme wünschen, ermutigen wir Sie, sich doch sich zu beteiligen und den Knopf weiter unten nutzen. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2058,62 +2177,62 @@ Anteiliges Copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Benutzeroberfläche - + Number of recent files to display: Anzahl zuletzt geöffneter Abläufe: - + Remember active media manager tab on startup Erinnere aktiven Reiter der Medienverwaltung - + Double-click to send items straight to live Objekte bei Doppelklick live anzeigen - + Expand new service items on creation Neue Ablaufelemente bei ausklappen - + Enable application exit confirmation Aktiviere Bestätigung beim Schließen - + Mouse Cursor Mauszeiger - + Hide mouse cursor when over display window Verstecke den Mauszeiger auf dem Bildschrim - + Default Image Standardbild - + Background color: Hintergrundfarbe: - + Image file: Bild-Datei: - + Open File Datei öffnen @@ -2123,125 +2242,125 @@ Anteiliges Copyright © 2004-2012 %s Erweitert - + Preview items when clicked in Media Manager Elemente in der Vorschau zeigen, wenn sie in der Medienverwaltung angklickt werden - + Click to select a color. Klicken Sie, um eine Farbe aus zu wählen. - + Browse for an image file to display. Wählen Sie die Bild-Datei aus, die angezeigt werden soll. - + Revert to the default OpenLP logo. Standard-Logo wiederherstellen. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Ablauf %Y-%m-%d %H-%M - + Default Service Name Voreingestellter Ablaufname - + Enable default service name Ablaufnamen vorschlagen - + Date and Time: Zeitpunkt: - + Monday Montag - + Tuesday Dienstag - + Wednesday Mittwoch - + Thurdsday Donnerstag - + Friday Freitag - + Saturday Samstag - + Sunday Sonntag - + Now Jetzt - + Time when usual service starts. Übliche Uhrzeit. - + Name: Name: - + Consult the OpenLP manual for usage. Verwendungsdetails sind im Handbuch zu finden. - + Revert to the default service name "%s". Auf den vorgegebenen Ablaufnahmen »%s« zurücksetzen. - + Example: Beispiel: - + X11 X11 - + Bypass X11 Window Manager Fenstermanager X11 umgehen - + Syntax error. Syntaxfehler. @@ -2249,35 +2368,35 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Fehler aufgetreten - + 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. Ups! OpenLP hat ein Problem und kann es nicht beheben. Der Text im unteren Fenster enthält Informationen, welche möglicherweise hilfreich für die OpenLP Entwickler sind. Bitte senden Sie eine E-Mail an: bugs@openlp.org mit einer ausführlichen Beschreibung was Sie taten als das Problem auftrat. - + Send E-Mail E-Mail senden - + Save to File In Datei speichern - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Bitte geben Sie ein Beschreibung ein, was Sie gemacht haben, als dieser Fehler auftrat. Bitte verwenden Sie (wenn möglich) Englisch. - + Attach File Datei einhängen @@ -2588,79 +2707,75 @@ Version: %s Custom Slides Sonderfolien + + + Finish + Ende + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Es wurde keine Internetverbindung erkannt. Um während des erstmaligen Startes von OpenLP Beispiel Lieder, Bibeln und Designs zu installieren ist eine Internetverbindung nötig. Klicken Sie >>Abschließen<<, um OpenLP nun mit Grundeinstellungen und ohne Beispiel Daten zu starten. - -Um diesen Einrichtungsassistenten erneut zu starten und die Beispiel Daten zu importieren, prüfen Sie Ihre Internetverbindung und starten den Assistenten im Menü "Extras/Einrichtungsassistenten starten". + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Um den Einrichtungsassistenten zu unterbrechen (und OpenLP nicht zu starten), bitte >>Abbrechen<< klicken. - - - - Finish - Ende +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Konfiguriere Formatforlagen - + Edit Selection Auswahl bearbeiten - + Save Speichern - + Description Beschreibung - + Tag Tag - + Start tag Anfangs Tag - + End tag End Tag - + Tag Id Tag Nr. - + Start HTML Anfangs HTML - + End HTML End HTML @@ -2904,40 +3019,10 @@ Um den Einrichtungsassistenten zu unterbrechen (und OpenLP nicht zu starten), bi Starte Hintergrundmusik pausiert - + Service Item Slide Limits Navigation in Folienkontrollfeld - - - &End Slide - &Halten - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Bei Erreichen der ersten bzw. letzten Folie anhalten. - - - - &Wrap Slide - &Umlauf - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Bei Erreichen der ersten bzw. letzten Folie am anderen Ende fortfahren. - - - - &Next Item - &Weiter - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Bei Erreichen der ersten bzw. letzten Folie mit dem entsprechend nächsten Ablaufelement fortfahren. - Override display position: @@ -2948,6 +3033,26 @@ Um den Einrichtungsassistenten zu unterbrechen (und OpenLP nicht zu starten), bi Repeat track list Abspielliste wiederholen + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2973,287 +3078,287 @@ Um den Einrichtungsassistenten zu unterbrechen (und OpenLP nicht zu starten), bi 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. - + 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/. @@ -3262,22 +3367,22 @@ You can download the latest version from http://openlp.org/. Sie können die letzte Version auf http://openlp.org abrufen. - + 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 @@ -3288,82 +3393,82 @@ 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? Soll OpenLP wirklich beendet werden? - + 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. - + &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. - + &Recent Files &Zuletzte geöffnete Abläufe - + 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. @@ -3372,43 +3477,43 @@ 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. - + 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... - + Export OpenLP settings to a specified *.config file Exportiere OpenLPs Einstellungen in ein *.config-Datei. - + Settings Einstellungen - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Importiere OpenLPs Einstellungen aus ein *.config-Datei, die vorher an diesem oder einem anderen Computer exportiert wurde. - + Import settings? Importiere Einstellungen? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3421,32 +3526,32 @@ 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) @@ -3480,7 +3585,7 @@ Datenbank: %s OpenLP.MediaManagerItem - + No Items Selected Keine Elemente ausgewählt. @@ -3568,27 +3673,27 @@ Dateiendung nicht unterstützt. OpenLP.PluginForm - + Plugin List Erweiterungen - + Plugin Details Erweiterungsdetails - + Status: Status: - + Active aktiv - + Inactive inaktiv @@ -3611,12 +3716,12 @@ Dateiendung nicht unterstützt. OpenLP.PrintServiceDialog - + Fit Page Auf Seite einpassen - + Fit Width An Breite anpassen @@ -3624,7 +3729,7 @@ Dateiendung nicht unterstützt. OpenLP.PrintServiceForm - + Options Optionen @@ -3639,47 +3744,47 @@ Dateiendung nicht unterstützt. Als HTML kopieren - + Zoom In Heranzoomen - + Zoom Out Wegzoomen - + Zoom Original Original Zoom - + Other Options Andere Optionen - + Include slide text if available Drucke Folientext wenn verfügbar - + Include service item notes Drucke Element-Notizen - + Include play length of media items Drucke Spiellänge von Medien Elementen - + Add page break before each text item Einen Seitenumbruch nach jedem Text-Element einfügen - + Service Sheet Ablauf @@ -3689,12 +3794,12 @@ Dateiendung nicht unterstützt. Drucken - + Title: Titel: - + Custom Footer Text: Ablaufnotizen: @@ -3728,7 +3833,7 @@ Dateiendung nicht unterstützt. OpenLP.ServiceItemEditForm - + Reorder Service Item Reihenfolge der Bilder ändern @@ -3736,189 +3841,189 @@ Dateiendung nicht unterstützt. OpenLP.ServiceManager - + Move to &top Zum &Anfang schieben - + Move item to the top of the service. Das ausgewählte Element an den Anfang des Ablaufs verschieben. - + Move &up Nach &oben schieben - + Move item up one position in the service. Das ausgewählte Element um eine Position im Ablauf nach oben verschieben. - + Move &down Nach &unten schieben - + Move item down one position in the service. Das ausgewählte Element um eine Position im Ablauf nach unten verschieben. - + Move to &bottom Zum &Ende schieben - + Move item to the end of the service. Das ausgewählte Element an das Ende des Ablaufs verschieben. - + &Delete From Service Vom Ablauf &löschen - + Delete the selected item from the service. Das ausgewählte Element aus dem Ablaufs entfernen. - + &Add New Item &Neues Element hinzufügen - + &Add to Selected Item &Zum gewählten Element hinzufügen - + &Edit Item Element &bearbeiten - + &Reorder Item &Aufnahmeelement - + &Notes &Notizen - + &Change Item Theme &Design des Elements ändern - + OpenLP Service Files (*.osz) OpenLP Ablaufdateien (*.osz) - + 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. - + Missing Display Handler Fehlende Anzeigesteuerung - + Your item cannot be displayed as there is no handler to display it Dieses Element kann nicht angezeigt werden, da es keine Steuerung dafür gibt. - + Your item cannot be displayed as the plugin required to display it is missing or inactive Dieses Element kann nicht angezeigt werden, da die zugehörige Erweiterung fehlt oder inaktiv ist. - + &Expand all Alle au&sklappen - + Expand all the service items. Alle Ablaufelemente ausklappen. - + &Collapse all Alle ei&nklappen - + Collapse all the service items. Alle Ablaufelemente einklappen. - + Open File Ablauf öffnen - + Moves the selection down the window. Ausgewähltes nach unten schieben - + Move up Nach oben - + Moves the selection up the window. Ausgewähltes nach oben schieben - + Go Live Live - + Send the selected item to Live. Zeige das ausgewählte Element Live. - + &Start Time &Startzeit - + Show &Preview &Vorschau - + Show &Live &Live - + 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? @@ -3938,72 +4043,72 @@ Der Inhalt ist nicht in UTF-8 kodiert. Spiellänge: - + Untitled Service Unbenannt - + 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 - + Load an existing service. Einen bestehenden Ablauf öffnen. - + Save this service. Den aktuellen Ablauf speichern. - + Select a theme for the service. 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. - + Service File Missing Ablaufdatei fehlt - + Slide theme Element-Design - + Notes Notizen - + Edit Bearbeiten - + Service copy only Ablaufkopie (nicht in der Datenbank) @@ -4011,7 +4116,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.ServiceNoteForm - + Service Item Notes Elementnotiz @@ -4027,12 +4132,12 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.ShortcutListDialog - + Action Aktion - + Shortcut Tastenkürzel @@ -4047,32 +4152,32 @@ Der Inhalt ist nicht in UTF-8 kodiert. Das Tastenkürzel »%s« ist bereits einer anderen Aktion zugeordnet. Bitte wählen Sie ein anderes Tastenkürzel. - + Alternate Alternative - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Wählen Sie ein Aktion aus und klicken Sie eine der unteren Buttons um einen primären bzw. alternativen Tastenkürzel auf zuzeichnen. - + Default Standard - + Custom Sonderfolien - + Capture shortcut. Tastenkürzel aufzeichen. - + Restore the default shortcut of this action. Standard Tastenkürzel dieser Aktion wiederherstellen. @@ -4087,7 +4192,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. Möchten Sie alle standard Tastenkürzel wiederherstellen? - + Configure Shortcuts Konfiguriere Tastaturkürzel... @@ -4254,11 +4359,6 @@ Der Inhalt ist nicht in UTF-8 kodiert. Background Audio Hintergrundton - - - Next Track - Nächstes Stück - Go to next audio track. @@ -4341,17 +4441,17 @@ Der Inhalt ist nicht in UTF-8 kodiert. Die Startzeit ist nach der Endzeit gesetzt - + Theme Layout Design-Layout - + The blue box shows the main area. Der blaue Rahmen zeigt die Hauptanzeigefläche. - + The red box shows the footer. Der rote Rahmen zeigt die Fußzeile. @@ -4452,62 +4552,62 @@ Der Inhalt ist nicht in UTF-8 kodiert. Als &globalen Standard setzen - + %s (default) %s (Standard) - + You must select a theme to edit. Zum Bearbeiten muss ein Design ausgewählt sein. - + You are unable to delete the default theme. Es ist nicht möglich das Standarddesign zu entfernen. - + Theme %s is used in the %s plugin. Das Design »%s« wird in der »%s« Erweiterung benutzt. - + You have not selected a theme. Es ist kein Design ausgewählt. - + Save Theme - (%s) Speicherort für »%s« - + Theme Exported Design exportiert - + Your theme has been successfully exported. Das Design wurde erfolgreich exportiert. - + Theme Export Failed Designexport fehlgeschlagen - + Your theme could not be exported due to an error. Dieses Design konnte aufgrund eines Fehlers nicht exportiert werden. - + Select Theme Import File OpenLP Designdatei importieren - + File is not a valid theme. Diese Datei ist keine gültige OpenLP Designdatei. @@ -4527,58 +4627,58 @@ Der Inhalt ist nicht in UTF-8 kodiert. Design &exportieren - + You must select a theme to rename. Es ist kein Design zur Umbenennung ausgewählt. - + Rename Confirmation Umbenennung bestätigen - + Rename %s theme? Soll das Design »%s« wirklich umbenennt werden? - + You must select a theme to delete. Es ist kein Design zum Löschen ausgewählt. - + Delete Confirmation Löschbestätigung - + Delete %s theme? Soll das Design »%s« wirklich gelöscht werden? - + Validation Error Validierungsfehler - + A theme with this name already exists. Ein Design mit diesem Namen existiert bereits. - + OpenLP Themes (*.theme *.otz) OpenLP Designs (*.theme *.otz) - + Copy of %s Copy of <theme name> Kopie von %s - + Theme Already Exists Design bereits vorhanden @@ -4586,222 +4686,222 @@ Der Inhalt 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: @@ -4811,47 +4911,47 @@ Der Inhalt ist nicht in UTF-8 kodiert. Bearbeite Design - %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. 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 - + Starting color: Startfarbe: - + Ending color: Endfarbe - + Background color: Hintergrundfarbe: - + Justify bündig - + Layout Preview Layout-Vorschau - + Transparent transparent @@ -4859,42 +4959,42 @@ Der Inhalt ist nicht in UTF-8 kodiert. OpenLP.ThemesTab - + Global Theme Globales Standarddesign - + Theme Level Designstufe - + S&ong Level &Liedstufe - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Das im jeweiligen Lied eingestellte Design wird verwendet. Wenn für ein Lied kein Design festgelegt ist, wird das Ablaufdesign verwendet. Wenn dort auch kein Design festgelegt wurde, wird das Standarddesign benutzt. - + &Service Level &Ablaufstufe - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Das dem Ablauf zugewiesene Design wird genutzt. Das im Lied eingestellte Design wird ignoriert. Wenn dem Ablauf kein Design zugeordnet ist, dann wird das Standarddesign verwendet. - + &Global Level &Globale Stufe - + Use the global theme, overriding any themes associated with either the service or the songs. Das Standarddesign immer verwenden, unabhängig vom Lieddesign oder Ablaufdesign. @@ -5140,22 +5240,22 @@ Der Inhalt ist nicht in UTF-8 kodiert. Version - + Delete the selected item. Lösche den ausgewählten Eintrag. - + Move selection up one position. Ausgewählten Eintrag nach oben schieben. - + Move selection down one position. Ausgewählten Eintrag nach unten schieben. - + &Vertical Align: &Vertikale Ausrichtung: @@ -5221,7 +5321,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. Sie müssen wenigstens eine %s-Datei zum Importieren auswählen. - + Welcome to the Bible Import Wizard Willkommen beim Bibel Importassistenten @@ -5404,11 +5504,6 @@ Der Inhalt ist nicht in UTF-8 kodiert. Reset live background. Setze den Live-Hintergrund zurück. - - - &Split - &Teilen - Split a slide into two only if it does not fit on the screen as one slide. @@ -5455,29 +5550,34 @@ Der Inhalt ist nicht in UTF-8 kodiert. Search bar place holder text Suche Designs... + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 und %2 - + %1, and %2 Locale list separator: end %1, und %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1,%2 @@ -5552,17 +5652,17 @@ Der Inhalt ist nicht in UTF-8 kodiert. Anzeigen mit: - + File Exists Datei existiert - + A presentation with that filename already exists. Eine Präsentation mit diesem Dateinamen existiert bereits. - + This type of presentation is not supported. Präsentationsdateien dieses Dateiformats werden nicht unterstützt. @@ -5572,17 +5672,17 @@ Der Inhalt ist nicht in UTF-8 kodiert. Präsentationen (%s) - + Missing Presentation Fehlende Präsentation - + The Presentation %s no longer exists. Die Präsentation »%s« existiert nicht mehr. - + The Presentation %s is incomplete, please reload. Die Präsentation »%s« ist nicht vollständig, bitte neu laden. @@ -5663,11 +5763,6 @@ Der Inhalt ist nicht in UTF-8 kodiert. Search Suchen - - - Back - Zurück - Refresh @@ -5679,50 +5774,70 @@ Der Inhalt ist nicht in UTF-8 kodiert. Schwarz - + Show Zeigen - + Prev Vorh. - + Next Nächste - + Text Text - + Show Alert Hinweis zeigen - + Go Live Live - + No Results Kein Suchergebnis - + Options Optionen - + Add to Service Zum Ablauf hinzufügen + + + Home + + + + + Theme + Design + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5856,7 +5971,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Protokolldaten löschen @@ -5881,7 +5996,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. 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. Bitte wählen Sie das Datum bis zu dem die Protokollierungsdaten gelöscht werden sollen. Alle gespeicherten Daten, welche älter sind, werden dauerhaft gelöscht. @@ -5889,22 +6004,22 @@ Der Inhalt ist nicht in UTF-8 kodiert. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Protokoll extrahieren - + Select Date Range Zeitspanne - + to bis - + Report Location Zielverzeichnis für die Statistiken @@ -6184,210 +6299,223 @@ Diese ist für die korrekte Darstellung der Sonderzeichen verantwortlich. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Lied bearbeiten - + &Title: &Titel: - + Alt&ernate title: &Zusatztitel: - + &Lyrics: Lied&text: - + &Verse order: &Versfolge: - + Ed&it All &Alle Bearbeiten - + Title && Lyrics Titel && Liedtext - + &Add to Song &Hinzufügen - + &Remove &Entfernen - + &Manage Authors, Topics, Song Books &Datenbankeinträge verwalten - + A&dd to Song H&inzufügen - + R&emove &Entfernen - + Book: Liederbuch: - + Number: Nummer: - + Authors, Topics && Song Book Autoren, Themen && Liederbücher - + New &Theme Neues &Design - + Copyright Information Copyright - + Comments Kommentare - + Theme, Copyright Info && Comments Design, Copyright && Kommentare - + Add Author Autor hinzufügen - + This author does not exist, do you want to add them? Dieser Autor existiert nicht. Soll er zur Datenbank hinzugefügt werden? - + This author is already in the list. Dieser Autor ist bereits vorhanden. - + 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. Es wurde kein gültiger Autor ausgewählt. Bitte wählen Sie einen Autor aus der Liste oder geben Sie einen neuen Autor ein und drücken die Schaltfläche »Autor hinzufügen«. - + Add Topic Thema hinzufügen - + This topic does not exist, do you want to add it? Dieses Thema existiert nicht. Soll es zur Datenbank hinzugefügt werden? - + This topic is already in the list. Dieses Thema ist bereits vorhanden. - + 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. Es wurde kein gültiges Thema ausgewählt. Bitte wählen Sie ein Thema aus der Liste oder geben Sie ein neues Thema ein und drücken die Schaltfläche »Thema hinzufügen«. - + You need to type in a song title. Ein Liedtitel muss angegeben sein. - + You need to type in at least one verse. Mindestens ein Vers muss angegeben sein. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Die Versfolge ist ungültig. Es gibt keinen Vers mit der Kennung »%s«. Gültige Werte sind »%s«. - + Add Book Liederbuch hinzufügen - + This song book does not exist, do you want to add it? Dieses Liederbuch existiert nicht. Soll es zur Datenbank hinzugefügt werden? - + You need to have an author for this song. Das Lied benötigt mindestens einen Autor. - + You need to type some text in to the verse. Die Strophe benötigt etwas Text. - + Linked Audio Hintergrundmusik - + Add &File(s) &Datei(en) hinzufügen - + Add &Media &Medien hinzufügen - + Remove &All &Alle Entfernen - + Open File(s) Datei(en) öffnen - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Achtung:</strong> Es werden nicht alle Verse verwendet. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. Ungültige Versfolge. Es gibt keine passenden Verse für %s. Gültige Einträge sind %s. @@ -6634,12 +6762,12 @@ Easy Worship] SongsPlugin.MediaFilesForm - + Select Media File(s) Wähle Audio-/Videodatei(en) - + Select one or more audio files from the list below, and click OK to import them into this song. Wähle eine oder mehrere Audio Dateien von der folgenden Liste und klicke >>OK<<, um sie in dieses Lied zu importieren. @@ -6657,7 +6785,7 @@ Easy Worship] Liedtext - + CCLI License: CCLI-Lizenz: @@ -6680,7 +6808,7 @@ Easy Worship] Autoren, Themen und Bücher verwalten. - + copy For song cloning Kopie @@ -6774,12 +6902,12 @@ Easy Worship] SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: Die folgenden Lieder konnten nicht importiert werden: @@ -6939,8 +7067,8 @@ Easy Worship] - Add missing songs when opening service - Lieder aus Abläufen zur Datenbank hinzufügen + Import missing songs from service files + diff --git a/resources/i18n/el.ts b/resources/i18n/el.ts index 725c23480..797ca2833 100644 --- a/resources/i18n/el.ts +++ b/resources/i18n/el.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Μήνυμα Ειδοποίησης - + Alert &text: &Κείμενο Ειδοποίησης: - + &New &Νέο - + &Save &Αποθήκευση - + Displ&ay Παρουσί&αση - + Display && Cl&ose Παρουσίαση && Κλ&είσιμο @@ -79,7 +79,7 @@ Δεν έχετε προσδιορίσει κάποιο κείμενο για την ειδοποίησή σας. Παρακαλούμε πληκτρολογείστε ένα κείμενο πριν κάνετε κλικ στο Νέο. - + &Parameter: &Παράμετρος: @@ -119,32 +119,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Γραμματοσειρά - + Font name: Ονομασία γραμματοσειράς: - + Font color: Χρώμα γραμματοσειράς: - + Background color: Χρώμα φόντου: - + Font size: Μέγεθος γραμματοσειράς: - + Alert timeout: Χρόνος αναμονής: @@ -661,42 +661,87 @@ Do you want to continue anyway? :|v|V|verse|verses;;-|to;;,|and;;end + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Πρέπει να καθορίσετε μία ονομασία έκδοσης της Βίβλου σας. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Πρέπει να ορίσετε τα πνευματικά δικαιώματα της Βίβλου σας. Οι Βίβλοι στον δημόσιο τομέα πρέπει να δηλώνονται ως τέτοιες. + + + + Bible Exists + Η Βίβλος Υπάρχει + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Η Βίβλος ήδη υπάρχει. Παρακαλούμε να εισάγετε μια διαφορετική Βίβλο ή να διαγράψετε πρώτα την ήδη υπάρχουσα. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Σφάλμα Αναφοράς Βίβλου - + Web Bible cannot be used Η Βίβλος Web δεν μπορεί να χρησιμοποιηθεί - + Text Search is not available with Web Bibles. Η Αναζήτηση Κειμένου δεν είναι διαθέσιμη με Βίβλους Web. - + 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. Δεν δώσατε λέξη προς αναζήτηση. Μπορείτε να διαχωρίσετε διαφορετικές λέξεις με κενό για να αναζητήσετε για όλες τις λέξεις και μπορείτε να τις διαχωρίσετε με κόμμα για να αναζητήσετε για μια από αυτές. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Δεν υπάρχουν εγκατεστημένες Βίβλοι. Χρησιμοποιήστε τον Οδηγό Εισαγωγής για να εγκαταστήσετε μία η περισσότερες Βίβλους. - + No Bibles Available Βίβλοι Μη Διαθέσιμοι - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. Πρέπει να διαχωρίζονται από το σύμβολο "|". Παρακαλώ σβήστε αυτή την γραμμή για χρήση της προκαθορισμένης τιμής. - - - Preferred Bookname Language - Προτιμητέα Γλώσσα Ονομασίας Βιβλίων - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Επιλέξτε την γλώσσα στην οποία θα απεικονίζονται τα ονόματα -των βιβλίων της Βίβλου κατά την αναζήτηση: - - - - Bible language - Γλώσσα Βίβλου - - - - Application language - Γλώσσα Εφαρμογής - English Αγγλικά - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Πολλαπλές επιλογές: -Γλώσσα βίβλου - η γλώσσα με την οποία εισήχθησαν τα ονόματα των βιβλίων της Βίβλου -Γλώσσα εφαρμογής - η γλώσσα που επιλέξατε για το OpenLP -Αγγλικά - χρησιμοποιήστε πάντα Αγγλικά ονόματα βιβλίων + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Επιλέξτε Όνομα Βιβλίου - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Το ακόλουθο όνομα βιβλίου δεν βρέθηκε εσωτερικά. Παρακαλούμε επιλέξτε το αντίστοιχο αγγλικό όνομα από την λίστα. - + Current name: Τρέχον όνομα: - + Corresponding name: Αντίστοιχο όνομα: - + Show Books From Εμφάνιση Βιβλίων Από - + Old Testament Παλαιά Διαθήκη - + New Testament Καινή Διαθήκη - + Apocrypha Απόκρυφα @@ -935,6 +968,75 @@ Bible should be displayed in the Bible search: Εισαγωγή εδαφίων... ολοκληρώθηκε. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Λεπτομέρειες Άδειας + + + + Version name: + Όνομα έκδοσης: + + + + Copyright: + Πνευματικά Δικαιώματα: + + + + Permissions: + Άδειες: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + Αγγλικά + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Οδηγός Εισαγωγής Βίβλου - + 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. Ο οδηγός αυτός θα σας βοηθήσει στην εισαγωγή Βίβλων από μια ποικιλία τύπων. Κάντε κλικ στο πλήκτρο επόμενο παρακάτω για να ξεκινήσετε την διαδικασία επιλέγοντας έναν τύπο αρχείου προς εισαγωγή. - + Web Download Λήψη μέσω Web - + Location: Τοποθεσία: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Βίβλος: - + Download Options Επιλογές Λήψης - + Server: Εξυπηρετητής: - + Username: Όνομα Χρήστη: - + Password: Κωδικός: - + Proxy Server (Optional) Εξυπηρετητής Proxy (Προαιρετικό) - + License Details Λεπτομέρειες Άδειας - + Set up the Bible's license details. Ρυθμίστε τις λεπτομέρειες άδειας της Βίβλου. - + Version name: Όνομα έκδοσης: - + Copyright: Πνευματικά Δικαιώματα: - + Please wait while your Bible is imported. Παρακαλούμε περιμένετε όσο η Βίβλος σας εισάγεται. - + You need to specify a file with books of the Bible to use in the import. Πρέπει να καθορίσετε ένα αρχείο με βιβλία της Βίβλου για να χρησιμοποιήσετε για εισαγωγή. - + You need to specify a file of Bible verses to import. Πρέπει να καθορίσετε ένα αρχείο εδαφίων της Βίβλου προς εισαγωγή. - + You need to specify a version name for your Bible. Πρέπει να καθορίσετε μία ονομασία έκδοσης της Βίβλου σας. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Πρέπει να ορίσετε τα πνευματικά δικαιώματα της Βίβλου σας. Οι Βίβλοι στον δημόσιο τομέα πρέπει να δηλώνονται ως τέτοιες. - + Bible Exists Η Βίβλος Υπάρχει - + This Bible already exists. Please import a different Bible or first delete the existing one. Η Βίβλος ήδη υπάρχει. Παρακαλούμε να εισάγετε μια διαφορετική Βίβλο ή να διαγράψετε πρώτα την ήδη υπάρχουσα. - + Your Bible import failed. Η εισαγωγή της Βίβλου σας απέτυχε. - + CSV File Αρχείο CSV - + Bibleserver Εξυπηρετητής Βίβλου - + Permissions: Άδειες: - + Bible file: Αρχείο Βίβλου: - + Books file: Αρχείο Βιβλίων: - + Verses file: Αρχείο εδαφίων: - + openlp.org 1.x Bible Files Αρχεία Βίβλων openlp.org 1.x - + Registering Bible... Καταχώρηση Βίβλου... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Η Βίβλος καταχωρήθηκε. Σημειώστε ότι τα εδάφια θα κατέβουν @@ -1147,17 +1249,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language Επιλογή Γλώσσας - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. Το OpenLP δεν μπορεί να αναγνωρίσει την γλώσσα αυτής της μετάφρασης της Βίβλου. Παρακαλούμε επιλέξτε την γλώσσα από την παρακάτω λίστα. - + Language: Γλώσσα: @@ -1173,90 +1275,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Γρήγορο - + Find: Εύρεση: - + Book: Βιβλίο: - + Chapter: Κεφάλαιο: - + Verse: Εδάφιο: - + From: Από: - + To: Έως: - + Text Search Αναζήτηση Κειμένου - + Second: Δεύτερο: - + Scripture Reference Αναφορά Γραφής - + Toggle to keep or clear the previous results. Εναλλαγή διατήρησης ή καθαρισμού των προηγούμενων αποτελεσμάτων. - + 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. Βίβλος ατελώς φορτωμένη. - + 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 εδάφια δεν έχουν συμπεριληφθεί στα αποτελέσματα. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Ανίχνευση κωδικοποίησης (μπορεί να χρειαστεί μερικά λεπτά)... - + Importing %s %s... Importing <book name> <chapter>... Εισαγωγή %s %s... @@ -1513,42 +1620,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides Επεξεργασία Εξατομικευμένων Διαφανειών - + &Title: &Τίτλος: - + Add a new slide at bottom. Προσθήκη νέας διαφάνειας κάτω. - + Edit the selected slide. Επεξεργασία επιλεγμένης διαφάνειας. - + Edit all the slides at once. Επεξεργασία όλων των διαφανειών ταυτόχρονα. - + Split a slide into two by inserting a slide splitter. Χωρίστε μια διαφάνεια σε δύο με εισαγωγή ενός διαχωριστή διαφανειών. - + The&me: Θέ&μα: - + &Credits: &Πιστώσεις: @@ -1563,12 +1670,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Πρέπει να προσθέσετε τουλάχιστον μία διαφάνεια - + Ed&it All &Επεξεργασία Όλων - + Insert Slide Εισαγωγή Διαφάνειας @@ -1666,34 +1773,34 @@ 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 Οι ακόλουθες εικόνες δεν υπάρχουν πια: %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. Δεν υπήρξε κανένα αντικείμενο προς απεικόνιση για διόρθωση. @@ -1701,19 +1808,19 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color Χρώμα Φόντου - + Default Color: Προκαθορισμένο Χρώμα: - - Provides border where image is not the correct dimensions for the screen when resized. - Παρέχει το πλαίσιο όπου η εικόνα δεν είναι σωστής διάστασης για την οθόνη όταν αλλάξει διαστάσεις. + + Visible background for images with aspect ratio different to screen. + @@ -1838,22 +1945,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players Διαθέσιμα Προγράμματα Αναπαραγωγής - + %s (unavailable) %s (μη διαθέσιμο) - + Player Order Σειρά Αναπαραγωγής - + Allow media player to be overridden Επιτρέψτε την παράκαμψη του προγράμματος αναπαραγωγής πολυμέσων @@ -1883,17 +1990,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits Πιστώσεις - + License Άδεια - + Contribute Συνεισφέρετε @@ -1903,17 +2010,17 @@ Should OpenLP upgrade now? έκδοση %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Αυτό το πρόγραμμα είναι ανοιχτό λογισμικό, μπορείτε να το διανείμετε και/ή να το τροποποιήσετε υπό τους όρους της άδειας GNU General Public License όπως δημοσιεύτηκε από το Ίδρυμα Ελεύθερου Λογισμικού, έκδοση 2 της Άδειας. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Αυτό το πρόγραμμα διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ, χωρίς καν την συνεπαγόμενη εγγύηση ΕΜΠΟΡΙΚΟΤΗΤΑΣ ή ΧΡΗΣΗΣ ΓΙΑ ΣΥΓΚΕΚΡΙΜΕΝΟ ΣΚΟΠΟ. Δείτε παρακάτω για περισσότερες λεπτομέρειες. - + Project Lead %s @@ -2038,7 +2145,7 @@ Final Credit Αυτός μας ελευθέρωσε. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2055,7 +2162,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr Το OpenLP έχει γραφτεί και συντηρείται από εθελοντές. Αν θα θέλατε να δείτε περισσότερα δωρεάν Χριστιανικά προγράμματα να υλοποιούνται, παρακαλούμε σκεφτείτε να συνεισφέρετε χρησιμοποιώντας το παρακάτω πλήκτρο. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Πνευματικά Δικαιώματα © 2004-2012 %s @@ -2065,62 +2172,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Επιλογές Διεπαφής - + Number of recent files to display: Αριθμός πρόσφατων αρχείων προς απεικόνιση: - + Remember active media manager tab on startup Θυμήσου την καρτέλα του ενεργού διαχειριστή πολυμέσων κατά την εκκίνηση - + Double-click to send items straight to live Προβολή αντικειμένου άμεσα με διπλό κλικ - + Expand new service items on creation Ανάπτυξη νέων αντικειμένων λειτουργίας κατά την δημιουργία - + Enable application exit confirmation Ενεργοποίηση επιβεβαίωσης κατά την έξοδο - + Mouse Cursor Δείκτης Ποντικιού - + Hide mouse cursor when over display window Απόκρυψη δείκτη ποντικιού από το παράθυρο προβολής - + Default Image Προκαθορισμένη Εικόνα - + Background color: Χρώμα φόντου: - + Image file: Αρχείο εικόνας: - + Open File Άνοιγμα Αρχείου @@ -2130,124 +2237,124 @@ Portions copyright © 2004-2012 %s Για προχωρημένους - + Preview items when clicked in Media Manager Προεπισκόπηση αντικειμένων κατά το κλικ στον Διαχειριστή Πολυμέσων - + Click to select a color. Κάντε κλικ για επιλογή χρώματος. - + Browse for an image file to display. Αναζήτηση για αρχείο εικόνας προς προβολή. - + Revert to the default OpenLP logo. Επαναφορά στο προκαθορισμένο λογότυπο του OpenLP. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Λειτουργία %Y-%m-%d %H-%M - + Default Service Name Προκαθορισμένη Ονομασία Λειτουργίας - + Enable default service name Ενεργοποίηση Προκαθορισμένης Ονομασίας Λειτουργίας - + Date and Time: Ημερομηνία και Ώρα: - + Monday Δευτέρα - + Tuesday Τρίτη - + Wednesday Τετάρτη - + Thurdsday Πέμπτη - + Friday Παρασκευή - + Saturday Σάββατο - + Sunday Κυριακή - + Now Τώρα - + Time when usual service starts. Συνήθης ώρα έναρξης λειτουργίας. - + Name: Όνομα: - + Consult the OpenLP manual for usage. Συμβουλευτείτε το εγχειρίδιο του OpenLP για την χρήση. - + Revert to the default service name "%s". Επαναφορά στο προκαθορισμένο όνομα λειτουργίας "%s" - + Example: Παράδειγμα: - + X11 X11 - + Bypass X11 Window Manager Παράκαμψη Διαχειριστή Παραθύρων X11 - + Syntax error. Σφάλμα Σύνταξης. @@ -2255,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Παρουσιάστηκε Σφάλμα - + 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. Ωχ! Το OpenLP αντιμετώπισε πρόβλημα και δεν επανήλθε. Το κείμενο στο παρακάτω πλαίσιο περιέχει πληροφορίες που μπορεί να είναι χρήσιμες στους προγραμματιστές του OpenLP, οπότε παρακαλούμε να το στείλετε με e-mail στην διεύθυνση bugs@openlp.org, μαζί με μία λεπτομερή αναφορά του τι κάνατε όταν παρουσιάστηκε το πρόβλημα. - + Send E-Mail Αποστολή E-Mail - + Save to File Αποθήκευση σε Αρχείο - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Παρακαλούμε να περιγράψετε τι κάνατε που προκάλεσε αυτό το πρόβλημα (20 χαρακτήρες τουλάχιστον) - + Attach File Επισύναψη Αρχείου @@ -2594,79 +2701,75 @@ Version: %s Custom Slides Εξατομικευμένες Διαφάνειες + + + Finish + Τέλος + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Δεν βρέθηκε σύνδεση στο διαδίκτυο. Ο Οδηγός Πρώτης Εκτέλεσης χρειάζεται σύνδεση στο διαδίκτυο ώστε να κάνει λήψη δειγμάτων τραγουδιών, Βίβλων και θεμάτων. Πιέστε το πλήκτρο τερματισμού τώρα για να ξεκινήσετε το OpenLP με τις αρχικές ρυθμίσεις και χωρίς δείγματα δεδομένων. - -Για επανεκτέλεση του Οδηγού Πρώτης Εκτέλεσης και εισαγωγή των δειγμάτων δεδομένων σε ύστερη στιγμή, ελέγξτε την σύνδεσή σας στο διαδίκτυο και ξανατρέξτε αυτόν τον οδηγό επιλέγοντας "Εργαλεία/ Επανεκτέλεση Οδηγού Πρώτης Εκτέλεσης" από το OpenLP. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Για πλήρη ακύρωση του Οδηγού Πρώτης Χρήσης (και μη εκκίνηση του OpenLP), πιέστε το πλήκτρο Άκυρο τώρα. - - - - Finish - Τέλος +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Ρύθμιση Ετικετών Μορφοποίησης - + Edit Selection Επεξεργασία Επιλογής - + Save Αποθήκευση - + Description Περιγραφή - + Tag Ετικέτα - + Start tag Ετικέτα έναρξης - + End tag Ετικέτα λήξης - + Tag Id ID ετικέτας - + Start HTML Έναρξη HTML - + End HTML Τέλος HTML @@ -2910,40 +3013,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Εκκίνηση του ήχου υπόβαθρου σε παύση - + Service Item Slide Limits Όρια Διαφάνειας Αντικειμένου Λειτουργίας - - - &End Slide - &Τέλος Διαφάνειας - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Τα βέλη προς τα πάνω και προς τα κάτω σταματούν στην πάνω και κάτω διαφάνεια κάθε Αντικειμένου Λειτουργίας. - - - - &Wrap Slide - &Περιτύλιξη Διαφάνειας - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Τα βέλη προς τα πάνω και προς τα κάτω περιτυλίγουν την πάνω και κάτω διαφάνεια κάθε Αντικειμένου Λειτουργίας. - - - - &Next Item - &Επόμενο Τεμάχιο - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Τα βέλη επάνω και κάτω προχωρούν στο επόμενο ή προηγούμενο Τεμάχιο Λειτουργίας από τις πάνω και κάτω διαφάνειες κάθε Τεμαχίου Λειτουργίας. - Override display position: @@ -2954,6 +3027,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list Επανάληψη λίστας κομματιών + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2979,287 +3072,287 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 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 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 Περισσότερες πληροφορίες για το OpenLP - + &Online Help &Online Βοήθεια - + &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/. @@ -3268,22 +3361,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 Η Κύρια Οθόνη εκκενώθηκε - + Default Theme: %s Προκαθορισμένο Θέμα: %s @@ -3294,82 +3387,82 @@ You can download the latest version from http://openlp.org/. Αγγλικά - + Configure &Shortcuts... Ρύθμιση &Συντομεύσεων... - + Close OpenLP Κλείσιμο του OpenLP - + Are you sure you want to close OpenLP? Είστε σίγουροι ότι θέλετε να κλείσετε το 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 &Πρόσφατα Αρχεία - + 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. @@ -3378,43 +3471,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Η επαντεκτέλεσή του μπορεί να επιφέρει αλλαγές στις τρέχουσες ρυθμίσεις του OpenLP και πιθανότατα να προσθέσει ύμνους στην υπάρχουσα λίστα ύμνων σας και να αλλάξει το προκαθορισμένο θέμα σας. - + Clear List Clear List of recent files Εκκαθάριση Λίστας - + Clear the list of recent files. Εκκαθάριση της λίστας πρόσφατων αρχείων. - + Configure &Formatting Tags... Ρύθμιση Ετικετών &Μορφοποίησης... - + Export OpenLP settings to a specified *.config file Εξαγωγή των ρυθμίσεων το OpenLP σε καθορισμένο αρχείο *.config - + Settings Ρυθμίσεις - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Εισαγωγή ρυθμίσεων του OpenLP από καθορισμένο αρχείο *.config που έχει εξαχθεί προηγουμένως από αυτόν ή άλλον υπολογιστή - + Import settings? Εισαγωγή Ρυθμίσεων; - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3427,32 +3520,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate Η εισαγωγή λανθασμένων ρυθμίσεων μπορεί να προκαλέσει εσφαλμένη συμπεριφορά ή ανώμαλο τερματισμό του OpenLP. - + Open File Άνοιγμα Αρχείου - + OpenLP Export Settings Files (*.conf) Εξαγωγή Αρχείων Ρυθμίσεων του OpenLP (*.conf) - + Import settings Ρυθμίσεις εισαγωγής - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. Το OpenLP θα τερματιστεί. Οι εισηγμένες ρυθμίσεις θα εφαρμοστούν την επόμενη φορά που θα ξεκινήσετε το OpenLP. - + Export Settings File Εξαγωγή Αρχείου Ρυθμίσεων - + OpenLP Export Settings File (*.conf) Εξαγωγή Αρχείων Ρυθμίσεων του OpenLP (*.conf) @@ -3486,7 +3579,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected Δεν Επιλέχθηκαν Αντικείμενα @@ -3574,27 +3667,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List Λίστα Πρόσθετων - + Plugin Details Λεπτομέρειες Πρόσθετου - + Status: Κατάσταση: - + Active Ενεργό - + Inactive Ανενεργό @@ -3617,12 +3710,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page Πλάτος Σελίδας - + Fit Width Πλάτος Κειμένου @@ -3630,7 +3723,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options Επιλογές @@ -3645,47 +3738,47 @@ Suffix not supported Αντιγραφή ως HTML - + Zoom In Μεγέθυνση - + Zoom Out Σμίκρυνση - + Zoom Original Αρχικό Ζουμ - + 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 Σελίδα Λειτουργίας @@ -3695,12 +3788,12 @@ Suffix not supported Εκτύπωση - + Title: Τίτλος: - + Custom Footer Text: Εξατομικευμένο Κείμενο Υποσέλιδου: @@ -3734,7 +3827,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item Ανακατανομή Αντικειμένων Λειτουργίας @@ -3742,189 +3835,189 @@ Suffix not supported OpenLP.ServiceManager - + 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. Μετακίνηση στο τέλος της λειτουργίας. - + &Delete From Service &Διαγραφή Από την Λειτουργία - + Delete the selected item from the service. Διαγραφή του επιλεγμένου αντικειμένου από την λειτουργία. - + &Add New Item &Προσθήκη Νέου Αντικειμένου - + &Add to Selected Item &Προσθήκη στο Επιλεγμένο Αντικείμενο - + &Edit Item &Επεξεργασία Αντικειμένου - + &Reorder Item &Ανακατανομή Αντικειμένου - + &Notes &Σημειώσεις - + &Change Item Theme &Αλλαγή Θέματος Αντικειμένου - + OpenLP Service Files (*.osz) Αρχεία Λειτουργίας του OpenLP (*.osz) - + 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 Το αντικείμενό σας δεν μπορεί να προβληθεί αφού το πρόσθετο που απαιτείται για την προβολή απουσιάζει ή είναι ανενεργό - + &Expand all &Ανάπτυξη όλων - + Expand all the service items. Ανάπτυξη όλων των αντικειμένων λειτουργίας. - + &Collapse all &Σύμπτυξη όλων - + Collapse all the service items. Σύμπτυξη όλων των αντικειμένων λειτουργίας. - + Open File Άνοιγμα Αρχείου - + Moves the selection down the window. Μετακίνηση της επιλογής κάτω στο παράθυρο. - + Move up Μετακίνηση επάνω - + Moves the selection up the window. Μετακίνηση της επιλογής προς τα πάνω στο παράθυρο. - + Go Live Προβολή - + Send the selected item to Live. Προβολή του επιλεγμένου αντικειμένου. - + &Start Time Ώρα &Έναρξης - + Show &Preview Προβολή &Προεπισκόπησης - + Show &Live &Προβολή - + Modified Service Τροποποιημένη Λειτουργία - + The current service has been modified. Would you like to save this service? Η τρέχουσα λειτουργία έχει τροποποιηθεί. Θέλετε να αποθηκεύσετε ετούτη την λειτουργία; @@ -3944,72 +4037,72 @@ The content encoding is not UTF-8. Χρόνος Αναπαραγωγής: - + Untitled Service Ανώνυμη Λειτουργία - + File could not be opened because it is corrupt. Το αρχείο δεν ανοίχθηκε επειδή είναι φθαρμένο. - + Empty File Κενό Αρχείο - + This service file does not contain any data. Ετούτο το αρχείο λειτουργίας δεν περιέχει δεδομένα. - + Corrupt File Φθαρμένο Αρχείο - + 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. - + Service File Missing Απουσία Αρχείου Λειτουργίας - + Slide theme Θέμα διαφάνειας - + Notes Σημειώσεις - + Edit Επεξεργασία - + Service copy only Επεξεργασία αντιγράφου μόνο @@ -4017,7 +4110,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Σημειώσεις Αντικειμένου Λειτουργίας @@ -4033,12 +4126,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action Ενέργεια - + Shortcut Συντόμευση @@ -4053,32 +4146,32 @@ The content encoding is not UTF-8. Η συντόμευση "%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. Αποκατάσταση της προκαθορισμένης συντόμευσης αυτής της ενέργειας. @@ -4093,7 +4186,7 @@ The content encoding is not UTF-8. Θέλετε να αποκαταστήσετε όλες τις συντομεύσεις στις προκαθορισμένες; - + Configure Shortcuts Ρύθμιση Συντομεύσεων @@ -4260,11 +4353,6 @@ The content encoding is not UTF-8. Background Audio Κομμάτι Φόντου - - - Next Track - Επόμενο Κομμάτι - Go to next audio track. @@ -4347,17 +4435,17 @@ The content encoding is not UTF-8. Ο χρόνος έναρξης έχει τεθεί μετά το πέρας του αντικειμένου πολυμέσων - + Theme Layout Σχέδιο Θέματος - + The blue box shows the main area. Το μπλε κουτί δείχνει την κύρια περιοχή. - + The red box shows the footer. Το κόκκινο κουτί δείχνει το υποσέλιδο. @@ -4458,62 +4546,62 @@ The content encoding is not UTF-8. Ορισμός Ως &Γενικής Προεπιλογής - + %s (default) %s (προκαθορισμένο) - + You must select a theme to edit. Πρέπει να επιλέξετε ένα θέμα προς επεξεργασία. - + You are unable to delete the default theme. Δεν μπορείτε να διαγράψετε το προκαθορισμένο θέμα. - + Theme %s is used in the %s plugin. Το Θέμα %s χρησιμοποιείται στο πρόσθετο %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. Το αρχείο δεν αποτελεί έγκυρο θέμα. @@ -4533,58 +4621,58 @@ The content encoding is not UTF-8. &Εξαγωγή Θέματος - + You must select a theme to rename. Πρέπει να επιλέξετε ένα θέμα για μετονομασία. - + Rename Confirmation Επιβεβαίωση Μετονομασίας - + Rename %s theme? Μετονομασία θέματος %s; - + You must select a theme to delete. Πρέπει να επιλέξετε ένα θέμα προς διαγραφή. - + Delete Confirmation Επιβεβαίωση Διαγραφής - + Delete %s theme? Διαγραφή θέματος %s; - + Validation Error Σφάλμα Ελέγχου - + A theme with this name already exists. Υπάρχει ήδη θέμα με αυτό το όνομα. - + OpenLP Themes (*.theme *.otz) Θέματα OpenLP (*.theme *.otz) - + Copy of %s Copy of <theme name> Αντιγραφή του %s - + Theme Already Exists Ήδη Υπαρκτό Θέμα @@ -4592,222 +4680,222 @@ 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: Θέση 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: Όνομα θέματος: @@ -4817,47 +4905,47 @@ The content encoding is not UTF-8. Επεξεργασία Θέματος - %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: Χρώμα φόντου: - + Justify Ευθυγράμμιση - + Layout Preview Προεπισκόπηση Σχεδίου - + Transparent Διαφανές @@ -4865,42 +4953,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme Καθολικό Θέμα - + Theme Level Επίπεδο Θέματος - + S&ong Level Επίπεδο &Ύμνου - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Χρήση του θέματος από κάθε ύμνο στην βάση δεδομένων. Αν ένας ύμνος δεν έχει ένα θέμα συνδεόμενο με αυτόν, θα γίνει χρήση του θέματος της λειτουργίας. Αν η λειτουργία δεν έχει θέμα, τότε θα γίνει χρήση του καθολικού θέματος. - + &Service Level Επίπεδο &Λειτουργίας - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Χρήση του θέματος της λειτουργίας, παρακάμπτοντας τα θέματα των ύμνων. Αν η λειτουργία δεν έχει θέμα, θα χρησιμοποιηθεί το καθολικό θέμα. - + &Global Level &Καθολικό Επίπεδο - + Use the global theme, overriding any themes associated with either the service or the songs. Χρήση του καθολικού θέματος, παρακάμπτοντας όλα τα υπόλοιπα θέματα λειτουργίας ή ύμνων. @@ -5146,22 +5234,22 @@ The content encoding is not UTF-8. Έκδοση - + Delete the selected item. Διαγραφή επιλεγμένου αντικειμένου. - + Move selection up one position. Μεταφορά επιλογής μία θέση επάνω. - + Move selection down one position. Μεταφορά επιλογής μία θέση κάτω. - + &Vertical Align: &Κάθετη Ευθυγράμμιση: @@ -5227,7 +5315,7 @@ The content encoding is not UTF-8. Πρέπει να καθορίσετε τουλάχιστον ένα %s αρχείο από το οποίο να γίνει εισαγωγή. - + Welcome to the Bible Import Wizard Καλωσορίσατε στον Οδηγό Εισαγωγής Βίβλου @@ -5410,11 +5498,6 @@ The content encoding is not UTF-8. Reset live background. Επαναφορά προβαλλόμενου φόντου. - - - &Split - &Διαίρεση - Split a slide into two only if it does not fit on the screen as one slide. @@ -5461,29 +5544,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 και %2 - + %1, and %2 Locale list separator: end %1, και %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5558,17 +5646,17 @@ The content encoding is not UTF-8. Παρουσίαση με χρήση: - + File Exists Ήδη Υπάρχον Αρχείο - + A presentation with that filename already exists. Ήδη υπάρχει παρουσίαση με αυτό το όνομα. - + This type of presentation is not supported. Αυτός ο τύπος παρουσίασης δεν υποστηρίζεται. @@ -5578,17 +5666,17 @@ The content encoding is not UTF-8. Παρουσιάσεις (%s) - + Missing Presentation Απούσα Παρουσίαση - + The Presentation %s no longer exists. Η Παρουσίαση %s δεν υπάρχει πλέον. - + The Presentation %s is incomplete, please reload. Η Παρουσίαση %s είναι ημιτελής, παρακαλούμε επαναφορτώστε. @@ -5669,11 +5757,6 @@ The content encoding is not UTF-8. Search Αναζήτηση - - - Back - Πίσω - Refresh @@ -5685,50 +5768,70 @@ The content encoding is not UTF-8. Κενή - + Show Προβολή - + Prev Προήγ - + Next Επόμ - + Text Κείμενο - + Show Alert Εμφάνιση Ειδοποίησης - + Go Live Μετάβαση σε Προβολή - + No Results Κανένα Αποτέλεσμα - + Options Επιλογές - + Add to Service Προσθήκη στην Λειτουργία + + + Home + + + + + Theme + Θέμα + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5862,7 +5965,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Διαγραφή Δεδομένων Χρήσης Ύμνων @@ -5887,7 +5990,7 @@ The content encoding is not UTF-8. Όλα τα απαιτούμενα δεδομένα έχουν διαγραφεί επιτυχώς. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. Επιλέξτε την ημερομηνία έως την οποία τα δεδομένα χρησης ύμνων θα πρέπει να διαγραφούν. Όλα τα δεδομένα πριν από αυτήν την ημερομηνία θα διαγραφούν οριστικά. @@ -5895,22 +5998,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Εξαγωγή Χρήσης Ύμνων - + Select Date Range Επιλέξτε Χρονική Περίοδο - + to έως - + Report Location Αναφέρατε Τοποθεσία @@ -6189,210 +6292,223 @@ The encoding is responsible for the correct character representation. EasyWorship] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Επεξεργασία Ύμνων - + &Title: &Τίτλος: - + Alt&ernate title: &Εναλλαγή τίτλου: - + &Lyrics: &Στίχοι: - + &Verse order: Σειρά &Στροφών: - + Ed&it All Ε&πεξεργασία Όλων - + Title && Lyrics Τίτλος && Στίχοι - + &Add to Song &Προσθήκη στον Ύμνο - + &Remove &Αφαίρεση - + &Manage Authors, Topics, Song Books &Διαχείριση Συγγραφέων, Θεμάτων, Βιβλίων Ύμνων - + A&dd to Song Προ&σθήκη στον Ύμνο - + R&emove Αφαίρεσ&η - + Book: Βιβλίο: - + Number: Αριθμός: - + Authors, Topics && Song Book Συγγραφεις, Θέματα && Βιβλία Ύμνων - + New &Theme Νέο &Θέμα - + Copyright Information Πληροφορίες Πνευματικών Δικαιωμάτων - + Comments Σχόλια - + Theme, Copyright Info && Comments Θέμα, Πληροφορίες Πνευματικών Δικαιωμάτων && Σχόλια - + Add Author Προσθήκη Συγγραφέα - + This author does not exist, do you want to add them? Αυτός ο συγγραφέας δεν υπάρχει, θέλετε να τον προσθέσετε; - + This author is already in the list. Αυτός ο συγγραφέας είναι ήδη στην λίστα. - + 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. Δεν επιλέξατε έγκυρο συγγραφέα. Είτε επιλέξτε έναν συγγραφέα από την λίστα, είτε πληκτρολογείστε έναν νέο συγγραφέα και πιέστε "Προσθήκη Συγγραφέα στον Ύμνο" για να προσθέσετε τον νέο συγγραφέα. - + Add Topic Προσθήκη Κατηγορίας - + This topic does not exist, do you want to add it? Η κατηγορία δεν υπάρχει, θέλετε να την προσθέσετε; - + This topic is already in the list. Η κατηγορία υπάρχει ήδη στην λίστα. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. Δεν επιλέξατε έγκυρη κατηγορία. Είτε επιλέξτε μια κατηγορία από την λίστα, είτε πληκτρολογήστε μια νέα κατηγορία και πιέστε "Προσθήκη Κατηγορίας στον Ύμνο" για να προσθέσετε την νέα κατηγορία. - + You need to type in a song title. Πρέπει να δώσετε έναν τίτλο στον ύμνο. - + You need to type in at least one verse. Πρέπει να πληκτρολογήσετε τουλάχιστον ένα εδάφιο. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Η σειρά των εδαφίων δεν είναι έγκυρη. Δεν υπάρχει εδάφιο αντίστοιχο στο %s. Έγκυρες καταχωρήσεις είναι οι %s. - + Add Book Προσθήκη Βιβλίου - + This song book does not exist, do you want to add it? Αυτό το βιβλίο ύμνων δεν υπάρχει, θέλετε να το προσθέσετε; - + You need to have an author for this song. Πρέπει να έχετε έναν συγγραφέα για αυτόν τον ύμνο. - + You need to type some text in to the verse. Πρέπει να πληκτρολογήσετε λίγο κείμενο στο εδάφιο. - + Linked Audio Συνδεδεμένος Ήχος - + Add &File(s) Προσθήκη &Αρχείου(-ων) - + Add &Media Προσθήκη &Πολυμέσων - + Remove &All &Αφαίρεση Όλων - + Open File(s) Άνοιγμα Αρχείου(-ων) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Προειδοποίηση:</strong> Δεν χρησιμοποιούνται όλα τα εδάφια. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. Η σειρά εδαφίων είναι ακατάλληλη. Δεν υπάρχουν εδάφια που να αντιστοιχούν στο %s. Κατάλληλες καταχωρήσεις είναι %s. @@ -6639,12 +6755,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) Επιλογή Αρχείων Πολυμέσων - + Select one or more audio files from the list below, and click OK to import them into this song. Επιλέξτε ένα ή περισσοτερα αρχεία ήχου από την παρακάτω λίστα και κάντε κλικ στο OK για να τα εισάγετε σε αυτόν τον ύμνο. @@ -6662,7 +6778,7 @@ The encoding is responsible for the correct character representation. Στίχοι - + CCLI License: Άδεια CCLI: @@ -6685,7 +6801,7 @@ The encoding is responsible for the correct character representation. Διατήρηση της λίστας συγγραφέων, θεμάτων και βιβλίων. - + copy For song cloning αντιγραφή @@ -6779,12 +6895,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright πνευματικά δικαιώματα - + The following songs could not be imported: Τα ακόλουθα τραγούδια δεν εισήχθηκαν: @@ -6944,8 +7060,8 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service - Προσθήκη απόντων ύμνων κατά το άνοιγμα τις λειτουργίας + Import missing songs from service files + diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index 16bb1f121..6cf4e22e4 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Alert Message - + Alert &text: Alert &text: - + &New &New - + &Save &Save - + Displ&ay Displ&ay - + Display && Cl&ose Display && Cl&ose @@ -79,7 +79,7 @@ You haven't specified any text for your alert. Please type in some text before clicking New. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Font - + Font name: Font name: - + Font color: Font color: - + Background color: Background color: - + Font size: Font size: - + Alert timeout: Alert timeout: @@ -661,42 +661,87 @@ Do you want to continue anyway? :|v|V|verse|verses;;-|to;;,|and;;end + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + You need to specify a version name for your Bible. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + Bible Exists + Bible Exists + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Scripture Reference Error - + Web Bible cannot be used Web Bible cannot be used - + Text Search is not available with Web Bibles. Text Search is not available with Web Bibles. - + 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. 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - Preferred Bookname Language - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - Bible language - Bible language - - - - Application language - Application language - English English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: Current name: - + Corresponding name: Corresponding name: - + Show Books From Show Books From - + Old Testament Old Testament - + New Testament New Testament - + Apocrypha Apocrypha @@ -935,6 +968,75 @@ Bible should be displayed in the Bible search: Importing verses... done. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + License Details + + + + Version name: + Version name: + + + + Copyright: + Copyright: + + + + Permissions: + Permissions: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + English + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bible Import Wizard - + 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. 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. - + Web Download Web Download - + Location: Location: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bible: - + Download Options Download Options - + Server: Server: - + Username: Username: - + Password: Password: - + Proxy Server (Optional) Proxy Server (Optional) - + License Details License Details - + Set up the Bible's license details. Set up the Bible's license details. - + Version name: Version name: - + Copyright: Copyright: - + Please wait while your Bible is imported. Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. Your Bible import failed. - + CSV File CSV File - + Bibleserver Bibleserver - + Permissions: Permissions: - + Bible file: Bible file: - + Books file: Books file: - + Verses file: Verses file: - + openlp.org 1.x Bible Files openlp.org 1.x Bible Files - + Registering Bible... Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Registered Bible. Please note, that verses will be downloaded on @@ -1147,17 +1249,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: Language: @@ -1173,90 +1275,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Quick - + Find: Find: - + Book: Book: - + Chapter: Chapter: - + Verse: Verse: - + From: From: - + To: To: - + Text Search Text Search - + Second: Second: - + Scripture Reference Scripture Reference - + Toggle to keep or clear the previous results. Toggle to keep or clear the previous results. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + 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. - + Search Scripture Reference... Search Scripture Reference... - + Search Text... Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... Importing %s %s... @@ -1513,42 +1620,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides Edit Custom Slides - + &Title: &Title: - + Add a new slide at bottom. Add a new slide at bottom. - + Edit the selected slide. Edit the selected slide. - + Edit all the slides at once. Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. Split a slide into two by inserting a slide splitter. - + The&me: The&me: - + &Credits: &Credits: @@ -1563,12 +1670,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I You need to add at least one slide - + Ed&it All Ed&it All - + Insert Slide Insert Slide @@ -1666,34 +1773,34 @@ 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. There was no display item to amend. @@ -1701,19 +1808,19 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color Background Color - + Default Color: Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. + Visible background for images with aspect ratio different to screen. @@ -1838,22 +1945,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players Available Media Players - + %s (unavailable) %s (unavailable) - + Player Order Player Order - + Allow media player to be overridden Allow media player to be overridden @@ -1883,17 +1990,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits Credits - + License License - + Contribute Contribute @@ -1903,17 +2010,17 @@ Should OpenLP upgrade now? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -2038,7 +2145,7 @@ Final Credit He has set us free. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2055,7 +2162,7 @@ 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. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2065,62 +2172,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings UI Settings - + Number of recent files to display: Number of recent files to display: - + Remember active media manager tab on startup Remember active media manager tab on startup - + Double-click to send items straight to live Double-click to send items straight to live - + Expand new service items on creation Expand new service items on creation - + Enable application exit confirmation Enable application exit confirmation - + Mouse Cursor Mouse Cursor - + Hide mouse cursor when over display window Hide mouse cursor when over display window - + Default Image Default Image - + Background color: Background color: - + Image file: Image file: - + Open File Open File @@ -2130,124 +2237,124 @@ Portions copyright © 2004-2012 %s Advanced - + Preview items when clicked in Media Manager Preview items when clicked in Media Manager - + Click to select a color. Click to select a color. - + Browse for an image file to display. Browse for an image file to display. - + Revert to the default OpenLP logo. Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Service %Y-%m-%d %H-%M - + Default Service Name Default Service Name - + Enable default service name Enable default service name - + Date and Time: Date and Time: - + Monday Monday - + Tuesday Tuesday - + Wednesday Wednesday - + Thurdsday Thurdsday - + Friday Friday - + Saturday Saturday - + Sunday Sunday - + Now Now - + Time when usual service starts. Time when usual service starts. - + Name: Name: - + Consult the OpenLP manual for usage. Consult the OpenLP manual for usage. - + Revert to the default service name "%s". Revert to the default service name "%s". - + Example: Example: - + X11 X11 - + Bypass X11 Window Manager Bypass X11 Window Manager - + Syntax error. Syntax error. @@ -2255,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Error Occurred - + 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. 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. - + Send E-Mail Send E-Mail - + Save to File Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File Attach File @@ -2593,12 +2700,17 @@ Version: %s Custom Slides Custom Slides + + + Finish + Finish + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2606,66 +2718,61 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - Finish - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags Configure Formatting Tags - + Edit Selection Edit Selection - + Save Save - + Description Description - + Tag Tag - + Start tag Start tag - + End tag End tag - + Tag Id Tag Id - + Start HTML Start HTML - + End HTML End HTML @@ -2909,40 +3016,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Start background audio paused - + Service Item Slide Limits Service Item Slide Limits - - - &End Slide - &End Slide - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - &Wrap Slide - &Wrap Slide - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - &Next Item - &Next Item - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Override display position: @@ -2953,6 +3030,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list Repeat track list + + + Behavior of next/previous on the last/first slide: + Behavior of next/previous on the last/first slide: + + + + &Remain on Slide + &Remain on Slide + + + + &Wrap around + &Wrap around + + + + &Move to next/previous service item + &Move to next/previous service item + OpenLP.LanguageManager @@ -2978,287 +3075,287 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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/. @@ -3267,22 +3364,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 @@ -3293,82 +3390,82 @@ You can download the latest version from http://openlp.org/. English - + 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. - + &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. - + &Recent Files &Recent Files - + L&ock Panels L&ock Panels - + Prevent the panels being moved. Prevent the panels being moved. - + Re-run First Time Wizard Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? 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. @@ -3377,43 +3474,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and 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 List - + Clear the list of recent files. Clear the list of recent files. - + Configure &Formatting Tags... Configure &Formatting Tags... - + Export OpenLP settings to a specified *.config file 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 OpenLP settings from a specified *.config file previously exported on this or another machine - + Import settings? Import settings? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3426,32 +3523,32 @@ Importing settings will make permanent changes to your current OpenLP configurat Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. - + Open File Open File - + OpenLP Export Settings Files (*.conf) OpenLP Export Settings Files (*.conf) - + Import settings Import settings - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP will now close. Imported settings will be applied the next time you start OpenLP. - + Export Settings File Export Settings File - + OpenLP Export Settings File (*.conf) OpenLP Export Settings File (*.conf) @@ -3485,7 +3582,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected No Items Selected @@ -3573,27 +3670,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List Plugin List - + Plugin Details Plugin Details - + Status: Status: - + Active Active - + Inactive Inactive @@ -3616,12 +3713,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page Fit Page - + Fit Width Fit Width @@ -3629,7 +3726,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options Options @@ -3644,47 +3741,47 @@ Suffix not supported Copy as HTML - + Zoom In Zoom In - + Zoom Out Zoom Out - + Zoom Original Zoom Original - + Other Options Other Options - + Include slide text if available Include slide text if available - + Include service item notes Include service item notes - + Include play length of media items Include play length of media items - + Add page break before each text item Add page break before each text item - + Service Sheet Service Sheet @@ -3694,12 +3791,12 @@ Suffix not supported Print - + Title: Title: - + Custom Footer Text: Custom Footer Text: @@ -3733,7 +3830,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item Reorder Service Item @@ -3741,189 +3838,189 @@ Suffix not supported OpenLP.ServiceManager - + Move to &top Move to &top - + Move item to the top of the service. Move item to the top of the service. - + Move &up Move &up - + Move item up one position in the service. Move item up one position in the service. - + Move &down Move &down - + Move item down one position in the service. Move item down one position in the service. - + Move to &bottom Move to &bottom - + Move item to the end of the service. Move item to the end of the service. - + &Delete From Service &Delete From Service - + Delete the selected item from the service. Delete the selected item from the service. - + &Add New Item &Add New Item - + &Add to Selected Item &Add to Selected Item - + &Edit Item &Edit Item - + &Reorder Item &Reorder Item - + &Notes &Notes - + &Change Item Theme &Change Item Theme - + OpenLP Service Files (*.osz) OpenLP Service Files (*.osz) - + 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. - + Missing Display Handler Missing Display Handler - + Your item cannot be displayed as there is no handler to display it Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all &Expand all - + Expand all the service items. Expand all the service items. - + &Collapse all &Collapse all - + Collapse all the service items. Collapse all the service items. - + Open File Open File - + Moves the selection down the window. Moves the selection down the window. - + Move up Move up - + Moves the selection up the window. Moves the selection up the window. - + Go Live Go Live - + Send the selected item to Live. Send the selected item to Live. - + &Start Time &Start Time - + Show &Preview Show &Preview - + Show &Live Show &Live - + Modified Service Modified Service - + 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? @@ -3943,72 +4040,72 @@ The content encoding is not UTF-8. Playing time: - + Untitled Service Untitled 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 - + Load an existing service. Load an existing service. - + Save this service. Save this service. - + Select a theme for the service. 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. - + Service File Missing Service File Missing - + Slide theme Slide theme - + Notes Notes - + Edit Edit - + Service copy only Service copy only @@ -4016,7 +4113,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Service Item Notes @@ -4032,12 +4129,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action Action - + Shortcut Shortcut @@ -4052,32 +4149,32 @@ The content encoding is not UTF-8. The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate Alternate - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. - + Default Default - + Custom Custom - + Capture shortcut. Capture shortcut. - + Restore the default shortcut of this action. Restore the default shortcut of this action. @@ -4092,7 +4189,7 @@ The content encoding is not UTF-8. Do you want to restore all shortcuts to their defaults? - + Configure Shortcuts Configure Shortcuts @@ -4259,11 +4356,6 @@ The content encoding is not UTF-8. Background Audio Background Audio - - - Next Track - Next Track - Go to next audio track. @@ -4346,17 +4438,17 @@ The content encoding is not UTF-8. Start time is after the finish time of the media item - + Theme Layout Theme Layout - + The blue box shows the main area. The blue box shows the main area. - + The red box shows the footer. The red box shows the footer. @@ -4457,62 +4549,62 @@ The content encoding is not UTF-8. Set As &Global Default - + %s (default) %s (default) - + You must select a theme to edit. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. - + You have not selected a theme. You have not selected a theme. - + Save Theme - (%s) Save Theme - (%s) - + Theme Exported Theme Exported - + Your theme has been successfully exported. Your theme has been successfully exported. - + Theme Export Failed Theme Export Failed - + Your theme could not be exported due to an error. Your theme could not be exported due to an error. - + Select Theme Import File Select Theme Import File - + File is not a valid theme. File is not a valid theme. @@ -4532,58 +4624,58 @@ The content encoding is not UTF-8. &Export Theme - + You must select a theme to rename. You must select a theme to rename. - + Rename Confirmation Rename Confirmation - + Rename %s theme? Rename %s theme? - + You must select a theme to delete. You must select a theme to delete. - + Delete Confirmation Delete Confirmation - + Delete %s theme? Delete %s theme? - + Validation Error Validation Error - + A theme with this name already exists. A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> Copy of %s - + Theme Already Exists Theme Already Exists @@ -4591,222 +4683,222 @@ 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 Color - + Gradient Gradient - + Color: Color: - + 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 Center - + 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: @@ -4816,47 +4908,47 @@ The content encoding is not UTF-8. 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. 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 - + Starting color: Starting color: - + Ending color: Ending color: - + Background color: Background color: - + Justify Justify - + Layout Preview Layout Preview - + Transparent Transparent @@ -4864,42 +4956,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme Global Theme - + Theme Level Theme Level - + S&ong Level S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. Use the global theme, overriding any themes associated with either the service or the songs. @@ -5145,22 +5237,22 @@ The content encoding is not UTF-8. Version - + Delete the selected item. Delete the selected item. - + Move selection up one position. Move selection up one position. - + Move selection down one position. Move selection down one position. - + &Vertical Align: &Vertical Align: @@ -5226,7 +5318,7 @@ The content encoding is not UTF-8. You need to specify at least one %s file to import from. - + Welcome to the Bible Import Wizard Welcome to the Bible Import Wizard @@ -5409,11 +5501,6 @@ The content encoding is not UTF-8. Reset live background. Reset live background. - - - &Split - &Split - Split a slide into two only if it does not fit on the screen as one slide. @@ -5460,29 +5547,34 @@ The content encoding is not UTF-8. Search bar place holder text Search Themes... + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 and %2 - + %1, and %2 Locale list separator: end %1, and %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5557,17 +5649,17 @@ The content encoding is not UTF-8. Present using: - + File Exists File Exists - + A presentation with that filename already exists. A presentation with that filename already exists. - + This type of presentation is not supported. This type of presentation is not supported. @@ -5577,17 +5669,17 @@ The content encoding is not UTF-8. Presentations (%s) - + Missing Presentation Missing Presentation - + The Presentation %s no longer exists. The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. The Presentation %s is incomplete, please reload. @@ -5668,11 +5760,6 @@ The content encoding is not UTF-8. Search Search - - - Back - Back - Refresh @@ -5684,50 +5771,70 @@ The content encoding is not UTF-8. Blank - + Show Show - + Prev Prev - + Next Next - + Text Text - + Show Alert Show Alert - + Go Live Go Live - + No Results No Results - + Options Options - + Add to Service Add to Service + + + Home + + + + + Theme + Theme + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5861,7 +5968,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Delete Song Usage Data @@ -5886,7 +5993,7 @@ The content encoding is not UTF-8. 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. Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5894,22 +6001,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Song Usage Extraction - + Select Date Range Select Date Range - + to to - + Report Location Report Location @@ -6188,210 +6295,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Song Editor - + &Title: &Title: - + Alt&ernate title: Alt&ernate title: - + &Lyrics: &Lyrics: - + &Verse order: &Verse order: - + Ed&it All Ed&it All - + Title && Lyrics Title && Lyrics - + &Add to Song &Add to Song - + &Remove &Remove - + &Manage Authors, Topics, Song Books &Manage Authors, Topics, Song Books - + A&dd to Song A&dd to Song - + R&emove R&emove - + Book: Book: - + Number: Number: - + Authors, Topics && Song Book Authors, Topics && Song Book - + New &Theme New &Theme - + Copyright Information Copyright Information - + Comments Comments - + Theme, Copyright Info && Comments Theme, Copyright Info && Comments - + Add Author Add Author - + This author does not exist, do you want to add them? This author does not exist, do you want to add them? - + This author is already in the list. This author is already in the list. - + 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. 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. - + Add Topic Add Topic - + This topic does not exist, do you want to add it? This topic does not exist, do you want to add it? - + This topic is already in the list. This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. You need to type in a song title. - + You need to type in at least one verse. You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book Add Book - + This song book does not exist, do you want to add it? This song book does not exist, do you want to add it? - + You need to have an author for this song. You need to have an author for this song. - + You need to type some text in to the verse. You need to type some text in to the verse. - + Linked Audio Linked Audio - + Add &File(s) Add &File(s) - + Add &Media Add &Media - + Remove &All Remove &All - + Open File(s) Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6638,12 +6758,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. Select one or more audio files from the list below, and click OK to import them into this song. @@ -6661,7 +6781,7 @@ The encoding is responsible for the correct character representation.Lyrics - + CCLI License: CCLI License: @@ -6684,7 +6804,7 @@ The encoding is responsible for the correct character representation.Maintain the lists of authors, topics and books. - + copy For song cloning copy @@ -6778,12 +6898,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: The following songs could not be imported: @@ -6943,8 +7063,8 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service - Add missing songs when opening service + Import missing songs from service files + Import missing songs from service files diff --git a/resources/i18n/en_GB.ts b/resources/i18n/en_GB.ts index ef48361d4..35f9572d2 100644 --- a/resources/i18n/en_GB.ts +++ b/resources/i18n/en_GB.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Alert Message - + Alert &text: Alert &text: - + &New &New - + &Save &Save - + Displ&ay Displ&ay - + Display && Cl&ose Display && Cl&ose @@ -79,7 +79,7 @@ You haven't specified any text for your alert. Please type in some text before clicking New. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Font - + Font name: Font name: - + Font color: Font colour: - + Background color: Background colour: - + Font size: Font size: - + Alert timeout: Alert timeout: @@ -661,42 +661,87 @@ Do you want to continue anyway? :|v|V|verse|verses;;-|to;;,|and;;end + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + You need to specify a version name for your Bible. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + Bible Exists + Bible Exists + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Scripture Reference Error - + Web Bible cannot be used Web Bible cannot be used - + Text Search is not available with Web Bibles. Text Search is not available with Web Bibles. - + 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. 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - Preferred Bookname Language - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - Bible language - Bible language - - - - Application language - Application language - English English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: Current name: - + Corresponding name: Corresponding name: - + Show Books From Show Books From - + Old Testament Old Testament - + New Testament New Testament - + Apocrypha Apocrypha @@ -935,6 +968,75 @@ Bible should be displayed in the Bible search: Importing verses... done. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + License Details + + + + Version name: + Version name: + + + + Copyright: + Copyright: + + + + Permissions: + Permissions: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bible Import Wizard - + 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. 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. - + Web Download Web Download - + Location: Location: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bible: - + Download Options Download Options - + Server: Server: - + Username: Username: - + Password: Password: - + Proxy Server (Optional) Proxy Server (Optional) - + License Details License Details - + Set up the Bible's license details. Set up the Bible's license details. - + Version name: Version name: - + Copyright: Copyright: - + Please wait while your Bible is imported. Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. Your Bible import failed. - + CSV File CSV File - + Bibleserver Bibleserver - + Permissions: Permissions: - + Bible file: Bible file: - + Books file: Books file: - + Verses file: Verses file: - + openlp.org 1.x Bible Files openlp.org 1.x Bible Files - + Registering Bible... Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Registered Bible. Please note, that verses will be downloaded on @@ -1147,17 +1249,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: Language: @@ -1173,90 +1275,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Quick - + Find: Find: - + Book: Book: - + Chapter: Chapter: - + Verse: Verse: - + From: From: - + To: To: - + Text Search Text Search - + Second: Second: - + Scripture Reference Scripture Reference - + Toggle to keep or clear the previous results. Toggle to keep or clear the previous results. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... Importing %s %s... @@ -1513,42 +1620,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides Edit Custom Slides - + &Title: &Title: - + Add a new slide at bottom. Add a new slide at bottom. - + Edit the selected slide. Edit the selected slide. - + Edit all the slides at once. Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. Split a slide into two by inserting a slide splitter. - + The&me: The&me: - + &Credits: &Credits: @@ -1563,12 +1670,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I You need to add at least one slide - + Ed&it All Ed&it All - + Insert Slide Insert Slide @@ -1666,34 +1773,34 @@ 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. There was no display item to amend. @@ -1701,19 +1808,19 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color Background Color - + Default Color: Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. + @@ -1838,22 +1945,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players Available Media Players - + %s (unavailable) %s (unavailable) - + Player Order Player Order - + Allow media player to be overridden Allow media player to be overridden @@ -1883,17 +1990,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits Credits - + License Licence - + Contribute Contribute @@ -1903,17 +2010,17 @@ Should OpenLP upgrade now? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; version 2 of the Licence. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -2038,7 +2145,7 @@ Final Credit He has set us free. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2055,7 +2162,7 @@ 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. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2065,62 +2172,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings UI Settings - + Number of recent files to display: Number of recent files to display: - + Remember active media manager tab on startup Remember active media manager tab on startup - + Double-click to send items straight to live Double-click to send items straight to live - + Expand new service items on creation Expand new service items on creation - + Enable application exit confirmation Enable application exit confirmation - + Mouse Cursor Mouse Cursor - + Hide mouse cursor when over display window Hide mouse cursor when over display window - + Default Image Default Image - + Background color: Background colour: - + Image file: Image file: - + Open File Open File @@ -2130,124 +2237,124 @@ Portions copyright © 2004-2012 %s Advanced - + Preview items when clicked in Media Manager Preview items when clicked in Media Manager - + Click to select a color. Click to select a colour. - + Browse for an image file to display. Browse for an image file to display. - + Revert to the default OpenLP logo. Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Service %Y-%m-%d %H-%M - + Default Service Name Default Service Name - + Enable default service name Enable default service name - + Date and Time: Date and Time: - + Monday Monday - + Tuesday Tuesday - + Wednesday Wednesday - + Thurdsday Thurdsday - + Friday Friday - + Saturday Saturday - + Sunday Sunday - + Now Now - + Time when usual service starts. Time when usual service starts. - + Name: Name: - + Consult the OpenLP manual for usage. Consult the OpenLP manual for usage. - + Revert to the default service name "%s". Revert to the default service name "%s". - + Example: Example: - + X11 X11 - + Bypass X11 Window Manager Bypass X11 Window Manager - + Syntax error. Syntax error. @@ -2255,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Error Occurred - + 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. 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. - + Send E-Mail Send E-Mail - + Save to File Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File Attach File @@ -2593,79 +2700,75 @@ Version: %s Custom Slides Custom Slides + + + Finish + Finish + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. - -To 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. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - Finish - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Configure Formatting Tags - + Edit Selection Edit Selection - + Save Save - + Description Description - + Tag Tag - + Start tag Start tag - + End tag End tag - + Tag Id Tag Id - + Start HTML Start HTML - + End HTML End HTML @@ -2909,40 +3012,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Start background audio paused - + Service Item Slide Limits Service Item Slide Limits - - - &End Slide - &End Slide - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - &Wrap Slide - &Wrap Slide - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - &Next Item - &Next Item - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Override display position: @@ -2953,6 +3026,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2978,287 +3071,287 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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/. @@ -3266,22 +3359,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 @@ -3292,82 +3385,82 @@ 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. - + &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. - + &Recent Files &Recent Files - + L&ock Panels L&ock Panels - + Prevent the panels being moved. Prevent the panels being moved. - + Re-run First Time Wizard Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? 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. @@ -3376,43 +3469,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and 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 List - + Clear the list of recent files. Clear the list of recent files. - + Configure &Formatting Tags... Configure &Formatting Tags... - + Export OpenLP settings to a specified *.config file 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 OpenLP settings from a specified *.config file previously exported on this or another machine - + Import settings? Import settings? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3425,32 +3518,32 @@ Importing settings will make permanent changes to your current OpenLP configurat Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. - + Open File Open File - + OpenLP Export Settings Files (*.conf) OpenLP Export Settings Files (*.conf) - + Import settings Import settings - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP will now close. Imported settings will be applied the next time you start OpenLP. - + Export Settings File Export Settings File - + OpenLP Export Settings File (*.conf) OpenLP Export Settings File (*.conf) @@ -3484,7 +3577,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected No Items Selected @@ -3572,27 +3665,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List Plugin List - + Plugin Details Plugin Details - + Status: Status: - + Active Active - + Inactive Inactive @@ -3615,12 +3708,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page Fit Page - + Fit Width Fit Width @@ -3628,7 +3721,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options Options @@ -3643,47 +3736,47 @@ Suffix not supported Copy as HTML - + Zoom In Zoom In - + Zoom Out Zoom Out - + Zoom Original Zoom Original - + Other Options Other Options - + Include slide text if available Include slide text if available - + Include service item notes Include service item notes - + Include play length of media items Include play length of media items - + Add page break before each text item Add page break before each text item - + Service Sheet Service Sheet @@ -3693,12 +3786,12 @@ Suffix not supported Print - + Title: Title: - + Custom Footer Text: Custom Footer Text: @@ -3732,7 +3825,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item Reorder Service Item @@ -3740,189 +3833,189 @@ Suffix not supported OpenLP.ServiceManager - + Move to &top Move to &top - + Move item to the top of the service. Move item to the top of the service. - + Move &up Move &up - + Move item up one position in the service. Move item up one position in the service. - + Move &down Move &down - + Move item down one position in the service. Move item down one position in the service. - + Move to &bottom Move to &bottom - + Move item to the end of the service. Move item to the end of the service. - + &Delete From Service &Delete From Service - + Delete the selected item from the service. Delete the selected item from the service. - + &Add New Item &Add New Item - + &Add to Selected Item &Add to Selected Item - + &Edit Item &Edit Item - + &Reorder Item &Reorder Item - + &Notes &Notes - + &Change Item Theme &Change Item Theme - + OpenLP Service Files (*.osz) OpenLP Service Files (*.osz) - + 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. - + Missing Display Handler Missing Display Handler - + Your item cannot be displayed as there is no handler to display it Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all &Expand all - + Expand all the service items. Expand all the service items. - + &Collapse all &Collapse all - + Collapse all the service items. Collapse all the service items. - + Open File Open File - + Moves the selection down the window. Moves the selection down the window. - + Move up Move up - + Moves the selection up the window. Moves the selection up the window. - + Go Live Go Live - + Send the selected item to Live. Send the selected item to Live. - + &Start Time &Start Time - + Show &Preview Show &Preview - + Show &Live Show &Live - + Modified Service Modified Service - + 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? @@ -3942,72 +4035,72 @@ The content encoding is not UTF-8. Playing time: - + Untitled Service Untitled 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 - + Load an existing service. Load an existing service. - + Save this service. Save this service. - + Select a theme for the service. 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. - + Service File Missing Service File Missing - + Slide theme Slide theme - + Notes Notes - + Edit Edit - + Service copy only Service copy only @@ -4015,7 +4108,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Service Item Notes @@ -4031,12 +4124,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action Action - + Shortcut Shortcut @@ -4051,32 +4144,32 @@ The content encoding is not UTF-8. The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate Alternate - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. - + Default Default - + Custom Custom - + Capture shortcut. Capture shortcut. - + Restore the default shortcut of this action. Restore the default shortcut of this action. @@ -4091,7 +4184,7 @@ The content encoding is not UTF-8. Do you want to restore all shortcuts to their defaults? - + Configure Shortcuts Configure Shortcuts @@ -4258,11 +4351,6 @@ The content encoding is not UTF-8. Background Audio Background Audio - - - Next Track - Next Track - Go to next audio track. @@ -4345,17 +4433,17 @@ The content encoding is not UTF-8. Start time is after the finish time of the media item - + Theme Layout Theme Layout - + The blue box shows the main area. The blue box shows the main area. - + The red box shows the footer. The red box shows the footer. @@ -4456,62 +4544,62 @@ The content encoding is not UTF-8. Set As &Global Default - + %s (default) %s (default) - + You must select a theme to edit. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. - + You have not selected a theme. You have not selected a theme. - + Save Theme - (%s) Save Theme - (%s) - + Theme Exported Theme Exported - + Your theme has been successfully exported. Your theme has been successfully exported. - + Theme Export Failed Theme Export Failed - + Your theme could not be exported due to an error. Your theme could not be exported due to an error. - + Select Theme Import File Select Theme Import File - + File is not a valid theme. File is not a valid theme. @@ -4531,58 +4619,58 @@ The content encoding is not UTF-8. &Export Theme - + You must select a theme to rename. You must select a theme to rename. - + Rename Confirmation Rename Confirmation - + Rename %s theme? Rename %s theme? - + You must select a theme to delete. You must select a theme to delete. - + Delete Confirmation Delete Confirmation - + Delete %s theme? Delete %s theme? - + Validation Error Validation Error - + A theme with this name already exists. A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> Copy of %s - + Theme Already Exists Theme Already Exists @@ -4590,222 +4678,222 @@ 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: @@ -4815,47 +4903,47 @@ The content encoding is not UTF-8. 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. 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 - + Starting color: Starting color: - + Ending color: Ending color: - + Background color: Background color: - + Justify Justify - + Layout Preview Layout Preview - + Transparent Transparent @@ -4863,42 +4951,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme Global Theme - + Theme Level Theme Level - + S&ong Level S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. Use the global theme, overriding any themes associated with either the service or the songs. @@ -5144,22 +5232,22 @@ The content encoding is not UTF-8. Version - + Delete the selected item. Delete the selected item. - + Move selection up one position. Move selection up one position. - + Move selection down one position. Move selection down one position. - + &Vertical Align: &Vertical Align: @@ -5225,7 +5313,7 @@ The content encoding is not UTF-8. You need to specify at least one %s file to import from. - + Welcome to the Bible Import Wizard Welcome to the Bible Import Wizard @@ -5408,11 +5496,6 @@ The content encoding is not UTF-8. Reset live background. Reset live background. - - - &Split - &Split - Split a slide into two only if it does not fit on the screen as one slide. @@ -5459,29 +5542,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 and %2 - + %1, and %2 Locale list separator: end %1, and %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5556,17 +5644,17 @@ The content encoding is not UTF-8. Present using: - + File Exists File Exists - + A presentation with that filename already exists. A presentation with that filename already exists. - + This type of presentation is not supported. This type of presentation is not supported. @@ -5576,17 +5664,17 @@ The content encoding is not UTF-8. Presentations (%s) - + Missing Presentation Missing Presentation - + The Presentation %s no longer exists. The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. The Presentation %s is incomplete, please reload. @@ -5667,11 +5755,6 @@ The content encoding is not UTF-8. Search Search - - - Back - Back - Refresh @@ -5683,50 +5766,70 @@ The content encoding is not UTF-8. Blank - + Show Show - + Prev Prev - + Next Next - + Text Text - + Show Alert Show Alert - + Go Live Go Live - + No Results No Results - + Options Options - + Add to Service Add to Service + + + Home + + + + + Theme + Theme + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5860,7 +5963,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Delete Song Usage Data @@ -5885,7 +5988,7 @@ The content encoding is not UTF-8. 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. Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5893,22 +5996,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Song Usage Extraction - + Select Date Range Select Date Range - + to to - + Report Location Report Location @@ -6187,210 +6290,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Song Editor - + &Title: &Title: - + Alt&ernate title: Alt&ernate title: - + &Lyrics: &Lyrics: - + &Verse order: &Verse order: - + Ed&it All Ed&it All - + Title && Lyrics Title && Lyrics - + &Add to Song &Add to Song - + &Remove &Remove - + &Manage Authors, Topics, Song Books &Manage Authors, Topics, Song Books - + A&dd to Song A&dd to Song - + R&emove R&emove - + Book: Book: - + Number: Number: - + Authors, Topics && Song Book Authors, Topics && Song Book - + New &Theme New &Theme - + Copyright Information Copyright Information - + Comments Comments - + Theme, Copyright Info && Comments Theme, Copyright Info && Comments - + Add Author Add Author - + This author does not exist, do you want to add them? This author does not exist, do you want to add them? - + This author is already in the list. This author is already in the list. - + 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. 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. - + Add Topic Add Topic - + This topic does not exist, do you want to add it? This topic does not exist, do you want to add it? - + This topic is already in the list. This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. You need to type in a song title. - + You need to type in at least one verse. You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book Add Book - + This song book does not exist, do you want to add it? This song book does not exist, do you want to add it? - + You need to have an author for this song. You need to have an author for this song. - + You need to type some text in to the verse. You need to type some text in to the verse. - + Linked Audio Linked Audio - + Add &File(s) Add &File(s) - + Add &Media Add &Media - + Remove &All Remove &All - + Open File(s) Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6637,12 +6753,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. Select one or more audio files from the list below, and click OK to import them into this song. @@ -6660,7 +6776,7 @@ The encoding is responsible for the correct character representation.Lyrics - + CCLI License: CCLI License: @@ -6683,7 +6799,7 @@ The encoding is responsible for the correct character representation.Maintain the lists of authors, topics and books. - + copy For song cloning copy @@ -6777,12 +6893,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: The following songs could not be imported: @@ -6942,8 +7058,8 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service - Add missing songs when opening service + Import missing songs from service files + diff --git a/resources/i18n/en_ZA.ts b/resources/i18n/en_ZA.ts index 1c0f31ddf..a5d7a3fe1 100644 --- a/resources/i18n/en_ZA.ts +++ b/resources/i18n/en_ZA.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Alert Message - + Alert &text: Alert &text: - + &New &New - + &Save &Save - + Displ&ay Displ&ay - + Display && Cl&ose Display && Cl&ose @@ -79,7 +79,7 @@ You haven't specified any text for your alert. Please type in some text before clicking New. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Font - + Font name: Font name: - + Font color: Font color: - + Background color: Background color: - + Font size: Font size: - + Alert timeout: Alert timeout: @@ -661,42 +661,87 @@ Do you want to continue anyway? :|v|V|verse|verses;;-|to;;,|and;;end + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + You need to specify a version name for your Bible. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + Bible Exists + Bible Exists + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Scripture Reference Error - + Web Bible cannot be used Web Bible cannot be used - + Text Search is not available with Web Bibles. Text Search is not available with Web Bibles. - + 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. 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - Preferred Bookname Language - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - Bible language - Bible language - - - - Application language - Application language - English English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: Current name: - + Corresponding name: Corresponding name: - + Show Books From Show Books From - + Old Testament Old Testament - + New Testament New Testament - + Apocrypha Apocrypha @@ -935,6 +968,75 @@ Bible should be displayed in the Bible search: Importing verses... done. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + License Details + + + + Version name: + Version name: + + + + Copyright: + Copyright: + + + + Permissions: + Permissions: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bible Import Wizard - + 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. 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. - + Web Download Web Download - + Location: Location: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bible: - + Download Options Download Options - + Server: Server: - + Username: Username: - + Password: Password: - + Proxy Server (Optional) Proxy Server (Optional) - + License Details License Details - + Set up the Bible's license details. Set up the Bible's license details. - + Version name: Version name: - + Copyright: Copyright: - + Please wait while your Bible is imported. Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. Your Bible import failed. - + CSV File CSV File - + Bibleserver Bibleserver - + Permissions: Permissions: - + Bible file: Bible file: - + Books file: Books file: - + Verses file: Verses file: - + openlp.org 1.x Bible Files openlp.org 1.x Bible Files - + Registering Bible... Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Registered Bible. Please note, that verses will be downloaded on @@ -1147,17 +1249,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: Language: @@ -1173,90 +1275,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Quick - + Find: Find: - + Book: Book: - + Chapter: Chapter: - + Verse: Verse: - + From: From: - + To: To: - + Text Search Text Search - + Second: Second: - + Scripture Reference Scripture Reference - + Toggle to keep or clear the previous results. Toggle to keep or clear the previous results. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... Importing %s %s... @@ -1513,42 +1620,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides Edit Custom Slides - + &Title: &Title: - + Add a new slide at bottom. Add a new slide at bottom. - + Edit the selected slide. Edit the selected slide. - + Edit all the slides at once. Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. Split a slide into two by inserting a slide splitter. - + The&me: The&me: - + &Credits: &Credits: @@ -1563,12 +1670,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I You need to add at least one slide - + Ed&it All Ed&it All - + Insert Slide Insert Slide @@ -1666,34 +1773,34 @@ 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. There was no display item to amend. @@ -1701,19 +1808,19 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color Background Colour - + Default Color: Default Colour: - - Provides border where image is not the correct dimensions for the screen when resized. - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. + @@ -1838,22 +1945,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players Available Media Players - + %s (unavailable) %s (unavailable) - + Player Order Player Order - + Allow media player to be overridden Allow media player to be overridden @@ -1883,17 +1990,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits Credits - + License License - + Contribute Contribute @@ -1903,17 +2010,17 @@ Should OpenLP upgrade now? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -2038,7 +2145,7 @@ Final Credit He has set us free. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2055,7 +2162,7 @@ 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. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2065,62 +2172,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings UI Settings - + Number of recent files to display: Number of recent files to display: - + Remember active media manager tab on startup Remember active media manager tab on startup - + Double-click to send items straight to live Double-click to send items straight to live - + Expand new service items on creation Expand new service items on creation - + Enable application exit confirmation Enable application exit confirmation - + Mouse Cursor Mouse Cursor - + Hide mouse cursor when over display window Hide mouse cursor when over display window - + Default Image Default Image - + Background color: Background colour: - + Image file: Image file: - + Open File Open File @@ -2130,124 +2237,124 @@ Portions copyright © 2004-2012 %s Advanced - + Preview items when clicked in Media Manager Preview items when clicked in Media Manager - + Click to select a color. Click to select a colour. - + Browse for an image file to display. Browse for an image file to display. - + Revert to the default OpenLP logo. Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Service %Y-%m-%d %H-%M - + Default Service Name Default Service Name - + Enable default service name Enable default service name - + Date and Time: Date and Time: - + Monday Monday - + Tuesday Tuesday - + Wednesday Wednesday - + Thurdsday Thurdsday - + Friday Friday - + Saturday Saturday - + Sunday Sunday - + Now Now - + Time when usual service starts. Time when usual service starts. - + Name: Name: - + Consult the OpenLP manual for usage. Consult the OpenLP manual for usage. - + Revert to the default service name "%s". Revert to the default service name "%s". - + Example: Example: - + X11 X11 - + Bypass X11 Window Manager Bypass X11 Window Manager - + Syntax error. Syntax error. @@ -2255,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Error Occurred - + 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. 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. - + Send E-Mail Send E-Mail - + Save to File Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File Attach File @@ -2593,79 +2700,75 @@ Version: %s Custom Slides Custom Slides + + + Finish + Finish + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Click the finish button to return to OpenLP.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. Press the Finish button now to start OpenLP with initial settings and no sample data. - -To 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. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - Finish - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Configure Formatting Tags - + Edit Selection Edit Selection - + Save Save - + Description Description - + Tag Tag - + Start tag Start tag - + End tag End tag - + Tag Id Tag Id - + Start HTML Start HTML - + End HTML End HTML @@ -2909,40 +3012,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Start background audio paused - + Service Item Slide Limits Service Item Slide Limits - - - &End Slide - &End Slide - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - &Wrap Slide - &Wrap Slide - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - &Next Item - &Next Item - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Override display position: @@ -2953,6 +3026,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2978,287 +3071,287 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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/. @@ -3267,22 +3360,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 @@ -3293,82 +3386,82 @@ 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. - + &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. - + &Recent Files &Recent Files - + L&ock Panels L&ock Panels - + Prevent the panels being moved. Prevent the panels being moved. - + Re-run First Time Wizard Re-run First Time Wizard - + Re-run the First Time Wizard, importing songs, Bibles and themes. Re-run the First Time Wizard, importing songs, Bibles and themes. - + Re-run First Time Wizard? 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. @@ -3377,43 +3470,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and 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 List - + Clear the list of recent files. Clear the list of recent files. - + Configure &Formatting Tags... Configure &Formatting Tags... - + Export OpenLP settings to a specified *.config file 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 OpenLP settings from a specified *.config file previously exported on this or another machine - + Import settings? Import settings? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3426,32 +3519,32 @@ Importing settings will make permanent changes to your current OpenLP configurat Importing incorrect settings may cause erratic behaviour or OpenLP to terminate abnormally. - + Open File Open File - + OpenLP Export Settings Files (*.conf) OpenLP Export Settings Files (*.conf) - + Import settings Import settings - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP will now close. Imported settings will be applied the next time you start OpenLP. - + Export Settings File Export Settings File - + OpenLP Export Settings File (*.conf) OpenLP Export Settings File (*.conf) @@ -3485,7 +3578,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected No Items Selected @@ -3573,27 +3666,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List Plugin List - + Plugin Details Plugin Details - + Status: Status: - + Active Active - + Inactive Inactive @@ -3616,12 +3709,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page Fit Page - + Fit Width Fit Width @@ -3629,7 +3722,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options Options @@ -3644,47 +3737,47 @@ Suffix not supported Copy as HTML - + Zoom In Zoom In - + Zoom Out Zoom Out - + Zoom Original Zoom Original - + Other Options Other Options - + Include slide text if available Include slide text if available - + Include service item notes Include service item notes - + Include play length of media items Include play length of media items - + Add page break before each text item Add page break before each text item - + Service Sheet Service Sheet @@ -3694,12 +3787,12 @@ Suffix not supported Print - + Title: Title: - + Custom Footer Text: Custom Footer Text: @@ -3733,7 +3826,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item Reorder Service Item @@ -3741,189 +3834,189 @@ Suffix not supported OpenLP.ServiceManager - + Move to &top Move to &top - + Move item to the top of the service. Move item to the top of the service. - + Move &up Move &up - + Move item up one position in the service. Move item up one position in the service. - + Move &down Move &down - + Move item down one position in the service. Move item down one position in the service. - + Move to &bottom Move to &bottom - + Move item to the end of the service. Move item to the end of the service. - + &Delete From Service &Delete From Service - + Delete the selected item from the service. Delete the selected item from the service. - + &Add New Item &Add New Item - + &Add to Selected Item &Add to Selected Item - + &Edit Item &Edit Item - + &Reorder Item &Reorder Item - + &Notes &Notes - + &Change Item Theme &Change Item Theme - + OpenLP Service Files (*.osz) OpenLP Service Files (*.osz) - + 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. - + Missing Display Handler Missing Display Handler - + Your item cannot be displayed as there is no handler to display it Your item cannot be displayed as there is no handler to display it - + Your item cannot be displayed as the plugin required to display it is missing or inactive Your item cannot be displayed as the plugin required to display it is missing or inactive - + &Expand all &Expand all - + Expand all the service items. Expand all the service items. - + &Collapse all &Collapse all - + Collapse all the service items. Collapse all the service items. - + Open File Open File - + Moves the selection down the window. Moves the selection down the window. - + Move up Move up - + Moves the selection up the window. Moves the selection up the window. - + Go Live Go Live - + Send the selected item to Live. Send the selected item to Live. - + &Start Time &Start Time - + Show &Preview Show &Preview - + Show &Live Show &Live - + Modified Service Modified Service - + 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? @@ -3943,72 +4036,72 @@ The content encoding is not UTF-8. Playing time: - + Untitled Service Untitled 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 - + Load an existing service. Load an existing service. - + Save this service. Save this service. - + Select a theme for the service. 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. - + Service File Missing Service File Missing - + Slide theme Slide theme - + Notes Notes - + Edit Edit - + Service copy only Service copy only @@ -4016,7 +4109,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Service Item Notes @@ -4032,12 +4125,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action Action - + Shortcut Shortcut @@ -4052,32 +4145,32 @@ The content encoding is not UTF-8. The shortcut "%s" is already assigned to another action, please use a different shortcut. - + Alternate Alternate - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. - + Default Default - + Custom Custom - + Capture shortcut. Capture shortcut. - + Restore the default shortcut of this action. Restore the default shortcut of this action. @@ -4092,7 +4185,7 @@ The content encoding is not UTF-8. Do you want to restore all shortcuts to their defaults? - + Configure Shortcuts Configure Shortcuts @@ -4259,11 +4352,6 @@ The content encoding is not UTF-8. Background Audio Background Audio - - - Next Track - Next Track - Go to next audio track. @@ -4346,17 +4434,17 @@ The content encoding is not UTF-8. Start time is after the finish time of the media item - + Theme Layout Theme Layout - + The blue box shows the main area. The blue box shows the main area. - + The red box shows the footer. The red box shows the footer. @@ -4457,62 +4545,62 @@ The content encoding is not UTF-8. Set As &Global Default - + %s (default) %s (default) - + You must select a theme to edit. You must select a theme to edit. - + You are unable to delete the default theme. You are unable to delete the default theme. - + Theme %s is used in the %s plugin. Theme %s is used in the %s plugin. - + You have not selected a theme. You have not selected a theme. - + Save Theme - (%s) Save Theme - (%s) - + Theme Exported Theme Exported - + Your theme has been successfully exported. Your theme has been successfully exported. - + Theme Export Failed Theme Export Failed - + Your theme could not be exported due to an error. Your theme could not be exported due to an error. - + Select Theme Import File Select Theme Import File - + File is not a valid theme. File is not a valid theme. @@ -4532,58 +4620,58 @@ The content encoding is not UTF-8. &Export Theme - + You must select a theme to rename. You must select a theme to rename. - + Rename Confirmation Rename Confirmation - + Rename %s theme? Rename %s theme? - + You must select a theme to delete. You must select a theme to delete. - + Delete Confirmation Delete Confirmation - + Delete %s theme? Delete %s theme? - + Validation Error Validation Error - + A theme with this name already exists. A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> Copy of %s - + Theme Already Exists Theme Already Exists @@ -4591,222 +4679,222 @@ 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: @@ -4816,47 +4904,47 @@ The content encoding is not UTF-8. 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. 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 - + Starting color: Starting color: - + Ending color: Ending color: - + Background color: Background color: - + Justify Justify - + Layout Preview Layout Preview - + Transparent Transparent @@ -4864,42 +4952,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme Global Theme - + Theme Level Theme Level - + S&ong Level S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. Use the global theme, overriding any themes associated with either the service or the songs. @@ -5145,22 +5233,22 @@ The content encoding is not UTF-8. Version - + Delete the selected item. Delete the selected item. - + Move selection up one position. Move selection up one position. - + Move selection down one position. Move selection down one position. - + &Vertical Align: &Vertical Align: @@ -5226,7 +5314,7 @@ The content encoding is not UTF-8. You need to specify at least one %s file to import from. - + Welcome to the Bible Import Wizard Welcome to the Bible Import Wizard @@ -5409,11 +5497,6 @@ The content encoding is not UTF-8. Reset live background. Reset live background. - - - &Split - &Split - Split a slide into two only if it does not fit on the screen as one slide. @@ -5460,29 +5543,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 and %2 - + %1, and %2 Locale list separator: end %1, and %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5557,17 +5645,17 @@ The content encoding is not UTF-8. Present using: - + File Exists File Exists - + A presentation with that filename already exists. A presentation with that filename already exists. - + This type of presentation is not supported. This type of presentation is not supported. @@ -5577,17 +5665,17 @@ The content encoding is not UTF-8. Presentations (%s) - + Missing Presentation Missing Presentation - + The Presentation %s no longer exists. The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. The Presentation %s is incomplete, please reload. @@ -5668,11 +5756,6 @@ The content encoding is not UTF-8. Search Search - - - Back - Back - Refresh @@ -5684,50 +5767,70 @@ The content encoding is not UTF-8. Blank - + Show Show - + Prev Prev - + Next Next - + Text Text - + Show Alert Show Alert - + Go Live Go Live - + No Results No Results - + Options Options - + Add to Service Add to Service + + + Home + + + + + Theme + Theme + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5861,7 +5964,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Delete Song Usage Data @@ -5886,7 +5989,7 @@ The content encoding is not UTF-8. 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. Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5894,22 +5997,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Song Usage Extraction - + Select Date Range Select Date Range - + to to - + Report Location Report Location @@ -6188,210 +6291,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Song Editor - + &Title: &Title: - + Alt&ernate title: Alt&ernate title: - + &Lyrics: &Lyrics: - + &Verse order: &Verse order: - + Ed&it All Ed&it All - + Title && Lyrics Title && Lyrics - + &Add to Song &Add to Song - + &Remove &Remove - + &Manage Authors, Topics, Song Books &Manage Authors, Topics, Song Books - + A&dd to Song A&dd to Song - + R&emove R&emove - + Book: Book: - + Number: Number: - + Authors, Topics && Song Book Authors, Topics && Song Book - + New &Theme New &Theme - + Copyright Information Copyright Information - + Comments Comments - + Theme, Copyright Info && Comments Theme, Copyright Info && Comments - + Add Author Add Author - + This author does not exist, do you want to add them? This author does not exist, do you want to add them? - + This author is already in the list. This author is already in the list. - + 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. 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. - + Add Topic Add Topic - + This topic does not exist, do you want to add it? This topic does not exist, do you want to add it? - + This topic is already in the list. This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. You need to type in a song title. - + You need to type in at least one verse. You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book Add Book - + This song book does not exist, do you want to add it? This song book does not exist, do you want to add it? - + You need to have an author for this song. You need to have an author for this song. - + You need to type some text in to the verse. You need to type some text in to the verse. - + Linked Audio Linked Audio - + Add &File(s) Add &File(s) - + Add &Media Add &Media - + Remove &All Remove &All - + Open File(s) Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6638,12 +6754,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. Select one or more audio files from the list below, and click OK to import them into this song. @@ -6661,7 +6777,7 @@ The encoding is responsible for the correct character representation.Lyrics - + CCLI License: CCLI License: @@ -6684,7 +6800,7 @@ The encoding is responsible for the correct character representation.Maintain the lists of authors, topics and books. - + copy For song cloning copy @@ -6778,12 +6894,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: The following songs could not be imported: @@ -6943,8 +7059,8 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service - Add missing songs when opening service + Import missing songs from service files + diff --git a/resources/i18n/es.ts b/resources/i18n/es.ts index 550b55c2f..12377da37 100644 --- a/resources/i18n/es.ts +++ b/resources/i18n/es.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Mensaje de Alerta - + Alert &text: &Texto de alerta: - + &New &Nuevo - + &Save &Guardar - + Displ&ay Mostr&ar - + Display && Cl&ose M&ostrar && Cerrar @@ -79,7 +79,7 @@ No ha especificado ningún texto de alerta. Por favor, escriba algún texto antes de hacer clic en Nueva. - + &Parameter: &Parámetro: @@ -98,7 +98,7 @@ Do you want to continue anyway? No Placeholder Found - Marcador No Encontrado + Marcador no encontrado @@ -119,32 +119,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Fuente - + Font name: Nombre: - + Font color: Color: - + Background color: Color de fondo: - + Font size: Tamaño: - + Alert timeout: Tiempo de espera: @@ -177,12 +177,12 @@ Do you want to continue anyway? No Book Found - No se encontró el libro + Libro no encontrado No matching book could be found in this Bible. Check that you have spelled the name of the book correctly. - No se hayó el nombre en esta Biblia. Revise que el nombre del libro esté deletreado correctamente. + No se encontró el libro en esta Biblia. Revise que el nombre del libro esté escrito correctamente. @@ -232,7 +232,7 @@ Do you want to continue anyway? Upgrade the Bible databases to the latest format. - Actualizar las Biblias al formato más nuevo. + Actualizar las Biblias al formato más reciente. @@ -658,45 +658,90 @@ Do you want to continue anyway? :|v|V|verse|verses;;-|to;;,|and;;end Double-semicolon delimited separators for parsing references. Consult the developers for further information. + :|v|V|versículo|versículos;;-|hasta;;,|y;;fin + + + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Debe ingresar un nombre para la versión de esta Biblia. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Debe establecer los derechos de autor de su Biblia. Si es de Dominio Público debe indicarlo. + + + + Bible Exists + Ya existe la Biblia + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Ya existe esta Biblia. Por favor importe una diferente o borre la anterior antes de continuar. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. BiblesPlugin.BibleManager - + Scripture Reference Error Error de Referencia Bíblica - + Web Bible cannot be used No se puede usar la Biblia Web - + Text Search is not available with Web Bibles. La búsqueda no esta disponible para Biblias Web. - + You did not enter a search keyword. You can separate different keywords by a space to search for all of your keywords and you can separate them by a comma to search for one of them. No ingreso una palabra clave a buscar. Puede separar palabras clave por un espacio para buscar todas las palabras clave y puede separar conr una coma para buscar una de ellas. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. No existen Bilbias instaladas. Puede usar el Asistente de Importación para instalar una o varias más. - + No Bibles Available Biblias no Disponibles - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -761,76 +806,63 @@ Los cambios no se aplican a elementos en el servcio. Custom Scripture References - + Referencias Bíblicas Personalizadas Verse Separator: - + Separador de Versículos: Range Separator: - + Separador de Rango: List Separator: - + Separador de Lista: End Mark: - + Marca de Final: Multiple alternative verse separators may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - + Se pueden definir separadores de versículos adicionales. +Tienen que estar separados por un marcador vertical " | ". +Borre el contenido del campo para usar el valor predeterminado. Multiple alternative range separators may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - + Se pueden definir separadores de rango adicionales. +Tienen que estar separados por un marcador vertical " | ". +Borre el contenido del campo para usar el valor predeterminado. Multiple alternative list separators may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - + Se pueden definir separadores de lista adicionales. +Tienen que estar separados por un marcador vertical " | ". +Borre el contenido del campo para usar el valor predeterminado. Multiple alternative end marks may be defined. They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - - - Preferred Bookname Language - Idioma preferido para los libros de la Biblia - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - Idioma de la Biblia - - - - Application language - Idioma de la aplicación + Se pueden definir marcas de final adicionales. +Tienen que estar separados por un marcador vertical " | ". +Borre el contenido del campo para usar el valor predeterminado. @@ -838,56 +870,66 @@ Bible should be displayed in the Bible search: Inglés - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Opciones múltiples: -Idioma de la Biblia - el idioma de importación de los nombres -Idioma de la aplicación - el idioma seleccionado para OpenLP -Inglés - utilizar simpre los nombres en Inglés + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Seleccione Nombre de Libro - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. El siguiente nombre no se encontró internamente. Por favor seleccione de la lista el correspondiente nombre en inglés. - + Current name: Nombre actual: - + Corresponding name: Nombre correspondiente: - + Show Books From Mostrar Libros Desde - + Old Testament Antiguo Testamento - + New Testament Nuevo Testamento - + Apocrypha Apócrifos @@ -919,6 +961,75 @@ Inglés - utilizar simpre los nombres en Inglés Importando versículos... listo. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Detalles de Licencia + + + + Version name: + Nombre de la versión: + + + + Copyright: + Derechos de autor: + + + + Permissions: + Permisos: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -961,167 +1072,167 @@ Inglés - utilizar simpre los nombres en Inglés BiblesPlugin.ImportWizardForm - + Bible Import Wizard Asistente para Biblias - + 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. Este asistente le ayudará a importar Biblias en una variedad de formatos. Haga clic en el botón siguiente para empezar el proceso seleccionando un formato a importar. - + Web Download Descarga Web - + Location: Ubicación: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Biblia: - + Download Options Opciones de Descarga - + Server: Servidor: - + Username: Usuario: - + Password: Contraseña: - + Proxy Server (Optional) Servidor Proxy (Opcional) - + License Details Detalles de Licencia - + Set up the Bible's license details. Establezca los detalles de licencia de la Biblia. - + Version name: Nombre de la versión: - + Copyright: Derechos de autor: - + Please wait while your Bible is imported. Por favor, espere mientras que la Biblia es importada. - + You need to specify a file with books of the Bible to use in the import. Debe especificar un archivo que contenga los libros de la Biblia para importar. - + You need to specify a file of Bible verses to import. Debe especificar un archivo que contenga los versículos de la Biblia para importar. - + You need to specify a version name for your Bible. Debe ingresar un nombre para la versión de esta Biblia. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Debe establecer los derechos de autor de su Biblia. Si es de Dominio Público debe indicarlo. - + Bible Exists Ya existe la Biblia - + This Bible already exists. Please import a different Bible or first delete the existing one. Ya existe esta Biblia. Por favor importe una diferente o borre la anterior antes de continuar. - + Your Bible import failed. La importación de su Biblia falló. - + CSV File Archivo CSV - + Bibleserver Servidor - + Permissions: Permisos: - + Bible file: Archivo de biblia: - + Books file: Archivo de libros: - + Verses file: Archivo de versículos: - + openlp.org 1.x Bible Files Archivos de Biblia openlp.org 1.x - + Registering Bible... Registrando Biblia... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Biblia registrada. Note que los versículos se descargarán según @@ -1131,17 +1242,17 @@ sea necesario, por lo que debe contar con una conexión a internet. BiblesPlugin.LanguageDialog - + Select Language Seleccionar Idioma - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP no puede determinar el idioma de esta versión de la Biblia. Por favor, seleccione uno de la siguiente lista. - + Language: Idioma: @@ -1157,90 +1268,95 @@ sea necesario, por lo que debe contar con una conexión a internet. BiblesPlugin.MediaItem - + Quick Rápida - + Find: Buscar: - + Book: Libro: - + Chapter: Capítulo: - + Verse: Versículo: - + From: Desde: - + To: Hasta: - + Text Search Buscar texto - + Second: Paralela: - + Scripture Reference Referencia Bíblica - + Toggle to keep or clear the previous results. Alterna entre mantener o limpiar resultados previos. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? No puede mezclar busquedas individuales y dobles. ¿Desea borrar los resultados y abrir una busqueda nueva? - + Bible not fully loaded. Biblia 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. + La Biblia secundaria no contiene todos los versículos de la Biblia principal. Solo se muestran los versículos comunes. Versículos %d no se incluyen en los resultados. - + Search Scripture Reference... Buscar Referencia Bíblica... - + Search Text... Buscar Texto... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1254,12 +1370,12 @@ sea necesario, por lo que debe contar con una conexión a internet. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detectando codificación (esto puede tardar algunos minutos)... - + Importing %s %s... Importing <book name> <chapter>... Importando %s %s... @@ -1497,42 +1613,42 @@ Note que los versículos se descargarán según sea necesario, por lo que debe c CustomPlugin.EditCustomForm - + Edit Custom Slides Editar Diapositivas - + &Title: &Título: - + Add a new slide at bottom. Nueva diapositiva al final. - + Edit the selected slide. Editar la diapositiva seleccionada. - + Edit all the slides at once. Editar todas las diapositivas a la vez. - + Split a slide into two by inserting a slide splitter. Dividir la diapositiva insertando un separador. - + The&me: Te&ma: - + &Credits: &Creditos: @@ -1547,12 +1663,12 @@ Note que los versículos se descargarán según sea necesario, por lo que debe c Debe agregar al menos una diapositiva - + Ed&it All Ed&itar Todo - + Insert Slide Insertar @@ -1562,9 +1678,9 @@ Note que los versículos se descargarán según sea necesario, por lo que debe c Are you sure you want to delete the %n selected custom slide(s)? - - - + + ¿Desea realmente borrar la diapositiva seleccionada? + ¿Desea realmente borrar las %n diapositivas seleccionadas? @@ -1650,34 +1766,34 @@ 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. No se encontraron elementos para corregir. @@ -1685,19 +1801,19 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color Color de fondo - + Default Color: Color predeterminado: - - Provides border where image is not the correct dimensions for the screen when resized. - Agrega un color de fondo cuando la imagen no coincide con la resolución de pantalla al redimensionarla. + + Visible background for images with aspect ratio different to screen. + Fondo visible para canciones con aspecto diferente al de la pantalla. @@ -1822,22 +1938,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players Reproductores disponibles - + %s (unavailable) %s (no disponible) - + Player Order Orden de Reproductores - + Allow media player to be overridden Permitir ignorar el reproductor multimedia @@ -1867,17 +1983,17 @@ Debe actualizar las Biblias actuales. OpenLP.AboutForm - + Credits Créditos - + License Licencia - + Contribute Contribuir @@ -1887,17 +2003,17 @@ Debe actualizar las Biblias actuales. compilación %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Este es un programa gratuito; usted puede distribuirlo y/o modificarlo bajo los términos de GNU General Public License según la publicación de Free Software Foundation; versión 2 de la Licencia. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -2022,7 +2138,7 @@ Crédito Final de forma gratuita, así como Él nos ha liberado. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2039,71 +2155,72 @@ Para más información de OpenLP visite: http://openlp.org/ OpenLP es desarrollado y mantenido por voluntarios. Si desea apoyar la creación de más software Cristiano gratuito, por favor considere contribuir mediante el botón de abajo. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s - + Copyright © 2004-2012 %s +Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Preferencias de Interface - + Number of recent files to display: Archivos recientes a mostrar: - + Remember active media manager tab on startup Recordar la última pestaña de medios utilizada - + Double-click to send items straight to live Doble-click para proyectar directamente - + Expand new service items on creation Expandir elementos nuevos del servicio al crearlos - + Enable application exit confirmation Preguntar antes de cerrar la aplicación - + Mouse Cursor Cursor del Ratón - + Hide mouse cursor when over display window Ocultar el cursor en la pantalla principal - + Default Image Imagen predeterminada - + Background color: Color de fondo: - + Image file: Archivo: - + Open File Abrir Archivo @@ -2113,124 +2230,124 @@ Portions copyright © 2004-2012 %s Avanzado - + Preview items when clicked in Media Manager Previsualizar elementos al hacer click en el Adminstrador de Medios - + Click to select a color. Click para seleccionar color. - + Browse for an image file to display. Buscar un archivo de imagen para mostrar. - + Revert to the default OpenLP logo. Volver al logo predeterminado de OpenLP. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Servicio %Y-%m-%d %H-%M - + Default Service Name - + Nombre de Servicio Predeterminado - + Enable default service name - + Habilitar el - + Date and Time: Fecha y Hora: - + Monday Lunes - + Tuesday Martes - + Wednesday Miércoles - + Thurdsday Jueves - + Friday Viernes - + Saturday Sábado - + Sunday Domingo - + Now Hoy - + Time when usual service starts. - + Hora usual de inicio del servicio. - + Name: Nombre: - + Consult the OpenLP manual for usage. - + Consulte el manual de OpenLP para su uso. - + Revert to the default service name "%s". - + Volver al nombre de servicio predeterminado "%s" - + Example: Ejemplo: - + X11 X11 - + Bypass X11 Window Manager - + No usar el Administrador de Ventanas de X11 - + Syntax error. Error de Sintaxis. @@ -2238,34 +2355,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Se presento un Error - + 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. ¡Oh! OpenLP encontró un problema, y no pudo recuperarse. El texto en el cuadro siguiente contiene información que podría ser útil para los desarrolladores de OpenLP, por favor envíe un correo a bugs@openlp.org, junto con una descripción detallada de lo que estaba haciendo cuando se produjo el problema. - + Send E-Mail Enviar E-Mail - + Save to File Guardar Archivo - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Por favor ingrese una descripción de lo que hacia al ocurrir el error (Mínimo 20 caracteres) - + Attach File Adjuntar Archivo @@ -2577,79 +2694,79 @@ Version: %s Custom Slides Diapositivas + + + Finish + Finalizar + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - No se encontró una conexión a Internet. El Asistente Inicial requiere de una conexión a Internet para bajar muestras de Canciones, Biblias y Temas. Presione Finalizar para iniciar el programa con las preferencias por defecto y sin material de muestra. + No se cuenta con una conexión a Internet. El Asistente Inicial requiere de una conexión a Internet para descargar canciones, Biblias y temas de muestra. Presione Finalizar para iniciar el programa con las preferencias predeterminadas y sin material de muestra. -Para abrir el Asistente Inicial posteriormente e importar dicho material, revise su conexión a Internet y abra el asistente desde el menú "Herramientas/Abrir Asistente Inicial" de OpenLP. +Para abrir posteriormente este asistente e importar dicho material, revise su conexión a Internet y seleccione desde el menú "Herramientas/Abrir Asistente Inicial" en OpenLP. -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. -Para detener el Asistente Inicial (y no abrir OpenLP), presione Cancelar ahora. - - - - Finish - Finalizar +Para detener el Asistente Inicial (y no iniciar OpenLP), presione Cancelar ahora. OpenLP.FormattingTagDialog - + Configure Formatting Tags Configurar Etiquetas de Formato - + Edit Selection Editar Selección - + Save Guardar - + Description Descripción - + Tag Etiqueta - + Start tag Etiqueta de inicio - + End tag Etiqueta de final - + Tag Id ID de Etiqueta - + Start HTML Inicio HTML - + End HTML Final HTML @@ -2893,40 +3010,10 @@ Para detener el Asistente Inicial (y no abrir OpenLP), presione Cancelar ahora.< Iniciar audio de fondo en pausa - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2937,6 +3024,26 @@ Para detener el Asistente Inicial (y no abrir OpenLP), presione Cancelar ahora.< Repeat track list Repetir lista de pistas + + + Behavior of next/previous on the last/first slide: + Comportamiento de siguiente/anterior en la última/primera diapositiva: + + + + &Remain on Slide + &Permanecer en la Diapositiva + + + + &Wrap around + + + + + &Move to next/previous service item + &Ir al elemento siguiente/anterior + OpenLP.LanguageManager @@ -2962,287 +3069,287 @@ Para detener el Asistente Inicial (y no abrir OpenLP), presione Cancelar ahora.< OpenLP.MainWindow - + &File &Archivo - + &Import &Importar - + &Export &Exportar - + &View &Ver - + M&ode M&odo - + &Tools &Herramientas - + &Settings &Preferencias - + &Language &Idioma - + &Help A&yuda - + 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 Pre&determinado - + Set the view mode back to the default. Establecer el modo de vizualización predeterminado. - + &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/. @@ -3251,22 +3358,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 predeterminado: %s @@ -3277,82 +3384,82 @@ 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? ¿Está seguro que quiere salir de OpenLP? - + 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. - + &Autodetect &Autodetectar - + Update Theme Images Actualizar Miniatura de Temas - + Update the preview images for all themes. Actualiza la imagen de vista previa de todos los temas. - + Print the current service. Imprimir Orden del Servicio actual. - + &Recent Files Archivos &recientes - + L&ock Panels Fi&jar Páneles - + Prevent the panels being moved. Prevenir que los páneles se muevan. - + Re-run First Time Wizard Abrir Asistente Inicial - + Re-run the First Time Wizard, importing songs, Bibles and themes. Abrir el asistente inicial para importar canciones, Biblias y temas. - + Re-run First Time Wizard? ¿Abrir Asistente Inicial? - + 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. @@ -3361,43 +3468,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Abrir este asistente cambia la configuración actual de OpenLP y posiblemente agregar canciones a su base de datos y cambiar el Tema predeterminado. - + Clear List Clear List of recent files Borrar Lista - + Clear the list of recent files. Borrar la lista de archivos recientes. - + Configure &Formatting Tags... Configurar &Etiquetas de Formato... - + Export OpenLP settings to a specified *.config file Exportar preferencias de OpenLP al archivo *.config especificado - + Settings Preferencias - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Importar preferencias de OpenLP desde un archivo *.config exportado previamente en cualquier ordenador - + Import settings? ¿Importar preferencias? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3410,32 +3517,32 @@ Al importar preferencias la configuración actual de OpenLP cambiará permanente El importar preferencias erróneas puede causar inestabilidad y el cierre inesperado de OpenLP. - + Open File Abrir Archivo - + OpenLP Export Settings Files (*.conf) Archivos de Preferencias OpenLP (*.conf) - + Import settings Importar preferencias - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP se cerrará. Las preferencias importadas se aplicarán la próxima vez que inicie OpenLP. - + Export Settings File Exportar Archivo de Preferencias - + OpenLP Export Settings File (*.conf) Archivo de Preferencias OpenLP (*.conf) @@ -3469,7 +3576,7 @@ Base de datos: %s OpenLP.MediaManagerItem - + No Items Selected Nada Seleccionado @@ -3538,7 +3645,7 @@ Extensión no soportada Duplicate files were found on import and were ignored. - Los archivos duplicados hallados fueron ignorados. + Los archivos duplicados hallados se ignoraron. @@ -3546,38 +3653,38 @@ Extensión no soportada <lyrics> tag is missing. - + Etiqueta <lyrics> faltante. <verse> tag is missing. - + Etiqueta <verse> faltante. OpenLP.PluginForm - + Plugin List Lista de Complementos - + Plugin Details Detalles del Complemento - + Status: Estado: - + Active Activo - + Inactive Inactivo @@ -3600,12 +3707,12 @@ Extensión no soportada OpenLP.PrintServiceDialog - + Fit Page Ajustar a Página - + Fit Width Ajustar a Ancho @@ -3613,7 +3720,7 @@ Extensión no soportada OpenLP.PrintServiceForm - + Options Opciones @@ -3628,47 +3735,47 @@ Extensión no soportada Copiar como HTML - + Zoom In Acercar - + Zoom Out Alejar - + Zoom Original Zoom Original - + Other Options Otras Opciones - + Include slide text if available Incluir texto de diapositivas si está disponible - + Include service item notes Incluir notas de los elementos del servicio - + Include play length of media items Incluir la duración de los medios - + Add page break before each text item Agregar salto de página antes de cada elemento - + Service Sheet Hoja de Servicio @@ -3678,12 +3785,12 @@ Extensión no soportada Imprimir - + Title: Título: - + Custom Footer Text: Texto para pié de página: @@ -3717,7 +3824,7 @@ Extensión no soportada OpenLP.ServiceItemEditForm - + Reorder Service Item Reorganizar Elemento de Servicio @@ -3725,189 +3832,189 @@ Extensión no soportada OpenLP.ServiceManager - + Move to &top Mover al &inicio - + Move item to the top of the service. Mover el ítem al inicio del servicio. - + Move &up S&ubir - + Move item up one position in the service. Mover el ítem una posición hacia arriba. - + Move &down Ba&jar - + Move item down one position in the service. Mover el ítem una posición hacia abajo. - + Move to &bottom Mover al &final - + Move item to the end of the service. Mover el ítem al final del servicio. - + &Delete From Service &Eliminar Del Servicio - + Delete the selected item from the service. Eliminar el ítem seleccionado del servicio. - + &Add New Item &Agregar un ítem nuevo - + &Add to Selected Item &Agregar al ítem Seleccionado - + &Edit Item &Editar ítem - + &Reorder Item &Reorganizar ítem - + &Notes &Notas - + &Change Item Theme &Cambiar Tema de ítem - + OpenLP Service Files (*.osz) Archivo de Servicio OpenLP (*.osz) - + 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. - + Missing Display Handler Controlador de Pantalla Faltante - + Your item cannot be displayed as there is no handler to display it No se puede mostrar el ítem porque no hay un controlador de pantalla disponible - + Your item cannot be displayed as the plugin required to display it is missing or inactive El ítem no se puede mostar porque falta el complemento requerido o esta desabilitado - + &Expand all &Expandir todo - + Expand all the service items. Expandir todos los elementos del servicio. - + &Collapse all &Colapsar todo - + Collapse all the service items. Colapsar todos los elementos del servicio. - + Open File Abrir Archivo - + Moves the selection down the window. Mover selección hacia abajo. - + Move up Subir - + Moves the selection up the window. Mover selección hacia arriba. - + Go Live Proyectar - + Send the selected item to Live. Proyectar el elemento seleccionado. - + &Start Time &Tiempo de Inicio - + Show &Preview Mostrar &Vista Previa - + Show &Live Mostrar &Proyección - + Modified Service Servicio Modificado - + The current service has been modified. Would you like to save this service? El servicio actual a sido modificado. ¿Desea guardar este servicio? @@ -3927,72 +4034,72 @@ La codificación del contenido no es UTF-8. Tiempo de reproducción: - + Untitled Service Servicio Sin nombre - + 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 - + Load an existing service. Abrir un servicio existente. - + Save this service. Guardar este servicio. - + Select a theme for the service. 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. - + Service File Missing Archivo de Servicio faltante - + Slide theme Tema de diapositiva - + Notes Notas - + Edit Editar - + Service copy only Copia unicamente @@ -4000,7 +4107,7 @@ La codificación del contenido no es UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Notas de Elemento de Servicio @@ -4016,12 +4123,12 @@ La codificación del contenido no es UTF-8. OpenLP.ShortcutListDialog - + Action Acción - + Shortcut Atajo @@ -4036,32 +4143,32 @@ La codificación del contenido no es UTF-8. El atajo "%s" esta asignado a otra acción, por favor utilize un atajo diferente. - + Alternate Secundario - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Seleccione una acción y presione uno de los siguientes botones para capturar un nuevo atajo primario y secundario, respectivamente. - + Default Predeterminado - + Custom Personalizado - + Capture shortcut. Capturar atajo. - + Restore the default shortcut of this action. Restuarar el atajo predeterminado para esta acción. @@ -4076,7 +4183,7 @@ La codificación del contenido no es UTF-8. ¿Quiere restaurar todos los atajos a su valor original? - + Configure Shortcuts Configurar Atajos @@ -4226,27 +4333,22 @@ La codificación del contenido no es UTF-8. Previous Slide - + Diapositiva anterior Next Slide - + Diapositiva siguiente Pause Audio - + Pausar Audio Background Audio - Audio de Fondo - - - - Next Track - Pista Siguiente + Audio de Fondo @@ -4330,17 +4432,17 @@ La codificación del contenido no es UTF-8. El Inicio se establece despues del final del medio actual - + Theme Layout Distribución del Tema - + The blue box shows the main area. El cuadro azul muestra el área principal. - + The red box shows the footer. El cuadro rojo muestra el pié de página. @@ -4441,62 +4543,62 @@ La codificación del contenido no es UTF-8. &Global, por defecto - + %s (default) %s (predeterminado) - + You must select a theme to edit. Debe seleccionar un tema para editar. - + You are unable to delete the default theme. No se puede eliminar el tema predeterminado. - + Theme %s is used in the %s plugin. El tema %s se usa en el complemento %s. - + You have not selected a theme. No ha seleccionado un tema. - + Save Theme - (%s) Guardar Tema - (%s) - + Theme Exported Tema Exportado - + Your theme has been successfully exported. Su tema a sido exportado exitosamente. - + Theme Export Failed La importación falló - + Your theme could not be exported due to an error. No se pudo exportar el tema dedido a un error. - + Select Theme Import File Seleccione el Archivo de Tema a Importar - + File is not a valid theme. El archivo no es un tema válido. @@ -4516,281 +4618,281 @@ La codificación del contenido no es UTF-8. &Exportar Tema - + You must select a theme to rename. Debe seleccionar un tema para renombrar. - + Rename Confirmation Confirmar Cambio de Nombre - + Rename %s theme? ¿Renombrar el tema %s? - + You must select a theme to delete. Debe seleccionar un tema para eliminar. - + Delete Confirmation Confirmar Eliminación - + Delete %s theme? ¿Eliminar el tema %s? - + Validation Error Error de Validación - + A theme with this name already exists. Ya existe un tema con este nombre. - + OpenLP Themes (*.theme *.otz) Tema OpenLP (*.theme *otz) - + Copy of %s Copy of <theme name> Copia de %s - + Theme Already Exists - + Este Tema Ya Existe 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 predeterminada - + X position: Posición x: - + px px - + Y position: Posición y: - + Width: Ancho: - + Height: Altura: - + Use default location Usar ubicaciónpredeterminada - + 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: @@ -4800,47 +4902,47 @@ La codificación del contenido no es UTF-8. Editar Tema - %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. 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 - + Starting color: Color inicial: - + Ending color: Color final: - + Background color: Color de fondo: - + Justify Justificar - + Layout Preview Vista previa de Distribución - + Transparent Transparente @@ -4848,42 +4950,42 @@ La codificación del contenido no es UTF-8. OpenLP.ThemesTab - + Global Theme Tema Global - + Theme Level Nivel - + S&ong Level &Canción - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Utilizar el tema de la canción en la base de datos. Si una canción no tiene un tema asociado, utilizar el tema del servicio. Si el servicio no tiene un tema, utilizar el tema global. - + &Service Level &Servicio - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Utilizar el tema del servicio ignorando los temas individuales. Si el servicio no tiene un tema, utilizar el tema global. - + &Global Level &Global - + Use the global theme, overriding any themes associated with either the service or the songs. Utilizar el tema global, ignorado los temas asociados con el servicio o con las canciones. @@ -5129,22 +5231,22 @@ La codificación del contenido no es UTF-8. Versión - + Delete the selected item. Eliminar el ítem seleccionado. - + Move selection up one position. Mover selección un espacio hacia arriba. - + Move selection down one position. Mover selección un espacio hacia abajo. - + &Vertical Align: Alinea. &Vertical: @@ -5210,7 +5312,7 @@ La codificación del contenido no es UTF-8. Debe especificar un archivo %s para importar. - + Welcome to the Bible Import Wizard Bienvenido al Asistente para Biblias @@ -5361,7 +5463,7 @@ La codificación del contenido no es UTF-8. Title and/or verses not found - Título y/o verso no encontrado + Título y/o versos no encontrados @@ -5393,11 +5495,6 @@ La codificación del contenido no es UTF-8. Reset live background. Restablecer el fondo proyectado. - - - &Split - &Dividir - Split a slide into two only if it does not fit on the screen as one slide. @@ -5444,29 +5541,34 @@ La codificación del contenido no es UTF-8. Search bar place holder text Buscar Temas... + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 y %2 - + %1, and %2 Locale list separator: end %1, y %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5541,17 +5643,17 @@ La codificación del contenido no es UTF-8. Mostrar usando: - + File Exists Ya existe el Archivo - + A presentation with that filename already exists. Ya existe una presentación con este nombre. - + This type of presentation is not supported. No existe soporte para este tipo de presentación. @@ -5561,17 +5663,17 @@ La codificación del contenido no es UTF-8. Presentaciones (%s) - + Missing Presentation Presentación faltante - + The Presentation %s no longer exists. La Presentación %s ya no esta disponible. - + The Presentation %s is incomplete, please reload. La Presentación %s esta incompleta, por favor recargela. @@ -5652,11 +5754,6 @@ La codificación del contenido no es UTF-8. Search Buscar - - - Back - Atrás - Refresh @@ -5668,50 +5765,70 @@ La codificación del contenido no es UTF-8. Negro - + Show Mostrar - + Prev Anterior - + Next Siguiente - + Text Texto - + Show Alert Mostrar Alerta - + Go Live Proyectar - + No Results Sin Resultados - + Options Opciones - + Add to Service Agregar al Servicio + + + Home + + + + + Theme + Tema + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5845,7 +5962,7 @@ La codificación del contenido no es UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Borrar historial de canción @@ -5870,7 +5987,7 @@ La codificación del contenido no es UTF-8. 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. Seleccione la fecha desde la cual borrar el historial. Todos los datos guardados antes de esta fecha serán borrados permanentemente. @@ -5878,22 +5995,22 @@ La codificación del contenido no es UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Extracción del Historial - + Select Date Range Seleccionar Rango de Fechas - + to hasta - + Report Location Ubicación de Reporte @@ -6172,212 +6289,225 @@ La codificación se encarga de la correcta representación de caracteres. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Editor de Canción - + &Title: &Título: - + Alt&ernate title: Título alt&ernativo: - + &Lyrics: &Letras: - + &Verse order: Orden de &versos: - + Ed&it All Ed&itar Todo - + Title && Lyrics Título && Letra - + &Add to Song &Agregar a Canción - + &Remove &Quitar - + &Manage Authors, Topics, Song Books Ad&ministrar Autores, Categorías, Himnarios - + A&dd to Song A&gregar a Canción - + R&emove &Quitar - + Book: Libro: - + Number: Número: - + Authors, Topics && Song Book Autores, Categorías e Himnarios - + New &Theme &Tema Nuevo - + Copyright Information Información de Derechos de Autor - + Comments Comentarios - + Theme, Copyright Info && Comments Tema, Derechos de Autor && Comentarios - + Add Author Agregar Autor - + This author does not exist, do you want to add them? Este autor no existe, ¿desea agregarlo? - + This author is already in the list. Este autor ya esta en la lista. - + 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. No seleccionado un autor válido. Seleccione un autor de la lista o ingrese un nombre nuevo y presione el botón "Agregar Autor a Canción" para agregar el autor nuevo. - + Add Topic Agregar Categoría - + This topic does not exist, do you want to add it? Esta categoría no existe, ¿desea agregarla? - + This topic is already in the list. Esta categoría ya esta en la lista. - + 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. No seleccionado una categoría válida. Seleccione una categoría de la lista o ingrese un nombre nuevo y presione el botón "Agregar Categoría a Canción" para agregar la categoría nueva. - + You need to type in a song title. Debe escribir un título. - + You need to type in at least one verse. Debe agregar al menos un verso. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - El orden de los versos no es válido. Ningún verso corresponde a %s. Las entradas válidas so %s. + El orden de los versos no es válido. Ningún verso corresponde a %s. Las entradas válidas son %s. - + Add Book Agregar Himnario - + This song book does not exist, do you want to add it? Este himnario no existe, ¿desea agregarlo? - + You need to have an author for this song. Debe ingresar un autor para esta canción. - + You need to type some text in to the verse. Debe ingresar algún texto en el verso. - + Linked Audio Audio Asociado - + Add &File(s) Agregar &Archivo(s) - + Add &Media Agregar &Medio - + Remove &All Quitar &Todo - + Open File(s) Abrir Archivo(s) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Advertencia:</strong> No se han utilizado todos los versos. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. - + El orden de los versos no es válido. Ningún verso corresponde a %s. Las entradas válidas son %s. @@ -6606,28 +6736,28 @@ La codificación se encarga de la correcta representación de caracteres. CCLI SongSelect Files - + Archivos CCLI SongSelect EasySlides XML File - + Archivo EasySlides XML EasyWorship Song Database - + Base de Datos EasyWorship SongsPlugin.MediaFilesForm - + Select Media File(s) Seleccionar Archivo(s) de Medios - + Select one or more audio files from the list below, and click OK to import them into this song. Seleccione uno o más archivos de audio de la lista, presione OK para incluirlos en esta canción. @@ -6645,7 +6775,7 @@ La codificación se encarga de la correcta representación de caracteres.Letra - + CCLI License: Licensia CCLI: @@ -6668,7 +6798,7 @@ La codificación se encarga de la correcta representación de caracteres.Administrar la lista de autores, categorías y libros. - + copy For song cloning duplicar @@ -6762,12 +6892,12 @@ La codificación se encarga de la correcta representación de caracteres. SongsPlugin.SongImport - + copyright derechos de autor - + The following songs could not be imported: Las siguientes canciones no se importaron: @@ -6784,7 +6914,7 @@ La codificación se encarga de la correcta representación de caracteres. File not found - No se encontró el archivo + Archivo no encontrado @@ -6927,8 +7057,8 @@ La codificación se encarga de la correcta representación de caracteres. - Add missing songs when opening service - Agregar canciones faltantes al abrir el servicio + Import missing songs from service files + Importar canciones faltantes desde archivos de servicio diff --git a/resources/i18n/et.ts b/resources/i18n/et.ts index 908d532a9..1956acaec 100644 --- a/resources/i18n/et.ts +++ b/resources/i18n/et.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Teate sõnum - + Alert &text: Teate &tekst: - + &New &Uus - + &Save &Salvesta - + Displ&ay &Kuva - + Display && Cl&ose Kuva && &sulge @@ -79,7 +79,7 @@ Sa ei ole oma teatele teksti lisanud. Enne nupu Uus vajutamist sisesta mingi tekst. - + &Parameter: &Parameeter: @@ -119,32 +119,32 @@ Kas tahad siiski jätkata? AlertsPlugin.AlertsTab - + Font Font - + Font name: Fondi nimi: - + Font color: Teksti värvus: - + Background color: Tausta värvus: - + Font size: Teksti suurus: - + Alert timeout: Teate kestus: @@ -661,42 +661,87 @@ Kas tahad siiski jätkata? :|s|S|salm|salmid|v|V;;-|kuni;;,|ja|and;;lõpp|end + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Pead määrama Piibli versiooni nime. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Pead määrama piiblitõlke autoriõiguse! Avalikkuse omandisse kuuluvad Piiblid tuleb vastavalt tähistada. + + + + Bible Exists + Piibel on juba olemas + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + See Piibel on juba olemas! Palun impordi mingi muu Piibel või kustuta enne olemasolev. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Kirjakohaviite tõrge - + Web Bible cannot be used Veebipiiblit pole võimalik kasutada - + Text Search is not available with Web Bibles. Tekstiotsing veebipiiblist pole võimalik. - + 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. Sa ei sisestanud otsingusõna. Sa võid eraldada võtmesõnad tühikuga, et otsida neid kõiki, või eraldada need komaga, et otsitaks ühte neist. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Praegu pole ühtegi Piiblit paigaldatud. Palun paigalda mõni Piibel importimise nõustaja abil. - + No Bibles Available Ühtegi Piiblit pole saadaval - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. Need tuleb eraldada püstkriipsuga |. Vaikeväärtuse kasutamiseks jäta rida tühjaks. - - - Preferred Bookname Language - Raamatunimede eelistatud keel - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Vali keel, milles kuvatakse Piibli -raamatute nimesid piibliotsingus: - - - - Bible language - Piibli keel - - - - Application language - Rakenduse keel - English Inglise - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Mitu valikut: -Piibli keel - samas keeles, milles Piibli raamatute nimed imporditi. -Rakenduse keel - selles keeles, milles sa kasutad OpenLP-d -Inglise - raamatute nimed on alati inglise keelsed + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Vali raamatu nimi - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Järgneva raamatu nime ei suudetud ise tuvastada. Palun vali loetelust vastav ingliskeelne nimi. - + Current name: Praegune nimi: - + Corresponding name: Vastav nimi: - + Show Books From Näidatakse ainult - + Old Testament Vana testament - + New Testament Uus testament - + Apocrypha Apokrüüfid @@ -935,6 +968,75 @@ Inglise - raamatute nimed on alati inglise keelsed Salmide importimine... valmis. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Litsentsist lähemalt + + + + Version name: + Versiooni nimi: + + + + Copyright: + Autoriõigus: + + + + Permissions: + Õigused: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ Inglise - raamatute nimed on alati inglise keelsed BiblesPlugin.ImportWizardForm - + Bible Import Wizard Piibli importimise nõustaja - + 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. See nõustaja aitab erinevates vormingutes Piibleid importida. Klõpsa all asuvale edasi nupule, et alustada vormingu valimisest, millest importida. - + Web Download Veebist allalaadimine - + Location: Asukoht: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Piibel: - + Download Options Allalaadimise valikud - + Server: Server: - + Username: Kasutajanimi: - + Password: Parool: - + Proxy Server (Optional) Proksiserver (valikuline) - + License Details Litsentsist lähemalt - + Set up the Bible's license details. Määra Piibli litsentsi andmed. - + Version name: Versiooni nimi: - + Copyright: Autoriõigus: - + Please wait while your Bible is imported. Palun oota, kuni sinu Piiblit imporditakse. - + You need to specify a file with books of the Bible to use in the import. Pead määrama faili, mis sisaldab piibliraamatuid, mida tahad importida. - + You need to specify a file of Bible verses to import. Pead ette andma piiblisalmide faili, mida importida. - + You need to specify a version name for your Bible. Pead määrama Piibli versiooni nime. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Pead määrama piiblitõlke autoriõiguse! Avalikkuse omandisse kuuluvad Piiblid tuleb vastavalt tähistada. - + Bible Exists Piibel on juba olemas - + This Bible already exists. Please import a different Bible or first delete the existing one. See Piibel on juba olemas! Palun impordi mingi muu Piibel või kustuta enne olemasolev. - + Your Bible import failed. Piibli importimine nurjus. - + CSV File CSV fail - + Bibleserver Piibliserver - + Permissions: Õigused: - + Bible file: Piibli fail: - + Books file: Raamatute fail: - + Verses file: Salmide fail: - + openlp.org 1.x Bible Files openlp.org 1.x piiblifailid - + Registering Bible... Piibli registreerimine... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Piibel on registreeritud. Pea meeles, et salmid laaditakse alla @@ -1147,17 +1249,17 @@ vastavalt vajadusele ning seetõttu on vaja internetiühendust. BiblesPlugin.LanguageDialog - + Select Language Keele valimine - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP ei suuda tuvastada selle piiblitõlke keelt. Palun vali keel järgnevast loendist. - + Language: Keel: @@ -1173,90 +1275,95 @@ vastavalt vajadusele ning seetõttu on vaja internetiühendust. BiblesPlugin.MediaItem - + Quick Kiirotsing - + Find: Otsing: - + Book: Raamat: - + Chapter: Peatükk: - + Verse: Salm: - + From: Algus: - + To: Kuni: - + Text Search Tekstiotsing - + Second: Teine: - + Scripture Reference Salmiviide - + Toggle to keep or clear the previous results. Vajuta eelmiste tulemuste säilitamiseks või eemaldamiseks. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Ü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. - + Search Scripture Reference... Piibliviite otsing... - + Search Text... Teksti otsing... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ vastavalt vajadusele ning seetõttu on vaja internetiühendust. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kooditabeli tuvastamine (see võib võtta mõne minuti)... - + Importing %s %s... Importing <book name> <chapter>... %s %s. peatüki importimine... @@ -1513,42 +1620,42 @@ Pane tähele, et veebipiiblite salmid laaditakse internetist vajadusel, seega on CustomPlugin.EditCustomForm - + Edit Custom Slides Kohandatud slaidide muutmine - + &Title: &Pealkiri: - + Add a new slide at bottom. Uue slaidi lisamine kõige alumiseks. - + Edit the selected slide. Valitud slaidi muutmine. - + Edit all the slides at once. Kõigi slaidide muutmine ühekorraga. - + Split a slide into two by inserting a slide splitter. Slaidi lõikamine kaheks, sisestades slaidide eraldaja. - + The&me: &Kujundus: - + &Credits: &Autorid: @@ -1563,12 +1670,12 @@ Pane tähele, et veebipiiblite salmid laaditakse internetist vajadusel, seega on Pead lisama vähemalt ühe slaidi - + Ed&it All Muuda &kõiki - + Insert Slide Uus slaid @@ -1666,34 +1773,34 @@ Pane tähele, et veebipiiblite salmid laaditakse internetist vajadusel, seega on Pead enne 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: %s Kas 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. @@ -1701,19 +1808,19 @@ Kas tahad teised pildid sellest hoolimata lisada? ImagesPlugin.ImageTab - + Background Color Taustavärv - + Default Color: Vaikimisi värvus: - - Provides border where image is not the correct dimensions for the screen when resized. - Kui pildi mõõtmed ei sobi ekraani mõõtmetega, näidatakse pildi servades seda värvi ribasid. + + Visible background for images with aspect ratio different to screen. + Tausta värvus piltidel, mille külgede suhe ei vasta ekraani küljesuhtele. @@ -1838,22 +1945,22 @@ Kas tahad teised pildid sellest hoolimata lisada? MediaPlugin.MediaTab - + Available Media Players Saadaolevad meediaesitajad - + %s (unavailable) %s (pole saadaval) - + Player Order Esitajate järjestus - + Allow media player to be overridden Meediaesitajat saab käsitsi vahetada @@ -1883,17 +1990,17 @@ Kas OpenLP peaks kohe uuendamist alustama? OpenLP.AboutForm - + Credits Autorid - + License Litsents - + Contribute Aita kaasa @@ -1903,17 +2010,17 @@ Kas OpenLP peaks kohe uuendamist alustama? kompileering %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. See programm on vaba tarkvara. Sa võid seda edasi levitada ja/või muuta vastavalt GNU Üldise Avaliku Litsentsi versiooni 2 (GNU GPL 2) tingimustele, nagu need on Vaba Tarkvara Fondi poolt avaldatud. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Seda programmi levitatakse lootuses, et see on kasulik, kuid ILMA IGASUGUSE GARANTIITA; isegi KESKMISE/TAVALISE KVALITEEDI GARANTIITA või SOBIVUSELE TEATUD KINDLAKS EESMÄRGIKS. Üksikasjade suhtes vaata GNU Üldist Avalikku Litsentsi. - + Project Lead %s @@ -2037,7 +2144,7 @@ vabastada pattudest. Me jagame seda tarkvara tasuta, sest Tema on meid vabastanud. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2054,7 +2161,7 @@ Uuri OpenLP kohta lähemalt: http://openlp.org/ OpenLP on kirjutanud ja seda haldavad vabatahtlikud. Kui sa tahad näha rohkem tasuta kristlikku tarkvara, kaalu kaasaaitamist, kasutades all asuvat nuppu. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2064,62 +2171,62 @@ Osaline copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Kasutajaliidese sätted - + Number of recent files to display: Kuvatavate hiljutiste failide arv: - + Remember active media manager tab on startup Käivitumisel avatakse viimati avatud meediahalduri osa - + Double-click to send items straight to live Topeltklõps otse ekraanile saatmiseks - + Expand new service items on creation Uued teenistuse kirjed on loomisel laiendatud - + Enable application exit confirmation Rakenduse lõpetamise teabe lubamine - + Mouse Cursor Hiirekursor - + Hide mouse cursor when over display window Ekraaniakna kohal peidetakse hiirekursor - + Default Image Vaikimisi pilt - + Background color: Taustapilt: - + Image file: Pildifail: - + Open File Faili avamine @@ -2129,124 +2236,124 @@ Osaline copyright © 2004-2012 %s Täpsem - + Preview items when clicked in Media Manager Meediahalduris klõpsamisel kuvatakse eelvaade - + Click to select a color. Klõpsa värvi valimiseks. - + Browse for an image file to display. Kuvatava pildi valimine. - + Revert to the default OpenLP logo. Vaikimisi OpenLP logo kasutamine. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Teenistus %Y-%m-%d %H-%M - + Default Service Name Teenistuse vaikimisi nimi - + Enable default service name Teenistuse vaikimisi nimi lubatud - + Date and Time: Kuupäev ja kellaaeg: - + Monday Esmaspäeval - + Tuesday Teisipäeval - + Wednesday Kolmapäeval - + Thurdsday Neljapäeval - + Friday Reedel - + Saturday Laupäeval - + Sunday Pühapäeval - + Now Praegu - + Time when usual service starts. Mis kell teenistus tavaliselt algab. - + Name: Nimi: - + Consult the OpenLP manual for usage. Kasutuse kohta lähemalt OpenLP käsiraamatust. - + Revert to the default service name "%s". Teenistuse vaikimisi vaikenime "%s" taastamine. - + Example: Näidis: - + X11 X11 - + Bypass X11 Window Manager X11 aknahaldur jäetakse vahele - + Syntax error. Süntaksi viga. @@ -2254,34 +2361,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Esines viga - + 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. Uups! OpenLP-s esines viga, millest pole võimalik taastada. Alumises kastis olev tekst võib olla kasulik OpenLP arendajatele, palun meili see aadressil bugs@openlp.org, koos täpse kirjeldusega sellest, mida sa parasjagu tegid, kui selline probleem esines. - + Send E-Mail Saada e-kiri - + Save to File Salvesta faili - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Palun kirjelda siin, mida sa parasjagu tegid, mis kutsus selle vea esile. (vähemalt 20 tähte) - + Attach File Pane fail kaasa @@ -2594,79 +2701,79 @@ Kui võimalik, kirjuta palun vearaport inglise keeles. Custom Slides Kohandatud slaidid + + + Finish + Lõpeta + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Internetiühendust ei leitud. Esmakäivituse nõustajal on näidislaulude, Piiblite ja kujunduste allalaadimiseks vaja internetti. Et käivitada tavalise seadistusega ning ilma näidisandmeteta, klõpsa Lõpeta nupule. + Internetiühendust ei leitud. Esmakäivituse nõustaja vajab internetiühendust näidislaulude, piiblite ja kujunduste allalaadimiseks. OpenLP käivitamiseks tehaseseadistuses ja ilma näidisandmeteta klõpsa lõpetamise nupule. -Esmakäivituse nõustaja käivitamiseks ning näidisandmestiku importimiseks hiljem kontrolli oma internetiühendust ja käivita see nõustaja valides OpenLP menüüst "Tööriistad/Käivita esmakäivituse nõustaja uuesti". +Esmakäivituse nõustaja hiljem uuesti käivitamiseks kontrolli oma internetiühendust ja käivita see nõustaja uuesti OpenLP menüüst "Tööriistad/Esmakäivituse nõustaja". -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. -Esmakäivituse nõustaja lõplikuks katkestamiseks (ning OpenLP mittekäivitamiseks) vajuta nupule Loobu. - - - - Finish - Lõpeta +Esmakäivituse nõustajast loobumiseks (ning OpenLP mittekäivitamiseks) klõpsa loobumise nupule. OpenLP.FormattingTagDialog - + Configure Formatting Tags Vormindussiltide seadistamine - + Edit Selection Valiku muutmine - + Save Salvesta - + Description Kirjeldus - + Tag Märgis - + Start tag Alustav märgis - + End tag Lõpetav märgis - + Tag Id Märgise ID - + Start HTML Alustav HTML - + End HTML Lõpetav HTML @@ -2910,40 +3017,10 @@ Esmakäivituse nõustaja lõplikuks katkestamiseks (ning OpenLP mittekäivitamis Taustamuusika on alguses pausitud - + Service Item Slide Limits Teenistuse elemendi slaidi mõõtmed - - - &End Slide - &Viimane slaid - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Üles- ja allanooled peatuvad teenistuse elemendi esimesel ja viimasel slaidil. - - - - &Wrap Slide - &Slaidide kordus - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Üles- ja allanooled jätkavad teenistuse elemendi lõppu (algusesse) jõudmisel uuesti algusest (lõpust). - - - - &Next Item - &Järgmine kirje - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Üles- ja allanooled liiguvad teenistuse elemendi lõppu või algusesse jõudes järgmisele teenistuse elemendile. - Override display position: @@ -2954,6 +3031,26 @@ Esmakäivituse nõustaja lõplikuks katkestamiseks (ning OpenLP mittekäivitamis Repeat track list Lugude loendi kordamine + + + Behavior of next/previous on the last/first slide: + Järgmise/eelmise käitumine viimasel/esimesel slaidil: + + + + &Remain on Slide + &Jäädakse slaidile + + + + &Wrap around + &Teenistuse elementi korratakse + + + + &Move to next/previous service item + &Liigutakse järgmisele teenistuse elemendile + OpenLP.LanguageManager @@ -2979,287 +3076,287 @@ Esmakäivituse nõustaja lõplikuks katkestamiseks (ning OpenLP mittekäivitamis 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 Kujunduste 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. - + 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/. @@ -3268,22 +3365,22 @@ You can download the latest version from http://openlp.org/. Sa võid viimase versiooni alla laadida aadressilt http://openlp.org/. - + 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 @@ -3294,82 +3391,82 @@ 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? - + 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 Uuenda kujunduste pildid - + Update the preview images for all themes. Kõigi teemade eelvaatepiltide uuendamine. - + Print the current service. Praeguse teenistuse printimine. - + &Recent Files &Hiljutised failid - + 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. @@ -3378,43 +3475,43 @@ 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. - + Clear List Clear List of recent files Tühjenda loend - + Clear the list of recent files. Hiljutiste failide nimekirja tühjendamine. - + Configure &Formatting Tags... &Vormindusmärgised... - + Export OpenLP settings to a specified *.config file OpenLP sätete eksportimine määratud *.config faili - + Settings Sätted - + Import OpenLP settings from a specified *.config file previously exported on this or another machine OpenLP sätete importimine määratud *.config failist, mis on varem sellest või mõnest teisest arvutist eksporditud. - + Import settings? Kas importida sätted? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3427,32 +3524,32 @@ Sätete importimine muudab jäädavalt sinu praegust OpenLP seadistust. Väärade sätete importimine võib põhjustada OpenLP väära käitumist või sulgumist. - + Open File Faili avamine - + OpenLP Export Settings Files (*.conf) OpenLP eksporditud sätete failid (*.conf) - + Import settings Sätete importimine - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP sulgub nüüd. Imporditud sätted rakenduvad OpenLP järgmisel käivitumisel. - + Export Settings File Sättefaili eksportimine - + OpenLP Export Settings File (*.conf) OpenLP eksporditud sätete fail (*.conf) @@ -3486,7 +3583,7 @@ Andmebaas: %s OpenLP.MediaManagerItem - + No Items Selected Ühtegi elementi pole valitud @@ -3574,27 +3671,27 @@ Selle lõpuga fail ei ole toetatud OpenLP.PluginForm - + Plugin List Pluginate loend - + Plugin Details Plugina andmed - + Status: Olek: - + Active Aktiivne - + Inactive Pole aktiivne @@ -3617,12 +3714,12 @@ Selle lõpuga fail ei ole toetatud OpenLP.PrintServiceDialog - + Fit Page Mahuta lehele - + Fit Width Mahuta laius @@ -3630,7 +3727,7 @@ Selle lõpuga fail ei ole toetatud OpenLP.PrintServiceForm - + Options Valikud @@ -3645,47 +3742,47 @@ Selle lõpuga fail ei ole toetatud Kopeeri HTMLina - + Zoom In Suurendamine - + Zoom Out Vähendamine - + Zoom Original Originaalsuurus - + Other Options Muud valikud - + Include slide text if available Slaidi tekst, kui saadaval - + Include service item notes Teenistuse kirje märkmed - + Include play length of media items Meediakirjete pikkus - + Add page break before each text item Iga tekstikirje algab uuelt lehelt - + Service Sheet Teenistuse leht @@ -3695,12 +3792,12 @@ Selle lõpuga fail ei ole toetatud Prindi - + Title: Pealkiri: - + Custom Footer Text: Kohandatud jaluse tekst: @@ -3734,7 +3831,7 @@ Selle lõpuga fail ei ole toetatud OpenLP.ServiceItemEditForm - + Reorder Service Item Teenistuse elementide ümberjärjestamine @@ -3742,189 +3839,189 @@ Selle lõpuga fail ei ole toetatud OpenLP.ServiceManager - + Move to &top Tõsta ü&lemiseks - + Move item to the top of the service. Teenistuse algusesse tõstmine. - + Move &up Liiguta &üles - + Move item up one position in the service. Elemendi liigutamine teenistuses ühe koha võrra ettepoole. - + Move &down Liiguta &alla - + Move item down one position in the service. Elemendi liigutamine teenistuses ühe koha võrra tahapoole. - + Move to &bottom Tõsta &alumiseks - + Move item to the end of the service. Teenistuse lõppu tõstmine. - + &Delete From Service &Kustuta teenistusest - + Delete the selected item from the service. Valitud elemendi kustutamine teenistusest. - + &Add New Item &Lisa uus element - + &Add to Selected Item &Lisa valitud elemendile - + &Edit Item &Muuda kirjet - + &Reorder Item &Muuda elemendi kohta järjekorras - + &Notes &Märkmed - + &Change Item Theme &Muuda elemendi kujundust - + OpenLP Service Files (*.osz) OpenLP teenistuse failid (*.osz) - + 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. - + Missing Display Handler Puudub kuvakäsitleja - + Your item cannot be displayed as there is no handler to display it Seda elementi pole võimalik näidata ekraanil, kuna puudub seda käsitsev programm - + Your item cannot be displayed as the plugin required to display it is missing or inactive Seda elementi pole võimalik näidata, kuna vajalik plugin on puudu või pole aktiivne - + &Expand all &Laienda kõik - + Expand all the service items. Kõigi teenistuse kirjete laiendamine. - + &Collapse all &Ahenda kõik - + Collapse all the service items. Kõigi teenistuse kirjete ahendamine. - + Open File Faili avamine - + Moves the selection down the window. Valiku tõstmine aknas allapoole. - + Move up Liiguta üles - + Moves the selection up the window. Valiku tõstmine aknas ülespoole. - + Go Live Ekraanile - + Send the selected item to Live. Valitud kirje saatmine ekraanile. - + &Start Time &Alguse aeg - + Show &Preview Näita &eelvaadet - + Show &Live Näita &ekraanil - + Modified Service Teenistust on muudetud - + The current service has been modified. Would you like to save this service? Praegust teenistust on muudetud. Kas tahad selle teenistuse salvestada? @@ -3944,72 +4041,72 @@ Sisu ei ole UTF-8 kodeeringus. Kestus: - + Untitled Service Pealkirjata teenistus - + 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 - + Load an existing service. Olemasoleva teenistuse laadimine. - + Save this service. Selle teenistuse salvestamine. - + Select a theme for the service. Teenistuse jaoks kujunduse valimine. - + This file is either corrupt or it is not an OpenLP 2.0 service file. See fail on rikutud või ei ole see OpenLP 2.0 teenistuse fail. - + Service File Missing Teenistuse fail puudub - + Slide theme Slaidi kujundus - + Notes Märkmed - + Edit Muuda - + Service copy only Ainult teenistuse koopia @@ -4017,7 +4114,7 @@ Sisu ei ole UTF-8 kodeeringus. OpenLP.ServiceNoteForm - + Service Item Notes Teenistuse elemendi märkmed @@ -4033,12 +4130,12 @@ Sisu ei ole UTF-8 kodeeringus. OpenLP.ShortcutListDialog - + Action Tegevus - + Shortcut Kiirklahv @@ -4053,32 +4150,32 @@ Sisu ei ole UTF-8 kodeeringus. Kiirklahv "%s" on juba seotud teise tegevusega, kasuta mingit muud kiirklahvi. - + Alternate Muuda - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Vali tegevus ja klõpsa kummalgi alumisel nupul, et salvestada uus peamine või alternatiivne kiirklahv. - + Default Vaikimisi - + Custom Kohandatud - + Capture shortcut. Kiirklahvi salvestamine. - + Restore the default shortcut of this action. Selle tegevuse vaikimisi kiirklahvi taastamine. @@ -4093,7 +4190,7 @@ Sisu ei ole UTF-8 kodeeringus. Kas tahad taastada kõigi kiirklahvide vaikimisi väärtused? - + Configure Shortcuts Seadista kiirklahve @@ -4260,11 +4357,6 @@ Sisu ei ole UTF-8 kodeeringus. Background Audio Taustamuusika - - - Next Track - Järgmine pala - Go to next audio track. @@ -4347,17 +4439,17 @@ Sisu ei ole UTF-8 kodeeringus. Alustamise aeg on pärast meedia lõppu. - + Theme Layout Kujunduse paigutus - + The blue box shows the main area. Sinine raam näitab peaala. - + The red box shows the footer. Punane raam näitab jalust. @@ -4458,62 +4550,62 @@ Sisu ei ole UTF-8 kodeeringus. Määra &globaalseks vaikeväärtuseks - + %s (default) %s (vaikimisi) - + You must select a theme to edit. Pead valima kujunduse, mida muuta. - + You are unable to delete the default theme. Vaikimisi kujundust pole võimalik kustutada. - + Theme %s is used in the %s plugin. Kujundust %s kasutatakse pluginas %s. - + You have not selected a theme. Sa ei ole kujundust valinud. - + Save Theme - (%s) Salvesta kujundus - (%s) - + Theme Exported Kujundus eksporditud - + Your theme has been successfully exported. Sinu kujundus on edukalt eksporditud. - + Theme Export Failed Kujunduse eksportimine nurjus - + Your theme could not be exported due to an error. Sinu kujundust polnud võimalik eksportida, kuna esines viga. - + Select Theme Import File Importimiseks kujunduse faili valimine - + File is not a valid theme. See fail ei ole sobilik kujundus. @@ -4533,58 +4625,58 @@ Sisu ei ole UTF-8 kodeeringus. &Ekspordi kujundus - + You must select a theme to rename. Pead valima kujunduse, mida ümber nimetada. - + Rename Confirmation Ümbernimetamise kinnitus - + Rename %s theme? Kas anda kujundusele %s uus nimi? - + You must select a theme to delete. Pead valima kujunduse, mida tahad kustutada. - + Delete Confirmation Kustutamise kinnitus - + Delete %s theme? Kas kustutada kujundus %s? - + Validation Error Valideerimise viga - + A theme with this name already exists. Sellenimeline teema on juba olemas. - + OpenLP Themes (*.theme *.otz) OpenLP kujundused (*.theme *.otz) - + Copy of %s Copy of <theme name> %s (koopia) - + Theme Already Exists Kujundus on juba olemas @@ -4592,222 +4684,222 @@ Sisu ei ole UTF-8 kodeeringus. 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 lisavorminduse 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: @@ -4817,47 +4909,47 @@ Sisu ei ole UTF-8 kodeeringus. Teema muutmine - %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. See nõustaja aitab kujundusi luua ja muuta. Klõpsa edasi nupul, et alustada tausta määramisest. - + Transitions: Üleminekud: - + &Footer Area &Jaluse ala - + Starting color: Algusvärvus: - + Ending color: Lõppvärvus: - + Background color: Tausta värvus: - + Justify Rööpjoondus - + Layout Preview Kujunduse eelvaade - + Transparent Läbipaistev @@ -4865,42 +4957,42 @@ Sisu ei ole UTF-8 kodeeringus. OpenLP.ThemesTab - + Global Theme Üldine kujundus - + Theme Level Kujunduse tase - + S&ong Level &Laulu tase - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Laul kuvatakse sellele andmebaasis määratud kujundusega. Kui laulul kujundus puudub, kasutatakse teenistuse kujundust. Kui teenistusel kujundus puudub, siis kasutatakse üleüldist kujundust. - + &Service Level &Teenistuse tase - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Kasutatakse teenistuse kujundust, eirates laulude kujundusi. Kui teenistusel kujundust pole, kasutatakse globaalset. - + &Global Level &Üleüldine tase - + Use the global theme, overriding any themes associated with either the service or the songs. Kasutatakse globaalset kujundust, eirates nii teenistuse kui laulu kujundust. @@ -5146,22 +5238,22 @@ Sisu ei ole UTF-8 kodeeringus. Versioon - + Delete the selected item. Valitud kirje kustutamine. - + Move selection up one position. Valiku liigutamine ühe koha võrra ülespoole. - + Move selection down one position. Valiku liigutamine ühe koha võrra allapoole. - + &Vertical Align: &Vertikaaljoondus: @@ -5227,7 +5319,7 @@ Sisu ei ole UTF-8 kodeeringus. Pead määrama vähemalt ühe %s faili, millest importida. - + Welcome to the Bible Import Wizard Tere tulemast Piibli importimise nõustajasse @@ -5410,11 +5502,6 @@ Sisu ei ole UTF-8 kodeeringus. Reset live background. Ekraanil esialgse tausta taastamine. - - - &Split - &Tükelda - Split a slide into two only if it does not fit on the screen as one slide. @@ -5461,29 +5548,34 @@ Sisu ei ole UTF-8 kodeeringus. Search bar place holder text Teemade otsing... + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 ja %2 - + %1, and %2 Locale list separator: end %1, ja %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5558,17 +5650,17 @@ Sisu ei ole UTF-8 kodeeringus. Esitluseks kasutatakse: - + File Exists Fail on olemas - + A presentation with that filename already exists. Sellise nimega esitluse fail on juba olemas. - + This type of presentation is not supported. Seda liiki esitlus ei ole toetatud. @@ -5578,17 +5670,17 @@ Sisu ei ole UTF-8 kodeeringus. Esitlused (%s) - + Missing Presentation Puuduv esitlus - + The Presentation %s no longer exists. Esitlust %s enam ei ole. - + The Presentation %s is incomplete, please reload. Esitlus %s ei ole täielik, palun laadi see uuesti. @@ -5669,11 +5761,6 @@ Sisu ei ole UTF-8 kodeeringus. Search Otsi - - - Back - Tagasi - Refresh @@ -5685,50 +5772,70 @@ Sisu ei ole UTF-8 kodeeringus. Tühi - + Show Näita - + Prev Eelm - + Next Järgm - + Text Tekst - + Show Alert Kuva teade - + Go Live Ekraanile - + No Results Tulemusi pole - + Options Valikud - + Add to Service Lisa teenistusele + + + Home + + + + + Theme + Kujundus + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5862,7 +5969,7 @@ Sisu ei ole UTF-8 kodeeringus. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Laulukasutuse andmete kustutamine @@ -5887,7 +5994,7 @@ Sisu ei ole UTF-8 kodeeringus. 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. Vali kuupäev, milleni laulukasutuse andmed tuleks kustutada. Kõik kuni selle määratud hetkeni kogutud andmed kustutatakse lõplikult. @@ -5895,22 +6002,22 @@ Sisu ei ole UTF-8 kodeeringus. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Laulukasutuse salvestamine - + Select Date Range Vali kuupäevade vahemik - + to kuni - + Report Location Raporti asukoht @@ -6188,210 +6295,223 @@ Kodeering on vajalik märkide õige esitamise jaoks. EasyWorship'ist] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Lauluredaktor - + &Title: &Pealkiri: - + Alt&ernate title: &Teine pealkiri: - + &Lyrics: &Sõnad: - + &Verse order: &Salmide järjekord: - + Ed&it All Muuda &kõiki - + Title && Lyrics Pealkiri && sõnad - + &Add to Song &Lisa laulule - + &Remove &Eemalda - + &Manage Authors, Topics, Song Books &Autorite, teemade ja laulikute haldamine - + A&dd to Song L&isa laulule - + R&emove &Eemalda - + Book: Raamat: - + Number: Number: - + Authors, Topics && Song Book Autorid, teemad && laulik - + New &Theme Uus &kujundus - + Copyright Information Autoriõiguse andmed - + Comments Kommentaarid - + Theme, Copyright Info && Comments Kujundus, autoriõigus && kommentaarid - + Add Author Autori lisamine - + This author does not exist, do you want to add them? Seda autorit veel pole, kas tahad autori lisada? - + This author is already in the list. See autor juba on loendis. - + 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. Sa ei ole valinud ühtegi sobilikku autorit. Vali autor loendist või sisesta uue autori nimi ja klõpsa uue nupul "Lisa laulule autor". - + Add Topic Teema lisamine - + This topic does not exist, do you want to add it? Sellist teemat pole. Kas tahad selle lisada? - + This topic is already in the list. See teema juba on loendis. - + 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. Sa pole valinud sobivat teemat. Vali teema kas loendist või sisesta uus teema ja selle lisamiseks klõpsa nupule "Lisa laulule teema". - + You need to type in a song title. Pead sisestama laulu pealkirja. - + You need to type in at least one verse. Pead sisestama vähemalt ühe salmi. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Salmide järjekord pole sobiv. Mitte ükski valm ei vasta %s-le. Sobivad salmid on %s. - + Add Book Lauliku lisamine - + This song book does not exist, do you want to add it? Sellist laulikut pole. Kas tahad selle lisada? - + You need to have an author for this song. Pead lisama sellele laulule autori. - + You need to type some text in to the verse. Salm peab sisaldama teksti. - + Linked Audio Lingitud audio - + Add &File(s) Lisa &faile - + Add &Media Lisa &meediat - + Remove &All Eemalda &kõik - + Open File(s) Failide avamine - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Hoiatus</strong> Mitte kõik salmid pole kasutusel. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. Salmide järjekord on vale. Ühtegi salmi nimega %s pole. Õiged nimed on %s. @@ -6622,28 +6742,28 @@ Kodeering on vajalik märkide õige esitamise jaoks. CCLI SongSelect Files - + CCLI SongSelecti failid EasySlides XML File - + EasySlides XML fail EasyWorship Song Database - + EasyWorship laulude andmebaas SongsPlugin.MediaFilesForm - + Select Media File(s) Meediafailide valimine - + Select one or more audio files from the list below, and click OK to import them into this song. Vali järgnevast loendist vähemalt üks audiofail ning klõpsa nupule Olgu, et seda sellesse laulu importida. @@ -6661,7 +6781,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Laulusõnad - + CCLI License: CCLI litsents: @@ -6684,7 +6804,7 @@ Kodeering on vajalik märkide õige esitamise jaoks. Autorite, teemade ja laulikute loendi haldamine. - + copy For song cloning koopia @@ -6778,12 +6898,12 @@ Kodeering on vajalik märkide õige esitamise jaoks. SongsPlugin.SongImport - + copyright autoriõigus - + The following songs could not be imported: Järgnevaid laule polnud võimalik importida: @@ -6943,8 +7063,8 @@ Kodeering on vajalik märkide õige esitamise jaoks. - Add missing songs when opening service - Teenistuse avamisel lisatakse puuduvad laulud + Import missing songs from service files + Teenistuse failidest imporditakse puuduvad laulud diff --git a/resources/i18n/fi.ts b/resources/i18n/fi.ts index 55efd409c..1a1c8eb5b 100644 --- a/resources/i18n/fi.ts +++ b/resources/i18n/fi.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message - + Alert &text: - + &New - + &Save - + Displ&ay - + Display && Cl&ose @@ -79,7 +79,7 @@ - + &Parameter: @@ -117,32 +117,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font - + Font name: - + Font color: - + Background color: - + Font size: - + Alert timeout: @@ -659,41 +659,86 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + + Bible Exists + + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -807,80 +852,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: - + Corresponding name: - + Show Books From - + Old Testament - + New Testament - + Apocrypha @@ -912,6 +949,75 @@ Bible should be displayed in the Bible search: + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + + + + + Version name: + + + + + Copyright: + + + + + Permissions: + + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -954,167 +1060,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + 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. - + Web Download - + Location: - + Crosswalk - + BibleGateway - + Bible: - + Download Options - + Server: - + Username: - + Password: - + Proxy Server (Optional) - + License Details - + Set up the Bible's license details. - + Version name: - + Copyright: - + Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - + Bibleserver - + Permissions: - + Bible file: - + Books file: - + Verses file: - + openlp.org 1.x Bible Files - + Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -1123,17 +1229,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: @@ -1149,90 +1255,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick - + Find: - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - + Second: - + Scripture Reference - + Toggle to keep or clear the previous results. - + 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. - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1246,12 +1357,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1483,42 +1594,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: @@ -1533,12 +1644,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + Ed&it All - + Insert Slide @@ -1636,33 +1747,33 @@ 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. @@ -1670,18 +1781,18 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1807,22 +1918,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1850,17 +1961,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits - + License - + Contribute @@ -1870,17 +1981,17 @@ Should OpenLP upgrade now? - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -1945,7 +2056,7 @@ Final Credit - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -1956,7 +2067,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -1965,62 +2076,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: - + Image file: - + Open File @@ -2030,124 +2141,124 @@ Portions copyright © 2004-2012 %s - + Preview items when clicked in Media Manager - + Click to select a color. - + Browse for an image file to display. - + Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2155,33 +2266,33 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred - + 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. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File @@ -2465,9 +2576,14 @@ Version: %s Custom Slides + + + Finish + + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2476,64 +2592,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2777,40 +2888,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2821,6 +2902,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2846,309 +2947,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 @@ -3159,125 +3260,125 @@ 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 - + 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. @@ -3286,32 +3387,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3341,7 +3442,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected @@ -3428,27 +3529,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive @@ -3471,12 +3572,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -3484,7 +3585,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options @@ -3499,47 +3600,47 @@ Suffix not supported - + Zoom In - + Zoom Out - + Zoom Original - + 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 @@ -3549,12 +3650,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3588,7 +3689,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3596,188 +3697,188 @@ Suffix not supported OpenLP.ServiceManager - + 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. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not 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 - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3797,72 +3898,72 @@ The content encoding is not UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3870,7 +3971,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3886,12 +3987,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -3906,32 +4007,32 @@ The content encoding is not UTF-8. - + 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. @@ -3946,7 +4047,7 @@ The content encoding is not UTF-8. - + Configure Shortcuts @@ -4113,11 +4214,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4200,17 +4296,17 @@ The content encoding is not UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4311,62 +4407,62 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. @@ -4386,58 +4482,58 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4445,222 +4541,222 @@ 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: @@ -4670,47 +4766,47 @@ The content encoding is not UTF-8. - + 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: - + Justify - + Layout Preview - + Transparent @@ -4718,42 +4814,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -4999,22 +5095,22 @@ The content encoding is not UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5080,7 +5176,7 @@ The content encoding is not UTF-8. - + Welcome to the Bible Import Wizard @@ -5263,11 +5359,6 @@ The content encoding is not UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5314,29 +5405,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5411,17 +5507,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5431,17 +5527,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5522,11 +5618,6 @@ The content encoding is not UTF-8. Search - - - Back - - Refresh @@ -5538,50 +5629,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live - + No Results - + Options - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5715,7 +5826,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5740,7 +5851,7 @@ The content encoding is not UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5748,22 +5859,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6035,210 +6146,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6485,12 +6609,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6508,7 +6632,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6531,7 +6655,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6625,12 +6749,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6790,7 +6914,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/fr.ts b/resources/i18n/fr.ts index 4ea2641c9..dae874ca5 100644 --- a/resources/i18n/fr.ts +++ b/resources/i18n/fr.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Message d'alerte - + Alert &text: &Texte d'Alerte : - + &New &Nouveau - + &Save &Enregistre - + Displ&ay A&ffiche - + Display && Cl&ose &Affiche && Ferme @@ -79,7 +79,7 @@ Vous n'avez pas spécifié de texte pour votre alerte. Veuillez entrer votre message puis cliquer sur Nouveau. - + &Parameter: &Paramètre : @@ -119,32 +119,32 @@ Voulez-vous tout de même continuer ? AlertsPlugin.AlertsTab - + Font Police - + Font name: Nom de la police : - + Font color: Couleur de la police : - + Background color: Couleur de fond : - + Font size: Taille de la police : - + Alert timeout: Temps d'alerte : @@ -661,42 +661,87 @@ Voulez-vous tout de même continuer ? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Veuillez spécifier un nom de version pour votre Bible. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Vous devez introduire un copyright pour votre Bible. Les Bibles dans le domaine publics doivent être marquée comme trouvé. + + + + Bible Exists + La Bible existe + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Cette bible existe déjà. Veuillez importer une autre Bible ou supprimer la Bible existante. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Écriture de référence erronée - + Web Bible cannot be used Les Bible Web ne peut être utilisée - + Text Search is not available with Web Bibles. La recherche textuelle n'est pas disponible avec les Bibles Web. - + 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. Vous n'avez pas spécifié de mot clé de recherche. Vous pouvez séparer vos mots clés par un espace afin de tous les rechercher ou les séparer par une virgule afin de rechercher l'un d'entre eux. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Il n'y a pas de Bibles actuellement installée. Veuillez utiliser l'assistant d'importation pour installer une ou plusieurs Bibles. - + No Bibles Available Aucune Bible disponible - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -811,80 +856,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English Français - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name Sélectionne le nom du livre - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Le nom du livre suivant n'a pas de correspondance interne. Veuillez sélectionner le nom anglais correspondant dans la liste. - + Current name: Nom courant : - + Corresponding name: Nom correspondant : - + Show Books From Affiche le formulaire des livres - + Old Testament Ancien testament - + New Testament Nouveau testament - + Apocrypha Apocryphes @@ -916,6 +953,75 @@ Bible should be displayed in the Bible search: Import des versets... terminé. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Détails de la licence + + + + Version name: + Nom de la version : + + + + Copyright: + Copyright : + + + + Permissions: + Autorisations : + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + Français + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -958,167 +1064,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Assistant d'import de Bible - + 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. Cet assistant vous permet d'importer des bibles de différents formats. Cliquez sur le bouton suivant si dessous pour démarrer le processus en sélectionnant le format à importer. - + Web Download Téléchargement Web - + Location: Emplacement : - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bible : - + Download Options Options de téléchargement - + Server: Serveur : - + Username: Nom d'utilisateur : - + Password: Mot de passe : - + Proxy Server (Optional) Serveur Proxy (Facultatif) - + License Details Détails de la licence - + Set up the Bible's license details. Mise en place des details de la licence de la Bible. - + Version name: Nom de la version : - + Copyright: Copyright : - + Please wait while your Bible is imported. Merci de patienter durant l'importation de la Bible. - + You need to specify a file with books of the Bible to use in the import. Veuillez sélectionner un fichier contenant les livres de la Bible à utiliser dans l'import. - + You need to specify a file of Bible verses to import. Veuillez sélectionner un fichier de versets bibliques à importer. - + You need to specify a version name for your Bible. Veuillez spécifier un nom de version pour votre Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Vous devez introduire un copyright pour votre Bible. Les Bibles dans le domaine publics doivent être marquée comme trouvé. - + Bible Exists La Bible existe - + This Bible already exists. Please import a different Bible or first delete the existing one. Cette bible existe déjà. Veuillez importer une autre Bible ou supprimer la Bible existante. - + Your Bible import failed. L'import de votre Bible à échoué. - + CSV File Fichier CSV - + Bibleserver Bibleserver - + Permissions: Autorisations : - + Bible file: Fichier Bible : - + Books file: Fichier de livres : - + Verses file: Fichier de versets : - + openlp.org 1.x Bible Files Fichiers Bible openlp.org 1.x - + Registering Bible... Enregistrement de la Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Bible enregistrée. Veuillez noter que les versets seront téléchargés @@ -1128,17 +1234,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language Sélectionne la langue - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP ne peut déterminer la langue de cette traduction de la Bible. Veillez sélectionner la langue dans la liste suivante. - + Language: Langue : @@ -1154,90 +1260,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Rapide - + Find: Recherche : - + Book: Livre : - + Chapter: Chapitre : - + Verse: Verset : - + From: De : - + To: A : - + Text Search Recherche de texte - + Second: Deuxième : - + Scripture Reference Référence biblique - + Toggle to keep or clear the previous results. Cocher pour garder ou effacer le résultat précédent. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Vous ne pouvez pas combiner les résultats de recherche pour les versets bibliques simples et doubles. Voulez-vous effacer les résultats et effectuer une nouvelle recherche ? - + Bible not fully loaded. Bible partiellement 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 seconde Bible ne contient pas tous les versets présents dans la Bible principale. Seulement les versets trouvés dans les deux Bibles seront affichés. %d versets n'ont pas été inclus dans les résultats. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1251,12 +1362,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Détection de l'encodage (cela peut prendre quelque minutes)... - + Importing %s %s... Importing <book name> <chapter>... Importation %s %s... @@ -1494,42 +1605,42 @@ Veuillez noter que les versets des Bibles Web seront téléchargés à la demand CustomPlugin.EditCustomForm - + Edit Custom Slides Édite les diapositives personnalisées - + &Title: &Titre : - + Add a new slide at bottom. Ajoute une nouvelle diapositive en bas. - + Edit the selected slide. Édite la diapositive sélectionnée. - + Edit all the slides at once. Édite toutes les diapositives en une. - + Split a slide into two by inserting a slide splitter. Sépare la diapositive en deux en insérant un séparateur de diapositive. - + The&me: Thè&me : - + &Credits: &Crédits : @@ -1544,12 +1655,12 @@ Veuillez noter que les versets des Bibles Web seront téléchargés à la demand Vous devez ajouter au moins une diapositive - + Ed&it All Édite &tous - + Insert Slide Insère une diapositive @@ -1647,34 +1758,34 @@ Veuillez noter que les versets des Bibles Web seront téléchargés à la demand Vous devez sélectionner une image à supprimer. - + You must select an image to replace the background with. Vous devez sélectionner une image pour remplacer le fond. - + 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 les autres images malgré tout ? - + There was a problem replacing your background, the image file "%s" no longer exists. Impossible de remplacer votre fond, le fichier image "%s" n'existe plus. - + There was no display item to amend. Il n'y a aucun élément d'affichage à modifier. @@ -1682,19 +1793,19 @@ Voulez-vous ajouter les autres images malgré tout ? ImagesPlugin.ImageTab - + Background Color Couleur de fond - + Default Color: Couleur par défaut : - - Provides border where image is not the correct dimensions for the screen when resized. - Ajoute des bordures si l'image n'a pas le même ratio que l'écran d'affichage. + + Visible background for images with aspect ratio different to screen. + @@ -1819,22 +1930,22 @@ Voulez-vous ajouter les autres images malgré tout ? MediaPlugin.MediaTab - + Available Media Players Lecteurs de Média disponibles - + %s (unavailable) %s (non disponible) - + Player Order Ordre des lecteurs - + Allow media player to be overridden @@ -1864,17 +1975,17 @@ Voulez-vous que OpenLP effectue la mise à jour maintenant ? OpenLP.AboutForm - + Credits Crédits - + License Licence - + Contribute Contribuer @@ -1884,17 +1995,17 @@ Voulez-vous que OpenLP effectue la mise à jour maintenant ? révision %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier dans les termes de la licence GNU General Public License tel que publié par la Free Software Foundation ; version 2 de la licence. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN USAGE PARTICULIER. Voir ci-dessous pour plus de détails. - + Project Lead %s @@ -2019,7 +2130,7 @@ Crédit final gratuitement, car Il nous a libérés. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2036,7 +2147,7 @@ En savoir plus sur OpenLP : http://openlp.org/ OpenLP est écrit et maintenu par des bénévoles. Si vous souhaitez voir plus de logiciels libres chrétien se développer, pensez à apporter votre contribution à l'aide du bouton ci-dessous. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -2045,62 +2156,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Propriétés de l'interface utilisateur - + Number of recent files to display: Nombre de fichiers récents à afficher : - + Remember active media manager tab on startup Se souvenir de l'onglet actif du gestionnaire de média au démarrage - + Double-click to send items straight to live Double-cliquer pour envoyer les éléments directement au live - + Expand new service items on creation Étends les nouveaux éléments du service à la création - + Enable application exit confirmation Demande une confirmation avant de quitter l'application - + Mouse Cursor Curseur de la souris - + Hide mouse cursor when over display window Cache le curseur de la souris quand elle se trouve sur l'écran live - + Default Image Image par défaut - + Background color: Couleur de fond : - + Image file: Fichier image : - + Open File Ouvre un fichier @@ -2110,124 +2221,124 @@ Portions copyright © 2004-2012 %s Avancé - + Preview items when clicked in Media Manager Prévisualise l’élément cliqué du gestionnaire de média - + Click to select a color. Clique pour sélectionner une couleur. - + Browse for an image file to display. Parcoure pour trouver une image à afficher. - + Revert to the default OpenLP logo. Retour au logo OpenLP par défaut. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2235,34 +2346,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Erreur survenue - + 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. Oups! OpenLP a rencontré un problème, et ne peut pas continuer à s'exécuter. Le texte dans le champ ci-dessous contient des informations qui pourraient être utiles aux développeurs d'OpenLP, veuillez s'il vous plaît envoyer un courriel à bugs@openlp.org, avec une description détaillée de ce que vous faisiez lorsque le problème est survenu. - + Send E-Mail Envoyer un courriel - + Save to File Enregistre dans un fichier - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Veuillez entrer une description de ce que vous faisiez au moment de l'erreur (Minimum 20 caractères) - + Attach File Attacher un fichier @@ -2573,79 +2684,75 @@ Version : %s Custom Slides Diapositives personnalisées + + + Finish + Terminé + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Aucune connexion Internet n'a été trouvée. L'assistant de démarrage a besoin d'une connexion Internet pour pouvoir télécharger les chants d'exemple, les Bibles et les thèmes. Cliquez sur le bouton terminer pour démarrer OpenLP avec les paramètres initiaux sans données d'exemples. - -Pour démarrer à nouveau l'assistant de démarrage et importer les données d'exemples, vérifiez votre connexion Internet et redémarrer cet assistant en sélectionnant "Outils/Redémarrer l'assistant de démarrage". + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Pour annuler l'assistant de démarrage complètement (et ne pas démarrer OpenLP), cliquez sur le bouton annuler. - - - - Finish - Terminé +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Configurer les balises de formatage - + Edit Selection Édite la sélection - + Save Enregistre - + Description Description - + Tag Balise - + Start tag Balise de début - + End tag Balise de fin - + Tag Id Identifiant de balise - + Start HTML HTML de début - + End HTML HTML de fin @@ -2889,40 +2996,10 @@ Pour annuler l'assistant de démarrage complètement (et ne pas démarrer O Démarrer le son de fond en pause - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2933,6 +3010,26 @@ Pour annuler l'assistant de démarrage complètement (et ne pas démarrer O Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2958,287 +3055,287 @@ Pour annuler l'assistant de démarrage complètement (et ne pas démarrer O OpenLP.MainWindow - + &File &Fichier - + &Import &Import - + &Export E&xport - + &View &Visualise - + M&ode M&ode - + &Tools &Outils - + &Settings O&ptions - + &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 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 à 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/. @@ -3247,22 +3344,22 @@ You can download the latest version from http://openlp.org/. Vous pouvez télécharger la dernière version à partir de http://openlp.org/. - + OpenLP Version Updated Version d'OpenLP mis à jour - + OpenLP Main Display Blanked OpenLP affichage principal noirci - + The Main Display has been blanked out L'affichage principal a été noirci - + Default Theme: %s Thème par défaut : %s @@ -3273,82 +3370,82 @@ Vous pouvez télécharger la dernière version à partir de http://openlp.org/.< Français - + Configure &Shortcuts... Personnalise les &raccourcis... - + Close OpenLP Ferme OpenLP - + Are you sure you want to close OpenLP? Êtes vous sur de vouloir fermer OpenLP ? - + Open &Data Folder... &Ouvre le répertoire de données... - + Open the folder where songs, bibles and other data resides. Ouvre le répertoire où se trouve les chants, bibles et autres données. - + &Autodetect &Détecte automatiquement - + Update Theme Images Met à jour les images de thèmes - + Update the preview images for all themes. Mettre à jour les images de tous les thèmes. - + Print the current service. Imprime le service courant. - + &Recent Files Fichiers &récents - + L&ock Panels &Verrouille les panneaux - + Prevent the panels being moved. Empêcher les panneaux d'être déplacé. - + Re-run First Time Wizard Re-démarrer l'assistant de démarrage - + Re-run the First Time Wizard, importing songs, Bibles and themes. Re-démarrer l'assistant de démarrage, importer les chants, Bibles et thèmes. - + Re-run First Time Wizard? Re-démarrer l'assistant de démarrage ? - + 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. @@ -3357,43 +3454,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Re-démarrer cet assistant peut apporter des modifications à votre configuration actuelle d'OpenLP, éventuellement ajouter des chants à votre liste de chants existante et changer votre thème par défaut. - + Clear List Clear List of recent files Vide la liste - + Clear the list of recent files. Vide la liste des fichiers récents. - + Configure &Formatting Tags... Configure les &balises de formatage... - + Export OpenLP settings to a specified *.config file Exporte la configuration d'OpenLP vers un fichier *.config spécifié - + Settings Configuration - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Importe la configuration d'OpenLP à partir d'un fichier *.config précédemment exporté depuis un autre ordinateur. - + Import settings? Import de la configuration ? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3406,32 +3503,32 @@ Importer la configuration va changer de façon permanente votre configuration d& L'import de configurations incorrect peut provoquer des comportements imprévisible d'OpenLP. - + Open File Ouvre un fichier - + OpenLP Export Settings Files (*.conf) Fichier de configuration OpenLP (*.conf) - + Import settings Import de la configuration - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP va se terminer maintenant. La Configuration importée va être appliquée au prochain démarrage. - + Export Settings File Export de la configuration - + OpenLP Export Settings File (*.conf) Fichier d'export de la configuration d'OpenLP (*.conf) @@ -3465,7 +3562,7 @@ Base de données: %s OpenLP.MediaManagerItem - + No Items Selected Pas d'éléments sélectionnés @@ -3553,27 +3650,27 @@ Extension non supportée OpenLP.PluginForm - + Plugin List Liste des modules - + Plugin Details Détails du module - + Status: État : - + Active Actif - + Inactive Inactif @@ -3596,12 +3693,12 @@ Extension non supportée OpenLP.PrintServiceDialog - + Fit Page Ajuster à la page - + Fit Width Ajuster à la largeur @@ -3609,7 +3706,7 @@ Extension non supportée OpenLP.PrintServiceForm - + Options Options @@ -3624,47 +3721,47 @@ Extension non supportée Copier comme de l'HTML - + Zoom In Zoom avant - + Zoom Out Zoom arrière - + Zoom Original Zoom d'origine - + Other Options Autres options - + Include slide text if available Inclure le texte des diapositives si disponible - + Include service item notes Inclure les notes des éléments du service - + Include play length of media items Inclure la durée des éléments média - + Add page break before each text item Ajoute des sauts de page entre chaque éléments - + Service Sheet Feuille de service @@ -3674,12 +3771,12 @@ Extension non supportée Imprimer - + Title: Titre : - + Custom Footer Text: Texte de pied de page personnalisé : @@ -3713,7 +3810,7 @@ Extension non supportée OpenLP.ServiceItemEditForm - + Reorder Service Item Réordonne les éléments du service @@ -3721,189 +3818,189 @@ Extension non supportée OpenLP.ServiceManager - + Move to &top Place en &premier - + Move item to the top of the service. Place l'élément au début du service. - + Move &up Déplace en &haut - + Move item up one position in the service. Déplace l'élément d'une position en haut. - + Move &down Déplace en &bas - + Move item down one position in the service. Déplace l'élément d'une position en bas. - + Move to &bottom Place en &dernier - + Move item to the end of the service. Place l'élément a la fin du service. - + &Delete From Service &Retire du service - + Delete the selected item from the service. Retire l'élément sélectionné du service. - + &Add New Item &Ajoute un nouvel élément - + &Add to Selected Item &Ajoute à l'élément sélectionné - + &Edit Item &Édite l'élément - + &Reorder Item &Réordonne l'élément - + &Notes &Notes - + &Change Item Theme &Change le thème de l'élément - + 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 pas un fichier de service valide. Le contenu n'est pas de l'UTF-8. - + File is not a valid service. Le fichier n'est pas un fichier de service valide. - + Missing Display Handler Composant d'affichage manquant - + Your item cannot be displayed as there is no handler to display it Votre élément ne peut pas être affiché parce qu'il n'y a pas de composant pour l'afficher - + Your item cannot be displayed as the plugin required to display it is missing or inactive Votre élément ne peut pas être affiché parce que le module nécessaire est manquant ou désactivé - + &Expand all &Développer tout - + Expand all the service items. Développe tous les éléments du service. - + &Collapse all &Réduire tout - + Collapse all the service items. Réduit tous les éléments du service. - + Open File Ouvre un fichier - + Moves the selection down the window. Déplace la sélection en bas de la fenêtre. - + Move up Déplace en haut - + Moves the selection up the window. Déplace la sélection en haut de la fenêtre. - + Go Live Lance le direct - + Send the selected item to Live. Affiche l'élément sélectionné en direct. - + &Start Time Temps de &début - + Show &Preview Affiche en &prévisualisation - + Show &Live Affiche en &direct - + Modified Service Service modifié - + The current service has been modified. Would you like to save this service? Le service courant à été modifié. Voulez-vous l'enregistrer ? @@ -3923,72 +4020,72 @@ Le contenu n'est pas de l'UTF-8. Durée du service : - + Untitled Service Service sans titre - + File could not be opened because it is corrupt. Le fichier ne peux être ouvert car il est corrompu. - + Empty File Fichier vide - + This service file does not contain any data. Ce fichier de service ne contient aucune donnée. - + Corrupt File Fichier corrompu - + Load an existing service. Charge un service existant. - + Save this service. Enregistre ce service. - + Select a theme for the service. 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. - + Service File Missing Fichier de service manquant - + Slide theme Thème de diapositive - + Notes Notes - + Edit Édite - + Service copy only Copie de service uniquement @@ -3996,7 +4093,7 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Notes sur l'élément du service @@ -4012,12 +4109,12 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ShortcutListDialog - + Action Action - + Shortcut Raccourci @@ -4032,32 +4129,32 @@ Le contenu n'est pas de l'UTF-8. Le raccourci "%s" est déjà assigné à une autre action, veuillez utiliser un autre raccourci. - + Alternate Alternatif - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Sélectionnez une action puis cliquez sur un des boutons ci-dessous pour capturer un nouveau raccourci principal ou secondaire. - + Default Défaut - + Custom Personnalisé - + Capture shortcut. Capture un raccourci. - + Restore the default shortcut of this action. Restaure le raccourci par défaut de cette action. @@ -4072,7 +4169,7 @@ Le contenu n'est pas de l'UTF-8. Voulez vous restaurer tous les raccourcis par leur valeur par défaut ? - + Configure Shortcuts Configure les raccourcis @@ -4239,11 +4336,6 @@ Le contenu n'est pas de l'UTF-8. Background Audio Son en fond - - - Next Track - - Go to next audio track. @@ -4326,17 +4418,17 @@ Le contenu n'est pas de l'UTF-8. Le temps de début est après le temps de fin de l'élément média - + Theme Layout Disposition du thème - + The blue box shows the main area. La boîte bleu indique la zone principale. - + The red box shows the footer. La boîte rouge indique la zone de pied de page. @@ -4437,62 +4529,62 @@ Le contenu n'est pas de l'UTF-8. Définir comme défaut &Global - + %s (default) %s (défaut) - + You must select a theme to edit. Vous devez sélectionner un thème à éditer. - + 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. Le Thème %s est utilisé par le module %s. - + You have not selected a theme. Vous n'avez pas sélectionner de thème. - + Save Theme - (%s) Enregistre le thème - (%s) - + Theme Exported Thème exporté - + Your theme has been successfully exported. Votre thème a été exporté avec succès. - + Theme Export Failed L'export du thème a échoué - + Your theme could not be exported due to an error. Votre thème ne peut pas être exporté à cause d'une erreur. - + Select Theme Import File Sélectionner le fichier thème à importer - + File is not a valid theme. Le fichier n'est pas un thème valide. @@ -4512,58 +4604,58 @@ Le contenu n'est pas de l'UTF-8. &Exporte le thème - + You must select a theme to rename. Vous devez sélectionner un thème à renommer. - + Rename Confirmation Confirme le renommage - + Rename %s theme? Renomme le thème %s ? - + You must select a theme to delete. Vous devez sélectionner un thème à supprimer. - + Delete Confirmation Confirmation de suppression - + Delete %s theme? Supprime le thème %s ? - + Validation Error Erreur de validation - + A theme with this name already exists. Un autre thème porte déjà ce nom. - + OpenLP Themes (*.theme *.otz) Thèmes OpenLP (*.theme *.otz) - + Copy of %s Copy of <theme name> Copie de %s - + Theme Already Exists @@ -4571,222 +4663,222 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ThemeWizard - + Theme Wizard Assistant de thème - + Welcome to the Theme Wizard Bienvenue dans l'assistant de thème - + Set Up Background Choisir le font - + Set up your theme's background according to the parameters below. Choisir le fond de votre thème à l'aide des paramètres ci-dessous. - + Background type: Type de fond : - + Solid Color Couleur unie - + Gradient Dégradé - + Color: Couleur : - + Gradient: Dégradé : - + 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 Détails de la police de la zone principale - + Define the font and display characteristics for the Display text Définir la police et les caractéristique d'affichage de ce texte - + Font: Police : - + Size: Taille : - + Line Spacing: Espace entre les lignes : - + &Outline: &Contour : - + &Shadow: &Ombre : - + Bold Gras - + Italic Italique - + Footer Area Font Details Détails de la police de la zone 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 de 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ètres d'affichage supplémentaires - + Horizontal Align: Alignement horizontal : - + Left Gauche - + Right Droite - + Center Centré - + Output Area Locations Emplacement de la zone d'affichage - + Allows you to change and move the main and footer areas. Permet de déplacer les zones 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 : - + Use default location Utilise l'emplacement par 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 à la place du thème courant ou change le nom pour en créer un nouveau - + Theme name: Nom du thème : @@ -4796,47 +4888,47 @@ Le contenu n'est pas de l'UTF-8. Édite le thème - %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. Cet assistant vous permet de créer et d'éditer vos thèmes. Cliquer sur le bouton suivant pour démarrer le processus en choisissant votre fond. - + Transitions: Transitions : - + &Footer Area Zone de &pied de page - + Starting color: Couleur de début : - + Ending color: Couleur de fin : - + Background color: Couleur de fond : - + Justify Justifier - + Layout Preview Prévisualise la mise en page - + Transparent @@ -4844,42 +4936,42 @@ Le contenu n'est pas de l'UTF-8. OpenLP.ThemesTab - + Global Theme Thème global - + Theme Level Politique d'application du thème - + S&ong Level Niveau &chant - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Utilise le thème pour chaque chants de la base de données. Si un chant n'a pas de thème associé, le thème du service est utilisé. Si le service n'a pas de thème, le thème global est utilisé. - + &Service Level Niveau &service - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Utilise le thème du service, surcharge le thème de chaque chants. Si le service n'a pas de thème, le thème global est utilisé. - + &Global Level Niveau &global - + Use the global theme, overriding any themes associated with either the service or the songs. Utilise le thème global, surcharge tous les thèmes associés aux services ou aux chants. @@ -5125,22 +5217,22 @@ Le contenu n'est pas de l'UTF-8. Version - + Delete the selected item. Supprime l'élément sélectionné. - + Move selection up one position. Déplace la sélection d'une position vers le haut. - + Move selection down one position. Déplace la sélection d'une position vers le bas. - + &Vertical Align: Alignement &vertical : @@ -5206,7 +5298,7 @@ Le contenu n'est pas de l'UTF-8. Vous devez spécifier au moins un fichier de %s à importer. - + Welcome to the Bible Import Wizard Bienvenue dans l'assistant d'import de Bible @@ -5389,11 +5481,6 @@ Le contenu n'est pas de l'UTF-8. Reset live background. Restaure le fond du direct. - - - &Split - &Sépare - Split a slide into two only if it does not fit on the screen as one slide. @@ -5440,29 +5527,34 @@ Le contenu n'est pas de l'UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5537,17 +5629,17 @@ Le contenu n'est pas de l'UTF-8. Actuellement utilisé : - + File Exists Ce fichier existe - + A presentation with that filename already exists. Une présentation utilise déjà ce nom de fichier. - + This type of presentation is not supported. Ce type de présentation n'est pas supporté. @@ -5557,17 +5649,17 @@ Le contenu n'est pas de l'UTF-8. Présentations (%s) - + Missing Presentation Présentation manquante - + The Presentation %s no longer exists. La présentation %s n'existe plus. - + The Presentation %s is incomplete, please reload. La présentation %s est incomplète, merci de la recharger. @@ -5648,11 +5740,6 @@ Le contenu n'est pas de l'UTF-8. Search Recherche - - - Back - Arrière - Refresh @@ -5664,50 +5751,70 @@ Le contenu n'est pas de l'UTF-8. Vide - + Show Affiche - + Prev Préc - + Next Suiv - + Text Texte - + Show Alert Affiche une alerte - + Go Live Lance le direct - + No Results Pas de résultats - + Options Options - + Add to Service Ajoute au service + + + Home + + + + + Theme + Thème + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5841,7 +5948,7 @@ Le contenu n'est pas de l'UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Supprime les données de suivi de l'utilisation des chants @@ -5866,7 +5973,7 @@ Le contenu n'est pas de l'UTF-8. Toutes les données demandées ont é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. Sélectionnez la date jusqu'à laquelle les données d'utilisation des chants devra être supprimé. Toutes les données enregistrées avant cette date seront définitivement supprimées. @@ -5874,22 +5981,22 @@ Le contenu n'est pas de l'UTF-8. 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 @@ -6168,210 +6275,223 @@ L'encodage permet un affichage correct des caractères. EasyWorship] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Éditeur de Chant - + &Title: &Titre : - + Alt&ernate title: Titre alt&ernatif : - + &Lyrics: &Paroles : - + &Verse order: Ordre des &paragraphes : - + Ed&it All Édite &tous - + Title && Lyrics Titre && paroles - + &Add to Song &Ajoute au Chant - + &Remove &Supprime - + &Manage Authors, Topics, Song Books &Gère les auteurs, sujets, Carnets de chants - + A&dd to Song A&joute au Chant - + R&emove &Supprime - + Book: Carnet de chants : - + Number: Numéro : - + Authors, Topics && Song Book Auteurs, sujets && Carnet de chants - + New &Theme Nouveau &thème - + Copyright Information Information du copyright - + Comments Commentaires - + Theme, Copyright Info && Comments Thème, copyright && commentaires - + Add Author Ajoute un auteur - + This author does not exist, do you want to add them? Cet auteur n'existe pas, voulez-vous l'ajouter ? - + This author is already in the list. Cet auteur ce trouve déjà dans la liste. - + 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. Vous n'avez pas sélectionné un auteur valide. Vous pouvez sélectionner un auteur dans la liste, ou entrer le nom d'un nouvel auteur et cliquez sur "Ajouter un auteur au Chant". - + Add Topic Ajoute un sujet - + This topic does not exist, do you want to add it? Ce sujet n'existe pas voulez-vous l'ajouter ? - + This topic is already in the list. Ce sujet ce trouve déjà dans la liste. - + 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. Vous n'avez pas sélectionné de sujet valide. Vous pouvez sélectionner un sujet dans la liste, ou entrer le nom d'un nouveau sujet et cliquez sur "Ajouter un sujet au Chant". - + You need to type in a song title. Vous devez entrer un titre pour ce chant. - + You need to type in at least one verse. Vous devez entrer au moins un paragraphe. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. L'ordre des paragraphes est invalide. Il n'y a pas de paragraphe correspondant à %s. Les entrées valides sont %s. - + Add Book Ajoute un Carnet de chants - + This song book does not exist, do you want to add it? Ce carnet de chants n'existe pas, voulez-vous l'ajouter ? - + You need to have an author for this song. Vous devez entrer un auteur pour ce chant. - + You need to type some text in to the verse. Vous devez entrer du texte dans ce paragraphe. - + Linked Audio Fichier audio attaché - + Add &File(s) Ajoute un(des) &fichier(s) - + Add &Media Ajoute un &média - + Remove &All Supprime &tout - + Open File(s) Ouvre un(des) fichier(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6618,12 +6738,12 @@ L'encodage permet un affichage correct des caractères. SongsPlugin.MediaFilesForm - + Select Media File(s) Sélectionne un(des) fichier(s) média - + Select one or more audio files from the list below, and click OK to import them into this song. Sélectionnez un ou plusieurs fichier depuis la liste ci-dessous, et cliquez sur le bouton OK pour les importer dans ce chant. @@ -6641,7 +6761,7 @@ L'encodage permet un affichage correct des caractères. Paroles - + CCLI License: Licence CCLI : @@ -6664,7 +6784,7 @@ L'encodage permet un affichage correct des caractères. Maintenir la liste des auteurs, sujets et carnets de chants. - + copy For song cloning copier @@ -6758,12 +6878,12 @@ L'encodage permet un affichage correct des caractères. SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: Les chants suivants ne peuvent être importé : @@ -6923,8 +7043,8 @@ L'encodage permet un affichage correct des caractères. - Add missing songs when opening service - Ajoute les chants manquant lors de l'ouverture d'un service + Import missing songs from service files + diff --git a/resources/i18n/hu.ts b/resources/i18n/hu.ts index b281cf028..1f0ec8a05 100644 --- a/resources/i18n/hu.ts +++ b/resources/i18n/hu.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Értesítő üzenet - + Alert &text: Értesítés &szövege: - + &New &Új - + &Save &Mentés - + Displ&ay &Megjelenítés - + Display && Cl&ose M&egjelenítés és bezárás @@ -79,7 +79,7 @@ Az értesítés szövege nincs megadva. Adj meg valamilyen szöveget az Új gombra való kattintás előtt. - + &Parameter: &Paraméter: @@ -119,32 +119,32 @@ Folytatható? AlertsPlugin.AlertsTab - + Font Betűkészlet - + Font name: Betűkészlet neve: - + Font color: Betűszín: - + Background color: Háttérszín: - + Font size: Betűméret: - + Alert timeout: Értesítés időtartama: @@ -661,42 +661,87 @@ Folytatható? :|v|V|versszak|versszakok;;-;;,|és;;vége + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Meg kell adni a biblia verziószámát. + + + + 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. + + + + Bible Exists + Biblia létezik + + + + 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. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Igehely hivatkozási hiba - + Web Bible cannot be used Online biblia nem használható - + Text Search is not available with Web Bibles. 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Jelenleg nincs telepített biblia. Kérlek, használd a bibliaimportáló tündért bibliák telepítéséhez. - + No Bibles Available Nincsenek elérhető bibliák - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. Egy függőleges vonal („|”) szolgál az elválasztásukra. Üresen hagyva az alapértelmezett érték áll helyre. - - - Preferred Bookname Language - Könyvnevek előnyben részesített nyelve - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Jelöld ki, hogy a bibliai könyvek milyen nyelven -jelenjenek meg a keresőben: - - - - Bible language - Biblia nyelve - - - - Application language - Alkalmazás nyelve - English Angol - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Több lehetőség: - Biblia nyelve – a nyelv, amellyel a bibliai könyvek be lettek importálva - Alkalmazás nyelve – a nyelv, amellyel az OpenLP megjelenik - Angol – az angol elnevezések használata + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Jelöld 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. Jelölj ki 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 @@ -935,6 +968,75 @@ jelenjenek meg a keresőben: Versek importálása… kész. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Licenc részletek + + + + Version name: + Verzió neve: + + + + Copyright: + Szerzői jog: + + + + Permissions: + Engedélyek: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ jelenjenek meg a keresőben: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bibliaimportáló tündér - + 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. - + Web Download Web letöltés - + Location: Hely: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Biblia: - + Download Options Letöltési beállítások - + Server: Szerver: - + Username: Felhasználói név: - + Password: Jelszó: - + Proxy Server (Optional) Proxy szerver (választható) - + License Details Licenc részletek - + Set up the Bible's license details. Állítsd be a biblia licenc részleteit. - + Version name: Verzió neve: - + Copyright: Szerzői jog: - + Please wait while your Bible is imported. Kérlek, várj, míg a biblia importálás alatt áll. - + 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. - + 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. - + You need to specify a version name for your Bible. Meg kell adni a biblia verziószámát. - + 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. - + Bible Exists Biblia létezik - + 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. - + Your Bible import failed. A biblia importálása nem sikerült. - + CSV File CSV fájl - + Bibleserver Bibleserver - + Permissions: Engedélyek: - + Bible file: Biblia fájl: - + Books file: Könyv fájl: - + Verses file: Versek fájl: - + openlp.org 1.x Bible Files openlp.org 1.x biblia fájlok - + Registering Bible... Biblia regisztrálása… - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Biblia regisztrálva. Megjegyzés: a versek csak kérésre lesznek letöltve @@ -1147,17 +1249,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + 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 megállapítani a bibliafordítás nyelvét. Kérem, válassz egy nyelvet az alábbi listából. - + Language: Nyelv: @@ -1173,90 +1275,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Gyors - + Find: Keresés: - + Book: Könyv: - + Chapter: Fejezet: - + Verse: Vers: - + From: Innentől: - + To: Idáig: - + Text Search Szöveg keresése - + Second: Második: - + Scripture Reference Igehely hivatkozás - + 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. - + 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? - + Bible not fully loaded. A biblia nem töltődött be teljesen. - + Information 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 megjelenni. Ezek a versek nem lesznek megtalálhatóak: %d. - + Search Scripture Reference... Igehely keresése... - + Search Text... Szöveg keresése... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Kódolás észlelése (ez eltarthat pár percig)… - + Importing %s %s... Importing <book name> <chapter>... Importálás: %s %s… @@ -1513,42 +1620,42 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor CustomPlugin.EditCustomForm - + Edit Custom Slides Speciális diasor szerkesztése - + &Title: &Cím: - + Add a new slide at bottom. Új dia hozzáadása alulra. - + Edit the selected slide. Kijelölt dia szerkesztése. - + Edit all the slides at once. Minden kijelölt dia szerkesztése egyszerre. - + Split a slide into two by inserting a slide splitter. Dia ketté vágása egy diaelválasztó beszúrásával. - + The&me: &Téma: - + &Credits: &Közreműködők: @@ -1563,12 +1670,12 @@ Megjegyzés: a webes bibliák versei csak kérésre lesznek letöltve és ekkor Meg kell adnod legalább egy diát - + Ed&it All &Összes szerkesztése - + Insert Slide Dia beszúrása @@ -1665,34 +1772,34 @@ 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) Hiányzó képek - + The following image(s) no longer exist: %s A következő képek nem léteznek: %s - + The following image(s) no longer exist: %s Do you want to add the other images anyway? A következő képek nem léteznek: %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. @@ -1700,19 +1807,19 @@ Szeretnél más képeket megadni? ImagesPlugin.ImageTab - + Background Color Háttérszín - + Default Color: Alapértelmezett szín: - - Provides border where image is not the correct dimensions for the screen when resized. - Keretet hoz létre a kép körül, ha a kép mérete nem passzol a képernyő arányához. + + Visible background for images with aspect ratio different to screen. + @@ -1837,22 +1944,22 @@ Szeretnél más képeket megadni? MediaPlugin.MediaTab - + Available Media Players Elérhető médialejátszók - + %s (unavailable) %s (elérhetetlen) - + Player Order Lejátszó sorrend - + Allow media player to be overridden Lejátszó felülírásának engedélyezése @@ -1882,17 +1989,17 @@ Frissítheti most az OpenLP? OpenLP.AboutForm - + Credits Közreműködők - + License Licenc - + Contribute Részvétel @@ -1902,17 +2009,17 @@ Frissítheti most az OpenLP? %s összeépítés - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. 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. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve. A további részleteket lásd alább. - + Project Lead %s @@ -2038,7 +2145,7 @@ Végső köszönet mert Ő tett minket szabaddá. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2055,7 +2162,7 @@ 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. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Szerzői jog © 2004-2012 %s @@ -2065,62 +2172,62 @@ Részleges szerzői jog © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Felhasználói felület beállításai - + Number of recent files to display: 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 - + Double-click to send items straight to live 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 - + Enable application exit confirmation Kilépési megerősítés engedélyezése - + Mouse Cursor Egérmutató - + Hide mouse cursor when over display window Egérmutató elrejtése a vetítési képernyő felett - + Default Image Alapértelmezett kép - + Background color: Háttérszín: - + Image file: Kép fájl: - + Open File Fájl megnyitása @@ -2130,124 +2237,124 @@ Részleges szerzői jog © 2004-2012 %s Haladó - + Preview items when clicked in Media Manager Elem előnézete a médiakezelőben való kattintáskor - + Click to select a color. Kattintás a szín kijelöléséhez. - + Browse for an image file to display. Tallózd be a megjelenítendő képfájlt. - + Revert to the default OpenLP logo. Az eredeti OpenLP logó visszaállítása. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Sorrend %Y-%m-%d %H-%M - + Default Service Name Alapértelmezett szolgálati sorrend neve - + Enable default service name Alapértelmezett szolgálati sorrend név - + Date and Time: Dátum és idő: - + Monday Hétfő - + Tuesday Kedd - + Wednesday Szerda - + Thurdsday Csütörtök - + Friday Péntek - + Saturday Szombat - + Sunday Vasárnap - + Now Most - + Time when usual service starts. A szolgálat szokásos kezdete. - + Name: Név: - + Consult the OpenLP manual for usage. Segítségéért tekints meg az OpenLP kézikönyvet. - + Revert to the default service name "%s". Alapértelmezett név helyreállítása: „%s”. - + Example: Példa: - + X11 X11 - + Bypass X11 Window Manager X11 ablakkezelő kikerülése - + Syntax error. Szintaktikai hiba. @@ -2255,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Hiba történt - + 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. - + Send E-Mail E-mail küldése - + Save to File Mentés fájlba - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Írd le mit tettél, ami a hibához vezetett (minimum 20 karakter) - + Attach File Fájl csatolása @@ -2593,79 +2700,75 @@ Version: %s Custom Slides Speciális diák + + + Finish + Befejezés + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Nem sikerült internetkapcsolatot találni. Az Első indítás tündérnek internetkapcsolatra van szüksége ahhoz, hogy a példa dalokat, bibliákat és témákat lehessen letölteni. A Befejezés gombra való kattintással az OpenLP alapértelmezett beállításokkal és a példaadatok nélkül indul el. - -Az Első indítás tündér újbóli indításához és a példaadatok későbbi betöltéséhez ellenőrizd az internetkapcsolatot és futtasd újra ezt a tündért az OpenLP Eszközök > Első indítás tündér menüpontjával. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -A tündér teljes leállításához (és az OpenLP további megkerüléséhez) kattints a Mégse gombra. - - - - Finish - Befejezés +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Formázó címkék beállítása - + 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 @@ -2909,40 +3012,10 @@ A tündér teljes leállításához (és az OpenLP további megkerüléséhez) k Leállított háttérzene indítása - + Service Item Slide Limits Sorrendben lévő diák határolása - - - &End Slide - &Dia vége - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - A fel és le gombok vezérlése megáll a sorrendben lévő elemek tetején és alján. - - - - &Wrap Slide - &Körbe - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - A fel és le gombok vezérlése körbeforog a sorrendben lévő elemek tetején és alján. - - - - &Next Item - &Következő - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - A fel/le nyilak vezérlése továbbugrik a sorrendben lévő elem tetején és alján az előző, ill. következő elemre. - Override display position: @@ -2953,6 +3026,26 @@ A tündér teljes leállításához (és az OpenLP további megkerüléséhez) k Repeat track list Számok ismétlése + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2978,287 +3071,287 @@ A tündér teljes leállításához (és az OpenLP további megkerüléséhez) k 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ő - + Service Manager Sorrendkezelő - + Theme Manager Témakezelő - + &New &Új - + &Open Meg&nyitás - + Open an existing service. 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. - + &Preview Panel &Előnézet panel - + 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 - + &Online Help &Online súgó - + &Web Site &Weboldal - + Use the system language, if available. 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 - + Set the view mode to Live. 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/. @@ -3267,22 +3360,22 @@ You can download the latest version from http://openlp.org/. A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be. - + OpenLP Version Updated OpenLP verziófrissítés - + OpenLP Main Display Blanked 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 - + Default Theme: %s Alapértelmezett téma: %s @@ -3293,82 +3386,82 @@ A legfrissebb verzió a http://openlp.org/ oldalról szerezhető be.Magyar - + Configure &Shortcuts... &Gyorsbillentyűk beállítása… - + Close OpenLP OpenLP bezárása - + Are you sure you want to close OpenLP? Valóban bezárható az OpenLP? - + 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. - + &Autodetect &Automatikus felismerés - + 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. - + Print the current service. Az aktuális sorrend nyomtatása. - + &Recent Files &Legutóbbi fájlok - + 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. @@ -3377,43 +3470,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and 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. - + 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. - + Configure &Formatting Tags... Formázó &címkék beállítása… - + Export OpenLP settings to a specified *.config file OpenLP beállításainak mentése egy meghatározott *.config fájlba - + Settings Beállítások - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Az OpenLP beállításainak betöltése egy előzőleg ezen vagy egy másik gépen exportált meghatározott *.config fájlból - + Import settings? Beállítások betöltése? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3426,32 +3519,32 @@ A beállítások betöltése tartós változásokat okoz a OpenLP jelenlegi beá Hibás beállítások betöltése rendellenes működést okozhat, vagy akár az OpenLP abnormális megszakadását is. - + Open File Fájl megnyitása - + OpenLP Export Settings Files (*.conf) OpenLP beállító export fájlok (*.conf) - + Import settings Importálási beállítások - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. Az OpenLP most leáll. Az importált beállítások az OpenLP következő indításakor lépnek érvénybe. - + Export Settings File Beállító export fájl - + OpenLP Export Settings File (*.conf) OpenLP beállító export fájlok (*.conf) @@ -3485,7 +3578,7 @@ Adatbázis: %s OpenLP.MediaManagerItem - + No Items Selected Nincs kijelölt elem @@ -3573,27 +3666,27 @@ Az utótag nem támogatott OpenLP.PluginForm - + Plugin List Bővítménylista - + Plugin Details Bővítmény részletei - + Status: Állapot: - + Active Aktív - + Inactive Inaktív @@ -3616,12 +3709,12 @@ Az utótag nem támogatott OpenLP.PrintServiceDialog - + Fit Page Oldal kitöltése - + Fit Width Szélesség kitöltése @@ -3629,7 +3722,7 @@ Az utótag nem támogatott OpenLP.PrintServiceForm - + Options Beállítások @@ -3644,47 +3737,47 @@ Az utótag nem támogatott Másolás HTML-ként - + Zoom In Nagyítás - + Zoom Out Kicsinyítés - + Zoom Original Eredeti nagyítás - + Other Options További beállítások - + Include slide text if available Dia szövegének beillesztése, ha elérhető - + Include service item notes Sorrend elem megjegyzéseinek beillesztése - + Include play length of media items Sorrend elem lejátszási hosszának beillesztése - + Add page break before each text item Oldaltörés hozzáadása minden szöveges elem elé - + Service Sheet Szolgálati adatlap @@ -3694,12 +3787,12 @@ Az utótag nem támogatott Nyomtatás - + Title: Cím: - + Custom Footer Text: Egyedi lábjegyzet szöveg: @@ -3733,7 +3826,7 @@ Az utótag nem támogatott OpenLP.ServiceItemEditForm - + Reorder Service Item Sorrend elemek újrarendezése @@ -3741,189 +3834,189 @@ Az utótag nem támogatott OpenLP.ServiceManager - + Move to &top Mozgatás &felülre - + Move item to the top of the service. Elem mozgatása a sorrend elejére. - + Move &up Mozgatás f&eljebb - + Move item up one position in the service. Elem mozgatása a sorrendben eggyel feljebb. - + Move &down Mozgatás &lejjebb - + Move item down one position in the service. Elem mozgatása a sorrendben eggyel lejjebb. - + Move to &bottom Mozgatás &alulra - + Move item to the end of the service. Elem mozgatása a sorrend végére. - + &Delete From Service &Törlés a sorrendből - + Delete the selected item from the service. Kijelölt elem törlése a sorrendből. - + &Add New Item Új elem &hozzáadása - + &Add to Selected Item &Hozzáadás a kijelölt elemhez - + &Edit Item &Elem szerkesztése - + &Reorder Item Elem újra&rendezése - + &Notes &Jegyzetek - + &Change Item Theme 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ő - + Your item cannot be displayed as there is no handler to display it Az elemet nem lehet megjeleníteni, mert nincs kezelő, amely megjelenítené - + Your item cannot be displayed as the plugin required to display it is missing or inactive Az elemet nem lehet megjeleníteni, mert a bővítmény, amely kezelné, hiányzik vagy inaktív - + &Expand all Mind &kibontása - + Expand all the service items. Minden sorrend elem kibontása. - + &Collapse all Mind össze&csukása - + Collapse all the service items. Minden sorrend elem összecsukása. - + Open File Fájl megnyitása - + Moves the selection down the window. A kiválasztás lejjebb mozgatja az ablakot. - + Move up Mozgatás feljebb - + Moves the selection up the window. A kiválasztás feljebb mozgatja az ablakot. - + Go Live Élő adásba - + Send the selected item to Live. A kiválasztott elem élő adásba küldése. - + &Start Time &Kezdő időpont - + Show &Preview &Előnézet megjelenítése - + Show &Live Élő &adás megjelenítése - + 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? @@ -3943,72 +4036,72 @@ A tartalom kódolása nem UTF-8. Lejátszási idő: - + Untitled Service Névtelen szolgálat - + 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 - + Load an existing service. Egy meglévő szolgálati sorrend betöltése. - + Save this service. Sorrend mentése. - + Select a theme for the service. 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. - + Service File Missing Hiányzó sorrend fájl - + Slide theme Dia téma - + Notes Jegyzetek - + Edit Szerkesztés - + Service copy only A sorrend csak másolható @@ -4016,7 +4109,7 @@ A tartalom kódolása nem UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Sorrend elem jegyzetek @@ -4032,12 +4125,12 @@ A tartalom kódolása nem UTF-8. OpenLP.ShortcutListDialog - + Action Parancs - + Shortcut Gyorsbillentyű @@ -4052,32 +4145,32 @@ A tartalom kódolása nem UTF-8. A „%s” gyorsbillentyű már foglalt. - + Alternate Alternatív - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Jelölj ki egy parancsot és kattints egyenként az egyik alul található gombra az elsődleges vagy alternatív gyorsbillentyű elfogásához. - + Default Alapértelmezett - + Custom Egyéni - + Capture shortcut. Gyorsbillentyű elfogása. - + Restore the default shortcut of this action. Az eredeti gyorsbillentyű visszaállítása. @@ -4092,7 +4185,7 @@ A tartalom kódolása nem UTF-8. Valóban minden gyorsbillentyű visszaállítandó az alapértelmezettjére? - + Configure Shortcuts Gyorsbillentyűk beállítása @@ -4259,11 +4352,6 @@ A tartalom kódolása nem UTF-8. Background Audio Háttérzene - - - Next Track - Következő szám - Go to next audio track. @@ -4346,17 +4434,17 @@ A tartalom kódolása nem UTF-8. A médiaelem kezdő időpontja későbbre van állítva, mint a befejezése - + Theme Layout Téma elrendezése - + The blue box shows the main area. Kék keret jelzi a fő tartalmat. - + The red box shows the footer. Vörös keret jelzi a láblécet. @@ -4457,62 +4545,62 @@ A tartalom kódolása nem UTF-8. Beállítás &globális alapértelmezetté - + %s (default) %s (alapértelmezett) - + You must select a theme to edit. Ki kell jelölni egy témát a szerkesztéshez. - + You are unable to delete the default theme. Az alapértelmezett témát nem lehet törölni. - + Theme %s is used in the %s plugin. A(z) %s témát a(z) %s bővítmény használja. - + You have not selected a theme. Nincs kijelölve egy téma sem. - + Save Theme - (%s) Téma mentése – (%s) - + Theme Exported Téma exportálva - + Your theme has been successfully exported. A téma sikeresen exportálásra került. - + Theme Export Failed A téma exportálása nem sikerült - + Your theme could not be exported due to an error. A témát nem sikerült exportálni egy hiba miatt. - + Select Theme Import File Importálandó téma fájl kijelölése - + File is not a valid theme. Nem érvényes témafájl. @@ -4532,58 +4620,58 @@ A tartalom kódolása nem UTF-8. Téma e&xportálása - + You must select a theme to rename. Ki kell jelölni egy témát az átnevezéséhez. - + Rename Confirmation Átnevezési megerősítés - + Rename %s theme? A téma átnevezhető: %s? - + You must select a theme to delete. Ki kell jelölni egy témát a törléshez. - + Delete Confirmation Törlés megerősítése - + Delete %s theme? Törölhető ez a téma: %s? - + Validation Error Érvényességi hiba - + A theme with this name already exists. Ilyen fájlnéven már létezik egy téma. - + OpenLP Themes (*.theme *.otz) OpenLP témák (*.theme *.otz) - + Copy of %s Copy of <theme name> %s másolata - + Theme Already Exists A téma már létezik @@ -4591,222 +4679,222 @@ A tartalom kódolása nem UTF-8. 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 - + 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 - + Define the font and display characteristics for the Display text A fő szöveg betűkészlete és megjelenési tulajdonságai - + Font: Betűkészlet: - + Size: Méret: - + Line Spacing: Sorköz: - + &Outline: &Körvonal: - + &Shadow: &Árnyék: - + Bold Félkövér - + Italic 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 - + 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. - + &Main Area &Fő szöveg - + &Use default location &Alapértelmezett helyen - + X position: X pozíció: - + px 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 - + 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 - + Theme name: Téma neve: @@ -4816,47 +4904,47 @@ A tartalom kódolása nem UTF-8. 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. - + Transitions: Átmenetek: - + &Footer Area &Lábléc - + Starting color: Kezdő szín: - + Ending color: Befejező szín: - + Background color: Háttérszín: - + Justify Sorkizárt - + Layout Preview Elrendezés előnézete - + Transparent Átlátszó @@ -4864,42 +4952,42 @@ A tartalom kódolása nem UTF-8. OpenLP.ThemesTab - + Global Theme Globális téma - + Theme Level Téma szint - + S&ong Level Dal &szint - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Minden dalra az adatbázisban tárolt téma alkalmazása. Ha egy dalhoz nincs saját téma beállítva, akkor a szolgálati sorrendhez beállított alkalmazása. Ha a sorrendhez sincs téma beállítva, akkor a globális téma alkalmazása. - + &Service Level Szolgálati sorrend &szint - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. A szolgálati sorrendhez beállított téma alkalmazása, vagyis az egyes dalokhoz megadott témák felülírása. Ha a szolgálati sorrendhez nincs téma beállítva, akkor a globális téma alkalmazása. - + &Global Level &Globális szint - + Use the global theme, overriding any themes associated with either the service or the songs. A globális téma alkalmazása, vagyis a szolgálati sorrendhez, ill. a dalokhoz beállított témák felülírása. @@ -5145,22 +5233,22 @@ A tartalom kódolása nem UTF-8. Verzió - + Delete the selected item. Kiválasztott elem törlése. - + Move selection up one position. Kiválasztás eggyel feljebb helyezése. - + Move selection down one position. Kiválasztás eggyel lejjebb helyezése. - + &Vertical Align: &Függőleges igazítás: @@ -5226,7 +5314,7 @@ A tartalom kódolása nem UTF-8. Ki kell választani legalább egy %s fájlt az importáláshoz. - + Welcome to the Bible Import Wizard Üdvözlet a bibliaimportáló tündérben @@ -5409,11 +5497,6 @@ A tartalom kódolása nem UTF-8. Reset live background. Élő adás hátterének visszaállítása. - - - &Split - &Szétválasztás - Split a slide into two only if it does not fit on the screen as one slide. @@ -5460,29 +5543,34 @@ A tartalom kódolása nem UTF-8. Search bar place holder text Témák keresése... + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 és %2 - + %1, and %2 Locale list separator: end %1, és %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5557,17 +5645,17 @@ A tartalom kódolása nem UTF-8. Bemutató ezzel: - + File Exists A fájl létezik - + A presentation with that filename already exists. Ilyen fájlnéven már létezik egy bemutató. - + This type of presentation is not supported. Ez a bemutató típus nem támogatott. @@ -5577,17 +5665,17 @@ A tartalom kódolása nem UTF-8. Bemutatók (%s) - + Missing Presentation Hiányzó bemutató - + The Presentation %s no longer exists. A bemutató már nem létezik: %s. - + The Presentation %s is incomplete, please reload. A bemutató hiányos, újra kell tölteni: %s. @@ -5668,11 +5756,6 @@ A tartalom kódolása nem UTF-8. Search Keresés - - - Back - Vissza - Refresh @@ -5684,50 +5767,70 @@ A tartalom kódolása nem UTF-8. Elsötétítés - + Show Vetítés - + Prev Előző - + Next Következő - + Text Szöveg - + Show Alert Értesítés megjelenítése - + Go Live Élő adásba - + No Results Nincs találat - + Options Beállítások - + Add to Service Hozzáadás a sorrendhez + + + Home + + + + + Theme + Téma + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5861,7 +5964,7 @@ A tartalom kódolása nem UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Dalstatisztika adatok törlése @@ -5886,7 +5989,7 @@ A tartalom kódolása nem UTF-8. 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. @@ -5894,22 +5997,22 @@ A tartalom kódolása nem UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Dalstatisztika kicsomagolása - + Select Date Range Időintervallum kijelölése - + to - + Report Location Helyszín jelentése @@ -6187,210 +6290,223 @@ A kódlap felelős a karakterek helyes megjelenítéséért. EasyWorshipből kerültek importálásra] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Dalszerkesztő - + &Title: &Cím: - + Alt&ernate title: &Alternatív cím: - + &Lyrics: &Dalszöveg: - + &Verse order: Versszak &sorrend: - + Ed&it All &Összes szerkesztése - + Title && Lyrics Cím és szöveg - + &Add to Song &Hozzáadás - + &Remove &Eltávolítás - + &Manage Authors, Topics, Song Books Szerző, témakör, könyv &kezelése - + A&dd to Song H&ozzáadás - + R&emove &Eltávolítás - + Book: Könyv: - + Number: Szám: - + Authors, Topics && Song Book Szerző, témakör és könyv - + New &Theme Új &téma - + Copyright Information Szerzői jogi információ - + Comments Megjegyzések - + Theme, Copyright Info && Comments Téma, © és megjegyzés - + Add Author 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? - + This author is already in the list. 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. - + Add Topic Témakör hozzáadása - + This topic does not exist, do you want to add it? Ez a témakör még nem létezik, szeretnéd hozzáadni? - + This topic is already in the list. A témakör már benne van a listában. - + 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 gombra a témakör megjelöléséhez. - + You need to type in a song title. Add meg a dal címét. - + You need to type in at least one verse. Legalább egy versszakot meg kell adnod. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. A versszaksorrend hibás. Nincs ilyen versszak: %s. Az érvényes elemek ezek: %s. - + Add Book Könyv hozzáadása - + This song book does not exist, do you want to add it? Ez az énekeskönyv még nem létezik, szeretnéd hozzáadni a listához? - + You need to have an author for this song. Egy szerzőt meg kell adnod ehhez a dalhoz. - + You need to type some text in to the verse. Meg kell adnod a versszak szövegét. - + Linked Audio Fájl - + Add &File(s) Fájl &hozzáadása - + Add &Media &Médiafájl hozzáadása - + Remove &All Fájlok &eltávolítása - + Open File(s) Fájlok megnyitása - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Figyelmeztetés:</strong> Nincs minden verszak alkalmazva. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. A versszaksorrend hibás. Nincsenek ilyen versszakok: %s. Az érvényes elemek ezek: %s. @@ -6637,12 +6753,12 @@ EasyWorshipből kerültek importálásra] SongsPlugin.MediaFilesForm - + Select Media File(s) Médiafájlok kijelölése - + Select one or more audio files from the list below, and click OK to import them into this song. Jelölj ki egy vagy több hangfájlt az alábbi listából és kattints az OK gombra a dalba való importálásukhoz. @@ -6660,7 +6776,7 @@ EasyWorshipből kerültek importálásra] Dalszöveg - + CCLI License: CCLI licenc: @@ -6682,7 +6798,7 @@ EasyWorshipből kerültek importálásra] Szerzők, témakörök, könyvek listájának kezelése. - + copy For song cloning másolás @@ -6776,12 +6892,12 @@ EasyWorshipből kerültek importálásra] SongsPlugin.SongImport - + copyright szerzői jog - + The following songs could not be imported: A következő dalok nem importálhatók: @@ -6941,8 +7057,8 @@ EasyWorshipből kerültek importálásra] - Add missing songs when opening service - Hiányzó dalok hozzáadása a sorrend megnyitásakor + Import missing songs from service files + diff --git a/resources/i18n/id.ts b/resources/i18n/id.ts index f7cd4c93c..6f69eb5fe 100644 --- a/resources/i18n/id.ts +++ b/resources/i18n/id.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Pesan Peringatan - + Alert &text: Peringatan &teks: - + &New &Baru - + &Save &Simpan - + Displ&ay &Tampilan - + Display && Cl&ose Tampilkan dan &Tutup @@ -79,7 +79,7 @@ Teks isi peringatan belum dispesifikasi. Harap masukkan teks sebelum memilih Baru. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Tetap lanjutkan? AlertsPlugin.AlertsTab - + Font Fon - + Font name: Nama fon: - + Font color: Warna fon: - + Background color: Warna latar: - + Font size: Ukuran fon: - + Alert timeout: Waktu-habis untuk peringatan: @@ -661,42 +661,87 @@ Tetap lanjutkan? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Anda harus menentukan nama versi untuk Alkitab Anda. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Anda harus memberikan hak cipta untuk Alkitab Anda. Alkitab di Public Domain harus ditandai sedemikian. + + + + Bible Exists + Alkitab Sudah Ada + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Alkitab sudah ada. Silakan impor Alkitab lain atau hapus yang sudah ada. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Referensi Kitab Suci Galat - + Web Bible cannot be used Alkitab Web tidak dapat digunakan - + Text Search is not available with Web Bibles. Pencarian teks tidak dapat dilakukan untuk Alkitab Web. - + 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. Anda tidak memasukkan kata kunci pencarian. Anda dapat memisahkan kata kunci dengan spasi untuk mencari seluruh kata kunci dan Anda dapat memisahkan kata kunci dengan koma untuk mencari salah satu kata kunci. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. TIdak ada Alkitab terpasang. Harap gunakan Wisaya Impor untuk memasang sebuah atau beberapa Alkitab. - + No Bibles Available Alkitab tidak tersedia - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -811,80 +856,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English Inggris - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name Pilih nama Kitab - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Buku ini tidak dapat dicocokkan dengan sistem. Mohon pilih nama buku tersebut dalam bahasa Inggris. - + Current name: Nama sekarang: - + Corresponding name: Nama yang cocok: - + Show Books From Tampilkan buku dari; - + Old Testament Perjanjian Lama - + New Testament Perjanjian Baru - + Apocrypha Apokripa @@ -916,6 +953,75 @@ Bible should be displayed in the Bible search: Mengimpor ayat... selesai. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Rincian Lisensi + + + + Version name: + Nama versi: + + + + Copyright: + Hak cipta: + + + + Permissions: + Izin: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + Inggris + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -958,167 +1064,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Wisaya Impor Alkitab - + 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. Wisaya ini akan membantu Anda mengimpor Alkitab dari berbagai format. Klik tombol lanjut di bawah untuk memulai proses dengan memilih format untuk diimpor. - + Web Download Unduh dari web - + Location: Lokasi: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Alkitab: - + Download Options Opsi Unduhan - + Server: Server: - + Username: Nama Pengguna: - + Password: Sandi-lewat: - + Proxy Server (Optional) Proxy Server (Opsional) - + License Details Rincian Lisensi - + Set up the Bible's license details. Memasang rincian lisensi Alkitab. - + Version name: Nama versi: - + Copyright: Hak cipta: - + Please wait while your Bible is imported. Mohon tunggu selama Alkitab diimpor. - + You need to specify a file with books of the Bible to use in the import. Anda harus menentukan berkas yang berisi nama kitab dalam Alkitab untuk digunakan dalam import. - + You need to specify a file of Bible verses to import. Anda harus menentukan berkas Alkitab untuk diimpor. - + You need to specify a version name for your Bible. Anda harus menentukan nama versi untuk Alkitab Anda. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Anda harus memberikan hak cipta untuk Alkitab Anda. Alkitab di Public Domain harus ditandai sedemikian. - + Bible Exists Alkitab Sudah Ada - + This Bible already exists. Please import a different Bible or first delete the existing one. Alkitab sudah ada. Silakan impor Alkitab lain atau hapus yang sudah ada. - + Your Bible import failed. Impor Alkitab gagal. - + CSV File Berkas CSV - + Bibleserver Server Alkitab - + Permissions: Izin: - + Bible file: Berkas Alkitab: - + Books file: Berkas kitab: - + Verses file: Berkas ayat: - + openlp.org 1.x Bible Files Ayat Alkitab openlp.org 1.x - + Registering Bible... Mendaftarkan Alkitab... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Alkitab terdaftar. Mohon camkan, ayat akan diunduh saat @@ -1128,17 +1234,17 @@ dibutuhkan dan membutuhkan koneksi internet. BiblesPlugin.LanguageDialog - + Select Language Pilih Bahasa - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP tidak dapat menentukan bahasa untuk terjemahan Alkitab ini. Mohon pilih bahasa dari daftar di bawah. - + Language: Bahasa: @@ -1154,90 +1260,95 @@ dibutuhkan dan membutuhkan koneksi internet. BiblesPlugin.MediaItem - + Quick Cepat - + Find: Temukan: - + Book: Kitab: - + Chapter: Pasal: - + Verse: Ayat: - + From: Dari: - + To: Kepada: - + Text Search Pencarian Teks - + Second: Kedua: - + Scripture Reference Referensi Alkitab - + Toggle to keep or clear the previous results. Ganti untuk menyimpan atau menghapus hasil sebelumnya. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1251,12 +1362,12 @@ dibutuhkan dan membutuhkan koneksi internet. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Mendeteksi pengodean (mungkin butuh beberapa menit)... - + Importing %s %s... Importing <book name> <chapter>... Mengimpor %s %s... @@ -1494,42 +1605,42 @@ Perhatikan bahwa ayat dari Alkitab Web akan diunduh saat diminta dan sambungan i CustomPlugin.EditCustomForm - + Edit Custom Slides Sunting Tampilan Suai - + &Title: &Judul: - + Add a new slide at bottom. Tambahkan slide baru di bawah. - + Edit the selected slide. Sunting slide terpilih. - + Edit all the slides at once. Sunting seluruh slide bersamaan. - + Split a slide into two by inserting a slide splitter. Pecah slide menjadi dua menggunakan pemecah slide. - + The&me: Te&ma: - + &Credits: &Kredit: @@ -1544,12 +1655,12 @@ Perhatikan bahwa ayat dari Alkitab Web akan diunduh saat diminta dan sambungan i Anda harus menambah paling sedikit satu salindia - + Ed&it All Sun&ting Semua - + Insert Slide Tampilan Suai @@ -1646,34 +1757,34 @@ Perhatikan bahwa ayat dari Alkitab Web akan diunduh saat diminta dan sambungan 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. Tidak ada butir tampilan untuk di-amend. @@ -1681,19 +1792,19 @@ Ingin tetap menambah gambar lain? ImagesPlugin.ImageTab - + Background Color Warna Latar - + Default Color: Warna Bawaan: - - Provides border where image is not the correct dimensions for the screen when resized. - Memberi batas untuk gambar yang berbeda dimensi saat layar diubah-ukur. + + Visible background for images with aspect ratio different to screen. + @@ -1818,22 +1929,22 @@ Ingin tetap menambah gambar lain? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1863,17 +1974,17 @@ Haruskah OpenLP menaiktingkatkan sekarang? OpenLP.AboutForm - + Credits Kredit - + License Lisensi - + Contribute Berkontribusi @@ -1883,17 +1994,17 @@ Haruskah OpenLP menaiktingkatkan sekarang? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Program ini adalah perangkat lunak gratis; Anda dapat meredistribusikannya dan/atau memodifikasinya di bawah syarat-syarat GNU General Public License yang dikeluarkan Free Software Foundation; Lisensi versi 2. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Program ini didistribusikan dengan harapan dapat berguna, namun TANPA GARANSI; bahkan tanpa garansi implisit dalam PEMBELIAN maupun KETEPATAN TUJUAN TERTENTU. Lihat di bawah untuk detail lengkap. - + Project Lead %s @@ -2019,7 +2130,7 @@ Kredit Akhir Dia telah membebaskan kita. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2036,7 +2147,7 @@ Cari tahu lebih banyak lagi tentang OpenLP: http://openlp.org/ OpenLP dibuat dan dipelihara oleh relawan. Jika Anda ingin melihat lebih banyak piranti lunak Kristen dikerjakan, mohon pertimbangkan untuk berkontribusi melalui tombol di bawah ini. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -2045,62 +2156,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Pengaturan Antarmuka - + Number of recent files to display: Jumlah berkas anyar untuk ditampilkan: - + Remember active media manager tab on startup Ingat tab media manager yang aktif saat mulai - + Double-click to send items straight to live Klik-ganda untuk menayangkan butir terpilih - + Expand new service items on creation Tampilkan benda service saat dibuat - + Enable application exit confirmation Gunakan konfirmasi aplikasi keluar - + Mouse Cursor Kursor Tetikus - + Hide mouse cursor when over display window Sembunyikan kursor tetikus saat melewati jendela tampilan - + Default Image Gambar bawaan - + Background color: Warna latar: - + Image file: Berkas gambar: - + Open File Buka Berkas @@ -2110,124 +2221,124 @@ Portions copyright © 2004-2012 %s Lanjutan - + Preview items when clicked in Media Manager Pratayang barang saat diklik pada Media Manager - + Click to select a color. Klik untuk memilih warna. - + Browse for an image file to display. Ramban sebuah gambar untuk ditayangkan. - + Revert to the default OpenLP logo. Balikkan ke logo OpenLP bawaan. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2235,34 +2346,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Galat Terjadi - + 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. Aduh! OpenLP mengalami masalah yang tidak dapat diatasi. Teks di kotak bawah mengandung informasi yang membantu pengembang OpenLP, jadi tolong surelkan ini ke bugs@openlp.org, bersama dengan deskripsi detail apa yang Anda lakukan saat masalah terjadi. - + Send E-Mail Kirim Surel - + Save to File Simpan menjadi Berkas - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Mohon masukkan deskripsi apa yang Anda lakukan saat galat terjadi (Paling sedikit 20 karakter) - + Attach File Lampirkan Berkas @@ -2573,79 +2684,75 @@ Mohon gunakan bahasa Inggris untuk laporan kutu. Custom Slides Salindia Suai + + + Finish + Selesai + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Sambungan internet tidak ditemukan. Wisaya Kali Pertama butuh sambungan internet untuk mengunduh contoh lagu, Alkitab, dan tema. Tekan tombol Selesai untuk memulai OpenLP dengan pengaturan bawaan dan tanpa contoh data. - -Untuk menjalankan lagi Wisaya Kali Pertama dan mengimpor contoh data ini lain kali, periksa sambungan internet dan jalankan wisaya ini melalui "Kakas/Jalankan Wisaya Pertama Kali" dari OpenLP. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Untuk membatalkan Wisaya Pertama Kali sepenuhnya (dan tidak memulai OpenLP), tekan Batal. - - - - Finish - Selesai +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Konfigurasi Label Pemformatan - + Edit Selection Sunting pilihan - + Save Simpan - + Description Deskripsi - + Tag Label - + Start tag Label awal - + End tag Label akhir - + Tag Id ID Label - + Start HTML Mulai HTML - + End HTML Akhiri HTML @@ -2889,40 +2996,10 @@ Untuk membatalkan Wisaya Pertama Kali sepenuhnya (dan tidak memulai OpenLP), tek Mulai audio latar terjeda - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2933,6 +3010,26 @@ Untuk membatalkan Wisaya Pertama Kali sepenuhnya (dan tidak memulai OpenLP), tek Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2958,287 +3055,287 @@ Untuk membatalkan Wisaya Pertama Kali sepenuhnya (dan tidak memulai OpenLP), tek OpenLP.MainWindow - + &File &Berkas - + &Import &Impor - + &Export &Ekspor - + &View &Lihat - + M&ode M&ode - + &Tools &Kakas - + &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/. @@ -3247,22 +3344,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 @@ -3273,82 +3370,82 @@ 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? - + 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. - + &Autodetect &Autodeteksi - + Update Theme Images Perbarui Gambar Tema - + Update the preview images for all themes. Perbarui gambar pratinjau untuk semua tema. - + Print the current service. Cetak layanan saat ini. - + &Recent Files Be&rkas Baru-baru Ini - + L&ock Panels Kunci Pane&l - + Prevent the panels being moved. Hindari panel digerakkan. - + Re-run First Time Wizard Jalankan Wisaya Kali Pertama - + Re-run the First Time Wizard, importing songs, Bibles and themes. Jalankan Wisaya Kali Pertama, mengimpor lagu, Alkitab, dan tema. - + Re-run First Time Wizard? Jalankan Wisaya Kali Pertama? - + 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. @@ -3357,43 +3454,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Menjalankan wisaya ini mungkin akan mengubah konfigurasi OpenLP saat ini dan mungkin menambah lagu ke dalam daftar lagu dan mengubah tema bawaan. - + Clear List Clear List of recent files Bersihkan Daftar - + Clear the list of recent files. Bersihkan daftar berkas baru-baru ini. - + Configure &Formatting Tags... Konfigurasi Label Pem&formatan... - + Export OpenLP settings to a specified *.config file Ekspor pengaturan OpenLP ke dalam sebuah berkas *.config - + Settings Pengaturan - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Impor pengaturan OpenLP dari sebuah berkas *.config yang telah diekspor - + Import settings? Impor pengaturan? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3402,32 +3499,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3457,7 +3554,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected Tidak Ada Barang yang Terpilih @@ -3544,27 +3641,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List Daftar Plugin - + Plugin Details Detail Plugin - + Status: Status: - + Active Aktif - + Inactive Tidak Aktif @@ -3587,12 +3684,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page Samakan dengan Halaman - + Fit Width Samakan dengan Lebar @@ -3600,7 +3697,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options Pilihan @@ -3615,47 +3712,47 @@ Suffix not supported Salin sebagai HTML - + Zoom In Perbesar - + Zoom Out Perkecil - + Zoom Original Kembalikan Ukuran - + Other Options Pilihan Lain - + Include slide text if available Masukkan teks dari salindia jika tersedia - + Include service item notes Masukkan catatan butir layanan - + Include play length of media items Masukkan lama putar butir media - + Add page break before each text item Tambahkan pemisan sebelum tiap butir teks - + Service Sheet @@ -3665,12 +3762,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3704,7 +3801,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item Atur Ulang Butir Layanan @@ -3712,189 +3809,189 @@ Suffix not supported OpenLP.ServiceManager - + Move to &top Pindahkan ke punc&ak - + Move item to the top of the service. Pindahkan butir ke puncak daftar layanan. - + Move &up Pindahkan ke a&tas - + Move item up one position in the service. Naikkan butir satu posisi pada daftar layanan. - + Move &down Pindahkan ke &bawah - + Move item down one position in the service. Turunkan butir satu posisi pada daftar layanan. - + Move to &bottom Pindahkan ke &kaki - + Move item to the end of the service. Pindahkan butir ke kaki daftar layanan. - + &Delete From Service Hapus &dari Layanan - + Delete the selected item from the service. Hapus butir terpilih dari layanan. - + &Add New Item T&ambahkan Butir Baru - + &Add to Selected Item T&ambahkan ke Butir Terpilih - + &Edit Item &Sunting Butir - + &Reorder Item Atu&r Ulang Butir - + &Notes Catata&n - + &Change Item Theme &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. - + Missing Display Handler Penangan Tayang hilang - + Your item cannot be displayed as there is no handler to display it Butir tidak dapat ditayangkan karena tidak ada penangan untuk menayangkannya - + Your item cannot be displayed as the plugin required to display it is missing or inactive Butir ini tidak dapat ditampilkan karena plugin yang dibutuhkan untuk menampilkannya hilang atau tidak aktif - + &Expand all &Kembangkan semua - + Expand all the service items. Kembangkan seluruh butir layanan. - + &Collapse all K&empiskan semua - + Collapse all the service items. Kempiskan seluruh butir layanan. - + Open File Buka Berkas - + Moves the selection down the window. Gerakkan pilihan ke bawah. - + Move up Pindah atas - + Moves the selection up the window. Pindahkan pilihan ke atas jendela - + Go Live Tayangkan - + Send the selected item to Live. Tayangkan butir terpilih. - + &Start Time &Waktu Mulai - + Show &Preview Tampilkan &Pratinjau - + Show &Live Tampi&lkan Tayang - + Modified Service Layanan Terubah Suai - + The current service has been modified. Would you like to save this service? Layanan saat ini telah terubah suai. Ingin menyimpan layanan ini? @@ -3914,72 +4011,72 @@ Isi berkas tidak berupa UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. Berkas tidak dapat dibuka karena rusak. - + Empty File Berkas Kosong - + This service file does not contain any data. Berkas layanan ini tidak mengandung data apa pun. - + Corrupt File Berkas Rusak - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3987,7 +4084,7 @@ Isi berkas tidak berupa UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -4003,12 +4100,12 @@ Isi berkas tidak berupa UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -4023,32 +4120,32 @@ Isi berkas tidak berupa UTF-8. - + 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. @@ -4063,7 +4160,7 @@ Isi berkas tidak berupa UTF-8. - + Configure Shortcuts @@ -4230,11 +4327,6 @@ Isi berkas tidak berupa UTF-8. Background Audio Audio Latar - - - Next Track - - Go to next audio track. @@ -4317,17 +4409,17 @@ Isi berkas tidak berupa UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4428,62 +4520,62 @@ Isi berkas tidak berupa UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. @@ -4503,58 +4595,58 @@ Isi berkas tidak berupa UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4562,222 +4654,222 @@ Isi berkas tidak berupa 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 Tebal - + 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: @@ -4787,47 +4879,47 @@ Isi berkas tidak berupa UTF-8. - + 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: - + Justify - + Layout Preview - + Transparent @@ -4835,42 +4927,42 @@ Isi berkas tidak berupa UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -5116,22 +5208,22 @@ Isi berkas tidak berupa UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5197,7 +5289,7 @@ Isi berkas tidak berupa UTF-8. - + Welcome to the Bible Import Wizard @@ -5380,11 +5472,6 @@ Isi berkas tidak berupa UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5431,29 +5518,34 @@ Isi berkas tidak berupa UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5528,17 +5620,17 @@ Isi berkas tidak berupa UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5548,17 +5640,17 @@ Isi berkas tidak berupa UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5639,11 +5731,6 @@ Isi berkas tidak berupa UTF-8. Search - - - Back - - Refresh @@ -5655,50 +5742,70 @@ Isi berkas tidak berupa UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live Tayangkan - + No Results - + Options Pilihan - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5832,7 +5939,7 @@ Isi berkas tidak berupa UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5857,7 +5964,7 @@ Isi berkas tidak berupa UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5865,22 +5972,22 @@ Isi berkas tidak berupa UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6152,210 +6259,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: &Judul: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All Sun&ting Semua - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: Kitab: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6602,12 +6722,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6625,7 +6745,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6647,7 +6767,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6741,12 +6861,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6906,7 +7026,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/it.ts b/resources/i18n/it.ts index 58db62a5c..683ff80a2 100644 --- a/resources/i18n/it.ts +++ b/resources/i18n/it.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Messaggio di avviso - + Alert &text: Avviso &testo: - + &New &Nuovo - + &Save &Salva - + Displ&ay Visualiz&za - + Display && Cl&ose Visualizza && Ch&iudi @@ -79,7 +79,7 @@ Non è stato specificato alcun testo per l'avviso. Si prega di digitare un testo prima di cliccare su Nuovo. - + &Parameter: &Parametro: @@ -119,32 +119,32 @@ Vuoi continuare comunque? AlertsPlugin.AlertsTab - + Font Carattere - + Font name: Nome del Carattere - + Font color: Colore del Carattere - + Background color: Colore di sfondo: - + Font size: Dimensione Carattere: - + Alert timeout: Avviso Timeout: @@ -661,42 +661,87 @@ Vuoi continuare comunque? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + + Bible Exists + + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Errore di Riferimento nella Scrittura - + Web Bible cannot be used La Bibbia nel Web non può essere utilizzato - + Text Search is not available with Web Bibles. Cerca testo non è disponibile con La Bibbia sul Web. - + 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. Non hai inserito una parola chiave di ricerca. ⏎ È possibile separare parole chiave diverse da uno spazio per la ricerca di tutte le parole chiave e si possono separare con una virgola per la ricerca di uno di loro. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Non ci sono Bibbie attualmente installati. Si prega di utilizzare l'importazione guidata per installare uno o più Bibbie. - + No Bibles Available Bibbia non disponibile - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -811,80 +856,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name Seleziona il Nome del Libro - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Il nome del seguente libro non può essere abbinato fino internamente. Si prega di selezionare il nome corrispondente in inglese dalla lista. - + Current name: Nome Attuale: - + Corresponding name: Nome corrispondente: - + Show Books From Mostra i Libri da - + Old Testament Vecchio Testamento - + New Testament Nuovo Testamento - + Apocrypha Libri Apocrifi @@ -916,6 +953,75 @@ Bible should be displayed in the Bible search: Importazione dei versetti ... finito. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Dettaglio Licenza + + + + Version name: + Nome Versione: + + + + Copyright: + Copyright: + + + + Permissions: + + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -958,167 +1064,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Importazione Guidata della Bibbia - + 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. Questa procedura guidata consente di importare Bibbie da una varietà di formati. Clicca il pulsante sottostante per avviare il processo, selezionando un formato da cui importare. - + Web Download Web Download - + Location: Località: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bibbia: - + Download Options Opzione di Download - + Server: Server: - + Username: Nome utente: - + Password: Password: - + Proxy Server (Optional) Proxy Server (Opzionale) - + License Details Dettaglio Licenza - + Set up the Bible's license details. Configura i dettagli nelle Licenze delle Bibbie - + Version name: Nome Versione: - + Copyright: Copyright: - + Please wait while your Bible is imported. Per favore attendi mentre la tua Bibbia viene importata. - + You need to specify a file with books of the Bible to use in the import. È necessario specificare un file con i libri della Bibbia da utilizzare nell' importazione. - + You need to specify a file of Bible verses to import. È necessario specificare un file dei versetti biblici da importare. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - + Bibleserver - + Permissions: - + Bible file: - + Books file: - + Verses file: - + openlp.org 1.x Bible Files - + Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -1127,17 +1233,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: @@ -1153,90 +1259,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick - + Find: - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - + Second: - + Scripture Reference - + Toggle to keep or clear the previous results. - + 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. - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1250,12 +1361,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1487,42 +1598,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: @@ -1537,12 +1648,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + Ed&it All - + Insert Slide @@ -1640,33 +1751,33 @@ 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. @@ -1674,18 +1785,18 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1811,22 +1922,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1854,17 +1965,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits - + License - + Contribute @@ -1874,17 +1985,17 @@ Should OpenLP upgrade now? - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -1949,7 +2060,7 @@ Final Credit - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -1960,7 +2071,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -1969,62 +2080,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: Colore di sfondo: - + Image file: - + Open File @@ -2034,124 +2145,124 @@ Portions copyright © 2004-2012 %s - + Preview items when clicked in Media Manager - + Click to select a color. - + Browse for an image file to display. - + Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2159,33 +2270,33 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred - + 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. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File @@ -2469,9 +2580,14 @@ Version: %s Custom Slides + + + Finish + + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2480,64 +2596,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2781,40 +2892,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2825,6 +2906,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2850,309 +2951,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can OpenLP.MainWindow - + &File - + &Import - + &Export - + &View - + M&ode - + &Tools - + &Settings - + &Language - + &Help - + Media Manager - + Service Manager - + Theme Manager - + &New &Nuovo - + &Open - + Open an existing service. - + &Save &Salva - + 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 @@ -3163,125 +3264,125 @@ 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 - + 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. @@ -3290,32 +3391,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3345,7 +3446,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected @@ -3432,27 +3533,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive @@ -3475,12 +3576,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -3488,7 +3589,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options @@ -3503,47 +3604,47 @@ Suffix not supported - + Zoom In - + Zoom Out - + Zoom Original - + 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 @@ -3553,12 +3654,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3592,7 +3693,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3600,188 +3701,188 @@ Suffix not supported OpenLP.ServiceManager - + 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. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not 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 - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3801,72 +3902,72 @@ The content encoding is not UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3874,7 +3975,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3890,12 +3991,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -3910,32 +4011,32 @@ The content encoding is not UTF-8. - + 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. @@ -3950,7 +4051,7 @@ The content encoding is not UTF-8. - + Configure Shortcuts @@ -4117,11 +4218,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4204,17 +4300,17 @@ The content encoding is not UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4315,62 +4411,62 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. @@ -4390,58 +4486,58 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4449,222 +4545,222 @@ 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: @@ -4674,47 +4770,47 @@ The content encoding is not UTF-8. - + 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: Colore di sfondo: - + Justify - + Layout Preview - + Transparent @@ -4722,42 +4818,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -5003,22 +5099,22 @@ The content encoding is not UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5084,7 +5180,7 @@ The content encoding is not UTF-8. - + Welcome to the Bible Import Wizard @@ -5267,11 +5363,6 @@ The content encoding is not UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5318,29 +5409,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5415,17 +5511,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5435,17 +5531,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5526,11 +5622,6 @@ The content encoding is not UTF-8. Search - - - Back - - Refresh @@ -5542,50 +5633,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live - + No Results - + Options - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5719,7 +5830,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5744,7 +5855,7 @@ The content encoding is not UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5752,22 +5863,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6039,210 +6150,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6489,12 +6613,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6512,7 +6636,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6535,7 +6659,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6629,12 +6753,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6794,7 +6918,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/ja.ts b/resources/i18n/ja.ts index fcf97376f..0c2a72a2f 100644 --- a/resources/i18n/ja.ts +++ b/resources/i18n/ja.ts @@ -10,7 +10,7 @@ Show an alert message. - 警告メッセージを表示 + 警告メッセージを表示します。 @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message 警告メッセージ - + Alert &text: 警告テキスト(&T): - + &New 新規作成(&N) - + &Save 保存(&S) - + Displ&ay 表示(&A) - + Display && Cl&ose 表示して閉じる(&O) @@ -79,7 +79,7 @@ 警告テキストが何も指定されていません。新規作成をクリックする前にテキストを入力してください。 - + &Parameter: パラメータ(&P): @@ -119,32 +119,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font フォント - + Font name: フォント名: - + Font color: 文字色: - + Background color: 背景色: - + Font size: フォント サイズ: - + Alert timeout: 警告のタイムアウト: @@ -237,332 +237,332 @@ Do you want to continue anyway? Genesis - + 創世記 Exodus - + 出エジプト記 Leviticus - + レビ記 Numbers - + 民数記 Deuteronomy - + 申命記 Joshua - + ヨシュア記 Judges - + 士師記 Ruth - + ルツ記 1 Samuel - + サムエル記上 2 Samuel - + サムエル記下 1 Kings - + 列王記上 2 Kings - + 列王記下 1 Chronicles - + 歴代誌上 2 Chronicles - + 歴代誌下 Ezra - + エズラ記 Nehemiah - + ネヘミヤ記 Esther - + エステル記 Job - + ヨブ記 Psalms - + 詩編 Proverbs - + 箴言 Ecclesiastes - + コヘレトの言葉 Song of Solomon - + 雅歌 Isaiah - + イザヤ書 Jeremiah - + エレミヤ書 Lamentations - + 哀歌 Ezekiel - + エゼキエル書 Daniel - + ダニエル書 Hosea - + ホセア書 Joel - + ヨエル書 Amos - + アモス書 Obadiah - + オバデヤ書 Jonah - + ヨナ書 Micah - + ミカ書 Nahum - + ナホム書 Habakkuk - + ハバクク書 Zephaniah - + ゼファニヤ書 Haggai - + ハガイ書 Zechariah - + ゼカリヤ書 Malachi - + マラキ書 Matthew - + マタイによる福音書 Mark - + マルコによる福音書 Luke - + ルカによる福音書 John - + ヨハネによる福音書 Acts - + 使徒言行録 Romans - + ローマの信徒への手紙 1 Corinthians - + コリントの信徒への手紙一 2 Corinthians - + コリントの信徒への手紙二 Galatians - + ガラテヤの信徒への手紙 Ephesians - + エフェソの信徒への手紙 Philippians - + フィリピの信徒への手紙 Colossians - + コロサイの信徒への手紙 1 Thessalonians - + テサロニケの信徒への手紙一 2 Thessalonians - + テサロニケの信徒への手紙二 1 Timothy - + テモテへの手紙一 2 Timothy - + テモテへの手紙二 Titus - + テトスへの手紙 Philemon - + フィレモンへの手紙 Hebrews - + ヘブライ人への手紙 James - + ヤコブの手紙 1 Peter - + ペトロの手紙一 2 Peter - + ペトロの手紙二 1 John - + ヨハネの手紙一 2 John - + ヨハネの手紙二 3 John - + ヨハネの手紙三 Jude - + ユダの手紙 Revelation - + ヨハネの黙示録 @@ -577,17 +577,17 @@ Do you want to continue anyway? Tobit - + トビト記 Sirach - + シラ書〔集会の書〕 Baruch - + バルク書 @@ -622,12 +622,12 @@ Do you want to continue anyway? Prayer of Manasses - + マナセの祈り Letter of Jeremiah - + エレミヤの手紙 @@ -661,42 +661,87 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + 聖書のバージョン名を指定する必要があります。 + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + 聖書の著作権情報を設定する必要があります。パブリック ドメインの聖書はそのようにマークされている必要があります。 + + + + Bible Exists + 聖書が存在します + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + この聖書は既に存在します。他の聖書をインポートするか、まず存在する聖書を削除してください。 + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error 書名章節番号エラー - + Web Bible cannot be used ウェブ聖書は使用できません - + Text Search is not available with Web Bibles. テキスト検索はウェブ聖書では利用できません。 - + 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. 検索キーワードが入力されていません。 複数のキーワードをスペースで区切るとすべてに該当する箇所を検索し、カンマ (,) で区切るといずれかに該当する箇所を検索します。 - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. 利用できる聖書がありません。インポート ウィザードを利用して、一つ以上の聖書をインストールしてください。 - + No Bibles Available 利用できる聖書翻訳がありません - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -706,7 +751,14 @@ Book Chapter%(verse)sVerse%(range)sVerse%(list)sVerse%(range)sVerse Book Chapter%(verse)sVerse%(range)sVerse%(list)sChapter%(verse)sVerse%(range)sVerse Book Chapter%(verse)sVerse%(range)sChapter%(verse)sVerse Please pay attention to the appended "s" of the wildcards and refrain from translating the words inside the names in the brackets. - + 参照聖句の形式が、OpenLPにサポートされていません。以下のパターンに準拠した参照聖句である事を確認下さい。 + +書 章 +書 章%(range)s章 +書 章%(verse)s節%(range)s節 +書 章%(verse)s節%(range)s節%(list)s節%(range)s節 +書 章%(verse)s節%(range)s節%(list)s章%(verse)s節%(range)s節 +書 章%(verse)s節%(range)s章%(verse)s節 @@ -765,17 +817,17 @@ Changes do not affect verses already in the service. Verse Separator: - + 節区切: Range Separator: - + 範囲区切: List Separator: - + リスト区切: @@ -810,80 +862,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English 日本語 - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name 書名を選択 - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. 以下の書名は内部で一致しませんでした。対応する英語名を一覧から選択してください。 - + Current name: 現在の名前: - + Corresponding name: 対応する名前: - + Show Books From 絞込み - + Old Testament 旧約 - + New Testament 新約 - + Apocrypha 旧約聖書続編 @@ -915,6 +959,75 @@ Bible should be displayed in the Bible search: 節をインポート中... 完了。 + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + ライセンスの詳細 + + + + Version name: + 訳名: + + + + Copyright: + 著作権: + + + + Permissions: + 使用許可: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + 日本語 + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -957,167 +1070,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard 聖書インポート ウィザード - + 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. このウィザードで、様々な聖書のデータをインポートできます。次へボタンをクリックし、インポートする聖書のフォーマットを選択してください。 - + Web Download ウェブからダウンロード - + Location: サイト: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: 聖書: - + Download Options ダウンロード オプション - + Server: サーバ: - + Username: ユーザ名: - + Password: パスワード: - + Proxy Server (Optional) プロキシ サーバ (省略可) - + License Details ライセンスの詳細 - + Set up the Bible's license details. 聖書のライセンスの詳細を設定してください。 - + Version name: 訳名: - + Copyright: 著作権: - + Please wait while your Bible is imported. 聖書のインポートが完了するまでお待ちください。 - + You need to specify a file with books of the Bible to use in the import. インポートする聖書の書簡を指定する必要があります。 - + You need to specify a file of Bible verses to import. インポートする節を指定する必要があります。 - + You need to specify a version name for your Bible. 聖書のバージョン名を指定する必要があります。 - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. 聖書の著作権情報を設定する必要があります。パブリック ドメインの聖書はそのようにマークされている必要があります。 - + Bible Exists 聖書が存在します - + This Bible already exists. Please import a different Bible or first delete the existing one. この聖書は既に存在します。他の聖書をインポートするか、まず存在する聖書を削除してください。 - + Your Bible import failed. 聖書のインポートに失敗しました。 - + CSV File CSV ファイル - + Bibleserver Bibleserver - + Permissions: 使用許可: - + Bible file: 聖書訳: - + Books file: 書簡: - + Verses file: 節: - + openlp.org 1.x Bible Files openlp.org 1.x 聖書ファイル - + Registering Bible... 聖書を登録中... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. 聖書を登録しました。本文は使用時にダウンロードされるため、インターネット接続が必要なことに注意してください。 @@ -1126,17 +1239,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language 言語を選択 - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP はこの聖書の訳の言語を判定できませんでした。以下の一覧から言語を選択してください。 - + Language: 言語: @@ -1152,90 +1265,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick 高速 - + Find: 検索: - + Book: 書名: - + Chapter: 章: - + Verse: 節: - + From: 開始: - + To: 終了: - + Text Search テキスト検索 - + Second: 第二訳: - + Scripture Reference 参照聖句 - + Toggle to keep or clear the previous results. 結果を保持するか消去するかを切り替えます。 - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? 1 つの聖書と複数の聖書の検索結果の結合はできません。検索結果を削除して再検索しますか? - + 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 節が除外されます。 - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1249,12 +1367,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... エンコーディングを検出中です (数分かかることがあります)... - + Importing %s %s... Importing <book name> <chapter>... %s %s をインポート中... @@ -1492,42 +1610,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides カスタム スライドを編集 - + &Title: タイトル(&T): - + Add a new slide at bottom. 一番下に新規スライドを追加します。 - + Edit the selected slide. 選択されたスライドを編集します。 - + Edit all the slides at once. すべてのスライドを一度に編集します。 - + Split a slide into two by inserting a slide splitter. スライド分割機能を用い、スライドを分割します。 - + The&me: テーマ(&M): - + &Credits: クレジット(&C): @@ -1542,12 +1660,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I 最低 1 枚のスライドが必要です - + Ed&it All すべて編集(&I) - + Insert Slide スライドを挿入 @@ -1644,34 +1762,34 @@ 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 以下の画像は存在しません: %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. 結合する項目がありません。 @@ -1679,19 +1797,19 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color 背景色 - + Default Color: 既定色: - - Provides border where image is not the correct dimensions for the screen when resized. - 画像の縦横比がスクリーンと異なる場合の周囲の色を設定してください。 + + Visible background for images with aspect ratio different to screen. + @@ -1816,24 +1934,24 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players 利用可能な再生ソフト - + %s (unavailable) %s (利用不可能) - + Player Order 再生ソフトの順序 - + Allow media player to be overridden - + メディアプレーヤを上書き可能にする @@ -1861,17 +1979,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits クレジット - + License ライセンス - + Contribute 貢献 @@ -1881,17 +1999,17 @@ Should OpenLP upgrade now? ビルド %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. このプログラムは、フリーソフトです。あなたは、これを再配布したり、the Free Software Foundationが発行したGNU General Public Licenseバージョン2の元で改変する事が出来ます。 - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. このプログラムは、皆様のお役に立てると期待して配布しています。しかし、完全に無保障であることを理解してください。商品としての暗黙の保障としての商品適格性や特定の使用適合性もありません。詳しくは以下をお読みください。 - + Project Lead %s @@ -2018,7 +2136,7 @@ Final Credit します。それは神が私たちをフリー(自由)にして下さった故です。 - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2035,7 +2153,7 @@ http://openlp.org/ にて詳しくご紹介しております。 OpenLP は、ボランティアの手で開発保守されています。もっと多くのクリスチャンの手によるフリーのソフトウェア開発に興味がある方は、以下のボタンからどうぞ。 - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -2044,62 +2162,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings UI 設定 - + Number of recent files to display: 最近使用したファイルの表示数: - + Remember active media manager tab on startup 起動時に前回のメディア マネージャを開く - + Double-click to send items straight to live ダブル クリックで項目を直接ライブへ送信 - + Expand new service items on creation 礼拝項目の作成時に展開 - + Enable application exit confirmation アプリケーションの終了時に確認 - + Mouse Cursor マウス カーソル - + Hide mouse cursor when over display window ディスプレイ ウィンドウの上では、マウス カーソルを隠す - + Default Image 既定の画像 - + Background color: 背景色: - + Image file: 画像ファイル: - + Open File ファイルを開く @@ -2109,124 +2227,124 @@ Portions copyright © 2004-2012 %s 高度な設定 - + Preview items when clicked in Media Manager メディア マネージャでクリック時に項目をプレビュー - + Click to select a color. クリックして色を選択します。 - + Browse for an image file to display. 表示する画像ファイルを参照する。 - + Revert to the default OpenLP logo. 既定の OpenLP ロゴに戻す。 - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + 月曜日 - + Tuesday - + 火曜日 - + Wednesday - + 水曜日 - + Thurdsday - + 木曜日 - + Friday - + 金曜日 - + Saturday - + 土曜日 - + Sunday - + 日曜日 - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + 例: - + X11 - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2234,34 +2352,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred エラーが発生しました - + 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. OpenLP は問題に直面し、復旧できませんでした。以下に表示される情報は、開発者が問題を修正するのに役立つかも知れません。bugs@openlp.org に以下のエラー メッセージと問題が発生するまでの手順を送ってください。 - + Send E-Mail メールを送信 - + Save to File ファイルに保存 - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) この問題が発生するまで何をしていたかを入力してください。 (20文字以上。お手数ですが、英語でお願いします。) - + Attach File ファイルを添付 @@ -2384,7 +2502,7 @@ Version: %s Choose the translation you'd like to use in OpenLP. - OpenLP を利用する言語を選択 + OpenLP で利用する言語を選択してください。 @@ -2574,79 +2692,75 @@ Version: %s Custom Slides カスタムスライド + + + Finish + 終了 + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - インターネット接続が見つかりません。初回起動ウィザードは、サンプル賛美や聖書、テーマをダウンロードするためにインターネット接続が必要です。終了ボタンをクリックすると、サンプルデータ無しでOpenLPを開始します。 - -あとで一度初回起動ウィザードを起動してこのサンプル データをインポートするには、インターネット接続を確認して、"ツール/初回起動ウィザードの再実行"を選択してください。 + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -初回起動ウィザードを中止して今後も起動時に表示しないようにするには、キャンセルボタンをクリックしてください。 - - - - Finish - 終了 +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags 書式タグを設定 - + Edit Selection 選択項目を編集 - + Save 保存 - + Description 説明 - + Tag タグ - + Start tag 開始タグ - + End tag 終了タグ - + Tag Id タグID - + Start HTML 開始HTML - + End HTML 終了HTML @@ -2890,40 +3004,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 一時停止中のバックグラウンド音声を再生 - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2934,6 +3018,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2959,287 +3063,287 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 OpenLP を終了 - + &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/. @@ -3248,22 +3352,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 @@ -3274,82 +3378,82 @@ http://openlp.org/ から最新版をダウンロードできます。日本語 - + Configure &Shortcuts... ショートカットの設定(&S)... - + Close OpenLP OpenLP を閉じる - + Are you sure you want to close OpenLP? OpenLP を本当に終了しますか? - + 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. 現在の礼拝プログラムを印刷します。 - + &Recent Files 最近使用したファイル(&R) - + L&ock Panels パネルを固定(&L) - + 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. @@ -3358,43 +3462,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and 初回起動ウィザードを再実行すると、現在のOpenLP設定および既存の賛美やテーマが変更されることがあります。 - + Clear List Clear List of recent files 一覧を消去 - + Clear the list of recent files. 最近使用したファイルの一覧を消去します。 - + Configure &Formatting Tags... 書式タグを設定(&F)... - + Export OpenLP settings to a specified *.config file OpenLPの設定をファイルへエクスポート - + Settings 設定 - + Import OpenLP settings from a specified *.config file previously exported on this or another machine 以前にエクスポートしたファイルから OpenLP の設定をインポート - + Import settings? 設定をインポートしますか? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3407,32 +3511,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate 不正な設定をインポートすると異常な動作やOpenLPの異常終了の原因となります。 - + Open File ファイルを開く - + OpenLP Export Settings Files (*.conf) OpenLP エクスポート設定ファイル (*.conf) - + Import settings 設定のインポート - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP を終了させます。インポートされた設定は次の起動時に適用されます。 - + Export Settings File 設定ファイルのエクスポート - + OpenLP Export Settings File (*.conf) OpenLP 設定ファイル (*.conf) @@ -3466,7 +3570,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected 項目が選択されていません @@ -3543,38 +3647,38 @@ Suffix not supported <lyrics> tag is missing. - + <lyrics>タグが見つかりません。 <verse> tag is missing. - + <verse>タグが見つかりません。 OpenLP.PluginForm - + Plugin List プラグイン一覧 - + Plugin Details プラグイン詳細 - + Status: 状況: - + Active 有効 - + Inactive 無効 @@ -3597,12 +3701,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page サイズをページに合わせる - + Fit Width サイズをページの横幅に合わせる @@ -3610,7 +3714,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options オプション @@ -3625,47 +3729,47 @@ Suffix not supported HTMLとしてコピーする - + Zoom In ズームイン - + Zoom Out ズームアウト - + Zoom Original 既定のズームに戻す - + 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 礼拝シート @@ -3675,12 +3779,12 @@ Suffix not supported 印刷 - + Title: タイトル: - + Custom Footer Text: カスタムフッターテキスト: @@ -3714,7 +3818,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item 礼拝項目を並べ替え @@ -3722,189 +3826,189 @@ Suffix not supported OpenLP.ServiceManager - + Move to &top 一番上に移動(&t) - + Move item to the top of the service. 選択した項目を最も上に移動する。 - + Move &up 一つ上に移動(&u) - + Move item up one position in the service. 選択した項目を1つ上に移動する。 - + Move &down 一つ下に移動(&d) - + Move item down one position in the service. 選択した項目を1つ下に移動する。 - + Move to &bottom 一番下に移動(&b) - + Move item to the end of the service. 選択した項目を最も下に移動する。 - + &Delete From Service 削除(&D) - + Delete the selected item from the service. 選択した項目を礼拝プログラムから削除する。 - + &Add New Item 新しい項目を追加(&A) - + &Add to Selected Item 選択された項目を追加(&A) - + &Edit Item 項目の編集(&E) - + &Reorder Item 項目を並べ替え(&R) - + &Notes メモ(&N) - + &Change Item Theme 項目の外観テーマを変更(&C) - + OpenLP Service Files (*.osz) OpenLP 礼拝プログラムファイル (*.osz) - + 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 必要なプラグインが見つからないか無効なため、項目を表示する事ができません - + &Expand all すべて展開(&E) - + Expand all the service items. 全ての項目を展開する。 - + &Collapse all すべて折り畳む(&C) - + Collapse all the service items. 全ての項目を折り畳みます。 - + Open File ファイルを開く - + Moves the selection down the window. 選択をウィンドウの下に移動する。 - + Move up 上に移動 - + Moves the selection up the window. 選択をウィンドウの上に移動する。 - + Go Live ライブへ送る - + Send the selected item to Live. 選択された項目をライブ表示する。 - + &Start Time 開始時間(&S) - + Show &Preview プレビュー表示(&P) - + Show &Live ライブ表示(&L) - + Modified Service 礼拝プログラムの編集 - + The current service has been modified. Would you like to save this service? 現在の礼拝プログラムは、編集されています。保存しますか? @@ -3924,72 +4028,72 @@ The content encoding is not UTF-8. 再生時間: - + Untitled Service 無題 - + File could not be opened because it is corrupt. ファイルが破損しているため開けません。 - + Empty File 空のファイル - + This service file does not contain any data. この礼拝プログラムファイルは空です。 - + Corrupt File 破損したファイル - + 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の礼拝プログラムファイルではありません。 - + Service File Missing 礼拝プログラムファイルが見つかりません - + Slide theme スライド外観テーマ - + Notes メモ - + Edit 編集 - + Service copy only @@ -3997,7 +4101,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes 礼拝項目メモ @@ -4013,12 +4117,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action 動作 - + Shortcut ショートカット @@ -4033,32 +4137,32 @@ The content encoding is not UTF-8. このショートカット"%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. この動作のショートカットを初期値に戻す。 @@ -4073,7 +4177,7 @@ The content encoding is not UTF-8. 全てのショートカットを初期設定に戻しますか? - + Configure Shortcuts ショートカットの設定 @@ -4183,7 +4287,7 @@ The content encoding is not UTF-8. Audio Volume. - + ボリューム。 @@ -4223,37 +4327,32 @@ The content encoding is not UTF-8. Previous Slide - + 前のスライド Next Slide - + 次のスライド Pause Audio - + 音声の一時停止 Background Audio - バックグラウンド音声 - - - - Next Track - + バックグラウンド音声 Go to next audio track. - + 次の音声トラックへ進みます。 Tracks - + トラック @@ -4327,17 +4426,17 @@ The content encoding is not UTF-8. 開始時間がメディア項目の終了時間より後に設定されています - + Theme Layout テーマ レイアウト - + The blue box shows the main area. メイン領域に青いボックスが表示されます。 - + The red box shows the footer. フッターに青いボックスが表示されます。 @@ -4438,62 +4537,62 @@ The content encoding is not UTF-8. 全体の既定として設定(&G)) - + %s (default) %s (既定) - + You must select a theme to edit. 編集する外観テーマを選択してください。 - + You are unable to delete the default theme. 既定の外観テーマを削除する事はできません。 - + Theme %s is used in the %s plugin. %s プラグインでこの外観テーマは利用されています。 - + You have not selected a theme. 外観テーマの選択がありません。 - + Save Theme - (%s) 外観テーマを保存 - (%s) - + Theme Exported 外観テーマエキスポート - + Your theme has been successfully exported. 外観テーマは正常にエキスポートされました。 - + Theme Export Failed 外観テーマのエキスポート失敗 - + Your theme could not be exported due to an error. エラーが発生したため外観テーマは、エキスポートされませんでした。 - + Select Theme Import File インポート対象の外観テーマファイル選択 - + File is not a valid theme. 無効な外観テーマファイルです。 @@ -4513,58 +4612,58 @@ The content encoding is not UTF-8. 外観テーマのエキスポート(&E) - + You must select a theme to rename. 名前を変更する外観テーマを選択してください。 - + Rename Confirmation 名前変更確認 - + Rename %s theme? %s外観テーマの名前を変更します。宜しいですか? - + You must select a theme to delete. 削除する外観テーマを選択してください。 - + Delete Confirmation 削除確認 - + Delete %s theme? %s 外観テーマを削除します。宜しいですか? - + Validation Error 検証エラー - + A theme with this name already exists. 同名の外観テーマが既に存在します。 - + OpenLP Themes (*.theme *.otz) OpenLP 外観テーマ (*.theme *.otz) - + Copy of %s Copy of <theme name> Copy of %s - + Theme Already Exists @@ -4572,222 +4671,222 @@ 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: 外観テーマ名: @@ -4797,90 +4896,90 @@ The content encoding is not UTF-8. 外観テーマ編集 - %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 フッター(&F) - + Starting color: 色1: - + Ending color: 色2: - + Background color: 背景色: - + Justify 揃える - + Layout Preview レイアウト プレビュー - + Transparent - + 透明 OpenLP.ThemesTab - + Global Theme 全体外観テーマ - + Theme Level 外観テーマレベル - + S&ong Level 賛美レベル(&O) - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. データベース内のそれぞれの賛美の外観テーマを使用します。賛美に外観テーマが設定されていない場合、礼拝プログラムの外観テーマを使用します。礼拝プログラムに外観テーマが設定されていなければ、全体設定の外観テーマを使用します。 - + &Service Level 礼拝プログラムレベル(&S) - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. 礼拝プログラムの外観テーマを用い、賛美個々の外観テーマを上書きします。礼拝プログラムに外観テーマが設定されていなければ、全体設定の外観テーマを使用します。 - + &Global Level 全体レベル(&G) - + Use the global theme, overriding any themes associated with either the service or the songs. 全体外観テーマを用い、すべての礼拝プログラムや賛美に関連付けられた外観テーマを上書きします。 @@ -5126,22 +5225,22 @@ The content encoding is not UTF-8. バージョン - + Delete the selected item. 選択された項目を削除。 - + Move selection up one position. 選択された項目を一つ上げる。 - + Move selection down one position. 選択された項目を一つ下げる。 - + &Vertical Align: 垂直整列(&V): @@ -5207,7 +5306,7 @@ The content encoding is not UTF-8. インポート元となる%sファイルを最低一つ選択する必要があります。 - + Welcome to the Bible Import Wizard 聖書インポートウィザードへようこそ @@ -5390,11 +5489,6 @@ The content encoding is not UTF-8. Reset live background. ライブの背景をリセットします。 - - - &Split - 分割(&S) - Split a slide into two only if it does not fit on the screen as one slide. @@ -5433,40 +5527,45 @@ The content encoding is not UTF-8. Next Track - + 次のトラック Search Themes... Search bar place holder text + テーマの検索... + + + + Optional &Split OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1 と %2 - + %1, and %2 Locale list separator: end - + %1 と %2 - + %1, %2 Locale list separator: middle - + %1 と %2 - + %1, %2 Locale list separator: start - + %1 と %2 @@ -5538,17 +5637,17 @@ The content encoding is not UTF-8. 使用プレゼン: - + File Exists ファイルが存在します - + A presentation with that filename already exists. そのファイル名のプレゼンテーションは既に存在します。 - + This type of presentation is not supported. このタイプのプレゼンテーションはサポートされておりません。 @@ -5558,17 +5657,17 @@ The content encoding is not UTF-8. プレゼンテーション (%s) - + Missing Presentation 不明なプレゼンテーション - + The Presentation %s no longer exists. プレゼンテーション%sが見つかりません。 - + The Presentation %s is incomplete, please reload. プレゼンテーション%sは不完全です。再度読み込んでください。 @@ -5588,7 +5687,7 @@ The content encoding is not UTF-8. Allow presentation application to be overridden - + プレゼンテーションアプリケーションの上書きを可能にする @@ -5649,11 +5748,6 @@ The content encoding is not UTF-8. Search 検索 - - - Back - 戻る - Refresh @@ -5665,50 +5759,70 @@ The content encoding is not UTF-8. ブランク - + Show 表示 - + Prev - + Next - + Text テキスト - + Show Alert 警告を表示 - + Go Live ライブへ送る - + No Results 見つかりませんでした - + Options オプション - + Add to Service 礼拝プログラムへ追加 + + + Home + + + + + Theme + 外観テーマ + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5740,17 +5854,17 @@ The content encoding is not UTF-8. Display stage time in 12h format - + ステージの時刻を12時間で表示 Android App - + Android App Scan the QR code or click <a href="https://market.android.com/details?id=org.openlp.android">download</a> to install the Android app from the Market. - + QRコードを読み取るか、<a href="https://market.android.com/details?id=org.openlp.android">ダウンロード</a>をクリックしてAndroidアプリをマーケットからインストールしてください。 @@ -5831,18 +5945,18 @@ The content encoding is not UTF-8. display - + 表示 printed - + 印刷済み SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data 利用記録削除 @@ -5867,7 +5981,7 @@ The content encoding is not UTF-8. 正常に削除されました。 - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5875,22 +5989,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction 賛美利用記録の抽出 - + Select Date Range 賛美利用の期間 - + to から - + Report Location レポートの出力 @@ -6165,210 +6279,223 @@ The encoding is responsible for the correct character representation. [上記の賛美タグは EasyWorship からインポートしたメモが付いています] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor ソングエディタ - + &Title: タイトル(&T): - + Alt&ernate title: サブタイトル(&e): - + &Lyrics: 賛美詞(&L): - + &Verse order: 節順(&V): - + Ed&it All 全て編集(&E) - + Title && Lyrics タイトル && 賛美詞 - + &Add to Song 賛美に追加(&A) - + &Remove 削除(&R) - + &Manage Authors, Topics, Song Books アーティスト、題目、アルバムを管理(&M) - + A&dd to Song 賛美に追加(&A) - + R&emove 削除(&e) - + Book: 書名: - + Number: ナンバー: - + Authors, Topics && Song Book アーティスト、題目 && アルバム - + New &Theme 新しい外観テーマ(&N) - + Copyright Information 著作権情報 - + Comments コメント - + Theme, Copyright Info && Comments 外観テーマ、著作情報 && コメント - + Add Author アーティストを追加 - + This author does not exist, do you want to add them? アーティストが存在しません。追加しますか? - + This author is already in the list. 既にアーティストは一覧に存在します。 - + 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. 有効なアーティストを選択してください。一覧から選択するか新しいアーティストを入力し、"賛美にアーティストを追加"をクリックしてください。 - + Add Topic トピックを追加 - + This topic does not exist, do you want to add it? このトピックは存在しません。追加しますか? - + This topic is already in the list. このトピックは既に存在します。 - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. 有効なトピックを選択してください。一覧から選択するか新しいトピックを入力し、"賛美にトピックを追加"をクリックしてください。 - + You need to type in a song title. 賛美のタイトルを入力する必要があります。 - + You need to type in at least one verse. 最低一つのバースを入力する必要があります。 - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. バース順序が無効です。%sに対応するバースはありません。%sは有効です。 - + Add Book アルバムを追加 - + This song book does not exist, do you want to add it? アルバムが存在しません、追加しますか? - + You need to have an author for this song. アーティストを入力する必要があります。 - + You need to type some text in to the verse. バースにテキストを入力する必要があります。 - + Linked Audio - + 関連付けられた音声 - + Add &File(s) ファイルを追加(&F) - + Add &Media メディアを追加(&M) - + Remove &All すべて削除(&A) - + Open File(s) ファイルを開く - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6589,38 +6716,38 @@ The encoding is responsible for the correct character representation. OpenLyrics or OpenLP 2.0 Exported Song - + OpenLyrics OpenLP 2.0からエクスポートされたデータ OpenLyrics Files - + OpenLyricsファイル CCLI SongSelect Files - + CCLI SongSelectファイル EasySlides XML File - + Easy Slides XMLファイル EasyWorship Song Database - + EasyWorship Songデータベース SongsPlugin.MediaFilesForm - + Select Media File(s) - + メディアファイルを選択 - + Select one or more audio files from the list below, and click OK to import them into this song. 音声ファイルを下の一覧から1つ以上選択し、OKをクリックしてインポートしてください。 @@ -6638,7 +6765,7 @@ The encoding is responsible for the correct character representation. 賛美詞 - + CCLI License: CCLI ライセンス: @@ -6660,7 +6787,7 @@ The encoding is responsible for the correct character representation. アーティスト、トピックとアルバムの一覧を保守します。 - + copy For song cloning コピー @@ -6668,22 +6795,22 @@ The encoding is responsible for the correct character representation. Search Titles... - + タイトルを検索... Search Entire Song... - + 全てのデータを検索... Search Lyrics... - + 歌詞を検索... Search Authors... - + 著者を検索... @@ -6754,12 +6881,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright 著作権 - + The following songs could not be imported: 以下の賛美はインポートできませんでした: @@ -6919,8 +7046,8 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service - 礼拝プログラムを開いたときに存在しない賛美を追加 + Import missing songs from service files + diff --git a/resources/i18n/ko.ts b/resources/i18n/ko.ts index 6c93dca96..160dcedf1 100644 --- a/resources/i18n/ko.ts +++ b/resources/i18n/ko.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message 경고 메세지 - + Alert &text: 경고 문구(&T) - + &New 새로 만들기(&N) - + &Save 저장(&S) - + Displ&ay 출력(&A) - + Display && Cl&ose 출력 && 닫기(&O) @@ -79,7 +79,7 @@ 경고 문구를 입력하지 않았습니다. 새로 만들기를 하려면 문구를 입력해주세요. - + &Parameter: @@ -117,32 +117,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font 글꼴 - + Font name: 글꼴: - + Font color: 글꼴색: - + Background color: 배경색: - + Font size: 글꼴 크기: - + Alert timeout: 경고 타임아웃: @@ -659,41 +659,86 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + + Bible Exists + + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error 성경 참조 오류 - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -808,80 +853,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: - + Corresponding name: - + Show Books From - + Old Testament - + New Testament - + Apocrypha @@ -913,6 +950,75 @@ Bible should be displayed in the Bible search: + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + 라이센스 정보 + + + + Version name: + 버전 이름: + + + + Copyright: + 저작권: + + + + Permissions: + + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -955,167 +1061,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard 성경 가져오기 마법사 - + 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. 이 마법사는 각종 형식의 성경을 가져오도록 안내해드립니다. 다음 버튼을 눌러서 가져올 성경의 형식을 선택해 주세요. - + Web Download 웹 다운로드 - + Location: 위치: - + Crosswalk - + BibleGateway - + Bible: 성경: - + Download Options 다운로드 옵션 - + Server: 서버: - + Username: 사용자 이름: - + Password: 비밀번호: - + Proxy Server (Optional) 프록시 서버 (선택 사항) - + License Details 라이센스 정보 - + Set up the Bible's license details. - + Version name: 버전 이름: - + Copyright: 저작권: - + Please wait while your Bible is imported. 성경 가져오기가 진행되는 동안 기다려주세요. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - + Bibleserver - + Permissions: - + Bible file: - + Books file: - + Verses file: - + openlp.org 1.x Bible Files - + Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -1124,17 +1230,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: @@ -1150,90 +1256,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick - + Find: - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - + Second: - + Scripture Reference - + Toggle to keep or clear the previous results. - + 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. - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1247,12 +1358,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1484,42 +1595,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: @@ -1534,12 +1645,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + Ed&it All - + Insert Slide @@ -1636,33 +1747,33 @@ 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. @@ -1670,18 +1781,18 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1807,22 +1918,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1850,17 +1961,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits - + License - + Contribute @@ -1870,17 +1981,17 @@ Should OpenLP upgrade now? - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -1945,7 +2056,7 @@ Final Credit - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -1956,7 +2067,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -1965,62 +2076,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: 배경색: - + Image file: - + Open File @@ -2030,124 +2141,124 @@ Portions copyright © 2004-2012 %s - + Preview items when clicked in Media Manager - + Click to select a color. - + Browse for an image file to display. - + Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2155,33 +2266,33 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred - + 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. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File @@ -2465,9 +2576,14 @@ Version: %s Custom Slides + + + Finish + + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2476,64 +2592,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2777,40 +2888,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2821,6 +2902,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2846,309 +2947,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 @@ -3159,125 +3260,125 @@ 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 - + 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. @@ -3286,32 +3387,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3341,7 +3442,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected @@ -3428,27 +3529,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive @@ -3471,12 +3572,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -3484,7 +3585,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options @@ -3499,47 +3600,47 @@ Suffix not supported - + Zoom In - + Zoom Out - + Zoom Original - + 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 @@ -3549,12 +3650,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3588,7 +3689,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3596,188 +3697,188 @@ Suffix not supported OpenLP.ServiceManager - + 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. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not 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 - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3797,72 +3898,72 @@ The content encoding is not UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3870,7 +3971,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3886,12 +3987,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -3906,32 +4007,32 @@ The content encoding is not UTF-8. - + 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. @@ -3946,7 +4047,7 @@ The content encoding is not UTF-8. - + Configure Shortcuts @@ -4113,11 +4214,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4200,17 +4296,17 @@ The content encoding is not UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4311,62 +4407,62 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. @@ -4386,58 +4482,58 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4445,222 +4541,222 @@ 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: @@ -4670,47 +4766,47 @@ The content encoding is not UTF-8. - + 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: 배경색: - + Justify - + Layout Preview - + Transparent @@ -4718,42 +4814,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -4999,22 +5095,22 @@ The content encoding is not UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5080,7 +5176,7 @@ The content encoding is not UTF-8. - + Welcome to the Bible Import Wizard @@ -5263,11 +5359,6 @@ The content encoding is not UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5314,29 +5405,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5411,17 +5507,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5431,17 +5527,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5522,11 +5618,6 @@ The content encoding is not UTF-8. Search - - - Back - - Refresh @@ -5538,50 +5629,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live - + No Results - + Options - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5715,7 +5826,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5740,7 +5851,7 @@ The content encoding is not UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5748,22 +5859,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6035,210 +6146,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6485,12 +6609,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6508,7 +6632,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6530,7 +6654,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6624,12 +6748,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6789,7 +6913,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/nb.ts b/resources/i18n/nb.ts index 6e1ae1520..eb7b78011 100644 --- a/resources/i18n/nb.ts +++ b/resources/i18n/nb.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Varselmelding - + Alert &text: Varsel&tekst: - + &New &Ny - + &Save &Lagre - + Displ&ay Vis - + Display && Cl&ose Vis && Lukk @@ -79,7 +79,7 @@ Du har ikke spesifisert noen tekst for varselet. Vennligst skriv inn en tekst før du trykker Ny. - + &Parameter: &Parameter: @@ -117,32 +117,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Skrifttype - + Font name: Skriftnavn: - + Font color: Skriftfarge: - + Background color: Bakgrunnsfarge: - + Font size: Skriftstørrelse: - + Alert timeout: Varselvarighet: @@ -659,42 +659,87 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Du må spesifisere et versjonsnavn for Bibelen din. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Du må angi kopiretten for Bibelen. Offentlige bibler må markeres deretter. + + + + Bible Exists + Bibelen finnes + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Denne bibelen finnes alt. Vennligst importer en annen bibel eller slett først den eksisterende. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Bibelreferansefeil - + Web Bible cannot be used Nettbibel kan ikke brukes - + Text Search is not available with Web Bibles. Tekstsøk er ikke tilgjengelig med nettbibler. - + 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. Du har ikke angitt et søkeord. Du kan skille ulike søkeord med mellomrom for å søke etter alle søkeordene dine, og du kan skille dem med komma for å søke etter ett av dem. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Det er ingen bibler installert. Vennligst bruk importeringsveiviseren for å installere en eller flere bibler. - + No Bibles Available Ingen bibler tilgjengelig - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -809,80 +854,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: - + Corresponding name: - + Show Books From - + Old Testament - + New Testament - + Apocrypha @@ -914,6 +951,75 @@ Bible should be displayed in the Bible search: + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Lisensdetaljer + + + + Version name: + Versjonsnavn: + + + + Copyright: + Opphavsrett: + + + + Permissions: + Tillatelser: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -956,167 +1062,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bibelimporteringsverktøy - + 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. Denne veiviseren vil hjelpe deg å importere bibler fra en rekke ulike formater. Klikk på neste-knappen under for å starte prosessen ved å velge et format å importere fra. - + Web Download Nettnedlastning - + Location: Plassering: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bibel: - + Download Options Nedlastingsalternativer - + Server: Tjener: - + Username: Brukernavn: - + Password: Passord: - + Proxy Server (Optional) Proxytjener (valgfritt) - + License Details Lisensdetaljer - + Set up the Bible's license details. Sett opp Bibelens lisensdetaljer. - + Version name: Versjonsnavn: - + Copyright: Opphavsrett: - + Please wait while your Bible is imported. Vennligst vent mens bibelen blir importert. - + You need to specify a file with books of the Bible to use in the import. Du må angi en fil som inneholder bøkene i Bibelen du vil importere. - + You need to specify a file of Bible verses to import. Du må angi en fil med bibelvers som skal importeres. - + You need to specify a version name for your Bible. Du må spesifisere et versjonsnavn for Bibelen din. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Du må angi kopiretten for Bibelen. Offentlige bibler må markeres deretter. - + Bible Exists Bibelen finnes - + This Bible already exists. Please import a different Bible or first delete the existing one. Denne bibelen finnes alt. Vennligst importer en annen bibel eller slett først den eksisterende. - + Your Bible import failed. - + CSV File CSV-fil - + Bibleserver Bibeltjener - + Permissions: Tillatelser: - + Bible file: Bibelfil: - + Books file: Bokfil: - + Verses file: Versfil: - + openlp.org 1.x Bible Files OpenLP 1.x Bibelfiler - + Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -1125,17 +1231,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: @@ -1151,90 +1257,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Hurtig - + Find: - + Book: Bok: - + Chapter: Kapittel: - + Verse: Vers: - + From: - + To: - + Text Search Tekstsøk - + Second: Alternativ: - + Scripture Reference Bibelreferanse - + Toggle to keep or clear the previous results. - + 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. - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1248,12 +1359,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Oppdager tegnkoding (dette kan ta noen minutter)... - + Importing %s %s... Importing <book name> <chapter>... Importerer %s %s... @@ -1485,42 +1596,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides Rediger egendefinerte lysbilder - + &Title: &Tittel: - + Add a new slide at bottom. Legg til nytt lysbilde nederst. - + Edit the selected slide. Rediger markert lysbilde. - + Edit all the slides at once. Rediger alle lysbilder på en gang. - + Split a slide into two by inserting a slide splitter. Del lysbilde i to ved å sette inn en lysbildedeler. - + The&me: Tema: - + &Credits: &Credits: @@ -1535,12 +1646,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Du må legge til minst et lysbilde - + Ed&it All Rediger alle - + Insert Slide @@ -1638,34 +1749,34 @@ 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. @@ -1673,18 +1784,18 @@ Vil du likevel legge til de andre bildene? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1810,22 +1921,22 @@ Vil du likevel legge til de andre bildene? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1853,17 +1964,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits Credits - + License - + Contribute Bidra @@ -1873,17 +1984,17 @@ Should OpenLP upgrade now? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Dette programmet er fri programvare; du kan redistribuere det og/eller endre det under betingelsene i GNU General Public License versjon 2, som publisert av Free Software Foundation. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Dette programmet er distribuert i det håp at det vil være nyttig, men UTEN NOEN FORM FOR GARANTI; selv uten underforståtte garantier om SALGBARHET eller ANVENDELIGHET FOR ET SPESIELT FORMÅL. Se nedenfor for flere detaljer. - + Project Lead %s @@ -2008,7 +2119,7 @@ dette programmet fritt for omkostninger, fordi han har satt oss fri. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2019,7 +2130,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -2028,62 +2139,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Innstillinger for brukergrensesnitt - + Number of recent files to display: Antall nylig brukte filer å vise. - + Remember active media manager tab on startup Husk aktiv mediebehandlerfane ved oppstart - + Double-click to send items straight to live Dobbelklikk for å sende saker direkte live - + Expand new service items on creation Utvid nye møteenheter ved opprettelse - + Enable application exit confirmation Aktiver avsluttningsbekreftelse - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: Bakgrunnsfarge: - + Image file: - + Open File @@ -2093,124 +2204,124 @@ Portions copyright © 2004-2012 %s - + Preview items when clicked in Media Manager - + Click to select a color. - + Browse for an image file to display. - + Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2218,33 +2329,33 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred - + 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. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File @@ -2528,9 +2639,14 @@ Version: %s Custom Slides + + + Finish + + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2539,64 +2655,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2840,40 +2951,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2884,6 +2965,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2909,309 +3010,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can OpenLP.MainWindow - + &File &Fil - + &Import &Importer - + &Export &Eksporter - + &View - + M&ode - + &Tools - + &Settings &Innstillinger - + &Language - + &Help &Hjelp - + Media Manager - + Service Manager - + Theme Manager - + &New &Ny - + &Open - + 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 - + &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 &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 - + List the Plugins - + &User Guide &Brukerveiledning - + &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 @@ -3222,125 +3323,125 @@ 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 - + 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. @@ -3349,32 +3450,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3404,7 +3505,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected @@ -3491,27 +3592,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active Aktiv - + Inactive @@ -3534,12 +3635,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -3547,7 +3648,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options @@ -3562,47 +3663,47 @@ Suffix not supported - + Zoom In - + Zoom Out - + Zoom Original - + 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 @@ -3612,12 +3713,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3651,7 +3752,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3659,188 +3760,188 @@ Suffix not supported OpenLP.ServiceManager - + 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. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not 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 - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3860,72 +3961,72 @@ The content encoding is not UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3933,7 +4034,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3949,12 +4050,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -3969,32 +4070,32 @@ The content encoding is not UTF-8. - + 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. @@ -4009,7 +4110,7 @@ The content encoding is not UTF-8. - + Configure Shortcuts @@ -4176,11 +4277,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4263,17 +4359,17 @@ The content encoding is not UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4374,62 +4470,62 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. Du kan ikke slette det globale temaet. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. Filen er ikke et gyldig tema. @@ -4449,58 +4545,58 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4508,222 +4604,222 @@ 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: @@ -4733,47 +4829,47 @@ The content encoding is not UTF-8. - + 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: Bakgrunnsfarge: - + Justify - + Layout Preview - + Transparent @@ -4781,42 +4877,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -5062,22 +5158,22 @@ The content encoding is not UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5143,7 +5239,7 @@ The content encoding is not UTF-8. - + Welcome to the Bible Import Wizard @@ -5326,11 +5422,6 @@ The content encoding is not UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5377,29 +5468,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5474,17 +5570,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5494,17 +5590,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5585,11 +5681,6 @@ The content encoding is not UTF-8. Search - - - Back - - Refresh @@ -5601,50 +5692,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live - + No Results - + Options - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5778,7 +5889,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5803,7 +5914,7 @@ The content encoding is not UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5811,22 +5922,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range Velg dato-område - + to - + Report Location @@ -6098,210 +6209,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Sangredigeringsverktøy - + &Title: &Tittel: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All Rediger alle - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: Bok: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6548,12 +6672,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6571,7 +6695,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6594,7 +6718,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6688,12 +6812,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6853,7 +6977,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/nl.ts b/resources/i18n/nl.ts index cf92dcfbe..0fd9481fa 100644 --- a/resources/i18n/nl.ts +++ b/resources/i18n/nl.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Waarschuwing - + Alert &text: Waarschuwings&text: - + &New &Nieuw - + &Save Op&slaan - + Displ&ay Wee&rgeven - + Display && Cl&ose &Weergeven en sluiten @@ -79,7 +79,7 @@ De waarschuwing bevat geen tekst. Voer eerst tekst in voordat u op nieuw klikt. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Toch doorgaan? AlertsPlugin.AlertsTab - + Font Lettertype - + Font name: Naam lettertype: - + Font color: Letterkleur: - + Background color: Achtergrondkleur: - + Font size: Corpsgrootte: - + Alert timeout: Tijdsduur: @@ -661,42 +661,87 @@ Toch doorgaan? :|v|V|vers|verzen;;-|tot;;,|en;;eind + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Geef de naam van de bijbelvertaling op. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Copyright moet opgegeven worden. Bijbels in het publieke domein moeten als zodanig gemarkeerd worden. + + + + Bible Exists + Deze bijbelvertaling bestaat reeds + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Deze bijbel bestaat reeds. Geef een andere naam of verwijder eerst het bestaande exemplaar. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Fouten in schriftverwijzingen - + Web Bible cannot be used Online bijbels kunnen niet worden gebruikt - + Text Search is not available with Web Bibles. In online bijbels kunt u niet zoeken op tekst. - + 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. Geen zoekterm opgegeven. Woorden met een spatie ertussen betekent zoeken naar alle woorden, Woorden met een komma ertussen betekent zoeken naar de afzonderlijke woorden. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Er zijn geen bijbels geïnstalleerd. Gebruik de Import assistent om een of meerdere bijbels te installeren. - + No Bibles Available Geen bijbels beschikbaar - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. Ze moeten gescheiden worden door een verticale streep "|". Maak de regel leeg om de standaardinstelling te gebruiken. - - - Preferred Bookname Language - Voorkeurstaal bijbelboeken - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Kies de taal waarin de bijbelboeken moeten -worden getoond in het zoekveld: - - - - Bible language - Bijbeltaal - - - - Application language - Programmataal - English Engels - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Meerdere opties: -Bijbeltaal - de taal waarin de bijbelboeken zijn geïmporteerd -Programmataal - de taal de gebruikt wordt voor OpenLP -Engels - altijd de Engelse namen voor bijbelboeken gebruiken + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Selecteer naam bijbelboek - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Er kon geen bijbelboek met die naam gevonden worden. Selecteer de overeenkomstige Engels naam uit de lijst. - + Current name: Huidige naam: - + Corresponding name: Overeenkomstige naam: - + Show Books From Toon boeken uit - + Old Testament Oude Testament - + New Testament Nieuwe Testament - + Apocrypha Apocriefe boeken @@ -935,6 +968,75 @@ Engels - altijd de Engelse namen voor bijbelboeken gebruiken Importeren bijbelverzen... klaar. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Licentiedetails + + + + Version name: + Bijbeluitgave: + + + + Copyright: + Copyright: + + + + Permissions: + Rechten: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ Engels - altijd de Engelse namen voor bijbelboeken gebruiken BiblesPlugin.ImportWizardForm - + Bible Import Wizard Bijbel Import Assistent - + 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. Deze Assistent helpt u bijbels van verschillende bestandsformaten te importeren. Om de Assistent te starten klikt op volgende. - + Web Download Onlinebijbel - + Location: Locatie: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bijbelvertaling: - + Download Options Download opties - + Server: Server: - + Username: Gebruikersnaam: - + Password: Wachtwoord: - + Proxy Server (Optional) Proxy-Server (optioneel) - + License Details Licentiedetails - + Set up the Bible's license details. Geef aan welke licentievoorwaarden gelden voor deze bijbelvertaling. - + Version name: Bijbeluitgave: - + Copyright: Copyright: - + Please wait while your Bible is imported. Even geduld. De bijbelvertaling wordt geïmporteerd. - + You need to specify a file with books of the Bible to use in the import. Er moet een bestand met beschikbare bijbelboeken opgegeven worden. - + You need to specify a file of Bible verses to import. Er moet een bestand met bijbelverzen opgegeven worden. - + You need to specify a version name for your Bible. Geef de naam van de bijbelvertaling op. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Copyright moet opgegeven worden. Bijbels in het publieke domein moeten als zodanig gemarkeerd worden. - + Bible Exists Deze bijbelvertaling bestaat reeds - + This Bible already exists. Please import a different Bible or first delete the existing one. Deze bijbel bestaat reeds. Geef een andere naam of verwijder eerst het bestaande exemplaar. - + Your Bible import failed. Het importeren is mislukt. - + CSV File CSV bestand - + Bibleserver Bibleserver.com - + Permissions: Rechten: - + Bible file: Bijbel bestand: - + Books file: Bijbelboeken bestand: - + Verses file: Bijbelverzen bestand: - + openlp.org 1.x Bible Files openlp.org 1.x bijbel bestanden - + Registering Bible... Registreer Bijbel... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Bijbel geregistreerd. Let op, de bijbelverzen worden gedownload @@ -1147,17 +1249,17 @@ indien nodig en een internetverbinding is dus noodzakelijk. BiblesPlugin.LanguageDialog - + Select Language Selecteer taal - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP kan niet bepalen in welke taal deze Bijbel is geschreven. Selecteer een taal uit de onderstaande lijst. - + Language: Taal: @@ -1173,88 +1275,93 @@ indien nodig en een internetverbinding is dus noodzakelijk. BiblesPlugin.MediaItem - + Quick Snelzoeken - + Find: Vind: - + Book: Boek: - + Chapter: Hoofdstuk: - + Verse: Vers: - + From: Van: - + To: Tot: - + Text Search Zoek op tekst - + Second: Tweede: - + Scripture Reference Schriftverwijzing - + Toggle to keep or clear the previous results. Zoekresultaten wel / niet behouden. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? 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. - + Search Scripture Reference... - + Doorzoek schriftverwijzing - + Search Text... + Doorzoek tekst... + + + + Are you sure you want to delete "%s"? @@ -1270,12 +1377,12 @@ indien nodig en een internetverbinding is dus noodzakelijk. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Tekstcodering detecteren (dat kan even duren)... - + Importing %s %s... Importing <book name> <chapter>... %s %s wordt geïmporteerd... @@ -1513,42 +1620,42 @@ Let op, de bijbelverzen worden gedownload indien nodig en een internetverbinding CustomPlugin.EditCustomForm - + Edit Custom Slides Aangepaste dia's bewerken - + &Title: &Titel: - + Add a new slide at bottom. Nieuwe dia onderaan invoegen. - + Edit the selected slide. Geselecteerde dia bewerken. - + Edit all the slides at once. Alle dia's tegelijk bewerken. - + Split a slide into two by inserting a slide splitter. Dia doormidden delen door een dia 'splitter' in te voegen. - + The&me: The&ma: - + &Credits: &Credits: @@ -1563,12 +1670,12 @@ Let op, de bijbelverzen worden gedownload indien nodig en een internetverbinding Minstens een dia invoegen - + Ed&it All &Alles bewerken - + Insert Slide Invoegen dia @@ -1666,34 +1773,34 @@ 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. Er is geen weergave item om te verbeteren. @@ -1701,19 +1808,19 @@ De andere afbeeldingen alsnog toevoegen? ImagesPlugin.ImageTab - + Background Color Achtergrondkleur - + Default Color: Standaard kleur: - - Provides border where image is not the correct dimensions for the screen when resized. - Voorziet in een rand om de afbeelding als de verhoudingen niet overeenkomen met de schermafmetingen. + + Visible background for images with aspect ratio different to screen. + @@ -1838,22 +1945,22 @@ De andere afbeeldingen alsnog toevoegen? MediaPlugin.MediaTab - + Available Media Players Beschikbare media spelers - + %s (unavailable) %s (niet beschikbaar) - + Player Order Speler volgorde - + Allow media player to be overridden Toestaan om de mediaspeler te overschrijven @@ -1883,17 +1990,17 @@ Zal OpenLP dat nu doen? OpenLP.AboutForm - + Credits Credits - + License Licentie - + Contribute Bijdragen @@ -1903,17 +2010,17 @@ Zal OpenLP dat nu doen? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -2040,7 +2147,7 @@ Final Credit Deze tekst is niet vertaald. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2057,7 +2164,7 @@ Ontdek meer over OpenLP: http://openlp.org/ OpenLP wordt ontwikkeld en bijgehouden door vrijwilligers. Als u meer vrije software op het gebied van het christelijk geloof wilt zien, overweeg dan een bijdrage te leveren door onderstaande knop te gebruiken. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2067,62 +2174,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Werkomgeving instellingen - + Number of recent files to display: Aantal recent geopende bestanden: - + Remember active media manager tab on startup Laatstgeopende tab opslaan - + Double-click to send items straight to live Dubbelklikken om onderdelen direct aan live toe te voegen - + Expand new service items on creation Nieuwe liturgieonderdelen automatisch uitklappen - + Enable application exit confirmation Afsluiten OpenLP bevestigen - + Mouse Cursor Muisaanwijzer - + Hide mouse cursor when over display window Verberg muisaanwijzer in het weergave venster - + Default Image standaard afbeelding - + Background color: Achtergrondkleur: - + Image file: Afbeeldingsbestand: - + Open File Open bestand @@ -2132,124 +2239,124 @@ Portions copyright © 2004-2012 %s Geavanceerd - + Preview items when clicked in Media Manager Voorbeeld direct laten zien bij aanklikken in Media beheer - + Click to select a color. Klik om een kleur te kiezen. - + Browse for an image file to display. Blader naar een afbeelding om te laten zien. - + Revert to the default OpenLP logo. Herstel standaard OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Liturgie %d-%m-%Y %H-%M - + Default Service Name Standaard liturgienaam - + Enable default service name Gebruik standaard liturgienaam - + Date and Time: Datum en tijd: - + Monday maandag - + Tuesday dinsdag - + Wednesday woensdag - + Thurdsday donderdag - + Friday vrijdag - + Saturday zaterdag - + Sunday zondag - + Now Nu - + Time when usual service starts. Begintijd gewone dienst - + Name: Naam: - + Consult the OpenLP manual for usage. Raadpleeg de OpenLP handleiding voor gebruik. - + Revert to the default service name "%s". Herstel de standaard liturgienaam "%s". - + Example: Voorbeeld: - + X11 X11 - + Bypass X11 Window Manager Negeer X11 Window Manager - + Syntax error. Syntax error. @@ -2257,35 +2364,35 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Er gaat iets fout - + 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. Oeps! OpenLP heeft een probleem en kan het niet zelf oplossen. De tekst in het onderste venster bevat informatie waarmee de OpenLP ontwikkelaars iets kunnen. Stuur een e-mail naar: bugs@openlp.org met een gedetailleerde beschrijving van het probleem en hoe het ontstond. - + Send E-Mail Stuur e-mail - + Save to File Opslaan als bestand - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Omschrijf in het Engels wat u deed toen deze fout zich voordeed (minstens 20 tekens gebruiken) - + Attach File Voeg bestand toe @@ -2596,79 +2703,75 @@ Schrijf in het Engels, omdat de meeste programmeurs geen Nederlands spreken. Custom Slides Aangepaste dia’s + + + Finish + Eind + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Geen Internet verbinding gevonden. De Eerste Keer Assistent heeft een internet verbinding nodig om voorbeeld liederen en bijbels te downloaden. Klik op afronden om OpenLP te starten met standaardinstellingen en geen voorbeeld data. - -Om de Eerste Keer Assistent opnieuw te starten en later voorbeeld data te importeren, check de Internet verbeinding herstart de assistent door in het menu "Gereedschap/Herstart Eerste Keer Assistent" in OpenLP. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Om de Eerste Keer Assistent te annuleren (zonder OpenLP te starten), klik op Annuleren. - - - - Finish - Eind +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Configureer Opmaak tags - + Edit Selection Bewerk selectie - + Save Opslaan - + Description Omschrijving - + Tag Tag - + Start tag Start tag - + End tag Eind tag - + Tag Id Tag Id - + Start HTML Start HTML - + End HTML Eind HTML @@ -2912,40 +3015,10 @@ Om de Eerste Keer Assistent te annuleren (zonder OpenLP te starten), klik op Ann Start achtergrond geluid gepausseerd - + Service Item Slide Limits Limiet Liturgieitems per dia - - - &End Slide - &Eind dia - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - De pijl-toetsen naar boven en beneden stoppen boven- en onderaan de dia's van elk liturgienoderdeel. - - - - &Wrap Slide - &Wrap dia - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - De pijl-toetsen naar boven en beneden gaan verder boven- en onderaan de dia's van elk liturgienoderdeel. - - - - &Next Item - &Volgend item - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - De pijl-toetsen naar boven en beneden gaan verder boven- en onderaan de volgende of vorige dia van het liturgienoderdeel. - Override display position: @@ -2956,6 +3029,26 @@ Om de Eerste Keer Assistent te annuleren (zonder OpenLP te starten), klik op Ann Repeat track list herhaal tracklijst + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2981,287 +3074,287 @@ Om de Eerste Keer Assistent te annuleren (zonder OpenLP te starten), klik op Ann 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. - + 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/. @@ -3270,22 +3363,22 @@ You can download the latest version from http://openlp.org/. U kunt de laatste versie op http://openlp.org/ downloaden. - + 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 @@ -3296,82 +3389,82 @@ 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? - + 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. - + &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. - + &Recent Files &Recente bestanden - + L&ock Panels Panelen op sl&ot - + Prevent the panels being moved. Voorkomen dat panelen verschuiven. - + Re-run First Time Wizard Herstart Eerste keer assistent - + Re-run the First Time Wizard, importing songs, Bibles and themes. Herstart Eerste keer assistent, importeer voorbeeld liederen, bijbels en thema’s. - + Re-run First Time Wizard? Herstart Eerste keer assistent? - + 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. @@ -3380,43 +3473,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and De Eerste keer assistent opnieuw starten zou veranderingen in uw huidige OpenLP instellingen kunnen maken en mogelijk liederen aan uw huidige lijst kunnen toevoegen en uw standaard thema wijzigen. - + Clear List Clear List of recent files Lijst leegmaken - + Clear the list of recent files. Maak de lijst met recente bestanden leeg. - + Configure &Formatting Tags... Configureer &Opmaak tags... - + Export OpenLP settings to a specified *.config file Exporteer OpenLP instellingen naar een *.config bestand - + Settings Instellingen - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Importeer OpenLP instellingen uit een bestaand *.config bestand afkomstig van deze of een andere computer - + Import settings? Importeer instelling? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3429,32 +3522,32 @@ Instellingen importeren zal uw huidige OpenLP configuratie veranderen. Incorrecte instellingen importeren veroorzaakt onvoorspelbare effecten of OpenLP kan spontaan stoppen. - + Open File Open bestand - + OpenLP Export Settings Files (*.conf) OpenLP Export instellingsbestanden (*.config) - + Import settings Importeer instellingen - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP sluit nu af. De geïmporteeerde instellingen worden bij de volgende start van OpenLP toegepast. - + Export Settings File Exporteer instellingen - + OpenLP Export Settings File (*.conf) OpenLP Export instellingsbestand (*.config) @@ -3488,7 +3581,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected Niets geselecteerd @@ -3576,27 +3669,27 @@ Extensie niet ondersteund OpenLP.PluginForm - + Plugin List Plugin Lijst - + Plugin Details Plugin details - + Status: Status: - + Active Actief - + Inactive Inactief @@ -3619,12 +3712,12 @@ Extensie niet ondersteund OpenLP.PrintServiceDialog - + Fit Page Passend hele pagina - + Fit Width Passend pagina breedte @@ -3632,7 +3725,7 @@ Extensie niet ondersteund OpenLP.PrintServiceForm - + Options Opties @@ -3647,47 +3740,47 @@ Extensie niet ondersteund Kopieer als HTML - + Zoom In Inzoomen - + Zoom Out Uitzoomen - + Zoom Original Werkelijke grootte - + Other Options Overige opties - + Include slide text if available Inclusief dia tekst indien beschikbaar - + Include service item notes Inclusief liturgie opmerkingen - + Include play length of media items Inclusief afspeellengte van media items - + Add page break before each text item Voeg een pagina-einde toe voor elke tekst item - + Service Sheet Liturgie blad @@ -3697,12 +3790,12 @@ Extensie niet ondersteund Afdrukken - + Title: Titel: - + Custom Footer Text: Aangepaste voettekst: @@ -3736,7 +3829,7 @@ Extensie niet ondersteund OpenLP.ServiceItemEditForm - + Reorder Service Item Liturgie onderdelen herschikken @@ -3744,189 +3837,189 @@ Extensie niet ondersteund OpenLP.ServiceManager - + Move to &top Bovenaan plaa&tsen - + Move item to the top of the service. Plaats dit onderdeel bovenaan. - + Move &up Naar b&oven - + Move item up one position in the service. Verplaats een plek naar boven. - + Move &down Naar bene&den - + Move item down one position in the service. Verplaats een plek naar beneden. - + Move to &bottom Onderaan &plaatsen - + Move item to the end of the service. Plaats dit onderdeel onderaan. - + &Delete From Service Verwij&deren uit de liturgie - + Delete the selected item from the service. Verwijder dit onderdeel uit de liturgie. - + &Add New Item &Voeg toe - + &Add to Selected Item &Voeg selectie toe - + &Edit Item B&ewerk onderdeel - + &Reorder Item He&rschik onderdeel - + &Notes Aa&ntekeningen - + &Change Item Theme &Wijzig onderdeel thema - + OpenLP Service Files (*.osz) OpenLP liturgie bestanden (*.osz) - + 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. - + Missing Display Handler Ontbrekende weergave regelaar - + Your item cannot be displayed as there is no handler to display it Dit onderdeel kan niet weergegeven worden, omdat er een regelaar ontbreekt - + Your item cannot be displayed as the plugin required to display it is missing or inactive Dit onderdeel kan niet weergegeven worden omdat de benodigde plugin ontbreekt of inactief is - + &Expand all Alles &uitklappen - + Expand all the service items. Alle liturgie onderdelen uitklappen. - + &Collapse all Alles &inklappen - + Collapse all the service items. Alle liturgie onderdelen inklappen. - + Open File Open bestand - + Moves the selection down the window. Verplaatst de selectie naar beneden. - + Move up Naar boven - + Moves the selection up the window. Verplaatst de selectie naar boven. - + Go Live Ga Live - + Send the selected item to Live. Toon selectie Live. - + &Start Time &Start Tijd - + Show &Preview Toon &Voorbeeld - + Show &Live Toon &Live - + Modified Service Gewijzigde liturgie - + The current service has been modified. Would you like to save this service? De huidige liturgie is gewijzigd. Veranderingen opslaan? @@ -3946,72 +4039,72 @@ Tekst codering is geen UTF-8. Speeltijd: - + Untitled Service Liturgie zonder naam - + 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 - + Load an existing service. Laad een bestaande liturgie. - + Save this service. Deze liturgie opslaan. - + Select a theme for the service. 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. - + Service File Missing Ontbrekend liturgiebestand - + Slide theme Dia thema - + Notes Aantekeningen - + Edit Bewerk - + Service copy only Liturgie alleen kopiëren @@ -4019,7 +4112,7 @@ Tekst codering is geen UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Liturgische kanttekeningen @@ -4035,12 +4128,12 @@ Tekst codering is geen UTF-8. OpenLP.ShortcutListDialog - + Action Actie - + Shortcut snelkoppeling @@ -4055,32 +4148,32 @@ Tekst codering is geen UTF-8. Deze snelkoppeling "%s" wordt al voor iets anders gebruikt. Kies een andere toetscombinatie. - + Alternate Afwisselend - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Selecteer een actie en klik op één van de knoppen hieronder om respectievelijk een primaire of alternatieve sneltoets vast te leggen. - + Default Standaard - + Custom Aangepaste dia - + Capture shortcut. Sneltoets vastleggen. - + Restore the default shortcut of this action. Herstel de standaard sneltoets voor de actie. @@ -4095,7 +4188,7 @@ Tekst codering is geen UTF-8. Weet u zeker dat u alle standaard sneltoetsen wilt herstellen? - + Configure Shortcuts Sneltoetsen instellen @@ -4262,11 +4355,6 @@ Tekst codering is geen UTF-8. Background Audio Achtergrondgeluid - - - Next Track - Volgende track - Go to next audio track. @@ -4349,17 +4437,17 @@ Tekst codering is geen UTF-8. Start tijd is ingesteld tot na het eind van het media item - + Theme Layout Thema Layout - + The blue box shows the main area. Het blauwe vlak toont het hoofdgebied. - + The red box shows the footer. Het rode vlak toont het gebied voor de voettekst. @@ -4460,62 +4548,62 @@ Tekst codering is geen UTF-8. Instellen als al&gemene standaard - + %s (default) %s (standaard) - + You must select a theme to edit. Selecteer een thema om te bewerken. - + You are unable to delete the default theme. Het standaard thema kan niet worden verwijderd. - + Theme %s is used in the %s plugin. Thema %s wordt gebruikt in de %s plugin. - + You have not selected a theme. Selecteer een thema. - + Save Theme - (%s) Thema opslaan - (%s) - + Theme Exported Thema geëxporteerd - + Your theme has been successfully exported. Exporteren thema is gelukt. - + Theme Export Failed Exporteren thema is mislukt - + Your theme could not be exported due to an error. Thema kan niet worden geëxporteerd als gevolg van een fout. - + Select Theme Import File Selecteer te importeren thema bestand - + File is not a valid theme. Geen geldig thema bestand. @@ -4535,58 +4623,58 @@ Tekst codering is geen UTF-8. &Exporteer thema - + You must select a theme to rename. Selecteer een thema om te hernoemen. - + Rename Confirmation Bevestig hernoemen - + Rename %s theme? %s thema hernoemen? - + You must select a theme to delete. Selecteer een thema om te verwijderen. - + Delete Confirmation Bevestig verwijderen - + Delete %s theme? %s thema verwijderen? - + Validation Error Validatie fout - + A theme with this name already exists. Er bestaat al een thema met deze naam. - + OpenLP Themes (*.theme *.otz) OpenLP Thema's (*.theme *.otz) - + Copy of %s Copy of <theme name> Kopie van %s - + Theme Already Exists Theama bestaat al @@ -4594,222 +4682,222 @@ 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: Lettertype: - + 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: @@ -4819,47 +4907,47 @@ Tekst codering is geen UTF-8. Bewerk thema - %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. 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 - + Starting color: Beginkleur: - + Ending color: Eindkleur: - + Background color: Achtergrondkleur: - + Justify Uitvullen - + Layout Preview Layout voorbeeld - + Transparent Transparant @@ -4867,42 +4955,42 @@ Tekst codering is geen UTF-8. OpenLP.ThemesTab - + Global Theme Globaal thema - + Theme Level Thema niveau - + S&ong Level &Lied niveau - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Gebruik het thema bij elk lied in de database. Als een lied geen eigen thema heeft, gebruik dan het thema van de liturgie. Als de liturgie geen eigen thema heeft, gebruik dan het globale thema. - + &Service Level &Liturgie niveau - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Gebruik het thema van de liturgie en negeer de thema's van elk lied afzonderlijk. Als de liturgie geen eigen thema heeft, gebruik dan het globale thema. - + &Global Level &Globaal niveau - + Use the global theme, overriding any themes associated with either the service or the songs. Gebruik het globale thema en negeer alle thema's van de liturgie of de afzonderlijke liederen. @@ -5148,22 +5236,22 @@ Tekst codering is geen UTF-8. Versie - + Delete the selected item. Verwijder het geselecteerde item. - + Move selection up one position. Verplaats selectie een plek naar boven. - + Move selection down one position. Verplaats selectie een plek naar beneden. - + &Vertical Align: &Verticaal uitlijnen: @@ -5229,7 +5317,7 @@ Tekst codering is geen UTF-8. Selecteer minstens een %s bestand om te importeren. - + Welcome to the Bible Import Wizard Welkom bij de Bijbel Import Assistent @@ -5412,11 +5500,6 @@ Tekst codering is geen UTF-8. Reset live background. Herstel Live achtergrond. - - - &Split - &Splitsen - Split a slide into two only if it does not fit on the screen as one slide. @@ -5461,31 +5544,36 @@ Tekst codering is geen UTF-8. Search Themes... Search bar place holder text + Doorzoek thema... + + + + Optional &Split OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 en %2 - + %1, and %2 Locale list separator: end %1, en %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5560,17 +5648,17 @@ Tekst codering is geen UTF-8. Presenteren met: - + File Exists Bestand bestaat - + A presentation with that filename already exists. Er bestaat al een presentatie met die naam. - + This type of presentation is not supported. Dit soort presentatie wordt niet ondersteund. @@ -5580,17 +5668,17 @@ Tekst codering is geen UTF-8. Presentaties (%s) - + Missing Presentation Ontbrekende presentatie - + The Presentation %s no longer exists. De presentatie %s bestaat niet meer. - + The Presentation %s is incomplete, please reload. De presentatie %s is niet compleet, herladen aub. @@ -5671,11 +5759,6 @@ Tekst codering is geen UTF-8. Search Zoek - - - Back - Terug - Refresh @@ -5687,50 +5770,70 @@ Tekst codering is geen UTF-8. Leeg - + Show Toon - + Prev Vorige - + Next Volgende - + Text Tekst - + Show Alert Toon waarschuwingen - + Go Live Ga Live - + No Results Niets gevonden - + Options Opties - + Add to Service Voeg toe aan Liturgie + + + Home + + + + + Theme + Thema + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5864,7 +5967,7 @@ Tekst codering is geen UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Gegevens liedgebruik verwijderen @@ -5889,7 +5992,7 @@ Tekst codering is geen UTF-8. 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. Selecteer de datum tot wanneer de gegevens liedgebruik verwijderd moeten worden. Alle gegevens van voor die datum worden verwijderd. @@ -5897,22 +6000,22 @@ Tekst codering is geen UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Gegevens liedgebruik extraheren - + Select Date Range Selecteer periode - + to tot - + Report Location Locatie rapport @@ -6191,210 +6294,223 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens EasyWorship] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Lied bewerker - + &Title: &Titel: - + Alt&ernate title: Afwiss&elende titel: - + &Lyrics: Lied&tekst: - + &Verse order: &Vers volgorde: - + Ed&it All &Alles bewerken - + Title && Lyrics Titel && Liedtekst - + &Add to Song Voeg toe &aan lied - + &Remove Ve&rwijderen - + &Manage Authors, Topics, Song Books &Beheer auteurs, onderwerpen, liedboeken - + A&dd to Song Voeg toe &aan lied - + R&emove V&erwijderen - + Book: Boek: - + Number: Nummer: - + Authors, Topics && Song Book Auteurs, onderwerpen && liedboeken - + New &Theme Nieuw &Thema - + Copyright Information Copyright - + Comments Commentaren - + Theme, Copyright Info && Comments Thema, Copyright && Commentaren - + Add Author Voeg auteur toe - + This author does not exist, do you want to add them? Deze auteur bestaat nog niet, toevoegen? - + This author is already in the list. Deze auteur staat al in de lijst. - + 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. Geen auteur geselecteerd. Kies een auteur uit de lijst of voeg er een toe door de naam in te typen en op de knop "Voeg auteur toe" te klikken. - + Add Topic Voeg onderwerp toe - + This topic does not exist, do you want to add it? Dit onderwerp bestaat nog niet, toevoegen? - + This topic is already in the list. Dit onderwerp staat al in de lijst. - + 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. Geen geldig onderwerp geselecteerd. Kies een onderwerp uit de lijst of type een nieuw onderwerp en klik op "Nieuw onderwerp toevoegen". - + You need to type in a song title. Vul de titel van het lied in. - + You need to type in at least one verse. Vul minstens de tekst van één couplet in. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. De volgorde van de coupletten klopt niet. Er is geen couplet dat overeenkomt met %s. Wel zijn %s beschikbaar. - + Add Book Voeg boek toe - + This song book does not exist, do you want to add it? Dit liedboek bestaat nog niet, toevoegen? - + You need to have an author for this song. Iemand heeft dit lied geschreven. - + You need to type some text in to the verse. Er moet toch een tekst zijn om te zingen. - + Linked Audio Gekoppelde audio - + Add &File(s) Bestand(en) &toevoegen - + Add &Media Voeg &Media toe - + Remove &All &Alles verwijderen - + Open File(s) Open bestand(en) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Let op:</strong> Niet alle verzen worden gebruikt. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. Ongeldige vers volgorde. Er zijn geen verzen die overeenkomen met %s. Geldig zijn %s. @@ -6625,28 +6741,28 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens CCLI SongSelect Files - + CCLI SongSelect bestanden EasySlides XML File - + EasySlides XML bestanden EasyWorship Song Database - + EasyWorship Lied Database SongsPlugin.MediaFilesForm - + Select Media File(s) Selecteer media bestand(en) - + Select one or more audio files from the list below, and click OK to import them into this song. Selecteer een of meerdere audiobestanden uit de lijst, en klik OK om te importeren in dit lied. @@ -6664,7 +6780,7 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens Liedtekst - + CCLI License: CCLI Licentie: @@ -6687,7 +6803,7 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens Beheer de lijst met auteurs, onderwerpen en liedboeken. - + copy For song cloning kopieer @@ -6695,27 +6811,27 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens Search Titles... - + Doorzoek titels... Search Entire Song... - + Doorzoek gehele lied... Search Lyrics... - + Doorzoek liedtekst... Search Authors... - + Doorzoek auteurs... Search Song Books... - + Doorzoek liedboeken... @@ -6781,12 +6897,12 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: De volgende liederen konden niet worden geïmporteerd: @@ -6946,8 +7062,8 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens - Add missing songs when opening service - Ontbrekende liederen toevoegen bij het openen van de liturgie + Import missing songs from service files + diff --git a/resources/i18n/pl.ts b/resources/i18n/pl.ts index 3d1d7abba..363356451 100644 --- a/resources/i18n/pl.ts +++ b/resources/i18n/pl.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message - + Alert &text: - + &New - + &Save - + Displ&ay - + Display && Cl&ose @@ -79,7 +79,7 @@ - + &Parameter: @@ -117,32 +117,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font - + Font name: - + Font color: - + Background color: - + Font size: - + Alert timeout: @@ -659,41 +659,86 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + + Bible Exists + + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -807,80 +852,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: - + Corresponding name: - + Show Books From - + Old Testament - + New Testament - + Apocrypha @@ -912,6 +949,75 @@ Bible should be displayed in the Bible search: + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + + + + + Version name: + + + + + Copyright: + + + + + Permissions: + + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -954,167 +1060,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + 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. - + Web Download - + Location: - + Crosswalk - + BibleGateway - + Bible: - + Download Options - + Server: - + Username: - + Password: - + Proxy Server (Optional) - + License Details - + Set up the Bible's license details. - + Version name: - + Copyright: - + Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - + Bibleserver - + Permissions: - + Bible file: - + Books file: - + Verses file: - + openlp.org 1.x Bible Files - + Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -1123,17 +1229,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: @@ -1149,90 +1255,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick - + Find: - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - + Second: - + Scripture Reference - + Toggle to keep or clear the previous results. - + 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. - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1246,12 +1357,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1483,42 +1594,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: @@ -1533,12 +1644,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + Ed&it All - + Insert Slide @@ -1637,33 +1748,33 @@ 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. @@ -1671,18 +1782,18 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1808,22 +1919,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1851,17 +1962,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits - + License - + Contribute @@ -1871,17 +1982,17 @@ Should OpenLP upgrade now? - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -1946,7 +2057,7 @@ Final Credit - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -1957,7 +2068,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -1966,62 +2077,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: - + Image file: - + Open File @@ -2031,124 +2142,124 @@ Portions copyright © 2004-2012 %s - + Preview items when clicked in Media Manager - + Click to select a color. - + Browse for an image file to display. - + Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2156,33 +2267,33 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred - + 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. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File @@ -2466,9 +2577,14 @@ Version: %s Custom Slides + + + Finish + + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2477,64 +2593,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2778,40 +2889,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2822,6 +2903,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2847,309 +2948,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 @@ -3160,125 +3261,125 @@ 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 - + 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. @@ -3287,32 +3388,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3342,7 +3443,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected @@ -3429,27 +3530,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive @@ -3472,12 +3573,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -3485,7 +3586,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options @@ -3500,47 +3601,47 @@ Suffix not supported - + Zoom In - + Zoom Out - + Zoom Original - + 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 @@ -3550,12 +3651,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3589,7 +3690,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3597,188 +3698,188 @@ Suffix not supported OpenLP.ServiceManager - + 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. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not 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 - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3798,72 +3899,72 @@ The content encoding is not UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3871,7 +3972,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3887,12 +3988,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -3907,32 +4008,32 @@ The content encoding is not UTF-8. - + 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. @@ -3947,7 +4048,7 @@ The content encoding is not UTF-8. - + Configure Shortcuts @@ -4114,11 +4215,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4201,17 +4297,17 @@ The content encoding is not UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4312,62 +4408,62 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. @@ -4387,58 +4483,58 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4446,222 +4542,222 @@ 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: @@ -4671,47 +4767,47 @@ The content encoding is not UTF-8. - + 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: - + Justify - + Layout Preview - + Transparent @@ -4719,42 +4815,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -5000,22 +5096,22 @@ The content encoding is not UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5081,7 +5177,7 @@ The content encoding is not UTF-8. - + Welcome to the Bible Import Wizard @@ -5264,11 +5360,6 @@ The content encoding is not UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5315,29 +5406,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5412,17 +5508,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5432,17 +5528,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5523,11 +5619,6 @@ The content encoding is not UTF-8. Search - - - Back - - Refresh @@ -5539,50 +5630,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live - + No Results - + Options - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5716,7 +5827,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5741,7 +5852,7 @@ The content encoding is not UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5749,22 +5860,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6036,210 +6147,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6486,12 +6610,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6509,7 +6633,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6533,7 +6657,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6627,12 +6751,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6792,7 +6916,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/pt_BR.ts b/resources/i18n/pt_BR.ts index 994668220..46644c694 100644 --- a/resources/i18n/pt_BR.ts +++ b/resources/i18n/pt_BR.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Mensagem de Alerta - + Alert &text: &Texto de Alerta: - + &New &Novo - + &Save &Salvar - + Displ&ay &Exibir - + Display && Cl&ose Exibir && &Fechar @@ -79,7 +79,7 @@ Você não digitou nenhum texto para o seu alerta. Por favor digite algum texto antes de clicar em Novo. - + &Parameter: &Parâmetro: @@ -119,32 +119,32 @@ Deseja continuar mesmo assim? AlertsPlugin.AlertsTab - + Font Fonte - + Font name: Nome da fonte: - + Font color: Cor da fonte: - + Background color: Cor de fundo: - + Font size: Tamanho da fonte: - + Alert timeout: Tempo limite para o Alerta: @@ -661,42 +661,87 @@ Deseja continuar mesmo assim? :|v|V|verso|versos;;-|até;;,|e;;fim + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Você deve especificar um nome de versão para a sua Bíblia. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Você precisa definir os direitos autorais da sua Bíblia. Traduções em Domínio Público devem ser marcadas como tal. + + + + Bible Exists + Bíblia Existe + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Esta Bíblia já existe. Pro favor, importe uma Bíblia diferente ou apague a existente primeiro. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Erro de Referência na Escritura - + Web Bible cannot be used Não é possível usar a Bíblia Online - + Text Search is not available with Web Bibles. A Pesquisa de Texto não está disponível para Bíblias Online. - + 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. Você não digitou uma palavra-chave de pesquisa. Você pode separar diferentes palavras-chave com um espaço para procurar por todas as palavras-chave e pode separá-las com uma vírgula para pesquisar por alguma delas. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Não há Bíblias instaladas atualmente. Por favor, utilize o Assistente de Importação para instalar uma ou mais Bíblias. - + No Bibles Available Nenhum Bíblia Disponível - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,83 +871,72 @@ Please clear this edit line to use the default value. Eles devem ser separados por uma barra vertical "|". Por favor, limpe esta linha edição para usar o valor padrão. - - - Preferred Bookname Language - Idioma Preferido de Nomes de Livros - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Selecione o idioma em que os nomes dos livros da Bíblia devem ser exibidos na busca de Bíblia - - - - Bible language - Idioma da Bíblia - - - - Application language - Idioma do Aplicativo - English Inglês - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Múltiplas opções: -Idioma da Bíblia - o idioma em que os nomes dos lívros da Bíblia foram importados -Idioma do aplicativo - o idioma que escolheu para OpenLP -Inglês - usar sempre nomes de livro em Inglês + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Selecione o Nome do Livro - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Não foi encontrado um correspondente para o nome do livro a seguir. Por favor, selecione o nome em Inglês a partir da lista. - + Current name: Nome atual: - + Corresponding name: Nome correspondente: - + Show Books From Mostrar Livros do - + Old Testament Antigo Testamento - + New Testament Novo Testamento - + Apocrypha Apócrifos @@ -934,6 +968,75 @@ Inglês - usar sempre nomes de livro em Inglês Importando versículos... concluído. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Detalhes da Licença + + + + Version name: + Nome da Versão: + + + + Copyright: + Direito Autoral: + + + + Permissions: + Permissões: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -976,167 +1079,167 @@ Inglês - usar sempre nomes de livro em Inglês BiblesPlugin.ImportWizardForm - + Bible Import Wizard Assistente de Importação de Bíblia - + 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. Este assistente irá ajudá-lo a importar Bíblias de uma variedade de formatos. Clique no botão avançar abaixo para começar o processo selecionando o formato a ser importado. - + Web Download Download da Internet - + Location: Localização: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bíblia: - + Download Options Opções de Transferência - + Server: Servidor: - + Username: Usuário: - + Password: Senha: - + Proxy Server (Optional) Servidor Proxy (Opcional) - + License Details Detalhes da Licença - + Set up the Bible's license details. Configurar detalhes de licença da Bíblia. - + Version name: Nome da Versão: - + Copyright: Direito Autoral: - + Please wait while your Bible is imported. Por favor aguarde enquanto a sua Bíblia é importada. - + You need to specify a file with books of the Bible to use in the import. Você deve especificar um arquivo com livros da Bíblia para usar na importação. - + You need to specify a file of Bible verses to import. Você deve especificar um arquivo de versículos da Bíblia para importar. - + You need to specify a version name for your Bible. Você deve especificar um nome de versão para a sua Bíblia. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Você precisa definir os direitos autorais da sua Bíblia. Traduções em Domínio Público devem ser marcadas como tal. - + Bible Exists Bíblia Existe - + This Bible already exists. Please import a different Bible or first delete the existing one. Esta Bíblia já existe. Pro favor, importe uma Bíblia diferente ou apague a existente primeiro. - + Your Bible import failed. A sua Importação de Bíblia falhou. - + CSV File Arquivo CSV - + Bibleserver Bibleserver - + Permissions: Permissões: - + Bible file: Arquivo de Bíblia: - + Books file: Arquivo de Livros: - + Verses file: Arquivo de Versículos: - + openlp.org 1.x Bible Files Arquivos de Bíblia do openlp.org 1.x - + Registering Bible... Registrando Bíblia... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Bíblia registrada. Por favor, observe que os verísulos serão baixados de acordo @@ -1146,17 +1249,17 @@ com o usu, portanto uma conexão com a internet é necessária. BiblesPlugin.LanguageDialog - + Select Language Selecione Idioma - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP não pôde determinar o idioma desta tradução da Bíblia. Por favor, selecione o idioma na lista abaixo. - + Language: Idioma: @@ -1172,90 +1275,95 @@ com o usu, portanto uma conexão com a internet é necessária. BiblesPlugin.MediaItem - + Quick Rápido - + Find: Localizar: - + Book: Livro: - + Chapter: Capítulo: - + Verse: Versículo: - + From: De: - + To: Até: - + Text Search Pesquisar Texto - + Second: Segundo: - + Scripture Reference Referência da Escritura - + Toggle to keep or clear the previous results. Alternar entre manter ou limpar resultados anteriores. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Você não pode combinar os resultados de buscas de versículo Bíblicos simples e duplo. 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1269,12 +1377,12 @@ com o usu, portanto uma conexão com a internet é necessária. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Detectando codificação (isto pode levar alguns minutos)... - + Importing %s %s... Importing <book name> <chapter>... Importando %s %s... @@ -1512,42 +1620,42 @@ Observe, que versículos das Bíblias Internet serão transferidos sob demanda e CustomPlugin.EditCustomForm - + Edit Custom Slides Editar Slides Personalizados - + &Title: &Título: - + Add a new slide at bottom. Adicionar um novo slide no final. - + Edit the selected slide. Editar o slide selecionado. - + Edit all the slides at once. Editar todos os slides de uma vez. - + Split a slide into two by inserting a slide splitter. Dividir um slide em dois, inserindo um divisor de slides. - + The&me: Te&ma: - + &Credits: &Créditos: @@ -1562,12 +1670,12 @@ Observe, que versículos das Bíblias Internet serão transferidos sob demanda e Você deve adicionar pelo menos um slide - + Ed&it All &Editar Todos - + Insert Slide Inserir Slide @@ -1665,34 +1773,34 @@ 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. Não há nenhum item de exibição para corrigir. @@ -1700,19 +1808,19 @@ Mesmo assim, deseja continuar adicionando as outras imagens? ImagesPlugin.ImageTab - + Background Color Cor do Plano de Fundo - + Default Color: Cor Padrão: - - Provides border where image is not the correct dimensions for the screen when resized. - Provê uma borda se a imagem não estiver nas dimensões corretas da tela quando redimensionada. + + Visible background for images with aspect ratio different to screen. + @@ -1837,22 +1945,22 @@ Mesmo assim, deseja continuar adicionando as outras imagens? MediaPlugin.MediaTab - + Available Media Players Reprodutores de Mídia Disponíveis - + %s (unavailable) %s (indisponível) - + Player Order Sequência de Reprodução - + Allow media player to be overridden Permitir que o reprodutor de mídia seja alterado @@ -1882,17 +1990,17 @@ OpenLP deve atualizar agora? OpenLP.AboutForm - + Credits Créditos - + License Licença - + Contribute Contribuir @@ -1902,17 +2010,17 @@ OpenLP deve atualizar agora? compilação %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Este programa é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre; na versão 2 da Licença. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Este programa é distribuido na esperança que será útil, mas SEM NENHUMA GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO PARA UM DETERMINADO FIM. Veja abaixo para maiores detalhes. - + Project Lead %s @@ -2037,7 +2145,7 @@ Créditos Finais pela Graça ele nos libertou. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2054,7 +2162,7 @@ Conheça mais sobre OpenLP: http://openlp.org/ O OpenLP é escrito e mantido por voluntários. Se você gostaria de ver mais softwares Cristãos gratuítos sendo escritos, por favor, considere contribuir usando o botão abaixo. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2064,62 +2172,62 @@ Porções copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Configurações da Interface - + Number of recent files to display: Número de arquivos recentes a serem exibidos: - + Remember active media manager tab on startup Lembrar aba ativa do gerenciador de mídia ao iniciar - + Double-click to send items straight to live Clicar duas vezes para diretamente projetar itens - + Expand new service items on creation Expandir novos itens do culto ao serem criados - + Enable application exit confirmation Habilitar confirmação de saída do programa - + Mouse Cursor Ponteiro do Mouse - + Hide mouse cursor when over display window Ocultar o cursor do mouse quando estiver sobre a tela de projeção - + Default Image Imagem Padrão - + Background color: Cor do plano de fundo: - + Image file: Arquivo de Imagem: - + Open File Abrir Arquivo @@ -2129,124 +2237,124 @@ Porções copyright © 2004-2012 %s Avançado - + Preview items when clicked in Media Manager Pré-visualizar itens quando clicados no Gerenciador de Mídia - + Click to select a color. Clique para selecionar uma cor. - + Browse for an image file to display. Procurar um arquivo de imagem para exibir. - + Revert to the default OpenLP logo. Reverter ao logotipo padrão OpenLP. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Culto %Y-%m-%d %H-%M - + Default Service Name Nome Padrão de Culto - + Enable default service name Habilitar nome padrão de culto - + Date and Time: Data e Hora: - + Monday Segunda-feira - + Tuesday Terça-feira - + Wednesday Quarta-feira - + Thurdsday Quinta-feira - + Friday Sexta-feira - + Saturday Sábado - + Sunday Domingo - + Now Agora - + Time when usual service starts. Hora em que o culto normal se inicia. - + Name: Nome: - + Consult the OpenLP manual for usage. Consulte o manual OpenLP para uso. - + Revert to the default service name "%s". Reverter para o nome padrão de culto "%s". - + Example: Exemplo: - + X11 X11 - + Bypass X11 Window Manager Desativar Gerenciador de Janelas X11 - + Syntax error. Erro de sintaxe. @@ -2254,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Ocorreu um Erro - + 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. Ops! O OpenLP encontrou um problema e não pôde recuperar-se. O texto na caixa abaixo contém informações que podem ser úteis para os desenvolvedores do OpenLP, então, por favor, envie um e-mail para bugs@openlp.org, junto com uma descrição detalhada daquilo que você estava fazendo quando o problema ocorreu. - + Send E-Mail Enviar E-Mail - + Save to File Salvar para um Arquivo - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Por favor, descreva o que você estava fazendo para causar este erro (Mínimo de 20 caracteres) - + Attach File Anexar Arquivo @@ -2593,79 +2701,75 @@ Agradecemos se for possível escrever seu relatório em inglês. Custom Slides Slides Personalizados + + + Finish + Finalizar + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Não foi possível encontrar uma conexão com a internet. O Assistente de Primeira Execução necessita de uma conexão para fazer a transferência de músicas, Bíblias e temas. Pressione o botão finalizar para iniciar o OpenLP com as configurações iniciais e sem arquivos de exemplo. - -Para iniciar o Assistente de Primeira Execução novamente e importar estes arquivos de exemplo mais tarde, verifique a sua conexão com a internet e execute o assistente novamente selecionando "Ferramentas/Iniciar o Assistente de Primeira Execução novamente" no OpenLP. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -Para cancelar completamente o Assistente de Primeira Execução (e não iniciar o OpenLP), clique agora no botão Cancelar. - - - - Finish - Finalizar +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Configurar Etiquetas de Formatação - + Edit Selection Editar Seleção - + Save Salvar - + Description Descrição - + Tag Tag - + Start tag Tag Inicial - + End tag Tag Final - + Tag Id Id do Tag - + Start HTML Iniciar HTML - + End HTML Finalizar HTML @@ -2909,40 +3013,10 @@ Para cancelar completamente o Assistente de Primeira Execução (e não iniciar Iniciar áudio de fundo em pausa - + Service Item Slide Limits Limites de Slide de Itens de Culto - - - &End Slide - Slide &Final - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - As setas para cima e para baixo param nos slides iniciais de finais de cada Item de Culto. - - - - &Wrap Slide - Slide &Contínuo - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - As setas para cima e para baixo continuam no outro extremo de cada Item de Culto. - - - - &Next Item - Item &Seguinte - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - As setas para cima e para baixo passam para o Item de Culto seguinte ou anterior a partir dos slide iniciais ou finais de cada Item de Culto. - Override display position: @@ -2953,6 +3027,26 @@ Para cancelar completamente o Assistente de Primeira Execução (e não iniciar Repeat track list Repetir lista de faixas + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2978,287 +3072,287 @@ Para cancelar completamente o Assistente de Primeira Execução (e não iniciar 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/. @@ -3267,22 +3361,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 @@ -3293,82 +3387,82 @@ 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? - + 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. - + &Recent Files Arquivos &Recentes - + L&ock Panels Tr&avar Painéis - + Prevent the panels being moved. Previne que os painéis sejam movidos. - + Re-run First Time Wizard Iniciar o Assistente de Primeira Execução novamente - + Re-run the First Time Wizard, importing songs, Bibles and themes. Iniciar o Assistente de Primeira Execução novamente importando músicas, Bíblia e temas. - + Re-run First Time Wizard? Deseja iniciar o Assistente de Primeira Execução novamente? - + 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. @@ -3377,43 +3471,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Executar o assistente novamente poderá fazer mudanças na sua configuração atual, adicionar músicas à sua base existente e mudar o seu tema padrão. - + Clear List Clear List of recent files Limpar Lista - + Clear the list of recent files. Limpar a lista de arquivos recentes. - + Configure &Formatting Tags... Configurar Etiquetas de &Formatação... - + Export OpenLP settings to a specified *.config file Exportar as configurações do OpenLP para um arquivo *.config - + Settings Configurações - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Importar as configurações do OpenLP de um arquivo *.config que foi previamente exportado neste ou em outro computador - + Import settings? Importar configurações? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3426,32 +3520,32 @@ Importar as configurações irá fazer mudanças permanentes no seu OpenLP. Importar configurações incorretas pode causar problemas de execução ou que o OpenLP finalize de forma inesperada. - + Open File Abrir Arquivo - + OpenLP Export Settings Files (*.conf) Arquivo de Configurações do OpenLP (*.conf) - + Import settings Importar configurações - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. O OpenLP irá finalizar. As configurações importadas serão aplicadas na próxima execução do OpenLP. - + Export Settings File Exportar arquivo de configurações - + OpenLP Export Settings File (*.conf) Arquivo de Configurações do OpenLP (*.conf) @@ -3485,7 +3579,7 @@ Banco de Dados: %s OpenLP.MediaManagerItem - + No Items Selected Nenhum Item Selecionado @@ -3573,27 +3667,27 @@ Sufixo não suportado OpenLP.PluginForm - + Plugin List Lista de Plugins - + Plugin Details Detalhes do Plugin - + Status: Status: - + Active Ativo - + Inactive Inativo @@ -3616,12 +3710,12 @@ Sufixo não suportado OpenLP.PrintServiceDialog - + Fit Page Ajustar à Página - + Fit Width Ajustar à Largura @@ -3629,7 +3723,7 @@ Sufixo não suportado OpenLP.PrintServiceForm - + Options Opções @@ -3644,47 +3738,47 @@ Sufixo não suportado Copiar como HTML - + Zoom In Aumentar o Zoom - + Zoom Out Diminuir o Zoom - + Zoom Original Zoom Original - + Other Options Outras Opções - + Include slide text if available Incluir texto do slide se disponível - + Include service item notes Incluir notas do item de culto - + Include play length of media items Incluir duração dos itens de mídia - + Add page break before each text item Adicionar uma quebra de página antes de cada item de texto - + Service Sheet Folha de Culto @@ -3694,12 +3788,12 @@ Sufixo não suportado Imprimir - + Title: Título: - + Custom Footer Text: Texto de Rodapé Customizado: @@ -3733,7 +3827,7 @@ Sufixo não suportado OpenLP.ServiceItemEditForm - + Reorder Service Item Reordenar Item de Culto @@ -3741,189 +3835,189 @@ Sufixo não suportado OpenLP.ServiceManager - + Move to &top Mover para o &topo - + Move item to the top of the service. Mover item para o topo do culto. - + Move &up Mover para &cima - + Move item up one position in the service. Mover item uma posição para cima no culto. - + Move &down Mover para &baixo - + Move item down one position in the service. Mover item uma posição para baixo no culto. - + Move to &bottom Mover para o &final - + Move item to the end of the service. Mover item para o final do culto. - + &Delete From Service &Excluir do Culto - + Delete the selected item from the service. Excluir o item selecionado do culto. - + &Add New Item &Adicionar um Novo Item - + &Add to Selected Item &Adicionar ao Item Selecionado - + &Edit Item &Editar Item - + &Reorder Item &Reordenar Item - + &Notes &Anotações - + &Change Item Theme &Alterar Tema do Item - + OpenLP Service Files (*.osz) Arquivos de Culto do OpenLP (*.osz) - + 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. - + Missing Display Handler Faltando o Manipulador de Exibição - + Your item cannot be displayed as there is no handler to display it O seu item não pode ser exibido porque não existe um manipulador para exibí-lo - + Your item cannot be displayed as the plugin required to display it is missing or inactive O item não pode ser exibido porque o plugin necessário para visualizá-lo está ausente ou está desativado - + &Expand all &Expandir todos - + Expand all the service items. Expandir todos os itens do culto. - + &Collapse all &Recolher todos - + Collapse all the service items. Recolher todos os itens do culto. - + Open File Abrir Arquivo - + Moves the selection down the window. Move a seleção para baixo dentro da janela. - + Move up Mover para cima - + Moves the selection up the window. Move a seleção para cima dentro da janela. - + Go Live Projetar - + Send the selected item to Live. Enviar o item selecionado para a Projeção. - + &Start Time &Horário Inicial - + Show &Preview Exibir &Pré-visualização - + Show &Live Exibir &Projeção - + Modified Service Culto Modificado - + The current service has been modified. Would you like to save this service? O culto atual foi modificada. Você gostaria de salvar este culto? @@ -3943,72 +4037,72 @@ A codificação do conteúdo não é UTF-8. Duração: - + Untitled Service Culto Sem Nome - + 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 - + Load an existing service. Carregar um culto existente. - + Save this service. Salvar este culto. - + Select a theme for the service. 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. - + Service File Missing Arquivo do Culto não encontrado - + Slide theme Tema do Slide - + Notes Notas - + Edit Editar - + Service copy only Somente cópia de culto @@ -4016,7 +4110,7 @@ A codificação do conteúdo não é UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Anotações do Item de Culto @@ -4032,12 +4126,12 @@ A codificação do conteúdo não é UTF-8. OpenLP.ShortcutListDialog - + Action Ação - + Shortcut Atalho @@ -4052,32 +4146,32 @@ A codificação do conteúdo não é UTF-8. O atalho "%s" já está designado para outra ação, escolha um atalho diferente. - + Alternate Alternativo - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Selecione uma ação e clique em um dos botões abaixo para iniciar a captura de um novo atalho primário ou alternativo, respectivamente. - + Default Padrão - + Custom Personalizado - + Capture shortcut. Capturar atalho. - + Restore the default shortcut of this action. Restaurar o atalho padrão desta ação. @@ -4092,7 +4186,7 @@ A codificação do conteúdo não é UTF-8. Deseja restaurar todos os atalhos ao seus padrões? - + Configure Shortcuts Configurar Atalhos @@ -4259,11 +4353,6 @@ A codificação do conteúdo não é UTF-8. Background Audio Som de Fundo - - - Next Track - Faixa Seguinte - Go to next audio track. @@ -4346,17 +4435,17 @@ A codificação do conteúdo não é UTF-8. O tempo inicial está após o fim do item de mídia - + Theme Layout Disposição do Tema - + The blue box shows the main area. A caixa azul mostra a área principal. - + The red box shows the footer. A caixa vermelha mostra o rodapé. @@ -4457,62 +4546,62 @@ A codificação do conteúdo não é UTF-8. Definir como Padrão &Global - + %s (default) %s (padrão) - + You must select a theme to edit. Você precisa selecionar um tema para editar. - + You are unable to delete the default theme. Você não pode apagar o tema padrão. - + Theme %s is used in the %s plugin. O tema %s é usado no plugin %s. - + You have not selected a theme. Você não selecionou um tema. - + Save Theme - (%s) Salvar Tema - (%s) - + Theme Exported Tema Exportado - + Your theme has been successfully exported. Seu tema foi exportado com sucesso. - + Theme Export Failed Falha ao Exportar Tema - + Your theme could not be exported due to an error. O tema não pôde ser exportado devido a um erro. - + Select Theme Import File Selecionar Arquivo de Importação de Tema - + File is not a valid theme. O arquivo não é um tema válido. @@ -4532,58 +4621,58 @@ A codificação do conteúdo não é UTF-8. &Exportar Tema - + You must select a theme to rename. Você precisa selecionar um tema para renomear. - + Rename Confirmation Confirmar Renomeação - + Rename %s theme? Renomear o tema %s? - + You must select a theme to delete. Você precisa selecionar um tema para excluir. - + Delete Confirmation Confirmar Exclusão - + Delete %s theme? Apagar o tema %s? - + Validation Error Erro de Validação - + A theme with this name already exists. Já existe um tema com este nome. - + OpenLP Themes (*.theme *.otz) Temas do OpenLP (*.theme *.otz) - + Copy of %s Copy of <theme name> Cópia do %s - + Theme Already Exists Tema Já Existe @@ -4591,222 +4680,222 @@ 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: @@ -4816,47 +4905,47 @@ A codificação do conteúdo não é UTF-8. Editar Tema - %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. 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é - + Starting color: Cor inicial: - + Ending color: Cor final: - + Background color: Cor do Plano de Fundo: - + Justify Justificar - + Layout Preview Previsualizar a Disposição - + Transparent Transparente @@ -4864,42 +4953,42 @@ A codificação do conteúdo não é UTF-8. OpenLP.ThemesTab - + Global Theme Tema Global - + Theme Level Nível do Tema - + S&ong Level Nível de &Música - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Use o tema de cada música na base de dados. Se uma música não tiver um tema associado a ela, então usar o tema do culto. Se o culto não tiver um tema, então usar o tema global. - + &Service Level Nível de &Culto - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Usar o tema do culto, ignorando qualquer temas das músicas individuais. Se o culto não tiver um tema, então usar o tema global. - + &Global Level Nível &Global - + Use the global theme, overriding any themes associated with either the service or the songs. Usar o tema global, ignorando qualquer tema associado ao culto ou às músicas. @@ -5145,22 +5234,22 @@ A codificação do conteúdo não é UTF-8. Versão - + Delete the selected item. Excluir o item selecionado. - + Move selection up one position. Mover a seleção para cima em uma posição. - + Move selection down one position. Mover a seleção para baixo em uma posição. - + &Vertical Align: Alinhamento &Vertical: @@ -5226,7 +5315,7 @@ A codificação do conteúdo não é UTF-8. Você precisa especificar pelo menos um arquivo %s para importar. - + Welcome to the Bible Import Wizard Bem Vindo ao Assistente de Importação de Bíblias @@ -5409,11 +5498,6 @@ A codificação do conteúdo não é UTF-8. Reset live background. Reverter fundo da projeção. - - - &Split - &Dividir - Split a slide into two only if it does not fit on the screen as one slide. @@ -5460,29 +5544,34 @@ A codificação do conteúdo não é UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 e %2 - + %1, and %2 Locale list separator: end %1, e %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5557,17 +5646,17 @@ A codificação do conteúdo não é UTF-8. Apresentar usando: - + File Exists O Arquivo já Existe - + A presentation with that filename already exists. Já existe uma apresentação com este nome. - + This type of presentation is not supported. Este tipo de apresentação não é suportado. @@ -5577,17 +5666,17 @@ A codificação do conteúdo não é UTF-8. Apresentações (%s) - + Missing Presentation Apresentação Não Encontrada - + The Presentation %s no longer exists. A Apresentação %s não existe mais. - + The Presentation %s is incomplete, please reload. A Apresentação %s está incompleta, por favor recarregue-a. @@ -5668,11 +5757,6 @@ A codificação do conteúdo não é UTF-8. Search Pesquisar - - - Back - Voltar - Refresh @@ -5684,50 +5768,70 @@ A codificação do conteúdo não é UTF-8. Desativar - + Show Exibir - + Prev Ant - + Next Seg - + Text Texto - + Show Alert Mostrar Alerta - + Go Live Projetar - + No Results Nenhum Resultado - + Options Opções - + Add to Service Adicionar ao Culto + + + Home + + + + + Theme + Tema + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5861,7 +5965,7 @@ A codificação do conteúdo não é UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Excluir Dados de Registro das Músicas @@ -5886,7 +5990,7 @@ A codificação do conteúdo não é UTF-8. 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. Selecione uma data limite para que os dados de uso de músicas seja excluído. Todos os registros antes desta data será excluídos permanentemente. @@ -5894,22 +5998,22 @@ A codificação do conteúdo não é UTF-8. 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 @@ -6188,210 +6292,223 @@ A codificação é responsável pela correta representação dos caracteres. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Editor de Músicas - + &Title: &Título: - + Alt&ernate title: Título &Alternativo: - + &Lyrics: &Letra: - + &Verse order: Ordem das &estrofes: - + Ed&it All &Editar Todos - + Title && Lyrics Título && Letra - + &Add to Song &Adicionar à Música - + &Remove &Remover - + &Manage Authors, Topics, Song Books &Gerenciar Autores, Assuntos, Hinários - + A&dd to Song A&dicionar uma Música - + R&emove R&emover - + Book: Hinário: - + Number: Número: - + Authors, Topics && Song Book Autores, Assuntos && Hinários - + New &Theme Novo &Tema - + Copyright Information Direitos Autorais - + Comments Comentários - + Theme, Copyright Info && Comments Tema, Direitos Autorais && Comentários - + Add Author Adicionar Autor - + This author does not exist, do you want to add them? Este autor não existe, deseja adicioná-lo? - + This author is already in the list. Este autor já está na lista. - + You have not selected a valid author. Either select an author from the list, or type in a new author and click the "Add Author to Song" button to add the new author. Você não selecionou um autor válido. Selecione um autor da lista, ou digite um novo autor e clique em "Adicionar Autor à Música" para adicioná-lo. - + Add Topic Adicionar Assunto - + This topic does not exist, do you want to add it? Este assunto não existe, deseja adicioná-lo? - + This topic is already in the list. Este assunto já está na lista. - + 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. Você não selecionou um assunto válido. Selecione um assunto da lista ou digite um novo assunto e clique em "Adicionar Assunto à Música" para adicioná-lo. - + You need to type in a song title. Você deve digitar um título para a música. - + You need to type in at least one verse. Você deve digitar ao menos um verso. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. A ordem das estrofes é inválida. Não há estrofe correspondente a %s. Valores válidos são %s. - + Add Book Adicionar Hinário - + This song book does not exist, do you want to add it? Este hinário não existe, deseja adicioná-lo? - + You need to have an author for this song. Você precisa ter um autor para esta música. - + You need to type some text in to the verse. Você precisa digitar algum texto na estrofe. - + Linked Audio Áudio Ligado - + Add &File(s) Adicionar &Arquivo(s) - + Add &Media Adicionar &Mídia - + Remove &All Excluir &Todos - + Open File(s) Abrir Arquivo(s) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Aviso:</strong> Nem todos os versos estão em uso. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. A ordem dos versos está inválido. Não há versos correspondentes a %s. Entradas válidas são %s. @@ -6638,12 +6755,12 @@ EasyWorship] SongsPlugin.MediaFilesForm - + Select Media File(s) Selecionar Arquivo(s) de Mídia - + Select one or more audio files from the list below, and click OK to import them into this song. Selecione um ou mais arquivos de áudio da lista abaixo. Clique OK para importá-los à esta música. @@ -6661,7 +6778,7 @@ EasyWorship] Letras - + CCLI License: Licença CCLI: @@ -6684,7 +6801,7 @@ EasyWorship] Gerencia a lista de autores, tópicos e hinários. - + copy For song cloning copiar @@ -6778,12 +6895,12 @@ EasyWorship] SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: As seguintes músicas não puderam ser importadas: @@ -6943,8 +7060,8 @@ EasyWorship] - Add missing songs when opening service - Adicionar músicas ausentes ao abrir culto + Import missing songs from service files + diff --git a/resources/i18n/ru.ts b/resources/i18n/ru.ts index 461b6db2f..8106b50b3 100644 --- a/resources/i18n/ru.ts +++ b/resources/i18n/ru.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Сообщение оповещения - + Alert &text: Текст &оповещения: - + &New &Новый - + &Save &Сохранить - + Displ&ay Показ&ать - + Display && Cl&ose Показать и за&крыть @@ -79,7 +79,7 @@ Ві не указали текста для вашего оповещения. Пожалуйста введите текст. - + &Parameter: П&араметр: @@ -118,32 +118,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font Шрифт - + Font name: Шрифт: - + Font color: Цвет: - + Background color: Цвет фона: - + Font size: Размер: - + Alert timeout: Таймаут оповещения: @@ -660,42 +660,87 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Вам необходимо указать название перевода Библии. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Вам необходимо указать авторские права Библии. Переводы Библии находящиеся в свободном доступе должны быть помечены как таковые. + + + + Bible Exists + Библия существует + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Библия уже существует. Выполните импорт другой Библии или удалите существующую. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Ошибка ссылки на Писание - + Web Bible cannot be used Веб-Библия не может быть использована - + Text Search is not available with Web Bibles. Текстовый поиск не доступен для Веб-Библий. - + 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. Вы не указали ключевое слово для поиска. Вы можете разделить разичные ключевые слова пробелами чтобы осуществить поиск по фразе, а также можете использовать запятые, чтобы искать по каждому из указанных ключевых слов. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. В настоящее время ни одна Библия не установлена. Пожалуйста, воспользуйтесь Мастером Импорта чтобы установить одну Библию или более. - + No Bibles Available Библии отсутствуют - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -810,80 +855,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English Русский - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name Выберите название книги - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Книге не было найдено внутренне соответствие. Пожалуйста, выберите соответствующее английское название из списка. - + Current name: Текущее название: - + Corresponding name: Соответствующее имя: - + Show Books From Показать книги из - + Old Testament Ветхий Завет - + New Testament Новый Завет - + Apocrypha Апокрифы @@ -915,6 +952,75 @@ Bible should be displayed in the Bible search: + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Детали лицензии + + + + Version name: + Название версии: + + + + Copyright: + Авторские права: + + + + Permissions: + Разрешения: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + Русский + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -957,167 +1063,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Мастер импорта Библии - + 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. Этот мастер поможет вам импортировать Библию из различных форматов. Нажмите кнопку Далее чтобы начать процесс выбора формата и осуществить импорт из него. - + Web Download Загрузка из Сети - + Location: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Библия: - + Download Options Опции загрузки - + Server: Сервер: - + Username: Логин: - + Password: Пароль: - + Proxy Server (Optional) Прокси сервер (опционально) - + License Details Детали лицензии - + Set up the Bible's license details. Укажите детали лицензии на использовании Библии. - + Version name: Название версии: - + Copyright: Авторские права: - + Please wait while your Bible is imported. Дождитесь окончания импорта Библии. - + You need to specify a file with books of the Bible to use in the import. Вам необходимо указать файл со списком книг Библии для импорта. - + You need to specify a file of Bible verses to import. Вам необходимо указать файл с содержимым стихов Библии для импорта. - + You need to specify a version name for your Bible. Вам необходимо указать название перевода Библии. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Вам необходимо указать авторские права Библии. Переводы Библии находящиеся в свободном доступе должны быть помечены как таковые. - + Bible Exists Библия существует - + This Bible already exists. Please import a different Bible or first delete the existing one. Библия уже существует. Выполните импорт другой Библии или удалите существующую. - + Your Bible import failed. Импорт Библии провалился. - + CSV File Файл CSV - + Bibleserver Bibleserver - + Permissions: Разрешения: - + Bible file: Файл Библии: - + Books file: Файл книг: - + Verses file: Файл стихов: - + openlp.org 1.x Bible Files Файл Библии openlp.org 1.x - + Registering Bible... Регистрация Библии... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Регистрация Библии. Пожалуйста, помните о том, что стихи @@ -1127,17 +1233,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language Выбор языка - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP не удалось определить язык этого перевода Библии. Укажите язык перевод из списка. - + Language: Язык: @@ -1153,90 +1259,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick Быстрый - + Find: Поиск: - + Book: Книга: - + Chapter: Глава: - + Verse: Стих: - + From: От: - + To: До: - + Text Search Поиск текста: - + Second: Альтернативный: - + Scripture Reference Ссылка на Писание - + Toggle to keep or clear the previous results. Переключать сохранения или очистки результатов. - + 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. - + 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 стихов не будут включены в результаты. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1250,12 +1361,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Определение кодировки (это может занять несколько минут)... - + Importing %s %s... Importing <book name> <chapter>... Импортирую %s %s... @@ -1493,42 +1604,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides Редактор специальных слайдов - + &Title: &Заголовок: - + Add a new slide at bottom. Добавить новый слайд вверх. - + Edit the selected slide. Изменить выбранный слайд. - + Edit all the slides at once. Редактировать все слайды сразу. - + Split a slide into two by inserting a slide splitter. Разделить слайд, добавив к нему разделитель. - + The&me: Те&ма: - + &Credits: &Подпись: @@ -1543,12 +1654,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I Необходимо добавить как минимум один слайд - + Ed&it All Редактировать &все - + Insert Slide Вставить слайд @@ -1647,34 +1758,34 @@ 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 Следующие изображения больше не существуют: %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. Отсутствует объект для изменений. @@ -1682,18 +1793,18 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1819,22 +1930,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1864,17 +1975,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits Разрешения - + License Лицензия - + Contribute Вклад @@ -1884,17 +1995,17 @@ Should OpenLP upgrade now? билд %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Это программа является свободным программным обеспечением; вы можете свободно распространять ее и/или изменять в рамках GNU General Public License, которая опубликована Фондом бесплатного программного обеспечения, версия 2 этой лицензии. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Эта программа распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОСОБЫХ НУЖД. Детали смотрите ниже. - + Project Lead %s @@ -2019,7 +2130,7 @@ Oxygen Icons: http://oxygen-icons.org/ Он освободил нас, не требуя платы. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2036,7 +2147,7 @@ OpenLP это свободно ПО для церкви, используемо OpenLP написано и поддерживается добровольцами. Если вы хотите видеть больше свободного ПО, написанного христианами, пожалуйста, подумайте о том, чтобы поддержать нас, используя кнопку ниже. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -2045,62 +2156,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Настройки интерфейса - + Number of recent files to display: Количество недавних файлов: - + Remember active media manager tab on startup Запоминать активную вкладу при запуске - + Double-click to send items straight to live Использовать двойной щелчок для запуска на проектор - + Expand new service items on creation Разворачивать новый объект служения - + Enable application exit confirmation Разрешить подтверждения при выходе - + Mouse Cursor Курсор мыши - + Hide mouse cursor when over display window Прятать курсор мыши когда он над окном показа - + Default Image Изображение по умолчанию - + Background color: Цвет фона: - + Image file: Файл изображения: - + Open File Открыть файл @@ -2110,124 +2221,124 @@ Portions copyright © 2004-2012 %s Расширенные настройки - + Preview items when clicked in Media Manager Просматривать объекты по клику в Менеджере мультимедиа - + Click to select a color. Выберите цвет - + Browse for an image file to display. Укажите файл для показа - + Revert to the default OpenLP logo. Возврат к логотипу OpenLP - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2235,34 +2346,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Произошла ошибка. - + 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. Ой! OpenLP столкнулся с ошибкой и не смог обработать ее. Текст ниже содержит информацию, которая может быть полезна разработчикам продукта, поэтому, пожалуйста, отправьте ее на bugs@openlp.org, добавив к этому письму детальное описание того, что вы делали в то время, когда возникла ошибка. - + Send E-Mail Послать e-mail - + Save to File Сохранить в файл - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Пожалуйста, опишите сценарий возникновения ошибки (Минимум 20 символов) - + Attach File Добавить файл @@ -2573,9 +2684,14 @@ Version: %s Custom Slides Специальные Слайды + + + Finish + Конец + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2584,64 +2700,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. - - - Finish - Конец - OpenLP.FormattingTagDialog - + Configure Formatting Tags Настроить теги форматирования - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2885,40 +2996,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2929,6 +3010,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2954,287 +3055,287 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 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/. @@ -3243,22 +3344,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 Главный дисплей был очищен - + Default Theme: %s @@ -3269,82 +3370,82 @@ You can download the latest version from http://openlp.org/. Русский - + Configure &Shortcuts... Настройки и б&ыстрые клавиши... - + Close OpenLP Закрыть OpenLP - + Are you sure you want to close OpenLP? Вы уверены что хотите закрыть 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 &Недавние файлы - + 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. @@ -3353,43 +3454,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Перезапуск мастера сделает изменения в текущей конфигурации OpenLP и, возможно, добавит песни к существующему списку и произведет изменения темы по умолчанию. - + 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. @@ -3398,32 +3499,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3453,7 +3554,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected Объекты не выбраны @@ -3541,27 +3642,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List Список плагинов - + Plugin Details Описание плагина - + Status: Статус: - + Active Активирован - + Inactive Деактивирован @@ -3584,12 +3685,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page Вписать в страницу - + Fit Width @@ -3597,7 +3698,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options Опции @@ -3612,47 +3713,47 @@ Suffix not supported Копировать как 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 Лист Служения @@ -3662,12 +3763,12 @@ Suffix not supported Печать - + Title: Название: - + Custom Footer Text: Специальный текст подписи: @@ -3701,7 +3802,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item Изменить порядок служения @@ -3709,189 +3810,189 @@ Suffix not supported OpenLP.ServiceManager - + 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. Передвинуть объект в конец служения. - + &Delete From Service &Удалить из служения - + Delete the selected item from the service. Удалить выбранный объект из служения. - + &Add New Item &Добавить новый элемент - + &Add to Selected Item &Добавить к выбранному элементу - + &Edit Item &Изменить элемент - + &Reorder Item &Упорядочить элементы - + &Notes &Заметки - + &Change Item Theme &Изменить тему элемента - + OpenLP Service Files (*.osz) Открыть файл служения OpenLP (*.osz) - + 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 Элемент служения не может быть показан, поскольку требуемый плагин отсутствует или отключен - + &Expand all &Расширить все - + Expand all the service items. Расширить все объекты служения. - + &Collapse all &Свернуть все - + Collapse all the service items. Свернуть все объекты служения. - + Open File Открыть файл - + Moves the selection down the window. Передвинуть выделенное вниз окна. - + Move up Передвинуть вверх - + Moves the selection up the window. Передвинуть выделенное вверх окна. - + Go Live Показать - + Send the selected item to Live. Показать выбранный объект. - + &Start Time &Время начала - + Show &Preview Показать &Просмотр - + Show &Live Показать &на проектор - + Modified Service Измененное служение - + The current service has been modified. Would you like to save this service? Текущее служение было изменено. Вы хотите сохранить это служение? @@ -3911,72 +4012,72 @@ The content encoding is not UTF-8. Время игры: - + Untitled Service Служение без названия - + File could not be opened because it is corrupt. Файл не может быть открыт, поскольку он поврежден. - + Empty File Пустой файл - + This service file does not contain any data. Файл служения не содержит данных. - + Corrupt File Поврежденный файл - + 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. - + Service File Missing Файл служения отсутствует - + Slide theme Тема слайда - + Notes Заметки - + Edit - + Service copy only @@ -3984,7 +4085,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Заметки к элементам служения @@ -4000,12 +4101,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action Действие - + Shortcut Быстрые клавиши @@ -4020,32 +4121,32 @@ The content encoding is not UTF-8. Сочетание "%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. Восстановить сочетание клавиш по умолчанию для этого действия. @@ -4060,7 +4161,7 @@ The content encoding is not UTF-8. Вы хотите восстановить все быстрые клавиши на значения по умолчанию? - + Configure Shortcuts Настроить быстрые клавиши @@ -4227,11 +4328,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4314,17 +4410,17 @@ The content encoding is not UTF-8. Время начало больше длительности медиа файла - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4425,62 +4521,62 @@ The content encoding is not UTF-8. Установить &по умолчания для всех - + %s (default) %s (по-умолчанию) - + You must select a theme to edit. Вы должны выбрать тему для редактирования. - + You are unable to delete the default theme. Вы не можете удалить тему назначенную по умолчанию. - + Theme %s is used in the %s plugin. Тема %s используется в плагине %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. Файл не является темой. @@ -4500,58 +4596,58 @@ The content encoding is not UTF-8. &Экспортировать Тему - + You must select a theme to rename. Вы должны выбрать тему для переименования. - + Rename Confirmation Подтверждения переименования - + Rename %s theme? Переименовать тему %s? - + You must select a theme to delete. Вы должны выбрать тему для удаления. - + Delete Confirmation Подтверждение удаления - + Delete %s theme? Удалить тему %s? - + Validation Error Ошибка Проверки - + A theme with this name already exists. Тема с подобным именем уже существует. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> Копия %s - + Theme Already Exists @@ -4559,222 +4655,222 @@ 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 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: Название темы: @@ -4784,47 +4880,47 @@ The content encoding is not UTF-8. Изменить тему - %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: Цвет фона: - + Justify - + Layout Preview - + Transparent @@ -4832,42 +4928,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme Основная Тема - + Theme Level Уровень Темы - + S&ong Level У&ровень песен - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Использовать тему для каждой песни. Если песня не имеет специальную тему, назначенную ей, иначе использовать тему служения. Если тема служения не используется, используется основная тема. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Использовать тему служения, заменяя индивидуальные настройки песен. Если тема служения не существует, используется основная тема. - + &Global Level &Основной уровень - + Use the global theme, overriding any themes associated with either the service or the songs. Используется основная тема, заменяя все темы назначенные служению или песне. @@ -5113,22 +5209,22 @@ The content encoding is not UTF-8. Версия - + Delete the selected item. Удалить выбранный элемент. - + Move selection up one position. Переместить выше. - + Move selection down one position. Переместить ниже. - + &Vertical Align: &Вертикальная привязка: @@ -5194,7 +5290,7 @@ The content encoding is not UTF-8. Вы должны указатть по крайней мере %s файл для импорта из него. - + Welcome to the Bible Import Wizard Добро пожаловать в Мастер импорта Библий @@ -5377,11 +5473,6 @@ The content encoding is not UTF-8. Reset live background. Сбросить фон показа - - - &Split - &Разделить - Split a slide into two only if it does not fit on the screen as one slide. @@ -5428,29 +5519,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5525,17 +5621,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5545,17 +5641,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5636,11 +5732,6 @@ The content encoding is not UTF-8. Search Поиск - - - Back - - Refresh @@ -5652,50 +5743,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live Показать - + No Results - + Options Опции - + Add to Service + + + Home + + + + + Theme + Тема + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5829,7 +5940,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Удалить данные использования песен @@ -5854,7 +5965,7 @@ The content encoding is not UTF-8. Все запросы были успешно удалены. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5862,22 +5973,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6153,210 +6264,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Редактор Песен - + &Title: &Название: - + Alt&ernate title: До&полнительное название: - + &Lyrics: &Слова: - + &Verse order: П&орядок куплтов: - + Ed&it All Редактировать &все - + Title && Lyrics Название и слова - + &Add to Song Д&обавить к песне - + &Remove Уда&лить - + &Manage Authors, Topics, Song Books &Управление Авторами, Темами и Сборниками песен - + A&dd to Song Д&обавить к песне - + R&emove Уда&лить - + Book: Сборник: - + Number: Номер: - + Authors, Topics && Song Book Авторы, Темы и Сборники песен - + New &Theme Новая &Тема - + Copyright Information Информация об авторских правах - + Comments Комментарии - + Theme, Copyright Info && Comments Тема, информация об авторских правах и комментарии - + Add Author Добавить Автора - + This author does not exist, do you want to add them? Этот автор не существует. Хотите добавить его? - + This author is already in the list. Такой автор уже присутсвует в списке. - + 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. Вы не выбрали подходящего автора. Выберите автора из списка, или введите нового автора и выберите "Добавить Автора к Песне", чтобы добавить нового автора. - + Add Topic Добавить Тему - + This topic does not exist, do you want to add it? Эта тема не существует. Хотите добавить её? - + This topic is already in the list. Такая тема уже присутсвует в списке. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. Вы не выбрали подходящую тему. Выберите тему из списка, или введите новую тему и выберите "Добавить Тему к Песне", чтобы добавить новую тему. - + You need to type in a song title. Вы должны указать название песни. - + You need to type in at least one verse. Вы должны ввести по крайней мере один куплет. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Порядок куплетов указан неверно. Нет куплета, который бы соответсвовал %s. Правильными записями являютеся %s. - + Add Book Добавить Книгу - + This song book does not exist, do you want to add it? Этот сборник песен не существует. Хотите добавить его? - + You need to have an author for this song. Вы должны добавить автора к этой песне. - + You need to type some text in to the verse. Вы должны указать какой-то текст в этом куплете. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6603,12 +6727,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6626,7 +6750,7 @@ The encoding is responsible for the correct character representation. Слова - + CCLI License: Лицензия CCLI: @@ -6650,7 +6774,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6744,12 +6868,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6909,7 +7033,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/sq.ts b/resources/i18n/sq.ts index 4629eb43a..574c5730a 100644 --- a/resources/i18n/sq.ts +++ b/resources/i18n/sq.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message - + Alert &text: - + &New - + &Save - + Displ&ay - + Display && Cl&ose @@ -79,7 +79,7 @@ - + &Parameter: @@ -117,32 +117,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font - + Font name: - + Font color: - + Background color: - + Font size: - + Alert timeout: @@ -659,41 +659,86 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + + Bible Exists + + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -807,80 +852,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English Shqiptar - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: - + Corresponding name: - + Show Books From - + Old Testament - + New Testament - + Apocrypha @@ -912,6 +949,75 @@ Bible should be displayed in the Bible search: + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + + + + + Version name: + + + + + Copyright: + + + + + Permissions: + + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + Shqiptar + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -954,167 +1060,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + 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. - + Web Download - + Location: - + Crosswalk - + BibleGateway - + Bible: - + Download Options - + Server: - + Username: - + Password: - + Proxy Server (Optional) - + License Details - + Set up the Bible's license details. - + Version name: - + Copyright: - + Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - + Bibleserver - + Permissions: - + Bible file: - + Books file: - + Verses file: - + openlp.org 1.x Bible Files - + Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -1123,17 +1229,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: @@ -1149,90 +1255,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick - + Find: - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - + Second: - + Scripture Reference - + Toggle to keep or clear the previous results. - + 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. - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1246,12 +1357,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1483,42 +1594,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: @@ -1533,12 +1644,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + Ed&it All - + Insert Slide @@ -1636,33 +1747,33 @@ 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. @@ -1670,18 +1781,18 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1807,22 +1918,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1850,17 +1961,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits - + License - + Contribute @@ -1870,17 +1981,17 @@ Should OpenLP upgrade now? - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -1945,7 +2056,7 @@ Final Credit - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -1956,7 +2067,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -1965,62 +2076,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: - + Image file: - + Open File @@ -2030,124 +2141,124 @@ Portions copyright © 2004-2012 %s - + Preview items when clicked in Media Manager - + Click to select a color. - + Browse for an image file to display. - + Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2155,33 +2266,33 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred - + 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. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File @@ -2465,9 +2576,14 @@ Version: %s Custom Slides + + + Finish + + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2476,64 +2592,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2777,40 +2888,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2821,6 +2902,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2846,309 +2947,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 @@ -3159,125 +3260,125 @@ You can download the latest version from http://openlp.org/. Shqiptar - + 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 - + 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. @@ -3286,32 +3387,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3341,7 +3442,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected @@ -3428,27 +3529,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive @@ -3471,12 +3572,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -3484,7 +3585,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options @@ -3499,47 +3600,47 @@ Suffix not supported - + Zoom In - + Zoom Out - + Zoom Original - + 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 @@ -3549,12 +3650,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3588,7 +3689,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3596,188 +3697,188 @@ Suffix not supported OpenLP.ServiceManager - + 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. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not 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 - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3797,72 +3898,72 @@ The content encoding is not UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3870,7 +3971,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3886,12 +3987,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -3906,32 +4007,32 @@ The content encoding is not UTF-8. - + 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. @@ -3946,7 +4047,7 @@ The content encoding is not UTF-8. - + Configure Shortcuts @@ -4113,11 +4214,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4200,17 +4296,17 @@ The content encoding is not UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4311,62 +4407,62 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. @@ -4386,58 +4482,58 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4445,222 +4541,222 @@ 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: @@ -4670,47 +4766,47 @@ The content encoding is not UTF-8. - + 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: - + Justify - + Layout Preview - + Transparent @@ -4718,42 +4814,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -4999,22 +5095,22 @@ The content encoding is not UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5080,7 +5176,7 @@ The content encoding is not UTF-8. - + Welcome to the Bible Import Wizard @@ -5263,11 +5359,6 @@ The content encoding is not UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5314,29 +5405,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5411,17 +5507,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5431,17 +5527,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5522,11 +5618,6 @@ The content encoding is not UTF-8. Search - - - Back - - Refresh @@ -5538,50 +5629,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live - + No Results - + Options - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5715,7 +5826,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5740,7 +5851,7 @@ The content encoding is not UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5748,22 +5859,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6035,210 +6146,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6485,12 +6609,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6508,7 +6632,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6531,7 +6655,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6625,12 +6749,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6790,7 +6914,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files diff --git a/resources/i18n/sv.ts b/resources/i18n/sv.ts index 8470aec6b..653921b17 100644 --- a/resources/i18n/sv.ts +++ b/resources/i18n/sv.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message Meddelande - + Alert &text: Meddelande&text: - + &New &Nytt - + &Save &Spara - + Displ&ay &Visa - + Display && Cl&ose Visa && stän&g @@ -79,7 +79,7 @@ Du har inte angivit någon text för ditt meddelande. Ange en text innan du klickar på Nytt. - + &Parameter: &Parameter: @@ -119,32 +119,32 @@ Vill du fortsätta ändå? AlertsPlugin.AlertsTab - + Font Teckensnitt - + Font name: Teckensnitt: - + Font color: Teckenfärg: - + Background color: Bakgrundsfärg: - + Font size: Teckenstorlek: - + Alert timeout: Visningstid: @@ -661,42 +661,87 @@ Vill du fortsätta ändå? :|v|V|vers|verser;;-|till;;,|och;;slut + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + Du måste ange ett namn för bibeln. + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + Du måste ange en copyright-text för bibeln. Biblar i public domain måste anges som sådana. + + + + Bible Exists + Bibeln finns redan + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + Bibeln finns redan. Importera en annan Bibel eller radera den nuvarande. + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error Felaktig bibelreferens - + Web Bible cannot be used Webb-bibel kan inte användas - + Text Search is not available with Web Bibles. Textsökning är inte tillgänglig för webb-biblar. - + 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. Du angav inget sökord. Du kan ange flera sökord avskilda med mellanslag för att söka på alla sökord och du kan avskilja sökorden med kommatecken för att söka efter ett av sökorden. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. Det finns inga biblar installerade. Använd guiden för bibelimport och installera en eller flera bibelöversättningar. - + No Bibles Available Inga biblar tillgängliga - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -826,84 +871,72 @@ Please clear this edit line to use the default value. De måste separeras med ett lodrätt streck "|". Lämna fältet tomt för att använda standardvärdet. - - - Preferred Bookname Language - Föredraget språk för boknamn - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - Välj språket på vilket bibelns boknamn ska visas -vid bibelsökning: - - - - Bible language - Bibelns språk - - - - Application language - Programmets språk - English Engelska - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names - Valmöjligheter: - Bibelns språk - språket för den importerade bibelns boknamn - Programmets språk - språket som OpenLP är inställt på - Engelska - använd alltid engelska boknamn + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language + BiblesPlugin.BookNameDialog - + Select Book Name Välj bok - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. Följande bok kunde inte identifieras. Välj motsvarande engelskt namn från listan. - + Current name: Nuvarande namn: - + Corresponding name: Motsvarande namn: - + Show Books From Visa böcker från - + Old Testament Gamla testamentet - + New Testament Nya testamentet - + Apocrypha Apokryferna @@ -935,6 +968,75 @@ vid bibelsökning: Importerar verser... klart. + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + Licensuppgifter + + + + Version name: + Namn på bibelöversättningen: + + + + Copyright: + Copyright: + + + + Permissions: + Tillstånd: + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -977,167 +1079,167 @@ vid bibelsökning: BiblesPlugin.ImportWizardForm - + Bible Import Wizard Guiden för bibelimport - + 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. Den här guiden hjälper dig importera biblar från en mängd olika format. Klicka på Nästa för att fortsätta med importen. - + Web Download Nedladdning från Internet - + Location: Källa: - + Crosswalk Crosswalk - + BibleGateway BibleGateway - + Bible: Bibel: - + Download Options Alternativ för nedladdning - + Server: Server: - + Username: Användarnamn: - + Password: Lösenord: - + Proxy Server (Optional) Proxyserver (frivilligt) - + License Details Licensuppgifter - + Set up the Bible's license details. Skriv in bibelns licensuppgifter. - + Version name: Namn på bibelöversättningen: - + Copyright: Copyright: - + Please wait while your Bible is imported. Vänta medan bibeln importeras. - + You need to specify a file with books of the Bible to use in the import. Du måste välja en fil med bibelböcker att använda i importen. - + You need to specify a file of Bible verses to import. Du måste välja en fil med bibelverser att importera. - + You need to specify a version name for your Bible. Du måste ange ett namn för bibeln. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Du måste ange en copyright-text för bibeln. Biblar i public domain måste anges som sådana. - + Bible Exists Bibeln finns redan - + This Bible already exists. Please import a different Bible or first delete the existing one. Bibeln finns redan. Importera en annan Bibel eller radera den nuvarande. - + Your Bible import failed. Bibelimporten misslyckades. - + CSV File CSV-fil - + Bibleserver Bibelserver - + Permissions: Tillstånd: - + Bible file: Bibelfil: - + Books file: Bokfil: - + Verses file: Versfil: - + openlp.org 1.x Bible Files openlp.org 1.x bibelfiler - + Registering Bible... Registrerar bibel... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. Bibeln registrerad. Observera att verser kommer att laddas ner @@ -1147,17 +1249,17 @@ vid behov, och därför behövs en Internetanslutning. BiblesPlugin.LanguageDialog - + Select Language Välj språk - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. OpenLP kan inte avgöra den här bibelöversättningens språk. Välj språk från listan nedan. - + Language: Språk: @@ -1173,90 +1275,95 @@ vid behov, och därför behövs en Internetanslutning. BiblesPlugin.MediaItem - + Quick Enkelt - + Find: Sök efter: - + Book: Bok: - + Chapter: Kapitel: - + Verse: Vers: - + From: Från: - + To: Till: - + Text Search Textsökning - + Second: Alternativ: - + Scripture Reference Bibelreferens - + Toggle to keep or clear the previous results. Växla mellan att behålla eller rensa föregående sökresultat. - + You cannot combine single and dual Bible verse search results. Do you want to delete your search results and start a new search? Du kan inte kombinera resultat från sökning i en bibel med resultat från sökning i 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 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. Den alternativa bibelöversättningen innehåller inte alla verser som finns i huvudöversättningen. Endast verser som finns i båda översättningar kommer att visas. %d verser har utelämnats. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1270,12 +1377,12 @@ vid behov, och därför behövs en Internetanslutning. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... Analyserar kodning (detta kan ta några minuter)... - + Importing %s %s... Importing <book name> <chapter>... Importerar %s %s... @@ -1513,42 +1620,42 @@ Observera att verser från webb-biblar kommer att laddas ner vid behov, och där CustomPlugin.EditCustomForm - + Edit Custom Slides Redigera anpassade diabilder - + &Title: &Titel: - + Add a new slide at bottom. Lägg till en ny diabild sist. - + Edit the selected slide. Redigera vald diabild. - + Edit all the slides at once. Redigera alla diabilder på en gång. - + Split a slide into two by inserting a slide splitter. Dela diabilden i två genom att lägga till en diabild delare. - + The&me: Te&ma: - + &Credits: &Erkännande: @@ -1563,12 +1670,12 @@ Observera att verser från webb-biblar kommer att laddas ner vid behov, och där Du måste lägga till minst en diabild - + Ed&it All Red&igera alla - + Insert Slide Infoga sida @@ -1666,34 +1773,34 @@ Observera att verser från webb-biblar kommer att laddas ner vid behov, och där 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. Det fanns ingen visningspost att ändra. @@ -1701,19 +1808,19 @@ Vill du lägga till dom andra bilderna ändå? ImagesPlugin.ImageTab - + Background Color Bakgrundsfärg - + Default Color: Standardfärg: - - Provides border where image is not the correct dimensions for the screen when resized. - Visas som fyllning där bilden inte har rätt dimensioner för skärmen. + + Visible background for images with aspect ratio different to screen. + @@ -1838,22 +1945,22 @@ Vill du lägga till dom andra bilderna ändå? MediaPlugin.MediaTab - + Available Media Players Tillgängliga mediaspelare - + %s (unavailable) %s (ej tillgänglig) - + Player Order Spelarordning - + Allow media player to be overridden Tillåt åsidosättning av vald mediaspelare @@ -1883,17 +1990,17 @@ Ska OpenLP uppgradera nu? OpenLP.AboutForm - + Credits Lista över medverkande - + License Licens - + Contribute Bidra @@ -1903,17 +2010,17 @@ Ska OpenLP uppgradera nu? build %s - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. Det här programmet är fri mjukvara; du får sprida den vidare och/eller ändra i den under villkoren i GNU General Public License så som publicerade av Free Software Foundation; version 2 av licensen. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. Det här programmet ges ut i hopp om att det kan vara användbart, men UTAN NÅGON GARANTI; inte ens någon underförstådd garanti vid köp eller lämplighet för ett särskilt ändamål. Se nedan för mer detaljer. - + Project Lead %s @@ -2038,7 +2145,7 @@ Slutligt tack eftersom han har gjort oss fria. - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -2055,7 +2162,7 @@ Läs mer om OpenLP: http://openlp.org/ OpenLP utvecklas och underhålls av frivilliga. Om du vill se mer fri kristen mjukvara utvecklad, klicka gärna på knappen nedan för att se hur du kan bidra. - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s Copyright © 2004-2012 %s @@ -2065,62 +2172,62 @@ Del-copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings Inställningar för användargränssnitt - + Number of recent files to display: Antal tidigare körscheman att visa: - + Remember active media manager tab on startup Kom ihåg aktiv mediaflik vid start - + Double-click to send items straight to live Dubbelklicka för att visa poster live - + Expand new service items on creation Expandera nya poster i körschemat vid skapandet - + Enable application exit confirmation Bekräfta för att avsluta programmet - + Mouse Cursor Muspekare - + Hide mouse cursor when over display window Dölj muspekaren över visningsfönstret - + Default Image Standardbild - + Background color: Bakgrundsfärg: - + Image file: Bildfil: - + Open File Öppna fil @@ -2130,124 +2237,124 @@ Del-copyright © 2004-2012 %s Avancerat - + Preview items when clicked in Media Manager Förhandsgranska poster vid klick i mediahanteraren - + Click to select a color. Klicka för att välja en färg. - + Browse for an image file to display. Välj en bildfil att visa. - + Revert to the default OpenLP logo. Återställ till OpenLP:s standardlogotyp. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. Körschema %Y-%m-%d %H-%M - + Default Service Name Förvalt namn på körschema - + Enable default service name Aktivera förvalt namn på körschema - + Date and Time: Datum och tid: - + Monday Måndag - + Tuesday Tisdag - + Wednesday Onsdag - + Thurdsday Torsdag - + Friday Fredag - + Saturday Lördag - + Sunday Söndag - + Now Nu - + Time when usual service starts. Tid när schemat vanligen börjar. - + Name: Namn: - + Consult the OpenLP manual for usage. Läs i OpenLP-manualen för information om funktionen. - + Revert to the default service name "%s". Återställ till körschemats standardnamn "%s". - + Example: Exempel: - + X11 X11 - + Bypass X11 Window Manager Kringgå X11:s fönsterhanterare - + Syntax error. Syntaxfel. @@ -2255,34 +2362,34 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred Fel uppstod - + 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. Hoppsan! OpenLP stötte på ett problem som inte hanterades. Texten i rutan nedan innehåller information som kan vara användbar för utvecklarna av OpenLP, så e-posta den gärna till bugs@openlp.org, tillsammans med en detaljerad beskrivning av vad du gjorde när problemet uppstod. - + Send E-Mail Skicka e-post - + Save to File Spara till fil - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) Skriv gärna en beskrivning av vad du gjorde för att få det här felet (minst 20 tecken) - + Attach File Lägg till fil @@ -2593,79 +2700,75 @@ Version: %s Custom Slides Anpassade sidor + + + Finish + Slutför + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - Ingen Internetanslutning kunde hittas. Kom igång-guiden behöver en anslutning till Internet för att kunna ladda ner fria sånger, biblar och teman. Klicka Slutför för att starta OpenLP med grundinställningar och utan hämtad data. - -För att köra kom igång-guiden och importera den här datan senare, kontrollera din Internetanslutning och kör den här guiden genom att välja "Verktyg/Kör kom igång-guide" från OpenLP. + -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - -För att avbryta kom igång-guiden helt (och inte starta OpenLP), klicka Avbryt nu. - - - - Finish - Slutför +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. + OpenLP.FormattingTagDialog - + Configure Formatting Tags Konfigurera format-taggar - + Edit Selection Redigera val - + Save Spara - + Description Beskrivning - + Tag Tagg - + Start tag Start-tagg - + End tag Slut-tagg - + Tag Id Tagg-id - + Start HTML Start-HTML - + End HTML Slut-HTML @@ -2909,40 +3012,10 @@ För att avbryta kom igång-guiden helt (och inte starta OpenLP), klicka Avbryt Starta bakgrundsljud pausat - + Service Item Slide Limits Bildväxlingsgräns - - - &End Slide - &Slutbild - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - Upp- och nerpil stannar på första respektive sista bilden i varje körschemapost. - - - - &Wrap Slide - &Börja om - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - Upp- och nerpil börjar om när slutet på en körschemapost är nådd. - - - - &Next Item - &Nästa post - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - Upp- och nerpil går vidare till föregående respektive nästa post i körschemat när slutet på en post är nådd. - Override display position: @@ -2953,6 +3026,26 @@ För att avbryta kom igång-guiden helt (och inte starta OpenLP), klicka Avbryt Repeat track list Repetera spellistan + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2978,287 +3071,287 @@ För att avbryta kom igång-guiden helt (och inte starta OpenLP), klicka Avbryt OpenLP.MainWindow - + &File &Arkiv - + &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 Körschema - + Theme Manager Temahanterare - + &New &Nytt - + &Open &Öppna - + Open an existing service. Öppna ett befintligt körschema. - + &Save &Spara - + Save the current service to disk. Spara det nuvarande körschemat till disk. - + Save &As... Spara s&om... - + Save Service As Spara körschema som - + Save the current service under a new name. Spara det nuvarande körschemat under ett nytt namn. - + E&xit A&vsluta - + 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 visning av mediahanteraren. - + &Theme Manager &Temahanterare - + Toggle Theme Manager Växla temahanteraren - + Toggle the visibility of the theme manager. Växla visning av temahanteraren. - + &Service Manager &Körschema - + Toggle Service Manager Växla körschema - + Toggle the visibility of the service manager. Växla visning av körschemat. - + &Preview Panel &Förhandsgranskningpanel - + Toggle Preview Panel Växla förhandsgranskning - + Toggle the visibility of the preview panel. Växla visning av förhandsgranskning. - + &Live Panel Li&ve - + Toggle Live Panel Växla live-rutan - + Toggle the visibility of the live panel. Växla visning av live-rutan. - + &Plugin List &Modullista - + List the Plugins Lista modulerna - + &User Guide &Bruksanvisning - + &About &Om - + More information about OpenLP Mer information om OpenLP - + &Online Help &Hjälp online - + &Web Site &Webbplats - + 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. Återställ visningslayouten till standardinställningen. - + &Setup &Förberedelse - + Set the view mode to Setup. Ställ in visningslayouten förberedelseläge. - + &Live &Live - + Set the view mode to Live. Ställ in visningslayouten till live-läge. - + 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/. @@ -3267,22 +3360,22 @@ You can download the latest version from http://openlp.org/. Du kan ladda ner den senaste versionen från http://openlp.org/. - + OpenLP Version Updated Ny version av OpenLP - + OpenLP Main Display Blanked OpenLPs huvudbild släckt - + The Main Display has been blanked out Huvudbilden har släckts - + Default Theme: %s Standardtema: %s @@ -3293,82 +3386,82 @@ Du kan ladda ner den senaste versionen från http://openlp.org/. Svenska - + Configure &Shortcuts... Konfigurera &genvägar... - + Close OpenLP Avsluta OpenLP - + Are you sure you want to close OpenLP? Är du säker på att du vill avsluta OpenLP? - + Open &Data Folder... Öppna &datamapp... - + Open the folder where songs, bibles and other data resides. Öppna mappen där sånger, biblar och annan data lagras. - + &Autodetect Detektera &automatiskt - + Update Theme Images Uppdatera temabilder - + Update the preview images for all themes. Uppdatera förhandsgranskningsbilder för alla teman. - + Print the current service. Skriv ut den nuvarande körschemat. - + &Recent Files Senaste &körscheman - + L&ock Panels L&ås paneler - + Prevent the panels being moved. Förhindra att panelerna flyttas. - + Re-run First Time Wizard Kör kom igång-guiden - + Re-run the First Time Wizard, importing songs, Bibles and themes. Kör kom igång-guiden och importera sånger, biblar och teman. - + Re-run First Time Wizard? Kör kom igång-guiden? - + 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. @@ -3377,43 +3470,43 @@ Re-running this wizard may make changes to your current OpenLP configuration and Om du kör den här guiden kan din nuvarande konfiguration av OpenLP komma att ändras, sånger eventuellt läggas till din befintliga sånglista, och standardtemat bytas. - + Clear List Clear List of recent files Rensa listan - + Clear the list of recent files. Rensa listan med senaste körscheman. - + Configure &Formatting Tags... Konfigurera &format-taggar... - + Export OpenLP settings to a specified *.config file Exportera OpenLP-inställningar till en given *.config-fil - + Settings Inställningar - + Import OpenLP settings from a specified *.config file previously exported on this or another machine Importera OpenLP-inställningar från en given *.config-fil som tidigare har exporterats på den här datorn eller någon annan - + Import settings? Importera inställningar? - + Are you sure you want to import settings? Importing settings will make permanent changes to your current OpenLP configuration. @@ -3426,32 +3519,32 @@ Om du importerar inställningar görs ändringar i din nuvarande OpenLP-konfigur Att importera inställningar kan leda till oväntade beteenden eller att OpenLP avslutas onormalt. - + Open File Öppna fil - + OpenLP Export Settings Files (*.conf) OpenLP-inställningsfiler (*.conf) - + Import settings Importera inställningar - + OpenLP will now close. Imported settings will be applied the next time you start OpenLP. OpenLP kommer nu att avslutas. Importerade inställningar kommer att tillämpas nästa gång du startar OpenLP. - + Export Settings File Exportera inställningsfil - + OpenLP Export Settings File (*.conf) OpenLP-inställningsfiler (*.conf) @@ -3485,7 +3578,7 @@ Databas: %s OpenLP.MediaManagerItem - + No Items Selected Inga poster valda @@ -3573,27 +3666,27 @@ Filändelsen stöds ej OpenLP.PluginForm - + Plugin List Modullista - + Plugin Details Moduldetaljer - + Status: Status: - + Active Aktiv - + Inactive Inaktiv @@ -3616,12 +3709,12 @@ Filändelsen stöds ej OpenLP.PrintServiceDialog - + Fit Page Passa sidan - + Fit Width Passa bredden @@ -3629,7 +3722,7 @@ Filändelsen stöds ej OpenLP.PrintServiceForm - + Options Alternativ @@ -3644,47 +3737,47 @@ Filändelsen stöds ej Kopiera som HTML - + Zoom In Zooma in - + Zoom Out Zooma ut - + Zoom Original Återställ zoom - + Other Options Övriga alternativ - + Include slide text if available Inkludera sidtext om tillgänglig - + Include service item notes Inkludera anteckningar - + Include play length of media items Inkludera spellängd för mediaposter - + Add page break before each text item Lägg till sidbrytning före varje textpost - + Service Sheet Körschema @@ -3694,12 +3787,12 @@ Filändelsen stöds ej Skriv ut - + Title: Titel: - + Custom Footer Text: Anpassad sidfot: @@ -3733,7 +3826,7 @@ Filändelsen stöds ej OpenLP.ServiceItemEditForm - + Reorder Service Item Arrangera om körschemapost @@ -3741,189 +3834,189 @@ Filändelsen stöds ej OpenLP.ServiceManager - + Move to &top Lägg &först - + Move item to the top of the service. Lägg posten först i körschemat. - + Move &up Flytta &upp - + Move item up one position in the service. Flytta upp posten ett steg i körschemat. - + Move &down Flytta &ner - + Move item down one position in the service. Flytta ner posten ett steg i körschemat. - + Move to &bottom Lägg &sist - + Move item to the end of the service. Lägg posten sist i körschemat. - + &Delete From Service &Ta bort från körschemat - + Delete the selected item from the service. Ta bort den valda posten från körschemat. - + &Add New Item &Lägg till ny post - + &Add to Selected Item Lägg till i &vald post - + &Edit Item &Redigera post - + &Reorder Item Arrangera &om post - + &Notes &Anteckningar - + &Change Item Theme &Byt postens tema - + OpenLP Service Files (*.osz) OpenLP körschemafiler (*.osz) - + File is not a valid service. The content encoding is not UTF-8. Filen är inte ett giltigt körschema. Innehållets teckenkodning är inte UTF-8. - + File is not a valid service. Filen är inte ett giltigt körschema. - + Missing Display Handler Visningsmodul saknas - + Your item cannot be displayed as there is no handler to display it Posten kan inte visas eftersom det inte finns någon visningsmodul för att visa den - + Your item cannot be displayed as the plugin required to display it is missing or inactive Posten kan inte visas eftersom modulen som krävs för att visa den saknas eller är inaktiv - + &Expand all &Expandera alla - + Expand all the service items. Expandera alla poster i körschemat. - + &Collapse all &Fäll ihop alla - + Collapse all the service items. Fäll ihop alla poster i körschemat. - + Open File Öppna fil - + Moves the selection down the window. Flyttar urvalet neråt i fönstret. - + Move up Flytta upp - + Moves the selection up the window. Flyttar urvalet uppåt i fönstret. - + Go Live Lägg ut live-bilden - + Send the selected item to Live. Visa den valda posten live. - + &Start Time &Starttid - + Show &Preview &Förhandsgranska - + Show &Live Visa &Live - + Modified Service Körschemat ändrat - + The current service has been modified. Would you like to save this service? Det nuvarande körschemat har ändrats. Vill du spara körschemat? @@ -3943,72 +4036,72 @@ Innehållets teckenkodning är inte UTF-8. Speltid: - + Untitled Service Nytt körschema - + File could not be opened because it is corrupt. Filen kunde inte öppnas eftersom den är korrupt. - + Empty File Tom fil - + This service file does not contain any data. Det här körschemat innehåller inte någon data. - + Corrupt File Korrupt fil - + Load an existing service. Ladda ett befintligt körschema. - + Save this service. Spara körschemat. - + Select a theme for the service. Välj ett tema för körschemat. - + This file is either corrupt or it is not an OpenLP 2.0 service file. Filen är antingen korrupt eller inte en OpenLP 2.0 körschemafil. - + Service File Missing Körschemafil saknas - + Slide theme Sidtema - + Notes Anteckningar - + Edit Redigera - + Service copy only Endast kopian i körschemat @@ -4016,7 +4109,7 @@ Innehållets teckenkodning är inte UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes Körschemaanteckningar @@ -4032,12 +4125,12 @@ Innehållets teckenkodning är inte UTF-8. OpenLP.ShortcutListDialog - + Action Åtgärd - + Shortcut Genväg @@ -4052,32 +4145,32 @@ Innehållets teckenkodning är inte UTF-8. Genvägen "%s" är redan kopplad till en annan åtgärd; välj en annan genväg. - + Alternate Alternativ - + Select an action and click one of the buttons below to start capturing a new primary or alternate shortcut, respectively. Välj en åtgärd och använd knapparna nedan för att skapa en ny primär eller alternativ genväg. - + Default Standard - + Custom Anpassad - + Capture shortcut. Skapa genväg. - + Restore the default shortcut of this action. Återställ till standardgenvägen för den här åtgärden. @@ -4092,7 +4185,7 @@ Innehållets teckenkodning är inte UTF-8. Vill du återställa alla genvägar till standardvärdena? - + Configure Shortcuts Konfigurera genvägar @@ -4259,11 +4352,6 @@ Innehållets teckenkodning är inte UTF-8. Background Audio Bakgrundsljud - - - Next Track - Nästa spår - Go to next audio track. @@ -4346,17 +4434,17 @@ Innehållets teckenkodning är inte UTF-8. Starttiden är efter mediapostens slut - + Theme Layout Temalayout - + The blue box shows the main area. Den blåa rutan visar huvudytan. - + The red box shows the footer. Den röda rutan visar sidfoten. @@ -4457,62 +4545,62 @@ Innehållets teckenkodning är inte UTF-8. Ange som &globalt tema - + %s (default) %s (standard) - + You must select a theme to edit. Du måste välja ett tema att redigera. - + You are unable to delete the default theme. Du kan inte ta bort standardtemat. - + Theme %s is used in the %s plugin. Temat %s används i modulen %s. - + You have not selected a theme. Du har inte valt ett tema. - + Save Theme - (%s) Spara tema - (%s) - + Theme Exported Tema exporterat - + Your theme has been successfully exported. Temat exporterades utan problem. - + Theme Export Failed Temaexport misslyckades - + Your theme could not be exported due to an error. Ett fel inträffade när temat skulle exporteras. - + Select Theme Import File Välj temafil - + File is not a valid theme. Filen är inte ett giltigt tema. @@ -4532,58 +4620,58 @@ Innehållets teckenkodning är inte UTF-8. &Exportera tema - + You must select a theme to rename. Du måste välja ett tema att byta namn på. - + Rename Confirmation Bekräftelse av namnbyte - + Rename %s theme? Byt namn på temat %s? - + You must select a theme to delete. Du måste välja ett tema att ta bort. - + Delete Confirmation Borttagningsbekräftelse - + Delete %s theme? Ta bort temat %s? - + Validation Error Valideringsfel - + A theme with this name already exists. Ett tema med det här namnet finns redan. - + OpenLP Themes (*.theme *.otz) OpenLP-teman (*.theme *.otz) - + Copy of %s Copy of <theme name> Kopia av %s - + Theme Already Exists Tema finns redan @@ -4591,222 +4679,222 @@ Innehållets teckenkodning är inte UTF-8. OpenLP.ThemeWizard - + Theme Wizard Temaguiden - + Welcome to the Theme Wizard Välkommen till temaguiden - + Set Up Background Ställ in bakgrund - + Set up your theme's background according to the parameters below. Ställ in temats bakgrund enligt parametrarna nedan. - + Background type: Bakgrundstyp: - + Solid Color Solid färg - + Gradient Gradient - + Color: Färg: - + Gradient: Gradient: - + Horizontal Horisontell - + Vertical Vertikal - + Circular Cirkulär - + Top Left - Bottom Right Uppe vänster - nere höger - + Bottom Left - Top Right Nere vänster - uppe höger - + Main Area Font Details Huvudytans tecken - + Define the font and display characteristics for the Display text Definiera font och egenskaper för visningstexten - + Font: Teckensnitt: - + Size: Storlek: - + Line Spacing: Radavstånd: - + &Outline: &Kant: - + &Shadow: Sk&ugga: - + Bold Fetstil - + Italic Kursiv - + Footer Area Font Details Sidfotens tecken - + Define the font and display characteristics for the Footer text Definiera font och egenskaper för sidfotstexten - + Text Formatting Details Textformatering - + Allows additional display formatting information to be defined Ytterligare inställningsmöjligheter för visningsformatet - + Horizontal Align: Horisontell justering: - + Left Vänster - + Right Höger - + Center Centrera - + Output Area Locations Visningsytornas positioner - + Allows you to change and move the main and footer areas. Låter dig ändra och flytta huvud- och sidfotsytorna. - + &Main Area &Huvudyta - + &Use default location Använd &standardposition - + X position: X-position: - + px px - + Y position: Y-position: - + Width: Bredd: - + Height: Höjd: - + Use default location Använd standardposition - + Save and Preview Spara och förhandsgranska - + View the theme and save it replacing the current one or change the name to create a new theme Visa temat och spara det under samma namn för att ersätta det befintliga, eller under nytt namn för att skapa ett nytt tema - + Theme name: Temanamn: @@ -4816,47 +4904,47 @@ Innehållets teckenkodning är inte UTF-8. Redigera tema - %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. Den här guiden hjälper dig att skapa och redigera dina teman. Klicka på Nästa för att börja processen med att ställa in bakgrund. - + Transitions: Övergångar: - + &Footer Area &Sidfotsyta - + Starting color: Startfärg: - + Ending color: Slutfärg: - + Background color: Bakgrundsfärg: - + Justify Marginaljustera - + Layout Preview Förhandsgranskning av layout - + Transparent Transparent @@ -4864,42 +4952,42 @@ Innehållets teckenkodning är inte UTF-8. OpenLP.ThemesTab - + Global Theme Globalt tema - + Theme Level Temanivå - + S&ong Level &Sångnivå - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. Använd temat för varje sång i databasen indviduellt. Om en sång inte har ett associerat tema, använd körschemats tema. Om körschemat inte har ett tema, använd det globala temat. - + &Service Level &Körschemanivå - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. Använd temat för körschemat och ignorera sångernas individuella teman. Om körschemat inte har ett tema, använd det globala temat. - + &Global Level &Global nivå - + Use the global theme, overriding any themes associated with either the service or the songs. Använd det globala temat och ignorera teman associerade med körschemat eller sångerna. @@ -5145,22 +5233,22 @@ Innehållets teckenkodning är inte UTF-8. Version - + Delete the selected item. Ta bort den valda posten. - + Move selection up one position. Flytta upp urvalet ett steg. - + Move selection down one position. Flytta ner urvalet ett steg. - + &Vertical Align: &Vertikal justering: @@ -5226,7 +5314,7 @@ Innehållets teckenkodning är inte UTF-8. Du måste ange åtminstone en %s-fil att importera från. - + Welcome to the Bible Import Wizard Välkommen till bibelimportguiden @@ -5409,11 +5497,6 @@ Innehållets teckenkodning är inte UTF-8. Reset live background. Återställ live-bakgrund. - - - &Split - &Dela - Split a slide into two only if it does not fit on the screen as one slide. @@ -5460,29 +5543,34 @@ Innehållets teckenkodning är inte UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items %1 och %2 - + %1, and %2 Locale list separator: end %1, och %2 - + %1, %2 Locale list separator: middle %1, %2 - + %1, %2 Locale list separator: start %1, %2 @@ -5557,17 +5645,17 @@ Innehållets teckenkodning är inte UTF-8. Presentera med: - + File Exists Fil finns redan - + A presentation with that filename already exists. En presentation med det namnet finns redan. - + This type of presentation is not supported. Den här presentationstypen stöds inte. @@ -5577,17 +5665,17 @@ Innehållets teckenkodning är inte UTF-8. Presentationer (%s) - + Missing Presentation Presentation saknas - + The Presentation %s no longer exists. Presentationen %s finns inte längre. - + The Presentation %s is incomplete, please reload. Presentationen %s är inte komplett; ladda om den. @@ -5668,11 +5756,6 @@ Innehållets teckenkodning är inte UTF-8. Search Sök - - - Back - Tillbaka - Refresh @@ -5684,50 +5767,70 @@ Innehållets teckenkodning är inte UTF-8. Släck - + Show Visa - + Prev Förra - + Next Nästa - + Text Text - + Show Alert Visa meddelande - + Go Live Lägg ut bilden - + No Results Inga resultat - + Options Alternativ - + Add to Service Lägg till i körschema + + + Home + + + + + Theme + Tema + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5861,7 +5964,7 @@ Innehållets teckenkodning är inte UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data Ta bort sånganvändningsdata @@ -5886,7 +5989,7 @@ Innehållets teckenkodning är inte UTF-8. All vald data har tagits bort. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. Välj datum fram till vilket sånganvändningsdatan ska tas bort. All data loggad före det datumet kommer att tas bort permanent. @@ -5894,22 +5997,22 @@ Innehållets teckenkodning är inte UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction Sånganvändningsutdrag - + Select Date Range Välj datumspann - + to till - + Report Location Målmapp @@ -6188,210 +6291,223 @@ Teckenkodningen ansvarar för rätt teckenrepresentation. EasyWorship] + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor Sångredigering - + &Title: &Titel: - + Alt&ernate title: &Alternativ titel: - + &Lyrics: &Sångtext: - + &Verse order: &Versordning: - + Ed&it All Red&igera alla - + Title && Lyrics Titel && sångtext - + &Add to Song &Lägg till för sång - + &Remove &Ta bort - + &Manage Authors, Topics, Song Books &Hantera författare, ämnen, sångböcker - + A&dd to Song Lä&gg till för sång - + R&emove Ta &bort - + Book: Bok: - + Number: Nummer: - + Authors, Topics && Song Book Författare, ämnen && sångböcker - + New &Theme Nytt &tema - + Copyright Information Copyrightinformation - + Comments Kommentarer - + Theme, Copyright Info && Comments Tema, copyrightinfo && kommentarer - + Add Author Lägg till författare - + This author does not exist, do you want to add them? Författaren finns inte; vill du lägga till den? - + This author is already in the list. Författaren finns redan i listan. - + 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. Du har inte valt en giltig författare. Välj antingen en författare från listan, eller skriv in en ny författare och klicka "Lägg till för sång" för att lägga till den nya författaren. - + Add Topic Lägg till ämne - + This topic does not exist, do you want to add it? Ämnet finns inte; vill du skapa det? - + This topic is already in the list. Ämnet finns redan i listan. - + 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. Du har inte valt ett giltigt ämne. Välj antingen ett ämne från listan, eller skriv in ett nytt ämne och klicka "Lägg till för sång" för att lägga till det nya ämnet. - + You need to type in a song title. Du måste ange en sångtitel. - + You need to type in at least one verse. Du måste ange åtminstone en vers. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. Versordningen är ogiltig. Det finns ingen vers motsvarande %s. Giltiga värden är %s. - + Add Book Lägg till bok - + This song book does not exist, do you want to add it? Boken finns inte; vill du skapa den? - + You need to have an author for this song. Du måste ange en författare för sången. - + You need to type some text in to the verse. Du måste skriva någon text i versen. - + Linked Audio Länkat ljud - + Add &File(s) Lägg till &fil(er) - + Add &Media Lägg till &media - + Remove &All &Ta bort alla - + Open File(s) Öppna fil(er) - + <strong>Warning:</strong> Not all of the verses are in use. <strong>Varning:</strong> Alla verser används inte. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. Versordningen är ogiltig. Det finns inga verser som hör till %s. Giltiga värden är %s. @@ -6638,12 +6754,12 @@ Teckenkodningen ansvarar för rätt teckenrepresentation. SongsPlugin.MediaFilesForm - + Select Media File(s) Välj mediafil(er) - + Select one or more audio files from the list below, and click OK to import them into this song. Välj en eller flera ljudfiler från listan nedan, och klicka OK för att importera dem till sången. @@ -6661,7 +6777,7 @@ Teckenkodningen ansvarar för rätt teckenrepresentation. Sångtext - + CCLI License: CCLI-licens: @@ -6684,7 +6800,7 @@ Teckenkodningen ansvarar för rätt teckenrepresentation. Underhåll listan över författare, ämnen och böcker. - + copy For song cloning kopia @@ -6778,12 +6894,12 @@ Teckenkodningen ansvarar för rätt teckenrepresentation. SongsPlugin.SongImport - + copyright copyright - + The following songs could not be imported: De följande sångerna kunde inte importeras: @@ -6943,8 +7059,8 @@ Teckenkodningen ansvarar för rätt teckenrepresentation. - Add missing songs when opening service - Lägg till saknade sånger vid öppning av körschema + Import missing songs from service files + diff --git a/resources/i18n/zh_CN.ts b/resources/i18n/zh_CN.ts index a4de3eaac..5916a036c 100644 --- a/resources/i18n/zh_CN.ts +++ b/resources/i18n/zh_CN.ts @@ -39,32 +39,32 @@ AlertsPlugin.AlertForm - + Alert Message - + Alert &text: - + &New - + &Save - + Displ&ay - + Display && Cl&ose @@ -79,7 +79,7 @@ - + &Parameter: @@ -117,32 +117,32 @@ Do you want to continue anyway? AlertsPlugin.AlertsTab - + Font - + Font name: - + Font color: - + Background color: - + Font size: - + Alert timeout: @@ -659,41 +659,86 @@ Do you want to continue anyway? + + BiblesPlugin.BibleEditForm + + + You need to specify a version name for your Bible. + + + + + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + + + + + Bible Exists + + + + + This Bible already exists. Please import a different Bible or first delete the existing one. + + + + + You need to specify a book name for "%s". + + + + + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. + + + + + Duplicate Book Name + + + + + The Book Name "%s" has been entered more than once. + + + BiblesPlugin.BibleManager - + Scripture Reference Error - + Web Bible cannot be used - + Text Search is not available with Web Bibles. - + 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. - + There are no Bibles currently installed. Please use the Import Wizard to install one or more Bibles. - + No Bibles Available - + Your scripture reference is either not supported by OpenLP or is invalid. Please make sure your reference conforms to one of the following patterns or consult the manual: Book Chapter @@ -807,80 +852,72 @@ They have to be separated by a vertical bar "|". Please clear this edit line to use the default value. - - - Preferred Bookname Language - - - - - Choose the language in which the book names of the -Bible should be displayed in the Bible search: - - - - - Bible language - - - - - Application language - - English 中国 - - Multiple options: - Bible language - the language in which the Bible book names were imported - Application language - the language you have chosen for OpenLP - English - always use English book names + + Default Bible Language + + + + + Book name language in search field, +search results and on display: + + + + + Bible Language + + + + + Application Language BiblesPlugin.BookNameDialog - + Select Book Name - + The following book name cannot be matched up internally. Please select the corresponding English name from the list. - + Current name: - + Corresponding name: - + Show Books From - + Old Testament - + New Testament - + Apocrypha @@ -912,6 +949,75 @@ Bible should be displayed in the Bible search: + + BiblesPlugin.EditBibleForm + + + Bible Editor + + + + + License Details + + + + + Version name: + + + + + Copyright: + + + + + Permissions: + + + + + Default Bible Language + + + + + Book name language in search field, search results and on display: + + + + + Global Settings + + + + + Bible Language + + + + + Application Language + + + + + English + 中国 + + + + This is a Web Download Bible. +It is not possible to customize the Book Names. + + + + + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. + + + BiblesPlugin.HTTPBible @@ -954,167 +1060,167 @@ Bible should be displayed in the Bible search: BiblesPlugin.ImportWizardForm - + Bible Import Wizard - + 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. - + Web Download - + Location: - + Crosswalk - + BibleGateway - + Bible: - + Download Options - + Server: - + Username: - + Password: - + Proxy Server (Optional) - + License Details - + Set up the Bible's license details. - + Version name: - + Copyright: - + Please wait while your Bible is imported. - + You need to specify a file with books of the Bible to use in the import. - + You need to specify a file of Bible verses to import. - + You need to specify a version name for your Bible. - + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - + Bible Exists - + This Bible already exists. Please import a different Bible or first delete the existing one. - + Your Bible import failed. - + CSV File - + Bibleserver - + Permissions: - + Bible file: - + Books file: - + Verses file: - + openlp.org 1.x Bible Files - + Registering Bible... - + Registered Bible. Please note, that verses will be downloaded on demand and thus an internet connection is required. @@ -1123,17 +1229,17 @@ demand and thus an internet connection is required. BiblesPlugin.LanguageDialog - + Select Language - + OpenLP is unable to determine the language of this translation of the Bible. Please select the language from the list below. - + Language: @@ -1149,90 +1255,95 @@ demand and thus an internet connection is required. BiblesPlugin.MediaItem - + Quick - + Find: - + Book: - + Chapter: - + Verse: - + From: - + To: - + Text Search - + Second: - + Scripture Reference - + Toggle to keep or clear the previous results. - + 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. - + 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. - + Search Scripture Reference... - + Search Text... + + + Are you sure you want to delete "%s"? + + BiblesPlugin.Opensong @@ -1246,12 +1357,12 @@ demand and thus an internet connection is required. BiblesPlugin.OsisImport - + Detecting encoding (this may take a few minutes)... - + Importing %s %s... Importing <book name> <chapter>... @@ -1483,42 +1594,42 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I CustomPlugin.EditCustomForm - + Edit Custom Slides - + &Title: - + Add a new slide at bottom. - + Edit the selected slide. - + Edit all the slides at once. - + Split a slide into two by inserting a slide splitter. - + The&me: - + &Credits: @@ -1533,12 +1644,12 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I - + Ed&it All - + Insert Slide @@ -1635,33 +1746,33 @@ 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. @@ -1669,18 +1780,18 @@ Do you want to add the other images anyway? ImagesPlugin.ImageTab - + Background Color - + Default Color: - - Provides border where image is not the correct dimensions for the screen when resized. + + Visible background for images with aspect ratio different to screen. @@ -1806,22 +1917,22 @@ Do you want to add the other images anyway? MediaPlugin.MediaTab - + Available Media Players - + %s (unavailable) - + Player Order - + Allow media player to be overridden @@ -1849,17 +1960,17 @@ Should OpenLP upgrade now? OpenLP.AboutForm - + Credits - + License - + Contribute @@ -1869,17 +1980,17 @@ Should OpenLP upgrade now? - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below for more details. - + Project Lead %s @@ -1944,7 +2055,7 @@ Final Credit - + OpenLP <version><revision> - Open Source Lyrics Projection OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector. @@ -1955,7 +2066,7 @@ OpenLP is written and maintained by volunteers. If you would like to see more fr - + Copyright © 2004-2012 %s Portions copyright © 2004-2012 %s @@ -1964,62 +2075,62 @@ Portions copyright © 2004-2012 %s OpenLP.AdvancedTab - + UI Settings - + Number of recent files to display: - + Remember active media manager tab on startup - + Double-click to send items straight to live - + Expand new service items on creation - + Enable application exit confirmation - + Mouse Cursor - + Hide mouse cursor when over display window - + Default Image - + Background color: - + Image file: - + Open File @@ -2029,124 +2140,124 @@ Portions copyright © 2004-2012 %s - + Preview items when clicked in Media Manager - + Click to select a color. - + Browse for an image file to display. - + Revert to the default OpenLP logo. - + Service %Y-%m-%d %H-%M This may not contain any of the following characters: /\?*|<>[]":+ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for more information. - + Default Service Name - + Enable default service name - + Date and Time: - + Monday - + Tuesday - + Wednesday - + Thurdsday - + Friday - + Saturday - + Sunday - + Now - + Time when usual service starts. - + Name: - + Consult the OpenLP manual for usage. - + Revert to the default service name "%s". - + Example: - + X11 - + Bypass X11 Window Manager - + Syntax error. @@ -2154,33 +2265,33 @@ See http://docs.python.org/library/datetime.html#strftime-strptime-behavior for OpenLP.ExceptionDialog - + Error Occurred - + 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. - + Send E-Mail - + Save to File - + Please enter a description of what you were doing to cause this error (Minimum 20 characters) - + Attach File @@ -2464,9 +2575,14 @@ Version: %s Custom Slides + + + Finish + + - 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. Press the Finish button now to start OpenLP with initial settings and no sample data. + 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. @@ -2475,64 +2591,59 @@ To re-run the First Time Wizard and import this sample data at a later time, che -To cancel the First Time Wizard completely (and not start OpenLP), press the Cancel button now. - - - - - Finish +To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. OpenLP.FormattingTagDialog - + Configure Formatting Tags - + Edit Selection - + Save - + Description - + Tag - + Start tag - + End tag - + Tag Id - + Start HTML - + End HTML @@ -2776,40 +2887,10 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can - + Service Item Slide Limits - - - &End Slide - - - - - Up and down arrow keys stop at the top and bottom slides of each Service Item. - - - - - &Wrap Slide - - - - - Up and down arrow keys wrap around at the top and bottom slides of each Service Item. - - - - - &Next Item - - - - - Up and down arrow keys advance to the next or previous Service Item from the top and bottom slides of each Service Item. - - Override display position: @@ -2820,6 +2901,26 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can Repeat track list + + + Behavior of next/previous on the last/first slide: + + + + + &Remain on Slide + + + + + &Wrap around + + + + + &Move to next/previous service item + + OpenLP.LanguageManager @@ -2845,309 +2946,309 @@ To cancel the First Time Wizard completely (and not start OpenLP), press the Can 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 @@ -3158,125 +3259,125 @@ 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 - + 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. @@ -3285,32 +3386,32 @@ Importing incorrect settings may cause erratic behaviour or OpenLP to terminate - + 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) @@ -3340,7 +3441,7 @@ Database: %s OpenLP.MediaManagerItem - + No Items Selected @@ -3427,27 +3528,27 @@ Suffix not supported OpenLP.PluginForm - + Plugin List - + Plugin Details - + Status: - + Active - + Inactive @@ -3470,12 +3571,12 @@ Suffix not supported OpenLP.PrintServiceDialog - + Fit Page - + Fit Width @@ -3483,7 +3584,7 @@ Suffix not supported OpenLP.PrintServiceForm - + Options @@ -3498,47 +3599,47 @@ Suffix not supported - + Zoom In - + Zoom Out - + Zoom Original - + 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 @@ -3548,12 +3649,12 @@ Suffix not supported - + Title: - + Custom Footer Text: @@ -3587,7 +3688,7 @@ Suffix not supported OpenLP.ServiceItemEditForm - + Reorder Service Item @@ -3595,188 +3696,188 @@ Suffix not supported OpenLP.ServiceManager - + 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. - + &Delete From Service - + Delete the selected item from the service. - + &Add New Item - + &Add to Selected Item - + &Edit Item - + &Reorder Item - + &Notes - + &Change Item Theme - + OpenLP Service Files (*.osz) - + File is not a valid service. The content encoding is not 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 - + &Expand all - + Expand all the service items. - + &Collapse all - + Collapse all the service items. - + Open File - + Moves the selection down the window. - + Move up - + Moves the selection up the window. - + Go Live - + Send the selected item to Live. - + &Start Time - + Show &Preview - + Show &Live - + Modified Service - + The current service has been modified. Would you like to save this service? @@ -3796,72 +3897,72 @@ The content encoding is not UTF-8. - + Untitled Service - + File could not be opened because it is corrupt. - + Empty File - + This service file does not contain any data. - + Corrupt File - + 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. - + Service File Missing - + Slide theme - + Notes - + Edit - + Service copy only @@ -3869,7 +3970,7 @@ The content encoding is not UTF-8. OpenLP.ServiceNoteForm - + Service Item Notes @@ -3885,12 +3986,12 @@ The content encoding is not UTF-8. OpenLP.ShortcutListDialog - + Action - + Shortcut @@ -3905,32 +4006,32 @@ The content encoding is not UTF-8. - + 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. @@ -3945,7 +4046,7 @@ The content encoding is not UTF-8. - + Configure Shortcuts @@ -4112,11 +4213,6 @@ The content encoding is not UTF-8. Background Audio - - - Next Track - - Go to next audio track. @@ -4199,17 +4295,17 @@ The content encoding is not UTF-8. - + Theme Layout - + The blue box shows the main area. - + The red box shows the footer. @@ -4310,62 +4406,62 @@ The content encoding is not UTF-8. - + %s (default) - + You must select a theme to edit. - + You are unable to delete the default theme. - + Theme %s is used in the %s plugin. - + You have not selected a theme. - + Save Theme - (%s) - + Theme Exported - + Your theme has been successfully exported. - + Theme Export Failed - + Your theme could not be exported due to an error. - + Select Theme Import File - + File is not a valid theme. @@ -4385,58 +4481,58 @@ The content encoding is not UTF-8. - + You must select a theme to rename. - + Rename Confirmation - + Rename %s theme? - + You must select a theme to delete. - + Delete Confirmation - + Delete %s theme? - + Validation Error - + A theme with this name already exists. - + OpenLP Themes (*.theme *.otz) - + Copy of %s Copy of <theme name> - + Theme Already Exists @@ -4444,222 +4540,222 @@ 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: @@ -4669,47 +4765,47 @@ The content encoding is not UTF-8. - + 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: - + Justify - + Layout Preview - + Transparent @@ -4717,42 +4813,42 @@ The content encoding is not UTF-8. OpenLP.ThemesTab - + Global Theme - + Theme Level - + S&ong Level - + Use the theme from each song in the database. If a song doesn't have a theme associated with it, then use the service's theme. If the service doesn't have a theme, then use the global theme. - + &Service Level - + Use the theme from the service, overriding any of the individual songs' themes. If the service doesn't have a theme, then use the global theme. - + &Global Level - + Use the global theme, overriding any themes associated with either the service or the songs. @@ -4998,22 +5094,22 @@ The content encoding is not UTF-8. - + Delete the selected item. - + Move selection up one position. - + Move selection down one position. - + &Vertical Align: @@ -5079,7 +5175,7 @@ The content encoding is not UTF-8. - + Welcome to the Bible Import Wizard @@ -5262,11 +5358,6 @@ The content encoding is not UTF-8. Reset live background. - - - &Split - - Split a slide into two only if it does not fit on the screen as one slide. @@ -5313,29 +5404,34 @@ The content encoding is not UTF-8. Search bar place holder text + + + Optional &Split + + OpenLP.core.lib - + %1 and %2 Locale list separator: 2 items - + %1, and %2 Locale list separator: end - + %1, %2 Locale list separator: middle - + %1, %2 Locale list separator: start @@ -5410,17 +5506,17 @@ The content encoding is not UTF-8. - + File Exists - + A presentation with that filename already exists. - + This type of presentation is not supported. @@ -5430,17 +5526,17 @@ The content encoding is not UTF-8. - + Missing Presentation - + The Presentation %s no longer exists. - + The Presentation %s is incomplete, please reload. @@ -5521,11 +5617,6 @@ The content encoding is not UTF-8. Search - - - Back - - Refresh @@ -5537,50 +5628,70 @@ The content encoding is not UTF-8. - + Show - + Prev - + Next - + Text - + Show Alert - + Go Live - + No Results - + Options - + Add to Service + + + Home + + + + + Theme + + + + + Desktop + + + + + Add &amp; Go to Service + + RemotePlugin.RemoteTab @@ -5714,7 +5825,7 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDeleteForm - + Delete Song Usage Data @@ -5739,7 +5850,7 @@ The content encoding is not UTF-8. - + Select the date up to which the song usage data should be deleted. All data recorded before this date will be permanently deleted. @@ -5747,22 +5858,22 @@ The content encoding is not UTF-8. SongUsagePlugin.SongUsageDetailForm - + Song Usage Extraction - + Select Date Range - + to - + Report Location @@ -6034,210 +6145,223 @@ The encoding is responsible for the correct character representation. + + SongsPlugin.EditBibleForm + + + Meta Data + + + + + Custom Book Names + + + SongsPlugin.EditSongForm - + Song Editor - + &Title: - + Alt&ernate title: - + &Lyrics: - + &Verse order: - + Ed&it All - + Title && Lyrics - + &Add to Song - + &Remove - + &Manage Authors, Topics, Song Books - + A&dd to Song - + R&emove - + Book: - + Number: - + Authors, Topics && Song Book - + New &Theme - + Copyright Information - + Comments - + Theme, Copyright Info && Comments - + Add Author - + This author does not exist, do you want to add them? - + This author is already in the list. - + 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. - + Add Topic - + This topic does not exist, do you want to add it? - + This topic is already in the list. - + You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the "Add Topic to Song" button to add the new topic. - + You need to type in a song title. - + You need to type in at least one verse. - + The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s. - + Add Book - + This song book does not exist, do you want to add it? - + You need to have an author for this song. - + You need to type some text in to the verse. - + Linked Audio - + Add &File(s) - + Add &Media - + Remove &All - + Open File(s) - + <strong>Warning:</strong> Not all of the verses are in use. - + The verse order is invalid. There are no verses corresponding to %s. Valid entries are %s. @@ -6484,12 +6608,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.MediaFilesForm - + Select Media File(s) - + Select one or more audio files from the list below, and click OK to import them into this song. @@ -6507,7 +6631,7 @@ The encoding is responsible for the correct character representation. - + CCLI License: @@ -6529,7 +6653,7 @@ The encoding is responsible for the correct character representation. - + copy For song cloning @@ -6623,12 +6747,12 @@ The encoding is responsible for the correct character representation. SongsPlugin.SongImport - + copyright - + The following songs could not be imported: @@ -6788,7 +6912,7 @@ The encoding is responsible for the correct character representation. - Add missing songs when opening service + Import missing songs from service files From 1858cd168a845b6e92c13d84b3557d579c77f606 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 21 Apr 2012 10:09:44 +0200 Subject: [PATCH 18/66] i18n update - part 2 --- resources/i18n/de.ts | 80 ++++++++++++++++++++++++-------------------- resources/i18n/en.ts | 70 ++++++++++++++++++++------------------ 2 files changed, 80 insertions(+), 70 deletions(-) diff --git a/resources/i18n/de.ts b/resources/i18n/de.ts index c57853b6f..5d0d3e9c1 100644 --- a/resources/i18n/de.ts +++ b/resources/i18n/de.ts @@ -666,27 +666,27 @@ Möchten Sie trotzdem fortfahren? You need to specify a version name for your Bible. - Bitte geben Sie den Namen der Bibelübersetzung ein. + Bitte geben Sie den Namen der Bibelübersetzung ein. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - Das Copyright muss angegeben werden. Gemeinfreie Bibeln ohne Copyright sind als solche zu kennzeichnen. + Das Copyright muss angegeben werden. Gemeinfreie Bibeln ohne Copyright sind als solche zu kennzeichnen. Bible Exists - Übersetzung bereits vorhanden + Bibel existiert bereits This Bible already exists. Please import a different Bible or first delete the existing one. - Diese Bibel existiert bereit. Bitte geben Sie einen anderen Übersetzungsnamen an oder löschen Sie zuerst die Existierende. + Diese Bibel existiert bereit. Bitte geben Sie einen anderen Übersetzungsnamen an oder löschen Sie zuerst die Existierende. You need to specify a book name for "%s". - + Sie müssen ein Buchnamen für »%s« angeben. @@ -703,7 +703,7 @@ be followed by one or more non-numeric characters. The Book Name "%s" has been entered more than once. - + Der Buchnamen »%s« wurde mehrmals angegeben. @@ -880,23 +880,24 @@ Trenner wird zur Darstellung in OpenLP genutzt. Default Bible Language - + Standard Bibelsprache Book name language in search field, search results and on display: - + Sprache des Buchnames im Suchfeld, +Suchergebnis und Projektionsbildschirm: Bible Language - + Bibelsprache Application Language - + Anwendungssprache @@ -974,37 +975,37 @@ search results and on display: Bible Editor - + Bibeleditor License Details - Lizenzdetails + Lizenzdetails Version name: - Bibelausgabe: + Bibelausgabe: Copyright: - Copyright: + Copyright: Permissions: - Genehmigung: + Genehmigung: Default Bible Language - + Standard Bibelsprache Book name language in search field, search results and on display: - + Sprache des Buchnames im Suchfeld, Suchergebnis und Projektionsbildschirm: @@ -1014,23 +1015,24 @@ search results and on display: Bible Language - + Bibelsprache Application Language - + Anwendungssprache English - + Englisch This is a Web Download Bible. It is not possible to customize the Book Names. - + Dies ist eine Webbibel. +Es ist nicht möglich die Büchernamen anzupassen. @@ -1364,7 +1366,7 @@ werden. Daher ist eine Internetverbindung erforderlich. Are you sure you want to delete "%s"? - + Sind Sie sicher, dass Sie "%s" löschen möchten? @@ -1822,7 +1824,7 @@ Wollen Sie die anderen Bilder trotzdem hinzufügen? Visible background for images with aspect ratio different to screen. - + Sichtbarer Hintergrund für Bilder mit einem anderem Seitenverhältnis als der Projektionsbildschirm. @@ -2717,14 +2719,18 @@ Version: %s 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. Click the Finish button now to start OpenLP with initial settings and no sample data. To 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. - + Es wurde keine Internetverbindung erkannt. Um während des erstmaligen Startes von OpenLP Beispiel Lieder, Bibeln und Designs zu installieren ist eine Internetverbindung nötig. Klicken Sie »Abschließen«, um OpenLP nun mit Grundeinstellungen und ohne Beispiel Daten zu starten. + +Um diesen Einrichtungsassistenten erneut zu starten und die Beispiel Daten zu importieren, prüfen Sie Ihre Internetverbindung und starten den Assistenten im Menü "Extras/Einrichtungsassistenten starten". To cancel the First Time Wizard completely (and not start OpenLP), click the Cancel button now. - + + +Um den Einrichtungsassistenten zu unterbrechen (und OpenLP nicht zu starten), bitte »Abbrechen« klicken. @@ -3036,22 +3042,22 @@ To cancel the First Time Wizard completely (and not start OpenLP), click the Can Behavior of next/previous on the last/first slide: - + Verhalten von "Vorherige/Nächste Folie" bei letzter Folie: &Remain on Slide - + &Halte &Wrap around - + &Umlauf &Move to next/previous service item - + &Nächstes/vorheriges Ablaufelement @@ -5553,7 +5559,7 @@ Der Inhalt ist nicht in UTF-8 kodiert. Optional &Split - + Optionale &Teilung @@ -5821,22 +5827,22 @@ Der Inhalt ist nicht in UTF-8 kodiert. Home - + Start Theme - Design + Design Desktop - + Desktop Add &amp; Go to Service - + Hinzufügen & zum Ablauf gehen @@ -6304,12 +6310,12 @@ Easy Worship] Meta Data - + Metadaten Custom Book Names - + Benutzerdefinierte Büchernamen @@ -7068,7 +7074,7 @@ Easy Worship] Import missing songs from service files - + Lieder aus Abläufen in die Datenbank importieren diff --git a/resources/i18n/en.ts b/resources/i18n/en.ts index 6cf4e22e4..a9e0973a7 100644 --- a/resources/i18n/en.ts +++ b/resources/i18n/en.ts @@ -666,44 +666,46 @@ Do you want to continue anyway? You need to specify a version name for your Bible. - You need to specify a version name for your Bible. + You need to specify a version name for your Bible. You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. - You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. + You need to set a copyright for your Bible. Bibles in the Public Domain need to be marked as such. Bible Exists - Bible Exists + Bible Exists This Bible already exists. Please import a different Bible or first delete the existing one. - This Bible already exists. Please import a different Bible or first delete the existing one. + This Bible already exists. Please import a different Bible or first delete the existing one. You need to specify a book name for "%s". - + You need to specify a book name for "%s". The book name "%s" is not correct. Numbers can only be used at the beginning and must be followed by one or more non-numeric characters. - + The book name "%s" is not correct. +Numbers can only be used at the beginning and must +be followed by one or more non-numeric characters. Duplicate Book Name - + Duplicate Book Name The Book Name "%s" has been entered more than once. - + The Book Name "%s" has been entered more than once. @@ -879,23 +881,24 @@ Please clear this edit line to use the default value. Default Bible Language - + Default Bible Language Book name language in search field, search results and on display: - + Book name language in search field, +search results and on display: Bible Language - + Bible Language Application Language - + Application Language @@ -973,68 +976,69 @@ search results and on display: Bible Editor - + Bible Editor License Details - License Details + License Details Version name: - Version name: + Version name: Copyright: - Copyright: + Copyright: Permissions: - Permissions: + Permissions: Default Bible Language - + Default Bible Language Book name language in search field, search results and on display: - + Book name language in search field, search results and on display: Global Settings - + Global Settings Bible Language - + Bible Language Application Language - + Application Language English - English + English This is a Web Download Bible. It is not possible to customize the Book Names. - + This is a Web Download Bible. +It is not possible to customize the Book Names. To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. - + To use the customized book names, "Bible language" must be selected on the Meta Data tab or, if "Global settings" is selected, on the Bible page in Configure OpenLP. @@ -1362,7 +1366,7 @@ demand and thus an internet connection is required. Are you sure you want to delete "%s"? - + Are you sure you want to delete "%s"? @@ -5550,7 +5554,7 @@ The content encoding is not UTF-8. Optional &Split - + Optional &Split @@ -5818,22 +5822,22 @@ The content encoding is not UTF-8. Home - + Home Theme - Theme + Theme Desktop - + Desktop Add &amp; Go to Service - + Add &amp; Go to Service @@ -6300,12 +6304,12 @@ The encoding is responsible for the correct character representation. Meta Data - + Meta Data Custom Book Names - + Custom Book Names From 4452d4834c2788f06dc3e2a7ee3381f1876b029f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 22 Apr 2012 00:29:08 +0200 Subject: [PATCH 19/66] Refactored various variable names. Refactored the names of the fields in the "metadata" table of Bibles, and provided an upgrade script to upgrade the Bibles seamlessly. Refactored the name of a setting, and wrote some code to migrate it seamlessly. --- openlp/core/lib/plugin.py | 22 +++--- openlp/core/ui/settingsform.py | 8 +- openlp/plugins/alerts/alertsplugin.py | 14 ++-- openlp/plugins/alerts/forms/alertform.py | 2 +- openlp/plugins/alerts/lib/alertsmanager.py | 4 +- openlp/plugins/bibles/bibleplugin.py | 21 ++++-- .../plugins/bibles/forms/bibleupgradeform.py | 47 ++++++------ openlp/plugins/bibles/forms/booknameform.py | 8 +- .../plugins/bibles/forms/editbibledialog.py | 4 +- openlp/plugins/bibles/forms/editbibleform.py | 48 ++++++------ openlp/plugins/bibles/lib/__init__.py | 6 +- openlp/plugins/bibles/lib/biblestab.py | 4 +- openlp/plugins/bibles/lib/db.py | 72 +++++++----------- openlp/plugins/bibles/lib/http.py | 72 +++++++++--------- openlp/plugins/bibles/lib/manager.py | 16 ++-- openlp/plugins/bibles/lib/mediaitem.py | 28 +++---- openlp/plugins/bibles/lib/upgrade.py | 73 +++++++++++++++++++ openlp/plugins/custom/lib/mediaitem.py | 2 +- openlp/plugins/images/lib/mediaitem.py | 12 +-- openlp/plugins/media/mediaplugin.py | 4 +- openlp/plugins/presentations/lib/mediaitem.py | 12 +-- .../presentations/presentationplugin.py | 4 +- openlp/plugins/songs/forms/songimportform.py | 2 +- .../plugins/songs/lib/foilpresenterimport.py | 28 +++---- openlp/plugins/songs/lib/mediaitem.py | 8 +- openlp/plugins/songs/lib/olp1import.py | 2 +- openlp/plugins/songs/lib/upgrade.py | 2 + openlp/plugins/songs/lib/xml.py | 25 ++++--- openlp/plugins/songs/songsplugin.py | 4 +- openlp/plugins/songusage/songusageplugin.py | 8 +- 30 files changed, 315 insertions(+), 247 deletions(-) create mode 100644 openlp/plugins/bibles/lib/upgrade.py diff --git a/openlp/core/lib/plugin.py b/openlp/core/lib/plugin.py index f704bd9cd..f51dd187b 100644 --- a/openlp/core/lib/plugin.py +++ b/openlp/core/lib/plugin.py @@ -155,9 +155,9 @@ class Plugin(QtCore.QObject): self.version = get_application_version()[u'version'] self.settingsSection = self.name self.icon = None - self.media_item_class = media_item_class - self.settings_tab_class = settings_tab_class - self.settings_tab = None + self.mediaItemClass = media_item_class + self.settingsTabClass = settings_tab_class + self.settingsTab = None self.mediaItem = None self.weight = 0 self.status = PluginStatus.Inactive @@ -166,9 +166,9 @@ class Plugin(QtCore.QObject): self.renderer = plugin_helpers[u'renderer'] self.serviceManager = plugin_helpers[u'service'] self.settingsForm = plugin_helpers[u'settings form'] - self.mediadock = plugin_helpers[u'toolbox'] + self.mediaDock = plugin_helpers[u'toolbox'] self.pluginManager = plugin_helpers[u'pluginmanager'] - self.formparent = plugin_helpers[u'formparent'] + self.formParent = plugin_helpers[u'formparent'] self.mediaController = plugin_helpers[u'mediacontroller'] QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'%s_add_service_item' % self.name), @@ -219,8 +219,8 @@ class Plugin(QtCore.QObject): Construct a MediaManagerItem object with all the buttons and things you need, and return it for integration into OpenLP. """ - if self.media_item_class: - self.mediaItem = self.media_item_class(self.mediadock.media_dock, + if self.mediaItemClass: + self.mediaItem = self.mediaItemClass(self.mediaDock.media_dock, self, self.icon) def addImportMenuItem(self, importMenu): @@ -255,8 +255,8 @@ class Plugin(QtCore.QObject): Create a tab for the settings window to display the configurable options for this plugin to the user. """ - if self.settings_tab_class: - self.settings_tab = self.settings_tab_class(parent, self.name, + if self.settingsTabClass: + self.settingsTab = self.settingsTabClass(parent, self.name, self.getString(StringContent.VisibleName)[u'title'], self.icon_path) @@ -294,14 +294,14 @@ class Plugin(QtCore.QObject): """ if self.mediaItem: self.mediaItem.initialise() - self.mediadock.insert_dock(self.mediaItem, self.icon, self.weight) + self.mediaDock.insert_dock(self.mediaItem, self.icon, self.weight) def finalise(self): """ Called by the plugin Manager to cleanup things. """ if self.mediaItem: - self.mediadock.remove_dock(self.mediaItem) + self.mediaDock.remove_dock(self.mediaItem) def appStartup(self): """ diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index b2e09e809..4e2b5b649 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -65,8 +65,8 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): self.insertTab(self.advancedTab, 2, PluginStatus.Active) count = 3 for plugin in self.plugins: - if plugin.settings_tab: - self.insertTab(plugin.settings_tab, count, plugin.status) + if plugin.settingsTab: + self.insertTab(plugin.settingsTab, count, plugin.status) count += 1 self.settingListWidget.setCurrentRow(0) return QtGui.QDialog.exec_(self) @@ -114,8 +114,8 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): self.themesTab.postSetUp() self.advancedTab.postSetUp() for plugin in self.plugins: - if plugin.settings_tab: - plugin.settings_tab.postSetUp() + if plugin.settingsTab: + plugin.settingsTab.postSetUp() def tabChanged(self, tabIndex): """ diff --git a/openlp/plugins/alerts/alertsplugin.py b/openlp/plugins/alerts/alertsplugin.py index 05ba2e8bb..d30710968 100644 --- a/openlp/plugins/alerts/alertsplugin.py +++ b/openlp/plugins/alerts/alertsplugin.py @@ -197,10 +197,10 @@ class AlertsPlugin(Plugin): """ Add CSS to the main display. """ - align = VerticalType.Names[self.settings_tab.location] - return CSS % (align, self.settings_tab.font_face, - self.settings_tab.font_size, self.settings_tab.font_color, - self.settings_tab.bg_color) + align = VerticalType.Names[self.settingsTab.location] + return CSS % (align, self.settingsTab.font_face, + self.settingsTab.font_size, self.settingsTab.font_color, + self.settingsTab.bg_color) def getDisplayHtml(self): """ @@ -215,7 +215,7 @@ class AlertsPlugin(Plugin): ``frame`` The Web frame holding the page. """ - align = VerticalType.Names[self.settings_tab.location] + align = VerticalType.Names[self.settingsTab.location] frame.evaluateJavaScript(u'update_css("%s", "%s", "%s", "%s", "%s")' % - (align, self.settings_tab.font_face, self.settings_tab.font_size, - self.settings_tab.font_color, self.settings_tab.bg_color)) + (align, self.settingsTab.font_face, self.settingsTab.font_size, + self.settingsTab.font_color, self.settingsTab.bg_color)) diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index 188914c5d..d2d4813a1 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -43,7 +43,7 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): self.manager = plugin.manager self.plugin = plugin self.item_id = None - QtGui.QDialog.__init__(self, plugin.formparent) + QtGui.QDialog.__init__(self, plugin.formParent) self.setupUi(self) QtCore.QObject.connect(self.displayButton, QtCore.SIGNAL(u'clicked()'), self.onDisplayClicked) diff --git a/openlp/plugins/alerts/lib/alertsmanager.py b/openlp/plugins/alerts/lib/alertsmanager.py index 7c92df75e..7e90b3965 100644 --- a/openlp/plugins/alerts/lib/alertsmanager.py +++ b/openlp/plugins/alerts/lib/alertsmanager.py @@ -84,7 +84,7 @@ class AlertsManager(QtCore.QObject): if not self.alertList: return text = self.alertList.pop(0) - alertTab = self.parent().settings_tab + alertTab = self.parent().settingsTab self.parent().liveController.display.alert(text, alertTab.location) # Check to see if we have a timer running. if self.timer_id == 0: @@ -100,7 +100,7 @@ class AlertsManager(QtCore.QObject): """ log.debug(u'timer event') if event.timerId() == self.timer_id: - alertTab = self.parent().settings_tab + alertTab = self.parent().settingsTab self.parent().liveController.display.alert(u'', alertTab.location) self.killTimer(self.timer_id) self.timer_id = 0 diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index b7df84d92..2f9caa58b 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -27,7 +27,7 @@ import logging -from PyQt4 import QtGui +from PyQt4 import QtCore, QtGui from openlp.core.lib import Plugin, StringContent, build_icon, translate from openlp.core.lib.ui import create_action, UiStrings @@ -81,16 +81,23 @@ class BiblePlugin(Plugin): def appStartup(self): """ - Perform tasks on application starup + Perform tasks on application startup """ if len(self.manager.old_bible_databases): - if QtGui.QMessageBox.information(self.formparent, + if QtGui.QMessageBox.information(self.formParent, translate('OpenLP', 'Information'), translate('OpenLP', 'Bible format has changed.\nYou have to upgrade your ' 'existing Bibles.\nShould OpenLP upgrade now?'), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)) == QtGui.QMessageBox.Yes: self.onToolsUpgradeItemTriggered() + settings = QtCore.QSettings() + settings.beginGroup(self.settingsSection) + if settings.contains(u'bookname language'): + settings.setValue(u'book name language', settings.value( + u'bookname language', QtCore.QVariant(0)).toInt()[0]) + settings.remove(u'bookname language') + settings.endGroup() def addImportMenuItem(self, import_menu): self.importBibleItem = create_action(import_menu, u'importBibleItem', @@ -126,7 +133,7 @@ class BiblePlugin(Plugin): Upgrade older bible databases. """ if not hasattr(self, u'upgrade_wizard'): - self.upgrade_wizard = BibleUpgradeForm(self.formparent, + self.upgrade_wizard = BibleUpgradeForm(self.formParent, self.manager, self) # If the import was not cancelled then reload. if self.upgrade_wizard.exec_(): @@ -147,7 +154,7 @@ class BiblePlugin(Plugin): Called to find out if the bible plugin is currently using a theme. Returns True if the theme is being used, otherwise returns False. """ - if unicode(self.settings_tab.bible_theme) == theme: + if unicode(self.settingsTab.bible_theme) == theme: return True return False @@ -163,8 +170,8 @@ class BiblePlugin(Plugin): ``newTheme`` The new name the plugin should now use. """ - self.settings_tab.bible_theme = newTheme - self.settings_tab.save() + self.settingsTab.bible_theme = newTheme + self.settingsTab.save() def setPluginTextStrings(self): """ diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index b7ba01711..5a0a87430 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -371,7 +371,7 @@ class BibleUpgradeForm(OpenLPWizard): """ Perform the actual upgrade. """ - self.include_webbible = False + self.includeWebBible = False proxy_server = None if not self.files: self.progressLabel.setText( @@ -383,14 +383,14 @@ class BibleUpgradeForm(OpenLPWizard): for number, file in enumerate(self.files): if self.checkBox[number].checkState() == QtCore.Qt.Checked: max_bibles += 1 - oldBible = None + old_bible = None for number, filename in enumerate(self.files): # Close the previous bible's connection. - if oldBible is not None: - oldBible.close_connection() + if old_bible is not None: + old_bible.close_connection() # Set to None to make obvious that we have already closed the # database. - oldBible = None + old_bible = None if self.stop_import_flag: self.success[number] = False break @@ -398,7 +398,7 @@ class BibleUpgradeForm(OpenLPWizard): self.success[number] = False continue self.progressBar.reset() - oldBible = OldBibleDB(self.mediaItem, path=self.temp_dir, + old_bible = OldBibleDB(self.mediaItem, path=self.temp_dir, file=filename[0]) name = filename[1] self.progressLabel.setText(unicode(translate( @@ -408,21 +408,26 @@ class BibleUpgradeForm(OpenLPWizard): self.newbibles[number] = BibleDB(self.mediaItem, path=self.path, name=name, file=filename[0]) self.newbibles[number].register(self.plugin.upgrade_wizard) - metadata = oldBible.get_metadata() - webbible = False + metadata = old_bible.get_metadata() + web_bible = False meta_data = {} for meta in metadata: + # Upgrade the names of the metadata keys + if meta[u'key'] == u'Version': + meta[u'key'] = u'name' + if meta[u'key'] == u'Bookname language': + meta[u'key'] = 'book_name_language' + meta[u'key'] = meta[u'key'].lower().replace(' ', '_') meta_data[meta[u'key']] = meta[u'value'] - if not meta[u'key'] == u'Version' and not meta[u'key'] == \ - u'dbversion': + if meta[u'key'] != u'name' and meta[u'key'] != u'dbversion': self.newbibles[number].save_meta(meta[u'key'], meta[u'value']) if meta[u'key'] == u'download source': - webbible = True - self.include_webbible = True + web_bible = True + self.includeWebBible = True if meta.has_key(u'proxy server'): proxy_server = meta[u'proxy server'] - if webbible: + if web_bible: if meta_data[u'download source'].lower() == u'crosswalk': handler = CWExtract(proxy_server) elif meta_data[u'download source'].lower() == u'biblegateway': @@ -495,9 +500,9 @@ class BibleUpgradeForm(OpenLPWizard): db_book = self.newbibles[number].create_book(book, book_ref_id, book_details[u'testament_id']) # Try to import already downloaded verses. - oldbook = oldBible.get_book(book) + oldbook = old_bible.get_book(book) if oldbook: - verses = oldBible.get_verses(oldbook[u'id']) + verses = old_bible.get_verses(oldbook[u'id']) if not verses: log.warn(u'No verses found to import for book ' u'"%s"', book) @@ -527,7 +532,7 @@ class BibleUpgradeForm(OpenLPWizard): self.progressBar.maximum() - self.progressBar.value()) self.success[number] = False continue - books = oldBible.get_books() + books = old_bible.get_books() self.progressBar.setMaximum(len(books)) for book in books: if self.stop_import_flag: @@ -551,7 +556,7 @@ class BibleUpgradeForm(OpenLPWizard): book_details = BiblesResourcesDB.get_book_by_id(book_ref_id) db_book = self.newbibles[number].create_book(book[u'name'], book_ref_id, book_details[u'testament_id']) - verses = oldBible.get_verses(book[u'id']) + verses = old_bible.get_verses(book[u'id']) if not verses: log.warn(u'No verses found to import for book ' u'"%s"', book[u'name']) @@ -574,7 +579,7 @@ class BibleUpgradeForm(OpenLPWizard): self.progressBar.maximum() - self.progressBar.value()) else: self.success[number] = True - self.newbibles[number].save_meta(u'Version', name) + self.newbibles[number].save_meta(u'name', name) self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\n' @@ -583,8 +588,8 @@ class BibleUpgradeForm(OpenLPWizard): if self.newbibles.has_key(number): self.newbibles[number].session.close() # Close the last bible's connection if possible. - if oldBible is not None: - oldBible.close_connection() + if old_bible is not None: + old_bible.close_connection() def postWizard(self): """ @@ -608,7 +613,7 @@ class BibleUpgradeForm(OpenLPWizard): else: failed_import_text = u'' if successful_import > 0: - if self.include_webbible: + if self.includeWebBible: self.progressLabel.setText(unicode( translate('BiblesPlugin.UpgradeWizardForm', 'Upgrading ' 'Bible(s): %s successful%s\nPlease note that verses from ' diff --git a/openlp/plugins/bibles/forms/booknameform.py b/openlp/plugins/bibles/forms/booknameform.py index b3325c853..493dc9c1d 100644 --- a/openlp/plugins/bibles/forms/booknameform.py +++ b/openlp/plugins/bibles/forms/booknameform.py @@ -56,7 +56,7 @@ class BookNameForm(QDialog, Ui_BookNameDialog): QDialog.__init__(self, parent) self.setupUi(self) self.customSignals() - self.booknames = BibleStrings().Booknames + self.book_names = BibleStrings().BookNames self.book_id = False def customSignals(self): @@ -102,7 +102,7 @@ class BookNameForm(QDialog, Ui_BookNameDialog): addBook = False if addBook: self.correspondingComboBox.addItem( - self.booknames[item[u'abbreviation']]) + self.book_names[item[u'abbreviation']]) def exec_(self, name, books, maxbooks): self.books = books @@ -129,8 +129,8 @@ class BookNameForm(QDialog, Ui_BookNameDialog): for character in u'\\.^$*+?{}[]()': cor_book = cor_book.replace(character, u'\\' + character) books = filter(lambda key: - re.match(cor_book, unicode(self.booknames[key]), re.UNICODE), - self.booknames.keys()) + re.match(cor_book, unicode(self.book_names[key]), re.UNICODE), + self.book_names.keys()) books = filter(None, map(BiblesResourcesDB.get_book, books)) if books: self.book_id = books[0][u'id'] diff --git a/openlp/plugins/bibles/forms/editbibledialog.py b/openlp/plugins/bibles/forms/editbibledialog.py index 0d59db62e..489057c22 100644 --- a/openlp/plugins/bibles/forms/editbibledialog.py +++ b/openlp/plugins/bibles/forms/editbibledialog.py @@ -141,7 +141,7 @@ class Ui_EditBibleDialog(object): QtCore.QMetaObject.connectSlotsByName(editBibleDialog) def retranslateUi(self, editBibleDialog): - self.booknames = BibleStrings().Booknames + self.book_names = BibleStrings().BookNames editBibleDialog.setWindowTitle( translate('BiblesPlugin.EditBibleForm', 'Bible Editor')) # Meta tab @@ -178,4 +178,4 @@ class Ui_EditBibleDialog(object): translate('SongsPlugin.EditBibleForm', 'Custom Book Names')) for book in BiblesResourcesDB.get_books(): self.bookNameLabel[book[u'abbreviation']].setText( - u'%s:' % unicode(self.booknames[book[u'abbreviation']])) + u'%s:' % unicode(self.book_names[book[u'abbreviation']])) diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index aee42dbcc..2ecd1e519 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -50,7 +50,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): """ QtGui.QDialog.__init__(self, parent) self.mediaitem = mediaitem - self.booknames = BibleStrings().Booknames + self.book_names = BibleStrings().BookNames self.setupUi(self) self.manager = manager @@ -64,16 +64,16 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): log.debug(u'Load Bible') self.bible = bible self.versionNameEdit.setText( - self.manager.get_meta_data(self.bible, u'Version').value) + self.manager.get_meta_data(self.bible, u'name').value) self.copyrightEdit.setText( - self.manager.get_meta_data(self.bible, u'Copyright').value) + self.manager.get_meta_data(self.bible, u'copyright').value) self.permissionsEdit.setText( - self.manager.get_meta_data(self.bible, u'Permissions').value) - bookname_language = self.manager.get_meta_data(self.bible, - u'Bookname language') - if bookname_language and bookname_language.value != u'None': + self.manager.get_meta_data(self.bible, u'permissions').value) + book_name_language = self.manager.get_meta_data(self.bible, + u'book_name_language') + if book_name_language and book_name_language.value != u'None': self.languageSelectionComboBox.setCurrentIndex( - int(bookname_language.value) + 1) + int(book_name_language.value) + 1) self.books = {} self.webbible = self.manager.get_meta_data(self.bible, u'download source') @@ -119,9 +119,9 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): version = unicode(self.versionNameEdit.text()) copyright = unicode(self.copyrightEdit.text()) permissions = unicode(self.permissionsEdit.text()) - bookname_language = self.languageSelectionComboBox.currentIndex() - 1 - if bookname_language == -1: - bookname_language = None + book_name_language = self.languageSelectionComboBox.currentIndex() - 1 + if book_name_language == -1: + book_name_language = None if not self.validateMeta(version, copyright): return if not self.webbible: @@ -135,7 +135,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'cursor_busy') self.manager.save_meta_data(self.bible, version, copyright, permissions, - bookname_language) + book_name_language) if not self.webbible: for abbr, book in self.books.iteritems(): if book: @@ -146,11 +146,11 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): Receiver.send_message(u'cursor_normal') QtGui.QDialog.accept(self) - def validateMeta(self, version, copyright): + def validateMeta(self, name, copyright): """ Validate the Meta before saving. """ - if not version: + if not name: self.versionNameEdit.setFocus() critical_error_message_box(UiStrings().EmptyField, translate('BiblesPlugin.BibleEditForm', @@ -163,9 +163,9 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): 'You need to set a copyright for your Bible. ' 'Bibles in the Public Domain need to be marked as such.')) return False - elif self.manager.exists(version) and \ - self.manager.get_meta_data(self.bible, u'Version').value != \ - version: + elif self.manager.exists(name) and \ + self.manager.get_meta_data(self.bible, u'name').value != \ + name: self.versionNameEdit.setFocus() critical_error_message_box( translate('BiblesPlugin.BibleEditForm', 'Bible Exists'), @@ -175,37 +175,37 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): return False return True - def validateBook(self, new_bookname, abbreviation): + def validateBook(self, new_book_name, abbreviation): """ Validate a book. """ book_regex = re.compile(u'[\d]*[^\d]+$') - if not new_bookname: + if not new_book_name: self.bookNameEdit[abbreviation].setFocus() critical_error_message_box(UiStrings().EmptyField, unicode(translate('BiblesPlugin.BibleEditForm', 'You need to specify a book name for "%s".')) % - self.booknames[abbreviation]) + self.book_names[abbreviation]) return False - elif not book_regex.match(new_bookname): + elif not book_regex.match(new_book_name): self.bookNameEdit[abbreviation].setFocus() critical_error_message_box(UiStrings().EmptyField, unicode(translate('BiblesPlugin.BibleEditForm', 'The book name "%s" is not correct.\nNumbers can only be used ' 'at the beginning and must\nbe followed by one or more ' - 'non-numeric characters.')) % new_bookname) + 'non-numeric characters.')) % new_book_name) return False for abbr, book in self.books.iteritems(): if book: if abbr == abbreviation: continue - if unicode(self.bookNameEdit[abbr].text()) == new_bookname: + if unicode(self.bookNameEdit[abbr].text()) == new_book_name: self.bookNameEdit[abbreviation].setFocus() critical_error_message_box( translate('BiblesPlugin.BibleEditForm', 'Duplicate Book Name'), unicode(translate('BiblesPlugin.BibleEditForm', 'The Book Name "%s" has been entered more than once.')) - % new_bookname) + % new_book_name) return False return True diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 4eccc087f..4f8582bdf 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -88,7 +88,7 @@ class BibleStrings(object): """ These strings should need a good reason to be retranslated elsewhere. """ - self.Booknames = { + self.BookNames = { u'Gen': translate('BiblesPlugin', 'Genesis'), u'Exod': translate('BiblesPlugin', 'Exodus'), u'Lev': translate('BiblesPlugin', 'Leviticus'), @@ -355,7 +355,7 @@ def parse_reference(reference, bible, language_selection, book_ref_id=False): log.debug(u'Matched reference %s' % reference) book = match.group(u'book') if not book_ref_id: - booknames = BibleStrings().Booknames + book_names = BibleStrings().BookNames # escape reserved characters book_escaped = book for character in u'\\.^$*+?{}[]()': @@ -369,7 +369,7 @@ def parse_reference(reference, bible, language_selection, book_ref_id=False): book_ref_id = db_book.book_reference_id elif language_selection == LanguageSelection.Application: books = filter(lambda key: - regex_book.match(unicode(booknames[key])), booknames.keys()) + regex_book.match(unicode(book_names[key])), book_names.keys()) books = filter(None, map(BiblesResourcesDB.get_book, books)) for value in books: if bible.get_book_by_book_ref_id(value[u'id']): diff --git a/openlp/plugins/bibles/lib/biblestab.py b/openlp/plugins/bibles/lib/biblestab.py index b8ef7bdba..c352a5faf 100644 --- a/openlp/plugins/bibles/lib/biblestab.py +++ b/openlp/plugins/bibles/lib/biblestab.py @@ -483,7 +483,7 @@ class BiblesTab(SettingsTab): self.getGreyTextPalette(False)) self.endSeparatorCheckBox.setChecked(True) self.language_selection = settings.value( - u'bookname language', QtCore.QVariant(0)).toInt()[0] + u'book name language', QtCore.QVariant(0)).toInt()[0] self.languageSelectionComboBox.setCurrentIndex(self.language_selection) settings.endGroup() @@ -496,7 +496,7 @@ class BiblesTab(SettingsTab): QtCore.QVariant(self.display_style)) settings.setValue(u'verse layout style', QtCore.QVariant(self.layout_style)) - settings.setValue(u'bookname language', + settings.setValue(u'book name language', QtCore.QVariant(self.language_selection)) settings.setValue(u'second bibles', QtCore.QVariant(self.second_bibles)) settings.setValue(u'bible theme', QtCore.QVariant(self.bible_theme)) diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index 6595103f6..f6e153241 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -39,6 +39,7 @@ from openlp.core.lib import Receiver, translate from openlp.core.lib.db import BaseModel, init_db, Manager from openlp.core.lib.ui import critical_error_message_box from openlp.core.utils import AppLocation, clean_filename +import upgrade log = logging.getLogger(__name__) @@ -147,7 +148,7 @@ class BibleDB(QtCore.QObject, Manager): self.file = clean_filename(self.name) + u'.sqlite' if u'file' in kwargs: self.file = kwargs[u'file'] - Manager.__init__(self, u'bibles', init_schema, self.file) + Manager.__init__(self, u'bibles', init_schema, self.file, upgrade) if u'file' in kwargs: self.get_name() if u'path' in kwargs: @@ -167,7 +168,7 @@ class BibleDB(QtCore.QObject, Manager): """ Returns the version name of the Bible. """ - version_name = self.get_object(BibleMeta, u'Version') + version_name = self.get_object(BibleMeta, u'name') self.name = version_name.value if version_name else None return self.name @@ -483,7 +484,7 @@ class BibleDB(QtCore.QObject, Manager): prior to 1.9.6. """ try: - columns = self.session.query(Book).all() + self.session.query(Book).all() except: return True return False @@ -550,16 +551,13 @@ class BiblesResourcesDB(QtCore.QObject, Manager): log.debug(u'BiblesResourcesDB.get_books()') books = BiblesResourcesDB.run_sql(u'SELECT id, testament_id, name, ' u'abbreviation, chapters FROM book_reference ORDER BY id') - return [ - { - u'id': book[0], - u'testament_id': book[1], - u'name': unicode(book[2]), - u'abbreviation': unicode(book[3]), - u'chapters': book[4] - } - for book in books - ] + return [{ + u'id': book[0], + u'testament_id': book[1], + u'name': unicode(book[2]), + u'abbreviation': unicode(book[3]), + u'chapters': book[4] + } for book in books] @staticmethod def get_book(name, lower=False): @@ -601,7 +599,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): Return the books which include string. ``string`` - The string to search for in the booknames or abbreviations. + The string to search for in the book names or abbreviations. """ log.debug(u'BiblesResourcesDB.get_book_like("%s")', string) if not isinstance(string, unicode): @@ -611,16 +609,13 @@ class BiblesResourcesDB(QtCore.QObject, Manager): u'LOWER(name) LIKE ? OR LOWER(abbreviation) LIKE ?', (u'%' + string.lower() + u'%', u'%' + string.lower() + u'%')) if books: - return [ - { + return [{ u'id': book[0], u'testament_id': book[1], u'name': unicode(book[2]), u'abbreviation': unicode(book[3]), u'chapters': book[4] - } - for book in books - ] + } for book in books] else: return None @@ -747,16 +742,13 @@ class BiblesResourcesDB(QtCore.QObject, Manager): u'language_id, download_source_id FROM webbibles WHERE ' u'download_source_id = ?', (source[u'id'],)) if bibles: - return [ - { + return [{ u'id': bible[0], u'name': bible[1], u'abbreviation': bible[2], u'language_id': bible[3], u'download_source_id': bible[4] - } - for bible in bibles - ] + } for bible in bibles] else: return None @@ -789,7 +781,7 @@ class BiblesResourcesDB(QtCore.QObject, Manager): u'abbreviation': bible[0][2], u'language_id': bible[0][3], u'download_source_id': bible[0][4] - } + } except (IndexError, TypeError): return None @@ -850,14 +842,11 @@ class BiblesResourcesDB(QtCore.QObject, Manager): languages = BiblesResourcesDB.run_sql(u'SELECT id, name, code FROM ' u'language ORDER by name') if languages: - return [ - { + return [{ u'id': language[0], u'name': unicode(language[1]), u'code': unicode(language[2]) - } - for language in languages - ] + } for language in languages] else: return None @@ -1036,7 +1025,7 @@ class OldBibleDB(QtCore.QObject, Manager): Returns the version name of the Bible. """ version_name = self.run_sql(u'SELECT value FROM ' - u'metadata WHERE key = "Version"') + u'metadata WHERE key = "name"') if version_name: self.name = version_name[0][0] else: @@ -1050,13 +1039,10 @@ class OldBibleDB(QtCore.QObject, Manager): metadata = self.run_sql(u'SELECT key, value FROM metadata ' u'ORDER BY rowid') if metadata: - return [ - { + return [{ u'key': unicode(meta[0]), u'value': unicode(meta[1]) - } - for meta in metadata - ] + } for meta in metadata] else: return None @@ -1088,13 +1074,10 @@ class OldBibleDB(QtCore.QObject, Manager): """ books = self.run_sql(u'SELECT name, id FROM book ORDER BY id') if books: - return [ - { + return [{ u'name': unicode(book[0]), u'id':int(book[1]) - } - for book in books - ] + } for book in books] else: return None @@ -1105,15 +1088,12 @@ class OldBibleDB(QtCore.QObject, Manager): verses = self.run_sql(u'SELECT book_id, chapter, verse, text FROM ' u'verse WHERE book_id = ? ORDER BY id', (book_id, )) if verses: - return [ - { + return [{ u'book_id': int(verse[0]), u'chapter': int(verse[1]), u'verse': int(verse[2]), u'text': unicode(verse[3]) - } - for verse in verses - ] + } for verse in verses] else: return None diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 5880f85f7..51c88c543 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -54,23 +54,23 @@ class BGExtract(object): self.proxyurl = proxyurl socket.setdefaulttimeout(30) - def get_bible_chapter(self, version, bookname, chapter): + def get_bible_chapter(self, version, book_name, chapter): """ Access and decode Bibles via the BibleGateway website. ``version`` The version of the Bible like 31 for New International version. - ``bookname`` + ``book_name`` Name of the Book. ``chapter`` Chapter number. """ log.debug(u'BGExtract.get_bible_chapter("%s", "%s", "%s")', version, - bookname, chapter) - urlbookname = urllib.quote(bookname.encode("utf-8")) - url_params = u'search=%s+%s&version=%s' % (urlbookname, chapter, + book_name, chapter) + url_book_name = urllib.quote(book_name.encode("utf-8")) + url_params = u'search=%s+%s&version=%s' % (url_book_name, chapter, version) cleaner = [(re.compile(' |
|\'\+\''), lambda match: '')] soup = get_soup_for_bible_ref( @@ -120,7 +120,7 @@ class BGExtract(object): clean_verse_num = int(str(raw_verse_num)) except ValueError: log.warn(u'Illegal verse number in %s %s %s:%s', - version, bookname, chapter, unicode(raw_verse_num)) + version, book_name, chapter, unicode(raw_verse_num)) if clean_verse_num: verse_text = raw_verse_num.next part = raw_verse_num.next.next @@ -138,7 +138,7 @@ class BGExtract(object): log.debug(u'No content found in the BibleGateway response.') send_error_message(u'parse') return None - return SearchResults(bookname, chapter, verse_list) + return SearchResults(book_name, chapter, verse_list) def get_books_from_http(self, version): """ @@ -200,25 +200,25 @@ class BSExtract(object): self.proxyurl = proxyurl socket.setdefaulttimeout(30) - def get_bible_chapter(self, version, bookname, chapter): + def get_bible_chapter(self, version, book_name, chapter): """ Access and decode bibles via Bibleserver mobile website ``version`` The version of the bible like NIV for New International Version - ``bookname`` + ``book_name`` Text name of bible book e.g. Genesis, 1. John, 1John or Offenbarung ``chapter`` Chapter number """ log.debug(u'BSExtract.get_bible_chapter("%s", "%s", "%s")', version, - bookname, chapter) - urlversion = urllib.quote(version.encode("utf-8")) - urlbookname = urllib.quote(bookname.encode("utf-8")) + book_name, chapter) + url_version = urllib.quote(version.encode("utf-8")) + url_book_name = urllib.quote(book_name.encode("utf-8")) chapter_url = u'http://m.bibleserver.com/text/%s/%s%d' % \ - (urlversion, urlbookname, chapter) + (url_version, url_book_name, chapter) header = (u'Accept-Language', u'en') soup = get_soup_for_bible_ref(chapter_url, header) if not soup: @@ -236,7 +236,7 @@ class BSExtract(object): Receiver.send_message(u'openlp_process_events') versenumber = int(verse_number.sub(r'\3', verse[u'class'])) verses[versenumber] = verse.contents[1].rstrip(u'\n') - return SearchResults(bookname, chapter, verses) + return SearchResults(book_name, chapter, verses) def get_books_from_http(self, version): """ @@ -273,67 +273,67 @@ class CWExtract(object): self.proxyurl = proxyurl socket.setdefaulttimeout(30) - def get_bible_chapter(self, version, bookname, chapter): + def get_bible_chapter(self, version, book_name, chapter): """ Access and decode bibles via the Crosswalk website ``version`` The version of the Bible like niv for New International Version - ``bookname`` + ``book_name`` Text name of in english e.g. 'gen' for Genesis ``chapter`` Chapter number """ log.debug(u'CWExtract.get_bible_chapter("%s", "%s", "%s")', version, - bookname, chapter) - urlbookname = bookname.replace(u' ', u'-') - urlbookname = urlbookname.lower() - urlbookname = urllib.quote(urlbookname.encode("utf-8")) + book_name, chapter) + url_book_name = book_name.replace(u' ', u'-') + url_book_name = url_book_name.lower() + url_book_name = urllib.quote(url_book_name.encode("utf-8")) chapter_url = u'http://www.biblestudytools.com/%s/%s/%s.html' % \ - (version, urlbookname, chapter) + (version, url_book_name, chapter) soup = get_soup_for_bible_ref(chapter_url) if not soup: return None Receiver.send_message(u'openlp_process_events') - htmlverses = soup.findAll(u'span', u'versetext') - if not htmlverses: + html_verses = soup.findAll(u'span', u'versetext') + if not html_verses: log.error(u'No verses found in the CrossWalk response.') send_error_message(u'parse') return None verses = {} reduce_spaces = re.compile(r'[ ]{2,}') fix_punctuation = re.compile(r'[ ]+([.,;])') - for verse in htmlverses: + for verse in html_verses: Receiver.send_message(u'openlp_process_events') - versenumber = int(verse.contents[0].contents[0]) - versetext = u'' + verse_number = int(verse.contents[0].contents[0]) + verse_text = u'' for part in verse.contents: Receiver.send_message(u'openlp_process_events') if isinstance(part, NavigableString): - versetext = versetext + part + verse_text = verse_text + part elif part and part.attrMap and \ (part.attrMap[u'class'] == u'WordsOfChrist' or \ part.attrMap[u'class'] == u'strongs'): for subpart in part.contents: Receiver.send_message(u'openlp_process_events') if isinstance(subpart, NavigableString): - versetext = versetext + subpart + verse_text = verse_text + subpart elif subpart and subpart.attrMap and \ subpart.attrMap[u'class'] == u'strongs': for subsub in subpart.contents: Receiver.send_message(u'openlp_process_events') if isinstance(subsub, NavigableString): - versetext = versetext + subsub + verse_text = verse_text + subsub Receiver.send_message(u'openlp_process_events') # Fix up leading and trailing spaces, multiple spaces, and spaces # between text and , and . - versetext = versetext.strip(u'\n\r\t ') - versetext = reduce_spaces.sub(u' ', versetext) - versetext = fix_punctuation.sub(r'\1', versetext) - verses[versenumber] = versetext - return SearchResults(bookname, chapter, verses) + verse_text = verse_text.strip(u'\n\r\t ') + verse_text = reduce_spaces.sub(u' ', verse_text) + verse_text = fix_punctuation.sub(r'\1', verse_text) + verses[verse_number] = verse_text + return SearchResults(book_name, chapter, verses) def get_books_from_http(self, version): """ @@ -499,10 +499,10 @@ class HTTPBible(BibleDB): ## if it was there. By reusing the returned book name ## we get a correct book. For example it is possible ## to request ac and get Acts back. - bookname = search_results.book + book_name = search_results.book Receiver.send_message(u'openlp_process_events') # Check to see if book/chapter exists. - db_book = self.get_book(bookname) + db_book = self.get_book(book_name) self.create_chapter(db_book.id, search_results.chapter, search_results.verselist) Receiver.send_message(u'openlp_process_events') diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index b0dd92e3c..37ae3cf79 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -330,7 +330,7 @@ class BibleManager(object): 'Import Wizard to install one or more Bibles.') }) return None - language_selection = self.get_meta_data(bible, u'Bookname language') + language_selection = self.get_meta_data(bible, u'book_name_language') if language_selection: language_selection = int(language_selection.value) if language_selection is None or language_selection == -1: @@ -377,7 +377,7 @@ class BibleManager(object): Unicode. The Bible to get the language selection from. """ log.debug(u'BibleManager.get_language_selection("%s")', bible) - language_selection = self.get_meta_data(bible, u'Bookname language') + language_selection = self.get_meta_data(bible, u'book_name_language') if language_selection and language_selection.value != u'None': return int(language_selection.value) if language_selection is None or language_selection.value == u'None': @@ -438,17 +438,17 @@ class BibleManager(object): return None def save_meta_data(self, bible, version, copyright, permissions, - bookname_language=None): + book_name_language=None): """ Saves the bibles meta data. """ log.debug(u'save_meta data %s, %s, %s, %s', bible, version, copyright, permissions) - self.db_cache[bible].save_meta(u'Version', version) - self.db_cache[bible].save_meta(u'Copyright', copyright) - self.db_cache[bible].save_meta(u'Permissions', permissions) - self.db_cache[bible].save_meta(u'Bookname language', - bookname_language) + self.db_cache[bible].save_meta(u'name', version) + self.db_cache[bible].save_meta(u'copyright', copyright) + self.db_cache[bible].save_meta(u'permissions', permissions) + self.db_cache[bible].save_meta(u'book_name_language', + book_name_language) def get_meta_data(self, bible, key): """ diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index bca73fc70..e3d173fad 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -64,7 +64,7 @@ class BibleMediaItem(MediaManagerItem): self.unlockIcon = build_icon(u':/bibles/bibles_search_unlock.png') MediaManagerItem.__init__(self, parent, plugin, icon) # Place to store the search results for both bibles. - self.settings = self.plugin.settings_tab + self.settings = self.plugin.settingsTab self.quickPreviewAllowed = True self.hasSearch = True self.search_results = {} @@ -433,7 +433,7 @@ class BibleMediaItem(MediaManagerItem): self.advancedBookComboBox.clear() first = True language_selection = self.plugin.manager.get_language_selection(bible) - booknames = BibleStrings().Booknames + book_names = BibleStrings().BookNames for book in book_data: row = self.advancedBookComboBox.count() if language_selection == LanguageSelection.Bible: @@ -442,7 +442,7 @@ class BibleMediaItem(MediaManagerItem): data = BiblesResourcesDB.get_book_by_id( book[u'book_reference_id']) self.advancedBookComboBox.addItem( - booknames[data[u'abbreviation']]) + book_names[data[u'abbreviation']]) elif language_selection == LanguageSelection.English: data = BiblesResourcesDB.get_book_by_id( book[u'book_reference_id']) @@ -509,12 +509,12 @@ class BibleMediaItem(MediaManagerItem): if language_selection == LanguageSelection.Bible: books = [book.name + u' ' for book in book_data] elif language_selection == LanguageSelection.Application: - booknames = BibleStrings().Booknames + book_names = BibleStrings().BookNames for book in book_data: data = BiblesResourcesDB.get_book_by_id( book.book_reference_id) books.append(unicode( - booknames[data[u'abbreviation']]) + u' ') + book_names[data[u'abbreviation']]) + u' ') elif language_selection == LanguageSelection.English: for book in book_data: data = BiblesResourcesDB.get_book_by_id( @@ -537,7 +537,7 @@ class BibleMediaItem(MediaManagerItem): elif self.advancedTab.isVisible(): bible = unicode(self.advancedVersionComboBox.currentText()) if bible: - self.editBibleForm = EditBibleForm(self, self.plugin.formparent, + self.editBibleForm = EditBibleForm(self, self.plugin.formParent, self.plugin.manager) self.editBibleForm.loadBible(bible) if self.editBibleForm.exec_(): @@ -806,30 +806,30 @@ class BibleMediaItem(MediaManagerItem): further action is saved for/in each row. """ verse_separator = get_reference_separator(u'sep_v_display') - version = self.plugin.manager.get_meta_data(bible, u'Version').value - copyright = self.plugin.manager.get_meta_data(bible, u'Copyright').value + version = self.plugin.manager.get_meta_data(bible, u'name').value + copyright = self.plugin.manager.get_meta_data(bible, u'copyright').value permissions = \ - self.plugin.manager.get_meta_data(bible, u'Permissions').value + self.plugin.manager.get_meta_data(bible, u'permissions').value second_version = u'' second_copyright = u'' second_permissions = u'' if second_bible: second_version = self.plugin.manager.get_meta_data( - second_bible, u'Version').value + second_bible, u'name').value second_copyright = self.plugin.manager.get_meta_data( - second_bible, u'Copyright').value + second_bible, u'copyright').value second_permissions = self.plugin.manager.get_meta_data( - second_bible, u'Permissions').value + second_bible, u'permissions').value items = [] language_selection = self.plugin.manager.get_language_selection(bible) for count, verse in enumerate(search_results): if language_selection == LanguageSelection.Bible: book = verse.book.name elif language_selection == LanguageSelection.Application: - booknames = BibleStrings().Booknames + book_names = BibleStrings().Booknames data = BiblesResourcesDB.get_book_by_id( verse.book.book_reference_id) - book = unicode(booknames[data[u'abbreviation']]) + book = unicode(book_names[data[u'abbreviation']]) elif language_selection == LanguageSelection.English: data = BiblesResourcesDB.get_book_by_id( verse.book.book_reference_id) diff --git a/openlp/plugins/bibles/lib/upgrade.py b/openlp/plugins/bibles/lib/upgrade.py new file mode 100644 index 000000000..c8b5f61ba --- /dev/null +++ b/openlp/plugins/bibles/lib/upgrade.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2012 Raoul Snyman # +# Portions copyright (c) 2008-2012 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 Bibles plugin +""" + +from sqlalchemy import Table, update, or_ + +__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. + """ + # Don't define the "metadata" table, as the upgrade mechanism already + # defines it. + tables = { + u'book': Table(u'book', metadata, autoload=True), + u'verse': Table(u'verse', metadata, autoload=True) + } + return tables + + +def upgrade_1(session, metadata, tables): + """ + Version 1 upgrade. + + This upgrade renames a number of keys to a single naming convention.. + """ + metadata_table = metadata.tables[u'metadata'] + # Rename "Bookname language" to "book_name_language" + session.execute(update(metadata_table)\ + .where(or_(metadata_table.c.key == u'bookname language', + metadata_table.c.key == u'Bookname language'))\ + .values(key=u'book_name_language')) + # Rename "Copyright" to "copyright" + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'Copyright').values(key=u'copyright')) + # Rename "Version" to "name" ("version" used by upgrade system) + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'Version').values(key=u'name')) + # Rename "Permissions" to "permissions" + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'Permissions')\ + .values(key=u'permissions')) + session.commit() diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 5cf872990..541403cda 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -57,7 +57,7 @@ class CustomMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'custom/custom' MediaManagerItem.__init__(self, parent, plugin, icon) - self.edit_custom_form = EditCustomForm(self, self.plugin.formparent, + self.edit_custom_form = EditCustomForm(self, self.plugin.formParent, self.plugin.manager) self.singleServiceItem = False self.quickPreviewAllowed = True diff --git a/openlp/plugins/images/lib/mediaitem.py b/openlp/plugins/images/lib/mediaitem.py index 702bc7e96..ffa67b95e 100644 --- a/openlp/plugins/images/lib/mediaitem.py +++ b/openlp/plugins/images/lib/mediaitem.py @@ -106,24 +106,24 @@ class ImageMediaItem(MediaManagerItem): row_list = [item.row() for item in self.listView.selectedIndexes()] row_list.sort(reverse=True) Receiver.send_message(u'cursor_busy') - self.plugin.formparent.displayProgressBar(len(row_list)) + self.plugin.formParent.displayProgressBar(len(row_list)) for row in row_list: text = self.listView.item(row) if text: delete_file(os.path.join(self.servicePath, unicode(text.text()))) self.listView.takeItem(row) - self.plugin.formparent.incrementProgressBar() + self.plugin.formParent.incrementProgressBar() SettingsManager.set_list(self.settingsSection, u'images', self.getFileList()) - self.plugin.formparent.finishedProgressBar() + self.plugin.formParent.finishedProgressBar() Receiver.send_message(u'cursor_normal') self.listView.blockSignals(False) def loadList(self, images, initialLoad=False): if not initialLoad: Receiver.send_message(u'cursor_busy') - self.plugin.formparent.displayProgressBar(len(images)) + self.plugin.formParent.displayProgressBar(len(images)) # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! images.sort(cmp=locale.strcoll, @@ -144,9 +144,9 @@ class ImageMediaItem(MediaManagerItem): item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(imageFile)) self.listView.addItem(item_name) if not initialLoad: - self.plugin.formparent.incrementProgressBar() + self.plugin.formParent.incrementProgressBar() if not initialLoad: - self.plugin.formparent.finishedProgressBar() + self.plugin.formParent.finishedProgressBar() Receiver.send_message(u'cursor_normal') def generateSlideData(self, service_item, item=None, xmlVersion=False, diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py index cd3f8b3dd..a50d8b24d 100644 --- a/openlp/plugins/media/mediaplugin.py +++ b/openlp/plugins/media/mediaplugin.py @@ -59,7 +59,7 @@ class MediaPlugin(Plugin): Create the settings Tab """ visible_name = self.getString(StringContent.VisibleName) - self.settings_tab = MediaTab(parent, self.name, visible_name[u'title'], + self.settingsTab = MediaTab(parent, self.name, visible_name[u'title'], self.mediaController.mediaPlayers, self.icon_path) def about(self): @@ -142,6 +142,6 @@ class MediaPlugin(Plugin): self.mediaController.mediaPlayers[u'phonon'].isActive = True settings.setValue(u'players', \ QtCore.QVariant(u','.join(new_players))) - self.settings_tab.load() + self.settingsTab.load() settings.remove(u'use phonon') settings.endGroup() diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index a94929b45..f1452f034 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -166,14 +166,14 @@ class PresentationMediaItem(MediaManagerItem): Receiver.send_message(u'cursor_busy') if not initialLoad: Receiver.send_message(u'cursor_busy') - self.plugin.formparent.displayProgressBar(len(files)) + self.plugin.formParent.displayProgressBar(len(files)) # Sort the themes by its filename considering language specific # characters. lower() is needed for windows! files.sort(cmp=locale.strcoll, key=lambda filename: os.path.split(unicode(filename))[1].lower()) for file in files: if not initialLoad: - self.plugin.formparent.incrementProgressBar() + self.plugin.formParent.incrementProgressBar() if currlist.count(file) > 0: continue filename = os.path.split(unicode(file))[1] @@ -217,7 +217,7 @@ class PresentationMediaItem(MediaManagerItem): self.listView.addItem(item_name) Receiver.send_message(u'cursor_normal') if not initialLoad: - self.plugin.formparent.finishedProgressBar() + self.plugin.formParent.finishedProgressBar() Receiver.send_message(u'cursor_normal') def onDeleteClick(self): @@ -229,7 +229,7 @@ class PresentationMediaItem(MediaManagerItem): row_list = [item.row() for item in items] row_list.sort(reverse=True) Receiver.send_message(u'cursor_busy') - self.plugin.formparent.displayProgressBar(len(row_list)) + self.plugin.formParent.displayProgressBar(len(row_list)) for item in items: filepath = unicode(item.data( QtCore.Qt.UserRole).toString()) @@ -237,8 +237,8 @@ class PresentationMediaItem(MediaManagerItem): doc = self.controllers[cidx].add_document(filepath) doc.presentation_deleted() doc.close_presentation() - self.plugin.formparent.incrementProgressBar() - self.plugin.formparent.finishedProgressBar() + self.plugin.formParent.incrementProgressBar() + self.plugin.formParent.finishedProgressBar() Receiver.send_message(u'cursor_normal') for row in row_list: self.listView.takeItem(row) diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 7121aff27..2c38be30d 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -62,7 +62,7 @@ class PresentationPlugin(Plugin): Create the settings Tab """ visible_name = self.getString(StringContent.VisibleName) - self.settings_tab = PresentationTab(parent, self.name, + self.settingsTab = PresentationTab(parent, self.name, visible_name[u'title'], self.controllers, self.icon_path) def initialise(self): @@ -99,7 +99,7 @@ class PresentationPlugin(Plugin): Create the Media Manager List """ self.mediaItem = PresentationMediaItem( - self.mediadock.media_dock, self, self.icon, self.controllers) + self.mediaDock.media_dock, self, self.icon, self.controllers) def registerControllers(self, controller): """ diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index be8fce9a0..9498d1c79 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -57,7 +57,7 @@ class SongImportForm(OpenLPWizard): ``plugin`` The songs plugin. """ - self.clipboard = plugin.formparent.clipboard + self.clipboard = plugin.formParent.clipboard OpenLPWizard.__init__(self, parent, plugin, u'songImportWizard', u':/wizards/wizard_importsong.bmp') diff --git a/openlp/plugins/songs/lib/foilpresenterimport.py b/openlp/plugins/songs/lib/foilpresenterimport.py index fd2a9992b..536c699d2 100644 --- a/openlp/plugins/songs/lib/foilpresenterimport.py +++ b/openlp/plugins/songs/lib/foilpresenterimport.py @@ -413,7 +413,7 @@ class FoilPresenter(object): temp_verse_order_backup = [] temp_sortnr_backup = 1 temp_sortnr_liste = [] - versenumber = { + verse_count = { VerseType.Tags[VerseType.Verse]: 1, VerseType.Tags[VerseType.Chorus]: 1, VerseType.Tags[VerseType.Bridge]: 1, @@ -463,8 +463,8 @@ class FoilPresenter(object): verse_number = re.compile(u'[a-zA-Z.+-_ ]*').sub(u'', verse_name) # Foilpresenter allows e. g. "C", but we need "C1". if not verse_number: - verse_number = unicode(versenumber[verse_type]) - versenumber[verse_type] += 1 + verse_number = unicode(verse_count[verse_type]) + verse_count[verse_type] += 1 else: # test if foilpresenter have the same versenumber two times with # different parts raise the verse number @@ -508,13 +508,13 @@ class FoilPresenter(object): song.song_number = u'' try: for bucheintrag in foilpresenterfolie.buch.bucheintrag: - bookname = self._child(bucheintrag.name) - if bookname: + book_name = self._child(bucheintrag.name) + if book_name: book = self.manager.get_object_filtered(Book, - Book.name == bookname) + Book.name == book_name) if book is None: # We need to create a book, because it does not exist. - book = Book.populate(name=bookname, publisher=u'') + book = Book.populate(name=book_name, publisher=u'') self.manager.save_object(book) song.song_book_id = book.id try: @@ -537,12 +537,12 @@ class FoilPresenter(object): ``song`` The song object. """ - for titelstring in foilpresenterfolie.titel.titelstring: + for title_string in foilpresenterfolie.titel.titelstring: if not song.title: - song.title = self._child(titelstring) + song.title = self._child(title_string) song.alternate_title = u'' else: - song.alternate_title = self._child(titelstring) + song.alternate_title = self._child(title_string) def _process_topics(self, foilpresenterfolie, song): """ @@ -556,13 +556,13 @@ class FoilPresenter(object): """ try: for name in foilpresenterfolie.kategorien.name: - topictext = self._child(name) - if topictext: + topic_text = self._child(name) + if topic_text: topic = self.manager.get_object_filtered(Topic, - Topic.name == topictext) + Topic.name == topic_text) if topic is None: # We need to create a topic, because it does not exist. - topic = Topic.populate(name=topictext) + topic = Topic.populate(name=topic_text) self.manager.save_object(topic) song.topics.append(topic) except AttributeError: diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index dd398ec1c..2836e98ad 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -68,7 +68,7 @@ class SongMediaItem(MediaManagerItem): def __init__(self, parent, plugin, icon): self.IconPath = u'songs/song' MediaManagerItem.__init__(self, parent, plugin, icon) - self.editSongForm = EditSongForm(self, self.plugin.formparent, + self.editSongForm = EditSongForm(self, self.plugin.formParent, self.plugin.manager) self.openLyrics = OpenLyrics(self.plugin.manager) self.singleServiceItem = False @@ -409,7 +409,7 @@ class SongMediaItem(MediaManagerItem): QtGui.QMessageBox.Yes) == QtGui.QMessageBox.No: return Receiver.send_message(u'cursor_busy') - self.plugin.formparent.displayProgressBar(len(items)) + self.plugin.formParent.displayProgressBar(len(items)) for item in items: item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0] media_files = self.plugin.manager.get_all_objects(MediaFile, @@ -428,8 +428,8 @@ class SongMediaItem(MediaManagerItem): except OSError: log.exception(u'Could not remove directory: %s', save_path) self.plugin.manager.delete_object(Song, item_id) - self.plugin.formparent.incrementProgressBar() - self.plugin.formparent.finishedProgressBar() + self.plugin.formParent.incrementProgressBar() + self.plugin.formParent.finishedProgressBar() Receiver.send_message(u'cursor_normal') self.onSearchTextButtonClicked() diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index b4f0721a6..05095aa31 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -60,7 +60,7 @@ class OpenLP1SongImport(SongImport): """ SongImport.__init__(self, manager, **kwargs) self.availableThemes = \ - kwargs[u'plugin'].formparent.themeManagerContents.getThemes() + kwargs[u'plugin'].formParent.themeManagerContents.getThemes() def doImport(self): """ diff --git a/openlp/plugins/songs/lib/upgrade.py b/openlp/plugins/songs/lib/upgrade.py index ec69751fb..2b82f12bc 100644 --- a/openlp/plugins/songs/lib/upgrade.py +++ b/openlp/plugins/songs/lib/upgrade.py @@ -75,6 +75,7 @@ def upgrade_1(session, metadata, tables): ForeignKeyConstraint([u'song_id'], [u'songs.id'], table=tables[u'media_files']).create() + def upgrade_2(session, metadata, tables): """ Version 2 upgrade. @@ -86,6 +87,7 @@ def upgrade_2(session, metadata, tables): Column(u'last_modified', types.DateTime(), default=func.now())\ .create(table=tables[u'songs']) + def upgrade_3(session, metadata, tables): """ Version 3 upgrade. diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 88fd55789..816742d11 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -521,9 +521,9 @@ class OpenLyrics(object): if hasattr(properties, u'comments'): comments_list = [] for comment in properties.comments.comment: - commenttext = self._text(comment) - if commenttext: - comments_list.append(commenttext) + comment_text = self._text(comment) + if comment_text: + comments_list.append(comment_text) song.comments = u'\n'.join(comments_list) def _process_copyright(self, properties, song): @@ -746,13 +746,13 @@ class OpenLyrics(object): song.song_number = u'' if hasattr(properties, u'songbooks'): for songbook in properties.songbooks.songbook: - bookname = songbook.get(u'name', u'') - if bookname: + book_name = songbook.get(u'name', u'') + if book_name: book = self.manager.get_object_filtered(Book, - Book.name == bookname) + Book.name == book_name) if book is None: # We need to create a book, because it does not exist. - book = Book.populate(name=bookname, publisher=u'') + book = Book.populate(name=book_name, publisher=u'') self.manager.save_object(book) song.song_book_id = book.id song.song_number = songbook.get(u'entry', u'') @@ -787,14 +787,14 @@ class OpenLyrics(object): The song object. """ if hasattr(properties, u'themes'): - for topictext in properties.themes.theme: - topictext = self._text(topictext) - if topictext: + for topic_text in properties.themes.theme: + topic_text = self._text(topic_text) + if topic_text: topic = self.manager.get_object_filtered(Topic, - Topic.name == topictext) + Topic.name == topic_text) if topic is None: # We need to create a topic, because it does not exist. - topic = Topic.populate(name=topictext) + topic = Topic.populate(name=topic_text) self.manager.save_object(topic) song.topics.append(topic) @@ -813,6 +813,7 @@ class OpenLyricsError(Exception): VerseError = 2 def __init__(self, type, log_message, display_message): + Exception.__init__(self) self.type = type self.log_message = log_message self.display_message = display_message diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index 47b293310..4e2d65e8b 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -144,7 +144,7 @@ class SongsPlugin(Plugin): return progressDialog = QtGui.QProgressDialog( translate('SongsPlugin', 'Reindexing songs...'), UiStrings().Cancel, - 0, maxSongs, self.formparent) + 0, maxSongs, self.formParent) progressDialog.setWindowModality(QtCore.Qt.WindowModal) songs = self.manager.get_all_objects(Song) for number, song in enumerate(songs): @@ -241,7 +241,7 @@ class SongsPlugin(Plugin): song_dbs.append(os.path.join(db_dir, sfile)) if len(song_dbs) == 0: return - progress = QtGui.QProgressDialog(self.formparent) + progress = QtGui.QProgressDialog(self.formParent) progress.setWindowModality(QtCore.Qt.WindowModal) progress.setLabelText(translate('OpenLP.Ui', 'Starting import...')) progress.setCancelButton(None) diff --git a/openlp/plugins/songusage/songusageplugin.py b/openlp/plugins/songusage/songusageplugin.py index 157929f2f..7746f9b28 100644 --- a/openlp/plugins/songusage/songusageplugin.py +++ b/openlp/plugins/songusage/songusageplugin.py @@ -98,13 +98,13 @@ class SongUsagePlugin(Plugin): self.songUsageMenu.addAction(self.songUsageReport) self.songUsageMenu.addAction(self.songUsageDelete) self.songUsageActiveButton = QtGui.QToolButton( - self.formparent.statusBar) + self.formParent.statusBar) self.songUsageActiveButton.setCheckable(True) self.songUsageActiveButton.setAutoRaise(True) self.songUsageActiveButton.setStatusTip(translate('SongUsagePlugin', 'Toggle the tracking of song usage.')) self.songUsageActiveButton.setObjectName(u'songUsageActiveButton') - self.formparent.statusBar.insertPermanentWidget(1, + self.formParent.statusBar.insertPermanentWidget(1, self.songUsageActiveButton) self.songUsageActiveButton.hide() # Signals and slots @@ -138,8 +138,8 @@ class SongUsagePlugin(Plugin): action_list.add_action(self.songUsageReport, unicode(translate('SongUsagePlugin', 'Song Usage'))) self.songUsageDeleteForm = SongUsageDeleteForm(self.manager, - self.formparent) - self.songUsageDetailForm = SongUsageDetailForm(self, self.formparent) + self.formParent) + self.songUsageDetailForm = SongUsageDetailForm(self, self.formParent) self.songUsageMenu.menuAction().setVisible(True) self.songUsageActiveButton.show() From 9d2b73063485d3b6cd01d163e914a3aac8421159 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 22 Apr 2012 14:25:39 +0200 Subject: [PATCH 20/66] Try to fix bug #986827, an exception is thrown on Windows when opening an imported presentation. Fixes: https://launchpad.net/bugs/986827 --- openlp/plugins/presentations/lib/impresscontroller.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openlp/plugins/presentations/lib/impresscontroller.py b/openlp/plugins/presentations/lib/impresscontroller.py index d647249a3..bef745136 100644 --- a/openlp/plugins/presentations/lib/impresscontroller.py +++ b/openlp/plugins/presentations/lib/impresscontroller.py @@ -42,6 +42,9 @@ import time if os.name == u'nt': from win32com.client import Dispatch import pywintypes + # Declare an empty exception to match the exception imported from UNO + class ErrorCodeIOException(Exception): + pass else: try: import uno From 7e9c30dfaf391ebb299381d6077644870c227853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Sun, 22 Apr 2012 19:53:48 +0200 Subject: [PATCH 21/66] fix bug 825205 - Keep/restore selected book, chapters and verses when changing the bible translation in advanced search --- openlp/plugins/bibles/lib/mediaitem.py | 31 +++++++++++++++++++++----- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index bca73fc70..c36ffa2bf 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -408,7 +408,7 @@ class BibleMediaItem(MediaManagerItem): self.plugin.appStartup() self.updateAutoCompleter() - def initialiseAdvancedBible(self, bible): + def initialiseAdvancedBible(self, bible, last_book_id=None): """ This initialises the given bible, which means that its book names and their chapter numbers is added to the combo boxes on the @@ -417,8 +417,12 @@ class BibleMediaItem(MediaManagerItem): ``bible`` The bible to initialise (unicode). + + ``last_book_id`` + The "book reference id" of the book which is choosen at the moment. + (int) """ - log.debug(u'initialiseAdvancedBible %s', bible) + log.debug(u'initialiseAdvancedBible %s, %s', bible, last_book_id) book_data = self.plugin.manager.get_books(bible) secondbible = unicode(self.advancedSecondComboBox.currentText()) if secondbible != u'': @@ -451,8 +455,19 @@ class BibleMediaItem(MediaManagerItem): row, QtCore.QVariant(book[u'book_reference_id'])) if first: first = False - self.initialiseChapterVerse(bible, book[u'name'], - book[u'book_reference_id']) + first_book = book + initialise_chapter_verse = True + if last_book_id and last_book_id == int(book[u'book_reference_id']): + index = self.advancedBookComboBox.findData( + QtCore.QVariant(book[u'book_reference_id'])) + if index == -1: + # Not Found. + index = 0 + self.advancedBookComboBox.setCurrentIndex(index) + initialise_chapter_verse = False + if initialise_chapter_verse: + self.initialiseChapterVerse(bible, first_book[u'name'], + first_book[u'book_reference_id']) def initialiseChapterVerse(self, bible, book, book_ref_id): log.debug(u'initialiseChapterVerse %s, %s, %s', bible, book, @@ -597,11 +612,15 @@ class BibleMediaItem(MediaManagerItem): QtCore.QSettings().setValue(self.settingsSection + u'/advanced bible', QtCore.QVariant(self.advancedVersionComboBox.currentText())) self.initialiseAdvancedBible( - unicode(self.advancedVersionComboBox.currentText())) + unicode(self.advancedVersionComboBox.currentText()), + self.advancedBookComboBox.itemData( + int(self.advancedBookComboBox.currentIndex()))) def onAdvancedSecondComboBox(self): self.initialiseAdvancedBible( - unicode(self.advancedVersionComboBox.currentText())) + unicode(self.advancedVersionComboBox.currentText()), + self.advancedBookComboBox.itemData( + int(self.advancedBookComboBox.currentIndex()))) def onAdvancedBookComboBox(self): item = int(self.advancedBookComboBox.currentIndex()) From b6cf925bd800225cf321bf7cb9cacb9f8c04ca19 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 22 Apr 2012 20:19:36 +0200 Subject: [PATCH 22/66] Removed "dbversion" as it is not actually used. Renamed some other variables. Removed one use of "proxy_url" which was pretty much invalid. --- .../plugins/bibles/forms/bibleupgradeform.py | 27 +++++++++--------- openlp/plugins/bibles/forms/editbibleform.py | 2 +- openlp/plugins/bibles/lib/db.py | 1 - openlp/plugins/bibles/lib/http.py | 28 +++++++++---------- openlp/plugins/bibles/lib/manager.py | 24 ++++++++-------- openlp/plugins/bibles/lib/upgrade.py | 19 ++++++++++++- 6 files changed, 59 insertions(+), 42 deletions(-) diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 5a0a87430..0ef418de8 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -418,28 +418,29 @@ class BibleUpgradeForm(OpenLPWizard): if meta[u'key'] == u'Bookname language': meta[u'key'] = 'book_name_language' meta[u'key'] = meta[u'key'].lower().replace(' ', '_') + # Copy the metadata meta_data[meta[u'key']] = meta[u'value'] if meta[u'key'] != u'name' and meta[u'key'] != u'dbversion': self.newbibles[number].save_meta(meta[u'key'], meta[u'value']) - if meta[u'key'] == u'download source': + if meta[u'key'] == u'download_source': web_bible = True self.includeWebBible = True - if meta.has_key(u'proxy server'): - proxy_server = meta[u'proxy server'] + if meta.has_key(u'proxy_server'): + proxy_server = meta[u'proxy_server'] if web_bible: - if meta_data[u'download source'].lower() == u'crosswalk': + if meta_data[u'download_source'].lower() == u'crosswalk': handler = CWExtract(proxy_server) - elif meta_data[u'download source'].lower() == u'biblegateway': + elif meta_data[u'download_source'].lower() == u'biblegateway': handler = BGExtract(proxy_server) - elif meta_data[u'download source'].lower() == u'bibleserver': + elif meta_data[u'download_source'].lower() == u'bibleserver': handler = BSExtract(proxy_server) - books = handler.get_books_from_http(meta_data[u'download name']) + books = handler.get_books_from_http(meta_data[u'download_name']) if not books: log.error(u'Upgrading books from %s - download '\ u'name: "%s" failed' % ( - meta_data[u'download source'], - meta_data[u'download name'])) + meta_data[u'download_source'], + meta_data[u'download_name'])) self.newbibles[number].session.close() del self.newbibles[number] critical_error_message_box( @@ -456,8 +457,8 @@ class BibleUpgradeForm(OpenLPWizard): self.success[number] = False continue bible = BiblesResourcesDB.get_webbible( - meta_data[u'download name'], - meta_data[u'download source'].lower()) + meta_data[u'download_name'], + meta_data[u'download_source'].lower()) if bible and bible[u'language_id']: language_id = bible[u'language_id'] self.newbibles[number].save_meta(u'language_id', @@ -490,8 +491,8 @@ class BibleUpgradeForm(OpenLPWizard): if not book_ref_id: log.warn(u'Upgrading books from %s - download '\ u'name: "%s" aborted by user' % ( - meta_data[u'download source'], - meta_data[u'download name'])) + meta_data[u'download_source'], + meta_data[u'download_name'])) self.newbibles[number].session.close() del self.newbibles[number] self.success[number] = False diff --git a/openlp/plugins/bibles/forms/editbibleform.py b/openlp/plugins/bibles/forms/editbibleform.py index 2ecd1e519..87ad86200 100644 --- a/openlp/plugins/bibles/forms/editbibleform.py +++ b/openlp/plugins/bibles/forms/editbibleform.py @@ -76,7 +76,7 @@ class EditBibleForm(QtGui.QDialog, Ui_EditBibleDialog): int(book_name_language.value) + 1) self.books = {} self.webbible = self.manager.get_meta_data(self.bible, - u'download source') + u'download_source') if self.webbible: self.bookNameNotice.setText(translate('BiblesPlugin.EditBibleForm', 'This is a Web Download Bible.\nIt is not possible to ' diff --git a/openlp/plugins/bibles/lib/db.py b/openlp/plugins/bibles/lib/db.py index f6e153241..84a9f81e2 100644 --- a/openlp/plugins/bibles/lib/db.py +++ b/openlp/plugins/bibles/lib/db.py @@ -183,7 +183,6 @@ class BibleDB(QtCore.QObject, Manager): The actual Qt wizard form. """ self.wizard = wizard - self.save_meta(u'dbversion', u'2') return self.name def create_book(self, name, bk_ref_id, testament=1): diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 51c88c543..302bdf999 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -49,9 +49,9 @@ class BGExtract(object): """ Extract verses from BibleGateway """ - def __init__(self, proxyurl=None): - log.debug(u'BGExtract.init("%s")', proxyurl) - self.proxyurl = proxyurl + def __init__(self, proxy_url=None): + log.debug(u'BGExtract.init("%s")', proxy_url) + self.proxy_url = proxy_url socket.setdefaulttimeout(30) def get_bible_chapter(self, version, book_name, chapter): @@ -195,9 +195,9 @@ class BSExtract(object): """ Extract verses from Bibleserver.com """ - def __init__(self, proxyurl=None): - log.debug(u'BSExtract.init("%s")', proxyurl) - self.proxyurl = proxyurl + def __init__(self, proxy_url=None): + log.debug(u'BSExtract.init("%s")', proxy_url) + self.proxy_url = proxy_url socket.setdefaulttimeout(30) def get_bible_chapter(self, version, book_name, chapter): @@ -268,9 +268,9 @@ class CWExtract(object): """ Extract verses from CrossWalk/BibleStudyTools """ - def __init__(self, proxyurl=None): - log.debug(u'CWExtract.init("%s")', proxyurl) - self.proxyurl = proxyurl + def __init__(self, proxy_url=None): + log.debug(u'CWExtract.init("%s")', proxy_url) + self.proxy_url = proxy_url socket.setdefaulttimeout(30) def get_bible_chapter(self, version, book_name, chapter): @@ -401,16 +401,16 @@ class HTTPBible(BibleDB): self.wizard.incrementProgressBar(unicode(translate( 'BiblesPlugin.HTTPBible', 'Registering Bible and loading books...'))) - self.save_meta(u'download source', self.download_source) - self.save_meta(u'download name', self.download_name) + self.save_meta(u'download_source', self.download_source) + self.save_meta(u'download_name', self.download_name) if self.proxy_server: - self.save_meta(u'proxy server', self.proxy_server) + self.save_meta(u'proxy_server', self.proxy_server) if self.proxy_username: # Store the proxy userid. - self.save_meta(u'proxy username', self.proxy_username) + self.save_meta(u'proxy_username', self.proxy_username) if self.proxy_password: # Store the proxy password. - self.save_meta(u'proxy password', self.proxy_password) + self.save_meta(u'proxy_password', self.proxy_password) if self.download_source.lower() == u'crosswalk': handler = CWExtract(self.proxy_server) elif self.download_source.lower() == u'biblegateway': diff --git a/openlp/plugins/bibles/lib/manager.py b/openlp/plugins/bibles/lib/manager.py index 37ae3cf79..9a82cc388 100644 --- a/openlp/plugins/bibles/lib/manager.py +++ b/openlp/plugins/bibles/lib/manager.py @@ -164,12 +164,12 @@ class BibleManager(object): self.db_cache[name] = bible # Look to see if lazy load bible exists and get create getter. source = self.db_cache[name].get_object(BibleMeta, - u'download source') + u'download_source') if source: download_name = self.db_cache[name].get_object(BibleMeta, - u'download name').value + u'download_name').value meta_proxy = self.db_cache[name].get_object(BibleMeta, - u'proxy url') + u'proxy_server') web_bible = HTTPBible(self.parent, path=self.path, file=filename, download_source=source.value, download_name=download_name) @@ -410,17 +410,17 @@ class BibleManager(object): return None # Check if the bible or second_bible is a web bible. webbible = self.db_cache[bible].get_object(BibleMeta, - u'download source') + u'download_source') second_webbible = u'' if second_bible: second_webbible = self.db_cache[second_bible].get_object(BibleMeta, - u'download source') + u'download_source') if webbible or second_webbible: Receiver.send_message(u'openlp_information_message', { u'title': translate('BiblesPlugin.BibleManager', - 'Web Bible cannot be used'), + 'Web Bible cannot be used'), u'message': translate('BiblesPlugin.BibleManager', - 'Text Search is not available with Web Bibles.') + 'Text Search is not available with Web Bibles.') }) return None if text: @@ -428,12 +428,12 @@ class BibleManager(object): else: Receiver.send_message(u'openlp_information_message', { u'title': translate('BiblesPlugin.BibleManager', - 'Scripture Reference Error'), + 'Scripture Reference Error'), u'message': translate('BiblesPlugin.BibleManager', - 'You did not enter a search keyword.\n' - '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.') + 'You did not enter a search keyword.\n' + '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.') }) return None diff --git a/openlp/plugins/bibles/lib/upgrade.py b/openlp/plugins/bibles/lib/upgrade.py index c8b5f61ba..53d485281 100644 --- a/openlp/plugins/bibles/lib/upgrade.py +++ b/openlp/plugins/bibles/lib/upgrade.py @@ -29,7 +29,7 @@ The :mod:`upgrade` module provides a way for the database and schema that is the backend for the Bibles plugin """ -from sqlalchemy import Table, update, or_ +from sqlalchemy import Table, update, delete, or_ __version__ = 1 @@ -70,4 +70,21 @@ def upgrade_1(session, metadata, tables): session.execute(update(metadata_table)\ .where(metadata_table.c.key == u'Permissions')\ .values(key=u'permissions')) + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'download source')\ + .values(key=u'download_source')) + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'download name')\ + .values(key=u'download_name')) + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'proxy server')\ + .values(key=u'proxy_server')) + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'proxy username')\ + .values(key=u'proxy_username')) + session.execute(update(metadata_table)\ + .where(metadata_table.c.key == u'proxy password')\ + .values(key=u'proxy_password')) + session.execute(delete(metadata_table)\ + .where(metadata_table.c.key == u'dbversion')) session.commit() From 0f1bca77b42af7062cc664bbed9851a2a019fab0 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 22 Apr 2012 21:50:18 +0200 Subject: [PATCH 23/66] Some small coding standards things. --- openlp/core/lib/__init__.py | 14 ++++++++++++++ openlp/core/lib/ui.py | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/openlp/core/lib/__init__.py b/openlp/core/lib/__init__.py index 8b01351cb..9af8debb8 100644 --- a/openlp/core/lib/__init__.py +++ b/openlp/core/lib/__init__.py @@ -62,6 +62,7 @@ class ServiceItemAction(object): PreviousLastSlide = 2 Next = 3 + def translate(context, text, comment=None, encoding=QtCore.QCoreApplication.CodecForTr, n=-1, translate=QtCore.QCoreApplication.translate): @@ -83,6 +84,7 @@ def translate(context, text, comment=None, """ return translate(context, text, comment, encoding, n) + def get_text_file_string(text_file): """ Open a file and return its content as unicode string. If the supplied file @@ -111,6 +113,7 @@ def get_text_file_string(text_file): file_handle.close() return content_string + def str_to_bool(stringvalue): """ Convert a string version of a boolean into a real boolean. @@ -122,6 +125,7 @@ def str_to_bool(stringvalue): return stringvalue return unicode(stringvalue).strip().lower() in (u'true', u'yes', u'y') + def build_icon(icon): """ Build a QIcon instance from an existing QIcon, a resource location, or a @@ -148,6 +152,7 @@ def build_icon(icon): QtGui.QIcon.Normal, QtGui.QIcon.Off) return button_icon + def image_to_byte(image): """ Resize an image to fit on the current screen for the web and returns @@ -166,6 +171,7 @@ def image_to_byte(image): # convert to base64 encoding so does not get missed! return byte_array.toBase64() + def create_thumb(image_path, thumb_path, return_icon=True, size=None): """ Create a thumbnail from the given image path and depending on @@ -201,6 +207,7 @@ def create_thumb(image_path, thumb_path, return_icon=True, size=None): # Fallback for files with animation support. return build_icon(unicode(image_path)) + def validate_thumb(file_path, thumb_path): """ Validates whether an file's thumb still exists and if is up to date. @@ -219,6 +226,7 @@ def validate_thumb(file_path, thumb_path): thumb_date = os.stat(thumb_path).st_mtime return image_date <= thumb_date + def resize_image(image_path, width, height, background=u'#000000'): """ Resize an image to fit on the current screen. @@ -266,6 +274,7 @@ def resize_image(image_path, width, height, background=u'#000000'): painter.drawImage((width - realw) / 2, (height - realh) / 2, preview) return new_image + def check_item_selected(list_widget, message): """ Check if a list item is selected so an action may be performed on it @@ -282,6 +291,7 @@ def check_item_selected(list_widget, message): return False return True + def clean_tags(text): """ Remove Tags from text for display @@ -294,6 +304,7 @@ def clean_tags(text): text = text.replace(tag[u'end tag'], u'') return text + def expand_tags(text): """ Expand tags HTML for display @@ -303,6 +314,7 @@ def expand_tags(text): text = text.replace(tag[u'end tag'], tag[u'end html']) return text + def check_directory_exists(dir): """ Check a theme directory exists and if not create it @@ -317,6 +329,7 @@ def check_directory_exists(dir): except IOError: pass + def create_separated_list(stringlist): """ Returns a string that represents a join of a list of strings with a @@ -345,6 +358,7 @@ def create_separated_list(stringlist): return unicode(translate('OpenLP.core.lib', '%1, %2', u'Locale list separator: start').arg(stringlist[0], merged)) + from eventreceiver import Receiver from listwidgetwithdnd import ListWidgetWithDnD from formattingtags import FormattingTags diff --git a/openlp/core/lib/ui.py b/openlp/core/lib/ui.py index 1117c01a0..c4b1181b1 100644 --- a/openlp/core/lib/ui.py +++ b/openlp/core/lib/ui.py @@ -143,6 +143,7 @@ class UiStrings(object): self.View = translate('OpenLP.Ui', 'View') self.ViewMode = translate('OpenLP.Ui', 'View Mode') + def add_welcome_page(parent, image): """ Generate an opening welcome page for a wizard using a provided image. @@ -170,6 +171,7 @@ def add_welcome_page(parent, image): parent.welcomeLayout.addStretch() parent.addPage(parent.welcomePage) + def create_button_box(dialog, name, standard_buttons, custom_buttons=[]): """ Creates a QDialogButtonBox with the given buttons. The ``accepted()`` and @@ -216,6 +218,7 @@ def create_button_box(dialog, name, standard_buttons, custom_buttons=[]): dialog.reject) return button_box + def critical_error_message_box(title=None, message=None, parent=None, question=False): """ @@ -242,6 +245,7 @@ def critical_error_message_box(title=None, message=None, parent=None, data[u'title'] = title if title else UiStrings().Error return Receiver.send_message(u'openlp_error_message', data) + def create_horizontal_adjusting_combo_box(parent, name): """ Creates a QComboBox with adapting width for media items. @@ -258,6 +262,7 @@ def create_horizontal_adjusting_combo_box(parent, name): combo.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) return combo + def create_button(parent, name, **kwargs): """ Return an button with the object name set and the given parameters. @@ -324,6 +329,7 @@ def create_button(parent, name, **kwargs): log.warn(u'Parameter %s was not consumed in create_button().', key) return button + def create_action(parent, name, **kwargs): """ Return an action with the object name set and the given parameters. @@ -411,6 +417,7 @@ def create_action(parent, name, **kwargs): log.warn(u'Parameter %s was not consumed in create_action().', key) return action + def create_widget_action(parent, name=u'', **kwargs): """ Return a new QAction by calling ``create_action(parent, name, **kwargs)``. @@ -422,6 +429,7 @@ def create_widget_action(parent, name=u'', **kwargs): parent.addAction(action) return action + def set_case_insensitive_completer(cache, widget): """ Sets a case insensitive text completer for a widget. @@ -436,6 +444,7 @@ def set_case_insensitive_completer(cache, widget): completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) widget.setCompleter(completer) + def create_valign_selection_widgets(parent): """ Creates a standard label and combo box for asking users to select a @@ -455,6 +464,7 @@ def create_valign_selection_widgets(parent): label.setBuddy(combo_box) return label, combo_box + def find_and_set_in_combo_box(combo_box, value_to_find): """ Find a string in a combo box and set it as the selected item if present From 85d48705fc76b086ff763f3f475ab86c60db5f7a Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Sun, 22 Apr 2012 23:07:39 +0200 Subject: [PATCH 24/66] Try to prevent older versions of OpenLP from deleting newer Bibles due to a change in the metadata names. --- openlp/plugins/bibles/lib/upgrade.py | 38 ++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/openlp/plugins/bibles/lib/upgrade.py b/openlp/plugins/bibles/lib/upgrade.py index 53d485281..48863fb10 100644 --- a/openlp/plugins/bibles/lib/upgrade.py +++ b/openlp/plugins/bibles/lib/upgrade.py @@ -29,7 +29,7 @@ The :mod:`upgrade` module provides a way for the database and schema that is the backend for the Bibles plugin """ -from sqlalchemy import Table, update, delete, or_ +from sqlalchemy import Table, select, update, insert, or_ __version__ = 1 @@ -60,16 +60,27 @@ def upgrade_1(session, metadata, tables): .where(or_(metadata_table.c.key == u'bookname language', metadata_table.c.key == u'Bookname language'))\ .values(key=u'book_name_language')) - # Rename "Copyright" to "copyright" - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'Copyright').values(key=u'copyright')) - # Rename "Version" to "name" ("version" used by upgrade system) - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'Version').values(key=u'name')) - # Rename "Permissions" to "permissions" - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'Permissions')\ - .values(key=u'permissions')) + # Copy "Copyright" to "copyright" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + session.execute(insert(metadata_table).values( + key=u'copyright', + value=select(metadata_table, metadata_table.c.key == u'Copyright')\ + .as_scalar() + )) + # Copy "Version" to "name" ("version" used by upgrade system) + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + session.execute(insert(metadata_table).values( + key=u'name', + value=select(metadata_table, metadata_table.c.key == u'Version')\ + .as_scalar() + )) + # Copy "Permissions" to "permissions" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + session.execute(insert(metadata_table).values( + key=u'permissions', + value=select(metadata_table, metadata_table.c.key == u'Permissions')\ + .as_scalar() + )) session.execute(update(metadata_table)\ .where(metadata_table.c.key == u'download source')\ .values(key=u'download_source')) @@ -85,6 +96,7 @@ def upgrade_1(session, metadata, tables): session.execute(update(metadata_table)\ .where(metadata_table.c.key == u'proxy password')\ .values(key=u'proxy_password')) - session.execute(delete(metadata_table)\ - .where(metadata_table.c.key == u'dbversion')) + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + #session.execute(delete(metadata_table)\ + # .where(metadata_table.c.key == u'dbversion')) session.commit() From 640e12d85e2a38a918b7cc5120ec5412871448d1 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Mon, 23 Apr 2012 21:19:13 +0200 Subject: [PATCH 25/66] Some more refactoring and renaming. Changed the Bible upgrade to leave the old values behind so that older versions of OpenLP don't delete the "corrupted" databases. --- openlp/core/lib/mediamanageritem.py | 2 +- openlp/core/ui/servicemanager.py | 12 +-- openlp/core/ui/settingsform.py | 2 +- openlp/plugins/bibles/lib/upgrade.py | 153 +++++++++++++++++++++------ 4 files changed, 129 insertions(+), 40 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 49d4d3e4c..0fff153a3 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -582,7 +582,7 @@ class MediaManagerItem(QtGui.QWidget): Common method for generating a service item """ serviceItem = ServiceItem(self.plugin) - serviceItem.add_icon(self.plugin.icon_path) + serviceItem.add_icon(self.plugin.iconPath) if self.generateSlideData(serviceItem, item, xmlVersion, remote): return serviceItem else: diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index a4095a6bc..deb2b306f 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -272,7 +272,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.servicemanagerSettingsSection + 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 @@ -411,7 +411,7 @@ class ServiceManager(QtGui.QWidget): self.mainwindow, translate('OpenLP.ServiceManager', 'Open File'), SettingsManager.get_last_dir( - self.mainwindow.servicemanagerSettingsSection), + self.mainwindow.serviceManagerSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) if not fileName: @@ -419,7 +419,7 @@ class ServiceManager(QtGui.QWidget): else: fileName = loadFile SettingsManager.set_last_dir( - self.mainwindow.servicemanagerSettingsSection, + self.mainwindow.serviceManagerSettingsSection, split_filename(fileName)[0]) self.loadFile(fileName) @@ -469,7 +469,7 @@ class ServiceManager(QtGui.QWidget): service_file_name = '%s.osd' % basename log.debug(u'ServiceManager.saveFile - %s', path_file_name) SettingsManager.set_last_dir( - self.mainwindow.servicemanagerSettingsSection, + self.mainwindow.serviceManagerSettingsSection, path) service = [] write_list = [] @@ -622,7 +622,7 @@ class ServiceManager(QtGui.QWidget): else: default_filename = u'' directory = unicode(SettingsManager.get_last_dir( - self.mainwindow.servicemanagerSettingsSection)) + self.mainwindow.serviceManagerSettingsSection)) path = os.path.join(directory, default_filename) fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, UiStrings().SaveService, path, @@ -1107,7 +1107,7 @@ 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.servicemanagerSettingsSection + + self.mainwindow.serviceManagerSettingsSection + u'/service theme', QtCore.QVariant(self.service_theme)) self.regenerateServiceItems(True) diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index 4e2b5b649..b6808030a 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -80,7 +80,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): pos = self.stackedLayout.addWidget(tab) if is_active: item_name = QtGui.QListWidgetItem(tab.tabTitleVisible) - icon = build_icon(tab.icon_path) + icon = build_icon(tab.iconPath) item_name.setIcon(icon) self.settingListWidget.insertItem(location, item_name) else: diff --git a/openlp/plugins/bibles/lib/upgrade.py b/openlp/plugins/bibles/lib/upgrade.py index 48863fb10..b2b372261 100644 --- a/openlp/plugins/bibles/lib/upgrade.py +++ b/openlp/plugins/bibles/lib/upgrade.py @@ -28,10 +28,12 @@ The :mod:`upgrade` module provides a way for the database and schema that is the backend for the Bibles plugin """ +import logging -from sqlalchemy import Table, select, update, insert, or_ +from sqlalchemy import Table, func, select, insert __version__ = 1 +log = logging.getLogger(__name__) def upgrade_setup(metadata): """ @@ -55,47 +57,134 @@ def upgrade_1(session, metadata, tables): This upgrade renames a number of keys to a single naming convention.. """ metadata_table = metadata.tables[u'metadata'] - # Rename "Bookname language" to "book_name_language" - session.execute(update(metadata_table)\ - .where(or_(metadata_table.c.key == u'bookname language', - metadata_table.c.key == u'Bookname language'))\ - .values(key=u'book_name_language')) - # Copy "Copyright" to "copyright" - # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) - session.execute(insert(metadata_table).values( - key=u'copyright', - value=select(metadata_table, metadata_table.c.key == u'Copyright')\ - .as_scalar() - )) # Copy "Version" to "name" ("version" used by upgrade system) # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) session.execute(insert(metadata_table).values( key=u'name', - value=select(metadata_table, metadata_table.c.key == u'Version')\ - .as_scalar() + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'Version' + ).as_scalar() + )) + # Copy "Copyright" to "copyright" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + session.execute(insert(metadata_table).values( + key=u'copyright', + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'Copyright' + ).as_scalar() )) # Copy "Permissions" to "permissions" # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) session.execute(insert(metadata_table).values( key=u'permissions', - value=select(metadata_table, metadata_table.c.key == u'Permissions')\ - .as_scalar() + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'Permissions' + ).as_scalar() )) - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'download source')\ - .values(key=u'download_source')) - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'download name')\ - .values(key=u'download_name')) - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'proxy server')\ - .values(key=u'proxy_server')) - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'proxy username')\ - .values(key=u'proxy_username')) - session.execute(update(metadata_table)\ - .where(metadata_table.c.key == u'proxy password')\ - .values(key=u'proxy_password')) + # Copy "Bookname language" to "book_name_language" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + value_count = session.execute( + select( + [func.count(metadata_table.c.value)], + metadata_table.c.key == u'Bookname language' + ) + ).scalar() + if value_count > 0: + session.execute(insert(metadata_table).values( + key=u'book_name_language', + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'Bookname language' + ).as_scalar() + )) + # Copy "download source" to "download_source" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + value_count = session.execute( + select( + [func.count(metadata_table.c.value)], + metadata_table.c.key == u'download source' + ) + ).scalar() + log.debug(u'download source: %s', value_count) + if value_count > 0: + session.execute(insert(metadata_table).values( + key=u'download_source', + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'download source' + ).as_scalar() + )) + # Copy "download name" to "download_name" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + value_count = session.execute( + select( + [func.count(metadata_table.c.value)], + metadata_table.c.key == u'download name' + ) + ).scalar() + log.debug(u'download name: %s', value_count) + if value_count > 0: + session.execute(insert(metadata_table).values( + key=u'download_name', + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'download name' + ).as_scalar() + )) + # Copy "proxy server" to "proxy_server" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + value_count = session.execute( + select( + [func.count(metadata_table.c.value)], + metadata_table.c.key == u'proxy server' + ) + ).scalar() + log.debug(u'proxy server: %s', value_count) + if value_count > 0: + session.execute(insert(metadata_table).values( + key=u'proxy_server', + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'proxy server' + ).as_scalar() + )) + # Copy "proxy username" to "proxy_username" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + value_count = session.execute( + select( + [func.count(metadata_table.c.value)], + metadata_table.c.key == u'proxy username' + ) + ).scalar() + log.debug(u'proxy username: %s', value_count) + if value_count > 0: + session.execute(insert(metadata_table).values( + key=u'proxy_username', + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'proxy username' + ).as_scalar() + )) + # Copy "proxy password" to "proxy_password" + # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) + value_count = session.execute( + select( + [func.count(metadata_table.c.value)], + metadata_table.c.key == u'proxy password' + ) + ).scalar() + log.debug(u'proxy password: %s', value_count) + if value_count > 0: + session.execute(insert(metadata_table).values( + key=u'proxy_password', + value=select( + [metadata_table.c.value], + metadata_table.c.key == u'proxy password' + ).as_scalar() + )) # TODO: Clean up in a subsequent release of OpenLP (like 2.0 final) #session.execute(delete(metadata_table)\ # .where(metadata_table.c.key == u'dbversion')) From 19ea43ead86413458e8d9970b124431ad0f480d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armin=20K=C3=B6hler?= Date: Mon, 23 Apr 2012 22:21:38 +0200 Subject: [PATCH 26/66] fixes --- openlp/plugins/bibles/lib/mediaitem.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index c36ffa2bf..8afb933dd 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -436,6 +436,7 @@ class BibleMediaItem(MediaManagerItem): book_data = book_data_temp self.advancedBookComboBox.clear() first = True + initialise_chapter_verse = False language_selection = self.plugin.manager.get_language_selection(bible) booknames = BibleStrings().Booknames for book in book_data: @@ -614,13 +615,13 @@ class BibleMediaItem(MediaManagerItem): self.initialiseAdvancedBible( unicode(self.advancedVersionComboBox.currentText()), self.advancedBookComboBox.itemData( - int(self.advancedBookComboBox.currentIndex()))) + int(self.advancedBookComboBox.currentIndex()))) def onAdvancedSecondComboBox(self): self.initialiseAdvancedBible( unicode(self.advancedVersionComboBox.currentText()), self.advancedBookComboBox.itemData( - int(self.advancedBookComboBox.currentIndex()))) + int(self.advancedBookComboBox.currentIndex()))) def onAdvancedBookComboBox(self): item = int(self.advancedBookComboBox.currentIndex()) From ad84097547e063442ab9ec79df5ebb6a1f9e8747 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Tue, 24 Apr 2012 18:50:12 +0200 Subject: [PATCH 27/66] Added a generic except to catch other UNO problems. Fixes: https://launchpad.net/bugs/987568 --- openlp/core/ui/exceptionform.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/openlp/core/ui/exceptionform.py b/openlp/core/ui/exceptionform.py index ed720581c..7ea3a5bc1 100644 --- a/openlp/core/ui/exceptionform.py +++ b/openlp/core/ui/exceptionform.py @@ -77,6 +77,8 @@ try: UNO_VERSION = node.getByName(u'ooSetupVersion') except ImportError: UNO_VERSION = u'-' +except: + UNO_VERSION = u'- (Possible non-standard UNO installation)' try: WEBKIT_VERSION = QtWebKit.qWebKitVersion() except AttributeError: From 52e23a2eebd7b189cbb1f5ce937d1c845c633385 Mon Sep 17 00:00:00 2001 From: Philip Ridout Date: Tue, 24 Apr 2012 20:39:40 +0100 Subject: [PATCH 28/66] removed import that sliped in! --- openlp/plugins/songs/lib/dreambeamimport.py | 1 - 1 file changed, 1 deletion(-) diff --git a/openlp/plugins/songs/lib/dreambeamimport.py b/openlp/plugins/songs/lib/dreambeamimport.py index da649bba9..b251a8ce8 100644 --- a/openlp/plugins/songs/lib/dreambeamimport.py +++ b/openlp/plugins/songs/lib/dreambeamimport.py @@ -31,7 +31,6 @@ DreamBeam songs into the OpenLP database. import os import sys import logging -import types from lxml import etree, objectify From cbbfa8c23b69c7543d4e748b05b3b613ab8b6f98 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 13:13:16 +0200 Subject: [PATCH 29/66] clean ups --- openlp/core/ui/media/__init__.py | 13 +-- openlp/core/ui/media/mediacontroller.py | 114 +++++++++++------------- openlp/core/ui/media/vlcplayer.py | 19 ++-- 3 files changed, 71 insertions(+), 75 deletions(-) diff --git a/openlp/core/ui/media/__init__.py b/openlp/core/ui/media/__init__.py index f4f4d98d0..ff6f7ae91 100644 --- a/openlp/core/ui/media/__init__.py +++ b/openlp/core/ui/media/__init__.py @@ -69,12 +69,13 @@ class MediaInfo(object): def get_media_players(): """ This method extract the configured media players and overridden player from - the settings + the settings. ``players_list`` - this is a python list with all active media players + Awith all active media players. + ``overridden_player`` - here an special media player is choosen for all media actions + Here an special media player is chosen for all media actions. """ log.debug(u'get_media_players') players = unicode(QtCore.QSettings().value(u'media/players').toString()) @@ -92,15 +93,17 @@ def get_media_players(): players_list = players.replace(u'[', u'').replace(u']', u'').split(u',') return players_list, overridden_player + def set_media_players(players_list, overridden_player=u'auto'): """ This method saves the configured media players and overridden player to the settings ``players_list`` - this is a python list with all active media players + A list with all active media players. + ``overridden_player`` - here an special media player is choosen for all media actions + Here an special media player is chosen for all media actions. """ log.debug(u'set_media_players') players = u','.join(players_list) diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 7ccbd9245..bf5bcf808 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -84,10 +84,7 @@ class MediaController(object): def set_active_players(self): savedPlayers = get_media_players()[0] for player in self.mediaPlayers.keys(): - if player in savedPlayers: - self.mediaPlayers[player].isActive = True - else: - self.mediaPlayers[player].isActive = False + self.mediaPlayers[player].isActive = player in savedPlayers def register_controllers(self, controller): """ @@ -106,8 +103,8 @@ class MediaController(object): AppLocation.get_directory(AppLocation.AppDir), u'core', u'ui', u'media') for filename in os.listdir(controller_dir): - if filename.endswith(u'player.py') and \ - not filename == 'media_player.py': + if filename.endswith(u'player.py') and not \ + filename == 'media_player.py': path = os.path.join(controller_dir, filename) if os.path.isfile(path): modulename = u'openlp.core.ui.media.' + \ @@ -122,38 +119,36 @@ class MediaController(object): for controller_class in controller_classes: controller = controller_class(self) self.register_controllers(controller) - if self.mediaPlayers: - savedPlayers, overriddenPlayer = get_media_players() - invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers \ - if not mediaPlayer in self.mediaPlayers or \ - not self.mediaPlayers[mediaPlayer].check_available()] - if len(invalidMediaPlayers) > 0: - for invalidPlayer in invalidMediaPlayers: - savedPlayers.remove(invalidPlayer) - set_media_players(savedPlayers, overriddenPlayer) - self.set_active_players() - return True - else: + if not self.mediaPlayers: return False + savedPlayers, overriddenPlayer = get_media_players() + invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers + if not mediaPlayer in self.mediaPlayers or not + self.mediaPlayers[mediaPlayer].check_available()] + if invalidMediaPlayers: + for invalidPlayer in invalidMediaPlayers: + savedPlayers.remove(invalidPlayer) + set_media_players(savedPlayers, overriddenPlayer) + self.set_active_players() + return True def video_state(self): """ Check if there is a running media Player and do updating stuff (e.g. update the UI) """ - if len(self.curDisplayMediaPlayer.keys()) == 0: + if not self.curDisplayMediaPlayer.keys(): self.timer.stop() else: for display in self.curDisplayMediaPlayer.keys(): self.curDisplayMediaPlayer[display].resize(display) self.curDisplayMediaPlayer[display].update_ui(display) - if self.curDisplayMediaPlayer[display] \ - .state == MediaState.Playing: + if self.curDisplayMediaPlayer[display].state == \ + MediaState.Playing: return # no players are active anymore for display in self.curDisplayMediaPlayer.keys(): - if self.curDisplayMediaPlayer[display] \ - .state != MediaState.Paused: + if self.curDisplayMediaPlayer[display].state != MediaState.Paused: display.controller.seekSlider.setSliderPosition(0) self.timer.stop() @@ -333,8 +328,7 @@ class MediaController(object): 'Unsupported File'))) return False # dont care about actual theme, set a black background - if controller.isLive and ( \ - controller.media_info.is_background == False): + if controller.isLive and not controller.media_info.is_background: display.frame.evaluateJavaScript(u'show_video( \ "setBackBoard", null, null, null,"visible");') # now start playing @@ -395,7 +389,7 @@ class MediaController(object): """ Responds to the request to play a loaded video - ``msg`` + ``msg`` First element is the controller which should be used """ log.debug(u'video_play') @@ -497,15 +491,15 @@ class MediaController(object): First element is the boolean for Live indication """ isLive = msg[1] - if isLive: - controller = self.parent.liveController - for display in self.curDisplayMediaPlayer.keys(): - if display.controller == controller: - if self.curDisplayMediaPlayer[display] \ - .state == MediaState.Playing: - self.curDisplayMediaPlayer[display].pause(display) - self.curDisplayMediaPlayer[display] \ - .set_visible(display, False) + if not isLive: + return + controller = self.parent.liveController + for display in self.curDisplayMediaPlayer.keys(): + if display.controller != controller or \ + self.curDisplayMediaPlayer[display].state == MediaState.Playing: + continue + self.curDisplayMediaPlayer[display].pause(display) + self.curDisplayMediaPlayer[display].set_visible(display, False) def video_blank(self, msg): """ @@ -517,16 +511,16 @@ class MediaController(object): """ isLive = msg[1] hide_mode = msg[2] - if isLive: - Receiver.send_message(u'live_display_hide', hide_mode) - controller = self.parent.liveController - for display in self.curDisplayMediaPlayer.keys(): - if display.controller == controller: - if self.curDisplayMediaPlayer[display] \ - .state == MediaState.Playing: - self.curDisplayMediaPlayer[display].pause(display) - self.curDisplayMediaPlayer[display] \ - .set_visible(display, False) + if not isLive: + return + Receiver.send_message(u'live_display_hide', hide_mode) + controller = self.parent.liveController + for display in self.curDisplayMediaPlayer.keys(): + if display.controller != controller or \ + self.curDisplayMediaPlayer[display].state != MediaState.Playing: + continue + self.curDisplayMediaPlayer[display].pause(display) + self.curDisplayMediaPlayer[display].set_visible(display, False) def video_unblank(self, msg): """ @@ -538,19 +532,18 @@ class MediaController(object): """ Receiver.send_message(u'live_display_show') isLive = msg[1] - if isLive: - controller = self.parent.liveController - for display in self.curDisplayMediaPlayer.keys(): - if display.controller == controller: - if self.curDisplayMediaPlayer[display] \ - .state == MediaState.Paused: - if self.curDisplayMediaPlayer[display].play(display): - self.curDisplayMediaPlayer[display] \ - .set_visible(display, True) - # Start Timer for ui updates - if not self.timer.isActive(): - self.timer.start() - + if not isLive: + return + controller = self.parent.liveController + for display in self.curDisplayMediaPlayer.keys(): + if display.controller != controller or \ + self.curDisplayMediaPlayer[display].state != MediaState.Paused: + continue + if self.curDisplayMediaPlayer[display].play(display): + self.curDisplayMediaPlayer[display].set_visible(display, True) + # Start Timer for ui updates + if not self.timer.isActive(): + self.timer.start() def get_audio_extensions_list(self): audio_list = [] @@ -565,9 +558,8 @@ class MediaController(object): video_list = [] for player in self.mediaPlayers.values(): if player.isActive: - for item in player.video_extensions_list: - if not item in video_list: - video_list.append(item) + video_list.extend([item for item in player.video_extensions_list + if item not in video_list]) return video_list def finalise(self): diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 70a5c1cb5..21f8efedf 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -26,23 +26,24 @@ ############################################################################### import logging -import sys, os +import os +import sys from datetime import datetime + +from PyQt4 import QtCore, QtGui + +VLC_AVAILABLE = False try: import vlc - vlc_available = bool(vlc.get_default_instance()) + VLC_AVAILABLE = bool(vlc.get_default_instance()) except (ImportError, NameError): - vlc_available = False + pass except OSError, e: if sys.platform.startswith('win'): - if isinstance(e, WindowsError) and e.winerror == 126: - vlc_available = False - else: + if not isinstance(e, WindowsError) and e.winerror != 126: raise else: raise - -from PyQt4 import QtCore, QtGui from openlp.core.lib import Receiver from openlp.core.lib.mediaplayer import MediaPlayer from openlp.core.ui.media import MediaState @@ -128,7 +129,7 @@ class VlcPlayer(MediaPlayer): self.hasOwnWidget = True def check_available(self): - return vlc_available + return VLC_AVAILABLE def load(self, display): log.debug(u'load vid in Vlc Controller') From f01252c23b0d029827d785e1baa0040cb5fd40fb Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 13:31:42 +0200 Subject: [PATCH 30/66] fixed missing word --- openlp/core/ui/media/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/media/__init__.py b/openlp/core/ui/media/__init__.py index ff6f7ae91..5c4428a61 100644 --- a/openlp/core/ui/media/__init__.py +++ b/openlp/core/ui/media/__init__.py @@ -72,7 +72,7 @@ def get_media_players(): the settings. ``players_list`` - Awith all active media players. + A list with all active media players. ``overridden_player`` Here an special media player is chosen for all media actions. From 1869fd7593b3f003da06b8ad7ecd478219f55f6a Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 13:37:39 +0200 Subject: [PATCH 31/66] fixed clean up mistake --- openlp/core/ui/media/mediacontroller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index bf5bcf808..b7356fcf5 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -496,7 +496,7 @@ class MediaController(object): controller = self.parent.liveController for display in self.curDisplayMediaPlayer.keys(): if display.controller != controller or \ - self.curDisplayMediaPlayer[display].state == MediaState.Playing: + self.curDisplayMediaPlayer[display].state != MediaState.Playing: continue self.curDisplayMediaPlayer[display].pause(display) self.curDisplayMediaPlayer[display].set_visible(display, False) From 42bc12f3fb1b908e4b3ee7b572db9fbc12a78bb5 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 14:27:18 +0200 Subject: [PATCH 32/66] try to prevent traceback when vlc too old Fixes: https://launchpad.net/bugs/966086 --- openlp/core/ui/media/vlcplayer.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 21f8efedf..2f3b2a5d7 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -25,13 +25,19 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### +from datetime import datetime import logging import os import sys -from datetime import datetime from PyQt4 import QtCore, QtGui +from openlp.core.lib import Receiver +from openlp.core.lib.mediaplayer import MediaPlayer +from openlp.core.ui.media import MediaState + +log = logging.getLogger(__name__) + VLC_AVAILABLE = False try: import vlc @@ -44,11 +50,19 @@ except OSError, e: raise else: raise -from openlp.core.lib import Receiver -from openlp.core.lib.mediaplayer import MediaPlayer -from openlp.core.ui.media import MediaState -log = logging.getLogger(__name__) +if VLC_AVAILABLE: + try: + # Older versions of vlc fail here. + vlcInstance = vlc.Instance() + vlcInstance.media_player_new() + except AttributeError: + VLC_AVAILABLE = False + version = u'0.0.0' + try: + version = vlc.libvlc_get_version() + finally: + log.debug(u'VlC could not be loaded: %s' % version) AUDIO_EXT = [ u'*.mp3' From 9dc7d1a7952887c76390dd7e9861df835dfd1239 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 14:28:38 +0200 Subject: [PATCH 33/66] fixed cap --- openlp/core/ui/media/vlcplayer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 2f3b2a5d7..79b972838 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -62,7 +62,7 @@ if VLC_AVAILABLE: try: version = vlc.libvlc_get_version() finally: - log.debug(u'VlC could not be loaded: %s' % version) + log.debug(u'VLC could not be loaded: %s' % version) AUDIO_EXT = [ u'*.mp3' From 9668b22f859ce157c59324fbd55aa632a7873835 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 15:10:54 +0200 Subject: [PATCH 34/66] shorter solution --- openlp/core/ui/media/vlcplayer.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 79b972838..2e0b250d3 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -26,6 +26,7 @@ ############################################################################### from datetime import datetime +from distutils.version import LooseVersion import logging import os import sys @@ -53,16 +54,12 @@ except OSError, e: if VLC_AVAILABLE: try: - # Older versions of vlc fail here. - vlcInstance = vlc.Instance() - vlcInstance.media_player_new() - except AttributeError: - VLC_AVAILABLE = False + version = vlc.libvlc_get_version() + except: version = u'0.0.0' - try: - version = vlc.libvlc_get_version() - finally: - log.debug(u'VLC could not be loaded: %s' % version) + if LooseVersion(version) < '1.1.0': + VLC_AVAILABLE = False + log.debug(u'VLC could not be loaded: %s' % version) AUDIO_EXT = [ u'*.mp3' From 69affcc059976c8d9910aed386b0d3e3b11b7a20 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 15:51:05 +0200 Subject: [PATCH 35/66] removed dead code, refactor version comparison code --- openlp/.version | 2 +- openlp/core/__init__.py | 3 +- openlp/core/utils/__init__.py | 62 ++++++++++------------------------- 3 files changed, 19 insertions(+), 48 deletions(-) diff --git a/openlp/.version b/openlp/.version index 998994b7f..eeef06aee 100644 --- a/openlp/.version +++ b/openlp/.version @@ -1 +1 @@ -1.9.5-bzr1421 \ No newline at end of file +1.9.9-bzr1956 diff --git a/openlp/core/__init__.py b/openlp/core/__init__.py index b6efd5595..71c27a1d0 100644 --- a/openlp/core/__init__.py +++ b/openlp/core/__init__.py @@ -49,7 +49,7 @@ 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 + get_application_version __all__ = [u'OpenLP', u'main'] @@ -145,7 +145,6 @@ class OpenLP(QtGui.QApplication): VersionThread(self.mainWindow).start() Receiver.send_message(u'live_display_blank_check') self.mainWindow.appStartup() - DelayStartThread(self.mainWindow).start() # Skip exec_() for gui tests if not testing: return self.exec_() diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index e06c5ed32..594ce9623 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -27,14 +27,15 @@ """ The :mod:`openlp.core.utils` module provides the utility libraries for OpenLP. """ +from datetime import datetime +from distutils.version import LooseVersion import logging import os import re +from subprocess import Popen, PIPE import sys import time import urllib2 -from datetime import datetime -from subprocess import Popen, PIPE from PyQt4 import QtGui, QtCore @@ -55,7 +56,6 @@ UNO_CONNECTION_TYPE = u'pipe' #UNO_CONNECTION_TYPE = u'socket' CONTROL_CHARS = re.compile(r'[\x00-\x1F\x7F-\x9F]', re.UNICODE) INVALID_FILE_CHARS = re.compile(r'[\\/:\*\?"<>\|\+\[\]%]', re.UNICODE) -VERSION_SPLITTER = re.compile(r'([0-9]+).([0-9]+).([0-9]+)(?:-bzr([0-9]+))?') class VersionThread(QtCore.QThread): """ @@ -72,49 +72,8 @@ class VersionThread(QtCore.QThread): time.sleep(1) app_version = get_application_version() version = check_latest_version(app_version) - print app_version, version - remote_version = {} - local_version = {} - match = VERSION_SPLITTER.match(version) - if match: - remote_version[u'major'] = int(match.group(1)) - remote_version[u'minor'] = int(match.group(2)) - remote_version[u'release'] = int(match.group(3)) - if len(match.groups()) > 3 and match.group(4): - remote_version[u'revision'] = int(match.group(4)) - else: - return - match = VERSION_SPLITTER.match(app_version[u'full']) - if match: - local_version[u'major'] = int(match.group(1)) - local_version[u'minor'] = int(match.group(2)) - local_version[u'release'] = int(match.group(3)) - if len(match.groups()) > 3 and match.group(4): - local_version[u'revision'] = int(match.group(4)) - else: - return - if remote_version[u'major'] > local_version[u'major'] or \ - remote_version[u'minor'] > local_version[u'minor'] or \ - remote_version[u'release'] > local_version[u'release']: + if LooseVersion(str(version)) > str(app_version[u'full']): Receiver.send_message(u'openlp_version_check', u'%s' % version) - elif remote_version.get(u'revision') and \ - local_version.get(u'revision') and \ - remote_version[u'revision'] > local_version[u'revision']: - Receiver.send_message(u'openlp_version_check', u'%s' % version) - - -class DelayStartThread(QtCore.QThread): - """ - A special Qt thread class to build things after OpenLP has started - """ - def __init__(self, parent): - QtCore.QThread.__init__(self, parent) - - def run(self): - """ - Run the thread. - """ - Receiver.send_message(u'openlp_phonon_creation') class AppLocation(object): @@ -182,6 +141,7 @@ class AppLocation(object): check_directory_exists(path) return path + def _get_os_dir_path(dir_type): """ Return a path based on which OS and environment we are running in. @@ -221,6 +181,7 @@ def _get_os_dir_path(dir_type): u'.openlp', u'data') return os.path.join(unicode(os.getenv(u'HOME'), encoding), u'.openlp') + def _get_frozen_path(frozen_option, non_frozen_option): """ Return a path based on the system status. @@ -229,6 +190,7 @@ def _get_frozen_path(frozen_option, non_frozen_option): return frozen_option return non_frozen_option + def get_application_version(): """ Returns the application version of the running instance of OpenLP:: @@ -308,6 +270,7 @@ def get_application_version(): log.info(u'Openlp version %s' % APPLICATION_VERSION[u'version']) return APPLICATION_VERSION + def check_latest_version(current_version): """ Check the latest version of OpenLP against the version file on the OpenLP @@ -341,6 +304,7 @@ def check_latest_version(current_version): version_string = remote_version return version_string + def add_actions(target, actions): """ Adds multiple actions to a menu or toolbar in one command. @@ -358,6 +322,7 @@ def add_actions(target, actions): else: target.addAction(action) + def get_filesystem_encoding(): """ Returns the name of the encoding used to convert Unicode filenames into @@ -368,6 +333,7 @@ def get_filesystem_encoding(): encoding = sys.getdefaultencoding() return encoding + def get_images_filter(): """ Returns a filter string for a file dialog containing all the supported @@ -384,6 +350,7 @@ def get_images_filter(): visible_formats, actual_formats) return IMAGES_FILTER + def split_filename(path): """ Return a list of the parts in a given path. @@ -394,6 +361,7 @@ def split_filename(path): else: return os.path.split(path) + def clean_filename(filename): """ Removes invalid characters from the given ``filename``. @@ -405,6 +373,7 @@ def clean_filename(filename): filename = unicode(filename, u'utf-8') return INVALID_FILE_CHARS.sub(u'_', CONTROL_CHARS.sub(u'', filename)) + def delete_file(file_path_name): """ Deletes a file from the system. @@ -422,6 +391,7 @@ def delete_file(file_path_name): log.exception("Unable to delete file %s" % file_path_name) return False + def get_web_page(url, header=None, update_openlp=False): """ Attempts to download the webpage at url and returns that page or None. @@ -458,6 +428,7 @@ def get_web_page(url, header=None, update_openlp=False): log.debug(page) return page + def get_uno_command(): """ Returns the UNO command to launch an openoffice.org instance. @@ -470,6 +441,7 @@ def get_uno_command(): CONNECTION = u'"-accept=socket,host=localhost,port=2002;urp;"' return u'%s %s %s' % (COMMAND, OPTIONS, CONNECTION) + def get_uno_instance(resolver): """ Returns a running openoffice.org instance. From 76c004bb9a0d5cfd8d39876641c4f9ef790280a4 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 18:19:02 +0200 Subject: [PATCH 36/66] fixed LooseVersion usage --- openlp/core/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 594ce9623..c276c1f8e 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -72,7 +72,7 @@ class VersionThread(QtCore.QThread): time.sleep(1) app_version = get_application_version() version = check_latest_version(app_version) - if LooseVersion(str(version)) > str(app_version[u'full']): + if LooseVersion(str(version)) > LooseVersion(str(app_version[u'full'])): Receiver.send_message(u'openlp_version_check', u'%s' % version) From f6177c62b2de8a083db21d817780f3ae46452f04 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Sat, 28 Apr 2012 18:22:37 +0200 Subject: [PATCH 37/66] fixed LooseVersion usage --- openlp/core/ui/media/vlcplayer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 2e0b250d3..6d26f3b34 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -57,7 +57,7 @@ if VLC_AVAILABLE: version = vlc.libvlc_get_version() except: version = u'0.0.0' - if LooseVersion(version) < '1.1.0': + if LooseVersion(version) < LooseVersion('1.1.0'): VLC_AVAILABLE = False log.debug(u'VLC could not be loaded: %s' % version) From 21a88085e37b0f1eb5b94dea3c59529115241fdd Mon Sep 17 00:00:00 2001 From: Samuel Findlay Date: Mon, 30 Apr 2012 00:08:25 +1000 Subject: [PATCH 38/66] First attempt at class openlp.plugins.songs.lib.PowerSongImport --- openlp/core/ui/wizard.py | 1 + openlp/plugins/songs/lib/powersongimport.py | 142 ++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 openlp/plugins/songs/lib/powersongimport.py diff --git a/openlp/core/ui/wizard.py b/openlp/core/ui/wizard.py index 5369c9799..74dcfceaf 100644 --- a/openlp/core/ui/wizard.py +++ b/openlp/core/ui/wizard.py @@ -53,6 +53,7 @@ class WizardStrings(object): OL = u'OpenLyrics' OS = u'OpenSong' OSIS = u'OSIS' + PS = u'PowerSong' SB = u'SongBeamer' SoF = u'Songs of Fellowship' SSP = u'SongShow Plus' diff --git a/openlp/plugins/songs/lib/powersongimport.py b/openlp/plugins/songs/lib/powersongimport.py new file mode 100644 index 000000000..973f87795 --- /dev/null +++ b/openlp/plugins/songs/lib/powersongimport.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2012 Raoul Snyman # +# Portions copyright (c) 2008-2012 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:`powersongimport` module provides the functionality for importing +PowerSong songs into the OpenLP database. +""" +import logging + +from openlp.core.lib import translate +from openlp.plugins.songs.lib.songimport import SongImport + +log = logging.getLogger(__name__) + +class PowerSongImport(SongImport): + """ + The :class:`PowerSongImport` class provides the ability to import song files + from PowerSong. + + **PowerSong Song File Format:** + + * Encoded as UTF-8. + * The file has a number of fields, with the song metadata fields first, + followed by the lyrics fields. + + Fields: + Each field begins with one of four labels, each of which begin with one + non-printing byte: + + * ``ENQ`` (0x05) ``TITLE`` + * ``ACK`` (0x06) ``AUTHOR`` + * ``CR`` (0x0D) ``COPYRIGHTLINE`` + * ``EOT`` (0x04) ``PART`` + + The field label is separated from the field contents by one random byte. + Each field ends at the next field label, or at the end of the file. + + Metadata fields: + * Every PowerSong file begins with a TITLE field. + * This is followed by zero or more AUTHOR fields. + * The next field is always COPYRIGHTLINE, but it may be empty (in which + case the byte following the label is the null byte 0x00). + When the field contents are not empty, the first byte is 0xC2 and + should be discarded. + This field may contain a CCLI number at the end: e.g. "CCLI 176263" + + Lyrics fields: + * The COPYRIGHTLINE field is followed by zero or more PART fields, each + of which contains one verse. + * Lines have Windows line endings ``CRLF`` (0x0D, 0x0A). + * There is no concept of verse types. + + Valid extensions for a PowerSong song file are: + + * .song + """ + + def __init__(self, manager, **kwargs): + """ + Initialise the PowerSong importer. + """ + SongImport.__init__(self, manager, **kwargs) + + def doImport(self): + """ + Receive a single file or a list of files to import. + """ + if isinstance(self.importSource, list): + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for file in self.importSource: + if self.stopImportFlag: + return + self.setDefaults() + with open(file, 'rb') as song_file: + # Check file is valid PowerSong song format + if song_file.read(6) != u'\x05TITLE': + self.logError(file, unicode( + translate('SongsPlugin.PowerSongSongImport', + ('Invalid PowerSong song file. Missing ' + '"\x05TITLE" header.')))) + continue + song_data = song_file.read() + first_part, sep, song_data = song_data.partition( + u'\x0DCOPYRIGHTLINE') + if sep == '': + self.logError(file, unicode( + translate('SongsPlugin.PowerSongSongImport', + ('Invalid PowerSong song file. Missing ' + '"\x0DCOPYRIGHTLINE" string.')))) + continue + title_authors = first_part.split(u'\x06AUTHOR') + # Get the song title + self.title = title_authors[0][1:] + # Extract the author(s) + for author in title_authors[1:]: + self.parseAuthor(author[1:]) + # Get copyright and CCLI number + copyright, sep, song_data = song_data.partition( + u'\x04PART') + if sep == '': + self.logError(file, unicode( + translate('SongsPlugin.PowerSongSongImport', + ('No verses found. Missing ' + '"\x04PART" string(s).')))) + continue + copyright, sep, ccli_no = copyright[1:].rpartition(u'CCLI ') + if copyright[0] == u'\xC2': + copyright = copyright[1:] + self.addCopyright(copyright) + if ccli_no != '': + ccli_no = ccli_no.strip() + if ccli_no.isdigit(): + self.ccliNumber = ccli_no + # Get the verse(s) + verses = song_data.split(u'\x04PART') + for verse in verses: + self.addVerse(verse[1:]) + if not self.finish(): + self.logError(file) From c6c62bdcad6c79f90ca6c7e0558f3a2596103227 Mon Sep 17 00:00:00 2001 From: M2j Date: Sun, 29 Apr 2012 17:31:56 +0200 Subject: [PATCH 39/66] pythonifying code: - replace has_key() by key in dict - remove len() method from sequence and mapping types when mapping to bool --- openlp/core/theme/theme.py | 2 +- openlp/core/ui/mainwindow.py | 2 +- openlp/core/ui/media/mediacontroller.py | 4 +- openlp/core/ui/servicemanager.py | 6 +-- openlp/core/ui/shortcutlistform.py | 12 ++--- openlp/core/ui/slidecontroller.py | 4 +- openlp/core/ui/thememanager.py | 2 +- openlp/core/utils/__init__.py | 2 +- openlp/core/utils/actions.py | 4 +- openlp/plugins/alerts/forms/alertform.py | 2 +- openlp/plugins/bibles/bibleplugin.py | 4 +- .../plugins/bibles/forms/bibleupgradeform.py | 9 ++-- openlp/plugins/bibles/lib/__init__.py | 4 +- openlp/plugins/bibles/lib/http.py | 2 +- openlp/plugins/bibles/lib/mediaitem.py | 6 +-- openlp/plugins/custom/forms/editcustomform.py | 2 +- openlp/plugins/custom/lib/mediaitem.py | 2 +- openlp/plugins/songs/forms/editverseform.py | 6 +-- .../songs/forms/songmaintenanceform.py | 4 +- openlp/plugins/songs/lib/__init__.py | 2 +- openlp/plugins/songs/lib/cclifileimport.py | 2 +- openlp/plugins/songs/lib/easyslidesimport.py | 44 ++++++------------- openlp/plugins/songs/lib/ewimport.py | 10 ++--- openlp/plugins/songs/lib/mediaitem.py | 17 ++++--- openlp/plugins/songs/lib/olp1import.py | 5 +-- openlp/plugins/songs/lib/opensongimport.py | 24 ++++------ openlp/plugins/songs/lib/songimport.py | 15 +++---- .../plugins/songs/lib/songshowplusimport.py | 2 +- openlp/plugins/songs/lib/xml.py | 2 +- openlp/plugins/songs/songsplugin.py | 2 +- 30 files changed, 87 insertions(+), 117 deletions(-) diff --git a/openlp/core/theme/theme.py b/openlp/core/theme/theme.py index 90ca6cf6c..a77ab0c54 100644 --- a/openlp/core/theme/theme.py +++ b/openlp/core/theme/theme.py @@ -209,7 +209,7 @@ class Theme(object): val = int(element_text[1:], 16) except ValueError: # nope pass - elif DELPHI_COLORS.has_key(element_text): + elif element_text in DELPHI_COLORS: val = DELPHI_COLORS[element_text] delphi_color_change = True else: diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 0ebf66aab..e4a4e1616 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -730,7 +730,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.liveController.display.isVisible(): self.liveController.display.setFocus() self.activateWindow() - if len(self.arguments): + if self.arguments: args = [] for a in self.arguments: args.extend([a]) diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 7ccbd9245..73283ea9b 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -127,7 +127,7 @@ class MediaController(object): invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers \ if not mediaPlayer in self.mediaPlayers or \ not self.mediaPlayers[mediaPlayer].check_available()] - if len(invalidMediaPlayers) > 0: + if invalidMediaPlayers: for invalidPlayer in invalidMediaPlayers: savedPlayers.remove(invalidPlayer) set_media_players(savedPlayers, overriddenPlayer) @@ -141,7 +141,7 @@ class MediaController(object): Check if there is a running media Player and do updating stuff (e.g. update the UI) """ - if len(self.curDisplayMediaPlayer.keys()) == 0: + if not self.curDisplayMediaPlayer: self.timer.stop() else: for display in self.curDisplayMediaPlayer.keys(): diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index deb2b306f..c9dfeae50 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -483,7 +483,7 @@ class ServiceManager(QtGui.QWidget): 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: + if service_item[u'header'][u'background_audio']: for i, filename in \ enumerate(service_item[u'header'][u'background_audio']): new_file = os.path.join(u'audio', @@ -822,7 +822,7 @@ class ServiceManager(QtGui.QWidget): """ Called by the SlideController to select the next service item. """ - if len(self.serviceManagerList.selectedItems()) == 0: + if not self.serviceManagerList.selectedItems(): return selected = self.serviceManagerList.selectedItems()[0] lookFor = 0 @@ -840,7 +840,7 @@ class ServiceManager(QtGui.QWidget): """ Called by the SlideController to select the previous service item. """ - if len(self.serviceManagerList.selectedItems()) == 0: + if not self.serviceManagerList.selectedItems(): return selected = self.serviceManagerList.selectedItems()[0] prevItem = None diff --git a/openlp/core/ui/shortcutlistform.py b/openlp/core/ui/shortcutlistform.py index 211946793..457525dc0 100644 --- a/openlp/core/ui/shortcutlistform.py +++ b/openlp/core/ui/shortcutlistform.py @@ -151,7 +151,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): if action is None: continue shortcuts = self._actionShortcuts(action) - if len(shortcuts) == 0: + if not shortcuts: item.setText(1, u'') item.setText(2, u'') elif len(shortcuts) == 1: @@ -195,7 +195,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return shortcuts = self._actionShortcuts(action) new_shortcuts = [] - if len(shortcuts) != 0: + if shortcuts: new_shortcuts.append(shortcuts[0]) new_shortcuts.append( QtGui.QKeySequence(self.alternatePushButton.text())) @@ -241,7 +241,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.primaryPushButton.setChecked(False) self.alternatePushButton.setChecked(False) else: - if len(action.defaultShortcuts) != 0: + if action.defaultShortcuts: primary_label_text = action.defaultShortcuts[0].toString() if len(action.defaultShortcuts) == 2: alternate_label_text = action.defaultShortcuts[1].toString() @@ -313,7 +313,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): self.refreshShortcutList() primary_button_text = u'' alternate_button_text = u'' - if len(temp_shortcuts) != 0: + if temp_shortcuts: primary_button_text = temp_shortcuts[0].toString() if len(temp_shortcuts) == 2: alternate_button_text = temp_shortcuts[1].toString() @@ -363,7 +363,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return shortcuts = self._actionShortcuts(action) new_shortcuts = [] - if len(action.defaultShortcuts) != 0: + if action.defaultShortcuts: new_shortcuts.append(action.defaultShortcuts[0]) # We have to check if the primary default shortcut is available. But # we only have to check, if the action has a default primary @@ -391,7 +391,7 @@ class ShortcutListForm(QtGui.QDialog, Ui_ShortcutListDialog): return shortcuts = self._actionShortcuts(action) new_shortcuts = [] - if len(shortcuts) != 0: + if shortcuts: new_shortcuts.append(shortcuts[0]) if len(action.defaultShortcuts) == 2: new_shortcuts.append(action.defaultShortcuts[1]) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index a1b3a84b2..9de6555f2 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -555,7 +555,7 @@ class SlideController(Controller): Process the service item request queue. The key presses can arrive faster than the processing so implement a FIFO queue. """ - if len(self.keypress_queue): + if self.keypress_queue: while len(self.keypress_queue) and not self.keypress_loop: self.keypress_loop = True keypressCommand = self.keypress_queue.popleft() @@ -694,7 +694,7 @@ class SlideController(Controller): if item.is_text(): if QtCore.QSettings().value( self.parent().songsSettingsSection + u'/display songbar', - QtCore.QVariant(True)).toBool() and len(self.slideList) > 0: + QtCore.QVariant(True)).toBool() and self.slideList: self.songMenu.show() if item.is_capable(ItemCapabilities.CanLoop) and \ len(item.get_frames()) > 1: diff --git a/openlp/core/ui/thememanager.py b/openlp/core/ui/thememanager.py index 421346ba9..665c435b9 100644 --- a/openlp/core/ui/thememanager.py +++ b/openlp/core/ui/thememanager.py @@ -444,7 +444,7 @@ class ThemeManager(QtGui.QWidget): self.firstTime() files = SettingsManager.get_files(self.settingsSection, u'.png') # No themes have been found so create one - if len(files) == 0: + if not files: theme = ThemeXML() theme.theme_name = UiStrings().Default self._writeTheme(theme, None, None) diff --git a/openlp/core/utils/__init__.py b/openlp/core/utils/__init__.py index 1fc75b6d8..f71ec25cd 100644 --- a/openlp/core/utils/__init__.py +++ b/openlp/core/utils/__init__.py @@ -267,7 +267,7 @@ def get_application_version(): if code != 0: raise Exception(u'Error running bzr tags') lines = output.splitlines() - if len(lines) == 0: + if not lines: tag = u'0.0.0' revision = u'0' else: diff --git a/openlp/core/utils/actions.py b/openlp/core/utils/actions.py index 1a7d99fa5..271a7c884 100644 --- a/openlp/core/utils/actions.py +++ b/openlp/core/utils/actions.py @@ -90,7 +90,7 @@ class CategoryActionList(object): def append(self, name): weight = 0 - if len(self.actions) > 0: + if self.actions: weight = self.actions[-1][0] + 1 self.add(name, weight) @@ -156,7 +156,7 @@ class CategoryList(object): def append(self, name, actions=None): weight = 0 - if len(self.categories) > 0: + if self.categories: weight = self.categories[-1].weight + 1 if actions: self.add(name, weight, actions) diff --git a/openlp/plugins/alerts/forms/alertform.py b/openlp/plugins/alerts/forms/alertform.py index d2d4813a1..4f7633062 100644 --- a/openlp/plugins/alerts/forms/alertform.py +++ b/openlp/plugins/alerts/forms/alertform.py @@ -101,7 +101,7 @@ class AlertForm(QtGui.QDialog, Ui_AlertDialog): self.alertTextEdit.setText(u'') def onNewClick(self): - if len(self.alertTextEdit.text()) == 0: + if not self.alertTextEdit.text(): QtGui.QMessageBox.information(self, translate('AlertsPlugin.AlertForm', 'New Alert'), translate('AlertsPlugin.AlertForm', 'You haven\'t specified ' diff --git a/openlp/plugins/bibles/bibleplugin.py b/openlp/plugins/bibles/bibleplugin.py index 06d8b1c98..0dddab214 100644 --- a/openlp/plugins/bibles/bibleplugin.py +++ b/openlp/plugins/bibles/bibleplugin.py @@ -62,7 +62,7 @@ class BiblePlugin(Plugin): # unicode(UiStrings().Export)) # Set to invisible until we can export bibles self.exportBibleItem.setVisible(False) - if len(self.manager.old_bible_databases): + if self.manager.old_bible_databases: self.toolsUpgradeItem.setVisible(True) def finalise(self): @@ -83,7 +83,7 @@ class BiblePlugin(Plugin): """ Perform tasks on application startup """ - if len(self.manager.old_bible_databases): + if self.manager.old_bible_databases: if QtGui.QMessageBox.information(self.formParent, translate('OpenLP', 'Information'), translate('OpenLP', 'Bible format has changed.\nYou have to upgrade your ' diff --git a/openlp/plugins/bibles/forms/bibleupgradeform.py b/openlp/plugins/bibles/forms/bibleupgradeform.py index 0ef418de8..88bbd8c63 100644 --- a/openlp/plugins/bibles/forms/bibleupgradeform.py +++ b/openlp/plugins/bibles/forms/bibleupgradeform.py @@ -426,8 +426,7 @@ class BibleUpgradeForm(OpenLPWizard): if meta[u'key'] == u'download_source': web_bible = True self.includeWebBible = True - if meta.has_key(u'proxy_server'): - proxy_server = meta[u'proxy_server'] + proxy_server = meta.get(u'proxy_server') if web_bible: if meta_data[u'download_source'].lower() == u'crosswalk': handler = CWExtract(proxy_server) @@ -572,7 +571,7 @@ class BibleUpgradeForm(OpenLPWizard): int(verse[u'verse']), unicode(verse[u'text'])) Receiver.send_message(u'openlp_process_events') self.newbibles[number].session.commit() - if self.success.has_key(number) and not self.success[number]: + if not self.success.get(number, True): self.incrementProgressBar(unicode(translate( 'BiblesPlugin.UpgradeWizardForm', 'Upgrading Bible %s of %s: "%s"\nFailed')) % @@ -586,7 +585,7 @@ class BibleUpgradeForm(OpenLPWizard): 'Upgrading Bible %s of %s: "%s"\n' 'Complete')) % (number + 1, max_bibles, name)) - if self.newbibles.has_key(number): + if number in self.newbibles: self.newbibles[number].session.close() # Close the last bible's connection if possible. if old_bible is not None: @@ -599,7 +598,7 @@ class BibleUpgradeForm(OpenLPWizard): successful_import = 0 failed_import = 0 for number, filename in enumerate(self.files): - if self.success.has_key(number) and self.success[number]: + if self.success.get(number): successful_import += 1 elif self.checkBox[number].checkState() == QtCore.Qt.Checked: failed_import += 1 diff --git a/openlp/plugins/bibles/lib/__init__.py b/openlp/plugins/bibles/lib/__init__.py index 4f8582bdf..6cd8b8d8e 100644 --- a/openlp/plugins/bibles/lib/__init__.py +++ b/openlp/plugins/bibles/lib/__init__.py @@ -236,7 +236,7 @@ def get_reference_separator(separator_type): ``separator_type`` The role and format of the separator. """ - if len(REFERENCE_SEPARATORS) == 0: + if not REFERENCE_SEPARATORS: update_reference_separators() return REFERENCE_SEPARATORS[separator_type] @@ -247,7 +247,7 @@ def get_reference_match(match_type): ``match_type`` The type of match is ``range_separator``, ``range`` or ``full``. """ - if len(REFERENCE_MATCHES) == 0: + if not REFERENCE_MATCHES: update_reference_separators() return REFERENCE_MATCHES[match_type] diff --git a/openlp/plugins/bibles/lib/http.py b/openlp/plugins/bibles/lib/http.py index 302bdf999..fb79b26e1 100644 --- a/openlp/plugins/bibles/lib/http.py +++ b/openlp/plugins/bibles/lib/http.py @@ -106,7 +106,7 @@ class BGExtract(object): verse_list = {} # Cater for inconsistent mark up in the first verse of a chapter. first_verse = verses.find(u'versenum') - if first_verse and len(first_verse.contents): + if first_verse and first_verse.contents: verse_list[1] = unicode(first_verse.contents[0]) for verse in verses(u'sup', u'versenum'): raw_verse_num = verse.next diff --git a/openlp/plugins/bibles/lib/mediaitem.py b/openlp/plugins/bibles/lib/mediaitem.py index e3d173fad..bc456ee69 100644 --- a/openlp/plugins/bibles/lib/mediaitem.py +++ b/openlp/plugins/bibles/lib/mediaitem.py @@ -392,7 +392,7 @@ class BibleMediaItem(MediaManagerItem): if bible in bibles: find_and_set_in_combo_box(self.advancedVersionComboBox, bible) self.initialiseAdvancedBible(unicode(bible)) - elif len(bibles): + elif bibles: self.initialiseAdvancedBible(bibles[0]) bible = QtCore.QSettings().value( self.settingsSection + u'/quick bible', QtCore.QVariant( @@ -878,7 +878,7 @@ class BibleMediaItem(MediaManagerItem): items = item else: items = self.listView.selectedItems() - if len(items) == 0: + if not items: return False bible_text = u'' old_item = None @@ -949,7 +949,7 @@ class BibleMediaItem(MediaManagerItem): # Service Item: Title service_item.title = create_separated_list(raw_title) # Service Item: Theme - if len(self.settings.bible_theme) == 0: + if not self.settings.bible_theme: service_item.theme = None else: service_item.theme = self.settings.bible_theme diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 7c2da3bb0..a113a9e1b 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -254,7 +254,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): Checks whether a custom is valid or not. """ # We must have a title. - if len(self.titleEdit.displayText()) == 0: + if not self.titleEdit.displayText(): self.titleEdit.setFocus() critical_error_message_box( message=translate('CustomPlugin.EditCustomForm', diff --git a/openlp/plugins/custom/lib/mediaitem.py b/openlp/plugins/custom/lib/mediaitem.py index 541403cda..af2f261ca 100644 --- a/openlp/plugins/custom/lib/mediaitem.py +++ b/openlp/plugins/custom/lib/mediaitem.py @@ -258,7 +258,7 @@ class CustomMediaItem(MediaManagerItem): search_length = 2 if len(text) > search_length: self.onSearchTextButtonClicked() - elif len(text) == 0: + elif not text: self.onClearTextButtonClick() def onClearTextButtonClick(self): diff --git a/openlp/plugins/songs/forms/editverseform.py b/openlp/plugins/songs/forms/editverseform.py index 1e7bf4375..21285f39d 100644 --- a/openlp/plugins/songs/forms/editverseform.py +++ b/openlp/plugins/songs/forms/editverseform.py @@ -191,13 +191,13 @@ class EditVerseForm(QtGui.QDialog, Ui_EditVerseDialog): else: log.debug(unicode(self.getVerse()[0]).split(u'\n')) value = unicode(self.getVerse()[0]).split(u'\n')[1] - if len(value) == 0: + if not value: lines = unicode(self.getVerse()[0]).split(u'\n') index = 2 - while index < len(lines) and len(value) == 0: + while index < len(lines) and not value: value = lines[index] index += 1 - if len(value) == 0: + if not value: critical_error_message_box( message=translate('SongsPlugin.EditSongForm', 'You need to type some text in to the verse.')) diff --git a/openlp/plugins/songs/forms/songmaintenanceform.py b/openlp/plugins/songs/forms/songmaintenanceform.py index 697bcb4fe..7ba49a102 100644 --- a/openlp/plugins/songs/forms/songmaintenanceform.py +++ b/openlp/plugins/songs/forms/songmaintenanceform.py @@ -108,7 +108,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): item_id = self._getCurrentItemId(list_widget) if item_id != -1: item = self.manager.get_object(item_class, item_id) - if item and len(item.songs) == 0: + if item and not item.songs: if critical_error_message_box(dlg_title, del_text, self, True) == QtGui.QMessageBox.Yes: self.manager.delete_object(item_class, item.id) @@ -191,7 +191,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog): ``edit`` If we edit an item, this should be *True*. """ - if len(objects) > 0: + if objects: # If we edit an existing object, we need to make sure that we do # not return False when nothing has changed. if edit: diff --git a/openlp/plugins/songs/lib/__init__.py b/openlp/plugins/songs/lib/__init__.py index 91e21bb19..44cf8e113 100644 --- a/openlp/plugins/songs/lib/__init__.py +++ b/openlp/plugins/songs/lib/__init__.py @@ -316,7 +316,7 @@ def clean_song(manager, song): verse_type, verse[0][u'label'], verse[1], - verse[0][u'lang'] if verse[0].has_key(u'lang') else None + verse[0].get(u'lang') ) compare_order.append((u'%s%s' % (verse_type, verse[0][u'label']) ).upper()) diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 6b99f9a16..c2df6ab4e 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -211,7 +211,7 @@ class CCLIFileImport(SongImport): elif verse_lines[0].startswith(u'('): verse_type = VerseType.Tags[VerseType.Other] verse_text = verse_lines[1] - if len(verse_text) > 0: + if verse_text: self.addVerse(verse_text, verse_type) check_first_verse_line = False # Handle multiple authors diff --git a/openlp/plugins/songs/lib/easyslidesimport.py b/openlp/plugins/songs/lib/easyslidesimport.py index 206c127f5..eb21e6fc2 100644 --- a/openlp/plugins/songs/lib/easyslidesimport.py +++ b/openlp/plugins/songs/lib/easyslidesimport.py @@ -162,15 +162,12 @@ class EasySlidesImport(SongImport): separatorlines = 0 for line in lines: line = line.strip() - if len(line) == 0: + if not line: continue elif line[1:7] == u'region': # this is region separator, probably [region 2] region = self._extractRegion(line) - if regionlines.has_key(region): - regionlines[region] = regionlines[region] + 1 - else: - regionlines[region] = 1 + regionlines[region] = 1 + regionlines.get(region, 0) elif line[0] == u'[': separatorlines = separatorlines + 1 # if the song has separators @@ -206,7 +203,7 @@ class EasySlidesImport(SongImport): for line in lines: line = line.strip() - if len(line) == 0: + if not line: if separators: # separators are used, so empty line means slide break # inside verse @@ -215,15 +212,11 @@ class EasySlidesImport(SongImport): else: # separators are not used, so empty line starts a new verse vt = u'V' - if verses[reg].has_key(vt): - vn = len(verses[reg][vt].keys())+1 - else: - vn = u'1' + vn = len(verses[reg].get(vt, {})) + 1 inst = 1 elif line[0:7] == u'[region': reg = self._extractRegion(line) - if not verses.has_key(reg): - verses[reg] = {} + verses.setdefault(reg, {}) if not regionsInVerses: vt = u'V' vn = u'1' @@ -238,12 +231,7 @@ class EasySlidesImport(SongImport): if match: marker = match.group(1).strip() vn = match.group(2) - if len(marker) == 0: - vt = u'V' - elif MarkTypes.has_key(marker): - vt = MarkTypes[marker] - else: - vt = u'O' + vt = MarkTypes.get(marker, u'O') if marker else u'V' if regionsInVerses: region = defaultregion inst = 1 @@ -252,14 +240,10 @@ class EasySlidesImport(SongImport): else: if not [reg, vt, vn, inst] in our_verse_order: our_verse_order.append([reg, vt, vn, inst]) - if not verses[reg].has_key(vt): - verses[reg][vt] = {} - if not verses[reg][vt].has_key(vn): - verses[reg][vt][vn] = {} - if not verses[reg][vt][vn].has_key(inst): - verses[reg][vt][vn][inst] = [] - words = self.tidyText(line) - verses[reg][vt][vn][inst].append(words) + verses[reg].setdefault(vt, {}) + verses[reg][vt].setdefault(vn, {}) + verses[reg][vt][vn].setdefault(inst, []) + verses[reg][vt][vn][inst].append(self.tidyText(line)) # done parsing versetags = [] @@ -286,11 +270,11 @@ class EasySlidesImport(SongImport): try: order = unicode(song.Sequence).strip().split(u',') for tag in order: - if len(tag) == 0: + if not tag: continue elif tag[0].isdigit(): tag = u'V' + tag - elif SeqTypes.has_key(tag.lower()): + elif tag.lower() in SeqTypes: tag = SeqTypes[tag.lower()] else: continue @@ -307,9 +291,7 @@ class EasySlidesImport(SongImport): def _listHas(self, lst, subitems): for subitem in subitems: - if isinstance(lst, dict) and lst.has_key(subitem): - lst = lst[subitem] - elif isinstance(lst, list) and subitem in lst: + if subitem in lst: lst = lst[subitem] else: return False diff --git a/openlp/plugins/songs/lib/ewimport.py b/openlp/plugins/songs/lib/ewimport.py index f17900fd5..d58734610 100644 --- a/openlp/plugins/songs/lib/ewimport.py +++ b/openlp/plugins/songs/lib/ewimport.py @@ -62,15 +62,15 @@ def strip_rtf(blob, encoding): if control: # for delimiters, set control to False if c == '{': - if len(control_word) > 0: + if control_word: depth += 1 control = False elif c == '}': - if len(control_word) > 0: + if control_word: depth -= 1 control = False elif c == '\\': - new_control = (len(control_word) > 0) + new_control = bool(control_word) control = False elif c.isspace(): control = False @@ -79,7 +79,7 @@ def strip_rtf(blob, encoding): if len(control_word) == 3 and control_word[0] == '\'': control = False if not control: - if len(control_word) == 0: + if not control_word: if c == '{' or c == '}' or c == '\\': clear_text.append(c) else: @@ -360,7 +360,7 @@ class EasyWorshipSongImport(SongImport): field_desc = self.fieldDescs[field_desc_index] # Return None in case of 'blank' entries if isinstance(field, str): - if len(field.rstrip('\0')) == 0: + if not field.rstrip('\0'): return None elif field == 0: return None diff --git a/openlp/plugins/songs/lib/mediaitem.py b/openlp/plugins/songs/lib/mediaitem.py index 2836e98ad..51158a954 100644 --- a/openlp/plugins/songs/lib/mediaitem.py +++ b/openlp/plugins/songs/lib/mediaitem.py @@ -295,9 +295,8 @@ class SongMediaItem(MediaManagerItem): log.debug(u'display results Book') self.listView.clear() for book in searchresults: - songs = sorted(book.songs, key=lambda song: int( - re.sub(r'[^0-9]', u' ', song.song_number).partition(' ')[0]) - if len(re.sub(r'[^\w]', ' ', song.song_number)) else 0) + songs = sorted(book.songs, key=lambda song: + int(re.match(r'[0-9]+', u'0' + song.song_number).group())) for song in songs: # Do not display temporary songs if song.temporary: @@ -331,7 +330,7 @@ class SongMediaItem(MediaManagerItem): search_length = 3 if len(text) > search_length: self.onSearchTextButtonClicked() - elif len(text) == 0: + elif not text: self.onClearTextButtonClick() def onImportClick(self): @@ -491,7 +490,7 @@ class SongMediaItem(MediaManagerItem): else: # Loop through the verse list and expand the song accordingly. for order in song.verse_order.lower().split(): - if len(order) == 0: + if not order: break for verse in verseList: if verse[0][u'type'][0].lower() == order[0] and \ @@ -530,7 +529,7 @@ class SongMediaItem(MediaManagerItem): 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: + if song.media_files: service_item.add_capability(ItemCapabilities.HasBackgroundAudio) service_item.background_audio = \ [m.file_name for m in song.media_files] @@ -575,12 +574,12 @@ class SongMediaItem(MediaManagerItem): editId = song.id break # If there's any backing tracks, copy them over. - if len(item.background_audio) > 0: + if item.background_audio: self._updateBackgroundAudio(song, item) if add_song and self.addSongFromService: song = self.openLyrics.xml_to_song(item.xml_version) # If there's any backing tracks, copy them over. - if len(item.background_audio) > 0: + if item.background_audio: self._updateBackgroundAudio(song, item) editId = song.id self.onSearchTextButtonClicked() @@ -588,7 +587,7 @@ class SongMediaItem(MediaManagerItem): # Make sure we temporary import formatting tags. song = self.openLyrics.xml_to_song(item.xml_version, True) # If there's any backing tracks, copy them over. - if len(item.background_audio) > 0: + if item.background_audio: self._updateBackgroundAudio(song, item) editId = song.id temporary = True diff --git a/openlp/plugins/songs/lib/olp1import.py b/openlp/plugins/songs/lib/olp1import.py index 05095aa31..2d744bd2a 100644 --- a/openlp/plugins/songs/lib/olp1import.py +++ b/openlp/plugins/songs/lib/olp1import.py @@ -122,8 +122,7 @@ class OpenLP1SongImport(SongImport): cursor.execute( u'SELECT settingsid FROM songs WHERE songid = %s' % song_id) theme_id = cursor.fetchone()[0] - if themes.has_key(theme_id): - self.themeName = themes[theme_id] + self.themeName = themes.get(theme_id, u'') verses = lyrics.split(u'\n\n') for verse in verses: if verse.strip(): @@ -191,7 +190,7 @@ class OpenLP1SongImport(SongImport): # Detect charset by songs. cursor.execute(u'SELECT name FROM sqlite_master ' u'WHERE type = \'table\' AND name = \'tracks\'') - if len(cursor.fetchall()) > 0: + if cursor.fetchall(): cursor.execute(u'SELECT fulltrackname FROM tracks') tracks = cursor.fetchall() for track in tracks: diff --git a/openlp/plugins/songs/lib/opensongimport.py b/openlp/plugins/songs/lib/opensongimport.py index ad45ef22e..f78ba474b 100644 --- a/openlp/plugins/songs/lib/opensongimport.py +++ b/openlp/plugins/songs/lib/opensongimport.py @@ -174,7 +174,7 @@ class OpenSongImport(SongImport): if semicolon >= 0: this_line = this_line[:semicolon] this_line = this_line.strip() - if not len(this_line): + if not this_line: continue # skip guitar chords and page and column breaks if this_line.startswith(u'.') or this_line.startswith(u'---') \ @@ -197,15 +197,12 @@ class OpenSongImport(SongImport): # the verse tag verse_tag = content verse_num = u'1' - if len(verse_tag) == 0: - verse_index = 0 - else: - verse_index = VerseType.from_loose_input(verse_tag) + verse_index = VerseType.from_loose_input(verse_tag) \ + if verse_tag else 0 verse_tag = VerseType.Tags[verse_index] inst = 1 if [verse_tag, verse_num, inst] in our_verse_order \ - and verses.has_key(verse_tag) \ - and verses[verse_tag].has_key(verse_num): + and verse_num in verses.get(verse_tag, {}): inst = len(verses[verse_tag][verse_num]) + 1 continue # number at start of line.. it's verse number @@ -213,11 +210,9 @@ class OpenSongImport(SongImport): verse_num = this_line[0] this_line = this_line[1:].strip() our_verse_order.append([verse_tag, verse_num, inst]) - if not verses.has_key(verse_tag): - verses[verse_tag] = {} - if not verses[verse_tag].has_key(verse_num): - verses[verse_tag][verse_num] = {} - if not verses[verse_tag][verse_num].has_key(inst): + verses.setdefault(verse_tag, {}) + verses[verse_tag].setdefault(verse_num, {}) + if inst not in verses[verse_tag][verse_num]: verses[verse_tag][verse_num][inst] = [] our_verse_order.append([verse_tag, verse_num, inst]) # Tidy text and remove the ____s from extended words @@ -252,15 +247,14 @@ class OpenSongImport(SongImport): if match is not None: verse_tag = match.group(1) verse_num = match.group(2) - if not len(verse_tag): + if not verse_tag: verse_tag = VerseType.Tags[VerseType.Verse] else: # Assume it's no.1 if there are no digits verse_tag = verse_def verse_num = u'1' verse_def = u'%s%s' % (verse_tag, verse_num) - if verses.has_key(verse_tag) and \ - verses[verse_tag].has_key(verse_num): + if verse_num in verses.get(verse_tag, {}): self.verseOrderList.append(verse_def) else: log.info(u'Got order %s but not in verse tags, dropping' diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 6fd9dd403..74767d793 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -61,9 +61,9 @@ class SongImport(QtCore.QObject): """ self.manager = manager QtCore.QObject.__init__(self) - if kwargs.has_key(u'filename'): + if u'filename' in kwargs: self.importSource = kwargs[u'filename'] - elif kwargs.has_key(u'filenames'): + elif u'filenames' in kwargs: self.importSource = kwargs[u'filenames'] else: raise KeyError(u'Keyword arguments "filename[s]" not supplied.') @@ -273,7 +273,7 @@ class SongImport(QtCore.QObject): Author not checked here, if no author then "Author unknown" is automatically added """ - if not self.title or not len(self.verses): + if not self.title or not self.verses: return False else: return True @@ -314,13 +314,10 @@ 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.verseOrderList) and \ - self.verseOrderListGeneratedUseful: + if not 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.verseOrderList[i] = \ - verses_changed_to_other[current_verse_def] + self.verseOrderList = map(lambda v: verses_changed_to_other.get(v, v), + self.verseOrderList) song.verse_order = u' '.join(self.verseOrderList) song.copyright = self.copyright song.comments = self.comments diff --git a/openlp/plugins/songs/lib/songshowplusimport.py b/openlp/plugins/songs/lib/songshowplusimport.py index 8d2af5514..f86e061ca 100644 --- a/openlp/plugins/songs/lib/songshowplusimport.py +++ b/openlp/plugins/songs/lib/songshowplusimport.py @@ -204,7 +204,7 @@ class SongShowPlusImport(SongImport): elif verse_type == "pre-chorus": verse_tag = VerseType.Tags[VerseType.PreChorus] else: - if not self.otherList.has_key(verse_name): + if verse_name not in self.otherList: if ignore_unique: return None self.otherCount = self.otherCount + 1 diff --git a/openlp/plugins/songs/lib/xml.py b/openlp/plugins/songs/lib/xml.py index 816742d11..fdcb1dd60 100644 --- a/openlp/plugins/songs/lib/xml.py +++ b/openlp/plugins/songs/lib/xml.py @@ -611,7 +611,7 @@ class OpenLyrics(object): text += u'{%s}' % element.get(u'name') # Some formattings may have only start tag. # Handle this case if element has no children and contains no text. - if len(element) == 0 and not element.text: + if not element and not element.text: use_endtag = False # Append text from element. if element.text: diff --git a/openlp/plugins/songs/songsplugin.py b/openlp/plugins/songs/songsplugin.py index f55ac7a5f..4d59186e5 100644 --- a/openlp/plugins/songs/songsplugin.py +++ b/openlp/plugins/songs/songsplugin.py @@ -239,7 +239,7 @@ class SongsPlugin(Plugin): for sfile in os.listdir(db_dir): if sfile.startswith(u'songs_') and sfile.endswith(u'.sqlite'): song_dbs.append(os.path.join(db_dir, sfile)) - if len(song_dbs) == 0: + if not song_dbs: return progress = QtGui.QProgressDialog(self.formParent) progress.setWindowModality(QtCore.Qt.WindowModal) From 41402ab0789d744dc726e9e45d88b8892c171765 Mon Sep 17 00:00:00 2001 From: M2j Date: Sun, 29 Apr 2012 18:01:15 +0200 Subject: [PATCH 40/66] add a space character --- openlp/plugins/songs/lib/easyslidesimport.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/plugins/songs/lib/easyslidesimport.py b/openlp/plugins/songs/lib/easyslidesimport.py index eb21e6fc2..30d12964a 100644 --- a/openlp/plugins/songs/lib/easyslidesimport.py +++ b/openlp/plugins/songs/lib/easyslidesimport.py @@ -236,7 +236,7 @@ class EasySlidesImport(SongImport): region = defaultregion inst = 1 if self._listHas(verses, [reg, vt, vn, inst]): - inst = len(verses[reg][vt][vn])+1 + inst = len(verses[reg][vt][vn]) + 1 else: if not [reg, vt, vn, inst] in our_verse_order: our_verse_order.append([reg, vt, vn, inst]) From ea9bfb160d4f6a3bb8f1900c25fbf6e433b5f4fc Mon Sep 17 00:00:00 2001 From: Samuel Findlay Date: Mon, 30 Apr 2012 16:24:04 +1000 Subject: [PATCH 41/66] Integrated module openlp.plugins.songs.lib.powersongimport --- openlp/plugins/songs/forms/songimportform.py | 43 ++++++++++++++++++++ openlp/plugins/songs/lib/importer.py | 15 ++++--- openlp/plugins/songs/lib/powersongimport.py | 1 + 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 4a44c30ef..686c3d69e 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -171,6 +171,12 @@ class SongImportForm(OpenLPWizard): QtCore.QObject.connect(self.foilPresenterRemoveButton, QtCore.SIGNAL(u'clicked()'), self.onFoilPresenterRemoveButtonClicked) + QtCore.QObject.connect(self.powerSongAddButton, + QtCore.SIGNAL(u'clicked()'), + self.powerSongAddButtonClicked) + QtCore.QObject.connect(self.powerSongRemoveButton, + QtCore.SIGNAL(u'clicked()'), + self.powerSongRemoveButtonClicked) def addCustomPages(self): """ @@ -217,6 +223,8 @@ class SongImportForm(OpenLPWizard): self.addFileSelectItem(u'foilPresenter') # Open Song self.addFileSelectItem(u'openSong', u'OpenSong') + # PowerSong + self.addFileSelectItem(u'powerSong') # SongBeamer self.addFileSelectItem(u'songBeamer') # Song Show Plus @@ -264,6 +272,8 @@ class SongImportForm(OpenLPWizard): self.formatComboBox.setItemText( SongFormat.FoilPresenter, WizardStrings.FP) self.formatComboBox.setItemText(SongFormat.OpenSong, WizardStrings.OS) + self.formatComboBox.setItemText( + SongFormat.PowerSong, WizardStrings.PS) self.formatComboBox.setItemText( SongFormat.SongBeamer, WizardStrings.SB) self.formatComboBox.setItemText( @@ -305,6 +315,10 @@ class SongImportForm(OpenLPWizard): translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.dreamBeamRemoveButton.setText( translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) + self.powerSongAddButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Add Files...')) + self.powerSongRemoveButton.setText( + translate('SongsPlugin.ImportWizardForm', 'Remove File(s)')) self.songsOfFellowshipAddButton.setText( translate('SongsPlugin.ImportWizardForm', 'Add Files...')) self.songsOfFellowshipRemoveButton.setText( @@ -417,6 +431,12 @@ class SongImportForm(OpenLPWizard): WizardStrings.YouSpecifyFile % WizardStrings.DB) self.dreamBeamAddButton.setFocus() return False + elif source_format == SongFormat.PowerSong: + if self.powerSongFileListWidget.count() == 0: + critical_error_message_box(UiStrings().NFSp, + WizardStrings.YouSpecifyFile % WizardStrings.PS) + self.powerSongAddButton.setFocus() + return False elif source_format == SongFormat.SongsOfFellowship: if self.songsOfFellowshipFileListWidget.count() == 0: critical_error_message_box(UiStrings().NFSp, @@ -600,6 +620,22 @@ class SongImportForm(OpenLPWizard): """ self.removeSelectedItems(self.dreamBeamFileListWidget) + def onPowerSongAddButtonClicked(self): + """ + Get PowerSong song database files + """ + self.getFiles(WizardStrings.OpenTypeFile % WizardStrings.PS, + self.powerSongFileListWidget, u'%s (*.song)' + % translate('SongsPlugin.ImportWizardForm', + 'PowerSong Song Files') + ) + + def onPowerSongRemoveButtonClicked(self): + """ + Remove selected PowerSong files from the import list + """ + self.removeSelectedItems(self.powerSongFileListWidget) + def onSongsOfFellowshipAddButtonClicked(self): """ Get Songs of Fellowship song database files @@ -717,6 +753,7 @@ class SongImportForm(OpenLPWizard): self.wordsOfWorshipFileListWidget.clear() self.ccliFileListWidget.clear() self.dreamBeamFileListWidget.clear() + self.powerSongFileListWidget.clear() self.songsOfFellowshipFileListWidget.clear() self.genericFileListWidget.clear() self.easySlidesFilenameEdit.setText(u'') @@ -784,6 +821,12 @@ class SongImportForm(OpenLPWizard): filenames=self.getListOfFiles( self.dreamBeamFileListWidget) ) + elif source_format == SongFormat.PowerSong: + # Import PowerSong songs + importer = self.plugin.importSongs(SongFormat.PowerSong, + filenames=self.getListOfFiles( + self.powerSongFileListWidget) + ) elif source_format == SongFormat.SongsOfFellowship: # Import a Songs of Fellowship RTF file importer = self.plugin.importSongs(SongFormat.SongsOfFellowship, diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 28a57339e..9dde9f0af 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -36,6 +36,7 @@ from openlyricsimport import OpenLyricsImport from wowimport import WowImport from cclifileimport import CCLIFileImport from dreambeamimport import DreamBeamImport +from powersongimport import PowerSongImport from ewimport import EasyWorshipSongImport from songbeamerimport import SongBeamerImport from songshowplusimport import SongShowPlusImport @@ -79,11 +80,12 @@ class SongFormat(object): EasyWorship = 7 FoilPresenter = 8 OpenSong = 9 - SongBeamer = 10 - SongShowPlus = 11 - SongsOfFellowship = 12 - WordsOfWorship = 13 - #CSV = 14 + PowerSong = 10 + SongBeamer = 11 + SongShowPlus = 12 + SongsOfFellowship = 13 + WordsOfWorship = 14 + #CSV = 15 @staticmethod def get_class(format): @@ -111,6 +113,8 @@ class SongFormat(object): return CCLIFileImport elif format == SongFormat.DreamBeam: return DreamBeamImport + elif format == SongFormat.PowerSong: + return PowerSongImport elif format == SongFormat.EasySlides: return EasySlidesImport elif format == SongFormat.EasyWorship: @@ -139,6 +143,7 @@ class SongFormat(object): SongFormat.EasyWorship, SongFormat.FoilPresenter, SongFormat.OpenSong, + SongFormat.PowerSong, SongFormat.SongBeamer, SongFormat.SongShowPlus, SongFormat.SongsOfFellowship, diff --git a/openlp/plugins/songs/lib/powersongimport.py b/openlp/plugins/songs/lib/powersongimport.py index 973f87795..37d46e35c 100644 --- a/openlp/plugins/songs/lib/powersongimport.py +++ b/openlp/plugins/songs/lib/powersongimport.py @@ -103,6 +103,7 @@ class PowerSongImport(SongImport): '"\x05TITLE" header.')))) continue song_data = song_file.read() + # Extract title and author fields first_part, sep, song_data = song_data.partition( u'\x0DCOPYRIGHTLINE') if sep == '': From 370603c779e58a83c8e34ce4097c144b0644eb90 Mon Sep 17 00:00:00 2001 From: Samuel Findlay Date: Mon, 30 Apr 2012 20:57:44 +1000 Subject: [PATCH 42/66] PowerSong importer working. Successful on test set of 1057 songs --- openlp/plugins/songs/forms/songimportform.py | 4 +- openlp/plugins/songs/lib/powersongimport.py | 48 ++++++++++++++------ 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/openlp/plugins/songs/forms/songimportform.py b/openlp/plugins/songs/forms/songimportform.py index 686c3d69e..0cacae612 100644 --- a/openlp/plugins/songs/forms/songimportform.py +++ b/openlp/plugins/songs/forms/songimportform.py @@ -173,10 +173,10 @@ class SongImportForm(OpenLPWizard): self.onFoilPresenterRemoveButtonClicked) QtCore.QObject.connect(self.powerSongAddButton, QtCore.SIGNAL(u'clicked()'), - self.powerSongAddButtonClicked) + self.onPowerSongAddButtonClicked) QtCore.QObject.connect(self.powerSongRemoveButton, QtCore.SIGNAL(u'clicked()'), - self.powerSongRemoveButtonClicked) + self.onPowerSongRemoveButtonClicked) def addCustomPages(self): """ diff --git a/openlp/plugins/songs/lib/powersongimport.py b/openlp/plugins/songs/lib/powersongimport.py index 37d46e35c..207777570 100644 --- a/openlp/plugins/songs/lib/powersongimport.py +++ b/openlp/plugins/songs/lib/powersongimport.py @@ -29,6 +29,7 @@ The :mod:`powersongimport` module provides the functionality for importing PowerSong songs into the OpenLP database. """ import logging +import re from openlp.core.lib import translate from openlp.plugins.songs.lib.songimport import SongImport @@ -52,7 +53,7 @@ class PowerSongImport(SongImport): * ``ENQ`` (0x05) ``TITLE`` * ``ACK`` (0x06) ``AUTHOR`` - * ``CR`` (0x0D) ``COPYRIGHTLINE`` + * ``CR`` (0x0d) ``COPYRIGHTLINE`` * ``EOT`` (0x04) ``PART`` The field label is separated from the field contents by one random byte. @@ -63,14 +64,14 @@ class PowerSongImport(SongImport): * This is followed by zero or more AUTHOR fields. * The next field is always COPYRIGHTLINE, but it may be empty (in which case the byte following the label is the null byte 0x00). - When the field contents are not empty, the first byte is 0xC2 and + When the field contents are not empty, the first byte is 0xc2 and should be discarded. This field may contain a CCLI number at the end: e.g. "CCLI 176263" Lyrics fields: * The COPYRIGHTLINE field is followed by zero or more PART fields, each of which contains one verse. - * Lines have Windows line endings ``CRLF`` (0x0D, 0x0A). + * Lines have Windows line endings ``CRLF`` (0x0d, 0x0a). * There is no concept of verse types. Valid extensions for a PowerSong song file are: @@ -102,11 +103,11 @@ class PowerSongImport(SongImport): ('Invalid PowerSong song file. Missing ' '"\x05TITLE" header.')))) continue - song_data = song_file.read() + song_data = unicode(song_file.read(), u'utf-8', u'replace') # Extract title and author fields first_part, sep, song_data = song_data.partition( u'\x0DCOPYRIGHTLINE') - if sep == '': + if not sep: self.logError(file, unicode( translate('SongsPlugin.PowerSongSongImport', ('Invalid PowerSong song file. Missing ' @@ -114,30 +115,47 @@ class PowerSongImport(SongImport): continue title_authors = first_part.split(u'\x06AUTHOR') # Get the song title - self.title = title_authors[0][1:] + self.title = self.stripControlChars(title_authors[0][1:]) # Extract the author(s) for author in title_authors[1:]: - self.parseAuthor(author[1:]) + self.parseAuthor(self.stripControlChars(author[1:])) # Get copyright and CCLI number copyright, sep, song_data = song_data.partition( u'\x04PART') - if sep == '': + if not sep: self.logError(file, unicode( translate('SongsPlugin.PowerSongSongImport', ('No verses found. Missing ' - '"\x04PART" string(s).')))) + '"\x04PART" string.')))) continue copyright, sep, ccli_no = copyright[1:].rpartition(u'CCLI ') - if copyright[0] == u'\xC2': - copyright = copyright[1:] - self.addCopyright(copyright) - if ccli_no != '': + if not sep: + copyright = ccli_no + ccli_no = u'' + if copyright: + if copyright[0] == u'\u00c2': + copyright = copyright[1:] + self.addCopyright(self.stripControlChars( + copyright.rstrip(u'\n'))) + if ccli_no: ccli_no = ccli_no.strip() if ccli_no.isdigit(): - self.ccliNumber = ccli_no + self.ccliNumber = self.stripControlChars(ccli_no) # Get the verse(s) verses = song_data.split(u'\x04PART') for verse in verses: - self.addVerse(verse[1:]) + self.addVerse(self.stripControlChars(verse[1:])) if not self.finish(): self.logError(file) + + def stripControlChars(self, text): + """ + Get rid of ASCII control characters. + + Illegals chars are ASCII code points 0-31 and 127, except: + * ``HT`` (0x09) - Tab + * ``LF`` (0x0a) - Line feed + * ``CR`` (0x0d) - Carriage return + """ + ILLEGAL_CHARS = u'([\x00-\x08\x0b-\x0c\x0e-\x1f\x7f])' + return re.sub(ILLEGAL_CHARS, '', text) \ No newline at end of file From 1184e9219d3d4e4abd9d34e4a18783a90de74db1 Mon Sep 17 00:00:00 2001 From: Samuel Findlay Date: Mon, 30 Apr 2012 22:19:36 +1000 Subject: [PATCH 43/66] Small fixes for comments typos in songs.lib modules --- openlp/plugins/songs/lib/importer.py | 2 +- openlp/plugins/songs/lib/powersongimport.py | 3 +-- openlp/plugins/songs/lib/songimport.py | 2 +- openlp/plugins/songs/lib/wowimport.py | 6 +++--- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/openlp/plugins/songs/lib/importer.py b/openlp/plugins/songs/lib/importer.py index 9dde9f0af..16d943a73 100644 --- a/openlp/plugins/songs/lib/importer.py +++ b/openlp/plugins/songs/lib/importer.py @@ -90,7 +90,7 @@ class SongFormat(object): @staticmethod def get_class(format): """ - Return the appropriate imeplementation class. + Return the appropriate implementation class. ``format`` The song format. diff --git a/openlp/plugins/songs/lib/powersongimport.py b/openlp/plugins/songs/lib/powersongimport.py index 207777570..3c3d9a641 100644 --- a/openlp/plugins/songs/lib/powersongimport.py +++ b/openlp/plugins/songs/lib/powersongimport.py @@ -75,8 +75,7 @@ class PowerSongImport(SongImport): * There is no concept of verse types. Valid extensions for a PowerSong song file are: - - * .song + * .song """ def __init__(self, manager, **kwargs): diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index 6fd9dd403..b3ceb49ec 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -111,7 +111,7 @@ class SongImport(QtCore.QObject): instance a database), then this should be the song's title. ``reason`` - The reason, why the import failed. The string should be as + The reason why the import failed. The string should be as informative as possible. """ self.setDefaults() diff --git a/openlp/plugins/songs/lib/wowimport.py b/openlp/plugins/songs/lib/wowimport.py index 99f448736..97a11d873 100644 --- a/openlp/plugins/songs/lib/wowimport.py +++ b/openlp/plugins/songs/lib/wowimport.py @@ -71,7 +71,7 @@ class WowImport(SongImport): * ``SOH`` (0x01) - Chorus * ``STX`` (0x02) - Bridge - Blocks are seperated by two bytes. The first byte is 0x01, and the + Blocks are separated by two bytes. The first byte is 0x01, and the second byte is 0x80. Lines: @@ -126,7 +126,7 @@ class WowImport(SongImport): ('Invalid Words of Worship song file. Missing ' '"CSongDoc::CBlock" string.')))) continue - # Seek to the beging of the first block + # Seek to the beginning of the first block song_data.seek(82) for block in range(no_of_blocks): self.linesToRead = ord(song_data.read(4)[:1]) @@ -140,7 +140,7 @@ class WowImport(SongImport): block_text += self.lineText self.linesToRead -= 1 block_type = BLOCK_TYPES[ord(song_data.read(4)[:1])] - # Blocks are seperated by 2 bytes, skip them, but not if + # Blocks are separated by 2 bytes, skip them, but not if # this is the last block! if block + 1 < no_of_blocks: song_data.seek(2, os.SEEK_CUR) From bd4cded398df67b3de98e821ed90d8c9585acaa2 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 1 May 2012 12:38:19 +0200 Subject: [PATCH 44/66] updated vlc.py --- openlp/core/ui/media/vlc.py | 61 ++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/openlp/core/ui/media/vlc.py b/openlp/core/ui/media/vlc.py index 6ad30a3e4..1f6aa0e6a 100644 --- a/openlp/core/ui/media/vlc.py +++ b/openlp/core/ui/media/vlc.py @@ -2,25 +2,26 @@ # Python ctypes bindings for VLC # -# Copyright (C) 2009-2010 the VideoLAN team +# Copyright (C) 2009-2012 the VideoLAN team # $Id: $ # # Authors: Olivier Aubert # Jean Brouwers +# Geoff Salmon # -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. +# This library is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This library 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 +# Lesser General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA """This module provides bindings for the LibVLC public API, see U{http://wiki.videolan.org/LibVLC}. @@ -47,7 +48,7 @@ import sys from inspect import getargspec __version__ = "N/A" -build_date = "Tue Jan 17 12:20:48 2012" +build_date = "Fri Apr 27 16:47:21 2012" # Internal guard to prevent internal classes to be directly # instanciated. @@ -126,7 +127,7 @@ class VLCException(Exception): try: _Ints = (int, long) except NameError: # no long in Python 3+ - _Ints = int + _Ints = int _Seqs = (list, tuple) # Default instance. It is used to instanciate classes directly in the @@ -904,6 +905,11 @@ class Instance(_Ctype): def media_new(self, mrl, *options): """Create a new Media instance. + If mrl contains a colon (:), it will be treated as a + URL. Else, it will be considered as a local path. If you need + more control, directly use media_new_location/media_new_path + methods. + Options can be specified as supplementary string parameters, e.g. C{m = i.media_new('foo.avi', 'sub-filter=marq{marquee=Hello}', 'vout-filter=invert')} @@ -914,7 +920,12 @@ class Instance(_Ctype): @param options: optional media option=value strings """ - m = libvlc_media_new_location(self, mrl) + if ':' in mrl: + # Assume it is a URL + m = libvlc_media_new_location(self, mrl) + else: + # Else it should be a local path. + m = libvlc_media_new_path(self, mrl) for o in options: libvlc_media_add_option(m, o) m._instance = self @@ -1511,7 +1522,7 @@ class Media(_Ctype): def save_meta(self): '''Save the meta previously set. - @return: true if the write operation was successfull. + @return: true if the write operation was successful. ''' return libvlc_media_save_meta(self) @@ -2230,7 +2241,7 @@ class MediaPlayer(_Ctype): @param format: a four-characters string identifying the sample format (e.g. "S16N" or "FL32"). @param rate: sample rate (expressed in Hz). @param channels: channels count. - @version: LibVLC 1.2.0 or later. + @version: LibVLC 2.0.0 or later. ''' return libvlc_audio_set_format(self, format, rate, channels) @@ -2378,7 +2389,7 @@ class MediaPlayer(_Ctype): def navigate(self, navigate): '''Navigate through DVD Menu. @param navigate: the Navigation mode. - @version: libVLC 1.2.0 or later. + @version: libVLC 2.0.0 or later. ''' return libvlc_media_player_navigate(self, navigate) @@ -2489,7 +2500,7 @@ class MediaPlayer(_Ctype): '''Get the current subtitle delay. Positive values means subtitles are being displayed later, negative values earlier. @return: time (in microseconds) the display of subtitles is being delayed. - @version: LibVLC 1.2.0 or later. + @version: LibVLC 2.0.0 or later. ''' return libvlc_video_get_spu_delay(self) @@ -2500,7 +2511,7 @@ class MediaPlayer(_Ctype): The subtitle delay will be reset to zero each time the media changes. @param i_delay: time (in microseconds) the display of subtitles should be delayed. @return: 0 on success, -1 on error. - @version: LibVLC 1.2.0 or later. + @version: LibVLC 2.0.0 or later. ''' return libvlc_video_set_spu_delay(self, i_delay) @@ -3247,7 +3258,7 @@ def libvlc_media_set_meta(p_md, e_meta, psz_value): def libvlc_media_save_meta(p_md): '''Save the meta previously set. @param p_md: the media desriptor. - @return: true if the write operation was successfull. + @return: true if the write operation was successful. ''' f = _Cfunctions.get('libvlc_media_save_meta', None) or \ _Cfunction('libvlc_media_save_meta', ((1,),), None, @@ -4084,7 +4095,7 @@ def libvlc_audio_set_format(mp, format, rate, channels): @param format: a four-characters string identifying the sample format (e.g. "S16N" or "FL32"). @param rate: sample rate (expressed in Hz). @param channels: channels count. - @version: LibVLC 1.2.0 or later. + @version: LibVLC 2.0.0 or later. ''' f = _Cfunctions.get('libvlc_audio_set_format', None) or \ _Cfunction('libvlc_audio_set_format', ((1,), (1,), (1,), (1,),), None, @@ -4328,7 +4339,7 @@ def libvlc_media_player_navigate(p_mi, navigate): '''Navigate through DVD Menu. @param p_mi: the Media Player. @param navigate: the Navigation mode. - @version: libVLC 1.2.0 or later. + @version: libVLC 2.0.0 or later. ''' f = _Cfunctions.get('libvlc_media_player_navigate', None) or \ _Cfunction('libvlc_media_player_navigate', ((1,), (1,),), None, @@ -4554,7 +4565,7 @@ def libvlc_video_get_spu_delay(p_mi): displayed later, negative values earlier. @param p_mi: media player. @return: time (in microseconds) the display of subtitles is being delayed. - @version: LibVLC 1.2.0 or later. + @version: LibVLC 2.0.0 or later. ''' f = _Cfunctions.get('libvlc_video_get_spu_delay', None) or \ _Cfunction('libvlc_video_get_spu_delay', ((1,),), None, @@ -4569,7 +4580,7 @@ def libvlc_video_set_spu_delay(p_mi, i_delay): @param p_mi: media player. @param i_delay: time (in microseconds) the display of subtitles should be delayed. @return: 0 on success, -1 on error. - @version: LibVLC 1.2.0 or later. + @version: LibVLC 2.0.0 or later. ''' f = _Cfunctions.get('libvlc_video_set_spu_delay', None) or \ _Cfunction('libvlc_video_set_spu_delay', ((1,), (1,),), None, From a0225d790a4da34255e7bf53772ad263bd9d68d4 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Tue, 1 May 2012 13:00:02 +0200 Subject: [PATCH 45/66] replaced numScreens by screenCount; removed 0 in range() --- openlp/core/lib/mediamanageritem.py | 6 +++--- openlp/core/ui/mediadockmanager.py | 4 ++-- openlp/core/ui/screen.py | 6 +++--- openlp/core/ui/settingsform.py | 4 ++-- openlp/core/ui/slidecontroller.py | 2 +- openlp/plugins/custom/forms/editcustomform.py | 6 +++--- .../presentations/lib/powerpointcontroller.py | 2 +- openlp/plugins/songs/forms/editsongform.py | 12 ++++++------ openlp/plugins/songs/lib/cclifileimport.py | 2 +- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index 0fff153a3..9bd6fc2a7 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -373,12 +373,12 @@ class MediaManagerItem(QtGui.QWidget): Process a list for files either from the File Dialog or from Drag and Drop - ``files`` - The files to be loaded + ``files`` + The files to be loaded. """ names = [] fullList = [] - for count in range(0, self.listView.count()): + for count in range(self.listView.count()): names.append(unicode(self.listView.item(count).text())) fullList.append(unicode(self.listView.item(count). data(QtCore.Qt.UserRole).toString())) diff --git a/openlp/core/ui/mediadockmanager.py b/openlp/core/ui/mediadockmanager.py index 1b8666cd3..020b79257 100644 --- a/openlp/core/ui/mediadockmanager.py +++ b/openlp/core/ui/mediadockmanager.py @@ -64,7 +64,7 @@ class MediaDockManager(object): visible_title = media_item.plugin.getString(StringContent.VisibleName) log.debug(u'Inserting %s dock' % visible_title[u'title']) match = False - for dock_index in range(0, self.media_dock.count()): + for dock_index in range(self.media_dock.count()): if self.media_dock.widget(dock_index).settingsSection == \ media_item.plugin.name: match = True @@ -81,7 +81,7 @@ class MediaDockManager(object): """ visible_title = media_item.plugin.getString(StringContent.VisibleName) log.debug(u'remove %s dock' % visible_title[u'title']) - for dock_index in range(0, self.media_dock.count()): + for dock_index in range(self.media_dock.count()): if self.media_dock.widget(dock_index): if self.media_dock.widget(dock_index).settingsSection == \ media_item.plugin.name: diff --git a/openlp/core/ui/screen.py b/openlp/core/ui/screen.py index d576f0e58..21fbd6144 100644 --- a/openlp/core/ui/screen.py +++ b/openlp/core/ui/screen.py @@ -106,13 +106,13 @@ class ScreenList(object): """ # Do not log at start up. if changed_screen != -1: - log.info(u'screen_count_changed %d' % self.desktop.numScreens()) + log.info(u'screen_count_changed %d' % self.desktop.screenCount()) # Remove unplugged screens. for screen in copy.deepcopy(self.screen_list): - if screen[u'number'] == self.desktop.numScreens(): + if screen[u'number'] == self.desktop.screenCount(): self.remove_screen(screen[u'number']) # Add new screens. - for number in xrange(0, self.desktop.numScreens()): + for number in xrange(self.desktop.screenCount()): if not self.screen_exists(number): self.add_screen({ u'number': number, diff --git a/openlp/core/ui/settingsform.py b/openlp/core/ui/settingsform.py index b6808030a..7dd02826c 100644 --- a/openlp/core/ui/settingsform.py +++ b/openlp/core/ui/settingsform.py @@ -92,7 +92,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ Process the form saving the settings """ - for tabIndex in range(0, self.stackedLayout.count()): + for tabIndex in range(self.stackedLayout.count()): self.stackedLayout.widget(tabIndex).save() # Must go after all settings are save Receiver.send_message(u'config_updated') @@ -102,7 +102,7 @@ class SettingsForm(QtGui.QDialog, Ui_SettingsDialog): """ Process the form saving the settings """ - for tabIndex in range(0, self.stackedLayout.count()): + for tabIndex in range(self.stackedLayout.count()): self.stackedLayout.widget(tabIndex).cancel() return QtGui.QDialog.reject(self) diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index a1b3a84b2..575a42c1f 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -373,7 +373,7 @@ class SlideController(Controller): u'text': translate('OpenLP.SlideController', 'Go to "Ending"')}, {u'key': u'O', u'configurable': True, u'text': translate('OpenLP.SlideController', 'Go to "Other"')}] - shortcuts += [{u'key': unicode(number)} for number in range(0, 10)] + shortcuts += [{u'key': unicode(number)} for number in range(10)] self.previewListWidget.addActions([create_action(self, u'shortcutAction_%s' % s[u'key'], text=s.get(u'text'), shortcuts=[QtGui.QKeySequence(s[u'key'])], diff --git a/openlp/plugins/custom/forms/editcustomform.py b/openlp/plugins/custom/forms/editcustomform.py index 7c2da3bb0..294bd324d 100644 --- a/openlp/plugins/custom/forms/editcustomform.py +++ b/openlp/plugins/custom/forms/editcustomform.py @@ -127,7 +127,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): sxml.new_document() sxml.add_lyrics_to_song() count = 1 - for i in range(0, self.slideListView.count()): + for i in range(self.slideListView.count()): sxml.add_verse_to_lyrics(u'custom', unicode(count), unicode(self.slideListView.item(i).text())) count += 1 @@ -170,7 +170,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): Edits all slides. """ slide_list = u'' - for row in range(0, self.slideListView.count()): + for row in range(self.slideListView.count()): item = self.slideListView.item(row) slide_list += item.text() if row != self.slideListView.count() - 1: @@ -206,7 +206,7 @@ class EditCustomForm(QtGui.QDialog, Ui_CustomEditDialog): old_row = self.slideListView.currentRow() # Create a list with all (old/unedited) slides. old_slides = [self.slideListView.item(row).text() for row in \ - range(0, self.slideListView.count())] + range(self.slideListView.count())] self.slideListView.clear() old_slides.pop(old_row) # Insert all slides to make the old_slides list complete. diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index da828b436..f97749f13 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -152,7 +152,7 @@ class PowerpointDocument(PresentationDocument): log.debug(u'create_thumbnails') if self.check_thumbnails(): return - for num in range(0, self.presentation.Slides.Count): + for num in range(self.presentation.Slides.Count): self.presentation.Slides(num + 1).Export(os.path.join( self.get_thumbnail_folder(), 'slide%d.png' % (num + 1)), 'png', 320, 240) diff --git a/openlp/plugins/songs/forms/editsongform.py b/openlp/plugins/songs/forms/editsongform.py index 1412d94cb..195dda729 100644 --- a/openlp/plugins/songs/forms/editsongform.py +++ b/openlp/plugins/songs/forms/editsongform.py @@ -336,7 +336,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): Tag the Song List rows based on the verse list """ row_label = [] - for row in range(0, self.verseListWidget.rowCount()): + for row in range(self.verseListWidget.rowCount()): item = self.verseListWidget.item(row, 0) verse_def = unicode(item.data(QtCore.Qt.UserRole).toString()) verse_tag = VerseType.translated_tag(verse_def[0]) @@ -494,7 +494,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): if len(tempText.split(u'\n')) != len(after_text.split(u'\n')): tempList = {} tempId = {} - for row in range(0, self.verseListWidget.rowCount()): + for row in range(self.verseListWidget.rowCount()): tempList[row] = self.verseListWidget.item(row, 0)\ .text() tempId[row] = self.verseListWidget.item(row, 0)\ @@ -511,7 +511,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): def onVerseEditAllButtonClicked(self): verse_list = u'' if self.verseListWidget.rowCount() > 0: - for row in range(0, self.verseListWidget.rowCount()): + for row in range(self.verseListWidget.rowCount()): item = self.verseListWidget.item(row, 0) field = unicode(item.data(QtCore.Qt.UserRole).toString()) verse_tag = VerseType.translated_name(field[0]) @@ -579,7 +579,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): verses = [] verse_names = [] order = self.__extractVerseOrder(text) - for index in range(0, self.verseListWidget.rowCount()): + for index in range(self.verseListWidget.rowCount()): verse = self.verseListWidget.item(index, 0) verse = unicode(verse.data(QtCore.Qt.UserRole).toString()) if verse not in verse_names: @@ -620,7 +620,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): verse_names = [] order_names = unicode(verse_order).split() order = self.__extractVerseOrder(verse_order) - for index in range(0, verse_count): + for index in range(verse_count): verse = self.verseListWidget.item(index, 0) verse = unicode(verse.data(QtCore.Qt.UserRole).toString()) if verse not in verse_names: @@ -920,7 +920,7 @@ class EditSongForm(QtGui.QDialog, Ui_EditSongDialog): try: sxml = SongXML() multiple = [] - for i in range(0, self.verseListWidget.rowCount()): + for i in range(self.verseListWidget.rowCount()): item = self.verseListWidget.item(i, 0) verseId = unicode(item.data(QtCore.Qt.UserRole).toString()) verse_tag = verseId[0] diff --git a/openlp/plugins/songs/lib/cclifileimport.py b/openlp/plugins/songs/lib/cclifileimport.py index 6b99f9a16..e34a12e41 100644 --- a/openlp/plugins/songs/lib/cclifileimport.py +++ b/openlp/plugins/songs/lib/cclifileimport.py @@ -185,7 +185,7 @@ class CCLIFileImport(SongImport): check_first_verse_line = False field_list = song_fields.split(u'/t') words_list = song_words.split(u'/t') - for counter in range(0, len(field_list)): + for counter in range(len(field_list)): if field_list[counter].startswith(u'Ver'): verse_type = VerseType.Tags[VerseType.Verse] elif field_list[counter].startswith(u'Ch'): From eafd3a20ae3e811d047604448bdd9c947dd30a34 Mon Sep 17 00:00:00 2001 From: M2j Date: Tue, 1 May 2012 13:03:31 +0200 Subject: [PATCH 46/66] revert openlp/core/ui/media/mediacontroller.py to prevent merge conflict --- openlp/core/ui/media/mediacontroller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openlp/core/ui/media/mediacontroller.py b/openlp/core/ui/media/mediacontroller.py index 73283ea9b..7ccbd9245 100644 --- a/openlp/core/ui/media/mediacontroller.py +++ b/openlp/core/ui/media/mediacontroller.py @@ -127,7 +127,7 @@ class MediaController(object): invalidMediaPlayers = [mediaPlayer for mediaPlayer in savedPlayers \ if not mediaPlayer in self.mediaPlayers or \ not self.mediaPlayers[mediaPlayer].check_available()] - if invalidMediaPlayers: + if len(invalidMediaPlayers) > 0: for invalidPlayer in invalidMediaPlayers: savedPlayers.remove(invalidPlayer) set_media_players(savedPlayers, overriddenPlayer) @@ -141,7 +141,7 @@ class MediaController(object): Check if there is a running media Player and do updating stuff (e.g. update the UI) """ - if not self.curDisplayMediaPlayer: + if len(self.curDisplayMediaPlayer.keys()) == 0: self.timer.stop() else: for display in self.curDisplayMediaPlayer.keys(): From 63b71802abb7f4ff4c450c2dd5aa4e62affd6db6 Mon Sep 17 00:00:00 2001 From: Samuel Findlay Date: Tue, 1 May 2012 23:51:46 +1000 Subject: [PATCH 47/66] Rewrote PowerSongImport class to read variable-length strings directly from file, rather than searching for them. Other minor fixes. --- openlp/plugins/songs/lib/powersongimport.py | 155 ++++++++++---------- openlp/plugins/songs/lib/songimport.py | 2 +- 2 files changed, 77 insertions(+), 80 deletions(-) diff --git a/openlp/plugins/songs/lib/powersongimport.py b/openlp/plugins/songs/lib/powersongimport.py index 3c3d9a641..e2ba13f68 100644 --- a/openlp/plugins/songs/lib/powersongimport.py +++ b/openlp/plugins/songs/lib/powersongimport.py @@ -29,7 +29,6 @@ The :mod:`powersongimport` module provides the functionality for importing PowerSong songs into the OpenLP database. """ import logging -import re from openlp.core.lib import translate from openlp.plugins.songs.lib.songimport import SongImport @@ -43,34 +42,27 @@ class PowerSongImport(SongImport): **PowerSong Song File Format:** - * Encoded as UTF-8. - * The file has a number of fields, with the song metadata fields first, - followed by the lyrics fields. + The file has a number of label-field pairs of variable length. - Fields: - Each field begins with one of four labels, each of which begin with one - non-printing byte: - - * ``ENQ`` (0x05) ``TITLE`` - * ``ACK`` (0x06) ``AUTHOR`` - * ``CR`` (0x0d) ``COPYRIGHTLINE`` - * ``EOT`` (0x04) ``PART`` - - The field label is separated from the field contents by one random byte. - Each field ends at the next field label, or at the end of the file. + Labels and Fields: + * Every label and field is preceded by an integer which specifies its + byte-length. + * If the length < 128 bytes, only one byte is used to encode + the length integer. + * But if it's greater, as many bytes are used as necessary: + * the first byte = (length % 128) + 128 + * the next byte = length / 128 + * another byte is only used if (length / 128) >= 128 + * and so on (3 bytes needed iff length > 16383) Metadata fields: * Every PowerSong file begins with a TITLE field. * This is followed by zero or more AUTHOR fields. - * The next field is always COPYRIGHTLINE, but it may be empty (in which - case the byte following the label is the null byte 0x00). - When the field contents are not empty, the first byte is 0xc2 and - should be discarded. - This field may contain a CCLI number at the end: e.g. "CCLI 176263" + * The next label is always COPYRIGHTLINE, but its field may be empty. + This field may also contain a CCLI number: e.g. "CCLI 176263". Lyrics fields: - * The COPYRIGHTLINE field is followed by zero or more PART fields, each - of which contains one verse. + * Each verse is contained in a PART field. * Lines have Windows line endings ``CRLF`` (0x0d, 0x0a). * There is no concept of verse types. @@ -78,12 +70,6 @@ class PowerSongImport(SongImport): * .song """ - def __init__(self, manager, **kwargs): - """ - Initialise the PowerSong importer. - """ - SongImport.__init__(self, manager, **kwargs) - def doImport(self): """ Receive a single file or a list of files to import. @@ -94,67 +80,78 @@ class PowerSongImport(SongImport): if self.stopImportFlag: return self.setDefaults() - with open(file, 'rb') as song_file: - # Check file is valid PowerSong song format - if song_file.read(6) != u'\x05TITLE': - self.logError(file, unicode( - translate('SongsPlugin.PowerSongSongImport', - ('Invalid PowerSong song file. Missing ' - '"\x05TITLE" header.')))) - continue - song_data = unicode(song_file.read(), u'utf-8', u'replace') - # Extract title and author fields - first_part, sep, song_data = song_data.partition( - u'\x0DCOPYRIGHTLINE') - if not sep: + with open(file, 'rb') as self.song_file: + # Get title and check file is valid PowerSong song format + label, field = self.readLabelField() + if label != u'TITLE': self.logError(file, unicode( translate('SongsPlugin.PowerSongSongImport', ('Invalid PowerSong song file. Missing ' - '"\x0DCOPYRIGHTLINE" string.')))) + '"TITLE" header.')))) continue - title_authors = first_part.split(u'\x06AUTHOR') - # Get the song title - self.title = self.stripControlChars(title_authors[0][1:]) - # Extract the author(s) - for author in title_authors[1:]: - self.parseAuthor(self.stripControlChars(author[1:])) - # Get copyright and CCLI number - copyright, sep, song_data = song_data.partition( - u'\x04PART') - if not sep: + else: + self.title = field.replace(u'\n', u' ') + while label: + label, field = self.readLabelField() + # Get the author(s) + if label == u'AUTHOR': + self.parseAuthor(field) + # Get copyright and look for CCLI number + elif label == u'COPYRIGHTLINE': + found_copyright = True + copyright, sep, ccli_no = field.rpartition(u'CCLI') + if not sep: + copyright = ccli_no + ccli_no = u'' + if copyright: + self.addCopyright(copyright.rstrip( + u'\n').replace(u'\n', u' ')) + if ccli_no: + ccli_no = ccli_no.strip(u' :') + if ccli_no.isdigit(): + self.ccliNumber = ccli_no + # Get verse(s) + elif label == u'PART': + self.addVerse(field) + # Check for copyright label + if not found_copyright: self.logError(file, unicode( translate('SongsPlugin.PowerSongSongImport', - ('No verses found. Missing ' - '"\x04PART" string.')))) + ('"%s" Invalid PowerSong song file. Missing ' + '"COPYRIGHTLINE" string.' % self.title)))) + continue + # Check for at least one verse + if not self.verses: + self.logError(file, unicode( + translate('SongsPlugin.PowerSongSongImport', + ('"%s" No verses found. Missing "PART" string.' + % self.title)))) continue - copyright, sep, ccli_no = copyright[1:].rpartition(u'CCLI ') - if not sep: - copyright = ccli_no - ccli_no = u'' - if copyright: - if copyright[0] == u'\u00c2': - copyright = copyright[1:] - self.addCopyright(self.stripControlChars( - copyright.rstrip(u'\n'))) - if ccli_no: - ccli_no = ccli_no.strip() - if ccli_no.isdigit(): - self.ccliNumber = self.stripControlChars(ccli_no) - # Get the verse(s) - verses = song_data.split(u'\x04PART') - for verse in verses: - self.addVerse(self.stripControlChars(verse[1:])) if not self.finish(): self.logError(file) - def stripControlChars(self, text): + def readLabelField(self): """ - Get rid of ASCII control characters. + Return as a 2-tuple the next two variable-length strings from song file + """ + label = unicode(self.song_file.read( + self.readLength()), u'utf-8', u'ignore') + if label: + field = unicode(self.song_file.read( + self.readLength()), u'utf-8', u'ignore') + else: + field = u'' + return label, field - Illegals chars are ASCII code points 0-31 and 127, except: - * ``HT`` (0x09) - Tab - * ``LF`` (0x0a) - Line feed - * ``CR`` (0x0d) - Carriage return + def readLength(self): """ - ILLEGAL_CHARS = u'([\x00-\x08\x0b-\x0c\x0e-\x1f\x7f])' - return re.sub(ILLEGAL_CHARS, '', text) \ No newline at end of file + Return the byte-length of the next variable-length string in song file + """ + this_byte_char = self.song_file.read(1) + if not this_byte_char: + return 0 + this_byte = ord(this_byte_char) + if this_byte < 128: + return this_byte + else: + return (self.readLength() * 128) + (this_byte - 128) diff --git a/openlp/plugins/songs/lib/songimport.py b/openlp/plugins/songs/lib/songimport.py index b3ceb49ec..79e960919 100644 --- a/openlp/plugins/songs/lib/songimport.py +++ b/openlp/plugins/songs/lib/songimport.py @@ -107,7 +107,7 @@ class SongImport(QtCore.QObject): ``filepath`` 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 + 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. ``reason`` From 8877484aea388bd84ac786ab9f9ed1c44271c660 Mon Sep 17 00:00:00 2001 From: Samuel Findlay Date: Wed, 2 May 2012 19:14:30 +1000 Subject: [PATCH 48/66] Tidy up code, stonger error checking. --- openlp/plugins/songs/lib/powersongimport.py | 139 +++++++++++--------- 1 file changed, 78 insertions(+), 61 deletions(-) diff --git a/openlp/plugins/songs/lib/powersongimport.py b/openlp/plugins/songs/lib/powersongimport.py index e2ba13f68..1b99d756f 100644 --- a/openlp/plugins/songs/lib/powersongimport.py +++ b/openlp/plugins/songs/lib/powersongimport.py @@ -72,67 +72,67 @@ class PowerSongImport(SongImport): def doImport(self): """ - Receive a single file or a list of files to import. + Receive a list of files to import. """ - if isinstance(self.importSource, list): - self.importWizard.progressBar.setMaximum(len(self.importSource)) - for file in self.importSource: - if self.stopImportFlag: - return - self.setDefaults() - with open(file, 'rb') as self.song_file: - # Get title and check file is valid PowerSong song format + if not isinstance(self.importSource, list): + return + self.importWizard.progressBar.setMaximum(len(self.importSource)) + for file in self.importSource: + if self.stopImportFlag: + return + self.setDefaults() + parse_error = False + with open(file, 'rb') as self.song_file: + # Get title to check file is valid PowerSong song format + label, field = self.readLabelField() + if label == u'TITLE': + self.title = field.replace(u'\n', u' ') + else: + self.logError(file, unicode( + translate('SongsPlugin.PowerSongSongImport', \ + 'Invalid PowerSong file. Missing "TITLE" header.'))) + continue + # Get rest of fields from file + while True: label, field = self.readLabelField() - if label != u'TITLE': - self.logError(file, unicode( - translate('SongsPlugin.PowerSongSongImport', - ('Invalid PowerSong song file. Missing ' - '"TITLE" header.')))) - continue + if not label: + break + if label == u'AUTHOR': + self.parseAuthor(field) + elif label == u'COPYRIGHTLINE': + found_copyright = True + self.parseCopyrightCCLI(field) + elif label == u'PART': + self.addVerse(field) else: - self.title = field.replace(u'\n', u' ') - while label: - label, field = self.readLabelField() - # Get the author(s) - if label == u'AUTHOR': - self.parseAuthor(field) - # Get copyright and look for CCLI number - elif label == u'COPYRIGHTLINE': - found_copyright = True - copyright, sep, ccli_no = field.rpartition(u'CCLI') - if not sep: - copyright = ccli_no - ccli_no = u'' - if copyright: - self.addCopyright(copyright.rstrip( - u'\n').replace(u'\n', u' ')) - if ccli_no: - ccli_no = ccli_no.strip(u' :') - if ccli_no.isdigit(): - self.ccliNumber = ccli_no - # Get verse(s) - elif label == u'PART': - self.addVerse(field) - # Check for copyright label - if not found_copyright: + parse_error = True self.logError(file, unicode( - translate('SongsPlugin.PowerSongSongImport', - ('"%s" Invalid PowerSong song file. Missing ' - '"COPYRIGHTLINE" string.' % self.title)))) - continue - # Check for at least one verse - if not self.verses: - self.logError(file, unicode( - translate('SongsPlugin.PowerSongSongImport', - ('"%s" No verses found. Missing "PART" string.' - % self.title)))) - continue - if not self.finish(): - self.logError(file) + translate('SongsPlugin.PowerSongSongImport', \ + '"%s" Invalid PowerSong file. Unknown header: "%s".' + % (self.title, label)))) + break + if parse_error: + continue + # Check that file had COPYRIGHTLINE label + if not found_copyright: + self.logError(file, unicode( + translate('SongsPlugin.PowerSongSongImport', \ + '"%s" Invalid PowerSong file. Missing "COPYRIGHTLINE" \ + header.' % self.title))) + continue + # Check that file had at least one verse + if not self.verses: + self.logError(file, unicode( + translate('SongsPlugin.PowerSongSongImport', \ + '"%s" Verses not found. Missing "PART" header.' + % self.title))) + continue + if not self.finish(): + self.logError(file) def readLabelField(self): """ - Return as a 2-tuple the next two variable-length strings from song file + Read (as a 2-tuple) the next two variable-length strings """ label = unicode(self.song_file.read( self.readLength()), u'utf-8', u'ignore') @@ -145,13 +145,30 @@ class PowerSongImport(SongImport): def readLength(self): """ - Return the byte-length of the next variable-length string in song file + Read the byte-length of the next variable-length string + + If at the end of the file, returns 0. """ - this_byte_char = self.song_file.read(1) - if not this_byte_char: + this_byte = self.song_file.read(1) + if not this_byte: return 0 - this_byte = ord(this_byte_char) - if this_byte < 128: - return this_byte + this_byte_val = ord(this_byte) + if this_byte_val < 128: + return this_byte_val else: - return (self.readLength() * 128) + (this_byte - 128) + return (self.readLength() * 128) + (this_byte_val - 128) + + def parseCopyrightCCLI(self, field): + """ + Look for CCLI song number, and get copyright + """ + copyright, sep, ccli_no = field.rpartition(u'CCLI') + if not sep: + copyright = ccli_no + ccli_no = u'' + if copyright: + self.addCopyright(copyright.rstrip(u'\n').replace(u'\n', u' ')) + if ccli_no: + ccli_no = ccli_no.strip(u' :') + if ccli_no.isdigit(): + self.ccliNumber = ccli_no From 6915fb9d0d93a733d1f84c7896aeb2815b9ce454 Mon Sep 17 00:00:00 2001 From: Andreas Preikschat Date: Wed, 2 May 2012 20:25:37 +0200 Subject: [PATCH 49/66] improved renderer performance --- openlp/core/lib/formattingtags.py | 1 - openlp/core/lib/renderer.py | 10 ++++++---- openlp/core/lib/serviceitem.py | 3 +-- openlp/core/ui/formattingtagform.py | 3 ++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/openlp/core/lib/formattingtags.py b/openlp/core/lib/formattingtags.py index bb5f1e716..bec2db63a 100644 --- a/openlp/core/lib/formattingtags.py +++ b/openlp/core/lib/formattingtags.py @@ -47,7 +47,6 @@ class FormattingTags(object): Provide access to the html_expands list. """ # Load user defined tags otherwise user defined tags are not present. - FormattingTags.load_tags() return FormattingTags.html_expands @staticmethod diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 39f69dda6..2c9d2a5d1 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -131,7 +131,6 @@ class Renderer(object): ``override_levels`` Used to force the theme data passed in to be used. - """ log.debug(u'set override theme to %s', override_theme) theme_level = self.theme_level @@ -500,12 +499,15 @@ class Renderer(object): raw_tags.sort(key=lambda tag: tag[0]) html_tags.sort(key=lambda tag: tag[0]) # Create a list with closing tags for the raw_text. - end_tags = [tag[2] for tag in raw_tags] + end_tags = [] + start_tags = [] + for tag in raw_tags: + start_tags.append(tag[1]) + end_tags.append(tag[2]) end_tags.reverse() # Remove the indexes. - raw_tags = [tag[1] for tag in raw_tags] html_tags = [tag[1] for tag in html_tags] - return raw_text + u''.join(end_tags), u''.join(raw_tags), \ + return raw_text + u''.join(end_tags), u''.join(start_tags), \ u''.join(html_tags) def _binary_chop(self, formatted, previous_html, previous_raw, html_list, diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index a82941341..c8fbe6d8a 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -195,8 +195,7 @@ class ServiceItem(object): # avoid tracebacks. if self.raw_footer is None: self.raw_footer = [] - self.foot_text = \ - u'
'.join([footer for footer in self.raw_footer if footer]) + self.foot_text = u'
'.join(filter(None, self.raw_footer)) def add_from_image(self, path, title, background=None): """ diff --git a/openlp/core/ui/formattingtagform.py b/openlp/core/ui/formattingtagform.py index 28200d132..d6f880e3f 100644 --- a/openlp/core/ui/formattingtagform.py +++ b/openlp/core/ui/formattingtagform.py @@ -164,12 +164,13 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog): """ Reset List for loading. """ + FormattingTags.load_tags() self.tagTableWidget.clearContents() self.tagTableWidget.setRowCount(0) self.newPushButton.setEnabled(True) self.savePushButton.setEnabled(False) self.deletePushButton.setEnabled(False) - for linenumber, html in enumerate(FormattingTags.html_expands): + for linenumber, html in enumerate(FormattingTags.get_html_tags()): self.tagTableWidget.setRowCount(self.tagTableWidget.rowCount() + 1) self.tagTableWidget.setItem(linenumber, 0, QtGui.QTableWidgetItem(html[u'desc'])) From 10dbb5ee16315ba0569a426369ef57507a31c95f Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Wed, 2 May 2012 22:57:12 +0200 Subject: [PATCH 50/66] Changed some things to comply with Debian's packaging policies. --- documentation/openlp.1 | 47 + openlp/plugins/remotes/html/jquery.js | 9408 +++++++++++++++++- openlp/plugins/remotes/html/jquery.mobile.js | 7728 +++++++++++++- resources/windows/psvince.dll | Bin 36864 -> 0 bytes scripts/windows-builder.py | 2 +- 5 files changed, 17003 insertions(+), 182 deletions(-) create mode 100644 documentation/openlp.1 delete mode 100644 resources/windows/psvince.dll diff --git a/documentation/openlp.1 b/documentation/openlp.1 new file mode 100644 index 000000000..789794fb4 --- /dev/null +++ b/documentation/openlp.1 @@ -0,0 +1,47 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.9. +.TH OPENLP "1" "May 2012" "OpenLP 1.9.9" "User Commands" +.SH NAME +OpenLP \- Church worship presentation software +.SH SYNOPSIS +.B openlp +[\fIoptions\fR] [\fIqt-options\fR] +.SH OPTIONS +.TP +\fB\-\-version\fR +show program's version number and exit +.TP +\fB\-h\fR, \fB\-\-help\fR +show this help message and exit +.TP +\fB\-e\fR, \fB\-\-no\-error\-form\fR +Disable the error notification form. +.TP +\fB\-l\fR LEVEL, \fB\-\-log\-level\fR=\fILEVEL\fR +Set logging to LEVEL level. Valid values are "debug", +"info", "warning". +.TP +\fB\-p\fR, \fB\-\-portable\fR +Specify if this should be run as a portable app, off a +USB flash drive (not implemented). +.TP +\fB\-d\fR, \fB\-\-dev\-version\fR +Ignore the version file and pull the version directly +from Bazaar +.TP +\fB\-s\fR STYLE, \fB\-\-style\fR=\fISTYLE\fR +Set the Qt4 style (passed directly to Qt4). +.TP +\fB\-\-testing\fR +Run by testing framework +.SH "SEE ALSO" +The full documentation for +.B OpenLP +is maintained as a Texinfo manual. If the +.B info +and +.B OpenLP +programs are properly installed at your site, the command +.IP +.B info OpenLP +.PP +should give you access to the complete manual. diff --git a/openlp/plugins/remotes/html/jquery.js b/openlp/plugins/remotes/html/jquery.js index 16ad06c5a..3774ff986 100644 --- a/openlp/plugins/remotes/html/jquery.js +++ b/openlp/plugins/remotes/html/jquery.js @@ -1,4 +1,9404 @@ -/*! jQuery v1.7.2 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
"+""+"
",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
t
",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( -a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f -.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
" + + "" + + "
"; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and ' ); + + iframe_doc.close(); + + // Update the Iframe's hash, for great justice. + iframe.location.hash = hash; + } + }; + + })(); + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^ + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + return self; + })(); + +})(jQuery,this); + +/*! + * jQuery UI Widget @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ + +(function( $, undefined ) { + +// jQuery 1.4+ +if ( $.cleanData ) { + var _cleanData = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + $( elem ).triggerHandler( "remove" ); + } + _cleanData( elems ); + }; +} else { + var _remove = $.fn.remove; + $.fn.remove = function( selector, keepData ) { + return this.each(function() { + if ( !keepData ) { + if ( !selector || $.filter( selector, [ this ] ).length ) { + $( "*", this ).add( [ this ] ).each(function() { + $( this ).triggerHandler( "remove" ); + }); + } + } + return _remove.call( $(this), selector, keepData ); + }); + }; +} + +$.widget = function( name, base, prototype ) { + var namespace = name.split( "." )[ 0 ], + fullName; + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, name ); + }; + + $[ namespace ] = $[ namespace ] || {}; + $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from +// $.each( basePrototype, function( key, val ) { +// if ( $.isPlainObject(val) ) { +// basePrototype[ key ] = $.extend( {}, val ); +// } +// }); + basePrototype.options = $.extend( true, {}, basePrototype.options ); + $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, + widgetBaseClass: fullName + }, prototype ); + + $.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $.data( this, name ); + if ( !instance ) { + throw "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'"; + } + if ( !$.isFunction( instance[options] ) ) { + throw "no such method '" + options + "' for " + name + " widget instance"; + } + var methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, name ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + $.data( this, name, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } +}; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + options: { + disabled: false + }, + _createWidget: function( options, element ) { + // $.widget.bridge stores the plugin instance, but we do it anyway + // so that it's stored even before the _create function runs + $.data( element, this.widgetName, this ); + this.element = $( element ); + this.options = $.extend( true, {}, + this.options, + this._getCreateOptions(), + options ); + + var self = this; + this.element.bind( "remove." + this.widgetName, function() { + self.destroy(); + }); + + this._create(); + this._trigger( "create" ); + this._init(); + }, + _getCreateOptions: function() { + var options = {}; + if ( $.metadata ) { + options = $.metadata.get( element )[ this.widgetName ]; + } + return options; + }, + _create: function() {}, + _init: function() {}, + + destroy: function() { + this.element + .unbind( "." + this.widgetName ) + .removeData( this.widgetName ); + this.widget() + .unbind( "." + this.widgetName ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetBaseClass + "-disabled " + + "ui-state-disabled" ); + }, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.extend( {}, this.options ); + } + + if (typeof key === "string" ) { + if ( value === undefined ) { + return this.options[ key ]; + } + options = {}; + options[ key ] = value; + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var self = this; + $.each( options, function( key, value ) { + self._setOption( key, value ); + }); + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + [ value ? "addClass" : "removeClass"]( + this.widgetBaseClass + "-disabled" + " " + + "ui-state-disabled" ) + .attr( "aria-disabled", value ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _trigger: function( type, event, data ) { + var callback = this.options[ type ]; + + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + data = data || {}; + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( event.originalEvent ) { + for ( var i = $.event.props.length, prop; i; ) { + prop = $.event.props[ --i ]; + event[ prop ] = event.originalEvent[ prop ]; + } + } + + this.element.trigger( event, data ); + + return !( $.isFunction(callback) && + callback.call( this.element[0], event, data ) === false || + event.isDefaultPrevented() ); + } +}; + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.widget", { + // decorate the parent _createWidget to trigger `widgetinit` for users + // who wish to do post post `widgetcreate` alterations/additions + // + // TODO create a pull request for jquery ui to trigger this event + // in the original _createWidget + _createWidget: function() { + $.Widget.prototype._createWidget.apply( this, arguments ); + this._trigger( 'init' ); + }, + + _getCreateOptions: function() { + + var elem = this.element, + options = {}; + + $.each( this.options, function( option ) { + + var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) { + return "-" + c.toLowerCase(); + }) + ); + + if ( value !== undefined ) { + options[ option ] = value; + } + }); + + return options; + }, + + enhanceWithin: function( target, useKeepNative ) { + this.enhance( $( this.options.initSelector, $( target )), useKeepNative ); + }, + + enhance: function( targets, useKeepNative ) { + var page, keepNative, $widgetElements = $( targets ), self = this; + + // if ignoreContentEnabled is set to true the framework should + // only enhance the selected elements when they do NOT have a + // parent with the data-namespace-ignore attribute + $widgetElements = $.mobile.enhanceable( $widgetElements ); + + if ( useKeepNative && $widgetElements.length ) { + // TODO remove dependency on the page widget for the keepNative. + // Currently the keepNative value is defined on the page prototype so + // the method is as well + page = $.mobile.closestPageData( $widgetElements ); + keepNative = (page && page.keepNativeSelector()) || ""; + + $widgetElements = $widgetElements.not( keepNative ); + } + + $widgetElements[ this.widgetName ](); + }, + + raise: function( msg ) { + throw "Widget [" + this.widgetName + "]: " + msg; + } +}); + +})( jQuery ); + +(function( $, window, undefined ) { + + var nsNormalizeDict = {}; + + // jQuery.mobile configurable options + $.mobile = $.extend( {}, { + + // Version of the jQuery Mobile Framework + version: "1.1.0", + + // Namespace used framework-wide for data-attrs. Default is no namespace + ns: "", + + // Define the url parameter used for referencing widget-generated sub-pages. + // Translates to to example.html&ui-page=subpageIdentifier + // hash segment before &ui-page= is used to make Ajax request + subPageUrlKey: "ui-page", + + // Class assigned to page currently in view, and during transitions + activePageClass: "ui-page-active", + + // Class used for "active" button state, from CSS framework + activeBtnClass: "ui-btn-active", + + // Class used for "focus" form element state, from CSS framework + focusClass: "ui-focus", + + // Automatically handle clicks and form submissions through Ajax, when same-domain + ajaxEnabled: true, + + // Automatically load and show pages based on location.hash + hashListeningEnabled: true, + + // disable to prevent jquery from bothering with links + linkBindingEnabled: true, + + // Set default page transition - 'none' for no transitions + defaultPageTransition: "fade", + + // Set maximum window width for transitions to apply - 'false' for no limit + maxTransitionWidth: false, + + // Minimum scroll distance that will be remembered when returning to a page + minScrollBack: 250, + + // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts + touchOverflowEnabled: false, + + // Set default dialog transition - 'none' for no transitions + defaultDialogTransition: "pop", + + // Show loading message during Ajax requests + // if false, message will not appear, but loading classes will still be toggled on html el + loadingMessage: "loading", + + // Error response message - appears when an Ajax page request fails + pageLoadErrorMessage: "Error Loading Page", + + // Should the text be visble in the loading message? + loadingMessageTextVisible: false, + + // When the text is visible, what theme does the loading box use? + loadingMessageTheme: "a", + + // For error messages, which theme does the box uses? + pageLoadErrorMessageTheme: "e", + + //automatically initialize the DOM when it's ready + autoInitializePage: true, + + pushStateEnabled: true, + + // allows users to opt in to ignoring content by marking a parent element as + // data-ignored + ignoreContentEnabled: false, + + // turn of binding to the native orientationchange due to android orientation behavior + orientationChangeEnabled: true, + + buttonMarkup: { + hoverDelay: 200 + }, + + // TODO might be useful upstream in jquery itself ? + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + }, + + // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value + silentScroll: function( ypos ) { + if ( $.type( ypos ) !== "number" ) { + ypos = $.mobile.defaultHomeScroll; + } + + // prevent scrollstart and scrollstop events + $.event.special.scrollstart.enabled = false; + + setTimeout(function() { + window.scrollTo( 0, ypos ); + $( document ).trigger( "silentscroll", { x: 0, y: ypos }); + }, 20 ); + + setTimeout(function() { + $.event.special.scrollstart.enabled = true; + }, 150 ); + }, + + // Expose our cache for testing purposes. + nsNormalizeDict: nsNormalizeDict, + + // Take a data attribute property, prepend the namespace + // and then camel case the attribute string. Add the result + // to our nsNormalizeDict so we don't have to do this again. + nsNormalize: function( prop ) { + if ( !prop ) { + return; + } + + return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) ); + }, + + getInheritedTheme: function( el, defaultTheme ) { + + // Find the closest parent with a theme class on it. Note that + // we are not using $.fn.closest() on purpose here because this + // method gets called quite a bit and we need it to be as fast + // as possible. + + var e = el[ 0 ], + ltr = "", + re = /ui-(bar|body|overlay)-([a-z])\b/, + c, m; + + while ( e ) { + var c = e.className || ""; + if ( ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) { + // We found a parent with a theme class + // on it so bail from this loop. + break; + } + e = e.parentNode; + } + + // Return the theme letter we found, if none, return the + // specified default. + + return ltr || defaultTheme || "a"; + }, + + // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers + // + // Find the closest javascript page element to gather settings data jsperf test + // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit + // possibly naive, but it shows that the parsing overhead for *just* the page selector vs + // the page and dialog selector is negligable. This could probably be speed up by + // doing a similar parent node traversal to the one found in the inherited theme code above + closestPageData: function( $target ) { + return $target + .closest(':jqmData(role="page"), :jqmData(role="dialog")') + .data("page"); + }, + + enhanceable: function( $set ) { + return this.haveParents( $set, "enhance" ); + }, + + hijackable: function( $set ) { + return this.haveParents( $set, "ajax" ); + }, + + haveParents: function( $set, attr ) { + if( !$.mobile.ignoreContentEnabled ){ + return $set; + } + + var count = $set.length, + $newSet = $(), + e, $element, excluded; + + for ( var i = 0; i < count; i++ ) { + $element = $set.eq( i ); + excluded = false; + e = $set[ i ]; + + while ( e ) { + var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : ""; + + if ( c === "false" ) { + excluded = true; + break; + } + + e = e.parentNode; + } + + if ( !excluded ) { + $newSet = $newSet.add( $element ); + } + } + + return $newSet; + } + }, $.mobile ); + + // Mobile version of data and removeData and hasData methods + // ensures all data is set and retrieved using jQuery Mobile's data namespace + $.fn.jqmData = function( prop, value ) { + var result; + if ( typeof prop != "undefined" ) { + if ( prop ) { + prop = $.mobile.nsNormalize( prop ); + } + result = this.data.apply( this, arguments.length < 2 ? [ prop ] : [ prop, value ] ); + } + return result; + }; + + $.jqmData = function( elem, prop, value ) { + var result; + if ( typeof prop != "undefined" ) { + result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value ); + } + return result; + }; + + $.fn.jqmRemoveData = function( prop ) { + return this.removeData( $.mobile.nsNormalize( prop ) ); + }; + + $.jqmRemoveData = function( elem, prop ) { + return $.removeData( elem, $.mobile.nsNormalize( prop ) ); + }; + + $.fn.removeWithDependents = function() { + $.removeWithDependents( this ); + }; + + $.removeWithDependents = function( elem ) { + var $elem = $( elem ); + + ( $elem.jqmData('dependents') || $() ).remove(); + $elem.remove(); + }; + + $.fn.addDependents = function( newDependents ) { + $.addDependents( $(this), newDependents ); + }; + + $.addDependents = function( elem, newDependents ) { + var dependents = $(elem).jqmData( 'dependents' ) || $(); + + $(elem).jqmData( 'dependents', $.merge(dependents, newDependents) ); + }; + + // note that this helper doesn't attempt to handle the callback + // or setting of an html elements text, its only purpose is + // to return the html encoded version of the text in all cases. (thus the name) + $.fn.getEncodedText = function() { + return $( "
" ).text( $(this).text() ).html(); + }; + + // fluent helper function for the mobile namespaced equivalent + $.fn.jqmEnhanceable = function() { + return $.mobile.enhanceable( this ); + }; + + $.fn.jqmHijackable = function() { + return $.mobile.hijackable( this ); + }; + + // Monkey-patching Sizzle to filter the :jqmData selector + var oldFind = $.find, + jqmDataRE = /:jqmData\(([^)]*)\)/g; + + $.find = function( selector, context, ret, extra ) { + selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" ); + + return oldFind.call( this, selector, context, ret, extra ); + }; + + $.extend( $.find, oldFind ); + + $.find.matches = function( expr, set ) { + return $.find( expr, null, null, set ); + }; + + $.find.matchesSelector = function( node, expr ) { + return $.find( expr, null, null, [ node ] ).length > 0; + }; +})( jQuery, this ); + + +(function( $, undefined ) { + +var $window = $( window ), + $html = $( "html" ); + +/* $.mobile.media method: pass a CSS media type or query and get a bool return + note: this feature relies on actual media query support for media queries, though types will work most anywhere + examples: + $.mobile.media('screen') // tests for screen media type + $.mobile.media('screen and (min-width: 480px)') // tests for screen media type with window width > 480px + $.mobile.media('@media screen and (-webkit-min-device-pixel-ratio: 2)') // tests for webkit 2x pixel ratio (iPhone 4) +*/ +$.mobile.media = (function() { + // TODO: use window.matchMedia once at least one UA implements it + var cache = {}, + testDiv = $( "
" ), + fakeBody = $( "" ).append( testDiv ); + + return function( query ) { + if ( !( query in cache ) ) { + var styleBlock = document.createElement( "style" ), + cssrule = "@media " + query + " { #jquery-mediatest { position:absolute; } }"; + + //must set type for IE! + styleBlock.type = "text/css"; + + if ( styleBlock.styleSheet ){ + styleBlock.styleSheet.cssText = cssrule; + } else { + styleBlock.appendChild( document.createTextNode(cssrule) ); + } + + $html.prepend( fakeBody ).prepend( styleBlock ); + cache[ query ] = testDiv.css( "position" ) === "absolute"; + fakeBody.add( styleBlock ).remove(); + } + return cache[ query ]; + }; +})(); + +})(jQuery); + +(function( $, undefined ) { + +var fakeBody = $( "" ).prependTo( "html" ), + fbCSS = fakeBody[ 0 ].style, + vendors = [ "Webkit", "Moz", "O" ], + webos = "palmGetResource" in window, //only used to rule out scrollTop + operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]", + bb = window.blackberry; //only used to rule out box shadow, as it's filled opaque on BB + +// thx Modernizr +function propExists( prop ) { + var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ), + props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " ); + + for ( var v in props ){ + if ( fbCSS[ props[ v ] ] !== undefined ) { + return true; + } + } +} + +function validStyle( prop, value, check_vend ) { + var div = document.createElement('div'), + uc = function( txt ) { + return txt.charAt( 0 ).toUpperCase() + txt.substr( 1 ) + }, + vend_pref = function( vend ) { + return "-" + vend.charAt( 0 ).toLowerCase() + vend.substr( 1 ) + "-"; + }, + check_style = function( vend ) { + var vend_prop = vend_pref( vend ) + prop + ": " + value + ";", + uc_vend = uc( vend ), + propStyle = uc_vend + uc( prop ); + + div.setAttribute( "style", vend_prop ); + + if( !!div.style[ propStyle ] ) { + ret = true; + } + }, + check_vends = check_vend ? [ check_vend ] : vendors, + ret; + + for( i = 0; i < check_vends.length; i++ ) { + check_style( check_vends[i] ); + } + return !!ret; +} + +// Thanks to Modernizr src for this test idea. `perspective` check is limited to Moz to prevent a false positive for 3D transforms on Android. +function transform3dTest() { + var prop = "transform-3d"; + return validStyle( 'perspective', '10px', 'moz' ) || $.mobile.media( "(-" + vendors.join( "-" + prop + "),(-" ) + "-" + prop + "),(" + prop + ")" ); +} + +// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting ) +function baseTagTest() { + var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/", + base = $( "head base" ), + fauxEle = null, + href = "", + link, rebase; + + if ( !base.length ) { + base = fauxEle = $( "", { "href": fauxBase }).appendTo( "head" ); + } else { + href = base.attr( "href" ); + } + + link = $( "" ).prependTo( fakeBody ); + rebase = link[ 0 ].href; + base[ 0 ].href = href || location.pathname; + + if ( fauxEle ) { + fauxEle.remove(); + } + return rebase.indexOf( fauxBase ) === 0; +} + + +// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683 +// allows for inclusion of IE 6+, including Windows Mobile 7 +$.extend( $.mobile, { browser: {} } ); +$.mobile.browser.ie = (function() { + var v = 3, + div = document.createElement( "div" ), + a = div.all || []; + + // added {} to silence closure compiler warnings. registering my dislike of all things + // overly clever here for future reference + while ( div.innerHTML = "", a[ 0 ] ){}; + + return v > 4 ? v : !v; +})(); + + +$.extend( $.support, { + orientation: "orientation" in window && "onorientationchange" in window, + touch: "ontouchend" in document, + cssTransitions: "WebKitTransitionEvent" in window || validStyle( 'transition', 'height 100ms linear' ), + pushState: "pushState" in history && "replaceState" in history, + mediaquery: $.mobile.media( "only all" ), + cssPseudoElement: !!propExists( "content" ), + touchOverflow: !!propExists( "overflowScrolling" ), + cssTransform3d: transform3dTest(), + boxShadow: !!propExists( "boxShadow" ) && !bb, + scrollTop: ( "pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[ 0 ] ) && !webos && !operamini, + dynamicBaseTag: baseTagTest() +}); + +fakeBody.remove(); + + +// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian) +// or that generally work better browsing in regular http for full page refreshes (Opera Mini) +// Note: This detection below is used as a last resort. +// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible +var nokiaLTE7_3 = (function(){ + + var ua = window.navigator.userAgent; + + //The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older + return ua.indexOf( "Nokia" ) > -1 && + ( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) && + ua.indexOf( "AppleWebKit" ) > -1 && + ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ ); +})(); + +// Support conditions that must be met in order to proceed +// default enhanced qualifications are media query support OR IE 7+ +$.mobile.gradeA = function(){ + return $.support.mediaquery || $.mobile.browser.ie && $.mobile.browser.ie >= 7; +}; + +$.mobile.ajaxBlacklist = + // BlackBerry browsers, pre-webkit + window.blackberry && !window.WebKitPoint || + // Opera Mini + operamini || + // Symbian webkits pre 7.3 + nokiaLTE7_3; + +// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices +// to render the stylesheets when they're referenced before this script, as we'd recommend doing. +// This simply reappends the CSS in place, which for some reason makes it apply +if ( nokiaLTE7_3 ) { + $(function() { + $( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" ); + }); +} + +// For ruling out shadows via css +if ( !$.support.boxShadow ) { + $( "html" ).addClass( "ui-mobile-nosupport-boxshadow" ); +} + +})( jQuery ); + +(function( $, window, undefined ) { + +// add new event shortcuts +$.each( ( "touchstart touchmove touchend orientationchange throttledresize " + + "tap taphold swipe swipeleft swiperight scrollstart scrollstop" ).split( " " ), function( i, name ) { + + $.fn[ name ] = function( fn ) { + return fn ? this.bind( name, fn ) : this.trigger( name ); + }; + + $.attrFn[ name ] = true; +}); + +var supportTouch = $.support.touch, + scrollEvent = "touchmove scroll", + touchStartEvent = supportTouch ? "touchstart" : "mousedown", + touchStopEvent = supportTouch ? "touchend" : "mouseup", + touchMoveEvent = supportTouch ? "touchmove" : "mousemove"; + +function triggerCustomEvent( obj, eventType, event ) { + var originalType = event.type; + event.type = eventType; + $.event.handle.call( obj, event ); + event.type = originalType; +} + +// also handles scrollstop +$.event.special.scrollstart = { + + enabled: true, + + setup: function() { + + var thisObject = this, + $this = $( thisObject ), + scrolling, + timer; + + function trigger( event, state ) { + scrolling = state; + triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event ); + } + + // iPhone triggers scroll after a small delay; use touchmove instead + $this.bind( scrollEvent, function( event ) { + + if ( !$.event.special.scrollstart.enabled ) { + return; + } + + if ( !scrolling ) { + trigger( event, true ); + } + + clearTimeout( timer ); + timer = setTimeout(function() { + trigger( event, false ); + }, 50 ); + }); + } +}; + +// also handles taphold +$.event.special.tap = { + setup: function() { + var thisObject = this, + $this = $( thisObject ); + + $this.bind( "vmousedown", function( event ) { + + if ( event.which && event.which !== 1 ) { + return false; + } + + var origTarget = event.target, + origEvent = event.originalEvent, + timer; + + function clearTapTimer() { + clearTimeout( timer ); + } + + function clearTapHandlers() { + clearTapTimer(); + + $this.unbind( "vclick", clickHandler ) + .unbind( "vmouseup", clearTapTimer ); + $( document ).unbind( "vmousecancel", clearTapHandlers ); + } + + function clickHandler(event) { + clearTapHandlers(); + + // ONLY trigger a 'tap' event if the start target is + // the same as the stop target. + if ( origTarget == event.target ) { + triggerCustomEvent( thisObject, "tap", event ); + } + } + + $this.bind( "vmouseup", clearTapTimer ) + .bind( "vclick", clickHandler ); + $( document ).bind( "vmousecancel", clearTapHandlers ); + + timer = setTimeout(function() { + triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) ); + }, 750 ); + }); + } +}; + +// also handles swipeleft, swiperight +$.event.special.swipe = { + scrollSupressionThreshold: 10, // More than this horizontal displacement, and we will suppress scrolling. + + durationThreshold: 1000, // More time than this, and it isn't a swipe. + + horizontalDistanceThreshold: 30, // Swipe horizontal displacement must be more than this. + + verticalDistanceThreshold: 75, // Swipe vertical displacement must be less than this. + + setup: function() { + var thisObject = this, + $this = $( thisObject ); + + $this.bind( touchStartEvent, function( event ) { + var data = event.originalEvent.touches ? + event.originalEvent.touches[ 0 ] : event, + start = { + time: ( new Date() ).getTime(), + coords: [ data.pageX, data.pageY ], + origin: $( event.target ) + }, + stop; + + function moveHandler( event ) { + + if ( !start ) { + return; + } + + var data = event.originalEvent.touches ? + event.originalEvent.touches[ 0 ] : event; + + stop = { + time: ( new Date() ).getTime(), + coords: [ data.pageX, data.pageY ] + }; + + // prevent scrolling + if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) { + event.preventDefault(); + } + } + + $this.bind( touchMoveEvent, moveHandler ) + .one( touchStopEvent, function( event ) { + $this.unbind( touchMoveEvent, moveHandler ); + + if ( start && stop ) { + if ( stop.time - start.time < $.event.special.swipe.durationThreshold && + Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold && + Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) { + + start.origin.trigger( "swipe" ) + .trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" ); + } + } + start = stop = undefined; + }); + }); + } +}; + +(function( $, window ) { + // "Cowboy" Ben Alman + + var win = $( window ), + special_event, + get_orientation, + last_orientation, + initial_orientation_is_landscape, + initial_orientation_is_default, + portrait_map = { "0": true, "180": true }; + + // It seems that some device/browser vendors use window.orientation values 0 and 180 to + // denote the "default" orientation. For iOS devices, and most other smart-phones tested, + // the default orientation is always "portrait", but in some Android and RIM based tablets, + // the default orientation is "landscape". The following code attempts to use the window + // dimensions to figure out what the current orientation is, and then makes adjustments + // to the to the portrait_map if necessary, so that we can properly decode the + // window.orientation value whenever get_orientation() is called. + // + // Note that we used to use a media query to figure out what the orientation the browser + // thinks it is in: + // + // initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)"); + // + // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1, + // where the browser *ALWAYS* applied the landscape media query. This bug does not + // happen on iPad. + + if ( $.support.orientation ) { + + // Check the window width and height to figure out what the current orientation + // of the device is at this moment. Note that we've initialized the portrait map + // values to 0 and 180, *AND* we purposely check for landscape so that if we guess + // wrong, , we default to the assumption that portrait is the default orientation. + // We use a threshold check below because on some platforms like iOS, the iPhone + // form-factor can report a larger width than height if the user turns on the + // developer console. The actual threshold value is somewhat arbitrary, we just + // need to make sure it is large enough to exclude the developer console case. + + var ww = window.innerWidth || $( window ).width(), + wh = window.innerHeight || $( window ).height(), + landscape_threshold = 50; + + initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold; + + + // Now check to see if the current window.orientation is 0 or 180. + initial_orientation_is_default = portrait_map[ window.orientation ]; + + // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR* + // if the initial orientation is portrait, but window.orientation reports 90 or -90, we + // need to flip our portrait_map values because landscape is the default orientation for + // this device/browser. + if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) { + portrait_map = { "-90": true, "90": true }; + } + } + + $.event.special.orientationchange = special_event = { + setup: function() { + // If the event is supported natively, return false so that jQuery + // will bind to the event using DOM methods. + if ( $.support.orientation && $.mobile.orientationChangeEnabled ) { + return false; + } + + // Get the current orientation to avoid initial double-triggering. + last_orientation = get_orientation(); + + // Because the orientationchange event doesn't exist, simulate the + // event by testing window dimensions on resize. + win.bind( "throttledresize", handler ); + }, + teardown: function(){ + // If the event is not supported natively, return false so that + // jQuery will unbind the event using DOM methods. + if ( $.support.orientation && $.mobile.orientationChangeEnabled ) { + return false; + } + + // Because the orientationchange event doesn't exist, unbind the + // resize event handler. + win.unbind( "throttledresize", handler ); + }, + add: function( handleObj ) { + // Save a reference to the bound event handler. + var old_handler = handleObj.handler; + + + handleObj.handler = function( event ) { + // Modify event object, adding the .orientation property. + event.orientation = get_orientation(); + + // Call the originally-bound event handler and return its result. + return old_handler.apply( this, arguments ); + }; + } + }; + + // If the event is not supported natively, this handler will be bound to + // the window resize event to simulate the orientationchange event. + function handler() { + // Get the current orientation. + var orientation = get_orientation(); + + if ( orientation !== last_orientation ) { + // The orientation has changed, so trigger the orientationchange event. + last_orientation = orientation; + win.trigger( "orientationchange" ); + } + } + + // Get the current page orientation. This method is exposed publicly, should it + // be needed, as jQuery.event.special.orientationchange.orientation() + $.event.special.orientationchange.orientation = get_orientation = function() { + var isPortrait = true, elem = document.documentElement; + + // prefer window orientation to the calculation based on screensize as + // the actual screen resize takes place before or after the orientation change event + // has been fired depending on implementation (eg android 2.3 is before, iphone after). + // More testing is required to determine if a more reliable method of determining the new screensize + // is possible when orientationchange is fired. (eg, use media queries + element + opacity) + if ( $.support.orientation ) { + // if the window orientation registers as 0 or 180 degrees report + // portrait, otherwise landscape + isPortrait = portrait_map[ window.orientation ]; + } else { + isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1; + } + + return isPortrait ? "portrait" : "landscape"; + }; + +})( jQuery, window ); + + +// throttled resize event +(function() { + + $.event.special.throttledresize = { + setup: function() { + $( this ).bind( "resize", handler ); + }, + teardown: function(){ + $( this ).unbind( "resize", handler ); + } + }; + + var throttle = 250, + handler = function() { + curr = ( new Date() ).getTime(); + diff = curr - lastCall; + + if ( diff >= throttle ) { + + lastCall = curr; + $( this ).trigger( "throttledresize" ); + + } else { + + if ( heldCall ) { + clearTimeout( heldCall ); + } + + // Promise a held call will still execute + heldCall = setTimeout( handler, throttle - diff ); + } + }, + lastCall = 0, + heldCall, + curr, + diff; +})(); + + +$.each({ + scrollstop: "scrollstart", + taphold: "tap", + swipeleft: "swipe", + swiperight: "swipe" +}, function( event, sourceEvent ) { + + $.event.special[ event ] = { + setup: function() { + $( this ).bind( sourceEvent, $.noop ); + } + }; +}); + +})( jQuery, this ); + +(function( $, undefined ) { + +$.widget( "mobile.page", $.mobile.widget, { + options: { + theme: "c", + domCache: false, + keepNativeDefault: ":jqmData(role='none'), :jqmData(role='nojs')" + }, + + _create: function() { + + var self = this; + + // if false is returned by the callbacks do not create the page + if( self._trigger( "beforecreate" ) === false ){ + return false; + } + + self.element + .attr( "tabindex", "0" ) + .addClass( "ui-page ui-body-" + self.options.theme ) + .bind( "pagebeforehide", function(){ + self.removeContainerBackground(); + } ) + .bind( "pagebeforeshow", function(){ + self.setContainerBackground(); + } ); + + }, + + removeContainerBackground: function(){ + $.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) ); + }, + + // set the page container background to the page theme + setContainerBackground: function( theme ){ + if( this.options.theme ){ + $.mobile.pageContainer.addClass( "ui-overlay-" + ( theme || this.options.theme ) ); + } + }, + + keepNativeSelector: function() { + var options = this.options, + keepNativeDefined = options.keepNative && $.trim(options.keepNative); + + if( keepNativeDefined && options.keepNative !== options.keepNativeDefault ){ + return [options.keepNative, options.keepNativeDefault].join(", "); + } + + return options.keepNativeDefault; + } +}); +})( jQuery ); + + +(function( $, window, undefined ) { + +var createHandler = function( sequential ){ + + // Default to sequential + if( sequential === undefined ){ + sequential = true; + } + + return function( name, reverse, $to, $from ) { + + var deferred = new $.Deferred(), + reverseClass = reverse ? " reverse" : "", + active = $.mobile.urlHistory.getActive(), + toScroll = active.lastScroll || $.mobile.defaultHomeScroll, + screenHeight = $.mobile.getScreenHeight(), + maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $( window ).width() > $.mobile.maxTransitionWidth, + none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none", + toggleViewportClass = function(){ + $.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name ); + }, + scrollPage = function(){ + // By using scrollTo instead of silentScroll, we can keep things better in order + // Just to be precautios, disable scrollstart listening like silentScroll would + $.event.special.scrollstart.enabled = false; + + window.scrollTo( 0, toScroll ); + + // reenable scrollstart listening like silentScroll would + setTimeout(function() { + $.event.special.scrollstart.enabled = true; + }, 150 ); + }, + cleanFrom = function(){ + $from + .removeClass( $.mobile.activePageClass + " out in reverse " + name ) + .height( "" ); + }, + startOut = function(){ + // if it's not sequential, call the doneOut transition to start the TO page animating in simultaneously + if( !sequential ){ + doneOut(); + } + else { + $from.animationComplete( doneOut ); + } + + // Set the from page's height and start it transitioning out + // Note: setting an explicit height helps eliminate tiling in the transitions + $from + .height( screenHeight + $(window ).scrollTop() ) + .addClass( name + " out" + reverseClass ); + }, + + doneOut = function() { + + if ( $from && sequential ) { + cleanFrom(); + } + + startIn(); + }, + + startIn = function(){ + + $to.addClass( $.mobile.activePageClass ); + + // Send focus to page as it is now display: block + $.mobile.focusPage( $to ); + + // Set to page height + $to.height( screenHeight + toScroll ); + + scrollPage(); + + if( !none ){ + $to.animationComplete( doneIn ); + } + + $to.addClass( name + " in" + reverseClass ); + + if( none ){ + doneIn(); + } + + }, + + doneIn = function() { + + if ( !sequential ) { + + if( $from ){ + cleanFrom(); + } + } + + $to + .removeClass( "out in reverse " + name ) + .height( "" ); + + toggleViewportClass(); + + // In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition + // This ensures we jump to that spot after the fact, if we aren't there already. + if( $( window ).scrollTop() !== toScroll ){ + scrollPage(); + } + + deferred.resolve( name, reverse, $to, $from, true ); + }; + + toggleViewportClass(); + + if ( $from && !none ) { + startOut(); + } + else { + doneOut(); + } + + return deferred.promise(); + }; +} + +// generate the handlers from the above +var sequentialHandler = createHandler(), + simultaneousHandler = createHandler( false ); + +// Make our transition handler the public default. +$.mobile.defaultTransitionHandler = sequentialHandler; + +//transition handler dictionary for 3rd party transitions +$.mobile.transitionHandlers = { + "default": $.mobile.defaultTransitionHandler, + "sequential": sequentialHandler, + "simultaneous": simultaneousHandler +}; + +$.mobile.transitionFallbacks = {}; + +})( jQuery, this ); + +( function( $, undefined ) { + + //define vars for interal use + var $window = $( window ), + $html = $( 'html' ), + $head = $( 'head' ), + + //url path helpers for use in relative url management + path = { + + // This scary looking regular expression parses an absolute URL or its relative + // variants (protocol, site, document, query, and hash), into the various + // components (protocol, host, path, query, fragment, etc that make up the + // URL as well as some other commonly used sub-parts. When used with RegExp.exec() + // or String.match, it parses the URL into a results array that looks like this: + // + // [0]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread#msg-content + // [1]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread + // [2]: http://jblas:password@mycompany.com:8080/mail/inbox + // [3]: http://jblas:password@mycompany.com:8080 + // [4]: http: + // [5]: // + // [6]: jblas:password@mycompany.com:8080 + // [7]: jblas:password + // [8]: jblas + // [9]: password + // [10]: mycompany.com:8080 + // [11]: mycompany.com + // [12]: 8080 + // [13]: /mail/inbox + // [14]: /mail/ + // [15]: inbox + // [16]: ?msg=1234&type=unread + // [17]: #msg-content + // + urlParseRE: /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/, + + //Parse a URL into a structure that allows easy access to + //all of the URL components by name. + parseUrl: function( url ) { + // If we're passed an object, we'll assume that it is + // a parsed url object and just return it back to the caller. + if ( $.type( url ) === "object" ) { + return url; + } + + var matches = path.urlParseRE.exec( url || "" ) || []; + + // Create an object that allows the caller to access the sub-matches + // by name. Note that IE returns an empty string instead of undefined, + // like all other browsers do, so we normalize everything so its consistent + // no matter what browser we're running on. + return { + href: matches[ 0 ] || "", + hrefNoHash: matches[ 1 ] || "", + hrefNoSearch: matches[ 2 ] || "", + domain: matches[ 3 ] || "", + protocol: matches[ 4 ] || "", + doubleSlash: matches[ 5 ] || "", + authority: matches[ 6 ] || "", + username: matches[ 8 ] || "", + password: matches[ 9 ] || "", + host: matches[ 10 ] || "", + hostname: matches[ 11 ] || "", + port: matches[ 12 ] || "", + pathname: matches[ 13 ] || "", + directory: matches[ 14 ] || "", + filename: matches[ 15 ] || "", + search: matches[ 16 ] || "", + hash: matches[ 17 ] || "" + }; + }, + + //Turn relPath into an asbolute path. absPath is + //an optional absolute path which describes what + //relPath is relative to. + makePathAbsolute: function( relPath, absPath ) { + if ( relPath && relPath.charAt( 0 ) === "/" ) { + return relPath; + } + + relPath = relPath || ""; + absPath = absPath ? absPath.replace( /^\/|(\/[^\/]*|[^\/]+)$/g, "" ) : ""; + + var absStack = absPath ? absPath.split( "/" ) : [], + relStack = relPath.split( "/" ); + for ( var i = 0; i < relStack.length; i++ ) { + var d = relStack[ i ]; + switch ( d ) { + case ".": + break; + case "..": + if ( absStack.length ) { + absStack.pop(); + } + break; + default: + absStack.push( d ); + break; + } + } + return "/" + absStack.join( "/" ); + }, + + //Returns true if both urls have the same domain. + isSameDomain: function( absUrl1, absUrl2 ) { + return path.parseUrl( absUrl1 ).domain === path.parseUrl( absUrl2 ).domain; + }, + + //Returns true for any relative variant. + isRelativeUrl: function( url ) { + // All relative Url variants have one thing in common, no protocol. + return path.parseUrl( url ).protocol === ""; + }, + + //Returns true for an absolute url. + isAbsoluteUrl: function( url ) { + return path.parseUrl( url ).protocol !== ""; + }, + + //Turn the specified realtive URL into an absolute one. This function + //can handle all relative variants (protocol, site, document, query, fragment). + makeUrlAbsolute: function( relUrl, absUrl ) { + if ( !path.isRelativeUrl( relUrl ) ) { + return relUrl; + } + + var relObj = path.parseUrl( relUrl ), + absObj = path.parseUrl( absUrl ), + protocol = relObj.protocol || absObj.protocol, + doubleSlash = relObj.protocol ? relObj.doubleSlash : ( relObj.doubleSlash || absObj.doubleSlash ), + authority = relObj.authority || absObj.authority, + hasPath = relObj.pathname !== "", + pathname = path.makePathAbsolute( relObj.pathname || absObj.filename, absObj.pathname ), + search = relObj.search || ( !hasPath && absObj.search ) || "", + hash = relObj.hash; + + return protocol + doubleSlash + authority + pathname + search + hash; + }, + + //Add search (aka query) params to the specified url. + addSearchParams: function( url, params ) { + var u = path.parseUrl( url ), + p = ( typeof params === "object" ) ? $.param( params ) : params, + s = u.search || "?"; + return u.hrefNoSearch + s + ( s.charAt( s.length - 1 ) !== "?" ? "&" : "" ) + p + ( u.hash || "" ); + }, + + convertUrlToDataUrl: function( absUrl ) { + var u = path.parseUrl( absUrl ); + if ( path.isEmbeddedPage( u ) ) { + // For embedded pages, remove the dialog hash key as in getFilePath(), + // otherwise the Data Url won't match the id of the embedded Page. + return u.hash.split( dialogHashKey )[0].replace( /^#/, "" ); + } else if ( path.isSameDomain( u, documentBase ) ) { + return u.hrefNoHash.replace( documentBase.domain, "" ); + } + return absUrl; + }, + + //get path from current hash, or from a file path + get: function( newPath ) { + if( newPath === undefined ) { + newPath = location.hash; + } + return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, '' ); + }, + + //return the substring of a filepath before the sub-page key, for making a server request + getFilePath: function( path ) { + var splitkey = '&' + $.mobile.subPageUrlKey; + return path && path.split( splitkey )[0].split( dialogHashKey )[0]; + }, + + //set location hash to path + set: function( path ) { + location.hash = path; + }, + + //test if a given url (string) is a path + //NOTE might be exceptionally naive + isPath: function( url ) { + return ( /\// ).test( url ); + }, + + //return a url path with the window's location protocol/hostname/pathname removed + clean: function( url ) { + return url.replace( documentBase.domain, "" ); + }, + + //just return the url without an initial # + stripHash: function( url ) { + return url.replace( /^#/, "" ); + }, + + //remove the preceding hash, any query params, and dialog notations + cleanHash: function( hash ) { + return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) ); + }, + + //check whether a url is referencing the same domain, or an external domain or different protocol + //could be mailto, etc + isExternal: function( url ) { + var u = path.parseUrl( url ); + return u.protocol && u.domain !== documentUrl.domain ? true : false; + }, + + hasProtocol: function( url ) { + return ( /^(:?\w+:)/ ).test( url ); + }, + + //check if the specified url refers to the first page in the main application document. + isFirstPageUrl: function( url ) { + // We only deal with absolute paths. + var u = path.parseUrl( path.makeUrlAbsolute( url, documentBase ) ), + + // Does the url have the same path as the document? + samePath = u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ), + + // Get the first page element. + fp = $.mobile.firstPage, + + // Get the id of the first page element if it has one. + fpId = fp && fp[0] ? fp[0].id : undefined; + + // The url refers to the first page if the path matches the document and + // it either has no hash value, or the hash is exactly equal to the id of the + // first page element. + return samePath && ( !u.hash || u.hash === "#" || ( fpId && u.hash.replace( /^#/, "" ) === fpId ) ); + }, + + isEmbeddedPage: function( url ) { + var u = path.parseUrl( url ); + + //if the path is absolute, then we need to compare the url against + //both the documentUrl and the documentBase. The main reason for this + //is that links embedded within external documents will refer to the + //application document, whereas links embedded within the application + //document will be resolved against the document base. + if ( u.protocol !== "" ) { + return ( u.hash && ( u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ) ) ); + } + return (/^#/).test( u.href ); + } + }, + + //will be defined when a link is clicked and given an active class + $activeClickedLink = null, + + //urlHistory is purely here to make guesses at whether the back or forward button was clicked + //and provide an appropriate transition + urlHistory = { + // Array of pages that are visited during a single page load. + // Each has a url and optional transition, title, and pageUrl (which represents the file path, in cases where URL is obscured, such as dialogs) + stack: [], + + //maintain an index number for the active page in the stack + activeIndex: 0, + + //get active + getActive: function() { + return urlHistory.stack[ urlHistory.activeIndex ]; + }, + + getPrev: function() { + return urlHistory.stack[ urlHistory.activeIndex - 1 ]; + }, + + getNext: function() { + return urlHistory.stack[ urlHistory.activeIndex + 1 ]; + }, + + // addNew is used whenever a new page is added + addNew: function( url, transition, title, pageUrl, role ) { + //if there's forward history, wipe it + if( urlHistory.getNext() ) { + urlHistory.clearForward(); + } + + urlHistory.stack.push( {url : url, transition: transition, title: title, pageUrl: pageUrl, role: role } ); + + urlHistory.activeIndex = urlHistory.stack.length - 1; + }, + + //wipe urls ahead of active index + clearForward: function() { + urlHistory.stack = urlHistory.stack.slice( 0, urlHistory.activeIndex + 1 ); + }, + + directHashChange: function( opts ) { + var back , forward, newActiveIndex, prev = this.getActive(); + + // check if url isp in history and if it's ahead or behind current page + $.each( urlHistory.stack, function( i, historyEntry ) { + + //if the url is in the stack, it's a forward or a back + if( opts.currentUrl === historyEntry.url ) { + //define back and forward by whether url is older or newer than current page + back = i < urlHistory.activeIndex; + forward = !back; + newActiveIndex = i; + } + }); + + // save new page index, null check to prevent falsey 0 result + this.activeIndex = newActiveIndex !== undefined ? newActiveIndex : this.activeIndex; + + if( back ) { + ( opts.either || opts.isBack )( true ); + } else if( forward ) { + ( opts.either || opts.isForward )( false ); + } + }, + + //disable hashchange event listener internally to ignore one change + //toggled internally when location.hash is updated to match the url of a successful page load + ignoreNextHashChange: false + }, + + //define first selector to receive focus when a page is shown + focusable = "[tabindex],a,button:visible,select:visible,input", + + //queue to hold simultanious page transitions + pageTransitionQueue = [], + + //indicates whether or not page is in process of transitioning + isPageTransitioning = false, + + //nonsense hash change key for dialogs, so they create a history entry + dialogHashKey = "&ui-state=dialog", + + //existing base tag? + $base = $head.children( "base" ), + + //tuck away the original document URL minus any fragment. + documentUrl = path.parseUrl( location.href ), + + //if the document has an embedded base tag, documentBase is set to its + //initial value. If a base tag does not exist, then we default to the documentUrl. + documentBase = $base.length ? path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), documentUrl.href ) ) : documentUrl, + + //cache the comparison once. + documentBaseDiffers = ( documentUrl.hrefNoHash !== documentBase.hrefNoHash ); + + //base element management, defined depending on dynamic base tag support + var base = $.support.dynamicBaseTag ? { + + //define base element, for use in routing asset urls that are referenced in Ajax-requested markup + element: ( $base.length ? $base : $( "", { href: documentBase.hrefNoHash } ).prependTo( $head ) ), + + //set the generated BASE element's href attribute to a new page's base path + set: function( href ) { + base.element.attr( "href", path.makeUrlAbsolute( href, documentBase ) ); + }, + + //set the generated BASE element's href attribute to a new page's base path + reset: function() { + base.element.attr( "href", documentBase.hrefNoHash ); + } + + } : undefined; + +/* + internal utility functions +--------------------------------------*/ + + + //direct focus to the page title, or otherwise first focusable element + $.mobile.focusPage = function ( page ) { + var autofocus = page.find("[autofocus]"), + pageTitle = page.find( ".ui-title:eq(0)" ); + + if( autofocus.length ) { + autofocus.focus(); + return; + } + + if( pageTitle.length ) { + pageTitle.focus(); + } + else{ + page.focus(); + } + } + + //remove active classes after page transition or error + function removeActiveLinkClass( forceRemoval ) { + if( !!$activeClickedLink && ( !$activeClickedLink.closest( '.ui-page-active' ).length || forceRemoval ) ) { + $activeClickedLink.removeClass( $.mobile.activeBtnClass ); + } + $activeClickedLink = null; + } + + function releasePageTransitionLock() { + isPageTransitioning = false; + if( pageTransitionQueue.length > 0 ) { + $.mobile.changePage.apply( null, pageTransitionQueue.pop() ); + } + } + + // Save the last scroll distance per page, before it is hidden + var setLastScrollEnabled = true, + setLastScroll, delayedSetLastScroll; + + setLastScroll = function() { + // this barrier prevents setting the scroll value based on the browser + // scrolling the window based on a hashchange + if( !setLastScrollEnabled ) { + return; + } + + var active = $.mobile.urlHistory.getActive(); + + if( active ) { + var lastScroll = $window.scrollTop(); + + // Set active page's lastScroll prop. + // If the location we're scrolling to is less than minScrollBack, let it go. + active.lastScroll = lastScroll < $.mobile.minScrollBack ? $.mobile.defaultHomeScroll : lastScroll; + } + }; + + // bind to scrollstop to gather scroll position. The delay allows for the hashchange + // event to fire and disable scroll recording in the case where the browser scrolls + // to the hash targets location (sometimes the top of the page). once pagechange fires + // getLastScroll is again permitted to operate + delayedSetLastScroll = function() { + setTimeout( setLastScroll, 100 ); + }; + + // disable an scroll setting when a hashchange has been fired, this only works + // because the recording of the scroll position is delayed for 100ms after + // the browser might have changed the position because of the hashchange + $window.bind( $.support.pushState ? "popstate" : "hashchange", function() { + setLastScrollEnabled = false; + }); + + // handle initial hashchange from chrome :( + $window.one( $.support.pushState ? "popstate" : "hashchange", function() { + setLastScrollEnabled = true; + }); + + // wait until the mobile page container has been determined to bind to pagechange + $window.one( "pagecontainercreate", function(){ + // once the page has changed, re-enable the scroll recording + $.mobile.pageContainer.bind( "pagechange", function() { + + setLastScrollEnabled = true; + + // remove any binding that previously existed on the get scroll + // which may or may not be different than the scroll element determined for + // this page previously + $window.unbind( "scrollstop", delayedSetLastScroll ); + + // determine and bind to the current scoll element which may be the window + // or in the case of touch overflow the element with touch overflow + $window.bind( "scrollstop", delayedSetLastScroll ); + }); + }); + + // bind to scrollstop for the first page as "pagechange" won't be fired in that case + $window.bind( "scrollstop", delayedSetLastScroll ); + + //function for transitioning between two existing pages + function transitionPages( toPage, fromPage, transition, reverse ) { + + if( fromPage ) { + //trigger before show/hide events + fromPage.data( "page" )._trigger( "beforehide", null, { nextPage: toPage } ); + } + + toPage.data( "page" )._trigger( "beforeshow", null, { prevPage: fromPage || $( "" ) } ); + + //clear page loader + $.mobile.hidePageLoadingMsg(); + + // If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified + if( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ){ + transition = $.mobile.transitionFallbacks[ transition ]; + } + + //find the transition handler for the specified transition. If there + //isn't one in our transitionHandlers dictionary, use the default one. + //call the handler immediately to kick-off the transition. + var th = $.mobile.transitionHandlers[ transition || "default" ] || $.mobile.defaultTransitionHandler, + promise = th( transition, reverse, toPage, fromPage ); + + promise.done(function() { + + //trigger show/hide events + if( fromPage ) { + fromPage.data( "page" )._trigger( "hide", null, { nextPage: toPage } ); + } + + //trigger pageshow, define prevPage as either fromPage or empty jQuery obj + toPage.data( "page" )._trigger( "show", null, { prevPage: fromPage || $( "" ) } ); + }); + + return promise; + } + + //simply set the active page's minimum height to screen height, depending on orientation + function getScreenHeight(){ + // Native innerHeight returns more accurate value for this across platforms, + // jQuery version is here as a normalized fallback for platforms like Symbian + return window.innerHeight || $( window ).height(); + } + + $.mobile.getScreenHeight = getScreenHeight; + + //simply set the active page's minimum height to screen height, depending on orientation + function resetActivePageHeight(){ + var aPage = $( "." + $.mobile.activePageClass ), + aPagePadT = parseFloat( aPage.css( "padding-top" ) ), + aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ); + + aPage.css( "min-height", getScreenHeight() - aPagePadT - aPagePadB ); + } + + //shared page enhancements + function enhancePage( $page, role ) { + // If a role was specified, make sure the data-role attribute + // on the page element is in sync. + if( role ) { + $page.attr( "data-" + $.mobile.ns + "role", role ); + } + + //run page plugin + $page.page(); + } + +/* exposed $.mobile methods */ + + //animation complete callback + $.fn.animationComplete = function( callback ) { + if( $.support.cssTransitions ) { + return $( this ).one( 'webkitAnimationEnd animationend', callback ); + } + else{ + // defer execution for consistency between webkit/non webkit + setTimeout( callback, 0 ); + return $( this ); + } + }; + + //expose path object on $.mobile + $.mobile.path = path; + + //expose base object on $.mobile + $.mobile.base = base; + + //history stack + $.mobile.urlHistory = urlHistory; + + $.mobile.dialogHashKey = dialogHashKey; + + + + //enable cross-domain page support + $.mobile.allowCrossDomainPages = false; + + //return the original document url + $.mobile.getDocumentUrl = function(asParsedObject) { + return asParsedObject ? $.extend( {}, documentUrl ) : documentUrl.href; + }; + + //return the original document base url + $.mobile.getDocumentBase = function(asParsedObject) { + return asParsedObject ? $.extend( {}, documentBase ) : documentBase.href; + }; + + $.mobile._bindPageRemove = function() { + var page = $(this); + + // when dom caching is not enabled or the page is embedded bind to remove the page on hide + if( !page.data("page").options.domCache + && page.is(":jqmData(external-page='true')") ) { + + page.bind( 'pagehide.remove', function() { + var $this = $( this ), + prEvent = new $.Event( "pageremove" ); + + $this.trigger( prEvent ); + + if( !prEvent.isDefaultPrevented() ){ + $this.removeWithDependents(); + } + }); + } + }; + + // Load a page into the DOM. + $.mobile.loadPage = function( url, options ) { + // This function uses deferred notifications to let callers + // know when the page is done loading, or if an error has occurred. + var deferred = $.Deferred(), + + // The default loadPage options with overrides specified by + // the caller. + settings = $.extend( {}, $.mobile.loadPage.defaults, options ), + + // The DOM element for the page after it has been loaded. + page = null, + + // If the reloadPage option is true, and the page is already + // in the DOM, dupCachedPage will be set to the page element + // so that it can be removed after the new version of the + // page is loaded off the network. + dupCachedPage = null, + + // determine the current base url + findBaseWithDefault = function(){ + var closestBase = ( $.mobile.activePage && getClosestBaseUrl( $.mobile.activePage ) ); + return closestBase || documentBase.hrefNoHash; + }, + + // The absolute version of the URL passed into the function. This + // version of the URL may contain dialog/subpage params in it. + absUrl = path.makeUrlAbsolute( url, findBaseWithDefault() ); + + + // If the caller provided data, and we're using "get" request, + // append the data to the URL. + if ( settings.data && settings.type === "get" ) { + absUrl = path.addSearchParams( absUrl, settings.data ); + settings.data = undefined; + } + + // If the caller is using a "post" request, reloadPage must be true + if( settings.data && settings.type === "post" ){ + settings.reloadPage = true; + } + + // The absolute version of the URL minus any dialog/subpage params. + // In otherwords the real URL of the page to be loaded. + var fileUrl = path.getFilePath( absUrl ), + + // The version of the Url actually stored in the data-url attribute of + // the page. For embedded pages, it is just the id of the page. For pages + // within the same domain as the document base, it is the site relative + // path. For cross-domain pages (Phone Gap only) the entire absolute Url + // used to load the page. + dataUrl = path.convertUrlToDataUrl( absUrl ); + + // Make sure we have a pageContainer to work with. + settings.pageContainer = settings.pageContainer || $.mobile.pageContainer; + + // Check to see if the page already exists in the DOM. + page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" ); + + // If we failed to find the page, check to see if the url is a + // reference to an embedded page. If so, it may have been dynamically + // injected by a developer, in which case it would be lacking a data-url + // attribute and in need of enhancement. + if ( page.length === 0 && dataUrl && !path.isPath( dataUrl ) ) { + page = settings.pageContainer.children( "#" + dataUrl ) + .attr( "data-" + $.mobile.ns + "url", dataUrl ); + } + + // If we failed to find a page in the DOM, check the URL to see if it + // refers to the first page in the application. If it isn't a reference + // to the first page and refers to non-existent embedded page, error out. + if ( page.length === 0 ) { + if ( $.mobile.firstPage && path.isFirstPageUrl( fileUrl ) ) { + // Check to make sure our cached-first-page is actually + // in the DOM. Some user deployed apps are pruning the first + // page from the DOM for various reasons, we check for this + // case here because we don't want a first-page with an id + // falling through to the non-existent embedded page error + // case. If the first-page is not in the DOM, then we let + // things fall through to the ajax loading code below so + // that it gets reloaded. + if ( $.mobile.firstPage.parent().length ) { + page = $( $.mobile.firstPage ); + } + } else if ( path.isEmbeddedPage( fileUrl ) ) { + deferred.reject( absUrl, options ); + return deferred.promise(); + } + } + + // Reset base to the default document base. + if ( base ) { + base.reset(); + } + + // If the page we are interested in is already in the DOM, + // and the caller did not indicate that we should force a + // reload of the file, we are done. Otherwise, track the + // existing page as a duplicated. + if ( page.length ) { + if ( !settings.reloadPage ) { + enhancePage( page, settings.role ); + deferred.resolve( absUrl, options, page ); + return deferred.promise(); + } + dupCachedPage = page; + } + + var mpc = settings.pageContainer, + pblEvent = new $.Event( "pagebeforeload" ), + triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings }; + + // Let listeners know we're about to load a page. + mpc.trigger( pblEvent, triggerData ); + + // If the default behavior is prevented, stop here! + if( pblEvent.isDefaultPrevented() ){ + return deferred.promise(); + } + + if ( settings.showLoadMsg ) { + + // This configurable timeout allows cached pages a brief delay to load without showing a message + var loadMsgDelay = setTimeout(function(){ + $.mobile.showPageLoadingMsg(); + }, settings.loadMsgDelay ), + + // Shared logic for clearing timeout and removing message. + hideMsg = function(){ + + // Stop message show timer + clearTimeout( loadMsgDelay ); + + // Hide loading message + $.mobile.hidePageLoadingMsg(); + }; + } + + if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) { + deferred.reject( absUrl, options ); + } else { + // Load the new page. + $.ajax({ + url: fileUrl, + type: settings.type, + data: settings.data, + dataType: "html", + success: function( html, textStatus, xhr ) { + //pre-parse html to check for a data-url, + //use it as the new fileUrl, base path, etc + var all = $( "
" ), + + //page title regexp + newPageTitle = html.match( /]*>([^<]*)/ ) && RegExp.$1, + + // TODO handle dialogs again + pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + $.mobile.ns + "role=[\"']?page[\"']?[^>]*>)" ), + dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" ); + + + // data-url must be provided for the base tag so resource requests can be directed to the + // correct url. loading into a temprorary element makes these requests immediately + if( pageElemRegex.test( html ) + && RegExp.$1 + && dataUrlRegex.test( RegExp.$1 ) + && RegExp.$1 ) { + url = fileUrl = path.getFilePath( RegExp.$1 ); + } + + if ( base ) { + base.set( fileUrl ); + } + + //workaround to allow scripts to execute when included in page divs + all.get( 0 ).innerHTML = html; + page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first(); + + //if page elem couldn't be found, create one and insert the body element's contents + if( !page.length ){ + page = $( "
" + html.split( /<\/?body[^>]*>/gmi )[1] + "
" ); + } + + if ( newPageTitle && !page.jqmData( "title" ) ) { + if ( ~newPageTitle.indexOf( "&" ) ) { + newPageTitle = $( "
" + newPageTitle + "
" ).text(); + } + page.jqmData( "title", newPageTitle ); + } + + //rewrite src and href attrs to use a base url + if( !$.support.dynamicBaseTag ) { + var newPath = path.get( fileUrl ); + page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() { + var thisAttr = $( this ).is( '[href]' ) ? 'href' : + $(this).is('[src]') ? 'src' : 'action', + thisUrl = $( this ).attr( thisAttr ); + + // XXX_jblas: We need to fix this so that it removes the document + // base URL, and then prepends with the new page URL. + //if full path exists and is same, chop it - helps IE out + thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' ); + + if( !/^(\w+:|#|\/)/.test( thisUrl ) ) { + $( this ).attr( thisAttr, newPath + thisUrl ); + } + }); + } + + //append to page and enhance + // TODO taging a page with external to make sure that embedded pages aren't removed + // by the various page handling code is bad. Having page handling code in many + // places is bad. Solutions post 1.0 + page + .attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) ) + .attr( "data-" + $.mobile.ns + "external-page", true ) + .appendTo( settings.pageContainer ); + + // wait for page creation to leverage options defined on widget + page.one( 'pagecreate', $.mobile._bindPageRemove ); + + enhancePage( page, settings.role ); + + // Enhancing the page may result in new dialogs/sub pages being inserted + // into the DOM. If the original absUrl refers to a sub-page, that is the + // real page we are interested in. + if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) { + page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" ); + } + + //bind pageHide to removePage after it's hidden, if the page options specify to do so + + // Remove loading message. + if ( settings.showLoadMsg ) { + hideMsg(); + } + + // Add the page reference and xhr to our triggerData. + triggerData.xhr = xhr; + triggerData.textStatus = textStatus; + triggerData.page = page; + + // Let listeners know the page loaded successfully. + settings.pageContainer.trigger( "pageload", triggerData ); + + deferred.resolve( absUrl, options, page, dupCachedPage ); + }, + error: function( xhr, textStatus, errorThrown ) { + //set base back to current path + if( base ) { + base.set( path.get() ); + } + + // Add error info to our triggerData. + triggerData.xhr = xhr; + triggerData.textStatus = textStatus; + triggerData.errorThrown = errorThrown; + + var plfEvent = new $.Event( "pageloadfailed" ); + + // Let listeners know the page load failed. + settings.pageContainer.trigger( plfEvent, triggerData ); + + // If the default behavior is prevented, stop here! + // Note that it is the responsibility of the listener/handler + // that called preventDefault(), to resolve/reject the + // deferred object within the triggerData. + if( plfEvent.isDefaultPrevented() ){ + return; + } + + // Remove loading message. + if ( settings.showLoadMsg ) { + + // Remove loading message. + hideMsg(); + + // show error message + $.mobile.showPageLoadingMsg( $.mobile.pageLoadErrorMessageTheme, $.mobile.pageLoadErrorMessage, true ); + + // hide after delay + setTimeout( $.mobile.hidePageLoadingMsg, 1500 ); + } + + deferred.reject( absUrl, options ); + } + }); + } + + return deferred.promise(); + }; + + $.mobile.loadPage.defaults = { + type: "get", + data: undefined, + reloadPage: false, + role: undefined, // By default we rely on the role defined by the @data-role attribute. + showLoadMsg: false, + pageContainer: undefined, + loadMsgDelay: 50 // This delay allows loads that pull from browser cache to occur without showing the loading message. + }; + + // Show a specific page in the page container. + $.mobile.changePage = function( toPage, options ) { + // If we are in the midst of a transition, queue the current request. + // We'll call changePage() once we're done with the current transition to + // service the request. + if( isPageTransitioning ) { + pageTransitionQueue.unshift( arguments ); + return; + } + + var settings = $.extend( {}, $.mobile.changePage.defaults, options ); + + // Make sure we have a pageContainer to work with. + settings.pageContainer = settings.pageContainer || $.mobile.pageContainer; + + // Make sure we have a fromPage. + settings.fromPage = settings.fromPage || $.mobile.activePage; + + var mpc = settings.pageContainer, + pbcEvent = new $.Event( "pagebeforechange" ), + triggerData = { toPage: toPage, options: settings }; + + // Let listeners know we're about to change the current page. + mpc.trigger( pbcEvent, triggerData ); + + // If the default behavior is prevented, stop here! + if( pbcEvent.isDefaultPrevented() ){ + return; + } + + // We allow "pagebeforechange" observers to modify the toPage in the trigger + // data to allow for redirects. Make sure our toPage is updated. + + toPage = triggerData.toPage; + + // Set the isPageTransitioning flag to prevent any requests from + // entering this method while we are in the midst of loading a page + // or transitioning. + + isPageTransitioning = true; + + // If the caller passed us a url, call loadPage() + // to make sure it is loaded into the DOM. We'll listen + // to the promise object it returns so we know when + // it is done loading or if an error ocurred. + if ( typeof toPage == "string" ) { + $.mobile.loadPage( toPage, settings ) + .done(function( url, options, newPage, dupCachedPage ) { + isPageTransitioning = false; + options.duplicateCachedPage = dupCachedPage; + $.mobile.changePage( newPage, options ); + }) + .fail(function( url, options ) { + isPageTransitioning = false; + + //clear out the active button state + removeActiveLinkClass( true ); + + //release transition lock so navigation is free again + releasePageTransitionLock(); + settings.pageContainer.trigger( "pagechangefailed", triggerData ); + }); + return; + } + + // If we are going to the first-page of the application, we need to make + // sure settings.dataUrl is set to the application document url. This allows + // us to avoid generating a document url with an id hash in the case where the + // first-page of the document has an id attribute specified. + if ( toPage[ 0 ] === $.mobile.firstPage[ 0 ] && !settings.dataUrl ) { + settings.dataUrl = documentUrl.hrefNoHash; + } + + // The caller passed us a real page DOM element. Update our + // internal state and then trigger a transition to the page. + var fromPage = settings.fromPage, + url = ( settings.dataUrl && path.convertUrlToDataUrl( settings.dataUrl ) ) || toPage.jqmData( "url" ), + // The pageUrl var is usually the same as url, except when url is obscured as a dialog url. pageUrl always contains the file path + pageUrl = url, + fileUrl = path.getFilePath( url ), + active = urlHistory.getActive(), + activeIsInitialPage = urlHistory.activeIndex === 0, + historyDir = 0, + pageTitle = document.title, + isDialog = settings.role === "dialog" || toPage.jqmData( "role" ) === "dialog"; + + // By default, we prevent changePage requests when the fromPage and toPage + // are the same element, but folks that generate content manually/dynamically + // and reuse pages want to be able to transition to the same page. To allow + // this, they will need to change the default value of allowSamePageTransition + // to true, *OR*, pass it in as an option when they manually call changePage(). + // It should be noted that our default transition animations assume that the + // formPage and toPage are different elements, so they may behave unexpectedly. + // It is up to the developer that turns on the allowSamePageTransitiona option + // to either turn off transition animations, or make sure that an appropriate + // animation transition is used. + if( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) { + isPageTransitioning = false; + mpc.trigger( "pagechange", triggerData ); + return; + } + + // We need to make sure the page we are given has already been enhanced. + enhancePage( toPage, settings.role ); + + // If the changePage request was sent from a hashChange event, check to see if the + // page is already within the urlHistory stack. If so, we'll assume the user hit + // the forward/back button and will try to match the transition accordingly. + if( settings.fromHashChange ) { + urlHistory.directHashChange({ + currentUrl: url, + isBack: function() { historyDir = -1; }, + isForward: function() { historyDir = 1; } + }); + } + + // Kill the keyboard. + // XXX_jblas: We need to stop crawling the entire document to kill focus. Instead, + // we should be tracking focus with a delegate() handler so we already have + // the element in hand at this point. + // Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement + // is undefined when we are in an IFrame. + try { + if(document.activeElement && document.activeElement.nodeName.toLowerCase() != 'body') { + $(document.activeElement).blur(); + } else { + $( "input:focus, textarea:focus, select:focus" ).blur(); + } + } catch(e) {} + + // If we're displaying the page as a dialog, we don't want the url + // for the dialog content to be used in the hash. Instead, we want + // to append the dialogHashKey to the url of the current page. + if ( isDialog && active ) { + // on the initial page load active.url is undefined and in that case should + // be an empty string. Moving the undefined -> empty string back into + // urlHistory.addNew seemed imprudent given undefined better represents + // the url state + url = ( active.url || "" ) + dialogHashKey; + } + + // Set the location hash. + if( settings.changeHash !== false && url ) { + //disable hash listening temporarily + urlHistory.ignoreNextHashChange = true; + //update hash and history + path.set( url ); + } + + // if title element wasn't found, try the page div data attr too + // If this is a deep-link or a reload ( active === undefined ) then just use pageTitle + var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children(":jqmData(role='header')").find(".ui-title" ).getEncodedText(); + if( !!newPageTitle && pageTitle == document.title ) { + pageTitle = newPageTitle; + } + if ( !toPage.jqmData( "title" ) ) { + toPage.jqmData( "title", pageTitle ); + } + + // Make sure we have a transition defined. + settings.transition = settings.transition + || ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined ) + || ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition ); + + //add page to history stack if it's not back or forward + if( !historyDir ) { + urlHistory.addNew( url, settings.transition, pageTitle, pageUrl, settings.role ); + } + + //set page title + document.title = urlHistory.getActive().title; + + //set "toPage" as activePage + $.mobile.activePage = toPage; + + // If we're navigating back in the URL history, set reverse accordingly. + settings.reverse = settings.reverse || historyDir < 0; + + transitionPages( toPage, fromPage, settings.transition, settings.reverse ) + .done(function( name, reverse, $to, $from, alreadyFocused ) { + removeActiveLinkClass(); + + //if there's a duplicateCachedPage, remove it from the DOM now that it's hidden + if ( settings.duplicateCachedPage ) { + settings.duplicateCachedPage.remove(); + } + + // Send focus to the newly shown page. Moved from promise .done binding in transitionPages + // itself to avoid ie bug that reports offsetWidth as > 0 (core check for visibility) + // despite visibility: hidden addresses issue #2965 + // https://github.com/jquery/jquery-mobile/issues/2965 + if( !alreadyFocused ){ + $.mobile.focusPage( toPage ); + } + + releasePageTransitionLock(); + + // Let listeners know we're all done changing the current page. + mpc.trigger( "pagechange", triggerData ); + }); + }; + + $.mobile.changePage.defaults = { + transition: undefined, + reverse: false, + changeHash: true, + fromHashChange: false, + role: undefined, // By default we rely on the role defined by the @data-role attribute. + duplicateCachedPage: undefined, + pageContainer: undefined, + showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage + dataUrl: undefined, + fromPage: undefined, + allowSamePageTransition: false + }; + +/* Event Bindings - hashchange, submit, and click */ + function findClosestLink( ele ) + { + while ( ele ) { + // Look for the closest element with a nodeName of "a". + // Note that we are checking if we have a valid nodeName + // before attempting to access it. This is because the + // node we get called with could have originated from within + // an embedded SVG document where some symbol instance elements + // don't have nodeName defined on them, or strings are of type + // SVGAnimatedString. + if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() == "a" ) { + break; + } + ele = ele.parentNode; + } + return ele; + } + + // The base URL for any given element depends on the page it resides in. + function getClosestBaseUrl( ele ) + { + // Find the closest page and extract out its url. + var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ), + base = documentBase.hrefNoHash; + + if ( !url || !path.isPath( url ) ) { + url = base; + } + + return path.makeUrlAbsolute( url, base); + } + + + //The following event bindings should be bound after mobileinit has been triggered + //the following function is called in the init file + $.mobile._registerInternalEvents = function(){ + + //bind to form submit events, handle with Ajax + $( document ).delegate( "form", "submit", function( event ) { + var $this = $( this ); + + if( !$.mobile.ajaxEnabled || + // test that the form is, itself, ajax false + $this.is(":jqmData(ajax='false')") || + // test that $.mobile.ignoreContentEnabled is set and + // the form or one of it's parents is ajax=false + !$this.jqmHijackable().length ) { + return; + } + + var type = $this.attr( "method" ), + target = $this.attr( "target" ), + url = $this.attr( "action" ); + + // If no action is specified, browsers default to using the + // URL of the document containing the form. Since we dynamically + // pull in pages from external documents, the form should submit + // to the URL for the source document of the page containing + // the form. + if ( !url ) { + // Get the @data-url for the page containing the form. + url = getClosestBaseUrl( $this ); + if ( url === documentBase.hrefNoHash ) { + // The url we got back matches the document base, + // which means the page must be an internal/embedded page, + // so default to using the actual document url as a browser + // would. + url = documentUrl.hrefNoSearch; + } + } + + url = path.makeUrlAbsolute( url, getClosestBaseUrl($this) ); + + //external submits use regular HTTP + if( path.isExternal( url ) || target ) { + return; + } + + $.mobile.changePage( + url, + { + type: type && type.length && type.toLowerCase() || "get", + data: $this.serialize(), + transition: $this.jqmData( "transition" ), + direction: $this.jqmData( "direction" ), + reloadPage: true + } + ); + event.preventDefault(); + }); + + //add active state on vclick + $( document ).bind( "vclick", function( event ) { + // if this isn't a left click we don't care. Its important to note + // that when the virtual event is generated it will create the which attr + if ( event.which > 1 || !$.mobile.linkBindingEnabled ) { + return; + } + + var link = findClosestLink( event.target ); + + // split from the previous return logic to avoid find closest where possible + // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping + // can be avoided + if ( !$(link).jqmHijackable().length ) { + return; + } + + if ( link ) { + if ( path.parseUrl( link.getAttribute( "href" ) || "#" ).hash !== "#" ) { + removeActiveLinkClass( true ); + $activeClickedLink = $( link ).closest( ".ui-btn" ).not( ".ui-disabled" ); + $activeClickedLink.addClass( $.mobile.activeBtnClass ); + $( "." + $.mobile.activePageClass + " .ui-btn" ).not( link ).blur(); + + // By caching the href value to data and switching the href to a #, we can avoid address bar showing in iOS. The click handler resets the href during its initial steps if this data is present + $( link ) + .jqmData( "href", $( link ).attr( "href" ) ) + .attr( "href", "#" ); + } + } + }); + + // click routing - direct to HTTP or Ajax, accordingly + $( document ).bind( "click", function( event ) { + if( !$.mobile.linkBindingEnabled ){ + return; + } + + var link = findClosestLink( event.target ), $link = $( link ), httpCleanup; + + // If there is no link associated with the click or its not a left + // click we want to ignore the click + // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping + // can be avoided + if ( !link || event.which > 1 || !$link.jqmHijackable().length ) { + return; + } + + //remove active link class if external (then it won't be there if you come back) + httpCleanup = function(){ + window.setTimeout( function() { removeActiveLinkClass( true ); }, 200 ); + }; + + // If there's data cached for the real href value, set the link's href back to it again. This pairs with an address bar workaround from the vclick handler + if( $link.jqmData( "href" ) ){ + $link.attr( "href", $link.jqmData( "href" ) ); + } + + //if there's a data-rel=back attr, go back in history + if( $link.is( ":jqmData(rel='back')" ) ) { + window.history.back(); + return false; + } + + var baseUrl = getClosestBaseUrl( $link ), + + //get href, if defined, otherwise default to empty hash + href = path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl ); + + //if ajax is disabled, exit early + if( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ){ + httpCleanup(); + //use default click handling + return; + } + + // XXX_jblas: Ideally links to application pages should be specified as + // an url to the application document with a hash that is either + // the site relative path or id to the page. But some of the + // internal code that dynamically generates sub-pages for nested + // lists and select dialogs, just write a hash in the link they + // create. This means the actual URL path is based on whatever + // the current value of the base tag is at the time this code + // is called. For now we are just assuming that any url with a + // hash in it is an application page reference. + if ( href.search( "#" ) != -1 ) { + href = href.replace( /[^#]*#/, "" ); + if ( !href ) { + //link was an empty hash meant purely + //for interaction, so we ignore it. + event.preventDefault(); + return; + } else if ( path.isPath( href ) ) { + //we have apath so make it the href we want to load. + href = path.makeUrlAbsolute( href, baseUrl ); + } else { + //we have a simple id so use the documentUrl as its base. + href = path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash ); + } + } + + // Should we handle this link, or let the browser deal with it? + var useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ), + + // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR + // requests if the document doing the request was loaded via the file:// protocol. + // This is usually to allow the application to "phone home" and fetch app specific + // data. We normally let the browser handle external/cross-domain urls, but if the + // allowCrossDomainPages option is true, we will allow cross-domain http/https + // requests to go through our page loading logic. + isCrossDomainPageLoad = ( $.mobile.allowCrossDomainPages && documentUrl.protocol === "file:" && href.search( /^https?:/ ) != -1 ), + + //check for protocol or rel and its not an embedded page + //TODO overlap in logic from isExternal, rel=external check should be + // moved into more comprehensive isExternalLink + isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !isCrossDomainPageLoad ); + + if( isExternal ) { + httpCleanup(); + //use default click handling + return; + } + + //use ajax + var transition = $link.jqmData( "transition" ), + direction = $link.jqmData( "direction" ), + reverse = ( direction && direction === "reverse" ) || + // deprecated - remove by 1.0 + $link.jqmData( "back" ), + + //this may need to be more specific as we use data-rel more + role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined; + + $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role } ); + event.preventDefault(); + }); + + //prefetch pages when anchors with data-prefetch are encountered + $( document ).delegate( ".ui-page", "pageshow.prefetch", function() { + var urls = []; + $( this ).find( "a:jqmData(prefetch)" ).each(function(){ + var $link = $(this), + url = $link.attr( "href" ); + + if ( url && $.inArray( url, urls ) === -1 ) { + urls.push( url ); + + $.mobile.loadPage( url, {role: $link.attr("data-" + $.mobile.ns + "rel")} ); + } + }); + }); + + $.mobile._handleHashChange = function( hash ) { + //find first page via hash + var to = path.stripHash( hash ), + //transition is false if it's the first page, undefined otherwise (and may be overridden by default) + transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined, + + // default options for the changPage calls made after examining the current state + // of the page and the hash + changePageOptions = { + transition: transition, + changeHash: false, + fromHashChange: true + }; + + //if listening is disabled (either globally or temporarily), or it's a dialog hash + if( !$.mobile.hashListeningEnabled || urlHistory.ignoreNextHashChange ) { + urlHistory.ignoreNextHashChange = false; + return; + } + + // special case for dialogs + if( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 ) { + + // If current active page is not a dialog skip the dialog and continue + // in the same direction + if(!$.mobile.activePage.is( ".ui-dialog" )) { + //determine if we're heading forward or backward and continue accordingly past + //the current dialog + urlHistory.directHashChange({ + currentUrl: to, + isBack: function() { window.history.back(); }, + isForward: function() { window.history.forward(); } + }); + + // prevent changePage() + return; + } else { + // if the current active page is a dialog and we're navigating + // to a dialog use the dialog objected saved in the stack + urlHistory.directHashChange({ + currentUrl: to, + + // regardless of the direction of the history change + // do the following + either: function( isBack ) { + var active = $.mobile.urlHistory.getActive(); + + to = active.pageUrl; + + // make sure to set the role, transition and reversal + // as most of this is lost by the domCache cleaning + $.extend( changePageOptions, { + role: active.role, + transition: active.transition, + reverse: isBack + }); + } + }); + } + } + + //if to is defined, load it + if ( to ) { + // At this point, 'to' can be one of 3 things, a cached page element from + // a history stack entry, an id, or site-relative/absolute URL. If 'to' is + // an id, we need to resolve it against the documentBase, not the location.href, + // since the hashchange could've been the result of a forward/backward navigation + // that crosses from an external page/dialog to an internal page/dialog. + to = ( typeof to === "string" && !path.isPath( to ) ) ? ( path.makeUrlAbsolute( '#' + to, documentBase ) ) : to; + $.mobile.changePage( to, changePageOptions ); + } else { + //there's no hash, go to the first page in the dom + $.mobile.changePage( $.mobile.firstPage, changePageOptions ); + } + }; + + //hashchange event handler + $window.bind( "hashchange", function( e, triggered ) { + $.mobile._handleHashChange( location.hash ); + }); + + //set page min-heights to be device specific + $( document ).bind( "pageshow", resetActivePageHeight ); + $( window ).bind( "throttledresize", resetActivePageHeight ); + + };//_registerInternalEvents callback + +})( jQuery ); + +( function( $, window ) { + // For now, let's Monkeypatch this onto the end of $.mobile._registerInternalEvents + // Scope self to pushStateHandler so we can reference it sanely within the + // methods handed off as event handlers + var pushStateHandler = {}, + self = pushStateHandler, + $win = $( window ), + url = $.mobile.path.parseUrl( location.href ); + + $.extend( pushStateHandler, { + // TODO move to a path helper, this is rather common functionality + initialFilePath: (function() { + return url.pathname + url.search; + })(), + + initialHref: url.hrefNoHash, + + state: function() { + return { + hash: location.hash || "#" + self.initialFilePath, + title: document.title, + + // persist across refresh + initialHref: self.initialHref + }; + }, + + resetUIKeys: function( url ) { + var dialog = $.mobile.dialogHashKey, + subkey = "&" + $.mobile.subPageUrlKey, + dialogIndex = url.indexOf( dialog ); + + if( dialogIndex > -1 ) { + url = url.slice( 0, dialogIndex ) + "#" + url.slice( dialogIndex ); + } else if( url.indexOf( subkey ) > -1 ) { + url = url.split( subkey ).join( "#" + subkey ); + } + + return url; + }, + + hashValueAfterReset: function( url ) { + var resetUrl = self.resetUIKeys( url ); + return $.mobile.path.parseUrl( resetUrl ).hash; + }, + + // TODO sort out a single barrier to hashchange functionality + nextHashChangePrevented: function( value ) { + $.mobile.urlHistory.ignoreNextHashChange = value; + self.onHashChangeDisabled = value; + }, + + // on hash change we want to clean up the url + // NOTE this takes place *after* the vanilla navigation hash change + // handling has taken place and set the state of the DOM + onHashChange: function( e ) { + // disable this hash change + if( self.onHashChangeDisabled ){ + return; + } + + var href, state, + hash = location.hash, + isPath = $.mobile.path.isPath( hash ), + resolutionUrl = isPath ? location.href : $.mobile.getDocumentUrl(); + + hash = isPath ? hash.replace( "#", "" ) : hash; + + + // propulate the hash when its not available + state = self.state(); + + // make the hash abolute with the current href + href = $.mobile.path.makeUrlAbsolute( hash, resolutionUrl ); + + if ( isPath ) { + href = self.resetUIKeys( href ); + } + + // replace the current url with the new href and store the state + // Note that in some cases we might be replacing an url with the + // same url. We do this anyways because we need to make sure that + // all of our history entries have a state object associated with + // them. This allows us to work around the case where window.history.back() + // is called to transition from an external page to an embedded page. + // In that particular case, a hashchange event is *NOT* generated by the browser. + // Ensuring each history entry has a state object means that onPopState() + // will always trigger our hashchange callback even when a hashchange event + // is not fired. + history.replaceState( state, document.title, href ); + }, + + // on popstate (ie back or forward) we need to replace the hash that was there previously + // cleaned up by the additional hash handling + onPopState: function( e ) { + var poppedState = e.originalEvent.state, + timeout, fromHash, toHash, hashChanged; + + // if there's no state its not a popstate we care about, eg chrome's initial popstate + if( poppedState ) { + // the active url in the history stack will still be from the previous state + // so we can use it to verify if a hashchange will be fired from the popstate + fromHash = self.hashValueAfterReset( $.mobile.urlHistory.getActive().url ); + + // the hash stored in the state popped off the stack will be our currenturl or + // the url to which we wish to navigate + toHash = self.hashValueAfterReset( poppedState.hash.replace("#", "") ); + + // if the hashes of the urls are different we must assume that the browser + // will fire a hashchange + hashChanged = fromHash !== toHash; + + // unlock hash handling once the hashchange caused be the popstate has fired + if( hashChanged ) { + $win.one( "hashchange.pushstate", function() { + self.nextHashChangePrevented( false ); + }); + } + + // enable hash handling for the the _handleHashChange call + self.nextHashChangePrevented( false ); + + // change the page based on the hash + $.mobile._handleHashChange( poppedState.hash ); + + // only prevent another hash change handling if a hash change will be fired + // by the browser + if( hashChanged ) { + // disable hash handling until one of the above timers fires + self.nextHashChangePrevented( true ); + } + } + }, + + init: function() { + $win.bind( "hashchange", self.onHashChange ); + + // Handle popstate events the occur through history changes + $win.bind( "popstate", self.onPopState ); + + // if there's no hash, we need to replacestate for returning to home + if ( location.hash === "" ) { + history.replaceState( self.state(), document.title, location.href ); + } + } + }); + + $( function() { + if( $.mobile.pushStateEnabled && $.support.pushState ){ + pushStateHandler.init(); + } + }); +})( jQuery, this ); + +/* +* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.pop = "fade"; + +})( jQuery, this ); + +/* +* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +// Use the simultaneous transition handler for slide transitions +$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous; + +// Set the slide transition's fallback to "fade" +$.mobile.transitionFallbacks.slide = "fade"; + +})( jQuery, this ); + +/* +* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.slidedown = "fade"; + +})( jQuery, this ); + +/* +* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.slideup = "fade"; + +})( jQuery, this ); + +/* +* fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.flip = "fade"; + +})( jQuery, this ); + +/* +* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.flow = "fade"; + +})( jQuery, this ); + +/* +* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.turn = "fade"; + +})( jQuery, this ); + +(function( $, undefined ) { + +$.mobile.page.prototype.options.degradeInputs = { + color: false, + date: false, + datetime: false, + "datetime-local": false, + email: false, + month: false, + number: false, + range: "number", + search: "text", + tel: false, + time: false, + url: false, + week: false +}; + + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + + var page = $.mobile.closestPageData($(e.target)), options; + + if( !page ) { + return; + } + + options = page.options; + + // degrade inputs to avoid poorly implemented native functionality + $( e.target ).find( "input" ).not( page.keepNativeSelector() ).each(function() { + var $this = $( this ), + type = this.getAttribute( "type" ), + optType = options.degradeInputs[ type ] || "text"; + + if ( options.degradeInputs[ type ] ) { + var html = $( "
" ).html( $this.clone() ).html(), + // In IE browsers, the type sometimes doesn't exist in the cloned markup, so we replace the closing tag instead + hasType = html.indexOf( " type=" ) > -1, + findstr = hasType ? /\s+type=["']?\w+['"]?/ : /\/?>/, + repstr = " type=\"" + optType + "\" data-" + $.mobile.ns + "type=\"" + type + "\"" + ( hasType ? "" : ">" ); + + $this.replaceWith( html.replace( findstr, repstr ) ); + } + }); + +}); + +})( jQuery ); + +(function( $, window, undefined ) { + +$.widget( "mobile.dialog", $.mobile.widget, { + options: { + closeBtnText : "Close", + overlayTheme : "a", + initSelector : ":jqmData(role='dialog')" + }, + _create: function() { + var self = this, + $el = this.element, + headerCloseButton = $( ""+ this.options.closeBtnText + "" ), + dialogWrap = $("
", { + "role" : "dialog", + "class" : "ui-dialog-contain ui-corner-all ui-overlay-shadow" + }); + + $el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme ); + + // Class the markup for dialog styling + // Set aria role + $el + .wrapInner( dialogWrap ) + .children() + .find( ":jqmData(role='header')" ) + .prepend( headerCloseButton ) + .end() + .children( ':first-child') + .addClass( "ui-corner-top" ) + .end() + .children( ":last-child" ) + .addClass( "ui-corner-bottom" ); + + // this must be an anonymous function so that select menu dialogs can replace + // the close method. This is a change from previously just defining data-rel=back + // on the button and letting nav handle it + // + // Use click rather than vclick in order to prevent the possibility of unintentionally + // reopening the dialog if the dialog opening item was directly under the close button. + headerCloseButton.bind( "click", function() { + self.close(); + }); + + /* bind events + - clicks and submits should use the closing transition that the dialog opened with + unless a data-transition is specified on the link/form + - if the click was on the close button, or the link has a data-rel="back" it'll go back in history naturally + */ + $el.bind( "vclick submit", function( event ) { + var $target = $( event.target ).closest( event.type === "vclick" ? "a" : "form" ), + active; + + if ( $target.length && !$target.jqmData( "transition" ) ) { + + active = $.mobile.urlHistory.getActive() || {}; + + $target.attr( "data-" + $.mobile.ns + "transition", ( active.transition || $.mobile.defaultDialogTransition ) ) + .attr( "data-" + $.mobile.ns + "direction", "reverse" ); + } + }) + .bind( "pagehide", function( e, ui ) { + $( this ).find( "." + $.mobile.activeBtnClass ).removeClass( $.mobile.activeBtnClass ); + }) + // Override the theme set by the page plugin on pageshow + .bind( "pagebeforeshow", function(){ + if( self.options.overlayTheme ){ + self.element + .page( "removeContainerBackground" ) + .page( "setContainerBackground", self.options.overlayTheme ); + } + }); + }, + + // Close method goes back in history + close: function() { + window.history.back(); + } +}); + +//auto self-init widgets +$( document ).delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function(){ + $.mobile.dialog.prototype.enhance( this ); +}); + +})( jQuery, this ); + +(function( $, undefined ) { + +$.fn.fieldcontain = function( options ) { + return this.addClass( "ui-field-contain ui-body ui-br" ); +}; + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $( ":jqmData(role='fieldcontain')", e.target ).jqmEnhanceable().fieldcontain(); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.fn.grid = function( options ) { + return this.each(function() { + + var $this = $( this ), + o = $.extend({ + grid: null + },options), + $kids = $this.children(), + gridCols = {solo:1, a:2, b:3, c:4, d:5}, + grid = o.grid, + iterator; + + if ( !grid ) { + if ( $kids.length <= 5 ) { + for ( var letter in gridCols ) { + if ( gridCols[ letter ] === $kids.length ) { + grid = letter; + } + } + } else { + grid = "a"; + } + } + iterator = gridCols[grid]; + + $this.addClass( "ui-grid-" + grid ); + + $kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" ); + + if ( iterator > 1 ) { + $kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" ); + } + if ( iterator > 2 ) { + $kids.filter( ":nth-child(3n+3)" ).addClass( "ui-block-c" ); + } + if ( iterator > 3 ) { + $kids.filter( ":nth-child(4n+4)" ).addClass( "ui-block-d" ); + } + if ( iterator > 4 ) { + $kids.filter( ":nth-child(5n+5)" ).addClass( "ui-block-e" ); + } + }); +}; +})( jQuery ); + +(function( $, undefined ) { + +$( document ).bind( "pagecreate create", function( e ){ + $( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" ); + +}); + +})( jQuery ); + +( function( $, undefined ) { + +$.fn.buttonMarkup = function( options ) { + var $workingSet = this; + + // Enforce options to be of type string + options = ( options && ( $.type( options ) == "object" ) )? options : {}; + for ( var i = 0; i < $workingSet.length; i++ ) { + var el = $workingSet.eq( i ), + e = el[ 0 ], + o = $.extend( {}, $.fn.buttonMarkup.defaults, { + icon: options.icon !== undefined ? options.icon : el.jqmData( "icon" ), + iconpos: options.iconpos !== undefined ? options.iconpos : el.jqmData( "iconpos" ), + theme: options.theme !== undefined ? options.theme : el.jqmData( "theme" ) || $.mobile.getInheritedTheme( el, "c" ), + inline: options.inline !== undefined ? options.inline : el.jqmData( "inline" ), + shadow: options.shadow !== undefined ? options.shadow : el.jqmData( "shadow" ), + corners: options.corners !== undefined ? options.corners : el.jqmData( "corners" ), + iconshadow: options.iconshadow !== undefined ? options.iconshadow : el.jqmData( "iconshadow" ), + mini: options.mini !== undefined ? options.mini : el.jqmData( "mini" ) + }, options ), + + // Classes Defined + innerClass = "ui-btn-inner", + textClass = "ui-btn-text", + buttonClass, iconClass, + // Button inner markup + buttonInner, + buttonText, + buttonIcon, + buttonElements; + + $.each(o, function(key, value) { + e.setAttribute( "data-" + $.mobile.ns + key, value ); + el.jqmData(key, value); + }); + + // Check if this element is already enhanced + buttonElements = $.data(((e.tagName === "INPUT" || e.tagName === "BUTTON") ? e.parentNode : e), "buttonElements"); + + if (buttonElements) { + e = buttonElements.outer; + el = $(e); + buttonInner = buttonElements.inner; + buttonText = buttonElements.text; + // We will recreate this icon below + $(buttonElements.icon).remove(); + buttonElements.icon = null; + } + else { + buttonInner = document.createElement( o.wrapperEls ); + buttonText = document.createElement( o.wrapperEls ); + } + buttonIcon = o.icon ? document.createElement( "span" ) : null; + + if ( attachEvents && !buttonElements) { + attachEvents(); + } + + // if not, try to find closest theme container + if ( !o.theme ) { + o.theme = $.mobile.getInheritedTheme( el, "c" ); + } + + buttonClass = "ui-btn ui-btn-up-" + o.theme; + buttonClass += o.inline ? " ui-btn-inline" : ""; + buttonClass += o.shadow ? " ui-shadow" : ""; + buttonClass += o.corners ? " ui-btn-corner-all" : ""; + + if ( o.mini !== undefined ) { + // Used to control styling in headers/footers, where buttons default to `mini` style. + buttonClass += o.mini ? " ui-mini" : " ui-fullsize"; + } + + if ( o.inline !== undefined ) { + // Used to control styling in headers/footers, where buttons default to `mini` style. + buttonClass += o.inline === false ? " ui-btn-block" : " ui-btn-inline"; + } + + + if ( o.icon ) { + o.icon = "ui-icon-" + o.icon; + o.iconpos = o.iconpos || "left"; + + iconClass = "ui-icon " + o.icon; + + if ( o.iconshadow ) { + iconClass += " ui-icon-shadow"; + } + } + + if ( o.iconpos ) { + buttonClass += " ui-btn-icon-" + o.iconpos; + + if ( o.iconpos == "notext" && !el.attr( "title" ) ) { + el.attr( "title", el.getEncodedText() ); + } + } + + innerClass += o.corners ? " ui-btn-corner-all" : ""; + + if ( o.iconpos && o.iconpos === "notext" && !el.attr( "title" ) ) { + el.attr( "title", el.getEncodedText() ); + } + + if ( buttonElements ) { + el.removeClass( buttonElements.bcls || "" ); + } + el.removeClass( "ui-link" ).addClass( buttonClass ); + + buttonInner.className = innerClass; + + buttonText.className = textClass; + if ( !buttonElements ) { + buttonInner.appendChild( buttonText ); + } + if ( buttonIcon ) { + buttonIcon.className = iconClass; + if ( !(buttonElements && buttonElements.icon) ) { + buttonIcon.appendChild( document.createTextNode("\u00a0") ); + buttonInner.appendChild( buttonIcon ); + } + } + + while ( e.firstChild && !buttonElements) { + buttonText.appendChild( e.firstChild ); + } + + if ( !buttonElements ) { + e.appendChild( buttonInner ); + } + + // Assign a structure containing the elements of this button to the elements of this button. This + // will allow us to recognize this as an already-enhanced button in future calls to buttonMarkup(). + buttonElements = { + bcls : buttonClass, + outer : e, + inner : buttonInner, + text : buttonText, + icon : buttonIcon + }; + + $.data(e, 'buttonElements', buttonElements); + $.data(buttonInner, 'buttonElements', buttonElements); + $.data(buttonText, 'buttonElements', buttonElements); + if (buttonIcon) { + $.data(buttonIcon, 'buttonElements', buttonElements); + } + } + + return this; +}; + +$.fn.buttonMarkup.defaults = { + corners: true, + shadow: true, + iconshadow: true, + wrapperEls: "span" +}; + +function closestEnabledButton( element ) { + var cname; + + while ( element ) { + // Note that we check for typeof className below because the element we + // handed could be in an SVG DOM where className on SVG elements is defined to + // be of a different type (SVGAnimatedString). We only operate on HTML DOM + // elements, so we look for plain "string". + cname = ( typeof element.className === 'string' ) && (element.className + ' '); + if ( cname && cname.indexOf("ui-btn ") > -1 && cname.indexOf("ui-disabled ") < 0 ) { + break; + } + + element = element.parentNode; + } + + return element; +} + +var attachEvents = function() { + var hoverDelay = $.mobile.buttonMarkup.hoverDelay, hov, foc; + + $( document ).bind( { + "vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart": function( event ) { + var theme, + $btn = $( closestEnabledButton( event.target ) ), + evt = event.type; + + if ( $btn.length ) { + theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); + + if ( evt === "vmousedown" ) { + if ( $.support.touch ) { + hov = setTimeout(function() { + $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); + }, hoverDelay ); + } else { + $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); + } + } else if ( evt === "vmousecancel" || evt === "vmouseup" ) { + $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); + } else if ( evt === "vmouseover" || evt === "focus" ) { + if ( $.support.touch ) { + foc = setTimeout(function() { + $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); + }, hoverDelay ); + } else { + $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); + } + } else if ( evt === "vmouseout" || evt === "blur" || evt === "scrollstart" ) { + $btn.removeClass( "ui-btn-hover-" + theme + " ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); + if ( hov ) { + clearTimeout( hov ); + } + if ( foc ) { + clearTimeout( foc ); + } + } + } + }, + "focusin focus": function( event ){ + $( closestEnabledButton( event.target ) ).addClass( $.mobile.focusClass ); + }, + "focusout blur": function( event ){ + $( closestEnabledButton( event.target ) ).removeClass( $.mobile.focusClass ); + } + }); + + attachEvents = null; +}; + +//links in bars, or those with data-role become buttons +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + + $( ":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a", e.target ) + .not( ".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" ) + .buttonMarkup(); +}); + +})( jQuery ); + + +(function( $, undefined ) { + +$.mobile.page.prototype.options.backBtnText = "Back"; +$.mobile.page.prototype.options.addBackBtn = false; +$.mobile.page.prototype.options.backBtnTheme = null; +$.mobile.page.prototype.options.headerTheme = "a"; +$.mobile.page.prototype.options.footerTheme = "a"; +$.mobile.page.prototype.options.contentTheme = null; + +$( document ).delegate( ":jqmData(role='page'), :jqmData(role='dialog')", "pagecreate", function( e ) { + + var $page = $( this ), + o = $page.data( "page" ).options, + pageRole = $page.jqmData( "role" ), + pageTheme = o.theme; + + $( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", this ) + .jqmEnhanceable() + .each(function() { + + var $this = $( this ), + role = $this.jqmData( "role" ), + theme = $this.jqmData( "theme" ), + contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ), + $headeranchors, + leftbtn, + rightbtn, + backBtn; + + $this.addClass( "ui-" + role ); + + //apply theming and markup modifications to page,header,content,footer + if ( role === "header" || role === "footer" ) { + + var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme; + + $this + //add theme class + .addClass( "ui-bar-" + thisTheme ) + // Add ARIA role + .attr( "role", role === "header" ? "banner" : "contentinfo" ); + + if( role === "header") { + // Right,left buttons + $headeranchors = $this.children( "a" ); + leftbtn = $headeranchors.hasClass( "ui-btn-left" ); + rightbtn = $headeranchors.hasClass( "ui-btn-right" ); + + leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length; + + rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length; + } + + // Auto-add back btn on pages beyond first view + if ( o.addBackBtn && + role === "header" && + $( ".ui-page" ).length > 1 && + $page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) && + !leftbtn ) { + + backBtn = $( ""+ o.backBtnText +"" ) + // If theme is provided, override default inheritance + .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme ) + .prependTo( $this ); + } + + // Page title + $this.children( "h1, h2, h3, h4, h5, h6" ) + .addClass( "ui-title" ) + // Regardless of h element number in src, it becomes h1 for the enhanced page + .attr({ + "role": "heading", + "aria-level": "1" + }); + + } else if ( role === "content" ) { + if ( contentTheme ) { + $this.addClass( "ui-body-" + ( contentTheme ) ); + } + + // Add ARIA role + $this.attr( "role", "main" ); + } + }); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.collapsible", $.mobile.widget, { + options: { + expandCueText: " click to expand contents", + collapseCueText: " click to collapse contents", + collapsed: true, + heading: "h1,h2,h3,h4,h5,h6,legend", + theme: null, + contentTheme: null, + iconTheme: "d", + mini: false, + initSelector: ":jqmData(role='collapsible')" + }, + _create: function() { + + var $el = this.element, + o = this.options, + collapsible = $el.addClass( "ui-collapsible" ), + collapsibleHeading = $el.children( o.heading ).first(), + collapsibleContent = collapsible.wrapInner( "
" ).find( ".ui-collapsible-content" ), + collapsibleSet = $el.closest( ":jqmData(role='collapsible-set')" ).addClass( "ui-collapsible-set" ); + + // Replace collapsibleHeading if it's a legend + if ( collapsibleHeading.is( "legend" ) ) { + collapsibleHeading = $( "
"+ collapsibleHeading.html() +"
" ).insertBefore( collapsibleHeading ); + collapsibleHeading.next().remove(); + } + + // If we are in a collapsible set + if ( collapsibleSet.length ) { + // Inherit the theme from collapsible-set + if ( !o.theme ) { + o.theme = collapsibleSet.jqmData("theme") || $.mobile.getInheritedTheme( collapsibleSet, "c" ); + } + // Inherit the content-theme from collapsible-set + if ( !o.contentTheme ) { + o.contentTheme = collapsibleSet.jqmData( "content-theme" ); + } + + // Gets the preference icon position in the set + if ( !o.iconPos ) { + o.iconPos = collapsibleSet.jqmData( "iconpos" ); + } + + if( !o.mini ) { + o.mini = collapsibleSet.jqmData( "mini" ); + } + } + collapsibleContent.addClass( ( o.contentTheme ) ? ( "ui-body-" + o.contentTheme ) : ""); + + collapsibleHeading + //drop heading in before content + .insertBefore( collapsibleContent ) + //modify markup & attributes + .addClass( "ui-collapsible-heading" ) + .append( "" ) + .wrapInner( "" ) + .find( "a" ) + .first() + .buttonMarkup({ + shadow: false, + corners: false, + iconpos: $el.jqmData( "iconpos" ) || o.iconPos || "left", + icon: "plus", + mini: o.mini, + theme: o.theme + }) + .add( ".ui-btn-inner", $el ) + .addClass( "ui-corner-top ui-corner-bottom" ); + + //events + collapsible + .bind( "expand collapse", function( event ) { + if ( !event.isDefaultPrevented() ) { + + event.preventDefault(); + + var $this = $( this ), + isCollapse = ( event.type === "collapse" ), + contentTheme = o.contentTheme; + + collapsibleHeading + .toggleClass( "ui-collapsible-heading-collapsed", isCollapse) + .find( ".ui-collapsible-heading-status" ) + .text( isCollapse ? o.expandCueText : o.collapseCueText ) + .end() + .find( ".ui-icon" ) + .toggleClass( "ui-icon-minus", !isCollapse ) + .toggleClass( "ui-icon-plus", isCollapse ); + + $this.toggleClass( "ui-collapsible-collapsed", isCollapse ); + collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse ); + + if ( contentTheme && ( !collapsibleSet.length || collapsible.jqmData( "collapsible-last" ) ) ) { + collapsibleHeading + .find( "a" ).first().add( collapsibleHeading.find( ".ui-btn-inner" ) ) + .toggleClass( "ui-corner-bottom", isCollapse ); + collapsibleContent.toggleClass( "ui-corner-bottom", !isCollapse ); + } + collapsibleContent.trigger( "updatelayout" ); + } + }) + .trigger( o.collapsed ? "collapse" : "expand" ); + + collapsibleHeading + .bind( "click", function( event ) { + + var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ? + "expand" : "collapse"; + + collapsible.trigger( type ); + + event.preventDefault(); + }); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.collapsible.prototype.enhanceWithin( e.target ); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.collapsibleset", $.mobile.widget, { + options: { + initSelector: ":jqmData(role='collapsible-set')" + }, + _create: function() { + var $el = this.element.addClass( "ui-collapsible-set" ), + o = this.options; + + // Inherit the theme from collapsible-set + if ( !o.theme ) { + o.theme = $.mobile.getInheritedTheme( $el, "c" ); + } + // Inherit the content-theme from collapsible-set + if ( !o.contentTheme ) { + o.contentTheme = $el.jqmData( "content-theme" ); + } + + if ( !o.corners ) { + o.corners = $el.jqmData( "corners" ) === undefined ? true : false; + } + + // Initialize the collapsible set if it's not already initialized + if ( !$el.jqmData( "collapsiblebound" ) ) { + $el + .jqmData( "collapsiblebound", true ) + .bind( "expand collapse", function( event ) { + var isCollapse = ( event.type === "collapse" ), + collapsible = $( event.target ).closest( ".ui-collapsible" ), + widget = collapsible.data( "collapsible" ), + contentTheme = widget.options.contentTheme; + if ( contentTheme && collapsible.jqmData( "collapsible-last" ) ) { + collapsible.find( widget.options.heading ).first() + .find( "a" ).first() + .add( ".ui-btn-inner" ) + .toggleClass( "ui-corner-bottom", isCollapse ); + collapsible.find( ".ui-collapsible-content" ).toggleClass( "ui-corner-bottom", !isCollapse ); + } + }) + .bind( "expand", function( event ) { + $( event.target ) + .closest( ".ui-collapsible" ) + .siblings( ".ui-collapsible" ) + .trigger( "collapse" ); + }); + } + }, + + _init: function() { + this.refresh(); + }, + + refresh: function() { + var $el = this.element, + o = this.options, + collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" ); + + $.mobile.collapsible.prototype.enhance( collapsiblesInSet.not( ".ui-collapsible" ) ); + + // clean up borders + collapsiblesInSet.each( function() { + $( this ).find( $.mobile.collapsible.prototype.options.heading ) + .find( "a" ).first() + .add( ".ui-btn-inner" ) + .removeClass( "ui-corner-top ui-corner-bottom" ); + }); + + collapsiblesInSet.first() + .find( "a" ) + .first() + .addClass( o.corners ? "ui-corner-top" : "" ) + .find( ".ui-btn-inner" ) + .addClass( "ui-corner-top" ); + + collapsiblesInSet.last() + .jqmData( "collapsible-last", true ) + .find( "a" ) + .first() + .addClass( o.corners ? "ui-corner-bottom" : "" ) + .find( ".ui-btn-inner" ) + .addClass( "ui-corner-bottom" ); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.collapsibleset.prototype.enhanceWithin( e.target ); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.navbar", $.mobile.widget, { + options: { + iconpos: "top", + grid: null, + initSelector: ":jqmData(role='navbar')" + }, + + _create: function(){ + + var $navbar = this.element, + $navbtns = $navbar.find( "a" ), + iconpos = $navbtns.filter( ":jqmData(icon)" ).length ? + this.options.iconpos : undefined; + + $navbar.addClass( "ui-navbar" ) + .attr( "role","navigation" ) + .find( "ul" ) + .jqmEnhanceable() + .grid({ grid: this.options.grid }); + + if ( !iconpos ) { + $navbar.addClass( "ui-navbar-noicons" ); + } + + $navbtns.buttonMarkup({ + corners: false, + shadow: false, + inline: true, + iconpos: iconpos + }); + + $navbar.delegate( "a", "vclick", function( event ) { + if( !$(event.target).hasClass("ui-disabled") ) { + $navbtns.removeClass( $.mobile.activeBtnClass ); + $( this ).addClass( $.mobile.activeBtnClass ); + } + }); + + // Buttons in the navbar with ui-state-persist class should regain their active state before page show + $navbar.closest( ".ui-page" ).bind( "pagebeforeshow", function() { + $navbtns.filter( ".ui-state-persist" ).addClass( $.mobile.activeBtnClass ); + }); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.navbar.prototype.enhanceWithin( e.target ); +}); + +})( jQuery ); + +(function( $, undefined ) { + +//Keeps track of the number of lists per page UID +//This allows support for multiple nested list in the same page +//https://github.com/jquery/jquery-mobile/issues/1617 +var listCountPerPage = {}; + +$.widget( "mobile.listview", $.mobile.widget, { + + options: { + theme: null, + countTheme: "c", + headerTheme: "b", + dividerTheme: "b", + splitIcon: "arrow-r", + splitTheme: "b", + mini: false, + inset: false, + initSelector: ":jqmData(role='listview')" + }, + + _create: function() { + var t = this, + listviewClasses = ""; + + listviewClasses += t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : ""; + listviewClasses += t.element.jqmData( "mini" ) || t.options.mini === true ? " ui-mini" : ""; + + // create listview markup + t.element.addClass(function( i, orig ) { + return orig + " ui-listview " + listviewClasses; + }); + + t.refresh( true ); + }, + + _removeCorners: function( li, which ) { + var top = "ui-corner-top ui-corner-tr ui-corner-tl", + bot = "ui-corner-bottom ui-corner-br ui-corner-bl"; + + li = li.add( li.find( ".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb" ) ); + + if ( which === "top" ) { + li.removeClass( top ); + } else if ( which === "bottom" ) { + li.removeClass( bot ); + } else { + li.removeClass( top + " " + bot ); + } + }, + + _refreshCorners: function( create ) { + var $li, + $visibleli, + $topli, + $bottomli; + + if ( this.options.inset ) { + $li = this.element.children( "li" ); + // at create time the li are not visible yet so we need to rely on .ui-screen-hidden + $visibleli = create?$li.not( ".ui-screen-hidden" ):$li.filter( ":visible" ); + + this._removeCorners( $li ); + + // Select the first visible li element + $topli = $visibleli.first() + .addClass( "ui-corner-top" ); + + $topli.add( $topli.find( ".ui-btn-inner" ) + .not( ".ui-li-link-alt span:first-child" ) ) + .addClass( "ui-corner-top" ) + .end() + .find( ".ui-li-link-alt, .ui-li-link-alt span:first-child" ) + .addClass( "ui-corner-tr" ) + .end() + .find( ".ui-li-thumb" ) + .not(".ui-li-icon") + .addClass( "ui-corner-tl" ); + + // Select the last visible li element + $bottomli = $visibleli.last() + .addClass( "ui-corner-bottom" ); + + $bottomli.add( $bottomli.find( ".ui-btn-inner" ) ) + .find( ".ui-li-link-alt" ) + .addClass( "ui-corner-br" ) + .end() + .find( ".ui-li-thumb" ) + .not(".ui-li-icon") + .addClass( "ui-corner-bl" ); + } + if ( !create ) { + this.element.trigger( "updatelayout" ); + } + }, + + // This is a generic utility method for finding the first + // node with a given nodeName. It uses basic DOM traversal + // to be fast and is meant to be a substitute for simple + // $.fn.closest() and $.fn.children() calls on a single + // element. Note that callers must pass both the lowerCase + // and upperCase version of the nodeName they are looking for. + // The main reason for this is that this function will be + // called many times and we want to avoid having to lowercase + // the nodeName from the element every time to ensure we have + // a match. Note that this function lives here for now, but may + // be moved into $.mobile if other components need a similar method. + _findFirstElementByTagName: function( ele, nextProp, lcName, ucName ) + { + var dict = {}; + dict[ lcName ] = dict[ ucName ] = true; + while ( ele ) { + if ( dict[ ele.nodeName ] ) { + return ele; + } + ele = ele[ nextProp ]; + } + return null; + }, + _getChildrenByTagName: function( ele, lcName, ucName ) + { + var results = [], + dict = {}; + dict[ lcName ] = dict[ ucName ] = true; + ele = ele.firstChild; + while ( ele ) { + if ( dict[ ele.nodeName ] ) { + results.push( ele ); + } + ele = ele.nextSibling; + } + return $( results ); + }, + + _addThumbClasses: function( containers ) + { + var i, img, len = containers.length; + for ( i = 0; i < len; i++ ) { + img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) ); + if ( img.length ) { + img.addClass( "ui-li-thumb" ); + $( this._findFirstElementByTagName( img[ 0 ].parentNode, "parentNode", "li", "LI" ) ).addClass( img.is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); + } + } + }, + + refresh: function( create ) { + this.parentPage = this.element.closest( ".ui-page" ); + this._createSubPages(); + + var o = this.options, + $list = this.element, + self = this, + dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme, + listsplittheme = $list.jqmData( "splittheme" ), + listspliticon = $list.jqmData( "spliticon" ), + li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ), + counter = $.support.cssPseudoElement || !$.nodeName( $list[ 0 ], "ol" ) ? 0 : 1, + itemClassDict = {}, + item, itemClass, itemTheme, + a, last, splittheme, countParent, icon, imgParents, img, linkIcon; + + if ( counter ) { + $list.find( ".ui-li-dec" ).remove(); + } + + if ( !o.theme ) { + o.theme = $.mobile.getInheritedTheme( this.element, "c" ); + } + + for ( var pos = 0, numli = li.length; pos < numli; pos++ ) { + item = li.eq( pos ); + itemClass = "ui-li"; + + // If we're creating the element, we update it regardless + if ( create || !item.hasClass( "ui-li" ) ) { + itemTheme = item.jqmData("theme") || o.theme; + a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); + + if ( a.length ) { + icon = item.jqmData("icon"); + + item.buttonMarkup({ + wrapperEls: "div", + shadow: false, + corners: false, + iconpos: "right", + icon: a.length > 1 || icon === false ? false : icon || "arrow-r", + theme: itemTheme + }); + + if ( ( icon != false ) && ( a.length == 1 ) ) { + item.addClass( "ui-li-has-arrow" ); + } + + a.first().removeClass( "ui-link" ).addClass( "ui-link-inherit" ); + + if ( a.length > 1 ) { + itemClass += " ui-li-has-alt"; + + last = a.last(); + splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme; + linkIcon = last.jqmData("icon"); + + last.appendTo(item) + .attr( "title", last.getEncodedText() ) + .addClass( "ui-li-link-alt" ) + .empty() + .buttonMarkup({ + shadow: false, + corners: false, + theme: itemTheme, + icon: false, + iconpos: false + }) + .find( ".ui-btn-inner" ) + .append( + $( document.createElement( "span" ) ).buttonMarkup({ + shadow: true, + corners: true, + theme: splittheme, + iconpos: "notext", + // link icon overrides list item icon overrides ul element overrides options + icon: linkIcon || icon || listspliticon || o.splitIcon + }) + ); + } + } else if ( item.jqmData( "role" ) === "list-divider" ) { + + itemClass += " ui-li-divider ui-bar-" + dividertheme; + item.attr( "role", "heading" ); + + //reset counter when a divider heading is encountered + if ( counter ) { + counter = 1; + } + + } else { + itemClass += " ui-li-static ui-body-" + itemTheme; + } + } + + if ( counter && itemClass.indexOf( "ui-li-divider" ) < 0 ) { + countParent = item.is( ".ui-li-static:first" ) ? item : item.find( ".ui-link-inherit" ); + + countParent.addClass( "ui-li-jsnumbering" ) + .prepend( "" + (counter++) + ". " ); + } + + // Instead of setting item class directly on the list item and its + // btn-inner at this point in time, push the item into a dictionary + // that tells us what class to set on it so we can do this after this + // processing loop is finished. + + if ( !itemClassDict[ itemClass ] ) { + itemClassDict[ itemClass ] = []; + } + + itemClassDict[ itemClass ].push( item[ 0 ] ); + } + + // Set the appropriate listview item classes on each list item + // and their btn-inner elements. The main reason we didn't do this + // in the for-loop above is because we can eliminate per-item function overhead + // by calling addClass() and children() once or twice afterwards. This + // can give us a significant boost on platforms like WP7.5. + + for ( itemClass in itemClassDict ) { + $( itemClassDict[ itemClass ] ).addClass( itemClass ).children( ".ui-btn-inner" ).addClass( itemClass ); + } + + $list.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" ) + .end() + + .find( "p, dl" ).addClass( "ui-li-desc" ) + .end() + + .find( ".ui-li-aside" ).each(function() { + var $this = $(this); + $this.prependTo( $this.parent() ); //shift aside to front for css float + }) + .end() + + .find( ".ui-li-count" ).each( function() { + $( this ).closest( "li" ).addClass( "ui-li-has-count" ); + }).addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" ); + + // The idea here is to look at the first image in the list item + // itself, and any .ui-link-inherit element it may contain, so we + // can place the appropriate classes on the image and list item. + // Note that we used to use something like: + // + // li.find(">img:eq(0), .ui-link-inherit>img:eq(0)").each( ... ); + // + // But executing a find() like that on Windows Phone 7.5 took a + // really long time. Walking things manually with the code below + // allows the 400 listview item page to load in about 3 seconds as + // opposed to 30 seconds. + + this._addThumbClasses( li ); + this._addThumbClasses( $list.find( ".ui-link-inherit" ) ); + + this._refreshCorners( create ); + }, + + //create a string for ID/subpage url creation + _idStringEscape: function( str ) { + return str.replace(/[^a-zA-Z0-9]/g, '-'); + }, + + _createSubPages: function() { + var parentList = this.element, + parentPage = parentList.closest( ".ui-page" ), + parentUrl = parentPage.jqmData( "url" ), + parentId = parentUrl || parentPage[ 0 ][ $.expando ], + parentListId = parentList.attr( "id" ), + o = this.options, + dns = "data-" + $.mobile.ns, + self = this, + persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ), + hasSubPages; + + if ( typeof listCountPerPage[ parentId ] === "undefined" ) { + listCountPerPage[ parentId ] = -1; + } + + parentListId = parentListId || ++listCountPerPage[ parentId ]; + + $( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function( i ) { + var self = this, + list = $( this ), + listId = list.attr( "id" ) || parentListId + "-" + i, + parent = list.parent(), + nodeEls = $( list.prevAll().toArray().reverse() ), + nodeEls = nodeEls.length ? nodeEls : $( "" + $.trim(parent.contents()[ 0 ].nodeValue) + "" ), + title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text + id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId, + theme = list.jqmData( "theme" ) || o.theme, + countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme, + newPage, anchor; + + //define hasSubPages for use in later removal + hasSubPages = true; + + newPage = list.detach() + .wrap( "
" ) + .parent() + .before( "
" + title + "
" ) + .after( persistentFooterID ? $( "
") : "" ) + .parent() + .appendTo( $.mobile.pageContainer ); + + newPage.page(); + + anchor = parent.find('a:first'); + + if ( !anchor.length ) { + anchor = $( "" ).html( nodeEls || title ).prependTo( parent.empty() ); + } + + anchor.attr( "href", "#" + id ); + + }).listview(); + + // on pagehide, remove any nested pages along with the parent page, as long as they aren't active + // and aren't embedded + if( hasSubPages && + parentPage.is( ":jqmData(external-page='true')" ) && + parentPage.data("page").options.domCache === false ) { + + var newRemove = function( e, ui ){ + var nextPage = ui.nextPage, npURL; + + if( ui.nextPage ){ + npURL = nextPage.jqmData( "url" ); + if( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ){ + self.childPages().remove(); + parentPage.remove(); + } + } + }; + + // unbind the original page remove and replace with our specialized version + parentPage + .unbind( "pagehide.remove" ) + .bind( "pagehide.remove", newRemove); + } + }, + + // TODO sort out a better way to track sub pages of the listview this is brittle + childPages: function(){ + var parentUrl = this.parentPage.jqmData( "url" ); + + return $( ":jqmData(url^='"+ parentUrl + "&" + $.mobile.subPageUrlKey +"')"); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.listview.prototype.enhanceWithin( e.target ); +}); + +})( jQuery ); + +/* +* "checkboxradio" plugin +*/ + +(function( $, undefined ) { + +$.widget( "mobile.checkboxradio", $.mobile.widget, { + options: { + theme: null, + initSelector: "input[type='checkbox'],input[type='radio']" + }, + _create: function() { + var self = this, + input = this.element, + inheritAttr = function( input, dataAttr ) { + return input.jqmData( dataAttr ) || input.closest( "form,fieldset" ).jqmData( dataAttr ) + }, + // NOTE: Windows Phone could not find the label through a selector + // filter works though. + parentLabel = $( input ).closest( "label" ), + label = parentLabel.length ? parentLabel : $( input ).closest( "form,fieldset,:jqmData(role='page'),:jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ), + inputtype = input[0].type, + mini = inheritAttr( input, "mini" ), + checkedState = inputtype + "-on", + uncheckedState = inputtype + "-off", + icon = input.parents( ":jqmData(type='horizontal')" ).length ? undefined : uncheckedState, + iconpos = inheritAttr( input, "iconpos" ), + activeBtn = icon ? "" : " " + $.mobile.activeBtnClass, + checkedClass = "ui-" + checkedState + activeBtn, + uncheckedClass = "ui-" + uncheckedState, + checkedicon = "ui-icon-" + checkedState, + uncheckedicon = "ui-icon-" + uncheckedState; + + if ( inputtype !== "checkbox" && inputtype !== "radio" ) { + return; + } + + // Expose for other methods + $.extend( this, { + label: label, + inputtype: inputtype, + checkedClass: checkedClass, + uncheckedClass: uncheckedClass, + checkedicon: checkedicon, + uncheckedicon: uncheckedicon + }); + + // If there's no selected theme check the data attr + if( !this.options.theme ) { + this.options.theme = $.mobile.getInheritedTheme( this.element, "c" ); + } + + label.buttonMarkup({ + theme: this.options.theme, + icon: icon, + shadow: false, + mini: mini, + iconpos: iconpos + }); + + // Wrap the input + label in a div + var wrapper = document.createElement('div'); + wrapper.className = 'ui-' + inputtype; + + input.add( label ).wrapAll( wrapper ); + + label.bind({ + vmouseover: function( event ) { + if ( $( this ).parent().is( ".ui-disabled" ) ) { + event.stopPropagation(); + } + }, + + vclick: function( event ) { + if ( input.is( ":disabled" ) ) { + event.preventDefault(); + return; + } + + self._cacheVals(); + + input.prop( "checked", inputtype === "radio" && true || !input.prop( "checked" ) ); + + // trigger click handler's bound directly to the input as a substitute for + // how label clicks behave normally in the browsers + // TODO: it would be nice to let the browser's handle the clicks and pass them + // through to the associate input. we can swallow that click at the parent + // wrapper element level + input.triggerHandler( 'click' ); + + // Input set for common radio buttons will contain all the radio + // buttons, but will not for checkboxes. clearing the checked status + // of other radios ensures the active button state is applied properly + self._getInputSet().not( input ).prop( "checked", false ); + + self._updateAll(); + return false; + } + }); + + input + .bind({ + vmousedown: function() { + self._cacheVals(); + }, + + vclick: function() { + var $this = $(this); + + // Adds checked attribute to checked input when keyboard is used + if ( $this.is( ":checked" ) ) { + + $this.prop( "checked", true); + self._getInputSet().not($this).prop( "checked", false ); + } else { + + $this.prop( "checked", false ); + } + + self._updateAll(); + }, + + focus: function() { + label.addClass( $.mobile.focusClass ); + }, + + blur: function() { + label.removeClass( $.mobile.focusClass ); + } + }); + + this.refresh(); + }, + + _cacheVals: function() { + this._getInputSet().each(function() { + $(this).jqmData( "cacheVal", this.checked ); + }); + }, + + //returns either a set of radios with the same name attribute, or a single checkbox + _getInputSet: function(){ + if(this.inputtype === "checkbox") { + return this.element; + } + + return this.element.closest( "form,fieldset,:jqmData(role='page')" ) + .find( "input[name='"+ this.element[0].name +"'][type='"+ this.inputtype +"']" ); + }, + + _updateAll: function() { + var self = this; + + this._getInputSet().each(function() { + var $this = $(this); + + if ( this.checked || self.inputtype === "checkbox" ) { + $this.trigger( "change" ); + } + }) + .checkboxradio( "refresh" ); + }, + + refresh: function() { + var input = this.element[0], + label = this.label, + icon = label.find( ".ui-icon" ); + + if ( input.checked ) { + label.addClass( this.checkedClass ).removeClass( this.uncheckedClass ); + icon.addClass( this.checkedicon ).removeClass( this.uncheckedicon ); + } else { + label.removeClass( this.checkedClass ).addClass( this.uncheckedClass ); + icon.removeClass( this.checkedicon ).addClass( this.uncheckedicon ); + } + + if ( input.disabled ) { + this.disable(); + } else { + this.enable(); + } + }, + + disable: function() { + this.element.prop( "disabled", true ).parent().addClass( "ui-disabled" ); + }, + + enable: function() { + this.element.prop( "disabled", false ).parent().removeClass( "ui-disabled" ); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.checkboxradio.prototype.enhanceWithin( e.target, true ); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.button", $.mobile.widget, { + options: { + theme: null, + icon: null, + iconpos: null, + inline: false, + corners: true, + shadow: true, + iconshadow: true, + initSelector: "button, [type='button'], [type='submit'], [type='reset'], [type='image']", + mini: false + }, + _create: function() { + var $el = this.element, + $button, + o = this.options, + type, + name, + classes = "", + $buttonPlaceholder; + + // if this is a link, check if it's been enhanced and, if not, use the right function + if( $el[ 0 ].tagName === "A" ) { + !$el.hasClass( "ui-btn" ) && $el.buttonMarkup(); + return; + } + + // get the inherited theme + // TODO centralize for all widgets + if ( !this.options.theme ) { + this.options.theme = $.mobile.getInheritedTheme( this.element, "c" ); + } + + // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 + /* if( $el[0].className.length ) { + classes = $el[0].className; + } */ + if( !!~$el[0].className.indexOf( "ui-btn-left" ) ) { + classes = "ui-btn-left"; + } + + if( !!~$el[0].className.indexOf( "ui-btn-right" ) ) { + classes = "ui-btn-right"; + } + + // Add ARIA role + this.button = $( "
" ) + .text( $el.text() || $el.val() ) + .insertBefore( $el ) + .buttonMarkup({ + theme: o.theme, + icon: o.icon, + iconpos: o.iconpos, + inline: o.inline, + corners: o.corners, + shadow: o.shadow, + iconshadow: o.iconshadow, + mini: o.mini + }) + .addClass( classes ) + .append( $el.addClass( "ui-btn-hidden" ) ); + + $button = this.button; + type = $el.attr( "type" ); + name = $el.attr( "name" ); + + // Add hidden input during submit if input type="submit" has a name. + if ( type !== "button" && type !== "reset" && name ) { + $el.bind( "vclick", function() { + // Add hidden input if it doesn’t already exist. + if( $buttonPlaceholder === undefined ) { + $buttonPlaceholder = $( "", { + type: "hidden", + name: $el.attr( "name" ), + value: $el.attr( "value" ) + }).insertBefore( $el ); + + // Bind to doc to remove after submit handling + $( document ).one("submit", function(){ + $buttonPlaceholder.remove(); + + // reset the local var so that the hidden input + // will be re-added on subsequent clicks + $buttonPlaceholder = undefined; + }); + } + }); + } + + $el.bind({ + focus: function() { + $button.addClass( $.mobile.focusClass ); + }, + + blur: function() { + $button.removeClass( $.mobile.focusClass ); + } + }); + + this.refresh(); + }, + + enable: function() { + this.element.attr( "disabled", false ); + this.button.removeClass( "ui-disabled" ).attr( "aria-disabled", false ); + return this._setOption( "disabled", false ); + }, + + disable: function() { + this.element.attr( "disabled", true ); + this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true ); + return this._setOption( "disabled", true ); + }, + + refresh: function() { + var $el = this.element; + + if ( $el.prop("disabled") ) { + this.disable(); + } else { + this.enable(); + } + + // Grab the button's text element from its implementation-independent data item + $( this.button.data( 'buttonElements' ).text ).text( $el.text() || $el.val() ); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.button.prototype.enhanceWithin( e.target, true ); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.fn.controlgroup = function( options ) { + function flipClasses( els, flCorners ) { + els.removeClass( "ui-btn-corner-all ui-shadow" ) + .eq( 0 ).addClass( flCorners[ 0 ] ) + .end() + .last().addClass( flCorners[ 1 ] ).addClass( "ui-controlgroup-last" ); + } + + return this.each(function() { + var $el = $( this ), + o = $.extend({ + direction: $el.jqmData( "type" ) || "vertical", + shadow: false, + excludeInvisible: true, + mini: $el.jqmData( "mini" ) + }, options ), + groupheading = $el.children( "legend" ), + flCorners = o.direction == "horizontal" ? [ "ui-corner-left", "ui-corner-right" ] : [ "ui-corner-top", "ui-corner-bottom" ], + type = $el.find( "input" ).first().attr( "type" ); + + // Replace legend with more stylable replacement div + if ( groupheading.length ) { + $el.wrapInner( "
" ); + $( "
" + groupheading.html() + "
" ).insertBefore( $el.children(0) ); + groupheading.remove(); + } + + $el.addClass( "ui-corner-all ui-controlgroup ui-controlgroup-" + o.direction ); + + flipClasses( $el.find( ".ui-btn" + ( o.excludeInvisible ? ":visible" : "" ) ).not('.ui-slider-handle'), flCorners ); + flipClasses( $el.find( ".ui-btn-inner" ), flCorners ); + + if ( o.shadow ) { + $el.addClass( "ui-shadow" ); + } + + if ( o.mini ) { + $el.addClass( "ui-mini" ); + } + + }); +}; + +// The pagecreate handler for controlgroup is in jquery.mobile.init because of the soft-dependency on the wrapped widgets + +})(jQuery); + +(function( $, undefined ) { + +$( document ).bind( "pagecreate create", function( e ){ + + //links within content areas, tests included with page + $( e.target ) + .find( "a" ) + .jqmEnhanceable() + .not( ".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')" ) + .addClass( "ui-link" ); + +}); + +})( jQuery ); + + +( function( $ ) { + var meta = $( "meta[name=viewport]" ), + initialContent = meta.attr( "content" ), + disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no", + enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes", + disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent ); + + $.mobile.zoom = $.extend( {}, { + enabled: !disabledInitially, + locked: false, + disable: function( lock ) { + if( !disabledInitially && !$.mobile.zoom.locked ){ + meta.attr( "content", disabledZoom ); + $.mobile.zoom.enabled = false; + $.mobile.zoom.locked = lock || false; + } + }, + enable: function( unlock ) { + if( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ){ + meta.attr( "content", enabledZoom ); + $.mobile.zoom.enabled = true; + $.mobile.zoom.locked = false; + } + }, + restore: function() { + if( !disabledInitially ){ + meta.attr( "content", initialContent ); + $.mobile.zoom.enabled = true; + } + } + }); + +}( jQuery )); + +(function( $, undefined ) { + +$.widget( "mobile.textinput", $.mobile.widget, { + options: { + theme: null, + // This option defaults to true on iOS devices. + preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, + initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])", + clearSearchButtonText: "clear text" + }, + + _create: function() { + + var input = this.element, + o = this.options, + theme = o.theme || $.mobile.getInheritedTheme( this.element, "c" ), + themeclass = " ui-body-" + theme, + mini = input.jqmData("mini") == true, + miniclass = mini ? " ui-mini" : "", + focusedEl, clearbtn; + + $( "label[for='" + input.attr( "id" ) + "']" ).addClass( "ui-input-text" ); + + focusedEl = input.addClass("ui-input-text ui-body-"+ theme ); + + // XXX: Temporary workaround for issue 785 (Apple bug 8910589). + // Turn off autocorrect and autocomplete on non-iOS 5 devices + // since the popup they use can't be dismissed by the user. Note + // that we test for the presence of the feature by looking for + // the autocorrect property on the input element. We currently + // have no test for iOS 5 or newer so we're temporarily using + // the touchOverflow support flag for jQM 1.0. Yes, I feel dirty. - jblas + if ( typeof input[0].autocorrect !== "undefined" && !$.support.touchOverflow ) { + // Set the attribute instead of the property just in case there + // is code that attempts to make modifications via HTML. + input[0].setAttribute( "autocorrect", "off" ); + input[0].setAttribute( "autocomplete", "off" ); + } + + + //"search" input widget + if ( input.is( "[type='search'],:jqmData(type='search')" ) ) { + + focusedEl = input.wrap( "" ).parent(); + clearbtn = $( "
" + o.clearSearchButtonText + "" ) + .bind('click', function( event ) { + input + .val( "" ) + .focus() + .trigger( "change" ); + clearbtn.addClass( "ui-input-clear-hidden" ); + event.preventDefault(); + }) + .appendTo( focusedEl ) + .buttonMarkup({ + icon: "delete", + iconpos: "notext", + corners: true, + shadow: true, + mini: mini + }); + + function toggleClear() { + setTimeout(function() { + clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() ); + }, 0); + } + + toggleClear(); + + input.bind('paste cut keyup focus change blur', toggleClear); + + } else { + input.addClass( "ui-corner-all ui-shadow-inset" + themeclass + miniclass ); + } + + input.focus(function() { + focusedEl.addClass( $.mobile.focusClass ); + }) + .blur(function(){ + focusedEl.removeClass( $.mobile.focusClass ); + }) + // In many situations, iOS will zoom into the select upon tap, this prevents that from happening + .bind( "focus", function() { + if( o.preventFocusZoom ){ + $.mobile.zoom.disable( true ); + } + }) + .bind( "blur", function() { + if( o.preventFocusZoom ){ + $.mobile.zoom.enable( true ); + } + }); + + // Autogrow + if ( input.is( "textarea" ) ) { + var extraLineHeight = 15, + keyupTimeoutBuffer = 100, + keyup = function() { + var scrollHeight = input[ 0 ].scrollHeight, + clientHeight = input[ 0 ].clientHeight; + + if ( clientHeight < scrollHeight ) { + input.height(scrollHeight + extraLineHeight); + } + }, + keyupTimeout; + + input.keyup(function() { + clearTimeout( keyupTimeout ); + keyupTimeout = setTimeout( keyup, keyupTimeoutBuffer ); + }); + + // binding to pagechange here ensures that for pages loaded via + // ajax the height is recalculated without user input + $( document ).one( "pagechange", keyup ); + + // Issue 509: the browser is not providing scrollHeight properly until the styles load + if ( $.trim( input.val() ) ) { + // bind to the window load to make sure the height is calculated based on BOTH + // the DOM and CSS + $( window ).load( keyup ); + } + } + }, + + disable: function(){ + ( this.element.attr( "disabled", true ).is( "[type='search'],:jqmData(type='search')" ) ? + this.element.parent() : this.element ).addClass( "ui-disabled" ); + }, + + enable: function(){ + ( this.element.attr( "disabled", false).is( "[type='search'],:jqmData(type='search')" ) ? + this.element.parent() : this.element ).removeClass( "ui-disabled" ); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.textinput.prototype.enhanceWithin( e.target, true ); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.mobile.listview.prototype.options.filter = false; +$.mobile.listview.prototype.options.filterPlaceholder = "Filter items..."; +$.mobile.listview.prototype.options.filterTheme = "c"; +$.mobile.listview.prototype.options.filterCallback = function( text, searchValue ){ + return text.toLowerCase().indexOf( searchValue ) === -1; +}; + +$( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function() { + + var list = $( this ), + listview = list.data( "listview" ); + + if ( !listview.options.filter ) { + return; + } + + var wrapper = $( "
", { + "class": "ui-listview-filter ui-bar-" + listview.options.filterTheme, + "role": "search" + }), + search = $( "", { + placeholder: listview.options.filterPlaceholder + }) + .attr( "data-" + $.mobile.ns + "type", "search" ) + .jqmData( "lastval", "" ) + .bind( "keyup change", function() { + + var $this = $(this), + val = this.value.toLowerCase(), + listItems = null, + lastval = $this.jqmData( "lastval" ) + "", + childItems = false, + itemtext = "", + item; + + // Change val as lastval for next execution + $this.jqmData( "lastval" , val ); + if ( val.length < lastval.length || val.indexOf(lastval) !== 0 ) { + + // Removed chars or pasted something totally different, check all items + listItems = list.children(); + } else { + + // Only chars added, not removed, only use visible subset + listItems = list.children( ":not(.ui-screen-hidden)" ); + } + + if ( val ) { + + // This handles hiding regular rows without the text we search for + // and any list dividers without regular rows shown under it + + for ( var i = listItems.length - 1; i >= 0; i-- ) { + item = $( listItems[ i ] ); + itemtext = item.jqmData( "filtertext" ) || item.text(); + + if ( item.is( "li:jqmData(role=list-divider)" ) ) { + + item.toggleClass( "ui-filter-hidequeue" , !childItems ); + + // New bucket! + childItems = false; + + } else if ( listview.options.filterCallback( itemtext, val ) ) { + + //mark to be hidden + item.toggleClass( "ui-filter-hidequeue" , true ); + } else { + + // There's a shown item in the bucket + childItems = true; + } + } + + // Show items, not marked to be hidden + listItems + .filter( ":not(.ui-filter-hidequeue)" ) + .toggleClass( "ui-screen-hidden", false ); + + // Hide items, marked to be hidden + listItems + .filter( ".ui-filter-hidequeue" ) + .toggleClass( "ui-screen-hidden", true ) + .toggleClass( "ui-filter-hidequeue", false ); + + } else { + + //filtervalue is empty => show all + listItems.toggleClass( "ui-screen-hidden", false ); + } + listview._refreshCorners(); + }) + .appendTo( wrapper ) + .textinput(); + + if ( listview.options.inset ) { + wrapper.addClass( "ui-listview-filter-inset" ); + } + + wrapper.bind( "submit", function() { + return false; + }) + .insertBefore( list ); +}); + +})( jQuery ); + +( function( $, undefined ) { + +$.widget( "mobile.slider", $.mobile.widget, { + options: { + theme: null, + trackTheme: null, + disabled: false, + initSelector: "input[type='range'], :jqmData(type='range'), :jqmData(role='slider')", + mini: false + }, + + _create: function() { + + // TODO: Each of these should have comments explain what they're for + var self = this, + + control = this.element, + + parentTheme = $.mobile.getInheritedTheme( control, "c" ), + + theme = this.options.theme || parentTheme, + + trackTheme = this.options.trackTheme || parentTheme, + + cType = control[ 0 ].nodeName.toLowerCase(), + + selectClass = ( cType == "select" ) ? "ui-slider-switch" : "", + + controlID = control.attr( "id" ), + + labelID = controlID + "-label", + + label = $( "[for='"+ controlID +"']" ).attr( "id", labelID ), + + val = function() { + return cType == "input" ? parseFloat( control.val() ) : control[0].selectedIndex; + }, + + min = cType == "input" ? parseFloat( control.attr( "min" ) ) : 0, + + max = cType == "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1, + + step = window.parseFloat( control.attr( "step" ) || 1 ), + + inlineClass = ( this.options.inline || control.jqmData("inline") == true ) ? " ui-slider-inline" : "", + + miniClass = ( this.options.mini || control.jqmData("mini") ) ? " ui-slider-mini" : "", + + + domHandle = document.createElement('a'), + handle = $( domHandle ), + domSlider = document.createElement('div'), + slider = $( domSlider ), + + valuebg = control.jqmData("highlight") && cType != "select" ? (function() { + var bg = document.createElement('div'); + bg.className = 'ui-slider-bg ui-btn-active ui-btn-corner-all'; + return $( bg ).prependTo( slider ); + })() : false, + + options; + + domHandle.setAttribute( 'href', "#" ); + domSlider.setAttribute('role','application'); + domSlider.className = ['ui-slider ',selectClass," ui-btn-down-",trackTheme,' ui-btn-corner-all', inlineClass, miniClass].join(""); + domHandle.className = 'ui-slider-handle'; + domSlider.appendChild(domHandle); + + handle.buttonMarkup({ corners: true, theme: theme, shadow: true }) + .attr({ + "role": "slider", + "aria-valuemin": min, + "aria-valuemax": max, + "aria-valuenow": val(), + "aria-valuetext": val(), + "title": val(), + "aria-labelledby": labelID + }); + + $.extend( this, { + slider: slider, + handle: handle, + valuebg: valuebg, + dragging: false, + beforeStart: null, + userModified: false, + mouseMoved: false + }); + + if ( cType == "select" ) { + var wrapper = document.createElement('div'); + wrapper.className = 'ui-slider-inneroffset'; + + for(var j = 0,length = domSlider.childNodes.length;j < length;j++){ + wrapper.appendChild(domSlider.childNodes[j]); + } + + domSlider.appendChild(wrapper); + + // slider.wrapInner( "
" ); + + // make the handle move with a smooth transition + handle.addClass( "ui-slider-handle-snapping" ); + + options = control.find( "option" ); + + for(var i = 0, optionsCount = options.length; i < optionsCount; i++){ + var side = !i ? "b":"a", + sliderTheme = !i ? " ui-btn-down-" + trackTheme :( " " + $.mobile.activeBtnClass ), + sliderLabel = document.createElement('div'), + sliderImg = document.createElement('span'); + + sliderImg.className = ['ui-slider-label ui-slider-label-',side,sliderTheme," ui-btn-corner-all"].join(""); + sliderImg.setAttribute('role','img'); + sliderImg.appendChild(document.createTextNode(options[i].innerHTML)); + $(sliderImg).prependTo( slider ); + } + + self._labels = $( ".ui-slider-label", slider ); + + } + + label.addClass( "ui-slider" ); + + // monitor the input for updated values + control.addClass( cType === "input" ? "ui-slider-input" : "ui-slider-switch" ) + .change( function() { + // if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again + if (!self.mouseMoved) { + self.refresh( val(), true ); + } + }) + .keyup( function() { // necessary? + self.refresh( val(), true, true ); + }) + .blur( function() { + self.refresh( val(), true ); + }); + + // prevent screen drag when slider activated + $( document ).bind( "vmousemove", function( event ) { + if ( self.dragging ) { + // self.mouseMoved must be updated before refresh() because it will be used in the control "change" event + self.mouseMoved = true; + + if ( cType === "select" ) { + // make the handle move in sync with the mouse + handle.removeClass( "ui-slider-handle-snapping" ); + } + + self.refresh( event ); + + // only after refresh() you can calculate self.userModified + self.userModified = self.beforeStart !== control[0].selectedIndex; + return false; + } + }); + + slider.bind( "vmousedown", function( event ) { + self.dragging = true; + self.userModified = false; + self.mouseMoved = false; + + if ( cType === "select" ) { + self.beforeStart = control[0].selectedIndex; + } + + self.refresh( event ); + return false; + }) + .bind( "vclick", false ); + + slider.add( document ) + .bind( "vmouseup", function() { + if ( self.dragging ) { + + self.dragging = false; + + if ( cType === "select") { + + // make the handle move with a smooth transition + handle.addClass( "ui-slider-handle-snapping" ); + + if ( self.mouseMoved ) { + + // this is a drag, change the value only if user dragged enough + if ( self.userModified ) { + self.refresh( self.beforeStart == 0 ? 1 : 0 ); + } + else { + self.refresh( self.beforeStart ); + } + + } + else { + // this is just a click, change the value + self.refresh( self.beforeStart == 0 ? 1 : 0 ); + } + + } + + self.mouseMoved = false; + + return false; + } + }); + + slider.insertAfter( control ); + + // Only add focus class to toggle switch, sliders get it automatically from ui-btn + if( cType == 'select' ) { + this.handle.bind({ + focus: function() { + slider.addClass( $.mobile.focusClass ); + }, + + blur: function() { + slider.removeClass( $.mobile.focusClass ); + } + }); + } + + this.handle.bind({ + // NOTE force focus on handle + vmousedown: function() { + $( this ).focus(); + }, + + vclick: false, + + keydown: function( event ) { + var index = val(); + + if ( self.options.disabled ) { + return; + } + + // In all cases prevent the default and mark the handle as active + switch ( event.keyCode ) { + case $.mobile.keyCode.HOME: + case $.mobile.keyCode.END: + case $.mobile.keyCode.PAGE_UP: + case $.mobile.keyCode.PAGE_DOWN: + case $.mobile.keyCode.UP: + case $.mobile.keyCode.RIGHT: + case $.mobile.keyCode.DOWN: + case $.mobile.keyCode.LEFT: + event.preventDefault(); + + if ( !self._keySliding ) { + self._keySliding = true; + $( this ).addClass( "ui-state-active" ); + } + break; + } + + // move the slider according to the keypress + switch ( event.keyCode ) { + case $.mobile.keyCode.HOME: + self.refresh( min ); + break; + case $.mobile.keyCode.END: + self.refresh( max ); + break; + case $.mobile.keyCode.PAGE_UP: + case $.mobile.keyCode.UP: + case $.mobile.keyCode.RIGHT: + self.refresh( index + step ); + break; + case $.mobile.keyCode.PAGE_DOWN: + case $.mobile.keyCode.DOWN: + case $.mobile.keyCode.LEFT: + self.refresh( index - step ); + break; + } + }, // remove active mark + + keyup: function( event ) { + if ( self._keySliding ) { + self._keySliding = false; + $( this ).removeClass( "ui-state-active" ); + } + } + }); + + this.refresh(undefined, undefined, true); + }, + + refresh: function( val, isfromControl, preventInputUpdate ) { + + if ( this.options.disabled || this.element.attr('disabled')) { + this.disable(); + } + + var control = this.element, percent, + cType = control[0].nodeName.toLowerCase(), + min = cType === "input" ? parseFloat( control.attr( "min" ) ) : 0, + max = cType === "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length - 1, + step = (cType === "input" && parseFloat( control.attr( "step" ) ) > 0) ? parseFloat(control.attr("step")) : 1; + + if ( typeof val === "object" ) { + var data = val, + // a slight tolerance helped get to the ends of the slider + tol = 8; + if ( !this.dragging || + data.pageX < this.slider.offset().left - tol || + data.pageX > this.slider.offset().left + this.slider.width() + tol ) { + return; + } + percent = Math.round( ( ( data.pageX - this.slider.offset().left ) / this.slider.width() ) * 100 ); + } else { + if ( val == null ) { + val = cType === "input" ? parseFloat( control.val() || 0 ) : control[0].selectedIndex; + } + percent = ( parseFloat( val ) - min ) / ( max - min ) * 100; + } + + if ( isNaN( percent ) ) { + return; + } + + if ( percent < 0 ) { + percent = 0; + } + + if ( percent > 100 ) { + percent = 100; + } + + var newval = ( percent / 100 ) * ( max - min ) + min; + + //from jQuery UI slider, the following source will round to the nearest step + var valModStep = ( newval - min ) % step; + var alignValue = newval - valModStep; + + if ( Math.abs( valModStep ) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see jQueryUI: #4124) + newval = parseFloat( alignValue.toFixed(5) ); + + if ( newval < min ) { + newval = min; + } + + if ( newval > max ) { + newval = max; + } + + this.handle.css( "left", percent + "%" ); + this.handle.attr( { + "aria-valuenow": cType === "input" ? newval : control.find( "option" ).eq( newval ).attr( "value" ), + "aria-valuetext": cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText(), + title: cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText() + }); + this.valuebg && this.valuebg.css( "width", percent + "%" ); + + // drag the label widths + if ( this._labels ) { + var handlePercent = this.handle.width() / this.slider.width() * 100, + aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100, + bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 ); + + this._labels.each(function(){ + var ab = $(this).is( ".ui-slider-label-a" ); + $( this ).width( ( ab ? aPercent : bPercent ) + "%" ); + }); + } + + if ( !preventInputUpdate ) { + var valueChanged = false; + + // update control"s value + if ( cType === "input" ) { + valueChanged = control.val() !== newval; + control.val( newval ); + } else { + valueChanged = control[ 0 ].selectedIndex !== newval; + control[ 0 ].selectedIndex = newval; + } + if ( !isfromControl && valueChanged ) { + control.trigger( "change" ); + } + } + }, + + enable: function() { + this.element.attr( "disabled", false ); + this.slider.removeClass( "ui-disabled" ).attr( "aria-disabled", false ); + return this._setOption( "disabled", false ); + }, + + disable: function() { + this.element.attr( "disabled", true ); + this.slider.addClass( "ui-disabled" ).attr( "aria-disabled", true ); + return this._setOption( "disabled", true ); + } + +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.slider.prototype.enhanceWithin( e.target, true ); +}); + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.selectmenu", $.mobile.widget, { + options: { + theme: null, + disabled: false, + icon: "arrow-d", + iconpos: "right", + inline: false, + corners: true, + shadow: true, + iconshadow: true, + overlayTheme: "a", + hidePlaceholderMenuItems: true, + closeText: "Close", + nativeMenu: true, + // This option defaults to true on iOS devices. + preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, + initSelector: "select:not(:jqmData(role='slider'))", + mini: false + }, + + _button: function(){ + return $( "
" ); + }, + + _setDisabled: function( value ) { + this.element.attr( "disabled", value ); + this.button.attr( "aria-disabled", value ); + return this._setOption( "disabled", value ); + }, + + _focusButton : function() { + var self = this; + + setTimeout( function() { + self.button.focus(); + }, 40); + }, + + _selectOptions: function() { + return this.select.find( "option" ); + }, + + // setup items that are generally necessary for select menu extension + _preExtension: function(){ + var classes = ""; + // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 + /* if( $el[0].className.length ) { + classes = $el[0].className; + } */ + if( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) { + classes = " ui-btn-left"; + } + + if( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) { + classes = " ui-btn-right"; + } + + this.select = this.element.wrap( "
" ); + this.selectID = this.select.attr( "id" ); + this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" ); + this.isMultiple = this.select[ 0 ].multiple; + if ( !this.options.theme ) { + this.options.theme = $.mobile.getInheritedTheme( this.select, "c" ); + } + }, + + _create: function() { + this._preExtension(); + + // Allows for extension of the native select for custom selects and other plugins + // see select.custom for example extension + // TODO explore plugin registration + this._trigger( "beforeCreate" ); + + this.button = this._button(); + + var self = this, + + options = this.options, + + // IE throws an exception at options.item() function when + // there is no selected item + // select first in this case + selectedIndex = this.select[ 0 ].selectedIndex == -1 ? 0 : this.select[ 0 ].selectedIndex, + + // TODO values buttonId and menuId are undefined here + button = this.button + .text( $( this.select[ 0 ].options.item( selectedIndex ) ).text() ) + .insertBefore( this.select ) + .buttonMarkup( { + theme: options.theme, + icon: options.icon, + iconpos: options.iconpos, + inline: options.inline, + corners: options.corners, + shadow: options.shadow, + iconshadow: options.iconshadow, + mini: options.mini + }); + + // Opera does not properly support opacity on select elements + // In Mini, it hides the element, but not its text + // On the desktop,it seems to do the opposite + // for these reasons, using the nativeMenu option results in a full native select in Opera + if ( options.nativeMenu && window.opera && window.opera.version ) { + this.select.addClass( "ui-select-nativeonly" ); + } + + // Add counter for multi selects + if ( this.isMultiple ) { + this.buttonCount = $( "" ) + .addClass( "ui-li-count ui-btn-up-c ui-btn-corner-all" ) + .hide() + .appendTo( button.addClass('ui-li-has-count') ); + } + + // Disable if specified + if ( options.disabled || this.element.attr('disabled')) { + this.disable(); + } + + // Events on native select + this.select.change( function() { + self.refresh(); + }); + + this.build(); + }, + + build: function() { + var self = this; + + this.select + .appendTo( self.button ) + .bind( "vmousedown", function() { + // Add active class to button + self.button.addClass( $.mobile.activeBtnClass ); + }) + .bind( "focus", function() { + self.button.addClass( $.mobile.focusClass ); + }) + .bind( "blur", function() { + self.button.removeClass( $.mobile.focusClass ); + }) + .bind( "focus vmouseover", function() { + self.button.trigger( "vmouseover" ); + }) + .bind( "vmousemove", function() { + // Remove active class on scroll/touchmove + self.button.removeClass( $.mobile.activeBtnClass ); + }) + .bind( "change blur vmouseout", function() { + self.button.trigger( "vmouseout" ) + .removeClass( $.mobile.activeBtnClass ); + }) + .bind( "change blur", function() { + self.button.removeClass( "ui-btn-down-" + self.options.theme ); + }); + + // In many situations, iOS will zoom into the select upon tap, this prevents that from happening + self.button.bind( "vmousedown", function() { + if( self.options.preventFocusZoom ){ + $.mobile.zoom.disable( true ); + } + }) + .bind( "mouseup", function() { + if( self.options.preventFocusZoom ){ + $.mobile.zoom.enable( true ); + } + }); + }, + + selected: function() { + return this._selectOptions().filter( ":selected" ); + }, + + selectedIndices: function() { + var self = this; + + return this.selected().map( function() { + return self._selectOptions().index( this ); + }).get(); + }, + + setButtonText: function() { + var self = this, selected = this.selected(); + + this.button.find( ".ui-btn-text" ).text( function() { + if ( !self.isMultiple ) { + return selected.text(); + } + + return selected.length ? selected.map( function() { + return $( this ).text(); + }).get().join( ", " ) : self.placeholder; + }); + }, + + setButtonCount: function() { + var selected = this.selected(); + + // multiple count inside button + if ( this.isMultiple ) { + this.buttonCount[ selected.length > 1 ? "show" : "hide" ]().text( selected.length ); + } + }, + + refresh: function() { + this.setButtonText(); + this.setButtonCount(); + }, + + // open and close preserved in native selects + // to simplify users code when looping over selects + open: $.noop, + close: $.noop, + + disable: function() { + this._setDisabled( true ); + this.button.addClass( "ui-disabled" ); + }, + + enable: function() { + this._setDisabled( false ); + this.button.removeClass( "ui-disabled" ); + } +}); + +//auto self-init widgets +$( document ).bind( "pagecreate create", function( e ){ + $.mobile.selectmenu.prototype.enhanceWithin( e.target, true ); +}); +})( jQuery ); + +/* +* custom "selectmenu" plugin +*/ + +(function( $, undefined ) { + var extendSelect = function( widget ){ + + var select = widget.select, + selectID = widget.selectID, + label = widget.label, + thisPage = widget.select.closest( ".ui-page" ), + screen = $( "
", {"class": "ui-selectmenu-screen ui-screen-hidden"} ).appendTo( thisPage ), + selectOptions = widget._selectOptions(), + isMultiple = widget.isMultiple = widget.select[ 0 ].multiple, + buttonId = selectID + "-button", + menuId = selectID + "-menu", + menuPage = $( "
" + + "
" + + "
" + label.getEncodedText() + "
"+ + "
"+ + "
"+ + "
" ), + + listbox = $("
", { "class": "ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all ui-body-" + widget.options.overlayTheme + " " + $.mobile.defaultDialogTransition } ).insertAfter(screen), + + list = $( "