← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~crichter/openlp/bugfixing into lp:openlp

 

rimach has proposed merging lp:~crichter/openlp/bugfixing into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)


- commandline options now can be combined
- better output what script currently do
- extended output with new option -v (Verbose)
- all available translation will be automatically detected from pootle server
- script can now be started without any parameter:
  -> in this case the following steps will be done:
  => Download all available translation files
  => Generate openlp.pro file
  => Update the translation files
  => Generate the related *.qm files

-- 
https://code.launchpad.net/~crichter/openlp/bugfixing/+merge/28222
Your team OpenLP Core is requested to review the proposed merge of lp:~crichter/openlp/bugfixing into lp:openlp.
=== modified file 'resources/i18n/openlp_en.ts'
--- resources/i18n/openlp_en.ts	2010-06-21 16:43:59 +0000
+++ resources/i18n/openlp_en.ts	2010-06-22 17:44:29 +0000
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="en">
+<!DOCTYPE TS><TS version="1.1">
 <context>
     <name>AboutForm</name>
     <message>
@@ -64,8 +63,8 @@
     </message>
     <message>
         <location filename="openlp/core/ui/aboutdialog.py" line="171"/>
-        <source>Copyright © 2004-2010 Raoul Snyman
-Portions copyright © 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard
+        <source>Copyright &#xa9; 2004-2010 Raoul Snyman
+Portions copyright &#xa9; 2004-2010 Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon Tibble, Carsten Tinggaard
 
 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License.
 
@@ -230,6 +229,11 @@
         <source>Show an alert message</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/alerts/alertsplugin.py" line="97"/>
+        <source>&lt;b&gt;Alerts Plugin&lt;/b&gt;&lt;br&gt;This plugin controls the displaying of alerts on the presentations screen</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>AlertsPlugin.AlertForm</name>
@@ -261,7 +265,7 @@
     <message>
         <location filename="openlp/plugins/alerts/forms/alertdialog.py" line="160"/>
         <source>&amp;Delete</source>
-        <translation type="unfinished">&amp;Delete</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/alerts/forms/alertdialog.py" line="162"/>
@@ -290,6 +294,14 @@
     </message>
 </context>
 <context>
+    <name>AlertsPlugin.AlertsManager</name>
+    <message>
+        <location filename="openlp/plugins/alerts/lib/alertsmanager.py" line="95"/>
+        <source>Alert message created and delayed</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AlertsPlugin.AlertsTab</name>
     <message>
         <location filename="openlp/plugins/alerts/lib/alertstab.py" line="41"/>
@@ -691,7 +703,12 @@
 <context>
     <name>BiblePlugin</name>
     <message>
-        <location filename="openlp/plugins/bibles/bibleplugin.py" line="73"/>
+        <location filename="openlp/plugins/bibles/bibleplugin.py" line="93"/>
+        <source>&lt;strong&gt;Bible Plugin&lt;/strong&gt;&lt;br /&gt;This plugin allows bible verses from different sources to be displayed on the screen during the service.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/bibleplugin.py" line="84"/>
         <source>&amp;Bible</source>
         <translation type="unfinished"></translation>
     </message>
@@ -709,6 +726,11 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/lib/biblestab.py" line="154"/>
+        <source>Only show new chapter numbers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/lib/biblestab.py" line="157"/>
         <source>Layout Style:</source>
         <translation type="unfinished"></translation>
@@ -765,6 +787,15 @@
     </message>
 </context>
 <context>
+    <name>BiblesPlugin.BiblesTab</name>
+    <message>
+        <location filename="openlp/plugins/bibles/lib/biblestab.py" line="177"/>
+        <source>Note:
+Changes don&apos;t affect verses already in the service</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>BiblesPlugin.ImportWizardForm</name>
     <message>
         <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="311"/>
@@ -772,6 +803,26 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="313"/>
+        <source>Welcome to the Bible Import Wizard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="317"/>
+        <source>This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="322"/>
+        <source>Select Import Source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="324"/>
+        <source>Select the import format, and where to import from.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="327"/>
         <source>Format:</source>
         <translation type="unfinished"></translation>
@@ -857,11 +908,21 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="362"/>
+        <source>Proxy Server (Optional)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="366"/>
         <source>License Details</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="368"/>
+        <source>Set up the Bible&apos;s license details.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="371"/>
         <source>Version Name:</source>
         <translation type="unfinished"></translation>
@@ -882,11 +943,86 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="379"/>
+        <source>Please wait while your Bible is imported.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="382"/>
         <source>Ready.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="125"/>
+        <source>Invalid Bible Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="125"/>
+        <source>You need to specify a file to import your Bible from.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="136"/>
+        <source>Invalid Books File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="136"/>
+        <source>You need to specify a file with books of the Bible to use in the import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="146"/>
+        <source>Invalid Verse File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="146"/>
+        <source>You need to specify a file of Bible verses to import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="158"/>
+        <source>Invalid OpenSong Bible</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="158"/>
+        <source>You need to specify an OpenSong Bible file to import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="174"/>
+        <source>Empty Version Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="174"/>
+        <source>You need to specify a version name for your Bible.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="184"/>
+        <source>Empty Copyright</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="184"/>
+        <source>You need to set a copyright for your Bible! Bibles in the Public Domain need to be marked as such.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="195"/>
+        <source>Bible Exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="195"/>
+        <source>This Bible already exists! Please import a different Bible or first delete the existing one.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="226"/>
         <source>Open OSIS File</source>
         <translation type="unfinished"></translation>
@@ -897,6 +1033,11 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="242"/>
+        <source>Open Verses CSV File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="251"/>
         <source>Open OpenSong Bible</source>
         <translation type="unfinished"></translation>
@@ -906,6 +1047,16 @@
         <source>Starting import...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="447"/>
+        <source>Finished import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="451"/>
+        <source>Your Bible import failed.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>BiblesPlugin.MediaItem</name>
@@ -1005,6 +1156,11 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/bibles/lib/mediaitem.py" line="387"/>
+        <source>No matching book could be found in this Bible.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/bibles/lib/mediaitem.py" line="560"/>
         <source>etc</source>
         <translation type="unfinished"></translation>
@@ -1024,6 +1180,14 @@
     </message>
 </context>
 <context>
+    <name>CustomPlugin</name>
+    <message>
+        <location filename="openlp/plugins/custom/customplugin.py" line="70"/>
+        <source>&lt;b&gt;Custom Plugin&lt;/b&gt;&lt;br&gt;This plugin allows slides to be displayed on the screen in the same way songs are. This plugin provides greater freedom over the songs plugin.&lt;br&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CustomPlugin.CustomTab</name>
     <message>
         <location filename="openlp/plugins/custom/lib/customtab.py" line="39"/>
@@ -1031,6 +1195,11 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/custom/lib/customtab.py" line="58"/>
+        <source>Custom Display</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/custom/lib/customtab.py" line="60"/>
         <source>Display Footer</source>
         <translation type="unfinished"></translation>
@@ -1139,22 +1308,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="89"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="88"/>
         <source>Save &amp;&amp; Preview</source>
-        <translation type="unfinished">Save &amp;&amp; Preview</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="152"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="151"/>
         <source>Error</source>
-        <translation type="unfinished">Error</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="272"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="271"/>
         <source>You need to enter a title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="277"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="276"/>
         <source>You need to enter a slide</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1166,11 +1335,21 @@
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/custom/lib/mediaitem.py" line="121"/>
+        <source>You must select an item to edit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/custom/lib/mediaitem.py" line="133"/>
+        <source>You must select an item to delete.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CustomPlugin.editCustomForm</name>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="281"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="280"/>
         <source>You have unsaved data, please save or clear</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1263,7 +1442,7 @@
     <message>
         <location filename="openlp/core/ui/generaltab.py" line="201"/>
         <source>CCLI Number:</source>
-        <translation type="unfinished">CCLI number:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/core/ui/generaltab.py" line="189"/>
@@ -1930,6 +2109,11 @@
         <source>Invalid Service Item</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/core/lib/mediamanageritem.py" line="492"/>
+        <source>You must select a %s service item.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MediaPlugin</name>
@@ -1960,7 +2144,7 @@
 <context>
     <name>OpenLP</name>
     <message>
-        <location filename="openlp/core/utils/__init__.py" line="194"/>
+        <location filename="openlp/core/utils/__init__.py" line="208"/>
         <source>Image Files</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2024,22 +2208,78 @@
     </message>
 </context>
 <context>
+    <name>PresentationPlugin</name>
+    <message>
+        <location filename="openlp/plugins/presentations/presentationplugin.py" line="111"/>
+        <source>&lt;b&gt;Presentation Plugin&lt;/b&gt; &lt;br&gt; Delivers the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PresentationPlugin.MediaItem</name>
     <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="64"/>
+        <source>Presentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="68"/>
+        <source>Select Presentation(s)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="70"/>
+        <source>Automatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="108"/>
         <source>Present using:</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="141"/>
+        <source>File exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="141"/>
+        <source>A presentation with that filename already exists.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="180"/>
+        <source>You must select an item to delete.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PresentationPlugin.PresentationTab</name>
     <message>
+        <location filename="openlp/plugins/presentations/lib/presentationtab.py" line="40"/>
+        <source>Presentations</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/presentationtab.py" line="92"/>
+        <source>Available Controllers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/presentations/lib/presentationtab.py" line="98"/>
         <source>available</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>RemotePlugin</name>
+    <message>
+        <location filename="openlp/plugins/remotes/remoteplugin.py" line="72"/>
+        <source>&lt;b&gt;Remote Plugin&lt;/b&gt;&lt;br&gt;This plugin provides the ability to send messages to a running version of openlp on a different computer via a web browser or other app&lt;br&gt;The Primary use for this would be to send alerts from a creche</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RemotePlugin.RemoteTab</name>
     <message>
         <location filename="openlp/plugins/remotes/lib/remotetab.py" line="39"/>
@@ -2230,7 +2470,7 @@
     <message>
         <location filename="openlp/core/ui/servicemanager.py" line="709"/>
         <source>Error</source>
-        <translation type="unfinished">Error</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/core/ui/servicemanager.py" line="674"/>
@@ -2359,6 +2599,108 @@
     </message>
 </context>
 <context>
+    <name>SongUsagePlugin</name>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="66"/>
+        <source>&amp;Delete recorded data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="86"/>
+        <source>Start/Stop live song usage recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="161"/>
+        <source>&lt;b&gt;SongUsage Plugin&lt;/b&gt;&lt;br&gt;This plugin records the use of songs and when they have been used during a live service</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="68"/>
+        <source>Delete song usage to specified date</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="75"/>
+        <source>Generate report on Song Usage</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="84"/>
+        <source>Song Usage Status</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="73"/>
+        <source>&amp;Extract recorded data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="62"/>
+        <source>&amp;Song Usage</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SongsPlugin</name>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="93"/>
+        <source>&amp;Song</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="95"/>
+        <source>Import songs using the import wizard.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="102"/>
+        <source>Songs of Fellowship (temp menu item)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="109"/>
+        <source>Import songs from the VOLS1_2.RTF, sof3words.rtf and sof4words.rtf supplied with the music books</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="118"/>
+        <source>Generic Document/Presentation Import (temp menu item)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="126"/>
+        <source>Import songs from Word/Writer/Powerpoint/Impress</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="156"/>
+        <source>Open Songs of Fellowship file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="166"/>
+        <source>Import Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="166"/>
+        <source>Error importing Songs of Fellowship file.
+OpenOffice.org must be installed and you must be using an unedited copy of the RTF included with the Songs of Fellowship Music Editions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="179"/>
+        <source>Open documents or presentations</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="188"/>
+        <source>&lt;strong&gt;Song Plugin&lt;/strong&gt;&lt;br /&gt;This plugin allows songs to be managed and displayed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>SongsPlugin.AuditDeleteDialog</name>
     <message>
         <location filename="openlp/plugins/songusage/forms/songusagedeletedialog.py" line="61"/>
@@ -2369,6 +2711,11 @@
 <context>
     <name>SongsPlugin.AuditDetailDialog</name>
     <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedetaildialog.py" line="89"/>
+        <source>Song Usage Extraction</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/songusage/forms/songusagedetaildialog.py" line="92"/>
         <source>Select Date Range</source>
         <translation type="unfinished"></translation>
@@ -2389,42 +2736,42 @@
     <message>
         <location filename="openlp/plugins/songs/forms/authorsdialog.py" line="77"/>
         <source>Author Maintenance</source>
-        <translation>Author Maintenance</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/authorsdialog.py" line="79"/>
         <source>Display name:</source>
-        <translation>&amp;Display name:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/authorsdialog.py" line="81"/>
         <source>First name:</source>
-        <translation>&amp;First name:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/authorsdialog.py" line="83"/>
         <source>Last name:</source>
-        <translation>&amp;Last name:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/authorsform.py" line="98"/>
         <source>Error</source>
-        <translation>Error</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/authorsform.py" line="82"/>
         <source>You need to type in the first name of the author.</source>
-        <translation>You need to type in the first name of the author.</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/authorsform.py" line="90"/>
         <source>You need to type in the last name of the author.</source>
-        <translation>You need to type in the last name of the author.</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/authorsform.py" line="98"/>
         <source>You haven&apos;t set a display name for the author, would you like me to combine the first and last names for you?</source>
-        <translation>You haven&apos;t set a display name for the author, would you like me to combine the first and last names for you?</translation>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -2432,222 +2779,222 @@
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="438"/>
         <source>Song Editor</source>
-        <translation>Song Editor</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="440"/>
         <source>&amp;Title:</source>
-        <translation>&amp;Title:</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/>
+        <source>Alt&amp;ernate Title:</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="444"/>
         <source>&amp;Lyrics:</source>
-        <translation>&amp;Lyrics:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="446"/>
         <source>&amp;Verse Order:</source>
-        <translation>&amp;Verse order:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="448"/>
         <source>&amp;Add</source>
-        <translation>&amp;Add</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="450"/>
         <source>&amp;Edit</source>
-        <translation>&amp;Edit</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="452"/>
         <source>Ed&amp;it All</source>
-        <translation>Ed&amp;it All</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="454"/>
         <source>&amp;Delete</source>
-        <translation>&amp;Delete</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="456"/>
         <source>Title &amp;&amp; Lyrics</source>
-        <translation>Title &amp;&amp; Lyrics</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="459"/>
         <source>Authors</source>
-        <translation>Authors</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="461"/>
         <source>&amp;Add to Song</source>
-        <translation>&amp;Add to Song</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="463"/>
         <source>&amp;Remove</source>
-        <translation>&amp;Remove</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="465"/>
         <source>&amp;Manage Authors, Topics, Books</source>
-        <translation>&amp;Manage Authors, Topics, Books</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="467"/>
         <source>Topic</source>
-        <translation>Topic</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="469"/>
         <source>A&amp;dd to Song</source>
-        <translation>A&amp;dd to Song</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="471"/>
         <source>R&amp;emove</source>
-        <translation>R&amp;emove</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="473"/>
         <source>Song Book</source>
-        <translation>Song Book</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="475"/>
         <source>Authors, Topics &amp;&amp; Book</source>
-        <translation>Authors, Topics &amp;&amp; Book</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="478"/>
         <source>Theme</source>
-        <translation>Theme</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="480"/>
+        <source>New &amp;Theme</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="482"/>
         <source>Copyright Information</source>
-        <translation>Copyright Information</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="484"/>
+        <source>&#xa9;</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="486"/>
         <source>CCLI Number:</source>
-        <translation>CCLI number:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="488"/>
         <source>Comments</source>
-        <translation>Comments</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="490"/>
         <source>Theme, Copyright Info &amp;&amp; Comments</source>
-        <translation>Theme, Copyright Info &amp;&amp; Comments</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/editsongform.py" line="98"/>
+        <source>Save &amp;&amp; Preview</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="284"/>
         <source>Add Author</source>
-        <translation>Add Author</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="284"/>
         <source>This author does not exist, do you want to add them?</source>
-        <translation>This author does not exist, do you want to add them?</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="312"/>
         <source>No Author Selected</source>
-        <translation>No Author Selected</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="312"/>
         <source>You have not selected a valid author. Either select an author from the list, or type in a new author and click the &quot;Add Author to Song&quot; button to add the new author.</source>
-        <translation>You have not selected a valid author. Either select an author from the list, or type in a new author and click the &quot;Add Author to Song&quot; button to add the new author.</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="337"/>
         <source>Add Topic</source>
-        <translation>Add Topic</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="337"/>
         <source>This topic does not exist, do you want to add it?</source>
-        <translation>This topic does not exist, do you want to add it?</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="363"/>
         <source>No Topic Selected</source>
-        <translation>No Topic Selected</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="363"/>
         <source>You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the &quot;Add Topic to Song&quot; button to add the new topic.</source>
-        <translation>You have not selected a valid topic. Either select a topic from the list, or type in a new topic and click the &quot;add Topic to Song&quot; button to add the new topic.</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="387"/>
         <source>Add Book</source>
-        <translation>Add Book</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="387"/>
         <source>This song book does not exist, do you want to add it?</source>
-        <translation>This song book does not exist, do you want to add it?</translation>
-    </message>
-    <message>
-        <location filename="openlp/plugins/songs/forms/editsongform.py" line="566"/>
-        <source>The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s.</source>
-        <translation>The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s.</translation>
-    </message>
-    <message>
-        <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="442"/>
-        <source>Alt&amp;ernate Title:</source>
-        <translation>Alt&amp;ernate Title:</translation>
-    </message>
-    <message>
-        <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="480"/>
-        <source>New &amp;Theme</source>
-        <translation>New &amp;Theme</translation>
-    </message>
-    <message>
-        <location filename="openlp/plugins/songs/forms/editsongdialog.py" line="484"/>
-        <source>©</source>
-        <translation>©</translation>
-    </message>
-    <message>
-        <location filename="openlp/plugins/songs/forms/editsongform.py" line="98"/>
-        <source>Save &amp;&amp; Preview</source>
-        <translation>Save &amp;&amp; Preview</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="566"/>
         <source>Error</source>
-        <translation>Error</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="518"/>
         <source>You need to type in a song title.</source>
-        <translation>You need to type in a song title.</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="526"/>
         <source>You need to type in at least one verse.</source>
-        <translation>You need to type in at least one verse.</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="577"/>
         <source>Warning</source>
-        <translation>Warning</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="534"/>
         <source>You have not added any authors for this song. Do you want to add an author now?</source>
-        <translation>You have not added any authors for this song. Do you want to add an author now?</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/editsongform.py" line="566"/>
+        <source>The verse order is invalid. There is no verse corresponding to %s. Valid entries are %s.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editsongform.py" line="577"/>
         <source>You have not used %s anywhere in the verse order. Are you sure you want to save the song like this?</source>
-        <translation>You have not used %s anywhere in the verse order. Are you sure you want to save the song like this?</translation>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -2655,17 +3002,17 @@
     <message>
         <location filename="openlp/plugins/songs/forms/editversedialog.py" line="89"/>
         <source>Edit Verse</source>
-        <translation>Edit Verse</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editversedialog.py" line="91"/>
         <source>&amp;Verse type:</source>
-        <translation>&amp;Verse type:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/editversedialog.py" line="107"/>
         <source>&amp;Insert</source>
-        <translation>&amp;Insert</translation>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -2711,6 +3058,11 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/songs/forms/songimportform.py" line="194"/>
+        <source>Starting import...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/songs/forms/songimportwizard.py" line="232"/>
         <source>Song Import Wizard</source>
         <translation type="unfinished"></translation>
@@ -2800,11 +3152,6 @@
         <source>%p%</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="openlp/plugins/songs/forms/songimportform.py" line="194"/>
-        <source>Starting import...</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>SongsPlugin.MediaItem</name>
@@ -2816,7 +3163,12 @@
     <message>
         <location filename="openlp/plugins/songs/lib/mediaitem.py" line="71"/>
         <source>Song Maintenance</source>
-        <translation type="unfinished">Song Maintenance</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="71"/>
+        <source>Maintain the lists of authors, topics and books</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/lib/mediaitem.py" line="143"/>
@@ -2851,7 +3203,7 @@
     <message>
         <location filename="openlp/plugins/songs/lib/mediaitem.py" line="157"/>
         <source>Authors</source>
-        <translation type="unfinished">Authors</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/lib/mediaitem.py" line="209"/>
@@ -2859,6 +3211,26 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="282"/>
+        <source>You must select an item to edit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="293"/>
+        <source>You must select an item to delete.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="297"/>
+        <source>Delete song?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="300"/>
+        <source>Delete %d songs?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/songs/lib/mediaitem.py" line="303"/>
         <source>Delete Confirmation</source>
         <translation type="unfinished"></translation>
@@ -2874,27 +3246,27 @@
     <message>
         <location filename="openlp/plugins/songs/forms/songbookdialog.py" line="69"/>
         <source>Edit Book</source>
-        <translation>Edit Book</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songbookdialog.py" line="71"/>
         <source>&amp;Name:</source>
-        <translation>&amp;Name:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songbookdialog.py" line="72"/>
         <source>&amp;Publisher:</source>
-        <translation>&amp;Publisher:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songbookform.py" line="52"/>
         <source>Error</source>
-        <translation>Error</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songbookform.py" line="52"/>
         <source>You need to type in a name for the book.</source>
-        <translation>You need to type in a name for the book.</translation>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -2902,37 +3274,72 @@
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenancedialog.py" line="213"/>
         <source>Song Maintenance</source>
-        <translation>Song Maintenance</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenancedialog.py" line="215"/>
         <source>Authors</source>
-        <translation>Authors</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenancedialog.py" line="217"/>
         <source>Topics</source>
-        <translation>Topics</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenancedialog.py" line="219"/>
         <source>Books/Hymnals</source>
-        <translation>Books/Hymnals</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenancedialog.py" line="233"/>
         <source>&amp;Add</source>
-        <translation>&amp;Add</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenancedialog.py" line="235"/>
         <source>&amp;Edit</source>
-        <translation>&amp;Edit</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenancedialog.py" line="237"/>
         <source>&amp;Delete</source>
-        <translation>&amp;Delete</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="229"/>
+        <source>Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="139"/>
+        <source>Couldn&apos;t add your author.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="151"/>
+        <source>Couldn&apos;t add your topic.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="165"/>
+        <source>Couldn&apos;t add your book.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="195"/>
+        <source>Couldn&apos;t save your author.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="211"/>
+        <source>Couldn&apos;t save your topic.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="229"/>
+        <source>Couldn&apos;t save your book.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="239"/>
@@ -2940,22 +3347,83 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="239"/>
+        <source>Are you sure you want to delete the selected author?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="239"/>
+        <source>This author can&apos;t be deleted, they are currently assigned to at least one song.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="239"/>
+        <source>No author selected!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="255"/>
         <source>Delete Topic</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="255"/>
+        <source>Are you sure you want to delete the selected topic?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="255"/>
+        <source>This topic can&apos;t be deleted, it is currently assigned to at least one song.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="255"/>
+        <source>No topic selected!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="271"/>
         <source>Delete Book</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="271"/>
+        <source>Are you sure you want to delete the selected book?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="271"/>
+        <source>This book can&apos;t be deleted, it is currently assigned to at least one song.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="271"/>
         <source>No book selected!</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>SongsPlugin.SongUsageDeleteForm</name>
+    <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedeleteform.py" line="44"/>
+        <source>Delete Selected Song Usage Events?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedeleteform.py" line="44"/>
+        <source>Are you sure you want to delete selected Song Usage data?</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SongsPlugin.SongUsageDetailForm</name>
+    <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedetailform.py" line="63"/>
+        <source>Output File Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>SongsPlugin.SongsTab</name>
     <message>
         <location filename="openlp/plugins/songs/lib/songstab.py" line="39"/>
@@ -2972,6 +3440,11 @@
         <source>Enable search as you type</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/songstab.py" line="68"/>
+        <source>Display Verses on Live Tool bar</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SongsPlugin.TopicsForm</name>
@@ -2988,7 +3461,12 @@
     <message>
         <location filename="openlp/plugins/songs/forms/topicsform.py" line="51"/>
         <source>Error</source>
-        <translation type="unfinished">Error</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/topicsform.py" line="51"/>
+        <source>You need to type in a topic name!</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -3019,7 +3497,7 @@
     <message>
         <location filename="openlp/core/ui/thememanager.py" line="448"/>
         <source>Error</source>
-        <translation type="unfinished">Error</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="openlp/core/ui/thememanager.py" line="59"/>

=== modified file 'resources/i18n/openlp_et.ts'
--- resources/i18n/openlp_et.ts	2010-06-21 16:43:59 +0000
+++ resources/i18n/openlp_et.ts	2010-06-22 17:44:29 +0000
@@ -262,6 +262,11 @@
         <source>Show an alert message</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/alerts/alertsplugin.py" line="97"/>
+        <source>&lt;b&gt;Alerts Plugin&lt;/b&gt;&lt;br&gt;This plugin controls the displaying of alerts on the presentations screen</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>AlertsPlugin.AlertForm</name>
@@ -322,6 +327,14 @@
     </message>
 </context>
 <context>
+    <name>AlertsPlugin.AlertsManager</name>
+    <message>
+        <location filename="openlp/plugins/alerts/lib/alertsmanager.py" line="95"/>
+        <source>Alert message created and delayed</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AlertsPlugin.AlertsTab</name>
     <message>
         <location filename="openlp/plugins/alerts/lib/alertstab.py" line="41"/>
@@ -723,10 +736,15 @@
 <context>
     <name>BiblePlugin</name>
     <message>
-        <location filename="openlp/plugins/bibles/bibleplugin.py" line="73"/>
+        <location filename="openlp/plugins/bibles/bibleplugin.py" line="84"/>
         <source>&amp;Bible</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/bibles/bibleplugin.py" line="93"/>
+        <source>&lt;strong&gt;Bible Plugin&lt;/strong&gt;&lt;br /&gt;This plugin allows bible verses from different sources to be displayed on the screen during the service.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>BiblesPlugin,BiblesTab</name>
@@ -795,6 +813,20 @@
         <source>Display Dual Bible Verses</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/bibles/lib/biblestab.py" line="154"/>
+        <source>Only show new chapter numbers</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>BiblesPlugin.BiblesTab</name>
+    <message>
+        <location filename="openlp/plugins/bibles/lib/biblestab.py" line="177"/>
+        <source>Note:
+Changes don&apos;t affect verses already in the service</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>BiblesPlugin.ImportWizardForm</name>
@@ -938,6 +970,126 @@
         <source>Starting import...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="313"/>
+        <source>Welcome to the Bible Import Wizard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="317"/>
+        <source>This wizard will help you to import Bibles from a variety of formats. Click the next button below to start the process by selecting a format to import from.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="322"/>
+        <source>Select Import Source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="324"/>
+        <source>Select the import format, and where to import from.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="362"/>
+        <source>Proxy Server (Optional)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="368"/>
+        <source>Set up the Bible&apos;s license details.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/bibleimportwizard.py" line="379"/>
+        <source>Please wait while your Bible is imported.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="125"/>
+        <source>Invalid Bible Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="125"/>
+        <source>You need to specify a file to import your Bible from.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="136"/>
+        <source>Invalid Books File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="136"/>
+        <source>You need to specify a file with books of the Bible to use in the import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="146"/>
+        <source>Invalid Verse File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="146"/>
+        <source>You need to specify a file of Bible verses to import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="158"/>
+        <source>Invalid OpenSong Bible</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="158"/>
+        <source>You need to specify an OpenSong Bible file to import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="174"/>
+        <source>Empty Version Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="174"/>
+        <source>You need to specify a version name for your Bible.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="184"/>
+        <source>Empty Copyright</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="184"/>
+        <source>You need to set a copyright for your Bible! Bibles in the Public Domain need to be marked as such.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="195"/>
+        <source>Bible Exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="195"/>
+        <source>This Bible already exists! Please import a different Bible or first delete the existing one.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="242"/>
+        <source>Open Verses CSV File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="447"/>
+        <source>Finished import.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/bibles/forms/importwizardform.py" line="451"/>
+        <source>Your Bible import failed.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>BiblesPlugin.MediaItem</name>
@@ -1046,6 +1198,11 @@
         <source>Bible not fully loaded</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/bibles/lib/mediaitem.py" line="387"/>
+        <source>No matching book could be found in this Bible.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>BiblesPlugin.Opensong</name>
@@ -1056,6 +1213,14 @@
     </message>
 </context>
 <context>
+    <name>CustomPlugin</name>
+    <message>
+        <location filename="openlp/plugins/custom/customplugin.py" line="70"/>
+        <source>&lt;b&gt;Custom Plugin&lt;/b&gt;&lt;br&gt;This plugin allows slides to be displayed on the screen in the same way songs are. This plugin provides greater freedom over the songs plugin.&lt;br&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CustomPlugin.CustomTab</name>
     <message>
         <location filename="openlp/plugins/custom/lib/customtab.py" line="39"/>
@@ -1067,6 +1232,11 @@
         <source>Display Footer</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/custom/lib/customtab.py" line="58"/>
+        <source>Custom Display</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CustomPlugin.EditCustomForm</name>
@@ -1171,22 +1341,22 @@
         <translation type="unfinished">Autorid:</translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="89"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="88"/>
         <source>Save &amp;&amp; Preview</source>
         <translation type="unfinished">Salvesta &amp;&amp; eelvaatle</translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="152"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="151"/>
         <source>Error</source>
         <translation type="unfinished">Viga</translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="272"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="271"/>
         <source>You need to enter a title</source>
         <translation type="unfinished">Pead sisestama pealkirja</translation>
     </message>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="277"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="276"/>
         <source>You need to enter a slide</source>
         <translation type="unfinished">Pead sisenema slaidile</translation>
     </message>
@@ -1198,11 +1368,21 @@
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/custom/lib/mediaitem.py" line="121"/>
+        <source>You must select an item to edit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/custom/lib/mediaitem.py" line="133"/>
+        <source>You must select an item to delete.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>CustomPlugin.editCustomForm</name>
     <message>
-        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="281"/>
+        <location filename="openlp/plugins/custom/forms/editcustomform.py" line="280"/>
         <source>You have unsaved data, please save or clear</source>
         <translation type="unfinished">Sul on salvestamata andmeid, palun salvesta või tühjenda</translation>
     </message>
@@ -1962,6 +2142,11 @@
         <source>You must select one or more items to send live.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/core/lib/mediamanageritem.py" line="492"/>
+        <source>You must select a %s service item.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MediaPlugin</name>
@@ -1992,7 +2177,7 @@
 <context>
     <name>OpenLP</name>
     <message>
-        <location filename="openlp/core/utils/__init__.py" line="194"/>
+        <location filename="openlp/core/utils/__init__.py" line="208"/>
         <source>Image Files</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2056,12 +2241,50 @@
     </message>
 </context>
 <context>
+    <name>PresentationPlugin</name>
+    <message>
+        <location filename="openlp/plugins/presentations/presentationplugin.py" line="111"/>
+        <source>&lt;b&gt;Presentation Plugin&lt;/b&gt; &lt;br&gt; Delivers the ability to show presentations using a number of different programs. The choice of available presentation programs is available to the user in a drop down box.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PresentationPlugin.MediaItem</name>
     <message>
         <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="108"/>
         <source>Present using:</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="64"/>
+        <source>Presentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="68"/>
+        <source>Select Presentation(s)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="70"/>
+        <source>Automatic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="141"/>
+        <source>File exists</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="141"/>
+        <source>A presentation with that filename already exists.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/mediaitem.py" line="180"/>
+        <source>You must select an item to delete.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>PresentationPlugin.PresentationTab</name>
@@ -2070,6 +2293,24 @@
         <source>available</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/presentationtab.py" line="40"/>
+        <source>Presentations</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/presentations/lib/presentationtab.py" line="92"/>
+        <source>Available Controllers</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>RemotePlugin</name>
+    <message>
+        <location filename="openlp/plugins/remotes/remoteplugin.py" line="72"/>
+        <source>&lt;b&gt;Remote Plugin&lt;/b&gt;&lt;br&gt;This plugin provides the ability to send messages to a running version of openlp on a different computer via a web browser or other app&lt;br&gt;The Primary use for this would be to send alerts from a creche</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RemotePlugin.RemoteTab</name>
@@ -2391,6 +2632,108 @@
     </message>
 </context>
 <context>
+    <name>SongUsagePlugin</name>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="62"/>
+        <source>&amp;Song Usage</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="66"/>
+        <source>&amp;Delete recorded data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="68"/>
+        <source>Delete song usage to specified date</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="73"/>
+        <source>&amp;Extract recorded data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="75"/>
+        <source>Generate report on Song Usage</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="84"/>
+        <source>Song Usage Status</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="86"/>
+        <source>Start/Stop live song usage recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/songusageplugin.py" line="161"/>
+        <source>&lt;b&gt;SongUsage Plugin&lt;/b&gt;&lt;br&gt;This plugin records the use of songs and when they have been used during a live service</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SongsPlugin</name>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="93"/>
+        <source>&amp;Song</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="95"/>
+        <source>Import songs using the import wizard.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="102"/>
+        <source>Songs of Fellowship (temp menu item)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="109"/>
+        <source>Import songs from the VOLS1_2.RTF, sof3words.rtf and sof4words.rtf supplied with the music books</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="118"/>
+        <source>Generic Document/Presentation Import (temp menu item)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="126"/>
+        <source>Import songs from Word/Writer/Powerpoint/Impress</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="156"/>
+        <source>Open Songs of Fellowship file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="166"/>
+        <source>Import Error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="166"/>
+        <source>Error importing Songs of Fellowship file.
+OpenOffice.org must be installed and you must be using an unedited copy of the RTF included with the Songs of Fellowship Music Editions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="179"/>
+        <source>Open documents or presentations</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/songsplugin.py" line="188"/>
+        <source>&lt;strong&gt;Song Plugin&lt;/strong&gt;&lt;br /&gt;This plugin allows songs to be managed and displayed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>SongsPlugin.AuditDeleteDialog</name>
     <message>
         <location filename="openlp/plugins/songusage/forms/songusagedeletedialog.py" line="61"/>
@@ -2415,6 +2758,11 @@
         <source>Report Location</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedetaildialog.py" line="89"/>
+        <source>Song Usage Extraction</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SongsPlugin.AuthorsForm</name>
@@ -2900,6 +3248,31 @@
         <source>CCLI Licence: </source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="71"/>
+        <source>Maintain the lists of authors, topics and books</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="282"/>
+        <source>You must select an item to edit.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="293"/>
+        <source>You must select an item to delete.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="297"/>
+        <source>Delete song?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/mediaitem.py" line="300"/>
+        <source>Delete %d songs?</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SongsPlugin.SongBookForm</name>
@@ -2986,6 +3359,102 @@
         <source>No book selected!</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="229"/>
+        <source>Error</source>
+        <translation type="unfinished">Viga</translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="139"/>
+        <source>Couldn&apos;t add your author.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="151"/>
+        <source>Couldn&apos;t add your topic.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="165"/>
+        <source>Couldn&apos;t add your book.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="195"/>
+        <source>Couldn&apos;t save your author.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="211"/>
+        <source>Couldn&apos;t save your topic.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="229"/>
+        <source>Couldn&apos;t save your book.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="239"/>
+        <source>Are you sure you want to delete the selected author?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="239"/>
+        <source>This author can&apos;t be deleted, they are currently assigned to at least one song.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="239"/>
+        <source>No author selected!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="255"/>
+        <source>Are you sure you want to delete the selected topic?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="255"/>
+        <source>This topic can&apos;t be deleted, it is currently assigned to at least one song.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="255"/>
+        <source>No topic selected!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="271"/>
+        <source>Are you sure you want to delete the selected book?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/songmaintenanceform.py" line="271"/>
+        <source>This book can&apos;t be deleted, it is currently assigned to at least one song.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SongsPlugin.SongUsageDeleteForm</name>
+    <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedeleteform.py" line="44"/>
+        <source>Delete Selected Song Usage Events?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedeleteform.py" line="44"/>
+        <source>Are you sure you want to delete selected Song Usage data?</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SongsPlugin.SongUsageDetailForm</name>
+    <message>
+        <location filename="openlp/plugins/songusage/forms/songusagedetailform.py" line="63"/>
+        <source>Output File Location</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SongsPlugin.SongsTab</name>
@@ -3004,6 +3473,11 @@
         <source>Enable search as you type</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/songs/lib/songstab.py" line="68"/>
+        <source>Display Verses on Live Tool bar</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SongsPlugin.TopicsForm</name>
@@ -3022,6 +3496,11 @@
         <source>Error</source>
         <translation type="unfinished">Viga</translation>
     </message>
+    <message>
+        <location filename="openlp/plugins/songs/forms/topicsform.py" line="51"/>
+        <source>You need to type in a topic name!</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Splashscreen</name>

=== modified file 'scripts/translation_utils.py'
--- scripts/translation_utils.py	2010-06-09 17:09:32 +0000
+++ scripts/translation_utils.py	2010-06-22 17:44:29 +0000
@@ -25,143 +25,210 @@
 ###############################################################################
 # Short description
 # Steps for creating languages:
-# 1. make shure that the openlp_en.ts file exist
+# 1. make sure that the openlp_en.ts file exist
 # 2. go to scripts folder and start:
 #     python translation_utils.py -a
 ###############################################################################
 
 import os
 import urllib
+import re
 
 from optparse import OptionParser
 from PyQt4 import QtCore
-
-ignore_pathes = [u"./scripts", u"./openlp/core/test"]
-ignore_files = [u"setup.py"]
-translation_path = u"http://pootle.projecthq.biz/export/openlp/";
-translations = [ u"en" 
-                , u"af"
-                , u"en_ZA"
-                , u"en_GB"
-                , u"de"
-                , u"hu"
-                , u"ko"
-                , u"nb"
-                , u"pt_BR"
-                , u"es"
-                , u"sv"]
-
-def write_file(filename, stringlist):
-    content = u''
-    for line in stringlist:
-        content = u'%s%s\n' % (content, line)
-    file = open(filename, u'w')
-    file.write(content.encode('utf8'))
-    file.close()
+from BeautifulSoup import BeautifulSoup
+
+class TranslationUtils(object):
+    def __init__(self):
+        self.ignore_paths = [u'./scripts']
+        self.ignore_files = [u'setup.py']
+        self.server_url = u'http://pootle.projecthq.biz/export/openlp/'
+        self.cmd_stack = []
+        self.stack_count = 0
+        self.verbose = False
+    
+
+    def process_stack(self):
+        if len(self.cmd_stack) > 0:
+            if len(self.cmd_stack) == self.stack_count:
+                print u'Process %d commands' % self.stack_count
+            print u'%d. ' % (self.stack_count-len(self.cmd_stack)+1),
+            command = self.cmd_stack.pop(0)
+            if len(command) > 1:
+                command[0](command[1])
+            else:
+                command[0]()
+        else:
+            print "Finished all commands"
+
+
+    def downloadTranslations(self):
+        print 'Download Translation files from HQ-Server'
+        page = urllib.urlopen(u'%s' % (self.server_url))
+        soup = BeautifulSoup(page)
+        languages = soup.findAll(text=re.compile(".*\.ts"))
+        for language in languages:
+            filename = os.path.join(u'..', u'resources', u'i18n',
+                u'openlp_%s' % language)
+            self.printVerbose(u'Get Translation File: %s' % filename)
+            self.get_and_write_file(language, filename)
+        print u'  done'
+        self.process_stack()
+
+    def get_and_write_file(self, language, filename):
+        page = urllib.urlopen(u'%s%s' % (self.server_url, language))
+        content = page.read().decode('utf8')
+        page.close()
+        file = open(filename, u'w')
+        file.write(content.encode('utf8'))
+        file.close()
+            
+    def creation(self, language):
+        print "Create new Translation File"
+        """
+            Use this option to create a new translation file
+            this function: 
+                * create the new *.ts file
+        """
+        filename = os.path.join(u'..', u'resources', u'i18n',
+                u'openlp_%s.ts' % language)
+        self.get_and_write_file(u'en.ts', filename)
+        self.printVerbose("""
+            Please remind: For permanent providing this language:
+            this language name have to append to the global list 
+            variable "translations" in this file
+            and this file have to be uploaded to the Pootle Server
+            Please contact the developers!
+            """)
+        print u'  done'
+        self.process_stack()
+        
+        
+    def preparation(self):
+        print u'Generating the openlp.pro file'
+        stringlist = []
+        start_dir = os.path.join(u'..')
+        for root, dirs, files in os.walk(start_dir):
+            for file in files:
+                path = u'%s' % root
+                path = path.replace('\\','/')
+                path = path.replace('..','.')
+                
+                if file.startswith(u'hook-') or file.startswith(u'test_'):
+                   continue
+
+                cond = False
+                for search in self.ignore_paths:
+                    if path.startswith(search):
+                        cond = True
+                if cond:
+                    continue
+                cond = False
+                for search in self.ignore_files:
+                    if search == file:
+                        cond = True
+                if cond:
+                    continue
+                
+                if file.endswith(u'.py'):
+                    line = u'%s/%s' % (path, file)
+                    self.printVerbose(u'Parsing "%s"' % line)
+                    stringlist.append(u'SOURCES      += %s' % line)
+                elif file.endswith(u'.pyw'):
+                    line = u'%s/%s' % (path, file)
+                    self.printVerbose(u'Parsing "%s"' % line)
+                    stringlist.append(u'SOURCES      += %s' % line)
+                elif file.endswith(u'.ts'):
+                    line = u'%s/%s' % (path, file)
+                    self.printVerbose(u'Parsing "%s"' % line)
+                    stringlist.append(u'TRANSLATIONS += %s' % line)
+                
+        stringlist.sort()
+        self.write_file(os.path.join(start_dir, u'openlp.pro'), stringlist)
+        print u'  done'
+        self.process_stack()
+
+    def update(self):
+        print u'Update the translation files'
+        cmd = u'pylupdate4 -verbose -noobsolete ../openlp.pro'
+        self.start_cmd(cmd)
+
+    def generate(self):
+        print u'Generate the related *.qm files'
+        cmd = u'lrelease ../openlp.pro'
+        self.start_cmd(cmd)
+        
+    def write_file(self, filename, stringlist):
+        content = u''
+        for line in stringlist:
+            content = u'%s%s\n' % (content, line)
+        file = open(filename, u'w')
+        file.write(content.encode('utf8'))
+        file.close()
+
+    def printVerbose(self, data):
+        if self.verbose:
+            print u'    %s' % data
+
+    def start_cmd(self, command):
+        self.printVerbose(command)
+        self.process = QtCore.QProcess()
+        self.process.start(command)
+        while (self.process.waitForReadyRead()):
+            self.printVerbose(u'ReadyRead: %s' % QtCore.QString(self.process.readAll()))
+        self.printVerbose(self.process.readAllStandardError())
+        self.printVerbose(self.process.readAllStandardOutput())
+        print u'  done'
+        self.process_stack()
+        
 
 def main():
+    # start Main Class
+    Util = TranslationUtils()
+    
     # Set up command line options.
-    usage = u'Usage: %prog [options]'
+    usage = u'''
+        This script handle the translation files for OpenLP.
+        Usage: %prog [options]
+        If no option will be used, options "-d -p -u -g" will be set automatically
+        '''
     parser = OptionParser(usage=usage)
-    parser.add_option("-d", "--download-ts", action="store_true",
-        dest="download", help="Load languages from Pootle Server")
-    parser.add_option("-p", "--prepare", action="store_true", dest="prepare",
-        help="preparation (generate pro file)")
-    parser.add_option("-u", "--update", action="store_true", dest="update",
-        help="update translation files")
-    parser.add_option("-g", "--generate", action="store_true", dest="generate",
-        help="generate qm files")
-    parser.add_option("-a", "--all", action="store_true", dest="all",
-        help="proceed all options")
+    parser.add_option('-d', '--download-ts', action='store_true',
+        dest='download', help='Load languages from Pootle Server')
+    parser.add_option('-c', '--create', metavar='lang',
+        help='creation of new translation file, Parameter: language (e.g. "en_GB"')
+    parser.add_option('-p', '--prepare', action='store_true', dest='prepare',
+        help='preparation (generate pro file)')
+    parser.add_option('-u', '--update', action='store_true', dest='update',
+        help='update translation files')
+    parser.add_option('-g', '--generate', action='store_true', dest='generate',
+        help='generate qm files')
+    parser.add_option('-v', '--verbose', action='store_true', dest='verbose',
+        help='Give more informations while processing')
 
     (options, args) = parser.parse_args()
     if options.download:
-        downloadTranslations()
-    elif options.prepare:
-        preparation()
-    elif options.update:
-        update()
-    elif options.generate:
-        generate()
-    elif options.all:
-        all()
-    else:
-        pass
-
-def downloadTranslations():
-    print "download()"
-    for language in translations:
-        filename = os.path.join(u'..', u'resources', u'i18n',
-            u"openlp_%s.ts" % language)
-        print filename
-        page = urllib.urlopen(u"%s%s.ts" % (translation_path, language))
-        content = page.read().decode("utf8")
-        page.close()
-        file = open(filename, u'w')
-        file.write(content.encode('utf8'))
-        file.close()
-
-def preparation():
-    stringlist = []
-    start_dir = os.path.join(u'..')
-    for root, dirs, files in os.walk(start_dir):
-        for file in files:
-            path = u"%s" % root
-            path = path.replace("\\","/")
-            path = path.replace("..",".")
-            
-            if file.startswith(u'hook-') or file.startswith(u'test_'):
-               continue
-
-            cond = False
-            for search in ignore_pathes:
-                if path.startswith(search):
-                    cond = True
-            if cond:
-                continue
-            cond = False
-            for search in ignore_files:
-                if search == file:
-                    cond = True
-            if cond:
-                continue
-            
-            if file.endswith(u'.py'):
-                line = u"%s/%s" % (path, file)
-                print u'Parsing "%s"' % line
-                stringlist.append(u"SOURCES      += %s" % line)
-            elif file.endswith(u'.pyw'):
-                line = u"%s/%s" % (path, file)
-                print u'Parsing "%s"' % line
-                stringlist.append(u"SOURCES      += %s" % line)
-            elif file.endswith(u'.ts'):
-                line = u"%s/%s" % (path, file)
-                print u'Parsing "%s"' % line
-                stringlist.append(u"TRANSLATIONS += %s" % line)
-            
-    print u'Generating PRO file...',
-    stringlist.sort()
-    write_file(os.path.join(start_dir, u'openlp.pro'), stringlist)
-    print u'done.'
-
-def update():
-    print "update()"
-    updateProcess = QtCore.QProcess()
-    updateProcess.start(u"pylupdate4 -noobsolete ../openlp.pro")
-    updateProcess.waitForFinished(60000)
-
-def generate():
-    print "generate()"
-    generateProcess = QtCore.QProcess()
-    generateProcess.start(u"lrelease ../openlp.pro")
-    generateProcess.waitForFinished(60000)
-
-def all():
-    print "all()"
-    downloadTranslations()
-    preparation()
-    update()
-    generate()
+        Util.cmd_stack.append([Util.downloadTranslations])
+    if options.create:
+        Util.cmd_stack.append([Util.creation, u'%s' % options.create])
+    if options.prepare:
+        Util.cmd_stack.append([Util.preparation])
+    if options.update:
+        Util.cmd_stack.append([Util.update])
+    if options.generate:
+        Util.cmd_stack.append([Util.generate])
+    if options.verbose:
+        Util.verbose = True
+
+    if len(Util.cmd_stack) == 0:
+        Util.cmd_stack.append([Util.downloadTranslations])
+        Util.cmd_stack.append([Util.preparation])
+        Util.cmd_stack.append([Util.update])
+        Util.cmd_stack.append([Util.generate])
+
+    Util.stack_count = len(Util.cmd_stack)
+    Util.process_stack()
+    
 
     
 if __name__ == u'__main__':


Follow ups