forked from openlp/openlp
Compare commits
25 Commits
Author | SHA1 | Date |
---|---|---|
Tim Bentley | 33a359d373 | |
Tim Bentley | 1aa7ac6e35 | |
Tim Bentley | c1b63189f3 | |
Tim Bentley | 06d7060289 | |
Tim Bentley | 2c8020e58e | |
Tim Bentley | b606aaeb7f | |
Tim Bentley | 414e3a176f | |
second@tgc.dk | cf4c30458f | |
Tomas Groth | 36aa35b260 | |
raoul@snyman.info | 3285088814 | |
second@tgc.dk | 3393583d6d | |
second@tgc.dk | 6894f92927 | |
Tim Bentley | 83d57d81af | |
Raoul Snyman | 851af0b7a5 | |
Tim Bentley | 43168d6f8a | |
Tim Bentley | 51bc55d217 | |
Tim Bentley | 41df272c9c | |
Tim Bentley | 5110715075 | |
Tomas Groth | 8e6d1283f7 | |
Tim Bentley | 419e8b17fe | |
Tim Bentley | 15ea46a606 | |
Tim Bentley | 4f0f27296f | |
Tomas Groth | b4669e0bf6 | |
Tomas Groth | 7470205185 | |
Tomas Groth | 568904a6cf |
|
@ -1 +1 @@
|
||||||
2.2
|
2.2.1
|
||||||
|
|
|
@ -514,10 +514,15 @@ class MediaController(RegistryMixin, OpenLPMixin, RegistryProperties):
|
||||||
:param display: Which display to use
|
:param display: Which display to use
|
||||||
:param service_item: The ServiceItem containing the details to be played.
|
:param service_item: The ServiceItem containing the details to be played.
|
||||||
"""
|
"""
|
||||||
used_players = get_media_players()[0]
|
used_players = get_media_players()
|
||||||
|
default_player = used_players[0]
|
||||||
if service_item.processor and service_item.processor != UiStrings().Automatic:
|
if service_item.processor and service_item.processor != UiStrings().Automatic:
|
||||||
used_players = [service_item.processor.lower()]
|
# check to see if the player is usable else use the default one.
|
||||||
# If no player, we can't play
|
if not service_item.processor.lower() in used_players:
|
||||||
|
used_players = default_player
|
||||||
|
else:
|
||||||
|
used_players = [service_item.processor.lower()]
|
||||||
|
|
||||||
if not used_players:
|
if not used_players:
|
||||||
return False
|
return False
|
||||||
if controller.media_info.file_info.isFile():
|
if controller.media_info.file_info.isFile():
|
||||||
|
|
|
@ -107,6 +107,7 @@ def find_lib():
|
||||||
except OSError: # may fail
|
except OSError: # may fail
|
||||||
dll = ctypes.CDLL('libvlc.so.5')
|
dll = ctypes.CDLL('libvlc.so.5')
|
||||||
elif sys.platform.startswith('win'):
|
elif sys.platform.startswith('win'):
|
||||||
|
ctypes.windll.kernel32.SetDllDirectoryW(None)
|
||||||
p = find_library('libvlc.dll')
|
p = find_library('libvlc.dll')
|
||||||
if p is None:
|
if p is None:
|
||||||
try: # some registry settings
|
try: # some registry settings
|
||||||
|
|
|
@ -84,7 +84,9 @@ def get_vlc():
|
||||||
pass
|
pass
|
||||||
if is_vlc_available:
|
if is_vlc_available:
|
||||||
try:
|
try:
|
||||||
|
vlc_instance = vlc.Instance()
|
||||||
VERSION = vlc.libvlc_get_version().decode('UTF-8')
|
VERSION = vlc.libvlc_get_version().decode('UTF-8')
|
||||||
|
vlc_instance.release()
|
||||||
except:
|
except:
|
||||||
VERSION = '0.0.0'
|
VERSION = '0.0.0'
|
||||||
# LooseVersion does not work when a string contains letter and digits (e. g. 2.0.5 Twoflower).
|
# LooseVersion does not work when a string contains letter and digits (e. g. 2.0.5 Twoflower).
|
||||||
|
@ -95,6 +97,9 @@ def get_vlc():
|
||||||
if is_vlc_available:
|
if is_vlc_available:
|
||||||
return vlc
|
return vlc
|
||||||
else:
|
else:
|
||||||
|
# The vlc module may have been imported. Remove it if it has.
|
||||||
|
if 'openlp.core.ui.media.vendor.vlc' in sys.modules:
|
||||||
|
del sys.modules['openlp.core.ui.media.vendor.vlc']
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,11 @@ class AlertsManager(OpenLPMixin, RegistryMixin, QtCore.QObject, RegistryProperti
|
||||||
:param message: The message text to be displayed
|
:param message: The message text to be displayed
|
||||||
"""
|
"""
|
||||||
if message:
|
if message:
|
||||||
self.display_alert(message[0])
|
text = message[0]
|
||||||
|
# remove line breaks as these crash javascript code on display
|
||||||
|
while '\n' in text:
|
||||||
|
text = text.replace('\n', ' ')
|
||||||
|
self.display_alert(text)
|
||||||
|
|
||||||
def display_alert(self, text=''):
|
def display_alert(self, text=''):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -27,7 +27,6 @@ import re
|
||||||
import socket
|
import socket
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
import urllib.error
|
import urllib.error
|
||||||
from html.parser import HTMLParseError
|
|
||||||
|
|
||||||
from bs4 import BeautifulSoup, NavigableString, Tag
|
from bs4 import BeautifulSoup, NavigableString, Tag
|
||||||
|
|
||||||
|
@ -290,7 +289,7 @@ class BGExtract(RegistryProperties):
|
||||||
page_source = str(page_source, 'cp1251')
|
page_source = str(page_source, 'cp1251')
|
||||||
try:
|
try:
|
||||||
soup = BeautifulSoup(page_source)
|
soup = BeautifulSoup(page_source)
|
||||||
except HTMLParseError:
|
except Exception:
|
||||||
log.error('BeautifulSoup could not parse the Bible page.')
|
log.error('BeautifulSoup could not parse the Bible page.')
|
||||||
send_error_message('parse')
|
send_error_message('parse')
|
||||||
return None
|
return None
|
||||||
|
@ -762,7 +761,7 @@ def get_soup_for_bible_ref(reference_url, header=None, pre_parse_regex=None, pre
|
||||||
try:
|
try:
|
||||||
soup = BeautifulSoup(page_source)
|
soup = BeautifulSoup(page_source)
|
||||||
CLEANER_REGEX.sub('', str(soup))
|
CLEANER_REGEX.sub('', str(soup))
|
||||||
except HTMLParseError:
|
except Exception:
|
||||||
log.exception('BeautifulSoup could not parse the bible page.')
|
log.exception('BeautifulSoup could not parse the bible page.')
|
||||||
if not soup:
|
if not soup:
|
||||||
send_error_message('parse')
|
send_error_message('parse')
|
||||||
|
|
|
@ -346,6 +346,12 @@ class MessageListener(object):
|
||||||
self.handler = self.media_item.find_controller_by_type(file)
|
self.handler = self.media_item.find_controller_by_type(file)
|
||||||
if not self.handler:
|
if not self.handler:
|
||||||
return
|
return
|
||||||
|
else:
|
||||||
|
# the saved handler is not present so need to use one based on file suffix.
|
||||||
|
if not self.controllers[self.handler].available:
|
||||||
|
self.handler = self.media_item.find_controller_by_type(file)
|
||||||
|
if not self.handler:
|
||||||
|
return
|
||||||
if is_live:
|
if is_live:
|
||||||
controller = self.live_handler
|
controller = self.live_handler
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -75,7 +75,8 @@ class ZionWorxImport(SongImport):
|
||||||
"""
|
"""
|
||||||
Receive a CSV file (from a ZionWorx database dump) to import.
|
Receive a CSV file (from a ZionWorx database dump) to import.
|
||||||
"""
|
"""
|
||||||
with open(self.import_source, 'rb') as songs_file:
|
# Encoding should always be ISO-8859-1
|
||||||
|
with open(self.import_source, 'rt', encoding='ISO-8859-1') as songs_file:
|
||||||
field_names = ['SongNum', 'Title1', 'Title2', 'Lyrics', 'Writer', 'Copyright', 'Keywords',
|
field_names = ['SongNum', 'Title1', 'Title2', 'Lyrics', 'Writer', 'Copyright', 'Keywords',
|
||||||
'DefaultStyle']
|
'DefaultStyle']
|
||||||
songs_reader = csv.DictReader(songs_file, field_names)
|
songs_reader = csv.DictReader(songs_file, field_names)
|
||||||
|
@ -112,10 +113,10 @@ class ZionWorxImport(SongImport):
|
||||||
if line and not line.isspace():
|
if line and not line.isspace():
|
||||||
verse += line + '\n'
|
verse += line + '\n'
|
||||||
elif verse:
|
elif verse:
|
||||||
self.add_verse(verse)
|
self.add_verse(verse, 'v')
|
||||||
verse = ''
|
verse = ''
|
||||||
if verse:
|
if verse:
|
||||||
self.add_verse(verse)
|
self.add_verse(verse, 'v')
|
||||||
title = self.title
|
title = self.title
|
||||||
if not self.finish():
|
if not self.finish():
|
||||||
self.log_error(translate('SongsPlugin.ZionWorxImport', 'Record %d') % index +
|
self.log_error(translate('SongsPlugin.ZionWorxImport', 'Record %d') % index +
|
||||||
|
@ -123,8 +124,7 @@ class ZionWorxImport(SongImport):
|
||||||
|
|
||||||
def _decode(self, str):
|
def _decode(self, str):
|
||||||
"""
|
"""
|
||||||
Decodes CSV input to unicode, stripping all control characters (except new lines).
|
Strips all control characters (except new lines).
|
||||||
"""
|
"""
|
||||||
# This encoding choice seems OK. ZionWorx has no option for setting the
|
# ZionWorx has no option for setting the encoding for its songs, so we assume encoding is always the same.
|
||||||
# encoding for its songs, so we assume encoding is always the same.
|
return str.translate(CONTROL_CHARS_MAP)
|
||||||
return str(str, 'cp1252').translate(CONTROL_CHARS_MAP)
|
|
||||||
|
|
|
@ -23,10 +23,13 @@
|
||||||
The :mod:`~openlp.plugins.songs.lib.songselect` module contains the SongSelect importer itself.
|
The :mod:`~openlp.plugins.songs.lib.songselect` module contains the SongSelect importer itself.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
import sys
|
||||||
from http.cookiejar import CookieJar
|
from http.cookiejar import CookieJar
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
from urllib.request import HTTPCookieProcessor, URLError, build_opener
|
from urllib.request import HTTPCookieProcessor, URLError, build_opener
|
||||||
from html.parser import HTMLParser
|
from html.parser import HTMLParser
|
||||||
|
if sys.version_info > (3, 4):
|
||||||
|
from html import unescape
|
||||||
|
|
||||||
|
|
||||||
from bs4 import BeautifulSoup, NavigableString
|
from bs4 import BeautifulSoup, NavigableString
|
||||||
|
@ -129,11 +132,18 @@ class SongSelectImport(object):
|
||||||
if not search_results:
|
if not search_results:
|
||||||
break
|
break
|
||||||
for result in search_results:
|
for result in search_results:
|
||||||
song = {
|
if sys.version_info > (3, 4):
|
||||||
'title': self.html_parser.unescape(result.find('h3').string),
|
song = {
|
||||||
'authors': [self.html_parser.unescape(author.string) for author in result.find_all('li')],
|
'title': unescape(result.find('h3').string),
|
||||||
'link': BASE_URL + result.find('a')['href']
|
'authors': [unescape(author.string) for author in result.find_all('li')],
|
||||||
}
|
'link': BASE_URL + result.find('a')['href']
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
song = {
|
||||||
|
'title': self.html_parser.unescape(result.find('h3').string),
|
||||||
|
'authors': [self.html_parser.unescape(author.string) for author in result.find_all('li')],
|
||||||
|
'link': BASE_URL + result.find('a')['href']
|
||||||
|
}
|
||||||
if callback:
|
if callback:
|
||||||
callback(song)
|
callback(song)
|
||||||
songs.append(song)
|
songs.append(song)
|
||||||
|
@ -167,7 +177,10 @@ class SongSelectImport(object):
|
||||||
if callback:
|
if callback:
|
||||||
callback()
|
callback()
|
||||||
song['copyright'] = '/'.join([li.string for li in song_page.find('ul', 'copyright').find_all('li')])
|
song['copyright'] = '/'.join([li.string for li in song_page.find('ul', 'copyright').find_all('li')])
|
||||||
song['copyright'] = self.html_parser.unescape(song['copyright'])
|
if sys.version_info > (3, 4):
|
||||||
|
song['copyright'] = unescape(song['copyright'])
|
||||||
|
else:
|
||||||
|
song['copyright'] = self.html_parser.unescape(song['copyright'])
|
||||||
song['ccli_number'] = song_page.find('ul', 'info').find('li').string.split(':')[1].strip()
|
song['ccli_number'] = song_page.find('ul', 'info').find('li').string.split(':')[1].strip()
|
||||||
song['verses'] = []
|
song['verses'] = []
|
||||||
verses = lyrics_page.find('section', 'lyrics').find_all('p')
|
verses = lyrics_page.find('section', 'lyrics').find_all('p')
|
||||||
|
@ -180,9 +193,15 @@ class SongSelectImport(object):
|
||||||
else:
|
else:
|
||||||
verse['lyrics'] += '\n'
|
verse['lyrics'] += '\n'
|
||||||
verse['lyrics'] = verse['lyrics'].strip(' \n\r\t')
|
verse['lyrics'] = verse['lyrics'].strip(' \n\r\t')
|
||||||
song['verses'].append(self.html_parser.unescape(verse))
|
if sys.version_info > (3, 4):
|
||||||
|
song['verses'].append(unescape(verse))
|
||||||
|
else:
|
||||||
|
song['verses'].append(self.html_parser.unescape(verse))
|
||||||
for counter, author in enumerate(song['authors']):
|
for counter, author in enumerate(song['authors']):
|
||||||
song['authors'][counter] = self.html_parser.unescape(author)
|
if sys.version_info > (3, 4):
|
||||||
|
song['authors'][counter] = unescape(author)
|
||||||
|
else:
|
||||||
|
song['authors'][counter] = self.html_parser.unescape(author)
|
||||||
return song
|
return song
|
||||||
|
|
||||||
def save_song(self, song):
|
def save_song(self, song):
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="de" sourcelanguage="" version="2.0">
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS><TS version="2.0" language="de" sourcelanguage="">
|
||||||
<context>
|
<context>
|
||||||
<name>AlertsPlugin</name>
|
<name>AlertsPlugin</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -96,14 +97,14 @@ Möchten Sie dennoch fortfahren?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/alerts/forms/alertform.py" line="190"/>
|
<location filename="openlp/plugins/alerts/forms/alertform.py" line="190"/>
|
||||||
<source>The alert text does not contain '<>'.
|
<source>The alert text does not contain '<>'.
|
||||||
Do you want to continue anyway?</source>
|
Do you want to continue anyway?</source>
|
||||||
<translation>Der Hinweistext enthält nicht '<>'.
|
<translation>Der Hinweistext enthält nicht '<>'.
|
||||||
Möchten Sie dennoch fortfahren?</translation>
|
Möchten Sie dennoch fortfahren?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/alerts/forms/alertform.py" line="107"/>
|
<location filename="openlp/plugins/alerts/forms/alertform.py" line="107"/>
|
||||||
<source>You haven't specified any text for your alert.
|
<source>You haven't specified any text for your alert.
|
||||||
Please type in some text before clicking New.</source>
|
Please type in some text before clicking New.</source>
|
||||||
<translation>Sie haben keinen Text für Ihren Hinweistext eingegeben.
|
<translation>Sie haben keinen Text für Ihren Hinweistext eingegeben.
|
||||||
Bitte geben Sie etwas ein.</translation>
|
Bitte geben Sie etwas ein.</translation>
|
||||||
|
@ -1778,7 +1779,10 @@ Bitte beachten Sie, dass Bibeltexte von Onlinebibeln bei Bedarf heruntergeladen
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<location filename="openlp/plugins/custom/lib/mediaitem.py" line="186"/>
|
<location filename="openlp/plugins/custom/lib/mediaitem.py" line="186"/>
|
||||||
<source>Are you sure you want to delete the %n selected custom slide(s)?</source>
|
<source>Are you sure you want to delete the %n selected custom slide(s)?</source>
|
||||||
<translation><numerusform>Soll die markierte Sonderfolie wirklich gelöscht werden?</numerusform><numerusform>Sollen die markierten %n Sonderfolien wirklich gelöscht werden?</numerusform></translation>
|
<translation>
|
||||||
|
<numerusform>Soll die markierte Sonderfolie wirklich gelöscht werden?</numerusform>
|
||||||
|
<numerusform>Sollen die markierten %n Sonderfolien wirklich gelöscht werden?</numerusform>
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -2416,7 +2420,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 volunteering 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 volunteering by using the button below.</source>
|
||||||
<translation>OpenLP <version><revision> - Open Lyrics Projection
|
<translation>OpenLP <version><revision> - Open Source Lyrics Projection
|
||||||
|
|
||||||
OpenLP ist ein freies Programm für Präsentationen in Kirchen. Es können Liedtexte, Bibelverse, Videos, Bilder und Präsentationen (wenn Impress, PowerPoint oder der PowerPoint Viewer installiert sind) mittels Beamer und Computer angezeigt werden.
|
OpenLP ist ein freies Programm für Präsentationen in Kirchen. Es können Liedtexte, Bibelverse, Videos, Bilder und Präsentationen (wenn Impress, PowerPoint oder der PowerPoint Viewer installiert sind) mittels Beamer und Computer angezeigt werden.
|
||||||
|
|
||||||
|
@ -2475,7 +2479,7 @@ Translators
|
||||||
%s
|
%s
|
||||||
Japanese (ja)
|
Japanese (ja)
|
||||||
%s
|
%s
|
||||||
Norwegian Bokmål (nb)
|
Norwegian Bokmål (nb)
|
||||||
%s
|
%s
|
||||||
Dutch (nl)
|
Dutch (nl)
|
||||||
%s
|
%s
|
||||||
|
@ -2531,44 +2535,65 @@ Paketierer
|
||||||
Übersetzer
|
Übersetzer
|
||||||
Afrikaans (af)
|
Afrikaans (af)
|
||||||
%s
|
%s
|
||||||
Deutsch (de)
|
Czech (cs)
|
||||||
%s
|
%s
|
||||||
Englisch, Vereinigtes Königreich (en_GB)
|
Danish (da)
|
||||||
%s
|
%s
|
||||||
Englisch, Südafrika (en_ZA)
|
German (de)
|
||||||
%s
|
%s
|
||||||
Estnisch (et)
|
Greek (el)
|
||||||
%s
|
%s
|
||||||
Französisch (fr)
|
English, United Kingdom (en_GB)
|
||||||
%s
|
%s
|
||||||
Ungarisch (hu)
|
English, South Africa (en_ZA)
|
||||||
%s
|
%s
|
||||||
Japanisch (ja)
|
Spanish (es)
|
||||||
%s
|
%s
|
||||||
Norwegisch (nb)
|
Estonian (et)
|
||||||
%s
|
%s
|
||||||
Niederländisch (nl)
|
Finnish (fi)
|
||||||
%s
|
%s
|
||||||
Portugiesisch, Brasilien (pt_BR)
|
French (fr)
|
||||||
%s
|
%s
|
||||||
Russisch (ru)
|
Hungarian (hu)
|
||||||
|
%s
|
||||||
|
Indonesian (id)
|
||||||
|
%s
|
||||||
|
Japanese (ja)
|
||||||
|
%s
|
||||||
|
Norwegian Bokmål (nb)
|
||||||
|
%s
|
||||||
|
Dutch (nl)
|
||||||
|
%s
|
||||||
|
Polish (pl)
|
||||||
|
%s
|
||||||
|
Portuguese, Brazil (pt_BR)
|
||||||
|
%s
|
||||||
|
Russian (ru)
|
||||||
|
%s
|
||||||
|
Swedish (sv)
|
||||||
|
%s
|
||||||
|
Tamil(Sri-Lanka) (ta_LK)
|
||||||
|
%s
|
||||||
|
Chinese(China) (zh_CN)
|
||||||
%s
|
%s
|
||||||
|
|
||||||
Dokumentation
|
Documentation
|
||||||
%s
|
%s
|
||||||
|
|
||||||
Erstellt mit
|
Built With
|
||||||
Python: http://www.python.org/
|
Python: http://www.python.org/
|
||||||
Qt4: http://qt.nokia.com/
|
Qt4: http://qt.io
|
||||||
PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro
|
PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro
|
||||||
Oxygen Icons: http://oxygen-icons.org/
|
Oxygen Icons: http://techbase.kde.org/Projects/Oxygen/
|
||||||
|
MuPDF: http://www.mupdf.com/
|
||||||
|
|
||||||
Danke
|
Danke
|
||||||
»Denn so sehr hat Gott die Welt geliebt,
|
Denn so sehr hat Gott die Welt geliebt,
|
||||||
daß er seinen eingeborenen Sohn
|
daß er seinen eingeborenen Sohn
|
||||||
hingegeben hat, damit alle, die an ihn
|
hingegeben hat, damit alle, die an ihn
|
||||||
glauben, nicht verloren gehen, sondern
|
glauben, nicht verloren gehen, sondern
|
||||||
ewiges Leben haben.« -- Johannes 3, 16
|
ewiges Leben haben. -- Johannes 3, 16
|
||||||
|
|
||||||
Als Letztes, aber nicht zuletzt, geht unser
|
Als Letztes, aber nicht zuletzt, geht unser
|
||||||
Dank an Gott, unseren Vater, dafür, dass er
|
Dank an Gott, unseren Vater, dafür, dass er
|
||||||
|
@ -2580,8 +2605,8 @@ Danke
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/aboutdialog.py" line="270"/>
|
<location filename="openlp/core/ui/aboutdialog.py" line="270"/>
|
||||||
<source>Copyright © 2004-2015 %s
|
<source>Copyright © 2004-2015 %s
|
||||||
Portions copyright © 2004-2015 %s</source>
|
Portions copyright © 2004-2015 %s</source>
|
||||||
<translation>Copyright © 2004-2015 %s
|
<translation>Copyright © 2004-2015 %s
|
||||||
Teil-Copyright © 2004-2015 %s</translation>
|
Teil-Copyright © 2004-2015 %s</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3927,7 +3952,7 @@ To cancel the First Time Wizard completely (and not start OpenLP), click the %s
|
||||||
<context>
|
<context>
|
||||||
<name>OpenLP.MainDisplay</name>
|
<name>OpenLP.MainDisplay</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/maindisplay.py" line="213"/>
|
<location filename="openlp/core/ui/maindisplay.py" line="227"/>
|
||||||
<source>OpenLP Display</source>
|
<source>OpenLP Display</source>
|
||||||
<translation>OpenLP-Anzeige</translation>
|
<translation>OpenLP-Anzeige</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -6949,7 +6974,7 @@ Diese Dateien werden entfernt, wenn Sie mit dem Speichern fortfahren.</translati
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/songs/lib/ui.py" line="37"/>
|
<location filename="openlp/plugins/songs/lib/ui.py" line="37"/>
|
||||||
<source>©</source>
|
<source>©</source>
|
||||||
<comment>Copyright symbol.</comment>
|
<comment>Copyright symbol.</comment>
|
||||||
<translation>©</translation>
|
<translation>©</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -9117,7 +9142,10 @@ Er wurde wegen einem fehlenden Python-Modul deaktiviert. Wenn Sie diesen Importe
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="361"/>
|
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="361"/>
|
||||||
<source>Are you sure you want to delete the %n selected song(s)?</source>
|
<source>Are you sure you want to delete the %n selected song(s)?</source>
|
||||||
<translation><numerusform>Soll das markierte Lied wirklich gelöscht werden?</numerusform><numerusform>Sollen die markierten %n Lieder wirklich gelöscht werden?</numerusform></translation>
|
<translation>
|
||||||
|
<numerusform>Soll das markierte Lied wirklich gelöscht werden?</numerusform>
|
||||||
|
<numerusform>Sollen die markierten %n Lieder wirklich gelöscht werden?</numerusform>
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="128"/>
|
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="128"/>
|
||||||
|
@ -9762,4 +9790,4 @@ Bitte "JA" wählen um das Passwort trotzdem zu speichern oder "NE
|
||||||
<translation>Es wurden keine Duplikate gefunden.</translation>
|
<translation>Es wurden keine Duplikate gefunden.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="et" sourcelanguage="" version="2.0">
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS><TS version="2.0" language="et" sourcelanguage="">
|
||||||
<context>
|
<context>
|
||||||
<name>AlertsPlugin</name>
|
<name>AlertsPlugin</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -96,14 +97,14 @@ Kas tahad siiski jätkata?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/alerts/forms/alertform.py" line="190"/>
|
<location filename="openlp/plugins/alerts/forms/alertform.py" line="190"/>
|
||||||
<source>The alert text does not contain '<>'.
|
<source>The alert text does not contain '<>'.
|
||||||
Do you want to continue anyway?</source>
|
Do you want to continue anyway?</source>
|
||||||
<translation>Teate tekst ei sisalda '<>' märke.
|
<translation>Teate tekst ei sisalda '<>' märke.
|
||||||
Kas tahad siiski jätkata?</translation>
|
Kas tahad siiski jätkata?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/alerts/forms/alertform.py" line="107"/>
|
<location filename="openlp/plugins/alerts/forms/alertform.py" line="107"/>
|
||||||
<source>You haven't specified any text for your alert.
|
<source>You haven't specified any text for your alert.
|
||||||
Please type in some text before clicking New.</source>
|
Please type in some text before clicking New.</source>
|
||||||
<translation>Sa pole oma teatele teksti lisanud.
|
<translation>Sa pole oma teatele teksti lisanud.
|
||||||
Enne nupu Uus vajutamist sisesta mingi tekst.</translation>
|
Enne nupu Uus vajutamist sisesta mingi tekst.</translation>
|
||||||
|
@ -1777,7 +1778,10 @@ Pane tähele, et veebipiiblite salmid laaditakse internetist vajadusel, seega on
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<location filename="openlp/plugins/custom/lib/mediaitem.py" line="186"/>
|
<location filename="openlp/plugins/custom/lib/mediaitem.py" line="186"/>
|
||||||
<source>Are you sure you want to delete the %n selected custom slide(s)?</source>
|
<source>Are you sure you want to delete the %n selected custom slide(s)?</source>
|
||||||
<translation><numerusform>Kas tahad kindlasti kustutada %n valitud kohandatud slaidi?</numerusform><numerusform>Kas tahad kindlasti kustutada %n valitud kohandatud slaidi?</numerusform></translation>
|
<translation>
|
||||||
|
<numerusform>Kas tahad kindlasti kustutada %n valitud kohandatud slaidi?</numerusform>
|
||||||
|
<numerusform>Kas tahad kindlasti kustutada %n valitud kohandatud slaidi?</numerusform>
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -2415,7 +2419,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 volunteering 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 volunteering by using the button below.</source>
|
||||||
<translation>OpenLP <version><revision> - avatud lähtekoodiga laulusõnade kuvaja
|
<translation>OpenLP <version><revision> - Open Source Lyrics Projection
|
||||||
|
|
||||||
OpenLP on tasuta kiriku esitlustarkvara või laulusõnade kuvaja, mis kuvab nii laule, piiblikohti, videoid, pilte ning isegi esitlusi (kui on paigaldatud Impress, PowerPoint või PowerPoint Viewer) kasutades selleks ainult arvutit ja projektorit.
|
OpenLP on tasuta kiriku esitlustarkvara või laulusõnade kuvaja, mis kuvab nii laule, piiblikohti, videoid, pilte ning isegi esitlusi (kui on paigaldatud Impress, PowerPoint või PowerPoint Viewer) kasutades selleks ainult arvutit ja projektorit.
|
||||||
|
|
||||||
|
@ -2474,7 +2478,7 @@ Translators
|
||||||
%s
|
%s
|
||||||
Japanese (ja)
|
Japanese (ja)
|
||||||
%s
|
%s
|
||||||
Norwegian Bokmål (nb)
|
Norwegian Bokmål (nb)
|
||||||
%s
|
%s
|
||||||
Dutch (nl)
|
Dutch (nl)
|
||||||
%s
|
%s
|
||||||
|
@ -2560,6 +2564,8 @@ Norra Bokmål (nb)
|
||||||
%s
|
%s
|
||||||
Hollandi (nl)
|
Hollandi (nl)
|
||||||
%s
|
%s
|
||||||
|
Poola (pl)
|
||||||
|
%s
|
||||||
Portugali, Brasiilia (pt_BR)
|
Portugali, Brasiilia (pt_BR)
|
||||||
%s
|
%s
|
||||||
Vene (ru)
|
Vene (ru)
|
||||||
|
@ -2575,11 +2581,11 @@ Dokumentatsioon
|
||||||
%s
|
%s
|
||||||
|
|
||||||
Valmistamiseks kasutati
|
Valmistamiseks kasutati
|
||||||
Python: http://www.python.org
|
Python: http://www.python.org/
|
||||||
Qt4: http://qt.io
|
Qt4: http://qt.io
|
||||||
PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro
|
PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro
|
||||||
Oxygeni ikoonid: http://oxygen-icons.org
|
Oxygeni ikoonid: http://techbase.kde.org/Projects/Oxygen/
|
||||||
MuPDF: http://www.mupdf.com
|
MuPDF: http://www.mupdf.com/
|
||||||
|
|
||||||
Lõputänu
|
Lõputänu
|
||||||
"Sest nõnda on Jumal maailma armastanud,
|
"Sest nõnda on Jumal maailma armastanud,
|
||||||
|
@ -2595,8 +2601,8 @@ vabastanud.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/aboutdialog.py" line="270"/>
|
<location filename="openlp/core/ui/aboutdialog.py" line="270"/>
|
||||||
<source>Copyright © 2004-2015 %s
|
<source>Copyright © 2004-2015 %s
|
||||||
Portions copyright © 2004-2015 %s</source>
|
Portions copyright © 2004-2015 %s</source>
|
||||||
<translation>Autoriõigus © 2004-2015 %s
|
<translation>Autoriõigus © 2004-2015 %s
|
||||||
Osade autoriõigus © 2004-2015 %s</translation>
|
Osade autoriõigus © 2004-2015 %s</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -3955,7 +3961,7 @@ Et katkestada esmakäivituse nõustaja täielikult (ja jätta OpenLP käivitamat
|
||||||
<context>
|
<context>
|
||||||
<name>OpenLP.MainDisplay</name>
|
<name>OpenLP.MainDisplay</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/maindisplay.py" line="213"/>
|
<location filename="openlp/core/ui/maindisplay.py" line="227"/>
|
||||||
<source>OpenLP Display</source>
|
<source>OpenLP Display</source>
|
||||||
<translation>OpenLP kuva</translation>
|
<translation>OpenLP kuva</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -5402,12 +5408,12 @@ Selle lõpuga fail ei ole toetatud</translation>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/projector/manager.py" line="476"/>
|
<location filename="openlp/core/ui/projector/manager.py" line="476"/>
|
||||||
<source>Delete projector (%s) %s?</source>
|
<source>Delete projector (%s) %s?</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kas kustutada projektor (%s) %s?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/projector/manager.py" line="478"/>
|
<location filename="openlp/core/ui/projector/manager.py" line="478"/>
|
||||||
<source>Are you sure you want to delete this projector?</source>
|
<source>Are you sure you want to delete this projector?</source>
|
||||||
<translation type="unfinished"/>
|
<translation>Kas tahad kindlasti kustutada selle projektori?</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -6978,7 +6984,7 @@ Need failid eemaldatakse, kui sa otsustad siiski salvestada.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/songs/lib/ui.py" line="37"/>
|
<location filename="openlp/plugins/songs/lib/ui.py" line="37"/>
|
||||||
<source>©</source>
|
<source>©</source>
|
||||||
<comment>Copyright symbol.</comment>
|
<comment>Copyright symbol.</comment>
|
||||||
<translation>©</translation>
|
<translation>©</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -9143,7 +9149,10 @@ Palun eralda salmid tühikutega.</translation>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="361"/>
|
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="361"/>
|
||||||
<source>Are you sure you want to delete the %n selected song(s)?</source>
|
<source>Are you sure you want to delete the %n selected song(s)?</source>
|
||||||
<translation><numerusform>Kas tahad kindlasti kustutada %n valitud laulu?</numerusform><numerusform>Kas tahad kindlasti kustutada %n valitud laulu?</numerusform></translation>
|
<translation>
|
||||||
|
<numerusform>Kas tahad kindlasti kustutada %n valitud laulu?</numerusform>
|
||||||
|
<numerusform>Kas tahad kindlasti kustutada %n valitud laulu?</numerusform>
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="128"/>
|
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="128"/>
|
||||||
|
@ -9786,4 +9795,4 @@ Palun eralda salmid tühikutega.</translation>
|
||||||
<translation>Andmebaasist ei leitud ühtegi dubleerivat laulu.</translation>
|
<translation>Andmebaasist ei leitud ühtegi dubleerivat laulu.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,5 @@
|
||||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="zh_TW" sourcelanguage="" version="2.0">
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS><TS version="2.0" language="zh_TW" sourcelanguage="">
|
||||||
<context>
|
<context>
|
||||||
<name>AlertsPlugin</name>
|
<name>AlertsPlugin</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -95,14 +96,14 @@ Do you want to continue anyway?</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/alerts/forms/alertform.py" line="190"/>
|
<location filename="openlp/plugins/alerts/forms/alertform.py" line="190"/>
|
||||||
<source>The alert text does not contain '<>'.
|
<source>The alert text does not contain '<>'.
|
||||||
Do you want to continue anyway?</source>
|
Do you want to continue anyway?</source>
|
||||||
<translation>警報訊息沒有包含'<>',
|
<translation>警報訊息沒有包含'<>',
|
||||||
是否繼續?</translation>
|
是否繼續?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/alerts/forms/alertform.py" line="107"/>
|
<location filename="openlp/plugins/alerts/forms/alertform.py" line="107"/>
|
||||||
<source>You haven't specified any text for your alert.
|
<source>You haven't specified any text for your alert.
|
||||||
Please type in some text before clicking New.</source>
|
Please type in some text before clicking New.</source>
|
||||||
<translation>您尚未在警報文字欄指定任何文字。
|
<translation>您尚未在警報文字欄指定任何文字。
|
||||||
請在新建前輸入一些文字。</translation>
|
請在新建前輸入一些文字。</translation>
|
||||||
|
@ -1777,7 +1778,9 @@ Please note that verses from Web Bibles will be downloaded on demand and so an I
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<location filename="openlp/plugins/custom/lib/mediaitem.py" line="186"/>
|
<location filename="openlp/plugins/custom/lib/mediaitem.py" line="186"/>
|
||||||
<source>Are you sure you want to delete the %n selected custom slide(s)?</source>
|
<source>Are you sure you want to delete the %n selected custom slide(s)?</source>
|
||||||
<translation><numerusform>您確定想要刪除這 %n 張選中的自訂幻燈片嗎?</numerusform></translation>
|
<translation>
|
||||||
|
<numerusform>您確定想要刪除這 %n 張選中的自訂幻燈片嗎?</numerusform>
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -2417,13 +2420,13 @@ 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 volunteering 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 volunteering by using the button below.</source>
|
||||||
<translation>OpenLP <version><revision> - 開放源碼歌詞投影
|
<translation>OpenLP <version><revision> - Open Source Lyrics Projection
|
||||||
|
|
||||||
OpenLP是一個免費的教會講道軟體或歌詞投影軟體,讓教會敬拜使用電腦及投影機來顯示歌詞、聖經經節、影片、圖片,甚至演講(如果已安?Impress, PowerPoint或PowerPoint Viewer)。
|
OpenLP is free church presentation software, or lyrics projection software, used to display slides of songs, Bible verses, videos, images, and even presentations (if Impress, PowerPoint or PowerPoint Viewer is installed) for church worship using a computer and a data projector.
|
||||||
|
|
||||||
查詢更多OpenLP訊息: http://openlp.org/
|
Find out more about OpenLP: http://openlp.org/
|
||||||
|
|
||||||
OpenLP是由志願者編寫及維護。如果您想看到更多基督教軟體被編寫出來,請考慮點擊下面的按鈕來加入。</translation>
|
OpenLP is written and maintained by volunteers. If you would like to see more free Christian software being written, please consider volunteering by using the button below.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/aboutdialog.py" line="663"/>
|
<location filename="openlp/core/ui/aboutdialog.py" line="663"/>
|
||||||
|
@ -2447,6 +2450,88 @@ Testers
|
||||||
Packagers
|
Packagers
|
||||||
%s
|
%s
|
||||||
|
|
||||||
|
Translators
|
||||||
|
Afrikaans (af)
|
||||||
|
%s
|
||||||
|
Czech (cs)
|
||||||
|
%s
|
||||||
|
Danish (da)
|
||||||
|
%s
|
||||||
|
German (de)
|
||||||
|
%s
|
||||||
|
Greek (el)
|
||||||
|
%s
|
||||||
|
English, United Kingdom (en_GB)
|
||||||
|
%s
|
||||||
|
English, South Africa (en_ZA)
|
||||||
|
%s
|
||||||
|
Spanish (es)
|
||||||
|
%s
|
||||||
|
Estonian (et)
|
||||||
|
%s
|
||||||
|
Finnish (fi)
|
||||||
|
%s
|
||||||
|
French (fr)
|
||||||
|
%s
|
||||||
|
Hungarian (hu)
|
||||||
|
%s
|
||||||
|
Indonesian (id)
|
||||||
|
%s
|
||||||
|
Japanese (ja)
|
||||||
|
%s
|
||||||
|
Norwegian Bokmål (nb)
|
||||||
|
%s
|
||||||
|
Dutch (nl)
|
||||||
|
%s
|
||||||
|
Polish (pl)
|
||||||
|
%s
|
||||||
|
Portuguese, Brazil (pt_BR)
|
||||||
|
%s
|
||||||
|
Russian (ru)
|
||||||
|
%s
|
||||||
|
Swedish (sv)
|
||||||
|
%s
|
||||||
|
Tamil(Sri-Lanka) (ta_LK)
|
||||||
|
%s
|
||||||
|
Chinese(China) (zh_CN)
|
||||||
|
%s
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
%s
|
||||||
|
|
||||||
|
Built With
|
||||||
|
Python: http://www.python.org/
|
||||||
|
Qt4: http://qt.io
|
||||||
|
PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro
|
||||||
|
Oxygen Icons: http://techbase.kde.org/Projects/Oxygen/
|
||||||
|
MuPDF: http://www.mupdf.com/
|
||||||
|
|
||||||
|
Final Credit
|
||||||
|
"For God so loved the world that He gave
|
||||||
|
His one and only Son, so that whoever
|
||||||
|
believes in Him will not perish but inherit
|
||||||
|
eternal life." -- John 3:16
|
||||||
|
|
||||||
|
And last but not least, final credit goes to
|
||||||
|
God our Father, for sending His Son to die
|
||||||
|
on the cross, setting us free from sin. We
|
||||||
|
bring this software to you for free because
|
||||||
|
He has set us free.</source>
|
||||||
|
<translation>Project Lead
|
||||||
|
%s
|
||||||
|
|
||||||
|
Developers
|
||||||
|
%s
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
%s
|
||||||
|
|
||||||
|
Testers
|
||||||
|
%s
|
||||||
|
|
||||||
|
Packagers
|
||||||
|
%s
|
||||||
|
|
||||||
Translators
|
Translators
|
||||||
Afrikaans (af)
|
Afrikaans (af)
|
||||||
%s
|
%s
|
||||||
|
@ -2513,94 +2598,12 @@ Final Credit
|
||||||
God our Father, for sending His Son to die
|
God our Father, for sending His Son to die
|
||||||
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.</translation>
|
||||||
<translation>專案領導者
|
|
||||||
%s
|
|
||||||
|
|
||||||
開發群
|
|
||||||
%s
|
|
||||||
|
|
||||||
貢獻者
|
|
||||||
%s
|
|
||||||
|
|
||||||
測試群
|
|
||||||
%s
|
|
||||||
|
|
||||||
封裝
|
|
||||||
%s
|
|
||||||
|
|
||||||
翻譯群
|
|
||||||
Afrikaans (af)
|
|
||||||
%s
|
|
||||||
Czech (cs)
|
|
||||||
%s
|
|
||||||
Danish (da)
|
|
||||||
%s
|
|
||||||
German (de)
|
|
||||||
%s
|
|
||||||
Greek (el)
|
|
||||||
%s
|
|
||||||
English, United Kingdom (en_GB)
|
|
||||||
%s
|
|
||||||
English, South Africa (en_ZA)
|
|
||||||
%s
|
|
||||||
Spanish (es)
|
|
||||||
%s
|
|
||||||
Estonian (et)
|
|
||||||
%s
|
|
||||||
Finnish (fi)
|
|
||||||
%s
|
|
||||||
French (fr)
|
|
||||||
%s
|
|
||||||
Hungarian (hu)
|
|
||||||
%s
|
|
||||||
Indonesian (id)
|
|
||||||
%s
|
|
||||||
Japanese (ja)
|
|
||||||
%s
|
|
||||||
Norwegian Bokmål (nb)
|
|
||||||
%s
|
|
||||||
Dutch (nl)
|
|
||||||
%s
|
|
||||||
Polish (pl)
|
|
||||||
%s
|
|
||||||
Portuguese, Brazil (pt_BR)
|
|
||||||
%s
|
|
||||||
Russian (ru)
|
|
||||||
%s
|
|
||||||
Swedish (sv)
|
|
||||||
%s
|
|
||||||
Tamil(Sri-Lanka) (ta_LK)
|
|
||||||
%s
|
|
||||||
Chinese(China) (zh_CN)
|
|
||||||
%s
|
|
||||||
Chinese(Taiwan) (zh_TW)
|
|
||||||
%s
|
|
||||||
|
|
||||||
文件
|
|
||||||
%s
|
|
||||||
|
|
||||||
建置於
|
|
||||||
Python: http://www.python.org/
|
|
||||||
Qt4: http://qt.io
|
|
||||||
PyQt4: http://www.riverbankcomputing.co.uk/software/pyqt/intro
|
|
||||||
Oxygen Icons: http://techbase.kde.org/Projects/Oxygen/
|
|
||||||
MuPDF: http://www.mupdf.com/
|
|
||||||
|
|
||||||
最後功勞-
|
|
||||||
"For God so loved the world that He gave
|
|
||||||
His one and only Son, so that whoever
|
|
||||||
believes in Him will not perish but inherit
|
|
||||||
eternal life." -- John 3:16
|
|
||||||
"神愛世人,甚至將他的獨生子賜給他們,
|
|
||||||
叫一切信他的,不致滅亡,反得永生。 "-- 約翰福音 三:16
|
|
||||||
|
|
||||||
最後但並非最不重要的,最終要歸於我們的父神,差祂的兒子死在十字架上,使我們赦免罪。我們把這個軟件給你自由,因祂已經給我們自由。</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/aboutdialog.py" line="270"/>
|
<location filename="openlp/core/ui/aboutdialog.py" line="270"/>
|
||||||
<source>Copyright © 2004-2015 %s
|
<source>Copyright © 2004-2015 %s
|
||||||
Portions copyright © 2004-2015 %s</source>
|
Portions copyright © 2004-2015 %s</source>
|
||||||
<translation>Copyright © 2004-2015 %s⏎ 部分版權 © 2004-2015 %s</translation>
|
<translation>Copyright © 2004-2015 %s⏎ 部分版權 © 2004-2015 %s</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -3952,7 +3955,7 @@ To cancel the First Time Wizard completely (and not start OpenLP), click the %s
|
||||||
<context>
|
<context>
|
||||||
<name>OpenLP.MainDisplay</name>
|
<name>OpenLP.MainDisplay</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/maindisplay.py" line="213"/>
|
<location filename="openlp/core/ui/maindisplay.py" line="227"/>
|
||||||
<source>OpenLP Display</source>
|
<source>OpenLP Display</source>
|
||||||
<translation>OpenLP 顯示</translation>
|
<translation>OpenLP 顯示</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -5399,12 +5402,12 @@ Suffix not supported</source>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/projector/manager.py" line="476"/>
|
<location filename="openlp/core/ui/projector/manager.py" line="476"/>
|
||||||
<source>Delete projector (%s) %s?</source>
|
<source>Delete projector (%s) %s?</source>
|
||||||
<translation type="unfinished"/>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/core/ui/projector/manager.py" line="478"/>
|
<location filename="openlp/core/ui/projector/manager.py" line="478"/>
|
||||||
<source>Are you sure you want to delete this projector?</source>
|
<source>Are you sure you want to delete this projector?</source>
|
||||||
<translation type="unfinished"/>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -6975,7 +6978,7 @@ These files will be removed if you continue to save.</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/songs/lib/ui.py" line="37"/>
|
<location filename="openlp/plugins/songs/lib/ui.py" line="37"/>
|
||||||
<source>©</source>
|
<source>©</source>
|
||||||
<comment>Copyright symbol.</comment>
|
<comment>Copyright symbol.</comment>
|
||||||
<translation>©</translation>
|
<translation>©</translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -9136,7 +9139,9 @@ Please enter the verses separated by spaces.</source>
|
||||||
<message numerus="yes">
|
<message numerus="yes">
|
||||||
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="361"/>
|
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="361"/>
|
||||||
<source>Are you sure you want to delete the %n selected song(s)?</source>
|
<source>Are you sure you want to delete the %n selected song(s)?</source>
|
||||||
<translation><numerusform>您確定想要刪除這 %n 首選中的歌曲嗎?</numerusform></translation>
|
<translation>
|
||||||
|
<numerusform>您確定想要刪除這 %n 首選中的歌曲嗎?</numerusform>
|
||||||
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="128"/>
|
<location filename="openlp/plugins/songs/lib/mediaitem.py" line="128"/>
|
||||||
|
@ -9779,4 +9784,4 @@ Please enter the verses separated by spaces.</source>
|
||||||
<translation>資料庫中找不到重複的歌曲。</translation>
|
<translation>資料庫中找不到重複的歌曲。</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|
|
@ -25,7 +25,7 @@ Package to test the openlp.core.ui.media.vlcplayer package.
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from unittest import TestCase
|
from unittest import TestCase, skip
|
||||||
|
|
||||||
from openlp.core.common import Registry
|
from openlp.core.common import Registry
|
||||||
from openlp.core.ui.media import MediaState, MediaType
|
from openlp.core.ui.media import MediaState, MediaType
|
||||||
|
@ -50,6 +50,22 @@ class TestVLCPlayer(TestCase, TestMixin):
|
||||||
del sys.modules['openlp.core.ui.media.vendor.vlc']
|
del sys.modules['openlp.core.ui.media.vendor.vlc']
|
||||||
MockDateTime.revert()
|
MockDateTime.revert()
|
||||||
|
|
||||||
|
@skip('No way to test this')
|
||||||
|
@patch('openlp.core.ui.media.vlcplayer.vlc')
|
||||||
|
def get_vlc_fails_and_removes_module_test(self, mocked_vlc):
|
||||||
|
"""
|
||||||
|
Test that when the VLC import fails, it removes the module from sys.modules
|
||||||
|
"""
|
||||||
|
# GIVEN: We're on OS X and we don't have the VLC plugin path set
|
||||||
|
mocked_vlc.Instance.side_effect = NameError
|
||||||
|
mocked_vlc.libvlc_get_version.return_value = b'0.0.0'
|
||||||
|
|
||||||
|
# WHEN: An checking if the player is available
|
||||||
|
get_vlc()
|
||||||
|
|
||||||
|
# THEN: The extra environment variable should be there
|
||||||
|
self.assertNotIn('openlp.core.ui.media.vendor.vlc', sys.modules)
|
||||||
|
|
||||||
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
|
@patch('openlp.core.ui.media.vlcplayer.is_macosx')
|
||||||
def fix_vlc_22_plugin_path_test(self, mocked_is_macosx):
|
def fix_vlc_22_plugin_path_test(self, mocked_is_macosx):
|
||||||
"""
|
"""
|
||||||
|
@ -74,10 +90,6 @@ class TestVLCPlayer(TestCase, TestMixin):
|
||||||
"""
|
"""
|
||||||
# GIVEN: We're not on OS X and we don't have the VLC plugin path set
|
# GIVEN: We're not on OS X and we don't have the VLC plugin path set
|
||||||
mocked_is_macosx.return_value = False
|
mocked_is_macosx.return_value = False
|
||||||
if 'VLC_PLUGIN_PATH' in os.environ:
|
|
||||||
del os.environ['VLC_PLUGIN_PATH']
|
|
||||||
if 'openlp.core.ui.media.vendor.vlc' in sys.modules:
|
|
||||||
del sys.modules['openlp.core.ui.media.vendor.vlc']
|
|
||||||
|
|
||||||
# WHEN: An checking if the player is available
|
# WHEN: An checking if the player is available
|
||||||
get_vlc()
|
get_vlc()
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2015 OpenLP Developers #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
|
@ -0,0 +1,84 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# OpenLP - Open Source Lyrics Projection #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# Copyright (c) 2008-2015 OpenLP Developers #
|
||||||
|
# --------------------------------------------------------------------------- #
|
||||||
|
# This program is free software; you can redistribute it and/or modify it #
|
||||||
|
# under the terms of the GNU General Public License as published by the Free #
|
||||||
|
# Software Foundation; version 2 of the License. #
|
||||||
|
# #
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||||
|
# more details. #
|
||||||
|
# #
|
||||||
|
# You should have received a copy of the GNU General Public License along #
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||||
|
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||||
|
###############################################################################
|
||||||
|
"""
|
||||||
|
This module contains tests for the CSV Bible importer.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
from tests.functional import MagicMock, patch
|
||||||
|
from openlp.core.common.registry import Registry
|
||||||
|
from openlp.plugins.alerts.lib.alertsmanager import AlertsManager
|
||||||
|
|
||||||
|
|
||||||
|
class TestAlertManager(TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
"""
|
||||||
|
Create the UI
|
||||||
|
"""
|
||||||
|
Registry.create()
|
||||||
|
|
||||||
|
def remove_message_text_test(self):
|
||||||
|
"""
|
||||||
|
Test that Alerts are not triggered with empty strings
|
||||||
|
"""
|
||||||
|
# GIVEN: A valid Alert Manager
|
||||||
|
alert_manager = AlertsManager(None)
|
||||||
|
alert_manager.display_alert = MagicMock()
|
||||||
|
|
||||||
|
# WHEN: Called with an empty string
|
||||||
|
alert_manager.alert_text('')
|
||||||
|
|
||||||
|
# THEN: the display should not have been triggered
|
||||||
|
self.assertFalse(alert_manager.display_alert.called, 'The Alert should not have been called')
|
||||||
|
|
||||||
|
def trigger_message_text_test(self):
|
||||||
|
"""
|
||||||
|
Test that Alerts are triggered with a text string
|
||||||
|
"""
|
||||||
|
# GIVEN: A valid Alert Manager
|
||||||
|
alert_manager = AlertsManager(None)
|
||||||
|
alert_manager.display_alert = MagicMock()
|
||||||
|
|
||||||
|
# WHEN: Called with an empty string
|
||||||
|
alert_manager.alert_text(['This is a string'])
|
||||||
|
|
||||||
|
# THEN: the display should have been triggered
|
||||||
|
self.assertTrue(alert_manager.display_alert.called, 'The Alert should have been called')
|
||||||
|
|
||||||
|
def line_break_message_text_test(self):
|
||||||
|
"""
|
||||||
|
Test that Alerts are triggered with a text string but line breaks are removed
|
||||||
|
"""
|
||||||
|
# GIVEN: A valid Alert Manager
|
||||||
|
alert_manager = AlertsManager(None)
|
||||||
|
alert_manager.display_alert = MagicMock()
|
||||||
|
|
||||||
|
# WHEN: Called with an empty string
|
||||||
|
alert_manager.alert_text(['This is \n a string'])
|
||||||
|
|
||||||
|
# THEN: the display should have been triggered
|
||||||
|
self.assertTrue(alert_manager.display_alert.called, 'The Alert should have been called')
|
||||||
|
alert_manager.display_alert.assert_called_once_with('This is a string')
|
|
@ -22,14 +22,19 @@
|
||||||
"""
|
"""
|
||||||
This module contains tests for the ZionWorx song importer.
|
This module contains tests for the ZionWorx song importer.
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
from tests.functional import MagicMock, patch
|
from tests.functional import MagicMock, patch
|
||||||
|
from tests.helpers.songfileimport import SongImportTestHelper
|
||||||
from openlp.plugins.songs.lib.importers.zionworx import ZionWorxImport
|
from openlp.plugins.songs.lib.importers.zionworx import ZionWorxImport
|
||||||
from openlp.plugins.songs.lib.importers.songimport import SongImport
|
from openlp.plugins.songs.lib.importers.songimport import SongImport
|
||||||
from openlp.core.common import Registry
|
from openlp.core.common import Registry
|
||||||
|
|
||||||
|
TEST_PATH = os.path.abspath(
|
||||||
|
os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'zionworxsongs'))
|
||||||
|
|
||||||
|
|
||||||
class TestZionWorxImport(TestCase):
|
class TestZionWorxImport(TestCase):
|
||||||
"""
|
"""
|
||||||
|
@ -54,3 +59,18 @@ class TestZionWorxImport(TestCase):
|
||||||
|
|
||||||
# THEN: The importer should be an instance of SongImport
|
# THEN: The importer should be an instance of SongImport
|
||||||
self.assertIsInstance(importer, SongImport)
|
self.assertIsInstance(importer, SongImport)
|
||||||
|
|
||||||
|
|
||||||
|
class TestZionWorxFileImport(SongImportTestHelper):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.importer_class_name = 'ZionWorxImport'
|
||||||
|
self.importer_module_name = 'zionworx'
|
||||||
|
super(TestZionWorxFileImport, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def test_song_import(self):
|
||||||
|
"""
|
||||||
|
Test that loading an ZionWorx file works correctly on various files
|
||||||
|
"""
|
||||||
|
self.file_import(os.path.join(TEST_PATH, 'zionworx.csv'),
|
||||||
|
self.load_external_result_data(os.path.join(TEST_PATH, 'zionworx.json')))
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
"1","Crown Him With Many Crowns",,"Crown him with many crowns,
|
||||||
|
The Lamb upon His throne;
|
||||||
|
Hark, how the heavenly anthem drowns
|
||||||
|
All music but its own!
|
||||||
|
Awake, my soul, and sing
|
||||||
|
Of Him who died for thee,
|
||||||
|
And hail Him as thy matchless King
|
||||||
|
Through all eternity.
|
||||||
|
|
||||||
|
Crown Him the Lord of life,
|
||||||
|
Who triumphed o'er the grave
|
||||||
|
And rose victorious in the strife
|
||||||
|
For those He came to save:
|
||||||
|
His glories now we sing,
|
||||||
|
Who died and rose on high,
|
||||||
|
Who died eternal life to bring
|
||||||
|
And lives that death may die.
|
||||||
|
|
||||||
|
Crown Him the Lord of love;
|
||||||
|
Behold His hands and side,
|
||||||
|
Those wounds yet visible above
|
||||||
|
In beauty glorified:
|
||||||
|
No angel in the sky
|
||||||
|
Can fully bear that sight,
|
||||||
|
But downward bends His burning eye
|
||||||
|
At mysteries so bright.
|
||||||
|
|
||||||
|
Crown Him the Lord of peace,
|
||||||
|
Whose power a sceptre sways
|
||||||
|
From pole to pole, that wars may cease,
|
||||||
|
And all be prayer and praise:
|
||||||
|
His reign shall know no end,
|
||||||
|
And round His piercèd feet
|
||||||
|
Fair flowers of paradise extend
|
||||||
|
Their fragrance ever sweet.
|
||||||
|
|
||||||
|
Crown Him the Lord of years,
|
||||||
|
The Potentate of time,
|
||||||
|
Creator of the rolling spheres,
|
||||||
|
Ineffably sublime!
|
||||||
|
All hail, Redeemer, hail!
|
||||||
|
For Thou hast died for me;
|
||||||
|
Thy praise shall never, never fail
|
||||||
|
Throughout eternity.
|
||||||
|
","Matthew Bridges","Public Domain",,
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"Matthew Bridges"
|
||||||
|
],
|
||||||
|
"copyright": "Public Domain",
|
||||||
|
"title": "Crown Him With Many Crowns",
|
||||||
|
"verse_order_list": [],
|
||||||
|
"verses": [
|
||||||
|
[
|
||||||
|
"Crown him with many crowns,\nThe Lamb upon His throne;\nHark, how the heavenly anthem drowns\nAll music but its own!\nAwake, my soul, and sing\nOf Him who died for thee,\nAnd hail Him as thy matchless King\nThrough all eternity.\n",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Crown Him the Lord of life,\nWho triumphed o'er the grave\nAnd rose victorious in the strife\nFor those He came to save:\nHis glories now we sing,\nWho died and rose on high,\nWho died eternal life to bring\nAnd lives that death may die.\n",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Crown Him the Lord of love;\nBehold His hands and side,\nThose wounds yet visible above\nIn beauty glorified:\nNo angel in the sky\nCan fully bear that sight,\nBut downward bends His burning eye\nAt mysteries so bright.\n",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Crown Him the Lord of peace,\nWhose power a sceptre sways\nFrom pole to pole, that wars may cease,\nAnd all be prayer and praise:\nHis reign shall know no end,\nAnd round His piercèd feet\nFair flowers of paradise extend\nTheir fragrance ever sweet.\n",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"Crown Him the Lord of years,\nThe Potentate of time,\nCreator of the rolling spheres,\nIneffably sublime!\nAll hail, Redeemer, hail!\nFor Thou hast died for me;\nThy praise shall never, never fail\nThroughout eternity.\n",
|
||||||
|
"v"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -50,7 +50,8 @@ TAGS = [
|
||||||
['2.1.4', '2532'],
|
['2.1.4', '2532'],
|
||||||
['2.1.5', '2543'],
|
['2.1.5', '2543'],
|
||||||
['2.1.6', '2550'],
|
['2.1.6', '2550'],
|
||||||
['2.2', '2562']
|
['2.2', '2562'],
|
||||||
|
['2.2.1', '2568']
|
||||||
]
|
]
|
||||||
# Depending on the repository, we sometimes have the 2.0.x tags in the repo too. They come up with a revision number of
|
# Depending on the repository, we sometimes have the 2.0.x tags in the repo too. They come up with a revision number of
|
||||||
# "?", which I suspect is due to the fact that we're using shared repositories. This regular expression matches all
|
# "?", which I suspect is due to the fact that we're using shared repositories. This regular expression matches all
|
||||||
|
|
Loading…
Reference in New Issue