Lots of i18n fixes and some others. In detail:

translate() expanded for numbered strings
MediaManager context menus are using the plugins strings instead of own string manipulations
Removed string manipulations from ThemeManager and fixed the delete validation                   
Added disambiguation for some plugin strings to distinguish between name plural and container title
Added or repaired translate() calls at several positions.
This commit is contained in:
M2j 2010-12-31 03:17:41 +01:00
parent d8cb06d000
commit 599ee1f7fa
29 changed files with 201 additions and 196 deletions

View File

@ -84,7 +84,8 @@ html_expands.append({u'desc': u'Underline', u'start tag': u'{u}',
u'start html': u'<span style="text-decoration: underline;">', u'start html': u'<span style="text-decoration: underline;">',
u'end tag': u'{/u}', u'end html': u'</span>', u'protected': True}) u'end tag': u'{/u}', u'end html': u'</span>', u'protected': True})
def translate(context, text, comment=None): def translate(context, text, comment=None,
encoding=QtCore.QCoreApplication.CodecForTr, n=-1):
""" """
A special shortcut method to wrap around the Qt4 translation functions. A special shortcut method to wrap around the Qt4 translation functions.
This abstracts the translation procedure so that we can change it if at a This abstracts the translation procedure so that we can change it if at a
@ -101,7 +102,7 @@ def translate(context, text, comment=None):
An identifying string for when the same text is used in different roles An identifying string for when the same text is used in different roles
within the same context. within the same context.
""" """
return QtCore.QCoreApplication.translate(context, text, comment) return QtCore.QCoreApplication.translate(context, text, comment, encoding, n)
def get_text_file_string(text_file): def get_text_file_string(text_file):
""" """
@ -325,4 +326,4 @@ from dockwidget import OpenLPDockWidget
from renderer import Renderer from renderer import Renderer
from rendermanager import RenderManager from rendermanager import RenderManager
from mediamanageritem import MediaManagerItem from mediamanageritem import MediaManagerItem
from baselistwithdnd import BaseListWithDnD from baselistwithdnd import BaseListWithDnD

View File

@ -284,34 +284,30 @@ class MediaManagerItem(QtGui.QWidget):
self.listView.addAction( self.listView.addAction(
context_menu_action( context_menu_action(
self.listView, u':/general/general_edit.png', self.listView, u':/general/general_edit.png',
unicode(translate('OpenLP.MediaManagerItem', '&Edit %s')) % self.plugin.getString(StringContent.Edit)[u'title'],
name_string[u'singular'],
self.onEditClick)) self.onEditClick))
self.listView.addAction(context_menu_separator(self.listView)) self.listView.addAction(context_menu_separator(self.listView))
if self.hasDeleteIcon: if self.hasDeleteIcon:
self.listView.addAction( self.listView.addAction(
context_menu_action( context_menu_action(
self.listView, u':/general/general_delete.png', self.listView, u':/general/general_delete.png',
unicode(translate('OpenLP.MediaManagerItem', self.plugin.getString(StringContent.Delete)[u'title'],
'&Delete %s')) %
name_string[u'singular'],
self.onDeleteClick)) self.onDeleteClick))
self.listView.addAction(context_menu_separator(self.listView)) self.listView.addAction(context_menu_separator(self.listView))
self.listView.addAction( self.listView.addAction(
context_menu_action( context_menu_action(
self.listView, u':/general/general_preview.png', self.listView, u':/general/general_preview.png',
unicode(translate('OpenLP.MediaManagerItem', '&Preview %s')) % self.plugin.getString(StringContent.Preview)[u'title'],
name_string[u'singular'],
self.onPreviewClick)) self.onPreviewClick))
self.listView.addAction( self.listView.addAction(
context_menu_action( context_menu_action(
self.listView, u':/general/general_live.png', self.listView, u':/general/general_live.png',
translate('OpenLP.MediaManagerItem', '&Show Live'), self.plugin.getString(StringContent.Live)[u'title'],
self.onLiveClick)) self.onLiveClick))
self.listView.addAction( self.listView.addAction(
context_menu_action( context_menu_action(
self.listView, u':/general/general_add.png', self.listView, u':/general/general_add.png',
translate('OpenLP.MediaManagerItem', '&Add to Service'), self.plugin.getString(StringContent.Service)[u'title'],
self.onAddClick)) self.onAddClick))
if self.addToServiceItem: if self.addToServiceItem:
self.listView.addAction( self.listView.addAction(
@ -544,4 +540,4 @@ class MediaManagerItem(QtGui.QWidget):
Method to add processing when a service has been loaded and Method to add processing when a service has been loaded and
individual service items need to be processed by the plugins individual service items need to be processed by the plugins
""" """
pass pass

View File

@ -135,7 +135,9 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog):
'--- Please enter the report below this line. ---\n\n\n' '--- Please enter the report below this line. ---\n\n\n'
'--- Exception Traceback ---\n%s\n' '--- Exception Traceback ---\n%s\n'
'--- System information ---\n%s\n' '--- System information ---\n%s\n'
'--- Library Versions ---\n%s\n')) '--- Library Versions ---\n%s\n',
'Please add the information that bug reports are favoured written '
'in English.'))
content = self._createReport() content = self._createReport()
for line in content[1].split(u'\n'): for line in content[1].split(u'\n'):
if re.search(r'[/\\]openlp[/\\]', line): if re.search(r'[/\\]openlp[/\\]', line):
@ -144,4 +146,4 @@ class ExceptionForm(QtGui.QDialog, Ui_ExceptionDialog):
exception = line.split(u'\n')[-1].split(u':')[0] exception = line.split(u'\n')[-1].split(u':')[0]
subject = u'Bug report: %s in %s' % (exception, source) subject = u'Bug report: %s in %s' % (exception, source)
mailto(address=u'bugs@openlp.org', subject=subject, mailto(address=u'bugs@openlp.org', subject=subject,
body=body % content) body=body % content)

View File

@ -389,11 +389,11 @@ class GeneralTab(SettingsTab):
settings = QtCore.QSettings() settings = QtCore.QSettings()
settings.beginGroup(self.settingsSection) settings.beginGroup(self.settingsSection)
for screen in self.screens.screen_list: for screen in self.screens.screen_list:
screen_name = u'%s %d' % (translate('OpenLP.GeneralTab', 'Screen'), screen_name = unicode(translate('OpenLP.GeneralTab', 'Screen %d')) \
screen[u'number'] + 1) % (screen[u'number'] + 1)
if screen[u'primary']: if screen[u'primary']:
screen_name = u'%s (%s)' % (screen_name, screen_name = unicode(translate('OpenLP.GeneralTab',
translate('OpenLP.GeneralTab', 'primary')) '%s (primary)')) % screen_name
self.monitorComboBox.addItem(screen_name) self.monitorComboBox.addItem(screen_name)
self.numberEdit.setText(unicode(settings.value( self.numberEdit.setText(unicode(settings.value(
u'ccli number', QtCore.QVariant(u'')).toString())) u'ccli number', QtCore.QVariant(u'')).toString()))
@ -530,4 +530,4 @@ class GeneralTab(SettingsTab):
""" """
Called when the width, height, x position or y position has changed. Called when the width, height, x position or y position has changed.
""" """
self.overrideChanged = True self.overrideChanged = True

View File

@ -586,8 +586,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
QtGui.QMessageBox.critical(self, QtGui.QMessageBox.critical(self,
translate('OpenLP.ThemeForm', 'Theme Name Missing'), translate('OpenLP.ThemeForm', 'Theme Name Missing'),
translate('OpenLP.ThemeForm', translate('OpenLP.ThemeForm',
'There is no name for this theme. ' 'There is no name for this theme. Please enter one.'),
'Please enter one.'),
(QtGui.QMessageBox.Ok), (QtGui.QMessageBox.Ok),
QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok)
return return
@ -595,8 +594,7 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
QtGui.QMessageBox.critical(self, QtGui.QMessageBox.critical(self,
translate('OpenLP.ThemeForm', 'Theme Name Invalid'), translate('OpenLP.ThemeForm', 'Theme Name Invalid'),
translate('OpenLP.ThemeForm', translate('OpenLP.ThemeForm',
'Invalid theme name. ' 'Invalid theme name. Please enter one.'),
'Please enter one.'),
(QtGui.QMessageBox.Ok), (QtGui.QMessageBox.Ok),
QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok)
return return
@ -620,4 +618,4 @@ class ThemeForm(QtGui.QWizard, Ui_ThemeWizard):
QtGui.QColor(field), self) QtGui.QColor(field), self)
if new_color.isValid(): if new_color.isValid():
field = new_color.name() field = new_color.name()
return field return field

View File

@ -223,8 +223,11 @@ class ThemeManager(QtGui.QWidget):
""" """
Renames an existing theme to a new name Renames an existing theme to a new name
""" """
action = unicode(translate('OpenLP.ThemeManager', 'Rename')) if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager',
if self._validate_theme_action(action, False): 'You must select a theme to rename.')),
unicode(translate('OpenLP.ThemeManager', 'Rename Confirmation')),
unicode(translate('OpenLP.ThemeManager', 'Rename %s theme?')),
False):
item = self.themeListWidget.currentItem() item = self.themeListWidget.currentItem()
oldThemeName = unicode(item.data(QtCore.Qt.UserRole).toString()) oldThemeName = unicode(item.data(QtCore.Qt.UserRole).toString())
self.fileRenameForm.fileNameEdit.setText(oldThemeName) self.fileRenameForm.fileNameEdit.setText(oldThemeName)
@ -288,8 +291,10 @@ class ThemeManager(QtGui.QWidget):
""" """
Delete a theme Delete a theme
""" """
action = unicode(translate('OpenLP.ThemeManager', 'Delete')) if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager',
if self._validate_theme_action(action): 'You must select a theme to delete.')),
unicode(translate('OpenLP.ThemeManager', 'Delete Confirmation')),
unicode(translate('OpenLP.ThemeManager', 'Delete %s theme?'))):
item = self.themeListWidget.currentItem() item = self.themeListWidget.currentItem()
theme = unicode(item.text()) theme = unicode(item.text())
row = self.themeListWidget.row(item) row = self.themeListWidget.row(item)
@ -750,7 +755,8 @@ class ThemeManager(QtGui.QWidget):
theme.extend_image_filename(path) theme.extend_image_filename(path)
return theme return theme
def _validate_theme_action(self, action, testPlugin=True): def _validate_theme_action(self, select_text, confirm_title, confirm_text,
testPlugin=True):
""" """
Check to see if theme has been selected and the destructive action Check to see if theme has been selected and the destructive action
is allowed. is allowed.
@ -758,19 +764,14 @@ class ThemeManager(QtGui.QWidget):
self.global_theme = unicode(QtCore.QSettings().value( self.global_theme = unicode(QtCore.QSettings().value(
self.settingsSection + u'/global theme', self.settingsSection + u'/global theme',
QtCore.QVariant(u'')).toString()) QtCore.QVariant(u'')).toString())
if check_item_selected(self.themeListWidget, if check_item_selected(self.themeListWidget, select_text):
unicode(translate('OpenLP.ThemeManager',
'You must select a theme to %s.')) % action):
item = self.themeListWidget.currentItem() item = self.themeListWidget.currentItem()
theme = unicode(item.text()) theme = unicode(item.text())
# confirm deletion # confirm deletion
answer = QtGui.QMessageBox.question(self, answer = QtGui.QMessageBox.question(self, confirm_title,
unicode(translate('OpenLP.ThemeManager', '%s Confirmation')) confirm_text % theme, QtGui.QMessageBox.StandardButtons(
% action, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
unicode(translate('OpenLP.ThemeManager', '%s %s theme?')) QtGui.QMessageBox.No)
% (action, theme),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No), QtGui.QMessageBox.No)
if answer == QtGui.QMessageBox.No: if answer == QtGui.QMessageBox.No:
return False return False
# should be the same unless default # should be the same unless default
@ -779,6 +780,7 @@ class ThemeManager(QtGui.QWidget):
translate('OpenLP.ThemeManager', 'Error'), translate('OpenLP.ThemeManager', 'Error'),
translate('OpenLP.ThemeManager', translate('OpenLP.ThemeManager',
'You are unable to delete the default theme.')) 'You are unable to delete the default theme.'))
return False
else: else:
if testPlugin: if testPlugin:
for plugin in self.parent.pluginManager.plugins: for plugin in self.parent.pluginManager.plugins:
@ -795,4 +797,6 @@ class ThemeManager(QtGui.QWidget):
unicode(translate('OpenLP.ThemeManager', unicode(translate('OpenLP.ThemeManager',
'Theme %s is used by the service manager.')) % theme) 'Theme %s is used by the service manager.')) % theme)
return False return False
return True else:
return False
return True

View File

@ -114,10 +114,10 @@ class AlertsPlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('AlertsPlugin', 'Alert'), u'singular': translate('AlertsPlugin', 'Alert', 'name singular'),
u'plural': translate('AlertsPlugin', 'Alerts') u'plural': translate('AlertsPlugin', 'Alerts', 'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('AlertsPlugin', 'Alerts') u'title': translate('AlertsPlugin', 'Alerts', 'container title')
} }

View File

@ -126,53 +126,48 @@ class BiblePlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('BiblesPlugin', 'Bible'), u'singular': translate('BiblesPlugin', 'Bible', 'name singular'),
u'plural': translate('BiblesPlugin', 'Bibles') u'plural': translate('BiblesPlugin', 'Bibles', 'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('BiblesPlugin', 'Bibles') u'title': translate('BiblesPlugin', 'Bibles', 'container title')
} }
# Middle Header Bar # Middle Header Bar
## Import Button ## ## Import Action ##
self.textStrings[StringContent.Import] = { self.textStrings[StringContent.Import] = {
u'title': translate('BiblesPlugin', 'Import'), u'title': translate('BiblesPlugin', '&Import'),
u'tooltip': translate('BiblesPlugin', u'tooltip': translate('BiblesPlugin', 'Import a Bible')
'Import a Bible')
} }
## New Button ## ## New Action ##
self.textStrings[StringContent.New] = { self.textStrings[StringContent.New] = {
u'title': translate('BiblesPlugin', 'Add'), u'title': translate('BiblesPlugin', '&Add'),
u'tooltip': translate('BiblesPlugin', u'tooltip': translate('BiblesPlugin', 'Add a new Bible')
'Add a new Bible')
} }
## Edit Button ## ## Edit Action ##
self.textStrings[StringContent.Edit] = { self.textStrings[StringContent.Edit] = {
u'title': translate('BiblesPlugin', 'Edit'), u'title': translate('BiblesPlugin', '&Edit'),
u'tooltip': translate('BiblesPlugin', u'tooltip': translate('BiblesPlugin', 'Edit the selected Bible')
'Edit the selected Bible')
} }
## Delete Button ## ## Delete Action ##
self.textStrings[StringContent.Delete] = { self.textStrings[StringContent.Delete] = {
u'title': translate('BiblesPlugin', 'Delete'), u'title': translate('BiblesPlugin', '&Delete'),
u'tooltip': translate('BiblesPlugin', u'tooltip': translate('BiblesPlugin', 'Delete the selected Bible')
'Delete the selected Bible')
} }
## Preview ## ## Preview Action ##
self.textStrings[StringContent.Preview] = { self.textStrings[StringContent.Preview] = {
u'title': translate('BiblesPlugin', 'Preview'), u'title': translate('BiblesPlugin', 'Preview'),
u'tooltip': translate('BiblesPlugin', u'tooltip': translate('BiblesPlugin', 'Preview the selected Bible')
'Preview the selected Bible')
} }
## Live Button ## ## Send Live Action ##
self.textStrings[StringContent.Live] = { self.textStrings[StringContent.Live] = {
u'title': translate('BiblesPlugin', 'Live'), u'title': translate('BiblesPlugin', 'Live'),
u'tooltip': translate('BiblesPlugin', u'tooltip': translate('BiblesPlugin',
'Send the selected Bible live') 'Send the selected Bible live')
} }
## Add to service Button ## ## Add to Service Action ##
self.textStrings[StringContent.Service] = { self.textStrings[StringContent.Service] = {
u'title': translate('BiblesPlugin', 'Service'), u'title': translate('BiblesPlugin', 'Service'),
u'tooltip': translate('BiblesPlugin', u'tooltip': translate('BiblesPlugin',
'Add the selected Bible to the service') 'Add the selected Bible to the service')
} }

View File

@ -92,9 +92,10 @@ class CSVBible(BibleDB):
if book_ptr != line[0]: if book_ptr != line[0]:
book = self.get_book(line[0]) book = self.get_book(line[0])
book_ptr = book.name book_ptr = book.name
self.wizard.incrementProgressBar(u'%s %s %s...' % ( self.wizard.incrementProgressBar(unicode(translate(
translate('BiblesPlugin.CSVImport', 'Importing'), 'BiblesPlugin.CSVImport', 'Importing %s %s...',
book.name, line[1])) 'Importing <book name> <chapter>...')) %
(book.name, int(line[1])))
self.session.commit() self.session.commit()
self.create_verse(book.id, line[1], line[2], self.create_verse(book.id, line[1], line[2],
unicode(line[3], details['encoding'])) unicode(line[3], details['encoding']))
@ -109,4 +110,4 @@ class CSVBible(BibleDB):
if self.stop_import_flag: if self.stop_import_flag:
return False return False
else: else:
return success return success

View File

@ -912,7 +912,7 @@ class BibleMediaItem(MediaManagerItem):
old_chapter != chapter: old_chapter != chapter:
verse_text = unicode(chapter) + verse_separator + unicode(verse) verse_text = unicode(chapter) + verse_separator + unicode(verse)
else: else:
verse_text = u'%s' % verse verse_text = unicode(verse)
if self.parent.settings_tab.display_style == 1: if self.parent.settings_tab.display_style == 1:
verse_text = u'{su}(' + verse_text + u'){/su}' verse_text = u'{su}(' + verse_text + u'){/su}'
elif self.parent.settings_tab.display_style == 2: elif self.parent.settings_tab.display_style == 2:
@ -921,4 +921,4 @@ class BibleMediaItem(MediaManagerItem):
verse_text = u'{su}[' + verse_text + u']{/su}' verse_text = u'{su}[' + verse_text + u']{/su}'
else: else:
verse_text = u'{su}' + verse_text + u'{/su}' verse_text = u'{su}' + verse_text + u'{/su}'
return verse_text return verse_text

View File

@ -73,8 +73,8 @@ class OpenLP1Bible(BibleDB):
abbreviation = unicode(book[3], u'cp1252') abbreviation = unicode(book[3], u'cp1252')
self.create_book(name, abbreviation, testament_id) self.create_book(name, abbreviation, testament_id)
# Update the progess bar. # Update the progess bar.
self.wizard.incrementProgressBar(u'%s %s...' % (translate( self.wizard.incrementProgressBar(unicode(translate(
'BiblesPlugin.OpenLP1Import', 'Importing'), name)) 'BiblesPlugin.OpenLP1Import', 'Importing %s...')) % name)
# Import the verses for this book. # Import the verses for this book.
cursor.execute(u'SELECT chapter, verse, text || \'\' AS text FROM ' cursor.execute(u'SELECT chapter, verse, text || \'\' AS text FROM '
'verse WHERE book_id=%s' % book_id) 'verse WHERE book_id=%s' % book_id)
@ -90,4 +90,4 @@ class OpenLP1Bible(BibleDB):
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
self.session.commit() self.session.commit()
connection.close() connection.close()
return True return True

View File

@ -84,9 +84,10 @@ class OpenSongBible(BibleDB):
unicode(verse.text) unicode(verse.text)
) )
Receiver.send_message(u'openlp_process_events') Receiver.send_message(u'openlp_process_events')
self.wizard.incrementProgressBar(u'%s %s %s...' % ( self.wizard.incrementProgressBar(unicode(translate(
translate('BiblesPlugin.Opensong', 'Importing'), 'BiblesPlugin.Opensong', 'Importing %s %s...',
db_book.name, chapter.attrib[u'n'])) 'Importing <book name> <chapter>...')) %
(db_book.name, int(chapter.attrib[u'n'])))
self.session.commit() self.session.commit()
except IOError: except IOError:
log.exception(u'Loading bible from OpenSong file failed') log.exception(u'Loading bible from OpenSong file failed')
@ -97,4 +98,4 @@ class OpenSongBible(BibleDB):
if self.stop_import_flag: if self.stop_import_flag:
return False return False
else: else:
return success return success

View File

@ -140,9 +140,10 @@ class OSISBible(BibleDB):
if last_chapter != chapter: if last_chapter != chapter:
if last_chapter != 0: if last_chapter != 0:
self.session.commit() self.session.commit()
self.wizard.incrementProgressBar(u'%s %s %s...' % ( self.wizard.incrementProgressBar(unicode(translate(
translate('BiblesPlugin.OsisImport', 'Importing'), 'BiblesPlugin.OsisImport', 'Importing %s %s...',
self.books[match.group(1)][0], chapter)) 'Importing <book name> <chapter>...')) %
(self.books[match.group(1)][0], chapter))
last_chapter = chapter last_chapter = chapter
# All of this rigmarol below is because the mod2osis # All of this rigmarol below is because the mod2osis
# tool from the Sword library embeds XML in the OSIS # tool from the Sword library embeds XML in the OSIS
@ -180,4 +181,4 @@ class OSISBible(BibleDB):
if self.stop_import_flag: if self.stop_import_flag:
return False return False
else: else:
return success return success

View File

@ -104,57 +104,57 @@ class CustomPlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('CustomsPlugin', 'Custom'), u'singular': translate('CustomsPlugin', 'Custom', 'name singular'),
u'plural': translate('CustomsPlugin', 'Customs') u'plural': translate('CustomsPlugin', 'Customs', 'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('CustomsPlugin', 'Custom') u'title': translate('CustomsPlugin', 'Custom', 'container title')
} }
# Middle Header Bar # Middle Header Bar
## Import Button ## ## Import Action ##
self.textStrings[StringContent.Import] = { self.textStrings[StringContent.Import] = {
u'title': translate('CustomsPlugin', 'Import'), u'title': translate('CustomsPlugin', 'Import'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
'Import a Custom') 'Import a Custom')
} }
## Load Button ## ## Load Action ##
self.textStrings[StringContent.Load] = { self.textStrings[StringContent.Load] = {
u'title': translate('CustomsPlugin', 'Load'), u'title': translate('CustomsPlugin', 'Load'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
'Load a new Custom') 'Load a new Custom')
} }
## New Button ## ## New Action ##
self.textStrings[StringContent.New] = { self.textStrings[StringContent.New] = {
u'title': translate('CustomsPlugin', 'Add'), u'title': translate('CustomsPlugin', 'Add'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
'Add a new Custom') 'Add a new Custom')
} }
## Edit Button ## ## Edit Action ##
self.textStrings[StringContent.Edit] = { self.textStrings[StringContent.Edit] = {
u'title': translate('CustomsPlugin', 'Edit'), u'title': translate('CustomsPlugin', 'Edit'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
'Edit the selected Custom') 'Edit the selected Custom')
} }
## Delete Button ## ## Delete Action ##
self.textStrings[StringContent.Delete] = { self.textStrings[StringContent.Delete] = {
u'title': translate('CustomsPlugin', 'Delete'), u'title': translate('CustomsPlugin', 'Delete'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
'Delete the selected Custom') 'Delete the selected Custom')
} }
## Preview ## ## Preview Action ##
self.textStrings[StringContent.Preview] = { self.textStrings[StringContent.Preview] = {
u'title': translate('CustomsPlugin', 'Preview'), u'title': translate('CustomsPlugin', 'Preview'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
'Preview the selected Custom') 'Preview the selected Custom')
} }
## Live Button ## ## Send Live Action ##
self.textStrings[StringContent.Live] = { self.textStrings[StringContent.Live] = {
u'title': translate('CustomsPlugin', 'Live'), u'title': translate('CustomsPlugin', 'Live'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
'Send the selected Custom live') 'Send the selected Custom live')
} }
## Add to service Button ## ## Add to Service Action ##
self.textStrings[StringContent.Service] = { self.textStrings[StringContent.Service] = {
u'title': translate('CustomsPlugin', 'Service'), u'title': translate('CustomsPlugin', 'Service'),
u'tooltip': translate('CustomsPlugin', u'tooltip': translate('CustomsPlugin',
@ -167,4 +167,4 @@ class CustomPlugin(Plugin):
""" """
log.info(u'Custom Finalising') log.info(u'Custom Finalising')
self.manager.finalise() self.manager.finalise()
Plugin.finalise(self) Plugin.finalise(self)

View File

@ -64,12 +64,12 @@ class ImagePlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('ImagePlugin', 'Image'), u'singular': translate('ImagePlugin', 'Image', 'name singular'),
u'plural': translate('ImagePlugin', 'Images') u'plural': translate('ImagePlugin', 'Images', 'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('ImagePlugin', 'Images') u'title': translate('ImagePlugin', 'Images', 'container title')
} }
# Middle Header Bar # Middle Header Bar
## Load Button ## ## Load Button ##
@ -113,4 +113,4 @@ class ImagePlugin(Plugin):
u'title': translate('ImagePlugin', 'Service'), u'title': translate('ImagePlugin', 'Service'),
u'tooltip': translate('ImagePlugin', u'tooltip': translate('ImagePlugin',
'Add the selected Image to the service') 'Add the selected Image to the service')
} }

View File

@ -109,7 +109,7 @@ class ImageMediaItem(MediaManagerItem):
translate('ImagePlugin.MediaItem', 'Replace Live Background'), translate('ImagePlugin.MediaItem', 'Replace Live Background'),
self.onReplaceClick, False) self.onReplaceClick, False)
self.resetButton = self.toolbar.addToolbarButton( self.resetButton = self.toolbar.addToolbarButton(
translate('ImagePlugin.MediaItem', u'Reset Background'), translate('ImagePlugin.MediaItem', 'Reset Background'),
u':/system/system_close.png', u':/system/system_close.png',
translate('ImagePlugin.MediaItem', 'Reset Live Background'), translate('ImagePlugin.MediaItem', 'Reset Live Background'),
self.onResetClick, False) self.onResetClick, False)
@ -195,4 +195,4 @@ class ImageMediaItem(MediaManagerItem):
self.resetButton.setVisible(True) self.resetButton.setVisible(True)
def onPreviewClick(self): def onPreviewClick(self):
MediaManagerItem.onPreviewClick(self) MediaManagerItem.onPreviewClick(self)

View File

@ -60,10 +60,9 @@ class MediaMediaItem(MediaManagerItem):
def retranslateUi(self): def retranslateUi(self):
self.OnNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media') self.OnNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media')
self.OnNewFileMasks = translate('MediaPlugin.MediaItem', self.OnNewFileMasks = unicode(translate('MediaPlugin.MediaItem',
u'Videos (%s);;' 'Videos (%s);;Audio (%s);;All files (*)')) % \
u'Audio (%s);;' (self.parent.video_list, self.parent.audio_list)
u'All files (*)' % (self.parent.video_list, self.parent.audio_list))
def requiredIcons(self): def requiredIcons(self):
MediaManagerItem.requiredIcons(self) MediaManagerItem.requiredIcons(self)
@ -159,4 +158,4 @@ class MediaMediaItem(MediaManagerItem):
img = QtGui.QPixmap(u':/media/media_video.png').toImage() img = QtGui.QPixmap(u':/media/media_video.png').toImage()
item_name.setIcon(build_icon(img)) item_name.setIcon(build_icon(img))
item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file)) item_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(file))
self.listView.addItem(item_name) self.listView.addItem(item_name)

View File

@ -93,53 +93,53 @@ class MediaPlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('MediaPlugin', 'Media'), u'singular': translate('MediaPlugin', 'Media', 'name singular'),
u'plural': translate('MediaPlugin', 'Media') u'plural': translate('MediaPlugin', 'Media', 'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('MediaPlugin', 'Media') u'title': translate('MediaPlugin', 'Media', 'container title')
} }
# Middle Header Bar # Middle Header Bar
## Load Button ## ## Load Action ##
self.textStrings[StringContent.Load] = { self.textStrings[StringContent.Load] = {
u'title': translate('MediaPlugin', 'Load'), u'title': translate('MediaPlugin', 'Load'),
u'tooltip': translate('MediaPlugin', u'tooltip': translate('MediaPlugin',
'Load a new Media') 'Load a new Media')
} }
## New Button ## ## New Action ##
self.textStrings[StringContent.New] = { self.textStrings[StringContent.New] = {
u'title': translate('MediaPlugin', 'Add'), u'title': translate('MediaPlugin', 'Add'),
u'tooltip': translate('MediaPlugin', u'tooltip': translate('MediaPlugin',
'Add a new Media') 'Add a new Media')
} }
## Edit Button ## ## Edit Action ##
self.textStrings[StringContent.Edit] = { self.textStrings[StringContent.Edit] = {
u'title': translate('MediaPlugin', 'Edit'), u'title': translate('MediaPlugin', 'Edit'),
u'tooltip': translate('MediaPlugin', u'tooltip': translate('MediaPlugin',
'Edit the selected Media') 'Edit the selected Media')
} }
## Delete Button ## ## Delete Action ##
self.textStrings[StringContent.Delete] = { self.textStrings[StringContent.Delete] = {
u'title': translate('MediaPlugin', 'Delete'), u'title': translate('MediaPlugin', 'Delete'),
u'tooltip': translate('MediaPlugin', u'tooltip': translate('MediaPlugin',
'Delete the selected Media') 'Delete the selected Media')
} }
## Preview ## ## Preview Action ##
self.textStrings[StringContent.Preview] = { self.textStrings[StringContent.Preview] = {
u'title': translate('MediaPlugin', 'Preview'), u'title': translate('MediaPlugin', 'Preview'),
u'tooltip': translate('MediaPlugin', u'tooltip': translate('MediaPlugin',
'Preview the selected Media') 'Preview the selected Media')
} }
## Live Button ## ## Send Live Action ##
self.textStrings[StringContent.Live] = { self.textStrings[StringContent.Live] = {
u'title': translate('MediaPlugin', 'Live'), u'title': translate('MediaPlugin', 'Live'),
u'tooltip': translate('MediaPlugin', u'tooltip': translate('MediaPlugin',
'Send the selected Media live') 'Send the selected Media live')
} }
## Add to service Button ## ## Add to Service Action ##
self.textStrings[StringContent.Service] = { self.textStrings[StringContent.Service] = {
u'title': translate('MediaPlugin', 'Service'), u'title': translate('MediaPlugin', 'Service'),
u'tooltip': translate('MediaPlugin', u'tooltip': translate('MediaPlugin',
'Add the selected Media to the service') 'Add the selected Media to the service')
} }

View File

@ -90,8 +90,8 @@ class PresentationMediaItem(MediaManagerItem):
if fileType.find(type) == -1: if fileType.find(type) == -1:
fileType += u'*.%s ' % type fileType += u'*.%s ' % type
self.parent.serviceManager.supportedSuffixes(type) self.parent.serviceManager.supportedSuffixes(type)
self.OnNewFileMasks = translate('PresentationPlugin.MediaItem', self.OnNewFileMasks = unicode(translate('PresentationPlugin.MediaItem',
'Presentations (%s)' % fileType) 'Presentations (%s)')) % fileType
def requiredIcons(self): def requiredIcons(self):
""" """
@ -293,4 +293,4 @@ class PresentationMediaItem(MediaManagerItem):
if self.controllers[controller].enabled(): if self.controllers[controller].enabled():
if filetype in self.controllers[controller].alsosupports: if filetype in self.controllers[controller].alsosupports:
return controller return controller
return None return None

View File

@ -152,41 +152,44 @@ class PresentationPlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('PresentationPlugin', 'Presentation'), u'singular': translate('PresentationPlugin', 'Presentation',
u'plural': translate('PresentationPlugin', 'Presentations') 'name singular'),
u'plural': translate('PresentationPlugin', 'Presentations',
'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('PresentationPlugin', 'Presentations') u'title': translate('PresentationPlugin', 'Presentations',
'container title')
} }
# Middle Header Bar # Middle Header Bar
## Load Button ## ## Load Action ##
self.textStrings[StringContent.Load] = { self.textStrings[StringContent.Load] = {
u'title': translate('PresentationPlugin', 'Load'), u'title': translate('PresentationPlugin', 'Load'),
u'tooltip': translate('PresentationPlugin', u'tooltip': translate('PresentationPlugin',
'Load a new Presentation') 'Load a new Presentation')
} }
## Delete Button ## ## Delete Action ##
self.textStrings[StringContent.Delete] = { self.textStrings[StringContent.Delete] = {
u'title': translate('PresentationPlugin', 'Delete'), u'title': translate('PresentationPlugin', 'Delete'),
u'tooltip': translate('PresentationPlugin', u'tooltip': translate('PresentationPlugin',
'Delete the selected Presentation') 'Delete the selected Presentation')
} }
## Preview ## ## Preview Action ##
self.textStrings[StringContent.Preview] = { self.textStrings[StringContent.Preview] = {
u'title': translate('PresentationPlugin', 'Preview'), u'title': translate('PresentationPlugin', 'Preview'),
u'tooltip': translate('PresentationPlugin', u'tooltip': translate('PresentationPlugin',
'Preview the selected Presentation') 'Preview the selected Presentation')
} }
## Live Button ## ## Send Live Action ##
self.textStrings[StringContent.Live] = { self.textStrings[StringContent.Live] = {
u'title': translate('PresentationPlugin', 'Live'), u'title': translate('PresentationPlugin', 'Live'),
u'tooltip': translate('PresentationPlugin', u'tooltip': translate('PresentationPlugin',
'Send the selected Presentation live') 'Send the selected Presentation live')
} }
## Add to service Button ## ## Add to Service Action ##
self.textStrings[StringContent.Service] = { self.textStrings[StringContent.Service] = {
u'title': translate('PresentationPlugin', 'Service'), u'title': translate('PresentationPlugin', 'Service'),
u'tooltip': translate('PresentationPlugin', u'tooltip': translate('PresentationPlugin',
'Add the selected Presentation to the service') 'Add the selected Presentation to the service')
} }

View File

@ -84,10 +84,10 @@ class RemotesPlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('RemotePlugin', 'Remote'), u'singular': translate('RemotePlugin', 'Remote', 'name singular'),
u'plural': translate('RemotePlugin', 'Remotes') u'plural': translate('RemotePlugin', 'Remotes', 'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('RemotePlugin', 'Remote') u'title': translate('RemotePlugin', 'Remote', 'container title')
} }

View File

@ -109,7 +109,7 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
author_name = QtGui.QListWidgetItem(author.display_name) author_name = QtGui.QListWidgetItem(author.display_name)
else: else:
author_name = QtGui.QListWidgetItem( author_name = QtGui.QListWidgetItem(
u'%s %s' % (author.first_name, author.last_name)) u' '.join(author.first_name, author.last_name))
author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id)) author_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(author.id))
self.AuthorsListWidget.addItem(author_name) self.AuthorsListWidget.addItem(author_name)
if self.AuthorsListWidget.count() == 0: if self.AuthorsListWidget.count() == 0:
@ -305,12 +305,13 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
'Could not save your changes.')) 'Could not save your changes.'))
elif QtGui.QMessageBox.critical(self, elif QtGui.QMessageBox.critical(self,
translate('SongsPlugin.SongMaintenanceForm', 'Error'), translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm', 'The author %s' unicode(translate('SongsPlugin.SongMaintenanceForm',
' already exists. Would you like to make songs with author ' 'The author %s already exists. Would you like to make songs'
'%s use the existing author %s?' % (author.display_name, ' with author %s use the existing author %s?')) %
temp_display_name, author.display_name)), (author.display_name, temp_display_name,
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | author.display_name), QtGui.QMessageBox.StandardButtons(
QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes: QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \
QtGui.QMessageBox.Yes:
self.mergeAuthors(author) self.mergeAuthors(author)
self.resetAuthors() self.resetAuthors()
Receiver.send_message(u'songs_load_list') Receiver.send_message(u'songs_load_list')
@ -346,12 +347,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
'Could not save your changes.')) 'Could not save your changes.'))
elif QtGui.QMessageBox.critical(self, elif QtGui.QMessageBox.critical(self,
translate('SongsPlugin.SongMaintenanceForm', 'Error'), translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm', 'The topic %s ' unicode(translate('SongsPlugin.SongMaintenanceForm',
'already exists. Would you like to make songs with topic %s' 'The topic %s already exists. Would you like to make songs '
' use the existing topic %s?' % (topic.name, temp_name, 'with topic %s use the existing topic %s?')) % (topic.name,
topic.name)), temp_name, topic.name), QtGui.QMessageBox.StandardButtons(
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \
QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes: QtGui.QMessageBox.Yes:
self.mergeTopics(topic) self.mergeTopics(topic)
self.resetTopics() self.resetTopics()
else: else:
@ -389,12 +390,12 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
'Could not save your changes.')) 'Could not save your changes.'))
elif QtGui.QMessageBox.critical(self, elif QtGui.QMessageBox.critical(self,
translate('SongsPlugin.SongMaintenanceForm', 'Error'), translate('SongsPlugin.SongMaintenanceForm', 'Error'),
translate('SongsPlugin.SongMaintenanceForm', 'The book %s ' unicode(translate('SongsPlugin.SongMaintenanceForm',
'already exists. Would you like to make songs with book %s ' 'The book %s already exists. Would you like to make songs '
'use the existing book %s?' % (book.name, temp_name, 'with book %s use the existing book %s?')) % (book.name,
book.name)), temp_name, book.name), QtGui.QMessageBox.StandardButtons(
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No | QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \
QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes: QtGui.QMessageBox.Yes:
self.mergeBooks(book) self.mergeBooks(book)
self.resetBooks() self.resetBooks()
else: else:
@ -498,4 +499,4 @@ class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
translate('SongsPlugin.SongMaintenanceForm', translate('SongsPlugin.SongMaintenanceForm',
'This book cannot be deleted, it is currently ' 'This book cannot be deleted, it is currently '
'assigned to at least one song.'), 'assigned to at least one song.'),
translate('SongsPlugin.SongMaintenanceForm', 'No book selected!')) translate('SongsPlugin.SongMaintenanceForm', 'No book selected!'))

View File

@ -29,6 +29,7 @@ import os
import chardet import chardet
import codecs import codecs
from openlp.core.lib import translate
from songimport import SongImport from songimport import SongImport
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -69,8 +70,9 @@ class CCLIFileImport(SongImport):
self.import_wizard.importProgressBar.setMaximum(song_total) self.import_wizard.importProgressBar.setMaximum(song_total)
song_count = 1 song_count = 1
for filename in self.filenames: for filename in self.filenames:
self.import_wizard.incrementProgressBar( self.import_wizard.incrementProgressBar(unicode(translate(
u'Importing song %s of %s' % (song_count, song_total)) 'SongsPlugin.CCLIFileImport', 'Importing song %d of %d')) %
(song_count, song_total))
filename = unicode(filename) filename = unicode(filename)
log.debug(u'Importing CCLI File: %s', filename) log.debug(u'Importing CCLI File: %s', filename)
lines = [] lines = []
@ -337,4 +339,4 @@ class CCLIFileImport(SongImport):
self.copyright = song_copyright self.copyright = song_copyright
self.ccli_number = song_ccli self.ccli_number = song_ccli
self.comments = song_comments self.comments = song_comments
self.finish() self.finish()

View File

@ -235,7 +235,7 @@ class SongMediaItem(MediaManagerItem):
self.listView.clear() self.listView.clear()
for author in searchresults: for author in searchresults:
for song in author.songs: for song in author.songs:
song_detail = '%s (%s)' % (author.display_name, song.title) song_detail = u'%s (%s)' % (author.display_name, song.title)
song_name = QtGui.QListWidgetItem(song_detail) song_name = QtGui.QListWidgetItem(song_detail)
song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id)) song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
self.listView.addItem(song_name) self.listView.addItem(song_name)
@ -315,16 +315,11 @@ class SongMediaItem(MediaManagerItem):
translate('SongsPlugin.MediaItem', translate('SongsPlugin.MediaItem',
'You must select an item to delete.')): 'You must select an item to delete.')):
items = self.listView.selectedIndexes() items = self.listView.selectedIndexes()
if len(items) == 1:
del_message = translate('SongsPlugin.MediaItem',
'Are you sure you want to delete the selected song?')
else:
del_message = unicode(translate('SongsPlugin.MediaItem',
'Are you sure you want to delete the %d selected '
'songs?')) % len(items)
ans = QtGui.QMessageBox.question(self, ans = QtGui.QMessageBox.question(self,
translate('SongsPlugin.MediaItem', 'Delete Song(s)?'), translate('SongsPlugin.MediaItem', 'Delete Song(s)?'),
del_message, translate('SongsPlugin.MediaItem',
'Are you sure you want to delete the %n selected song(s)?', '',
QtCore.QCoreApplication.CodecForTr, len(items)),
QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok| QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok|
QtGui.QMessageBox.Cancel), QtGui.QMessageBox.Cancel),
QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok)
@ -457,4 +452,4 @@ class SongMediaItem(MediaManagerItem):
""" """
Locale aware collation of song titles Locale aware collation of song titles
""" """
return locale.strcoll(unicode(song_1.title), unicode(song_2.title)) return locale.strcoll(unicode(song_1.title), unicode(song_2.title))

View File

@ -34,6 +34,7 @@ from sqlalchemy.orm import class_mapper, mapper, relation, scoped_session, \
sessionmaker sessionmaker
from sqlalchemy.orm.exc import UnmappedClassError from sqlalchemy.orm.exc import UnmappedClassError
from openlp.core.lib import translate
from openlp.core.lib.db import BaseModel from openlp.core.lib.db import BaseModel
from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile
from songimport import SongImport from songimport import SongImport
@ -148,8 +149,9 @@ class OpenLPSongImport(SongImport):
self.import_wizard.importProgressBar.setMaximum(song_total) self.import_wizard.importProgressBar.setMaximum(song_total)
song_count = 1 song_count = 1
for song in source_songs: for song in source_songs:
self.import_wizard.incrementProgressBar( self.import_wizard.incrementProgressBar(unicode(translate(
u'Importing song %s of %s' % (song_count, song_total)) 'SongsPlugin.OpenLPSongImport', 'Importing song %d of %d.')) %
(song_count, song_total))
new_song = Song() new_song = Song()
new_song.title = song.title new_song.title = song.title
if has_media_files and hasattr(song, 'alternate_title'): if has_media_files and hasattr(song, 'alternate_title'):
@ -220,4 +222,4 @@ class OpenLPSongImport(SongImport):
if self.stop_import_flag: if self.stop_import_flag:
return False return False
engine.dispose() engine.dispose()
return True return True

View File

@ -126,17 +126,17 @@ class SongBeamerImport(SongImport):
if verse_start: if verse_start:
verse_start = False verse_start = False
if not self.check_verse_marks(line): if not self.check_verse_marks(line):
self.current_verse = u'%s\n' % line self.current_verse = line + u'\n'
else: else:
self.current_verse += u'%s\n' % line self.current_verse += line + u'\n'
if self.current_verse: if self.current_verse:
self.replace_html_tags() self.replace_html_tags()
self.add_verse(self.current_verse, self.current_verse_type) self.add_verse(self.current_verse, self.current_verse_type)
if self.check_complete(): if self.check_complete():
self.finish() self.finish()
self.import_wizard.incrementProgressBar(u'%s %s...' % self.import_wizard.incrementProgressBar(unicode(translate(
(translate('SongsPlugin.SongBeamerImport', 'Importing'), 'SongsPlugin.SongBeamerImport', 'Importing %s...')) %
self.file_name)) self.file_name)
return True return True
def replace_html_tags(self): def replace_html_tags(self):
@ -252,7 +252,7 @@ class SongBeamerImport(SongImport):
elif tag_val[0] == u'#TextAlign': elif tag_val[0] == u'#TextAlign':
pass pass
elif tag_val[0] == u'#Title': elif tag_val[0] == u'#Title':
self.title = u'%s' % tag_val[1] self.title = unicode(tag_val[1])
elif tag_val[0] == u'#TitleAlign': elif tag_val[0] == u'#TitleAlign':
pass pass
elif tag_val[0] == u'#TitleFontSize': elif tag_val[0] == u'#TitleFontSize':
@ -292,4 +292,4 @@ class SongBeamerImport(SongImport):
self.current_verse_type += marks[1] self.current_verse_type += marks[1]
return True return True
else: else:
return False return False

View File

@ -213,45 +213,45 @@ class SongsPlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('SongsPlugin', 'Song'), u'singular': translate('SongsPlugin', 'Song', 'name singular'),
u'plural': translate('SongsPlugin', 'Songs') u'plural': translate('SongsPlugin', 'Songs', 'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('SongsPlugin', 'Songs') u'title': translate('SongsPlugin', 'Songs', 'container title')
} }
# Middle Header Bar # Middle Header Bar
## New Button ## ## New Action ##
self.textStrings[StringContent.New] = { self.textStrings[StringContent.New] = {
u'title': translate('SongsPlugin', 'Add'), u'title': translate('SongsPlugin', 'Add'),
u'tooltip': translate('SongsPlugin', u'tooltip': translate('SongsPlugin',
'Add a new Song') 'Add a new Song')
} }
## Edit Button ## ## Edit Action ##
self.textStrings[StringContent.Edit] = { self.textStrings[StringContent.Edit] = {
u'title': translate('SongsPlugin', 'Edit'), u'title': translate('SongsPlugin', 'Edit'),
u'tooltip': translate('SongsPlugin', u'tooltip': translate('SongsPlugin',
'Edit the selected Song') 'Edit the selected Song')
} }
## Delete Button ## ## Delete Action ##
self.textStrings[StringContent.Delete] = { self.textStrings[StringContent.Delete] = {
u'title': translate('SongsPlugin', 'Delete'), u'title': translate('SongsPlugin', 'Delete'),
u'tooltip': translate('SongsPlugin', u'tooltip': translate('SongsPlugin',
'Delete the selected Song') 'Delete the selected Song')
} }
## Preview ## ## Preview Action ##
self.textStrings[StringContent.Preview] = { self.textStrings[StringContent.Preview] = {
u'title': translate('SongsPlugin', 'Preview'), u'title': translate('SongsPlugin', 'Preview'),
u'tooltip': translate('SongsPlugin', u'tooltip': translate('SongsPlugin',
'Preview the selected Song') 'Preview the selected Song')
} }
## Live Button ## ## Send Live Action ##
self.textStrings[StringContent.Live] = { self.textStrings[StringContent.Live] = {
u'title': translate('SongsPlugin', 'Live'), u'title': translate('SongsPlugin', 'Live'),
u'tooltip': translate('SongsPlugin', u'tooltip': translate('SongsPlugin',
'Send the selected Song live') 'Send the selected Song live')
} }
## Add to service Button ## ## Add to Service Action ##
self.textStrings[StringContent.Service] = { self.textStrings[StringContent.Service] = {
u'title': translate('SongsPlugin', 'Service'), u'title': translate('SongsPlugin', 'Service'),
u'tooltip': translate('SongsPlugin', u'tooltip': translate('SongsPlugin',
@ -265,4 +265,4 @@ class SongsPlugin(Plugin):
log.info(u'Songs Finalising') log.info(u'Songs Finalising')
self.manager.finalise() self.manager.finalise()
self.toolsReindexItem.setVisible(False) self.toolsReindexItem.setVisible(False)
Plugin.finalise(self) Plugin.finalise(self)

View File

@ -73,7 +73,8 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog):
def accept(self): def accept(self):
log.debug(u'Detailed report generated') log.debug(u'Detailed report generated')
filename = u'usage_detail_%s_%s.txt' % ( filename = unicode(translate('SongUsagePlugin.SongUsageDetailForm',
'usage_detail_%s_%s.txt')) % (
self.fromDate.selectedDate().toString(u'ddMMyyyy'), self.fromDate.selectedDate().toString(u'ddMMyyyy'),
self.toDate.selectedDate().toString(u'ddMMyyyy')) self.toDate.selectedDate().toString(u'ddMMyyyy'))
usage = self.plugin.manager.get_all_objects( usage = self.plugin.manager.get_all_objects(
@ -95,4 +96,4 @@ class SongUsageDetailForm(QtGui.QDialog, Ui_SongUsageDetailDialog):
finally: finally:
if file: if file:
file.close() file.close()
self.close() self.close()

View File

@ -175,10 +175,13 @@ class SongUsagePlugin(Plugin):
""" """
## Name PluginList ## ## Name PluginList ##
self.textStrings[StringContent.Name] = { self.textStrings[StringContent.Name] = {
u'singular': translate('SongUsagePlugin', 'SongUsage'), u'singular': translate('SongUsagePlugin', 'SongUsage',
u'plural': translate('SongUsagePlugin', 'SongUsage') 'name singular'),
u'plural': translate('SongUsagePlugin', 'SongUsage',
'name plural')
} }
## Name for MediaDockManager, SettingsManager ## ## Name for MediaDockManager, SettingsManager ##
self.textStrings[StringContent.VisibleName] = { self.textStrings[StringContent.VisibleName] = {
u'title': translate('SongUsagePlugin', 'SongUsage') u'title': translate('SongUsagePlugin', 'SongUsage',
} 'container title')
}