Various improvements to the translation_utils script.

bzr-revno: 875
This commit is contained in:
Christian Richter 2010-06-23 08:38:50 +02:00 committed by Raoul Snyman
commit 1ee30f18bb
3 changed files with 1366 additions and 342 deletions

File diff suppressed because it is too large Load Diff

View File

@ -262,6 +262,11 @@ This General Public License does not permit incorporating your program into prop
<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>
@ -321,6 +326,14 @@ This General Public License does not permit incorporating your program into prop
<translation type="unfinished"></translation>
</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>
@ -723,10 +736,15 @@ This General Public License does not permit incorporating your program into prop
<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 @@ This General Public License does not permit incorporating your program into prop
<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 @@ This General Public License does not permit incorporating your program into prop
<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 @@ This General Public License does not permit incorporating your program into prop
<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>
@ -1055,6 +1212,14 @@ This General Public License does not permit incorporating your program into prop
<translation type="unfinished"></translation>
</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>
@ -1067,6 +1232,11 @@ This General Public License does not permit incorporating your program into prop
<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 @@ This General Public License does not permit incorporating your program into prop
<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 @@ This General Public License does not permit incorporating your program into prop
<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 @@ You can download the latest version from http://openlp.org</source>
<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 @@ You can download the latest version from http://openlp.org</source>
<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>
@ -2055,6 +2240,14 @@ You can download the latest version from http://openlp.org</source>
<translation type="unfinished"></translation>
</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>
@ -2062,6 +2255,36 @@ You can download the latest version from http://openlp.org</source>
<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 @@ You can download the latest version from http://openlp.org</source>
<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>
@ -2390,6 +2631,108 @@ The content encoding is not UTF-8.</source>
<translation>Muuda ja kuva laulu eelvaade uuesti</translation>
</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>
@ -2415,6 +2758,11 @@ The content encoding is not UTF-8.</source>
<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 @@ The content encoding is not UTF-8.</source>
<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 @@ The content encoding is not UTF-8.</source>
<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 @@ The content encoding is not UTF-8.</source>
<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 @@ The content encoding is not UTF-8.</source>
<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>

View File

@ -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
from BeautifulSoup import BeautifulSoup
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"]
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 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()
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 main():
# Set up command line options.
usage = u'Usage: %prog [options]'
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")
(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(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 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")
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 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
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 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.'
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():
print "update()"
updateProcess = QtCore.QProcess()
updateProcess.start(u"pylupdate4 -noobsolete ../openlp.pro")
updateProcess.waitForFinished(60000)
def update(self):
print u'Update the translation files'
cmd = u'pylupdate4 -verbose -noobsolete ../openlp.pro'
self.start_cmd(cmd)
def generate():
print "generate()"
generateProcess = QtCore.QProcess()
generateProcess.start(u"lrelease ../openlp.pro")
generateProcess.waitForFinished(60000)
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 all():
print "all()"
downloadTranslations()
preparation()
update()
generate()
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'''
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('-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:
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__':