This commit is contained in:
Erik Lundin 2012-10-05 21:33:08 +02:00
commit 6ffee8476f
19 changed files with 1053 additions and 782 deletions

View File

@ -1 +1 @@
1.9.11 1.9.12

View File

@ -38,7 +38,7 @@ import sys
from openlp.core.lib import SettingsTab, translate, build_icon, Receiver from openlp.core.lib import SettingsTab, translate, build_icon, Receiver
from openlp.core.lib.settings import Settings from openlp.core.lib.settings import Settings
from openlp.core.lib.ui import UiStrings from openlp.core.lib.ui import UiStrings
from openlp.core.utils import get_images_filter, AppLocation from openlp.core.utils import get_images_filter, AppLocation, format_time
from openlp.core.lib import SlideLimits from openlp.core.lib import SlideLimits
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -612,18 +612,18 @@ class AdvancedTab(SettingsTab):
def generateServiceNameExample(self): def generateServiceNameExample(self):
preset_is_valid = True preset_is_valid = True
if self.serviceNameDay.currentIndex() == 7: if self.serviceNameDay.currentIndex() == 7:
time = datetime.now() local_time = datetime.now()
else: else:
now = datetime.now() now = datetime.now()
day_delta = self.serviceNameDay.currentIndex() - now.weekday() day_delta = self.serviceNameDay.currentIndex() - now.weekday()
if day_delta < 0: if day_delta < 0:
day_delta += 7 day_delta += 7
time = now + timedelta(days=day_delta) time = now + timedelta(days=day_delta)
time = time.replace(hour = self.serviceNameTime.time().hour(), local_time = time.replace(hour = self.serviceNameTime.time().hour(),
minute = self.serviceNameTime.time().minute()) minute = self.serviceNameTime.time().minute())
try: try:
service_name_example = time.strftime(unicode( service_name_example = format_time(unicode(
self.serviceNameEdit.text())) self.serviceNameEdit.text()), local_time)
except ValueError: except ValueError:
preset_is_valid = False preset_is_valid = False
service_name_example = translate('OpenLP.AdvancedTab', service_name_example = translate('OpenLP.AdvancedTab',
@ -674,6 +674,7 @@ class AdvancedTab(SettingsTab):
options = QtGui.QFileDialog.ShowDirsOnly)) options = QtGui.QFileDialog.ShowDirsOnly))
# Set the new data path. # Set the new data path.
if new_data_path: if new_data_path:
new_data_path = os.path.normpath(new_data_path)
if self.currentDataPath.lower() == new_data_path.lower(): if self.currentDataPath.lower() == new_data_path.lower():
self.onDataDirectoryCancelButtonClicked() self.onDataDirectoryCancelButtonClicked()
return return

View File

@ -138,11 +138,16 @@ class MainDisplay(Display):
if Settings().value(u'advanced/x11 bypass wm', if Settings().value(u'advanced/x11 bypass wm',
QtCore.QVariant(True)).toBool(): QtCore.QVariant(True)).toBool():
windowFlags |= QtCore.Qt.X11BypassWindowManagerHint windowFlags |= QtCore.Qt.X11BypassWindowManagerHint
# FIXME: QtCore.Qt.SplashScreen is workaround to make display screen # TODO: The following combination of windowFlags works correctly
# stay always on top on Mac OS X. For details see bug 906926. # on Mac OS X. For next OpenLP version we should test it on other
# It needs more investigation to fix it properly. # platforms. For OpenLP 2.0 keep it only for OS X to not cause any
# regressions on other platforms.
if sys.platform == 'darwin': if sys.platform == 'darwin':
windowFlags |= QtCore.Qt.SplashScreen windowFlags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Window
# For primary screen ensure it stays above the OS X dock
# and menu bar
if self.screens.current[u'primary']:
self.setWindowState(QtCore.Qt.WindowFullScreen)
self.setWindowFlags(windowFlags) self.setWindowFlags(windowFlags)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setTransparency(False) self.setTransparency(False)

View File

@ -971,6 +971,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
setting_sections.extend([self.themesSettingsSection]) setting_sections.extend([self.themesSettingsSection])
setting_sections.extend([self.displayTagsSection]) setting_sections.extend([self.displayTagsSection])
setting_sections.extend([self.headerSection]) setting_sections.extend([self.headerSection])
setting_sections.extend([u'crashreport'])
# Add plugin sections. # Add plugin sections.
for plugin in self.pluginManager.plugins: for plugin in self.pluginManager.plugins:
setting_sections.extend([plugin.name]) setting_sections.extend([plugin.name])

View File

@ -28,6 +28,7 @@
import logging import logging
import os import os
import sys
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.lib import OpenLPToolbar, Receiver, translate from openlp.core.lib import OpenLPToolbar, Receiver, translate
@ -105,8 +106,12 @@ class MediaController(object):
AppLocation.get_directory(AppLocation.AppDir), AppLocation.get_directory(AppLocation.AppDir),
u'core', u'ui', u'media') u'core', u'ui', u'media')
for filename in os.listdir(controller_dir): for filename in os.listdir(controller_dir):
if filename.endswith(u'player.py') and not \ # TODO vlc backend is not yet working on Mac OS X.
filename == 'media_player.py': # For now just ignore vlc backend on Mac OS X.
if sys.platform == 'darwin' and filename == 'vlcplayer.py':
log.warn(u'Disabling vlc media player')
continue
if filename.endswith(u'player.py'):
path = os.path.join(controller_dir, filename) path = os.path.join(controller_dir, filename)
if os.path.isfile(path): if os.path.isfile(path):
modulename = u'openlp.core.ui.media.' + \ modulename = u'openlp.core.ui.media.' + \
@ -114,7 +119,9 @@ class MediaController(object):
log.debug(u'Importing controller %s', modulename) log.debug(u'Importing controller %s', modulename)
try: try:
__import__(modulename, globals(), locals(), []) __import__(modulename, globals(), locals(), [])
except ImportError: # On some platforms importing vlc.py might cause
# also OSError exceptions. (e.g. Mac OS X)
except (ImportError, OSError):
log.warn(u'Failed to import %s on path %s', log.warn(u'Failed to import %s on path %s',
modulename, path) modulename, path)
controller_classes = MediaPlayer.__subclasses__() controller_classes = MediaPlayer.__subclasses__()

View File

@ -48,7 +48,48 @@ import sys
from inspect import getargspec from inspect import getargspec
__version__ = "N/A" __version__ = "N/A"
build_date = "Thu Jun 14 15:22:46 2012" build_date = "Mon Sep 10 16:51:25 2012"
if sys.version_info.major > 2:
str = str
unicode = str
bytes = bytes
basestring = (str, bytes)
PYTHON3 = True
def str_to_bytes(s):
"""Translate string or bytes to bytes.
"""
if isinstance(s, str):
return bytes(s, sys.getfilesystemencoding())
else:
return s
def bytes_to_str(b):
"""Translate bytes to string.
"""
if isinstance(b, bytes):
return b.decode(sys.getfilesystemencoding())
else:
return b
else:
str = str
unicode = unicode
bytes = str
basestring = basestring
PYTHON3 = False
def str_to_bytes(s):
"""Translate string or bytes to bytes.
"""
if isinstance(s, unicode):
return s.encode(sys.getfilesystemencoding())
else:
return s
def bytes_to_str(b):
"""Translate bytes to unicode string.
"""
if isinstance(b, str):
return unicode(b, sys.getfilesystemencoding())
# Internal guard to prevent internal classes to be directly # Internal guard to prevent internal classes to be directly
# instanciated. # instanciated.
@ -220,7 +261,7 @@ def string_result(result, func, arguments):
""" """
if result: if result:
# make a python string copy # make a python string copy
s = ctypes.string_at(result) s = bytes_to_str(ctypes.string_at(result))
# free original string ptr # free original string ptr
libvlc_free(result) libvlc_free(result)
return s return s
@ -241,16 +282,32 @@ class FILE(ctypes.Structure):
pass pass
FILE_ptr = ctypes.POINTER(FILE) FILE_ptr = ctypes.POINTER(FILE)
PyFile_FromFile = ctypes.pythonapi.PyFile_FromFile if PYTHON3:
PyFile_FromFile.restype = ctypes.py_object PyFile_FromFd = ctypes.pythonapi.PyFile_FromFd
PyFile_FromFile.argtypes = [FILE_ptr, PyFile_FromFd.restype = ctypes.py_object
ctypes.c_char_p, PyFile_FromFd.argtypes = [ctypes.c_int,
ctypes.c_char_p, ctypes.c_char_p,
ctypes.CFUNCTYPE(ctypes.c_int, FILE_ptr)] ctypes.c_char_p,
ctypes.c_int,
ctypes.c_char_p,
ctypes.c_char_p,
ctypes.c_char_p,
ctypes.c_int ]
PyFile_AsFile = ctypes.pythonapi.PyFile_AsFile PyFile_AsFd = ctypes.pythonapi.PyObject_AsFileDescriptor
PyFile_AsFile.restype = FILE_ptr PyFile_AsFd.restype = ctypes.c_int
PyFile_AsFile.argtypes = [ctypes.py_object] PyFile_AsFd.argtypes = [ctypes.py_object]
else:
PyFile_FromFile = ctypes.pythonapi.PyFile_FromFile
PyFile_FromFile.restype = ctypes.py_object
PyFile_FromFile.argtypes = [FILE_ptr,
ctypes.c_char_p,
ctypes.c_char_p,
ctypes.CFUNCTYPE(ctypes.c_int, FILE_ptr)]
PyFile_AsFile = ctypes.pythonapi.PyFile_AsFile
PyFile_AsFile.restype = FILE_ptr
PyFile_AsFile.argtypes = [ctypes.py_object]
# Generated enum types # # Generated enum types #
@ -1155,6 +1212,8 @@ class Instance(_Ctype):
# no parameters passed, for win32 and MacOS, # no parameters passed, for win32 and MacOS,
# specify the plugin_path if detected earlier # specify the plugin_path if detected earlier
args = ['vlc', '--plugin-path=' + plugin_path] args = ['vlc', '--plugin-path=' + plugin_path]
if PYTHON3:
args = [ str_to_bytes(a) for a in args ]
return libvlc_new(len(args), args) return libvlc_new(len(args), args)
def media_player_new(self, uri=None): def media_player_new(self, uri=None):
@ -1195,12 +1254,12 @@ class Instance(_Ctype):
""" """
if ':' in mrl and mrl.index(':') > 1: if ':' in mrl and mrl.index(':') > 1:
# Assume it is a URL # Assume it is a URL
m = libvlc_media_new_location(self, mrl) m = libvlc_media_new_location(self, str_to_bytes(mrl))
else: else:
# Else it should be a local path. # Else it should be a local path.
m = libvlc_media_new_path(self, mrl) m = libvlc_media_new_path(self, str_to_bytes(mrl))
for o in options: for o in options:
libvlc_media_add_option(m, o) libvlc_media_add_option(m, str_to_bytes(o))
m._instance = self m._instance = self
return m return m
@ -1664,6 +1723,9 @@ class LogIterator(_Ctype):
return i.contents return i.contents
raise StopIteration raise StopIteration
def __next__(self):
return self.next()
def free(self): def free(self):
'''Frees memory allocated by L{log_get_iterator}(). '''Frees memory allocated by L{log_get_iterator}().
@ -3125,18 +3187,6 @@ def libvlc_vprinterr(fmt, ap):
ctypes.c_char_p, ctypes.c_char_p, ctypes.c_void_p) ctypes.c_char_p, ctypes.c_char_p, ctypes.c_void_p)
return f(fmt, ap) return f(fmt, ap)
def libvlc_printerr(fmt, args):
'''Sets the LibVLC error status and message for the current thread.
Any previous error is overridden.
@param fmt: the format string.
@param args: the arguments.
@return: a nul terminated string in any case.
'''
f = _Cfunctions.get('libvlc_printerr', None) or \
_Cfunction('libvlc_printerr', ((1,), (1,),), None,
ctypes.c_char_p, ctypes.c_char_p, ctypes.c_void_p)
return f(fmt, args)
def libvlc_new(argc, argv): def libvlc_new(argc, argv):
'''Create and initialize a libvlc instance. '''Create and initialize a libvlc instance.
This functions accept a list of "command line" arguments similar to the This functions accept a list of "command line" arguments similar to the
@ -5828,11 +5878,12 @@ def libvlc_vlm_get_event_manager(p_instance):
return f(p_instance) return f(p_instance)
# 2 function(s) blacklisted: # 3 function(s) blacklisted:
# libvlc_printerr
# libvlc_set_exit_handler # libvlc_set_exit_handler
# libvlc_video_set_callbacks # libvlc_video_set_callbacks
# 18 function(s) not wrapped as methods: # 17 function(s) not wrapped as methods:
# libvlc_audio_output_list_release # libvlc_audio_output_list_release
# libvlc_clearerr # libvlc_clearerr
# libvlc_clock # libvlc_clock
@ -5847,7 +5898,6 @@ def libvlc_vlm_get_event_manager(p_instance):
# libvlc_log_unsubscribe # libvlc_log_unsubscribe
# libvlc_module_description_list_release # libvlc_module_description_list_release
# libvlc_new # libvlc_new
# libvlc_printerr
# libvlc_track_description_list_release # libvlc_track_description_list_release
# libvlc_track_description_release # libvlc_track_description_release
# libvlc_vprinterr # libvlc_vprinterr
@ -5908,7 +5958,7 @@ def libvlc_hex_version():
"""Return the libvlc version in hex or 0 if unavailable. """Return the libvlc version in hex or 0 if unavailable.
""" """
try: try:
return _dot2int(libvlc_get_version().split()[0]) return _dot2int(bytes_to_str(libvlc_get_version()).split()[0])
except ValueError: except ValueError:
return 0 return 0
@ -5957,8 +6007,8 @@ if __name__ == '__main__':
"""Print libvlc version""" """Print libvlc version"""
try: try:
print('Build date: %s (%#x)' % (build_date, hex_version())) print('Build date: %s (%#x)' % (build_date, hex_version()))
print('LibVLC version: %s (%#x)' % (libvlc_get_version(), libvlc_hex_version())) print('LibVLC version: %s (%#x)' % (bytes_to_str(libvlc_get_version()), libvlc_hex_version()))
print('LibVLC compiler: %s' % libvlc_get_compiler()) print('LibVLC compiler: %s' % bytes_to_str(libvlc_get_compiler()))
if plugin_path: if plugin_path:
print('Plugin path: %s' % plugin_path) print('Plugin path: %s' % plugin_path)
except: except:
@ -5997,7 +6047,7 @@ if __name__ == '__main__':
player.video_set_marquee_int(VideoMarqueeOption.Refresh, 1000) # millisec (or sec?) player.video_set_marquee_int(VideoMarqueeOption.Refresh, 1000) # millisec (or sec?)
##t = '$L / $D or $P at $T' ##t = '$L / $D or $P at $T'
t = '%Y-%m-%d %H:%M:%S' t = '%Y-%m-%d %H:%M:%S'
player.video_set_marquee_string(VideoMarqueeOption.Text, t) player.video_set_marquee_string(VideoMarqueeOption.Text, str_to_bytes(t))
# Some event manager examples. Note, the callback can be any Python # Some event manager examples. Note, the callback can be any Python
# callable and does not need to be decorated. Optionally, specify # callable and does not need to be decorated. Optionally, specify
@ -6017,7 +6067,7 @@ if __name__ == '__main__':
print_version() print_version()
media = player.get_media() media = player.get_media()
print('State: %s' % player.get_state()) print('State: %s' % player.get_state())
print('Media: %s' % media.get_mrl()) print('Media: %s' % bytes_to_str(media.get_mrl()))
print('Track: %s/%s' % (player.video_get_track(), player.video_get_track_count())) print('Track: %s/%s' % (player.video_get_track(), player.video_get_track_count()))
print('Current time: %s/%s' % (player.get_time(), media.get_duration())) print('Current time: %s/%s' % (player.get_time(), media.get_duration()))
print('Position: %s' % player.get_position()) print('Position: %s' % player.get_position())
@ -6078,7 +6128,7 @@ if __name__ == '__main__':
print('Press q to quit, ? to get help.%s' % os.linesep) print('Press q to quit, ? to get help.%s' % os.linesep)
while True: while True:
k = getch().decode('utf8') # Python 3+ k = getch()
print('> %s' % k) print('> %s' % k)
if k in keybindings: if k in keybindings:
keybindings[k]() keybindings[k]()

View File

@ -47,7 +47,8 @@ from openlp.core.lib.ui import UiStrings, critical_error_message_box, \
create_widget_action, find_and_set_in_combo_box create_widget_action, find_and_set_in_combo_box
from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm, StartTimeForm
from openlp.core.ui.printserviceform import PrintServiceForm from openlp.core.ui.printserviceform import PrintServiceForm
from openlp.core.utils import AppLocation, delete_file, split_filename from openlp.core.utils import AppLocation, delete_file, split_filename, \
format_time
from openlp.core.utils.actions import ActionList, CategoryOrder from openlp.core.utils.actions import ActionList, CategoryOrder
class ServiceManagerList(QtGui.QTreeWidget): class ServiceManagerList(QtGui.QTreeWidget):
@ -602,7 +603,7 @@ class ServiceManager(QtGui.QWidget):
service_day = Settings().value( service_day = Settings().value(
u'advanced/default service day', 7).toInt()[0] u'advanced/default service day', 7).toInt()[0]
if service_day == 7: if service_day == 7:
time = datetime.now() local_time = datetime.now()
else: else:
service_hour = Settings().value( service_hour = Settings().value(
u'advanced/default service hour', 11).toInt()[0] u'advanced/default service hour', 11).toInt()[0]
@ -613,7 +614,7 @@ class ServiceManager(QtGui.QWidget):
if day_delta < 0: if day_delta < 0:
day_delta += 7 day_delta += 7
time = now + timedelta(days=day_delta) time = now + timedelta(days=day_delta)
time = time.replace(hour=service_hour, minute=service_minute) local_time = time.replace(hour=service_hour, minute=service_minute)
default_pattern = unicode(Settings().value( default_pattern = unicode(Settings().value(
u'advanced/default service name', u'advanced/default service name',
translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M', translate('OpenLP.AdvancedTab', 'Service %Y-%m-%d %H-%M',
@ -621,7 +622,7 @@ class ServiceManager(QtGui.QWidget):
'/\\?*|<>\[\]":+\nSee http://docs.python.org/library/' '/\\?*|<>\[\]":+\nSee http://docs.python.org/library/'
'datetime.html#strftime-strptime-behavior for more ' 'datetime.html#strftime-strptime-behavior for more '
'information.')).toString()) 'information.')).toString())
default_filename = time.strftime(default_pattern) default_filename = format_time(default_pattern, local_time)
else: else:
default_filename = u'' default_filename = u''
directory = unicode(SettingsManager.get_last_dir( directory = unicode(SettingsManager.get_last_dir(

View File

@ -157,7 +157,8 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
u'outlineColorButton', self.outlineColorButton) u'outlineColorButton', self.outlineColorButton)
self.mainAreaPage.registerField( self.mainAreaPage.registerField(
u'outlineSizeSpinBox', self.outlineSizeSpinBox) u'outlineSizeSpinBox', self.outlineSizeSpinBox)
self.mainAreaPage.registerField(u'shadowCheckBox', self.shadowCheckBox) self.mainAreaPage.registerField(
u'shadowCheckBox', self.shadowCheckBox)
self.mainAreaPage.registerField( self.mainAreaPage.registerField(
u'mainBoldCheckBox', self.mainBoldCheckBox) u'mainBoldCheckBox', self.mainBoldCheckBox)
self.mainAreaPage.registerField( self.mainAreaPage.registerField(
@ -168,8 +169,10 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
u'shadowSizeSpinBox', self.shadowSizeSpinBox) u'shadowSizeSpinBox', self.shadowSizeSpinBox)
self.mainAreaPage.registerField( self.mainAreaPage.registerField(
u'footerSizeSpinBox', self.footerSizeSpinBox) u'footerSizeSpinBox', self.footerSizeSpinBox)
self.areaPositionPage.registerField(u'mainPositionX', self.mainXSpinBox) self.areaPositionPage.registerField(
self.areaPositionPage.registerField(u'mainPositionY', self.mainYSpinBox) u'mainPositionX', self.mainXSpinBox)
self.areaPositionPage.registerField(
u'mainPositionY', self.mainYSpinBox)
self.areaPositionPage.registerField( self.areaPositionPage.registerField(
u'mainPositionWidth', self.mainWidthSpinBox) u'mainPositionWidth', self.mainWidthSpinBox)
self.areaPositionPage.registerField( self.areaPositionPage.registerField(
@ -202,7 +205,8 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
""" """
Updates the lines on a page on the wizard Updates the lines on a page on the wizard
""" """
self.mainLineCountLabel.setText(unicode(translate('OpenLP.ThemeForm', self.mainLineCountLabel.setText(unicode(translate(
'OpenLP.ThemeWizard',
'(approximately %d lines per slide)')) % int(lines)) '(approximately %d lines per slide)')) % int(lines))
def resizeEvent(self, event=None): def resizeEvent(self, event=None):
@ -224,6 +228,19 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
self.previewBoxLabel.setFixedSize(pixmapWidth + 2 * frameWidth, self.previewBoxLabel.setFixedSize(pixmapWidth + 2 * frameWidth,
pixmapHeight + 2 * frameWidth) pixmapHeight + 2 * frameWidth)
def validateCurrentPage(self):
background_image = BackgroundType.to_string(BackgroundType.Image)
if self.page(self.currentId()) == self.backgroundPage and \
self.theme.background_type == background_image and \
self.imageFileEdit.text().isEmpty():
QtGui.QMessageBox.critical(self,
translate('OpenLP.ThemeWizard', 'Background Image Empty'),
translate('OpenLP.ThemeWizard', 'You have not selected a '
'background image. Please select one before continuing.'))
return False
else:
return True
def onCurrentIdChanged(self, pageId): def onCurrentIdChanged(self, pageId):
""" """
Detects Page changes and updates as appropriate. Detects Page changes and updates as appropriate.
@ -521,7 +538,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
images_filter = u'%s;;%s (*.*) (*)' % ( images_filter = u'%s;;%s (*.*) (*)' % (
images_filter, UiStrings().AllFiles) images_filter, UiStrings().AllFiles)
filename = QtGui.QFileDialog.getOpenFileName(self, filename = QtGui.QFileDialog.getOpenFileName(self,
translate('OpenLP.ThemeForm', 'Select Image'), u'', translate('OpenLP.ThemeWizard', 'Select Image'), u'',
images_filter) images_filter)
if filename: if filename:
self.theme.background_filename = unicode(filename) self.theme.background_filename = unicode(filename)
@ -603,14 +620,14 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
self.theme.theme_name = unicode(self.field(u'name').toString()) self.theme.theme_name = unicode(self.field(u'name').toString())
if not self.theme.theme_name: if not self.theme.theme_name:
critical_error_message_box( critical_error_message_box(
translate('OpenLP.ThemeForm', 'Theme Name Missing'), translate('OpenLP.ThemeWizard', 'Theme Name Missing'),
translate('OpenLP.ThemeForm', translate('OpenLP.ThemeWizard',
'There is no name for this theme. Please enter one.')) 'There is no name for this theme. Please enter one.'))
return return
if self.theme.theme_name == u'-1' or self.theme.theme_name == u'None': if self.theme.theme_name == u'-1' or self.theme.theme_name == u'None':
critical_error_message_box( critical_error_message_box(
translate('OpenLP.ThemeForm', 'Theme Name Invalid'), translate('OpenLP.ThemeWizard', 'Theme Name Invalid'),
translate('OpenLP.ThemeForm', translate('OpenLP.ThemeWizard',
'Invalid theme name. Please enter one.')) 'Invalid theme name. Please enter one.'))
return return
saveFrom = None saveFrom = None

View File

@ -257,6 +257,7 @@ class ThemeManager(QtGui.QWidget):
theme.set_default_header_footer() theme.set_default_header_footer()
self.themeForm.theme = theme self.themeForm.theme = theme
self.themeForm.exec_() self.themeForm.exec_()
self.loadThemes()
def onRenameTheme(self): def onRenameTheme(self):
""" """
@ -283,7 +284,6 @@ class ThemeManager(QtGui.QWidget):
plugin.renameTheme(old_theme_name, new_theme_name) plugin.renameTheme(old_theme_name, new_theme_name)
self.mainwindow.renderer.update_theme( self.mainwindow.renderer.update_theme(
new_theme_name, old_theme_name) new_theme_name, old_theme_name)
self.loadThemes()
def onCopyTheme(self): def onCopyTheme(self):
""" """

View File

@ -136,7 +136,7 @@ class AppLocation(object):
else: else:
path = AppLocation.get_directory(AppLocation.DataDir) path = AppLocation.get_directory(AppLocation.DataDir)
check_directory_exists(path) check_directory_exists(path)
return path return os.path.normpath(path)
@staticmethod @staticmethod
def get_section_data_path(section): def get_section_data_path(section):
@ -469,10 +469,29 @@ def get_uno_instance(resolver):
return resolver.resolve(u'uno:socket,host=localhost,port=2002;' \ return resolver.resolve(u'uno:socket,host=localhost,port=2002;' \
+ u'urp;StarOffice.ComponentContext') + u'urp;StarOffice.ComponentContext')
def format_time(text, local_time):
"""
Workaround for Python built-in time formatting fuction time.strftime().
time.strftime() accepts only ascii characters. This function accepts
unicode string and passes individual % placeholders to time.strftime().
This ensures only ascii characters are passed to time.strftime().
``text``
The text to be processed.
``local_time``
The time to be used to add to the string. This is a time object
"""
def match_formatting(match):
return local_time.strftime(match.group())
return re.sub('\%[a-zA-Z]', match_formatting, text)
from languagemanager import LanguageManager from languagemanager import LanguageManager
from actions import ActionList from actions import ActionList
__all__ = [u'AppLocation', u'get_application_version', u'check_latest_version', __all__ = [u'AppLocation', u'get_application_version', u'check_latest_version',
u'add_actions', u'get_filesystem_encoding', u'LanguageManager', u'add_actions', u'get_filesystem_encoding', u'LanguageManager',
u'ActionList', u'get_web_page', u'get_uno_command', u'get_uno_instance', u'ActionList', u'get_web_page', u'get_uno_command', u'get_uno_instance',
u'delete_file', u'clean_filename'] u'delete_file', u'clean_filename', u'format_time']

View File

@ -124,6 +124,8 @@ class BGExtract(object):
self._remove_elements(tag, 'div', 'footnotes') self._remove_elements(tag, 'div', 'footnotes')
self._remove_elements(tag, 'div', 'crossrefs') self._remove_elements(tag, 'div', 'crossrefs')
self._remove_elements(tag, 'h3') self._remove_elements(tag, 'h3')
self._remove_elements(tag, 'h4')
self._remove_elements(tag, 'h5')
def _extract_verses(self, tags): def _extract_verses(self, tags):
""" """
@ -155,12 +157,59 @@ class BGExtract(object):
text = text.replace(old, new) text = text.replace(old, new)
text = u' '.join(text.split()) text = u' '.join(text.split())
if verse and text: if verse and text:
verses.append((int(verse.strip()), text)) verse = verse.strip()
try:
verse = int(verse)
except (TypeError, ValueError):
verse_parts = verse.split(u'-')
if len(verse_parts) > 1:
verse = int(verse_parts[0])
verses.append((verse, text))
verse_list = {} verse_list = {}
for verse, text in verses[::-1]: for verse, text in verses[::-1]:
verse_list[verse] = text verse_list[verse] = text
return verse_list return verse_list
def _extract_verses_old(self, div):
"""
Use the old style of parsing for those Bibles on BG who mysteriously
have not been migrated to the new (still broken) HTML.
``div``
The parent div.
"""
verse_list = {}
# Cater for inconsistent mark up in the first verse of a chapter.
first_verse = div.find(u'versenum')
if first_verse and first_verse.contents:
verse_list[1] = unicode(first_verse.contents[0])
for verse in div(u'sup', u'versenum'):
raw_verse_num = verse.next
clean_verse_num = 0
# Not all verses exist in all translations and may or may not be
# represented by a verse number. If they are not fine, if they are
# it will probably be in a format that breaks int(). We will then
# have no idea what garbage may be sucked in to the verse text so
# if we do not get a clean int() then ignore the verse completely.
try:
clean_verse_num = int(str(raw_verse_num))
except ValueError:
log.warn(u'Illegal verse number: %s', unicode(raw_verse_num))
if clean_verse_num:
verse_text = raw_verse_num.next
part = raw_verse_num.next.next
while not (isinstance(part, Tag) and
part.get(u'class') == u'versenum'):
# While we are still in the same verse grab all the text.
if isinstance(part, NavigableString):
verse_text += part
if isinstance(part.next, Tag) and part.next.name == u'div':
# Run out of verses so stop.
break
part = part.next
verse_list[clean_verse_num] = unicode(verse_text)
return verse_list
def get_bible_chapter(self, version, book_name, chapter): def get_bible_chapter(self, version, book_name, chapter):
""" """
Access and decode Bibles via the BibleGateway website. Access and decode Bibles via the BibleGateway website.
@ -189,7 +238,13 @@ class BGExtract(object):
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
div = soup.find('div', 'result-text-style-normal') div = soup.find('div', 'result-text-style-normal')
self._clean_soup(div) self._clean_soup(div)
verse_list = self._extract_verses(div.findAll('span', 'text')) span_list = div.findAll('span', 'text')
log.debug('Span list: %s', span_list)
if not span_list:
# If we don't get any spans then we must have the old HTML format
verse_list = self._extract_verses_old(div)
else:
verse_list = self._extract_verses(span_list)
if not verse_list: if not verse_list:
log.debug(u'No content found in the BibleGateway response.') log.debug(u'No content found in the BibleGateway response.')
send_error_message(u'parse') send_error_message(u'parse')

View File

@ -1368,7 +1368,9 @@ vraag afgelaai word en dus is &apos;n internet konneksie nodig.</translation>
<source>Are you sure you want to completely delete &quot;%s&quot; Bible from OpenLP? <source>Are you sure you want to completely delete &quot;%s&quot; Bible from OpenLP?
You will need to re-import this Bible to use it again.</source> You will need to re-import this Bible to use it again.</source>
<translation type="unfinished"/> <translation>Wis Bybel &quot;%s&quot; geheel en al vanaf OpenLP?
Hierdie Bybel sal weer ingevoer moet word voordat dit gebruik geneem kan word.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1376,7 +1378,7 @@ You will need to re-import this Bible to use it again.</source>
<message> <message>
<location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/> <location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/>
<source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source> <source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source>
<translation type="unfinished"/> <translation>Ongeldige Bybel lêer</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1700,7 +1702,7 @@ word en dus is &apos;n Internet verbinding nodig.</translation>
<message> <message>
<location filename="openlp/plugins/custom/forms/editcustomslidedialog.py" line="52"/> <location filename="openlp/plugins/custom/forms/editcustomslidedialog.py" line="52"/>
<source>Edit Slide</source> <source>Edit Slide</source>
<translation type="unfinished"/> <translation>Redigeer Skyfie</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5042,12 +5044,12 @@ Die inhoud enkodering is nie UTF-8 nie.</translation>
<message> <message>
<location filename="openlp/core/ui/themewizard.py" line="554"/> <location filename="openlp/core/ui/themewizard.py" line="554"/>
<source>Preview and Save</source> <source>Preview and Save</source>
<translation type="unfinished"/> <translation>Skou en Stoor</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/themewizard.py" line="556"/> <location filename="openlp/core/ui/themewizard.py" line="556"/>
<source>Preview the theme and save it.</source> <source>Preview the theme and save it.</source>
<translation type="unfinished"/> <translation>Skou die tema en stoor dit.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -6901,37 +6903,37 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling.</tran
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="321"/> <location filename="openlp/plugins/songs/lib/importer.py" line="321"/>
<source>SundayPlus Song Files</source> <source>SundayPlus Song Files</source>
<translation type="unfinished"/> <translation>SundayPlus Lied Leêrs</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="172"/> <location filename="openlp/plugins/songs/lib/importer.py" line="172"/>
<source>This importer has been disabled.</source> <source>This importer has been disabled.</source>
<translation type="unfinished"/> <translation>Hierdie invoerder is onaktief gestel.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="260"/> <location filename="openlp/plugins/songs/lib/importer.py" line="260"/>
<source>MediaShout Database</source> <source>MediaShout Database</source>
<translation type="unfinished"/> <translation>MediaShout Databasis</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="262"/> <location filename="openlp/plugins/songs/lib/importer.py" line="262"/>
<source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source> <source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source>
<translation type="unfinished"/> <translation>Die MediaShout invoerder word slegs ondersteun op Windows. Dit is vanweë &apos;n vermiste Python module, gedeaktiveer. As jy hierdie invoerder wil gebruik, sal jy die &quot;pyodbc&quot; module moet installeer.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="293"/> <location filename="openlp/plugins/songs/lib/importer.py" line="293"/>
<source>SongPro Text Files</source> <source>SongPro Text Files</source>
<translation type="unfinished"/> <translation>SongPro Teks Leêrs</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="295"/> <location filename="openlp/plugins/songs/lib/importer.py" line="295"/>
<source>SongPro (Export File)</source> <source>SongPro (Export File)</source>
<translation type="unfinished"/> <translation>SongPro (Voer Leêr uit)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="297"/> <location filename="openlp/plugins/songs/lib/importer.py" line="297"/>
<source>In SongPro, export your songs using the File -&gt; Export menu</source> <source>In SongPro, export your songs using the File -&gt; Export menu</source>
<translation type="unfinished"/> <translation>In SongPro, voer liedere uit deur middel van die Leêr -&gt; Uitvoer spyskaart</translation>
</message> </message>
</context> </context>
<context> <context>
@ -7016,7 +7018,7 @@ Die enkodering is verantwoordelik vir die korrekte karrakter voorstelling.</tran
<message> <message>
<location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/> <location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/>
<source>Unable to open the MediaShout database.</source> <source>Unable to open the MediaShout database.</source>
<translation type="unfinished"/> <translation>Die MediaShout databasis kan nie oopgemaak word nie.</translation>
</message> </message>
</context> </context>
<context> <context>

File diff suppressed because it is too large Load Diff

View File

@ -1370,7 +1370,8 @@ werden. Daher ist eine Internetverbindung erforderlich.</translation>
<source>Are you sure you want to completely delete &quot;%s&quot; Bible from OpenLP? <source>Are you sure you want to completely delete &quot;%s&quot; Bible from OpenLP?
You will need to re-import this Bible to use it again.</source> You will need to re-import this Bible to use it again.</source>
<translation type="unfinished"/> <translation>Sind Sie sicher, das Sie die &quot;%s&quot; Bibel komplett löschen wollen?
Um sie wieder zu benutzen, muss sie erneut importier werden.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1378,7 +1379,7 @@ You will need to re-import this Bible to use it again.</source>
<message> <message>
<location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/> <location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/>
<source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source> <source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source>
<translation type="unfinished"/> <translation>Falscher Dateityp. OpenSong Bibeln sind möglicherweise komprimiert und müssen entpackt werden, bevor sie importiert werden.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1701,7 +1702,7 @@ Bitte beachten Sie, dass Bibeltexte von Onlinebibeln bei Bedarf heruntergeladen
<message> <message>
<location filename="openlp/plugins/custom/forms/editcustomslidedialog.py" line="52"/> <location filename="openlp/plugins/custom/forms/editcustomslidedialog.py" line="52"/>
<source>Edit Slide</source> <source>Edit Slide</source>
<translation type="unfinished"/> <translation>Folie bearbeiten</translation>
</message> </message>
</context> </context>
<context> <context>
@ -5050,12 +5051,12 @@ Der Inhalt ist nicht in UTF-8 kodiert.</translation>
<message> <message>
<location filename="openlp/core/ui/themewizard.py" line="554"/> <location filename="openlp/core/ui/themewizard.py" line="554"/>
<source>Preview and Save</source> <source>Preview and Save</source>
<translation type="unfinished"/> <translation>Vorschau und Speichern</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/themewizard.py" line="556"/> <location filename="openlp/core/ui/themewizard.py" line="556"/>
<source>Preview the theme and save it.</source> <source>Preview the theme and save it.</source>
<translation type="unfinished"/> <translation>Vorschau des Designs zeigen und speichern.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -6909,37 +6910,37 @@ Easy Worship]</translation>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="321"/> <location filename="openlp/plugins/songs/lib/importer.py" line="321"/>
<source>SundayPlus Song Files</source> <source>SundayPlus Song Files</source>
<translation type="unfinished"/> <translation>SundayPlus Lied Dateien</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="172"/> <location filename="openlp/plugins/songs/lib/importer.py" line="172"/>
<source>This importer has been disabled.</source> <source>This importer has been disabled.</source>
<translation type="unfinished"/> <translation>Dieser Import Typ wurde deaktiviert.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="260"/> <location filename="openlp/plugins/songs/lib/importer.py" line="260"/>
<source>MediaShout Database</source> <source>MediaShout Database</source>
<translation type="unfinished"/> <translation>Media Shout Datenbestand</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="262"/> <location filename="openlp/plugins/songs/lib/importer.py" line="262"/>
<source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source> <source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source>
<translation type="unfinished"/> <translation>Der Import von MediaShout Datensätzen wird nur unter Windows unterstützt. Er wurde aufgrund fehlender Python Module deaktiviert. Wenn Sie diese Dateien importieren wollen, müssen sie das &quot;pyodbc&quot; Modul installieren.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="293"/> <location filename="openlp/plugins/songs/lib/importer.py" line="293"/>
<source>SongPro Text Files</source> <source>SongPro Text Files</source>
<translation type="unfinished"/> <translation>SongPro Text Dateien</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="295"/> <location filename="openlp/plugins/songs/lib/importer.py" line="295"/>
<source>SongPro (Export File)</source> <source>SongPro (Export File)</source>
<translation type="unfinished"/> <translation>SongPro (Export Datei)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="297"/> <location filename="openlp/plugins/songs/lib/importer.py" line="297"/>
<source>In SongPro, export your songs using the File -&gt; Export menu</source> <source>In SongPro, export your songs using the File -&gt; Export menu</source>
<translation type="unfinished"/> <translation>Um in SongPro Dateien zu exportieren, nutzen Sie dort das Menü &quot;Datei -&gt; Export&quot;</translation>
</message> </message>
</context> </context>
<context> <context>
@ -7024,7 +7025,7 @@ Easy Worship]</translation>
<message> <message>
<location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/> <location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/>
<source>Unable to open the MediaShout database.</source> <source>Unable to open the MediaShout database.</source>
<translation type="unfinished"/> <translation>Der MediaShout Datensatz kann nicht geöffnet werden.</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -1377,7 +1377,7 @@ Deberá reimportar esta Biblia para utilizarla de nuevo.</translation>
<message> <message>
<location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/> <location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/>
<source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source> <source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source>
<translation type="unfinished"/> <translation>Tipo de archivo incorrecto. Las Biblias OpenSong pueden estar comprimidas y es necesario extraerlas antes de la importación.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -6913,27 +6913,27 @@ La codificación se encarga de la correcta representación de caracteres.</trans
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="260"/> <location filename="openlp/plugins/songs/lib/importer.py" line="260"/>
<source>MediaShout Database</source> <source>MediaShout Database</source>
<translation type="unfinished"/> <translation>Base de datos MediaShout</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="262"/> <location filename="openlp/plugins/songs/lib/importer.py" line="262"/>
<source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source> <source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source>
<translation type="unfinished"/> <translation>El importador MediaShout se puede usar en windows únicamente. Se ha deshabilitado porque falta un módulo Python. Debe instalar el módulo &quot;pyodbc&quot; para usar este importador.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="293"/> <location filename="openlp/plugins/songs/lib/importer.py" line="293"/>
<source>SongPro Text Files</source> <source>SongPro Text Files</source>
<translation type="unfinished"/> <translation>Archivos de texto SongPro</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="295"/> <location filename="openlp/plugins/songs/lib/importer.py" line="295"/>
<source>SongPro (Export File)</source> <source>SongPro (Export File)</source>
<translation type="unfinished"/> <translation>SongPro (Archivo Exportado)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="297"/> <location filename="openlp/plugins/songs/lib/importer.py" line="297"/>
<source>In SongPro, export your songs using the File -&gt; Export menu</source> <source>In SongPro, export your songs using the File -&gt; Export menu</source>
<translation type="unfinished"/> <translation>En SongPro, puede exportar canciones en el menú Archivo -&gt; Exportar</translation>
</message> </message>
</context> </context>
<context> <context>
@ -7018,7 +7018,7 @@ La codificación se encarga de la correcta representación de caracteres.</trans
<message> <message>
<location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/> <location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/>
<source>Unable to open the MediaShout database.</source> <source>Unable to open the MediaShout database.</source>
<translation type="unfinished"/> <translation>No se logró abrir la base de datos MediaShout</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -32,7 +32,7 @@
<message> <message>
<location filename="openlp/plugins/alerts/alertsplugin.py" line="173"/> <location filename="openlp/plugins/alerts/alertsplugin.py" line="173"/>
<source>&lt;strong&gt;Alerts Plugin&lt;/strong&gt;&lt;br /&gt;The alert plugin controls the displaying of nursery alerts on the display screen.</source> <source>&lt;strong&gt;Alerts Plugin&lt;/strong&gt;&lt;br /&gt;The alert plugin controls the displaying of nursery alerts on the display screen.</source>
<translation>&lt;strong&gt;Hälytykset liitännäinen&lt;/strong&gt;&lt;br /&gt;Hälytykset liitännäinen huolehtii lastenhoidon viestien näyttämisestä esityksen aikana.</translation> <translation>&lt;strong&gt;Hälytykset lisäosa&lt;/strong&gt;&lt;br /&gt;Hälytykset lisäosa huolehtii lastenhoidon viestien näyttämisestä esityksen aikana.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -112,7 +112,7 @@ Tahdotko jatkaa siitä huolimatta?</translation>
<message> <message>
<location filename="openlp/plugins/alerts/lib/alertsmanager.py" line="73"/> <location filename="openlp/plugins/alerts/lib/alertsmanager.py" line="73"/>
<source>Alert message created and displayed.</source> <source>Alert message created and displayed.</source>
<translation>Hälytysviesti on luota ja näytetty.</translation> <translation>Hälytysviesti on luotu ja näytetty.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -216,12 +216,12 @@ Tahdotko jatkaa siitä huolimatta?</translation>
<message> <message>
<location filename="openlp/plugins/bibles/bibleplugin.py" line="199"/> <location filename="openlp/plugins/bibles/bibleplugin.py" line="199"/>
<source>Add the selected Bible to the service.</source> <source>Add the selected Bible to the service.</source>
<translation>Lisää valittu Raamatun teksti tilaisuuden ajolistalle.</translation> <translation>Lisää valittu Raamatun teksti ajolistalle.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/bibles/bibleplugin.py" line="148"/> <location filename="openlp/plugins/bibles/bibleplugin.py" line="148"/>
<source>&lt;strong&gt;Bible Plugin&lt;/strong&gt;&lt;br /&gt;The Bible plugin provides the ability to display Bible verses from different sources during the service.</source> <source>&lt;strong&gt;Bible Plugin&lt;/strong&gt;&lt;br /&gt;The Bible plugin provides the ability to display Bible verses from different sources during the service.</source>
<translation>&lt;strong&gt;Raamattu-liitännäinen&lt;/strong&gt;&lt;br /&gt;Raamattu-liitännäisellä voi näyttää Raamatun jakeita suoraan Raamatusta tilaisuuden aikana.</translation> <translation>&lt;strong&gt;Raamattu-lisäosa&lt;/strong&gt;&lt;br /&gt;Raamattu-lisäosalla voi näyttää Raamatun jakeita suoraan Raamatusta tilaisuuden aikana.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/bibles/bibleplugin.py" line="125"/> <location filename="openlp/plugins/bibles/bibleplugin.py" line="125"/>
@ -1590,12 +1590,12 @@ Ole hyvä ja huomaa, että jakeet nettiraamatuista ladataan käytettäessä, jot
<message> <message>
<location filename="openlp/plugins/custom/customplugin.py" line="120"/> <location filename="openlp/plugins/custom/customplugin.py" line="120"/>
<source>Send the selected custom slide live.</source> <source>Send the selected custom slide live.</source>
<translation type="unfinished"/> <translation>Lähetä valittu mukautettu dia esitykseen.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/custom/customplugin.py" line="122"/> <location filename="openlp/plugins/custom/customplugin.py" line="122"/>
<source>Add the selected custom slide to the service.</source> <source>Add the selected custom slide to the service.</source>
<translation type="unfinished"/> <translation>Lisää valittu mukautettu dia ajolistalle.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1603,12 +1603,12 @@ Ole hyvä ja huomaa, että jakeet nettiraamatuista ladataan käytettäessä, jot
<message> <message>
<location filename="openlp/plugins/custom/lib/customtab.py" line="59"/> <location filename="openlp/plugins/custom/lib/customtab.py" line="59"/>
<source>Custom Display</source> <source>Custom Display</source>
<translation type="unfinished"/> <translation>Mukautettu näyttö</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/custom/lib/customtab.py" line="61"/> <location filename="openlp/plugins/custom/lib/customtab.py" line="61"/>
<source>Display footer</source> <source>Display footer</source>
<translation type="unfinished"/> <translation>Näytä lopputunniste</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1616,7 +1616,7 @@ Ole hyvä ja huomaa, että jakeet nettiraamatuista ladataan käytettäessä, jot
<message> <message>
<location filename="openlp/plugins/custom/forms/editcustomdialog.py" line="107"/> <location filename="openlp/plugins/custom/forms/editcustomdialog.py" line="107"/>
<source>Edit Custom Slides</source> <source>Edit Custom Slides</source>
<translation type="unfinished"/> <translation>Muokkaa mukautettuja dioja</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/custom/forms/editcustomdialog.py" line="109"/> <location filename="openlp/plugins/custom/forms/editcustomdialog.py" line="109"/>
@ -1695,60 +1695,60 @@ Ole hyvä ja huomaa, että jakeet nettiraamatuista ladataan käytettäessä, jot
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="53"/> <location filename="openlp/plugins/images/imageplugin.py" line="53"/>
<source>&lt;strong&gt;Image Plugin&lt;/strong&gt;&lt;br /&gt;The image plugin provides displaying of images.&lt;br /&gt;One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP&apos;s &quot;timed looping&quot; feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme&apos;s background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme.</source> <source>&lt;strong&gt;Image Plugin&lt;/strong&gt;&lt;br /&gt;The image plugin provides displaying of images.&lt;br /&gt;One of the distinguishing features of this plugin is the ability to group a number of images together in the service manager, making the displaying of multiple images easier. This plugin can also make use of OpenLP&apos;s &quot;timed looping&quot; feature to create a slide show that runs automatically. In addition to this, images from the plugin can be used to override the current theme&apos;s background, which renders text-based items like songs with the selected image as a background instead of the background provided by the theme.</source>
<translation type="unfinished"/> <translation>&lt;strong&gt;Kuvankatselu lisäosa&lt;/strong&gt;&lt;br /&gt;Kuvankatselu toteuttaa helpon kuvien näyttämisen.&lt;br /&gt;Lisäosa mahdollistaa kokonaisen kuvajoukon näyttämisen yhdessä ajolistalla, mikä tekee useiden kuvien näyttämisestä hallitumpaa. Kuvia voi myös ajaa slideshowna OpenLP:n ajastusta hyödyntäen. Lisäksi kuvia voi käyttää jumalanpalvelukselle valitun taustakuvan sijaan, mikä mahdollistaa kuvien käyttämisen taustakuvana teksteille teeman sijaan.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="72"/> <location filename="openlp/plugins/images/imageplugin.py" line="72"/>
<source>Image</source> <source>Image</source>
<comment>name singular</comment> <comment>name singular</comment>
<translation type="unfinished"/> <translation>Kuva</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="73"/> <location filename="openlp/plugins/images/imageplugin.py" line="73"/>
<source>Images</source> <source>Images</source>
<comment>name plural</comment> <comment>name plural</comment>
<translation type="unfinished"/> <translation>Kuvat</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="77"/> <location filename="openlp/plugins/images/imageplugin.py" line="77"/>
<source>Images</source> <source>Images</source>
<comment>container title</comment> <comment>container title</comment>
<translation type="unfinished"/> <translation>Kuvat</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="81"/> <location filename="openlp/plugins/images/imageplugin.py" line="81"/>
<source>Load a new image.</source> <source>Load a new image.</source>
<translation type="unfinished"/> <translation>Lataa uusi kuva.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="83"/> <location filename="openlp/plugins/images/imageplugin.py" line="83"/>
<source>Add a new image.</source> <source>Add a new image.</source>
<translation type="unfinished"/> <translation>Lisää uusi kuva.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="84"/> <location filename="openlp/plugins/images/imageplugin.py" line="84"/>
<source>Edit the selected image.</source> <source>Edit the selected image.</source>
<translation type="unfinished"/> <translation>Muokkaa valittua kuvaa.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="85"/> <location filename="openlp/plugins/images/imageplugin.py" line="85"/>
<source>Delete the selected image.</source> <source>Delete the selected image.</source>
<translation type="unfinished"/> <translation>Poista valittu kuva.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="86"/> <location filename="openlp/plugins/images/imageplugin.py" line="86"/>
<source>Preview the selected image.</source> <source>Preview the selected image.</source>
<translation type="unfinished"/> <translation>Esikatsele valittua kuvaa.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="87"/> <location filename="openlp/plugins/images/imageplugin.py" line="87"/>
<source>Send the selected image live.</source> <source>Send the selected image live.</source>
<translation type="unfinished"/> <translation>Lähetä valittu kuva esitykseen.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/imageplugin.py" line="88"/> <location filename="openlp/plugins/images/imageplugin.py" line="88"/>
<source>Add the selected image to the service.</source> <source>Add the selected image to the service.</source>
<translation type="unfinished"/> <translation>Lisää valittu kuva ajolistalle.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1756,7 +1756,7 @@ Ole hyvä ja huomaa, että jakeet nettiraamatuista ladataan käytettäessä, jot
<message> <message>
<location filename="openlp/core/ui/exceptionform.py" line="217"/> <location filename="openlp/core/ui/exceptionform.py" line="217"/>
<source>Select Attachment</source> <source>Select Attachment</source>
<translation type="unfinished"/> <translation>Valitse liite</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1764,43 +1764,44 @@ Ole hyvä ja huomaa, että jakeet nettiraamatuista ladataan käytettäessä, jot
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="61"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="61"/>
<source>Select Image(s)</source> <source>Select Image(s)</source>
<translation type="unfinished"/> <translation>Valitse kuva(t)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="106"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="106"/>
<source>You must select an image to delete.</source> <source>You must select an image to delete.</source>
<translation type="unfinished"/> <translation>Sinun pitää valita kuva, jonka poistat.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="222"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="222"/>
<source>You must select an image to replace the background with.</source> <source>You must select an image to replace the background with.</source>
<translation type="unfinished"/> <translation>Sinun pitää valita kuva, jolla korvaa taustan.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="190"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="190"/>
<source>Missing Image(s)</source> <source>Missing Image(s)</source>
<translation type="unfinished"/> <translation>Puuttuvat kuva(t)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="183"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="183"/>
<source>The following image(s) no longer exist: %s</source> <source>The following image(s) no longer exist: %s</source>
<translation type="unfinished"/> <translation>Seuraavaa kuvaa (kuvia) ei enää ole olemassa: %s</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="190"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="190"/>
<source>The following image(s) no longer exist: %s <source>The following image(s) no longer exist: %s
Do you want to add the other images anyway?</source> Do you want to add the other images anyway?</source>
<translation type="unfinished"/> <translation>Seuraavaa kuvaa (kuvia) ei ole enää olemassa: %s
Haluatko lisätä toisia kuvia siitä huolimatta?</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="240"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="240"/>
<source>There was a problem replacing your background, the image file &quot;%s&quot; no longer exists.</source> <source>There was a problem replacing your background, the image file &quot;%s&quot; no longer exists.</source>
<translation type="unfinished"/> <translation>Taustakuvan korvaaminen ei onnistunut. Kuvatiedosto &quot;%s&quot; ei ole enää olemassa.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/mediaitem.py" line="236"/> <location filename="openlp/plugins/images/lib/mediaitem.py" line="236"/>
<source>There was no display item to amend.</source> <source>There was no display item to amend.</source>
<translation type="unfinished"/> <translation>Muutettavaa näyttöotsaketta ei ole.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1808,12 +1809,12 @@ Do you want to add the other images anyway?</source>
<message> <message>
<location filename="openlp/plugins/images/lib/imagetab.py" line="70"/> <location filename="openlp/plugins/images/lib/imagetab.py" line="70"/>
<source>Background Color</source> <source>Background Color</source>
<translation type="unfinished"/> <translation>Taustaväri</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/imagetab.py" line="72"/> <location filename="openlp/plugins/images/lib/imagetab.py" line="72"/>
<source>Default Color:</source> <source>Default Color:</source>
<translation type="unfinished"/> <translation>Oletusväri:</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/images/lib/imagetab.py" line="74"/> <location filename="openlp/plugins/images/lib/imagetab.py" line="74"/>
@ -1826,60 +1827,60 @@ Do you want to add the other images anyway?</source>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="68"/> <location filename="openlp/plugins/media/mediaplugin.py" line="68"/>
<source>&lt;strong&gt;Media Plugin&lt;/strong&gt;&lt;br /&gt;The media plugin provides playback of audio and video.</source> <source>&lt;strong&gt;Media Plugin&lt;/strong&gt;&lt;br /&gt;The media plugin provides playback of audio and video.</source>
<translation type="unfinished"/> <translation>&lt;strong&gt;Media-lisäosa&lt;/strong&gt;&lt;br /&gt; Media-lisäosa mahdollistaa audio ja video lähteiden toistamisen.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="78"/> <location filename="openlp/plugins/media/mediaplugin.py" line="78"/>
<source>Media</source> <source>Media</source>
<comment>name singular</comment> <comment>name singular</comment>
<translation type="unfinished"/> <translation>Media</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="79"/> <location filename="openlp/plugins/media/mediaplugin.py" line="79"/>
<source>Media</source> <source>Media</source>
<comment>name plural</comment> <comment>name plural</comment>
<translation type="unfinished"/> <translation>Media</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="83"/> <location filename="openlp/plugins/media/mediaplugin.py" line="83"/>
<source>Media</source> <source>Media</source>
<comment>container title</comment> <comment>container title</comment>
<translation type="unfinished"/> <translation>Media</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="87"/> <location filename="openlp/plugins/media/mediaplugin.py" line="87"/>
<source>Load new media.</source> <source>Load new media.</source>
<translation type="unfinished"/> <translation>Lataa uusi media.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="89"/> <location filename="openlp/plugins/media/mediaplugin.py" line="89"/>
<source>Add new media.</source> <source>Add new media.</source>
<translation type="unfinished"/> <translation>Lisää uusi media.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="90"/> <location filename="openlp/plugins/media/mediaplugin.py" line="90"/>
<source>Edit the selected media.</source> <source>Edit the selected media.</source>
<translation type="unfinished"/> <translation>Muokkaa valittua mediaa.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="91"/> <location filename="openlp/plugins/media/mediaplugin.py" line="91"/>
<source>Delete the selected media.</source> <source>Delete the selected media.</source>
<translation type="unfinished"/> <translation>Poista valittu media.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="92"/> <location filename="openlp/plugins/media/mediaplugin.py" line="92"/>
<source>Preview the selected media.</source> <source>Preview the selected media.</source>
<translation type="unfinished"/> <translation>Esikatsele valittua mediaa.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="93"/> <location filename="openlp/plugins/media/mediaplugin.py" line="93"/>
<source>Send the selected media live.</source> <source>Send the selected media live.</source>
<translation type="unfinished"/> <translation>Lähetä valittu media esitykseen.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/mediaplugin.py" line="94"/> <location filename="openlp/plugins/media/mediaplugin.py" line="94"/>
<source>Add the selected media to the service.</source> <source>Add the selected media to the service.</source>
<translation type="unfinished"/> <translation>Lisää valittu media ajolistalle.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1887,57 +1888,57 @@ Do you want to add the other images anyway?</source>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="97"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="97"/>
<source>Select Media</source> <source>Select Media</source>
<translation type="unfinished"/> <translation>Valitse media</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="277"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="277"/>
<source>You must select a media file to delete.</source> <source>You must select a media file to delete.</source>
<translation type="unfinished"/> <translation>Sinun täytyy valita mediatiedosto poistettavaksi.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="171"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="171"/>
<source>You must select a media file to replace the background with.</source> <source>You must select a media file to replace the background with.</source>
<translation type="unfinished"/> <translation>Sinun täytyy valita mediatiedosto, jolla taustakuva korvataan.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="185"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="185"/>
<source>There was a problem replacing your background, the media file &quot;%s&quot; no longer exists.</source> <source>There was a problem replacing your background, the media file &quot;%s&quot; no longer exists.</source>
<translation type="unfinished"/> <translation>Taustakuvan korvaamisessa on ongelmia, mediatiedosto &apos;%s&quot; ei ole enää saatavilla.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="200"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="200"/>
<source>Missing Media File</source> <source>Missing Media File</source>
<translation type="unfinished"/> <translation>Puuttuva mediatiedosto</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="200"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="200"/>
<source>The file %s no longer exists.</source> <source>The file %s no longer exists.</source>
<translation type="unfinished"/> <translation>Tiedosto %s ei ole enää olemassa.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="238"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="238"/>
<source>Videos (%s);;Audio (%s);;%s (*)</source> <source>Videos (%s);;Audio (%s);;%s (*)</source>
<translation type="unfinished"/> <translation>Videoita (%s);;Audio (%s);;%s (*)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="181"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="181"/>
<source>There was no display item to amend.</source> <source>There was no display item to amend.</source>
<translation type="unfinished"/> <translation>Ei ollut muutettavaa näyttöelementtiä.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/media/mediacontroller.py" line="342"/> <location filename="openlp/core/ui/media/mediacontroller.py" line="342"/>
<source>Unsupported File</source> <source>Unsupported File</source>
<translation type="unfinished"/> <translation>Tiedostotyyppiä ei tueta.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="106"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="106"/>
<source>Automatic</source> <source>Automatic</source>
<translation type="unfinished"/> <translation>Automaattinen</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediaitem.py" line="108"/> <location filename="openlp/plugins/media/lib/mediaitem.py" line="108"/>
<source>Use Player:</source> <source>Use Player:</source>
<translation type="unfinished"/> <translation>Käytä soitinta:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1945,17 +1946,17 @@ Do you want to add the other images anyway?</source>
<message> <message>
<location filename="openlp/plugins/media/lib/mediatab.py" line="119"/> <location filename="openlp/plugins/media/lib/mediatab.py" line="119"/>
<source>Available Media Players</source> <source>Available Media Players</source>
<translation type="unfinished"/> <translation>Saatavilla olevat mediasoittimet</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediatab.py" line="128"/> <location filename="openlp/plugins/media/lib/mediatab.py" line="128"/>
<source>%s (unavailable)</source> <source>%s (unavailable)</source>
<translation type="unfinished"/> <translation>%s (ei ole saatavilla)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediatab.py" line="131"/> <location filename="openlp/plugins/media/lib/mediatab.py" line="131"/>
<source>Player Order</source> <source>Player Order</source>
<translation type="unfinished"/> <translation>Soittimien järjestys</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/media/lib/mediatab.py" line="134"/> <location filename="openlp/plugins/media/lib/mediatab.py" line="134"/>
@ -1968,19 +1969,21 @@ Do you want to add the other images anyway?</source>
<message> <message>
<location filename="openlp/core/utils/__init__.py" line="361"/> <location filename="openlp/core/utils/__init__.py" line="361"/>
<source>Image Files</source> <source>Image Files</source>
<translation type="unfinished"/> <translation>Kuvatiedostot</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/bibles/bibleplugin.py" line="88"/> <location filename="openlp/plugins/bibles/bibleplugin.py" line="88"/>
<source>Information</source> <source>Information</source>
<translation type="unfinished"/> <translation>Tiedot</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/bibles/bibleplugin.py" line="88"/> <location filename="openlp/plugins/bibles/bibleplugin.py" line="88"/>
<source>Bible format has changed. <source>Bible format has changed.
You have to upgrade your existing Bibles. You have to upgrade your existing Bibles.
Should OpenLP upgrade now?</source> Should OpenLP upgrade now?</source>
<translation type="unfinished"/> <translation>Raamatun tiedostomuoto on muuttunut.
Sinun tarvitsee päivittää aiemmin asennetut Raamatut.
Pitäisikö OpenLP:n päivittää ne nyt?</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1988,32 +1991,32 @@ Should OpenLP upgrade now?</source>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="220"/> <location filename="openlp/core/ui/aboutdialog.py" line="220"/>
<source>Credits</source> <source>Credits</source>
<translation type="unfinished"/> <translation>Kiitokset</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="615"/> <location filename="openlp/core/ui/aboutdialog.py" line="615"/>
<source>License</source> <source>License</source>
<translation type="unfinished"/> <translation>Lisenssi</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="618"/> <location filename="openlp/core/ui/aboutdialog.py" line="618"/>
<source>Contribute</source> <source>Contribute</source>
<translation type="unfinished"/> <translation>Avustus</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutform.py" line="51"/> <location filename="openlp/core/ui/aboutform.py" line="51"/>
<source> build %s</source> <source> build %s</source>
<translation type="unfinished"/> <translation>build %s</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="232"/> <location filename="openlp/core/ui/aboutdialog.py" line="232"/>
<source>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.</source> <source>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.</source>
<translation type="unfinished"/> <translation>Tämä ohjelma on vapaa, voit jakaa ja / tai muuttaa sitä ehtojen mukaisesti GNU General Public Licensen julkaissut Free Software Foundation, version 2 lisenssillä.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="237"/> <location filename="openlp/core/ui/aboutdialog.py" line="237"/>
<source>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.</source> <source>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.</source>
<translation type="unfinished"/> <translation>Tätä ohjelmaa levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai soveltuvuudesta tiettyyn tarkoitukseen.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="144"/> <location filename="openlp/core/ui/aboutdialog.py" line="144"/>
@ -2078,7 +2081,7 @@ Final Credit
on the cross, setting us free from sin. We on the cross, setting us free from sin. We
bring this software to you for free because bring this software to you for free because
He has set us free.</source> He has set us free.</source>
<translation type="unfinished"/> <translation>Projektin johto %s Kehittäjät %s Osallistujat %s Testaajat %s Paketoijat %s Kääntäjät afrikaans (af) %s saksa (de) %s brittienglanti (en_GB) %s englanti, Etelä-Afrikka (en_ZA) %s viro (et) %s ranska (fr) %s unkari (hu) %s japani (ja) %s norja bokmål (nb) %s hollanti (nl) %s portugali, brasilia (pt_BR) %s venäjä (ru) %s Dokumentaatio %s rakennettu Python: http://www.python.org/~~V ⏎ Qt4: http://qt.nokia.com/ ⏎ PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro ⏎ Oxygen kuvakkeet: http://oxygen-icons.org/ ⏎ ⏎ Muut kiitokset ⏎ &quot;Sillä niin on Jumala maailmaa rakastanut, että Hän antoi ⏎ ainokaisen Poikansa, niin että kuka tahansa ⏎ uskoo Häneen ei hukkuisi, vaan perii ⏎ iankaikkisen elämän.&quot; - Joh. 3:16 ⏎ ⏎ Ja viimeisenä, mutta ei vähäisimpänä, kaikkein suurin ansio ⏎ Jumala, Isämme, joka lähetti Poikansa kuolemaan ⏎ ristillä, jossa hän vapautti meidät synnistä. Me ⏎ annamme tämän ohjelmiston sinulle maksutta koska ⏎ Hän vapautti meidät maksutta.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="85"/> <location filename="openlp/core/ui/aboutdialog.py" line="85"/>
@ -2089,7 +2092,7 @@ OpenLP is free church presentation software, or lyrics projection software, used
Find out more about OpenLP: http://openlp.org/ 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.</source> 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.</source>
<translation type="unfinished"/> <translation>OpenLP &lt;version&gt; &lt;revision&gt; - Open Source Lyrics Projection OpenLP on vapaa esitysohjelmisto seurakuntakontekstiin, jolla voi näyttää laulujen sanoja, dioja, Raamatun jakeita, videoita, kuvia, ja jopa esitysgrafiikkaa (jos käytössä on joko Impress, PowerPoint tai PowerPoint Viewer) käyttäen tietokonetta ja dataprojektoria. lisätietoja OpenLP: http://openlp.org/ ⏎ ⏎ OpenLP on toteutettu ja sitä ylläpidetään vapaaehtoisvoimin. Jos haluat nähdä yhä enemmän vapaita kristillisiä ohjelmistoja on tuottettavan, harkitse edistää työtä painammalla alla olevaa painiketta.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/aboutdialog.py" line="223"/> <location filename="openlp/core/ui/aboutdialog.py" line="223"/>
@ -2103,87 +2106,87 @@ Portions copyright © 2004-2012 %s</source>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="342"/> <location filename="openlp/core/ui/advancedtab.py" line="342"/>
<source>UI Settings</source> <source>UI Settings</source>
<translation type="unfinished"/> <translation>Käyttöliittymän asetukset</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="346"/> <location filename="openlp/core/ui/advancedtab.py" line="346"/>
<source>Number of recent files to display:</source> <source>Number of recent files to display:</source>
<translation type="unfinished"/> <translation>Kuinka monta viimeisintä tiedostoa näytetään</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="349"/> <location filename="openlp/core/ui/advancedtab.py" line="349"/>
<source>Remember active media manager tab on startup</source> <source>Remember active media manager tab on startup</source>
<translation type="unfinished"/> <translation>Muista aktivoida median hallinnan välilehti käynnistyksessä</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="351"/> <location filename="openlp/core/ui/advancedtab.py" line="351"/>
<source>Double-click to send items straight to live</source> <source>Double-click to send items straight to live</source>
<translation type="unfinished"/> <translation>Tuplaklikkaa lähettääksesi otsakkeet suoraan esitykseen</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="355"/> <location filename="openlp/core/ui/advancedtab.py" line="355"/>
<source>Expand new service items on creation</source> <source>Expand new service items on creation</source>
<translation type="unfinished"/> <translation>Näytä uudet ajolistan otsakkeet avoimina luodessa</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="357"/> <location filename="openlp/core/ui/advancedtab.py" line="357"/>
<source>Enable application exit confirmation</source> <source>Enable application exit confirmation</source>
<translation type="unfinished"/> <translation>Varmista sovelluksen sulkeminen ennen poistumista</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="393"/> <location filename="openlp/core/ui/advancedtab.py" line="393"/>
<source>Mouse Cursor</source> <source>Mouse Cursor</source>
<translation type="unfinished"/> <translation>Hiiren osoitin</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="395"/> <location filename="openlp/core/ui/advancedtab.py" line="395"/>
<source>Hide mouse cursor when over display window</source> <source>Hide mouse cursor when over display window</source>
<translation type="unfinished"/> <translation>Piilota hiiren osoitin, kun se on näyttöikkunan päällä</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="397"/> <location filename="openlp/core/ui/advancedtab.py" line="397"/>
<source>Default Image</source> <source>Default Image</source>
<translation type="unfinished"/> <translation>Oletuskuva</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="399"/> <location filename="openlp/core/ui/advancedtab.py" line="399"/>
<source>Background color:</source> <source>Background color:</source>
<translation type="unfinished"/> <translation>Taustaväri:</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="403"/> <location filename="openlp/core/ui/advancedtab.py" line="403"/>
<source>Image file:</source> <source>Image file:</source>
<translation type="unfinished"/> <translation>Kuvatiedosto:</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="658"/> <location filename="openlp/core/ui/advancedtab.py" line="658"/>
<source>Open File</source> <source>Open File</source>
<translation type="unfinished"/> <translation>Avaa tiedosto</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="71"/> <location filename="openlp/core/ui/advancedtab.py" line="71"/>
<source>Advanced</source> <source>Advanced</source>
<translation type="unfinished"/> <translation>Edistyneet</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="353"/> <location filename="openlp/core/ui/advancedtab.py" line="353"/>
<source>Preview items when clicked in Media Manager</source> <source>Preview items when clicked in Media Manager</source>
<translation type="unfinished"/> <translation>Esikatsele otsaketta, kun sitä klikataan median hallinnassa</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="401"/> <location filename="openlp/core/ui/advancedtab.py" line="401"/>
<source>Click to select a color.</source> <source>Click to select a color.</source>
<translation type="unfinished"/> <translation>Valitse väri klikkaamalla.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="405"/> <location filename="openlp/core/ui/advancedtab.py" line="405"/>
<source>Browse for an image file to display.</source> <source>Browse for an image file to display.</source>
<translation type="unfinished"/> <translation>Selaa näytettäviä kuvia.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="407"/> <location filename="openlp/core/ui/advancedtab.py" line="407"/>
<source>Revert to the default OpenLP logo.</source> <source>Revert to the default OpenLP logo.</source>
<translation type="unfinished"/> <translation>Palauta oletusarvoinen OpenLP logo.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/servicemanager.py" line="611"/> <location filename="openlp/core/ui/servicemanager.py" line="611"/>
@ -2375,38 +2378,39 @@ This location will be used after OpenLP is closed.</source>
<message> <message>
<location filename="openlp/core/ui/exceptiondialog.py" line="86"/> <location filename="openlp/core/ui/exceptiondialog.py" line="86"/>
<source>Error Occurred</source> <source>Error Occurred</source>
<translation type="unfinished"/> <translation>Tapahtui virhe</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptiondialog.py" line="91"/> <location filename="openlp/core/ui/exceptiondialog.py" line="91"/>
<source>Oops! OpenLP hit a problem, and couldn&apos;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.</source> <source>Oops! OpenLP hit a problem, and couldn&apos;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.</source>
<translation type="unfinished"/> <translation>Uups. OpenLP päätyi virheeseen, josta ei voi jatkaa. Tekstikentässä on tietoa virheestä, joka saattaa helpottaa ohjelmakehittäjien työtä, joten ole hyvä ja lähetä se sähköpostilla osoitteeseen bugs@openlp.org. Lisää myös kuvaus siitä, mitä olit tekemässä, kun virhe tapahtui.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptiondialog.py" line="97"/> <location filename="openlp/core/ui/exceptiondialog.py" line="97"/>
<source>Send E-Mail</source> <source>Send E-Mail</source>
<translation type="unfinished"/> <translation>Lähetä sähköposti</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptiondialog.py" line="99"/> <location filename="openlp/core/ui/exceptiondialog.py" line="99"/>
<source>Save to File</source> <source>Save to File</source>
<translation type="unfinished"/> <translation>Tallenna tiedostoon</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptiondialog.py" line="88"/> <location filename="openlp/core/ui/exceptiondialog.py" line="88"/>
<source>Please enter a description of what you were doing to cause this error <source>Please enter a description of what you were doing to cause this error
(Minimum 20 characters)</source> (Minimum 20 characters)</source>
<translation type="unfinished"/> <translation>Ole hyvä ja kerro lyhyesti, mitä olit tekemässä, kun virhe tapahtui.
(Vähintään 20 kirjainta)</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptiondialog.py" line="101"/> <location filename="openlp/core/ui/exceptiondialog.py" line="101"/>
<source>Attach File</source> <source>Attach File</source>
<translation type="unfinished"/> <translation>Liitä tiedosto</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptionform.py" line="212"/> <location filename="openlp/core/ui/exceptionform.py" line="212"/>
<source>Description characters to enter : %s</source> <source>Description characters to enter : %s</source>
<translation type="unfinished"/> <translation>Kuvauksessa on merkkejä: %s</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2415,17 +2419,18 @@ This location will be used after OpenLP is closed.</source>
<location filename="openlp/core/ui/exceptionform.py" line="116"/> <location filename="openlp/core/ui/exceptionform.py" line="116"/>
<source>Platform: %s <source>Platform: %s
</source> </source>
<translation type="unfinished"/> <translation>Järjestelmä: %s
</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptionform.py" line="150"/> <location filename="openlp/core/ui/exceptionform.py" line="150"/>
<source>Save Crash Report</source> <source>Save Crash Report</source>
<translation type="unfinished"/> <translation>Tallenna virheraportti</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptionform.py" line="150"/> <location filename="openlp/core/ui/exceptionform.py" line="150"/>
<source>Text files (*.txt *.log *.text)</source> <source>Text files (*.txt *.log *.text)</source>
<translation type="unfinished"/> <translation>Teksti tiedostot (*.txt *.log *.text)</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptionform.py" line="143"/> <location filename="openlp/core/ui/exceptionform.py" line="143"/>
@ -2443,7 +2448,8 @@ Version: %s
--- Library Versions --- --- Library Versions ---
%s %s
</source> </source>
<translation type="unfinished"/> <translation>**OpenLP virheraportti** Versio: %s --- Poikkeuksen tiedot. --- %s --- Poikkeuksen traceback --- %s --- Järjestelmätiedot --- %s --- Kirjastoversiot --- %s
</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/exceptionform.py" line="180"/> <location filename="openlp/core/ui/exceptionform.py" line="180"/>
@ -2462,7 +2468,8 @@ Version: %s
%s %s
</source> </source>
<comment>Please add the information that bug reports are favoured written in English.</comment> <comment>Please add the information that bug reports are favoured written in English.</comment>
<translation type="unfinished"/> <translation>**OpenLP virheraportti** Versio: %s --- Poikkeuksen tiedot. --- %s --- Poikkeuksen traceback --- %s --- Järjestelmätiedot --- %s --- Kirjastoversiot --- %s
</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2470,17 +2477,17 @@ Version: %s
<message> <message>
<location filename="openlp/core/ui/filerenameform.py" line="51"/> <location filename="openlp/core/ui/filerenameform.py" line="51"/>
<source>File Rename</source> <source>File Rename</source>
<translation type="unfinished"/> <translation>Tiedoston uudelleennimeäminen</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/filerenamedialog.py" line="55"/> <location filename="openlp/core/ui/filerenamedialog.py" line="55"/>
<source>New File Name:</source> <source>New File Name:</source>
<translation type="unfinished"/> <translation>Uusi tiedostonimi:</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/filerenameform.py" line="48"/> <location filename="openlp/core/ui/filerenameform.py" line="48"/>
<source>File Copy</source> <source>File Copy</source>
<translation type="unfinished"/> <translation>Tiedoston kopiointi</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2488,17 +2495,17 @@ Version: %s
<message> <message>
<location filename="openlp/core/ui/firsttimelanguagedialog.py" line="64"/> <location filename="openlp/core/ui/firsttimelanguagedialog.py" line="64"/>
<source>Select Translation</source> <source>Select Translation</source>
<translation type="unfinished"/> <translation>Valitse käännös</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimelanguagedialog.py" line="66"/> <location filename="openlp/core/ui/firsttimelanguagedialog.py" line="66"/>
<source>Choose the translation you&apos;d like to use in OpenLP.</source> <source>Choose the translation you&apos;d like to use in OpenLP.</source>
<translation type="unfinished"/> <translation>Valitse käännös, jota haluat käyttää OpenLP:ssä</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimelanguagedialog.py" line="68"/> <location filename="openlp/core/ui/firsttimelanguagedialog.py" line="68"/>
<source>Translation:</source> <source>Translation:</source>
<translation type="unfinished"/> <translation>Käännös:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2506,107 +2513,107 @@ Version: %s
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="211"/> <location filename="openlp/core/ui/firsttimewizard.py" line="211"/>
<source>Songs</source> <source>Songs</source>
<translation type="unfinished"/> <translation>Laulut</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="198"/> <location filename="openlp/core/ui/firsttimewizard.py" line="198"/>
<source>First Time Wizard</source> <source>First Time Wizard</source>
<translation type="unfinished"/> <translation>Ensikäynnistyksen avustaja</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="200"/> <location filename="openlp/core/ui/firsttimewizard.py" line="200"/>
<source>Welcome to the First Time Wizard</source> <source>Welcome to the First Time Wizard</source>
<translation type="unfinished"/> <translation>Tervetuloa ensikäynnistyksen avustajaan</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="207"/> <location filename="openlp/core/ui/firsttimewizard.py" line="207"/>
<source>Activate required Plugins</source> <source>Activate required Plugins</source>
<translation type="unfinished"/> <translation>Aktivoi vaaditut lisäosat</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="209"/> <location filename="openlp/core/ui/firsttimewizard.py" line="209"/>
<source>Select the Plugins you wish to use. </source> <source>Select the Plugins you wish to use. </source>
<translation type="unfinished"/> <translation>Valitse lisäosat, joita haluat käyttää.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="214"/> <location filename="openlp/core/ui/firsttimewizard.py" line="214"/>
<source>Bible</source> <source>Bible</source>
<translation type="unfinished"/> <translation>Raamattu</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="215"/> <location filename="openlp/core/ui/firsttimewizard.py" line="215"/>
<source>Images</source> <source>Images</source>
<translation type="unfinished"/> <translation>Kuvat</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="217"/> <location filename="openlp/core/ui/firsttimewizard.py" line="217"/>
<source>Presentations</source> <source>Presentations</source>
<translation type="unfinished"/> <translation>Esitykset</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="221"/> <location filename="openlp/core/ui/firsttimewizard.py" line="221"/>
<source>Media (Audio and Video)</source> <source>Media (Audio and Video)</source>
<translation type="unfinished"/> <translation>Media (audio ja video)</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="223"/> <location filename="openlp/core/ui/firsttimewizard.py" line="223"/>
<source>Allow remote access</source> <source>Allow remote access</source>
<translation type="unfinished"/> <translation>Salli etäkäyttö</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="225"/> <location filename="openlp/core/ui/firsttimewizard.py" line="225"/>
<source>Monitor Song Usage</source> <source>Monitor Song Usage</source>
<translation type="unfinished"/> <translation>Tilastoi laulujen käyttöä</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="227"/> <location filename="openlp/core/ui/firsttimewizard.py" line="227"/>
<source>Allow Alerts</source> <source>Allow Alerts</source>
<translation type="unfinished"/> <translation>Salli hälytykset</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="257"/> <location filename="openlp/core/ui/firsttimewizard.py" line="257"/>
<source>Default Settings</source> <source>Default Settings</source>
<translation type="unfinished"/> <translation>Oletusasetukset</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimeform.py" line="96"/> <location filename="openlp/core/ui/firsttimeform.py" line="96"/>
<source>Downloading %s...</source> <source>Downloading %s...</source>
<translation type="unfinished"/> <translation>Ladataan %s...</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimeform.py" line="396"/> <location filename="openlp/core/ui/firsttimeform.py" line="396"/>
<source>Download complete. Click the finish button to start OpenLP.</source> <source>Download complete. Click the finish button to start OpenLP.</source>
<translation type="unfinished"/> <translation>Lataus valmis. Paina lopetuspainiketta käynnistääksesi OpenLP:n.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimeform.py" line="417"/> <location filename="openlp/core/ui/firsttimeform.py" line="417"/>
<source>Enabling selected plugins...</source> <source>Enabling selected plugins...</source>
<translation type="unfinished"/> <translation>Otetaan käyttöön valittuja lisäosia...</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="229"/> <location filename="openlp/core/ui/firsttimewizard.py" line="229"/>
<source>No Internet Connection</source> <source>No Internet Connection</source>
<translation type="unfinished"/> <translation>Ei internetyhteyttä</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="231"/> <location filename="openlp/core/ui/firsttimewizard.py" line="231"/>
<source>Unable to detect an Internet connection.</source> <source>Unable to detect an Internet connection.</source>
<translation type="unfinished"/> <translation>Toimivaa internetyhteyttä ei saatavilla.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="245"/> <location filename="openlp/core/ui/firsttimewizard.py" line="245"/>
<source>Sample Songs</source> <source>Sample Songs</source>
<translation type="unfinished"/> <translation>Esimerkkejä lauluista</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="247"/> <location filename="openlp/core/ui/firsttimewizard.py" line="247"/>
<source>Select and download public domain songs.</source> <source>Select and download public domain songs.</source>
<translation type="unfinished"/> <translation>Valitse ja lataa tekijäinoikeusvapaita lauluja.</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="249"/> <location filename="openlp/core/ui/firsttimewizard.py" line="249"/>
<source>Sample Bibles</source> <source>Sample Bibles</source>
<translation type="unfinished"/> <translation>Esimerkkejä Raamatuista</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/firsttimewizard.py" line="251"/> <location filename="openlp/core/ui/firsttimewizard.py" line="251"/>
@ -3236,12 +3243,12 @@ To cancel the First Time Wizard completely (and not start OpenLP), click the Can
<message> <message>
<location filename="openlp/core/ui/mainwindow.py" line="492"/> <location filename="openlp/core/ui/mainwindow.py" line="492"/>
<source>&amp;Plugin List</source> <source>&amp;Plugin List</source>
<translation type="unfinished"/> <translation>&amp;Luettelo lisäosista</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/mainwindow.py" line="494"/> <location filename="openlp/core/ui/mainwindow.py" line="494"/>
<source>List the Plugins</source> <source>List the Plugins</source>
<translation type="unfinished"/> <translation>Lisäosien luettelo</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/mainwindow.py" line="500"/> <location filename="openlp/core/ui/mainwindow.py" line="500"/>
@ -3628,12 +3635,12 @@ Suffix not supported</source>
<message> <message>
<location filename="openlp/core/ui/plugindialog.py" line="75"/> <location filename="openlp/core/ui/plugindialog.py" line="75"/>
<source>Plugin List</source> <source>Plugin List</source>
<translation type="unfinished"/> <translation>Luettelo lisäosista</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/plugindialog.py" line="77"/> <location filename="openlp/core/ui/plugindialog.py" line="77"/>
<source>Plugin Details</source> <source>Plugin Details</source>
<translation type="unfinished"/> <translation>Lisäosan tiedot</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/plugindialog.py" line="81"/> <location filename="openlp/core/ui/plugindialog.py" line="81"/>
@ -5592,19 +5599,19 @@ The content encoding is not UTF-8.</source>
<location filename="openlp/plugins/presentations/presentationplugin.py" line="157"/> <location filename="openlp/plugins/presentations/presentationplugin.py" line="157"/>
<source>Presentation</source> <source>Presentation</source>
<comment>name singular</comment> <comment>name singular</comment>
<translation type="unfinished"/> <translation>Esitys</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/presentations/presentationplugin.py" line="159"/> <location filename="openlp/plugins/presentations/presentationplugin.py" line="159"/>
<source>Presentations</source> <source>Presentations</source>
<comment>name plural</comment> <comment>name plural</comment>
<translation type="unfinished"/> <translation>Esitykset</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/presentations/presentationplugin.py" line="164"/> <location filename="openlp/plugins/presentations/presentationplugin.py" line="164"/>
<source>Presentations</source> <source>Presentations</source>
<comment>container title</comment> <comment>container title</comment>
<translation type="unfinished"/> <translation>Esitykset</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/presentations/presentationplugin.py" line="169"/> <location filename="openlp/plugins/presentations/presentationplugin.py" line="169"/>
@ -5754,7 +5761,7 @@ The content encoding is not UTF-8.</source>
<message> <message>
<location filename="openlp/plugins/remotes/lib/httpserver.py" line="293"/> <location filename="openlp/plugins/remotes/lib/httpserver.py" line="293"/>
<source>Alerts</source> <source>Alerts</source>
<translation type="unfinished"/> <translation>Hälytykset</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/remotes/lib/httpserver.py" line="294"/> <location filename="openlp/plugins/remotes/lib/httpserver.py" line="294"/>
@ -5794,7 +5801,7 @@ The content encoding is not UTF-8.</source>
<message> <message>
<location filename="openlp/plugins/remotes/lib/httpserver.py" line="304"/> <location filename="openlp/plugins/remotes/lib/httpserver.py" line="304"/>
<source>Show Alert</source> <source>Show Alert</source>
<translation type="unfinished"/> <translation>Näytä hälytys</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/remotes/lib/httpserver.py" line="305"/> <location filename="openlp/plugins/remotes/lib/httpserver.py" line="305"/>

File diff suppressed because it is too large Load Diff

View File

@ -1367,7 +1367,9 @@ indien nodig en een internetverbinding is dus noodzakelijk.</translation>
<source>Are you sure you want to completely delete &quot;%s&quot; Bible from OpenLP? <source>Are you sure you want to completely delete &quot;%s&quot; Bible from OpenLP?
You will need to re-import this Bible to use it again.</source> You will need to re-import this Bible to use it again.</source>
<translation type="unfinished"/> <translation>Weet u zeker dat u de bijbel &quot;%s&quot; uit OpenLP wilt verwijderen?
Opnieuw importeren om alsnog te gebruiken.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1375,7 +1377,7 @@ You will need to re-import this Bible to use it again.</source>
<message> <message>
<location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/> <location filename="openlp/plugins/bibles/lib/opensong.py" line="118"/>
<source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source> <source>Incorrect Bible file type supplied. OpenSong Bibles may be compressed. You must decompress them before import.</source>
<translation type="unfinished"/> <translation>Incorrect bijbelbestand. OpenSong bijbels mogen gecomprimeerd zijn. Decomprimeren voordat u ze importeert.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1698,7 +1700,7 @@ Let op, de bijbelverzen worden gedownload indien nodig en een internetverbinding
<message> <message>
<location filename="openlp/plugins/custom/forms/editcustomslidedialog.py" line="52"/> <location filename="openlp/plugins/custom/forms/editcustomslidedialog.py" line="52"/>
<source>Edit Slide</source> <source>Edit Slide</source>
<translation type="unfinished"/> <translation>Bewerk dia</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2194,7 +2196,7 @@ Portions copyright © 2004-2012 %s</translation>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="342"/> <location filename="openlp/core/ui/advancedtab.py" line="342"/>
<source>UI Settings</source> <source>UI Settings</source>
<translation>Werkomgeving instellingen</translation> <translation>UI instellingen</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="346"/> <location filename="openlp/core/ui/advancedtab.py" line="346"/>
@ -3103,7 +3105,7 @@ To cancel the First Time Wizard completely (and not start OpenLP), click the Can
<message> <message>
<location filename="openlp/core/ui/generaltab.py" line="261"/> <location filename="openlp/core/ui/generaltab.py" line="261"/>
<source>Start background audio paused</source> <source>Start background audio paused</source>
<translation>Start achtergrond geluid gepausseerd</translation> <translation>Start achtergrond geluid gepauseerd</translation>
</message> </message>
<message> <message>
<location filename="openlp/core/ui/advancedtab.py" line="440"/> <location filename="openlp/core/ui/advancedtab.py" line="440"/>
@ -6908,32 +6910,32 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="172"/> <location filename="openlp/plugins/songs/lib/importer.py" line="172"/>
<source>This importer has been disabled.</source> <source>This importer has been disabled.</source>
<translation type="unfinished"/> <translation>importeren is uitgeschakeld</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="260"/> <location filename="openlp/plugins/songs/lib/importer.py" line="260"/>
<source>MediaShout Database</source> <source>MediaShout Database</source>
<translation type="unfinished"/> <translation>MediaShout Database</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="262"/> <location filename="openlp/plugins/songs/lib/importer.py" line="262"/>
<source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source> <source>The MediaShout importer is only supported on Windows. It has been disabled due to a missing Python module. If you want to use this importer, you will need to install the &quot;pyodbc&quot; module.</source>
<translation type="unfinished"/> <translation>MediaShout importeren wordt alleen ondersteund onder Windows. Het is uitgeschakeld omdat een bepaalde Python module ontbreekt. Om te kunnen importeren, moet u de &quot;pyodbc&quot; module installeren.</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="293"/> <location filename="openlp/plugins/songs/lib/importer.py" line="293"/>
<source>SongPro Text Files</source> <source>SongPro Text Files</source>
<translation type="unfinished"/> <translation>SongPro Tekst bestanden</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="295"/> <location filename="openlp/plugins/songs/lib/importer.py" line="295"/>
<source>SongPro (Export File)</source> <source>SongPro (Export File)</source>
<translation type="unfinished"/> <translation>SongPro (Exporteer bestand)</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/importer.py" line="297"/> <location filename="openlp/plugins/songs/lib/importer.py" line="297"/>
<source>In SongPro, export your songs using the File -&gt; Export menu</source> <source>In SongPro, export your songs using the File -&gt; Export menu</source>
<translation type="unfinished"/> <translation>Exporteer de liederen in SongPro via het menu File -&gt; Export</translation>
</message> </message>
</context> </context>
<context> <context>
@ -7018,7 +7020,7 @@ De tekstcodering is verantwoordelijk voor een correcte weergave van lettertekens
<message> <message>
<location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/> <location filename="openlp/plugins/songs/lib/mediashoutimport.py" line="61"/>
<source>Unable to open the MediaShout database.</source> <source>Unable to open the MediaShout database.</source>
<translation type="unfinished"/> <translation>Kan de MediaShout database niet openen.</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -6953,7 +6953,7 @@ Teckenkodningen ansvarar för rätt teckenrepresentation.</translation>
<message> <message>
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="154"/> <location filename="openlp/plugins/songs/lib/mediaitem.py" line="154"/>
<source>Titles</source> <source>Titles</source>
<translation>Titlel</translation> <translation>Titel</translation>
</message> </message>
<message> <message>
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="154"/> <location filename="openlp/plugins/songs/lib/mediaitem.py" line="154"/>