← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~m2j/openlp/i18n into lp:openlp

 

m2j has proposed merging lp:~m2j/openlp/i18n into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~m2j/openlp/i18n/+merge/44934

While walking through the German translation, I observed a couple of problems in the internationalization. These problems are addressed in this branch. There are very few changed translatable strings but a lot which will be recognized as new from linguist.
I couldn't test all calls in the importers, because I don't have bibles in all formats. But nearly all changes in this request should be obvious.
-- 
https://code.launchpad.net/~m2j/openlp/i18n/+merge/44934
Your team OpenLP Core is requested to review the proposed merge of lp:~m2j/openlp/i18n into lp:openlp.
=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py	2010-12-26 11:04:47 +0000
+++ openlp/core/lib/__init__.py	2010-12-31 02:36:08 +0000
@@ -84,7 +84,8 @@
     u'start html': u'<span style="text-decoration: underline;">',
     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.
     This abstracts the translation procedure so that we can change it if at a
@@ -101,7 +102,7 @@
         An identifying string for when the same text is used in different roles
         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):
     """
@@ -325,4 +326,4 @@
 from renderer import Renderer
 from rendermanager import RenderManager
 from mediamanageritem import MediaManagerItem
-from baselistwithdnd import BaseListWithDnD
\ No newline at end of file
+from baselistwithdnd import BaseListWithDnD

=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py	2010-12-29 09:14:13 +0000
+++ openlp/core/lib/mediamanageritem.py	2010-12-31 02:36:08 +0000
@@ -284,34 +284,30 @@
             self.listView.addAction(
                 context_menu_action(
                     self.listView, u':/general/general_edit.png',
-                    unicode(translate('OpenLP.MediaManagerItem', '&Edit %s')) %
-                    name_string[u'singular'],
+                    self.plugin.getString(StringContent.Edit)[u'title'],
                     self.onEditClick))
             self.listView.addAction(context_menu_separator(self.listView))
         if self.hasDeleteIcon:
             self.listView.addAction(
                 context_menu_action(
                     self.listView, u':/general/general_delete.png',
-                    unicode(translate('OpenLP.MediaManagerItem',
-                        '&Delete %s')) %
-                    name_string[u'singular'],
+                    self.plugin.getString(StringContent.Delete)[u'title'],
                     self.onDeleteClick))
             self.listView.addAction(context_menu_separator(self.listView))
         self.listView.addAction(
             context_menu_action(
                 self.listView, u':/general/general_preview.png',
-                unicode(translate('OpenLP.MediaManagerItem', '&Preview %s')) %
-                name_string[u'singular'],
+                self.plugin.getString(StringContent.Preview)[u'title'],
                 self.onPreviewClick))
         self.listView.addAction(
             context_menu_action(
                 self.listView, u':/general/general_live.png',
-                translate('OpenLP.MediaManagerItem', '&Show Live'),
+                self.plugin.getString(StringContent.Live)[u'title'],
                 self.onLiveClick))
         self.listView.addAction(
             context_menu_action(
                 self.listView, u':/general/general_add.png',
-                translate('OpenLP.MediaManagerItem', '&Add to Service'),
+                self.plugin.getString(StringContent.Service)[u'title'],
                 self.onAddClick))
         if self.addToServiceItem:
             self.listView.addAction(

=== modified file 'openlp/core/ui/exceptionform.py'
--- openlp/core/ui/exceptionform.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/exceptionform.py	2010-12-31 02:36:08 +0000
@@ -135,7 +135,9 @@
             '--- Please enter the report below this line. ---\n\n\n'
             '--- Exception Traceback ---\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()
         for line in content[1].split(u'\n'):
             if re.search(r'[/\\]openlp[/\\]', line):
@@ -144,4 +146,4 @@
                 exception = line.split(u'\n')[-1].split(u':')[0]
         subject = u'Bug report: %s in %s' % (exception, source)
         mailto(address=u'bugs@xxxxxxxxxx', subject=subject,
-            body=body % content)
\ No newline at end of file
+            body=body % content)

=== modified file 'openlp/core/ui/generaltab.py'
--- openlp/core/ui/generaltab.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/generaltab.py	2010-12-31 02:36:08 +0000
@@ -389,11 +389,11 @@
         settings = QtCore.QSettings()
         settings.beginGroup(self.settingsSection)
         for screen in self.screens.screen_list:
-            screen_name = u'%s %d' % (translate('OpenLP.GeneralTab', 'Screen'),
-                screen[u'number'] + 1)
+            screen_name = unicode(translate('OpenLP.GeneralTab', 'Screen %d')) \
+                % (screen[u'number'] + 1)
             if screen[u'primary']:
-                screen_name = u'%s (%s)' % (screen_name,
-                    translate('OpenLP.GeneralTab', 'primary'))
+                screen_name = unicode(translate('OpenLP.GeneralTab',
+                    '%s (primary)')) % screen_name
             self.monitorComboBox.addItem(screen_name)
         self.numberEdit.setText(unicode(settings.value(
             u'ccli number', QtCore.QVariant(u'')).toString()))
@@ -530,4 +530,4 @@
         """
         Called when the width, height, x position or y position has changed.
         """
-        self.overrideChanged = True
\ No newline at end of file
+        self.overrideChanged = True

=== modified file 'openlp/core/ui/themeform.py'
--- openlp/core/ui/themeform.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/themeform.py	2010-12-31 02:36:08 +0000
@@ -586,8 +586,7 @@
             QtGui.QMessageBox.critical(self,
                 translate('OpenLP.ThemeForm', 'Theme Name Missing'),
                 translate('OpenLP.ThemeForm',
-                    'There is no name for this theme. '
-                    'Please enter one.'),
+                    'There is no name for this theme. Please enter one.'),
                 (QtGui.QMessageBox.Ok),
                 QtGui.QMessageBox.Ok)
             return
@@ -595,8 +594,7 @@
             QtGui.QMessageBox.critical(self,
                 translate('OpenLP.ThemeForm', 'Theme Name Invalid'),
                 translate('OpenLP.ThemeForm',
-                    'Invalid theme name. '
-                    'Please enter one.'),
+                    'Invalid theme name. Please enter one.'),
                 (QtGui.QMessageBox.Ok),
                 QtGui.QMessageBox.Ok)
             return
@@ -620,4 +618,4 @@
             QtGui.QColor(field), self)
         if new_color.isValid():
             field = new_color.name()
-        return field
\ No newline at end of file
+        return field

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2010-12-26 11:04:47 +0000
+++ openlp/core/ui/thememanager.py	2010-12-31 02:36:08 +0000
@@ -223,8 +223,11 @@
         """
         Renames an existing theme to a new name
         """
-        action = unicode(translate('OpenLP.ThemeManager', 'Rename'))
-        if self._validate_theme_action(action, False):
+        if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager',
+            '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()
             oldThemeName = unicode(item.data(QtCore.Qt.UserRole).toString())
             self.fileRenameForm.fileNameEdit.setText(oldThemeName)
@@ -288,8 +291,10 @@
         """
         Delete a theme
         """
-        action = unicode(translate('OpenLP.ThemeManager', 'Delete'))
-        if self._validate_theme_action(action):
+        if self._validate_theme_action(unicode(translate('OpenLP.ThemeManager',
+            'You must select a theme to delete.')),
+            unicode(translate('OpenLP.ThemeManager', 'Delete Confirmation')),
+            unicode(translate('OpenLP.ThemeManager', 'Delete %s theme?'))):
             item = self.themeListWidget.currentItem()
             theme = unicode(item.text())
             row = self.themeListWidget.row(item)
@@ -750,7 +755,8 @@
         theme.extend_image_filename(path)
         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
         is allowed.
@@ -758,19 +764,14 @@
         self.global_theme = unicode(QtCore.QSettings().value(
             self.settingsSection + u'/global theme',
             QtCore.QVariant(u'')).toString())
-        if check_item_selected(self.themeListWidget,
-            unicode(translate('OpenLP.ThemeManager',
-            'You must select a theme to %s.')) % action):
+        if check_item_selected(self.themeListWidget, select_text):
             item = self.themeListWidget.currentItem()
             theme = unicode(item.text())
             # confirm deletion
-            answer = QtGui.QMessageBox.question(self,
-                unicode(translate('OpenLP.ThemeManager', '%s Confirmation'))
-                % action,
-                unicode(translate('OpenLP.ThemeManager', '%s %s theme?'))
-                % (action, theme),
-                QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes |
-                QtGui.QMessageBox.No), QtGui.QMessageBox.No)
+            answer = QtGui.QMessageBox.question(self, confirm_title,
+                confirm_text % theme, QtGui.QMessageBox.StandardButtons(
+                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
+                QtGui.QMessageBox.No)
             if answer == QtGui.QMessageBox.No:
                 return False
             # should be the same unless default
@@ -779,6 +780,7 @@
                     translate('OpenLP.ThemeManager', 'Error'),
                     translate('OpenLP.ThemeManager',
                         'You are unable to delete the default theme.'))
+                return False
             else:
                 if testPlugin:
                     for plugin in self.parent.pluginManager.plugins:
@@ -795,4 +797,6 @@
                         unicode(translate('OpenLP.ThemeManager',
                         'Theme %s is used by the service manager.')) % theme)
                     return False
-        return True
\ No newline at end of file
+        else:
+            return False
+        return True

=== modified file 'openlp/plugins/alerts/alertsplugin.py'
--- openlp/plugins/alerts/alertsplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/alerts/alertsplugin.py	2010-12-31 02:36:08 +0000
@@ -114,10 +114,10 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('AlertsPlugin', 'Alert'),
-            u'plural': translate('AlertsPlugin', 'Alerts')
+            u'singular': translate('AlertsPlugin', 'Alert', 'name singular'),
+            u'plural': translate('AlertsPlugin', 'Alerts', 'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('AlertsPlugin', 'Alerts')
-        }
\ No newline at end of file
+            u'title': translate('AlertsPlugin', 'Alerts', 'container title')
+        }

=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2010-12-31 02:36:08 +0000
@@ -126,53 +126,48 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('BiblesPlugin', 'Bible'),
-            u'plural': translate('BiblesPlugin', 'Bibles')
+            u'singular': translate('BiblesPlugin', 'Bible', 'name singular'),
+            u'plural': translate('BiblesPlugin', 'Bibles', 'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('BiblesPlugin', 'Bibles')
+            u'title': translate('BiblesPlugin', 'Bibles', 'container title')
         }
         # Middle Header Bar
-        ## Import Button ##
+        ## Import Action ##
         self.textStrings[StringContent.Import] = {
-            u'title': translate('BiblesPlugin', 'Import'),
-            u'tooltip': translate('BiblesPlugin',
-                'Import a Bible')
+            u'title': translate('BiblesPlugin', '&Import'),
+            u'tooltip': translate('BiblesPlugin', 'Import a Bible')
         }
-        ## New Button ##
+        ## New Action ##
         self.textStrings[StringContent.New] = {
-            u'title': translate('BiblesPlugin', 'Add'),
-            u'tooltip': translate('BiblesPlugin',
-                'Add a new Bible')
+            u'title': translate('BiblesPlugin', '&Add'),
+            u'tooltip': translate('BiblesPlugin', 'Add a new Bible')
         }
-        ## Edit Button ##
+        ## Edit Action ##
         self.textStrings[StringContent.Edit] = {
-            u'title': translate('BiblesPlugin', 'Edit'),
-            u'tooltip': translate('BiblesPlugin',
-                'Edit the selected Bible')
+            u'title': translate('BiblesPlugin', '&Edit'),
+            u'tooltip': translate('BiblesPlugin', 'Edit the selected Bible')
         }
-        ## Delete Button ##
+        ## Delete Action ##
         self.textStrings[StringContent.Delete] = {
-            u'title': translate('BiblesPlugin', 'Delete'),
-            u'tooltip': translate('BiblesPlugin',
-                'Delete the selected Bible')
+            u'title': translate('BiblesPlugin', '&Delete'),
+            u'tooltip': translate('BiblesPlugin', 'Delete the selected Bible')
         }
-        ## Preview ##
+        ## Preview Action ##
         self.textStrings[StringContent.Preview] = {
             u'title': translate('BiblesPlugin', 'Preview'),
-            u'tooltip': translate('BiblesPlugin',
-                'Preview the selected Bible')
+            u'tooltip': translate('BiblesPlugin', 'Preview the selected Bible')
         }
-        ## Live  Button ##
+        ## Send Live Action ##
         self.textStrings[StringContent.Live] = {
             u'title': translate('BiblesPlugin', 'Live'),
             u'tooltip': translate('BiblesPlugin',
                 'Send the selected Bible live')
         }
-        ## Add to service Button ##
+        ## Add to Service Action ##
         self.textStrings[StringContent.Service] = {
             u'title': translate('BiblesPlugin', 'Service'),
             u'tooltip': translate('BiblesPlugin',
                 'Add the selected Bible to the service')
-        }
\ No newline at end of file
+        }

=== modified file 'openlp/plugins/bibles/lib/csvbible.py'
--- openlp/plugins/bibles/lib/csvbible.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/csvbible.py	2010-12-31 02:36:08 +0000
@@ -92,9 +92,10 @@
                 if book_ptr != line[0]:
                     book = self.get_book(line[0])
                     book_ptr = book.name
-                    self.wizard.incrementProgressBar(u'%s %s %s...' % (
-                        translate('BiblesPlugin.CSVImport', 'Importing'),
-                        book.name, line[1]))
+                    self.wizard.incrementProgressBar(unicode(translate(
+                        'BiblesPlugin.CSVImport', 'Importing %s %s...',
+                        'Importing <book name> <chapter>...')) %
+                        (book.name, int(line[1])))
                     self.session.commit()
                 self.create_verse(book.id, line[1], line[2],
                     unicode(line[3], details['encoding']))
@@ -109,4 +110,4 @@
         if self.stop_import_flag:
             return False
         else:
-            return success
\ No newline at end of file
+            return success

=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py	2010-12-31 02:36:08 +0000
@@ -912,7 +912,7 @@
             old_chapter != chapter:
             verse_text = unicode(chapter) + verse_separator + unicode(verse)
         else:
-            verse_text = u'%s' % verse
+            verse_text = unicode(verse)
         if self.parent.settings_tab.display_style == 1:
             verse_text = u'{su}(' + verse_text + u'){/su}'
         elif self.parent.settings_tab.display_style == 2:
@@ -921,4 +921,4 @@
             verse_text = u'{su}[' + verse_text + u']{/su}'
         else:
             verse_text = u'{su}' + verse_text + u'{/su}'
-        return verse_text
\ No newline at end of file
+        return verse_text

=== modified file 'openlp/plugins/bibles/lib/openlp1.py'
--- openlp/plugins/bibles/lib/openlp1.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/openlp1.py	2010-12-31 02:36:08 +0000
@@ -73,8 +73,8 @@
             abbreviation = unicode(book[3], u'cp1252')
             self.create_book(name, abbreviation, testament_id)
             # Update the progess bar.
-            self.wizard.incrementProgressBar(u'%s %s...' % (translate(
-                'BiblesPlugin.OpenLP1Import', 'Importing'), name))
+            self.wizard.incrementProgressBar(unicode(translate(
+                'BiblesPlugin.OpenLP1Import', 'Importing %s...')) % name)
             # Import the verses for this book.
             cursor.execute(u'SELECT chapter, verse, text || \'\' AS text FROM '
                 'verse WHERE book_id=%s' % book_id)
@@ -90,4 +90,4 @@
                 Receiver.send_message(u'openlp_process_events')
             self.session.commit()
         connection.close()
-        return True
\ No newline at end of file
+        return True

=== modified file 'openlp/plugins/bibles/lib/opensong.py'
--- openlp/plugins/bibles/lib/opensong.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/opensong.py	2010-12-31 02:36:08 +0000
@@ -84,9 +84,10 @@
                             unicode(verse.text)
                         )
                         Receiver.send_message(u'openlp_process_events')
-                    self.wizard.incrementProgressBar(u'%s %s %s...' % (
-                        translate('BiblesPlugin.Opensong', 'Importing'),
-                        db_book.name, chapter.attrib[u'n']))
+                    self.wizard.incrementProgressBar(unicode(translate(
+                        'BiblesPlugin.Opensong', 'Importing %s %s...',
+                        'Importing <book name> <chapter>...')) %
+                        (db_book.name, int(chapter.attrib[u'n'])))
                     self.session.commit()
         except IOError:
             log.exception(u'Loading bible from OpenSong file failed')
@@ -97,4 +98,4 @@
         if self.stop_import_flag:
             return False
         else:
-            return success
\ No newline at end of file
+            return success

=== modified file 'openlp/plugins/bibles/lib/osis.py'
--- openlp/plugins/bibles/lib/osis.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/bibles/lib/osis.py	2010-12-31 02:36:08 +0000
@@ -140,9 +140,10 @@
                     if last_chapter != chapter:
                         if last_chapter != 0:
                             self.session.commit()
-                        self.wizard.incrementProgressBar(u'%s %s %s...' % (
-                            translate('BiblesPlugin.OsisImport', 'Importing'),
-                            self.books[match.group(1)][0], chapter))
+                        self.wizard.incrementProgressBar(unicode(translate(
+                            'BiblesPlugin.OsisImport', 'Importing %s %s...',
+                            'Importing <book name> <chapter>...')) %
+                            (self.books[match.group(1)][0], chapter))
                         last_chapter = chapter
                     # All of this rigmarol below is because the mod2osis
                     # tool from the Sword library embeds XML in the OSIS
@@ -180,4 +181,4 @@
         if self.stop_import_flag:
             return False
         else:
-            return success
\ No newline at end of file
+            return success

=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/custom/customplugin.py	2010-12-31 02:36:08 +0000
@@ -104,57 +104,57 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('CustomsPlugin', 'Custom'),
-            u'plural': translate('CustomsPlugin', 'Customs')
+            u'singular': translate('CustomsPlugin', 'Custom', 'name singular'),
+            u'plural': translate('CustomsPlugin', 'Customs', 'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('CustomsPlugin', 'Custom')
+            u'title': translate('CustomsPlugin', 'Custom', 'container title')
         }
         # Middle Header Bar
-        ## Import Button ##
+        ## Import Action ##
         self.textStrings[StringContent.Import] = {
             u'title': translate('CustomsPlugin', 'Import'),
             u'tooltip': translate('CustomsPlugin',
                 'Import a Custom')
         }
-        ## Load Button ##
+        ## Load Action ##
         self.textStrings[StringContent.Load] = {
             u'title': translate('CustomsPlugin', 'Load'),
             u'tooltip': translate('CustomsPlugin',
                 'Load a new Custom')
         }
-        ## New Button ##
+        ## New Action ##
         self.textStrings[StringContent.New] = {
             u'title': translate('CustomsPlugin', 'Add'),
             u'tooltip': translate('CustomsPlugin',
                 'Add a new Custom')
         }
-        ## Edit Button ##
+        ## Edit Action ##
         self.textStrings[StringContent.Edit] = {
             u'title': translate('CustomsPlugin', 'Edit'),
             u'tooltip': translate('CustomsPlugin',
                 'Edit the selected Custom')
         }
-        ## Delete Button ##
+        ## Delete Action ##
         self.textStrings[StringContent.Delete] = {
             u'title': translate('CustomsPlugin', 'Delete'),
             u'tooltip': translate('CustomsPlugin',
                 'Delete the selected Custom')
         }
-        ## Preview ##
+        ## Preview Action ##
         self.textStrings[StringContent.Preview] = {
             u'title': translate('CustomsPlugin', 'Preview'),
             u'tooltip': translate('CustomsPlugin',
                 'Preview the selected Custom')
         }
-        ## Live  Button ##
+        ## Send Live Action ##
         self.textStrings[StringContent.Live] = {
             u'title': translate('CustomsPlugin', 'Live'),
             u'tooltip': translate('CustomsPlugin',
                 'Send the selected Custom live')
         }
-        ## Add to service Button ##
+        ## Add to Service Action ##
         self.textStrings[StringContent.Service] = {
             u'title': translate('CustomsPlugin', 'Service'),
             u'tooltip': translate('CustomsPlugin',
@@ -167,4 +167,4 @@
         """
         log.info(u'Custom Finalising')
         self.manager.finalise()
-        Plugin.finalise(self)
\ No newline at end of file
+        Plugin.finalise(self)

=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/images/imageplugin.py	2010-12-31 02:36:08 +0000
@@ -64,12 +64,12 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('ImagePlugin', 'Image'),
-            u'plural': translate('ImagePlugin', 'Images')
+            u'singular': translate('ImagePlugin', 'Image', 'name singular'),
+            u'plural': translate('ImagePlugin', 'Images', 'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('ImagePlugin', 'Images')
+            u'title': translate('ImagePlugin', 'Images', 'container title')
         }
         # Middle Header Bar
         ## Load Button ##
@@ -113,4 +113,4 @@
             u'title': translate('ImagePlugin', 'Service'),
             u'tooltip': translate('ImagePlugin',
                 'Add the selected Image to the service')
-        }
\ No newline at end of file
+        }

=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py	2010-12-29 09:27:13 +0000
+++ openlp/plugins/images/lib/mediaitem.py	2010-12-31 02:36:08 +0000
@@ -109,7 +109,7 @@
             translate('ImagePlugin.MediaItem', 'Replace Live Background'),
             self.onReplaceClick, False)
         self.resetButton = self.toolbar.addToolbarButton(
-            translate('ImagePlugin.MediaItem', u'Reset Background'),
+            translate('ImagePlugin.MediaItem', 'Reset Background'),
             u':/system/system_close.png',
             translate('ImagePlugin.MediaItem', 'Reset Live Background'),
             self.onResetClick, False)

=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py	2010-12-29 09:27:13 +0000
+++ openlp/plugins/media/lib/mediaitem.py	2010-12-31 02:36:08 +0000
@@ -60,10 +60,9 @@
 
     def retranslateUi(self):
         self.OnNewPrompt = translate('MediaPlugin.MediaItem', 'Select Media')
-        self.OnNewFileMasks = translate('MediaPlugin.MediaItem',
-            u'Videos (%s);;'
-            u'Audio (%s);;'
-            u'All files (*)' % (self.parent.video_list, self.parent.audio_list))
+        self.OnNewFileMasks = unicode(translate('MediaPlugin.MediaItem',
+            'Videos (%s);;Audio (%s);;All files (*)')) % \
+            (self.parent.video_list, self.parent.audio_list)
 
     def requiredIcons(self):
         MediaManagerItem.requiredIcons(self)

=== modified file 'openlp/plugins/media/mediaplugin.py'
--- openlp/plugins/media/mediaplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/media/mediaplugin.py	2010-12-31 02:36:08 +0000
@@ -93,53 +93,53 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('MediaPlugin', 'Media'),
-            u'plural': translate('MediaPlugin', 'Media')
+            u'singular': translate('MediaPlugin', 'Media', 'name singular'),
+            u'plural': translate('MediaPlugin', 'Media', 'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('MediaPlugin', 'Media')
+            u'title': translate('MediaPlugin', 'Media', 'container title')
         }
         # Middle Header Bar
-        ## Load Button ##
+        ## Load Action ##
         self.textStrings[StringContent.Load] = {
             u'title': translate('MediaPlugin', 'Load'),
             u'tooltip': translate('MediaPlugin',
                 'Load a new Media')
         }
-        ## New Button ##
+        ## New Action ##
         self.textStrings[StringContent.New] = {
             u'title': translate('MediaPlugin', 'Add'),
             u'tooltip': translate('MediaPlugin',
                 'Add a new Media')
         }
-        ## Edit Button ##
+        ## Edit Action ##
         self.textStrings[StringContent.Edit] = {
             u'title': translate('MediaPlugin', 'Edit'),
             u'tooltip': translate('MediaPlugin',
                 'Edit the selected Media')
         }
-        ## Delete Button ##
+        ## Delete Action ##
         self.textStrings[StringContent.Delete] = {
             u'title': translate('MediaPlugin', 'Delete'),
             u'tooltip': translate('MediaPlugin',
                 'Delete the selected Media')
         }
-        ## Preview ##
+        ## Preview Action ##
         self.textStrings[StringContent.Preview] = {
             u'title': translate('MediaPlugin', 'Preview'),
             u'tooltip': translate('MediaPlugin',
                 'Preview the selected Media')
         }
-        ## Live  Button ##
+        ## Send Live Action ##
         self.textStrings[StringContent.Live] = {
             u'title': translate('MediaPlugin', 'Live'),
             u'tooltip': translate('MediaPlugin',
                 'Send the selected Media live')
         }
-        ## Add to service Button ##
+        ## Add to Service Action ##
         self.textStrings[StringContent.Service] = {
             u'title': translate('MediaPlugin', 'Service'),
             u'tooltip': translate('MediaPlugin',
                 'Add the selected Media to the service')
-        }
\ No newline at end of file
+        }

=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2010-12-30 09:13:39 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2010-12-31 02:36:08 +0000
@@ -90,8 +90,8 @@
                     if fileType.find(type) == -1:
                         fileType += u'*.%s ' % type
                         self.parent.serviceManager.supportedSuffixes(type)
-        self.OnNewFileMasks = translate('PresentationPlugin.MediaItem',
-            'Presentations (%s)' % fileType)
+        self.OnNewFileMasks = unicode(translate('PresentationPlugin.MediaItem',
+            'Presentations (%s)')) % fileType
 
     def requiredIcons(self):
         """

=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/presentations/presentationplugin.py	2010-12-31 02:36:08 +0000
@@ -152,41 +152,44 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('PresentationPlugin', 'Presentation'),
-            u'plural': translate('PresentationPlugin', 'Presentations')
+            u'singular': translate('PresentationPlugin', 'Presentation',
+                'name singular'),
+            u'plural': translate('PresentationPlugin', 'Presentations',
+                'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('PresentationPlugin', 'Presentations')
+            u'title': translate('PresentationPlugin', 'Presentations',
+                'container title')
         }
         # Middle Header Bar
-        ## Load Button ##
+        ## Load Action ##
         self.textStrings[StringContent.Load] = {
             u'title': translate('PresentationPlugin', 'Load'),
             u'tooltip': translate('PresentationPlugin',
                 'Load a new Presentation')
         }
-        ## Delete Button ##
+        ## Delete Action ##
         self.textStrings[StringContent.Delete] = {
             u'title': translate('PresentationPlugin', 'Delete'),
             u'tooltip': translate('PresentationPlugin',
                 'Delete the selected Presentation')
         }
-        ## Preview ##
+        ## Preview Action ##
         self.textStrings[StringContent.Preview] = {
             u'title': translate('PresentationPlugin', 'Preview'),
             u'tooltip': translate('PresentationPlugin',
                 'Preview the selected Presentation')
         }
-        ## Live  Button ##
+        ## Send Live Action ##
         self.textStrings[StringContent.Live] = {
             u'title': translate('PresentationPlugin', 'Live'),
             u'tooltip': translate('PresentationPlugin',
                 'Send the selected Presentation live')
         }
-        ## Add to service Button ##
+        ## Add to Service Action ##
         self.textStrings[StringContent.Service] = {
             u'title': translate('PresentationPlugin', 'Service'),
             u'tooltip': translate('PresentationPlugin',
                 'Add the selected Presentation to the service')
-        }
\ No newline at end of file
+        }

=== modified file 'openlp/plugins/remotes/remoteplugin.py'
--- openlp/plugins/remotes/remoteplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/remotes/remoteplugin.py	2010-12-31 02:36:08 +0000
@@ -84,10 +84,10 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('RemotePlugin', 'Remote'),
-            u'plural': translate('RemotePlugin', 'Remotes')
+            u'singular': translate('RemotePlugin', 'Remote', 'name singular'),
+            u'plural': translate('RemotePlugin', 'Remotes', 'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('RemotePlugin', 'Remote')
-        }
\ No newline at end of file
+            u'title': translate('RemotePlugin', 'Remote', 'container title')
+        }

=== modified file 'openlp/plugins/songs/forms/songmaintenanceform.py'
--- openlp/plugins/songs/forms/songmaintenanceform.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/forms/songmaintenanceform.py	2010-12-31 02:36:08 +0000
@@ -109,7 +109,7 @@
                 author_name = QtGui.QListWidgetItem(author.display_name)
             else:
                 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))
             self.AuthorsListWidget.addItem(author_name)
         if self.AuthorsListWidget.count() == 0:
@@ -305,12 +305,13 @@
                             'Could not save your changes.'))
                 elif QtGui.QMessageBox.critical(self,
                     translate('SongsPlugin.SongMaintenanceForm', 'Error'),
-                    translate('SongsPlugin.SongMaintenanceForm', 'The author %s'
-                    ' already exists. Would you like to make songs with author '
-                    '%s use the existing author %s?' % (author.display_name,
-                    temp_display_name, author.display_name)),
-                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No |
-                    QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes:
+                    unicode(translate('SongsPlugin.SongMaintenanceForm',
+                    'The author %s already exists. Would you like to make songs'
+                    ' with author %s use the existing author %s?')) %
+                    (author.display_name, temp_display_name,
+                    author.display_name), QtGui.QMessageBox.StandardButtons(
+                    QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \
+                    QtGui.QMessageBox.Yes:
                     self.mergeAuthors(author)
                     self.resetAuthors()
                     Receiver.send_message(u'songs_load_list')
@@ -346,12 +347,12 @@
                             'Could not save your changes.'))
                 elif QtGui.QMessageBox.critical(self,
                     translate('SongsPlugin.SongMaintenanceForm', 'Error'),
-                    translate('SongsPlugin.SongMaintenanceForm', 'The topic %s '
-                    'already exists. Would you like to make songs with topic %s'
-                    ' use the existing topic %s?' % (topic.name, temp_name,
-                    topic.name)),
-                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No |
-                    QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes:
+                    unicode(translate('SongsPlugin.SongMaintenanceForm',
+                    'The topic %s already exists. Would you like to make songs '
+                    'with topic %s use the existing topic %s?')) % (topic.name,
+                    temp_name, topic.name), QtGui.QMessageBox.StandardButtons(
+                    QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \
+                    QtGui.QMessageBox.Yes:
                     self.mergeTopics(topic)
                     self.resetTopics()
                 else:
@@ -389,12 +390,12 @@
                             'Could not save your changes.'))
                 elif QtGui.QMessageBox.critical(self,
                     translate('SongsPlugin.SongMaintenanceForm', 'Error'),
-                    translate('SongsPlugin.SongMaintenanceForm', 'The book %s '
-                    'already exists. Would you like to make songs with book %s '
-                    'use the existing book %s?' % (book.name, temp_name,
-                    book.name)),
-                    QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.No |
-                    QtGui.QMessageBox.Yes)) == QtGui.QMessageBox.Yes:
+                    unicode(translate('SongsPlugin.SongMaintenanceForm',
+                    'The book %s already exists. Would you like to make songs '
+                    'with book %s use the existing book %s?')) % (book.name,
+                    temp_name, book.name), QtGui.QMessageBox.StandardButtons(
+                    QtGui.QMessageBox.No | QtGui.QMessageBox.Yes)) == \
+                    QtGui.QMessageBox.Yes:
                     self.mergeBooks(book)
                     self.resetBooks()
                 else:
@@ -498,4 +499,4 @@
             translate('SongsPlugin.SongMaintenanceForm',
                 'This book cannot be deleted, it is currently '
                 'assigned to at least one song.'),
-            translate('SongsPlugin.SongMaintenanceForm', 'No book selected!'))
\ No newline at end of file
+            translate('SongsPlugin.SongMaintenanceForm', 'No book selected!'))

=== modified file 'openlp/plugins/songs/lib/cclifileimport.py'
--- openlp/plugins/songs/lib/cclifileimport.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/lib/cclifileimport.py	2010-12-31 02:36:08 +0000
@@ -29,6 +29,7 @@
 import chardet
 import codecs
 
+from openlp.core.lib import translate
 from songimport import SongImport
 
 log = logging.getLogger(__name__)
@@ -69,8 +70,9 @@
         self.import_wizard.importProgressBar.setMaximum(song_total)
         song_count = 1
         for filename in self.filenames:
-            self.import_wizard.incrementProgressBar(
-                u'Importing song %s of %s' % (song_count, song_total))
+            self.import_wizard.incrementProgressBar(unicode(translate(
+                'SongsPlugin.CCLIFileImport', 'Importing song %d of %d')) %
+                (song_count, song_total))
             filename = unicode(filename)
             log.debug(u'Importing CCLI File: %s', filename)
             lines = []
@@ -337,4 +339,4 @@
         self.copyright = song_copyright
         self.ccli_number = song_ccli
         self.comments = song_comments
-        self.finish()
\ No newline at end of file
+        self.finish()

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2010-12-28 21:41:12 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2010-12-31 02:36:08 +0000
@@ -232,7 +232,7 @@
         self.listView.clear()
         for author in searchresults:
             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.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
                 self.listView.addItem(song_name)
@@ -314,16 +314,11 @@
             translate('SongsPlugin.MediaItem',
             'You must select an item to delete.')):
             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,
                 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.Cancel),
                 QtGui.QMessageBox.Ok)

=== modified file 'openlp/plugins/songs/lib/olpimport.py'
--- openlp/plugins/songs/lib/olpimport.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/lib/olpimport.py	2010-12-31 02:36:08 +0000
@@ -34,6 +34,7 @@
     sessionmaker
 from sqlalchemy.orm.exc import UnmappedClassError
 
+from openlp.core.lib import translate
 from openlp.core.lib.db import BaseModel
 from openlp.plugins.songs.lib.db import Author, Book, Song, Topic #, MediaFile
 from songimport import SongImport
@@ -148,8 +149,9 @@
         self.import_wizard.importProgressBar.setMaximum(song_total)
         song_count = 1
         for song in source_songs:
-            self.import_wizard.incrementProgressBar(
-                u'Importing song %s of %s' % (song_count, song_total))
+            self.import_wizard.incrementProgressBar(unicode(translate(
+                'SongsPlugin.OpenLPSongImport', 'Importing song %d of %d.')) %
+                (song_count, song_total))
             new_song = Song()
             new_song.title = song.title
             if has_media_files and hasattr(song, 'alternate_title'):
@@ -220,4 +222,4 @@
             if self.stop_import_flag:
                 return False
         engine.dispose()
-        return True
\ No newline at end of file
+        return True

=== modified file 'openlp/plugins/songs/lib/songbeamerimport.py'
--- openlp/plugins/songs/lib/songbeamerimport.py	2010-12-27 08:28:33 +0000
+++ openlp/plugins/songs/lib/songbeamerimport.py	2010-12-31 02:36:08 +0000
@@ -126,17 +126,17 @@
                         if verse_start:
                             verse_start = False
                             if not self.check_verse_marks(line):
-                                self.current_verse = u'%s\n' % line
+                                self.current_verse = line + u'\n'
                         else:
-                            self.current_verse += u'%s\n' % line
+                            self.current_verse += line + u'\n'
                 if self.current_verse:
                     self.replace_html_tags()
                     self.add_verse(self.current_verse, self.current_verse_type)
                 if self.check_complete():
                     self.finish()
-                self.import_wizard.incrementProgressBar(u'%s %s...' %
-                    (translate('SongsPlugin.SongBeamerImport', 'Importing'),
-                    self.file_name))
+                self.import_wizard.incrementProgressBar(unicode(translate(
+                    'SongsPlugin.SongBeamerImport', 'Importing %s...')) %
+                    self.file_name)
             return True
 
     def replace_html_tags(self):
@@ -252,7 +252,7 @@
         elif tag_val[0] == u'#TextAlign':
             pass
         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':
             pass
         elif tag_val[0] == u'#TitleFontSize':
@@ -292,4 +292,4 @@
                     self.current_verse_type += marks[1]
             return True
         else:
-            return False
\ No newline at end of file
+            return False

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songs/songsplugin.py	2010-12-31 02:36:08 +0000
@@ -213,45 +213,45 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('SongsPlugin', 'Song'),
-            u'plural': translate('SongsPlugin', 'Songs')
+            u'singular': translate('SongsPlugin', 'Song', 'name singular'),
+            u'plural': translate('SongsPlugin', 'Songs', 'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('SongsPlugin', 'Songs')
+            u'title': translate('SongsPlugin', 'Songs', 'container title')
         }
         # Middle Header Bar
-        ## New Button ##
+        ## New Action ##
         self.textStrings[StringContent.New] = {
             u'title': translate('SongsPlugin', 'Add'),
             u'tooltip': translate('SongsPlugin',
                 'Add a new Song')
         }
-        ## Edit Button ##
+        ## Edit Action ##
         self.textStrings[StringContent.Edit] = {
             u'title': translate('SongsPlugin', 'Edit'),
             u'tooltip': translate('SongsPlugin',
                 'Edit the selected Song')
         }
-        ## Delete Button ##
+        ## Delete Action ##
         self.textStrings[StringContent.Delete] = {
             u'title': translate('SongsPlugin', 'Delete'),
             u'tooltip': translate('SongsPlugin',
                 'Delete the selected Song')
         }
-        ## Preview ##
+        ## Preview Action ##
         self.textStrings[StringContent.Preview] = {
             u'title': translate('SongsPlugin', 'Preview'),
             u'tooltip': translate('SongsPlugin',
                 'Preview the selected Song')
         }
-        ## Live  Button ##
+        ## Send Live Action ##
         self.textStrings[StringContent.Live] = {
             u'title': translate('SongsPlugin', 'Live'),
             u'tooltip': translate('SongsPlugin',
                 'Send the selected Song live')
         }
-        ## Add to service Button ##
+        ## Add to Service Action ##
         self.textStrings[StringContent.Service] = {
             u'title': translate('SongsPlugin', 'Service'),
             u'tooltip': translate('SongsPlugin',
@@ -265,4 +265,4 @@
         log.info(u'Songs Finalising')
         self.manager.finalise()
         self.toolsReindexItem.setVisible(False)
-        Plugin.finalise(self)
\ No newline at end of file
+        Plugin.finalise(self)

=== modified file 'openlp/plugins/songusage/forms/songusagedetailform.py'
--- openlp/plugins/songusage/forms/songusagedetailform.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songusage/forms/songusagedetailform.py	2010-12-31 02:36:08 +0000
@@ -73,7 +73,8 @@
 
     def accept(self):
         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.toDate.selectedDate().toString(u'ddMMyyyy'))
         usage = self.plugin.manager.get_all_objects(
@@ -95,4 +96,4 @@
         finally:
             if file:
                 file.close()
-        self.close()
\ No newline at end of file
+        self.close()

=== modified file 'openlp/plugins/songusage/songusageplugin.py'
--- openlp/plugins/songusage/songusageplugin.py	2010-12-26 11:04:47 +0000
+++ openlp/plugins/songusage/songusageplugin.py	2010-12-31 02:36:08 +0000
@@ -175,10 +175,13 @@
         """
         ## Name PluginList ##
         self.textStrings[StringContent.Name] = {
-            u'singular': translate('SongUsagePlugin', 'SongUsage'),
-            u'plural': translate('SongUsagePlugin', 'SongUsage')
+            u'singular': translate('SongUsagePlugin', 'SongUsage',
+                'name singular'),
+            u'plural': translate('SongUsagePlugin', 'SongUsage',
+                'name plural')
         }
         ## Name for MediaDockManager, SettingsManager ##
         self.textStrings[StringContent.VisibleName] = {
-            u'title': translate('SongUsagePlugin', 'SongUsage')
-        }
\ No newline at end of file
+            u'title': translate('SongUsagePlugin', 'SongUsage',
+                'container title')
+        }


Follow ups