← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~frodus86/openlp/translate into lp:openlp

 

Frode Woldsund has proposed merging lp:~frodus86/openlp/translate into lp:openlp.

Requested reviews:
  Raoul Snyman (raoul-snyman)


Cleaned up the hole tree by replacing all trUtf8() with translate() function
-- 
https://code.launchpad.net/~frodus86/openlp/translate/+merge/26889
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/ui/aboutdialog.py'
--- openlp/core/ui/aboutdialog.py	2010-05-29 19:50:50 +0000
+++ openlp/core/ui/aboutdialog.py	2010-06-06 21:33:27 +0000
@@ -114,24 +114,25 @@
         QtCore.QMetaObject.connectSlotsByName(AboutDialog)
 
     def retranslateUi(self, AboutDialog):
-        AboutDialog.setWindowTitle(translate('AboutForm', 'About OpenLP'))
-        self.AboutTextEdit.setPlainText(translate('AboutForm', 
-            'OpenLP <version><revision> - Open Source Lyrics '
-            'Projection\n'
-            '\n'
-            'OpenLP is free church presentation software, or lyrics '
-            'projection software, used to display slides of songs, Bible '
-            'verses, videos, images, and even presentations (if '
-            'OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) '
-            'for church worship using a computer and a data projector.\n'
-            '\n'
-            'Find out more about OpenLP: http://openlp.org/\n'
-            '\n'
-            'OpenLP is written and maintained by volunteers. If you would '
-            'like to see more free Christian software being written, please '
-            'consider contributing by using the button below.'
+        AboutDialog.setWindowTitle(translate(u'AboutForm', u'About OpenLP'))
+        self.AboutTextEdit.setPlainText(translate(u'AboutForm',
+            u'OpenLP <version><revision> - Open Source Lyrics '
+            u'Projection\n'
+            u'\n'
+            u'OpenLP is free church presentation software, or lyrics '
+            u'projection software, used to display slides of songs, Bible '
+            u'verses, videos, images, and even presentations (if '
+            u'OpenOffice.org, PowerPoint or PowerPoint Viewer is installed) '
+            u'for church worship using a computer and a data projector.\n'
+            u'\n'
+            u'Find out more about OpenLP: http://openlp.org/\n'
+            u'\n'
+            u'OpenLP is written and maintained by volunteers. If you would '
+            u'like to see more free Christian software being written, please '
+            u'consider contributing by using the button below.'
         ))
         self.AboutNotebook.setTabText(
+<<<<<<< TREE
             self.AboutNotebook.indexOf(self.AboutTab),
             translate('AboutForm', 'About'))
         self.CreditsTextEdit.setPlainText(translate('AboutForm', 
@@ -163,401 +164,434 @@
             '    Michael "cocooncrash" Gorven (Ubuntu)\n'
             '    Matthias "matthub" Hub (Mac OS X)\n'
             '    Raoul "superfly" Snyman (Windows)\n'
+=======
+            self.AboutNotebook.indexOf(self.AboutTab), 
+            translate(u'AboutForm', u'About'))
+        self.CreditsTextEdit.setPlainText(translate(u'AboutForm', 
+            u'Project Lead\n'
+            u'    Raoul "superfly" Snyman\n'
+            u'\n'
+            u'Developers\n'
+            u'    Tim "TRB143" Bentley\n'
+            u'    Jonathan "gushie" Corwin\n'
+            u'    Michael "cocooncrash" Gorven\n'
+            u'    Scott "sguerrieri" Guerrieri\n'
+            u'    Raoul "superfly" Snyman\n'
+            u'    Martin "mijiti" Thompson\n'
+            u'    Jon "Meths" Tibble\n'
+            u'\n'
+            u'Contributors\n'
+            u'    Meinert "m2j" Jordan\n'
+            u'    Christian "crichter" Richter\n'
+            u'    Maikel Stuivenberg\n'
+            u'    Carsten "catini" Tingaard\n'
+            u'\n'
+            u'Testers\n'
+            u'    Philip "Phill" Ridout\n'
+            u'    Wesley "wrst" Stout (lead)\n'
+            u'\n'
+            u'Packagers\n'
+            u'    Thomas "tabthorpe" Abthorpe (FreeBSD)\n'
+            u'    Tim "TRB143" Bentley (Fedora)\n'
+            u'    Michael "cocooncrash" Gorven (Ubuntu)\n'
+            u'    Matthias "matthub" Hub (Mac OS X)\n'
+            u'    Raoul "superfly" Snyman (Windows)\n'
+>>>>>>> MERGE-SOURCE
         ))
         self.AboutNotebook.setTabText(
             self.AboutNotebook.indexOf(self.CreditsTab),
-            translate('AboutForm', 'Credits'))
-        self.LicenseTextEdit.setPlainText(translate('AboutForm', 
-            'Copyright \xa9 2004-2010 Raoul Snyman\n'
-            'Portions copyright \xa9 2004-2010 '
-            'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, '
-            'Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon '
-            'Tibble, Carsten Tinggaard\n'
-            '\n'
-            '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.\n'
-            '\n'
-            'This program is distributed in the hope that it will be useful, '
-            'but WITHOUT ANY WARRANTY; without even the implied warranty of '
-            'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below '
-            'for more details.\n'
-            '\n'
-            '\n'
-            'GNU GENERAL PUBLIC LICENSE\n'
-            'Version 2, June 1991\n'
-            '\n'
-            'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 '
-            'Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. '
-            'Everyone is permitted to copy and distribute verbatim copies of '
-            'this license document, but changing it is not allowed.\n'
-            '\n'
-            'Preamble\n'
-            '\n'
-            'The licenses for most software are designed to take away your '
-            'freedom to share and change it.  By contrast, the GNU General '
-            'Public License is intended to guarantee your freedom to share '
-            'and change free software--to make sure the software is free for '
-            'all its users.  This General Public License applies to most of '
-            'the Free Software Foundation\'s software and to any other '
-            'program whose authors commit to using it.  (Some other Free '
-            'Software Foundation software is covered by the GNU Lesser '
-            'General Public License instead.)  You can apply it to your '
-            'programs, too.\n'
-            '\n'
-            'When we speak of free software, we are referring to freedom, not '
-            'price.  Our General Public Licenses are designed to make sure '
-            'that you have the freedom to distribute copies of free software '
-            '(and charge for this service if you wish), that you receive '
-            'source code or can get it if you want it, that you can change '
-            'the software or use pieces of it in new free programs; and that '
-            'you know you can do these things.\n'
-            '\n'
-            'To protect your rights, we need to make restrictions that forbid '
-            'anyone to deny you these rights or to ask you to surrender the '
-            'rights. These restrictions translate to certain responsibilities '
-            'for you if you distribute copies of the software, or if you '
-            'modify it.\n'
-            '\n'
-            'For example, if you distribute copies of such a program, whether '
-            'gratis or for a fee, you must give the recipients all the rights '
-            'that you have.  You must make sure that they, too, receive or '
-            'can get the source code.  And you must show them these terms so '
-            'they know their rights.\n'
-            '\n'
-            'We protect your rights with two steps: (1) copyright the '
-            'software, and (2) offer you this license which gives you legal '
-            'permission to copy, distribute and/or modify the software.\n'
-            '\n'
-            'Also, for each author\'s protection and ours, we want to make '
-            'certain that everyone understands that there is no warranty for '
-            'this free software.  If the software is modified by someone else '
-            'and passed on, we want its recipients to know that what they '
-            'have is not the original, so that any problems introduced by '
-            'others will not reflect on the original authors\' reputations.\n'
-            '\n'
-            'Finally, any free program is threatened constantly by software '
-            'patents.  We wish to avoid the danger that redistributors of a '
-            'free program will individually obtain patent licenses, in effect '
-            'making the program proprietary.  To prevent this, we have made '
-            'it clear that any patent must be licensed for everyone\'s free '
-            'use or not licensed at all.\n'
-            '\n'
-            'The precise terms and conditions for copying, distribution and '
-            'modification follow.\n'
-            '\n'
-            'GNU GENERAL PUBLIC LICENSE\n'
-            'TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n'
-            '\n'
-            '0. This License applies to any program or other work which '
-            'contains a notice placed by the copyright holder saying it may '
-            'be distributed under the terms of this General Public License.  '
-            'The "Program", below, refers to any such program or work, and a '
-            '"work based on the Program" means either the Program or any '
-            'derivative work under copyright law: that is to say, a work '
-            'containing the Program or a portion of it, either verbatim or '
-            'with modifications and/or translated into another language.  '
-            '(Hereinafter, translation is included without limitation in the '
-            'term "modification".)  Each licensee is addressed as "you".\n'
-            '\n'
-            'Activities other than copying, distribution and modification are '
-            'not covered by this License; they are outside its scope.  The '
-            'act of running the Program is not restricted, and the output '
-            'from the Program is covered only if its contents constitute a '
-            'work based on the Program (independent of having been made by '
-            'running the Program). Whether that is true depends on what the '
-            'Program does.\n'
-            '\n'
-            '1. You may copy and distribute verbatim copies of the Program\'s '
-            'source code as you receive it, in any medium, provided that you '
-            'conspicuously and appropriately publish on each copy an '
-            'appropriate copyright notice and disclaimer of warranty; keep '
-            'intact all the notices that refer to this License and to the '
-            'absence of any warranty; and give any other recipients of the '
-            'Program a copy of this License along with the Program.\n'
-            '\n'
-            'You may charge a fee for the physical act of transferring a '
-            'copy, and you may at your option offer warranty protection in '
-            'exchange for a fee.\n'
-            '\n'
-            '2. You may modify your copy or copies of the Program or any '
-            'portion of it, thus forming a work based on the Program, and '
-            'copy and distribute such modifications or work under the terms '
-            'of Section 1 above, provided that you also meet all of these '
-            'conditions:\n'
-            '\n'
-            'a) You must cause the modified files to carry prominent notices '
-            'stating that you changed the files and the date of any change.\n'
-            '\n'
-            'b) You must cause any work that you distribute or publish, that '
-            'in whole or in part contains or is derived from the Program or '
-            'any part thereof, to be licensed as a whole at no charge to all '
-            'third parties under the terms of this License.\n'
-            '\n'
-            'c) If the modified program normally reads commands interactively '
-            'when run, you must cause it, when started running for such '
-            'interactive use in the most ordinary way, to print or display an '
-            'announcement including an appropriate copyright notice and a '
-            'notice that there is no warranty (or else, saying that you '
-            'provide a warranty) and that users may redistribute the program '
-            'under these conditions, and telling the user how to view a copy '
-            'of this License.  (Exception: if the Program itself is '
-            'interactive but does not normally print such an announcement, '
-            'your work based on the Program is not required to print an '
-            'announcement.)\n'
-            '\n'
-            'These requirements apply to the modified work as a whole.  If '
-            'identifiable sections of that work are not derived from the '
-            'Program, and can be reasonably considered independent and '
-            'separate works in themselves, then this License, and its terms, '
-            'do not apply to those sections when you distribute them as '
-            'separate works.  But when you distribute the same sections as '
-            'part of a whole which is a work based on the Program, the '
-            'distribution of the whole must be on the terms of this License, '
-            'whose permissions for other licensees extend to the entire '
-            'whole, and thus to each and every part regardless of who wrote '
-            'it.\n'
-            '\n'
-            'Thus, it is not the intent of this section to claim rights or '
-            'contest your rights to work written entirely by you; rather, the '
-            'intent is to exercise the right to control the distribution of '
-            'derivative or collective works based on the Program.\n'
-            '\n'
-            'In addition, mere aggregation of another work not based on the '
-            'Program with the Program (or with a work based on the Program) '
-            'on a volume of a storage or distribution medium does not bring '
-            'the other work under the scope of this License.\n'
-            '\n'
-            '3. You may copy and distribute the Program (or a work based on '
-            'it, under Section 2) in object code or executable form under the '
-            'terms of Sections 1 and 2 above provided that you also do one of '
-            'the following:\n'
-            '\n'
-            'a) Accompany it with the complete corresponding machine-readable '
-            'source code, which must be distributed under the terms of '
-            'Sections 1 and 2 above on a medium customarily used for software '
-            'interchange; or,\n'
-            '\n'
-            'b) Accompany it with a written offer, valid for at least three '
-            'years, to give any third party, for a charge no more than your '
-            'cost of physically performing source distribution, a complete '
-            'machine-readable copy of the corresponding source code, to be '
-            'distributed under the terms of Sections 1 and 2 above on a '
-            'medium customarily used for software interchange; or,\n'
-            '\n'
-            'c) Accompany it with the information you received as to the '
-            'offer to distribute corresponding source code.  (This '
-            'alternative is allowed only for noncommercial distribution and '
-            'only if you received the program in object code or executable '
-            'form with such an offer, in accord with Subsection b above.)\n'
-            '\n'
-            'The source code for a work means the preferred form of the work '
-            'for making modifications to it.  For an executable work, '
-            'complete source code means all the source code for all modules '
-            'it contains, plus any associated interface definition files, '
-            'plus the scripts used to control compilation and installation of '
-            'the executable.  However, as a special exception, the source '
-            'code distributed need not include anything that is normally '
-            'distributed (in either source or binary form) with the major '
-            'components (compiler, kernel, and so on) of the operating system '
-            'on which the executable runs, unless that component itself '
-            'accompanies the executable.\n'
-            '\n'
-            'If distribution of executable or object code is made by offering '
-            'access to copy from a designated place, then offering equivalent '
-            'access to copy the source code from the same place counts as '
-            'distribution of the source code, even though third parties are '
-            'not compelled to copy the source along with the object code.\n'
-            '\n'
-            '4. You may not copy, modify, sublicense, or distribute the '
-            'Program except as expressly provided under this License.  Any '
-            'attempt otherwise to copy, modify, sublicense or distribute the '
-            'Program is void, and will automatically terminate your rights '
-            'under this License. However, parties who have received copies, '
-            'or rights, from you under this License will not have their '
-            'licenses terminated so long as such parties remain in full '
-            'compliance.\n'
-            '\n'
-            '5. You are not required to accept this License, since you have '
-            'not signed it.  However, nothing else grants you permission to '
-            'modify or distribute the Program or its derivative works.  These '
-            'actions are prohibited by law if you do not accept this '
-            'License.  Therefore, by modifying or distributing the Program '
-            '(or any work based on the Program), you indicate your acceptance '
-            'of this License to do so, and all its terms and conditions for '
-            'copying, distributing or modifying the Program or works based on '
-            'it.\n'
-            '\n'
-            '6. Each time you redistribute the Program (or any work based on '
-            'the Program), the recipient automatically receives a license '
-            'from the original licensor to copy, distribute or modify the '
-            'Program subject to these terms and conditions.  You may not '
-            'impose any further restrictions on the recipients\' exercise of '
-            'the rights granted herein. You are not responsible for enforcing '
-            'compliance by third parties to this License.\n'
-            '\n'
-            '7. If, as a consequence of a court judgment or allegation of '
-            'patent infringement or for any other reason (not limited to '
-            'patent issues), conditions are imposed on you (whether by court '
-            'order, agreement or otherwise) that contradict the conditions of '
-            'this License, they do not excuse you from the conditions of this '
-            'License.  If you cannot distribute so as to satisfy '
-            'simultaneously your obligations under this License and any other '
-            'pertinent obligations, then as a consequence you may not '
-            'distribute the Program at all.  For example, if a patent license '
-            'would not permit royalty-free redistribution of the Program by '
-            'all those who receive copies directly or indirectly through you, '
-            'then the only way you could satisfy both it and this License '
-            'would be to refrain entirely from distribution of the Program.\n'
-            '\n'
-            'If any portion of this section is held invalid or unenforceable '
-            'under any particular circumstance, the balance of the section is '
-            'intended to apply and the section as a whole is intended to '
-            'apply in other circumstances.\n'
-            '\n'
-            'It is not the purpose of this section to induce you to infringe '
-            'any patents or other property right claims or to contest '
-            'validity of any such claims; this section has the sole purpose '
-            'of protecting the integrity of the free software distribution '
-            'system, which is implemented by public license practices.  Many '
-            'people have made generous contributions to the wide range of '
-            'software distributed through that system in reliance on '
-            'consistent application of that system; it is up to the '
-            'author/donor to decide if he or she is willing to distribute '
-            'software through any other system and a licensee cannot impose '
-            'that choice.\n'
-            '\n'
-            'This section is intended to make thoroughly clear what is '
-            'believed to be a consequence of the rest of this License.\n'
-            '\n'
-            '8. If the distribution and/or use of the Program is restricted '
-            'in certain countries either by patents or by copyrighted '
-            'interfaces, the original copyright holder who places the Program '
-            'under this License may add an explicit geographical distribution '
-            'limitation excluding those countries, so that distribution is '
-            'permitted only in or among countries not thus excluded.  In such '
-            'case, this License incorporates the limitation as if written in '
-            'the body of this License.\n'
-            '\n'
-            '9. The Free Software Foundation may publish revised and/or new '
-            'versions of the General Public License from time to time.  Such '
-            'new versions will be similar in spirit to the present version, '
-            'but may differ in detail to address new problems or concerns.\n'
-            '\n'
-            'Each version is given a distinguishing version number.  If the '
-            'Program specifies a version number of this License which applies '
-            'to it and \"any later version\', you have the option of '
-            'following the terms and conditions either of that version or of '
-            'any later version published by the Free Software Foundation.  If '
-            'the Program does not specify a version number of this License, '
-            'you may choose any version ever published by the Free Software '
-            'Foundation.\n'
-            '\n'
-            '10. If you wish to incorporate parts of the Program into other '
-            'free programs whose distribution conditions are different, write '
-            'to the author to ask for permission.  For software which is '
-            'copyrighted by the Free Software Foundation, write to the Free '
-            'Software Foundation; we sometimes make exceptions for this.  Our '
-            'decision will be guided by the two goals of preserving the free '
-            'status of all derivatives of our free software and of promoting '
-            'the sharing and reuse of software generally.\n'
-            '\n'
-            'NO WARRANTY\n'
-            '\n'
-            '11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO '
-            'WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE '
-            'LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT '
-            'HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT '
-            'WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, '
-            'BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY '
-            'AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE '
-            'QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE '
-            'PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY '
-            'SERVICING, REPAIR OR CORRECTION.\n'
-            '\n'
-            '12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO '
-            'IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY '
-            'MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE '
-            'LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, '
-            'INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR '
-            'INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS '
-            'OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY '
-            'YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH '
-            'ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN '
-            'ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n'
-            '\n'
-            'END OF TERMS AND CONDITIONS\n'
-            '\n'
-            'How to Apply These Terms to Your New Programs\n'
-            '\n'
-            'If you develop a new program, and you want it to be of the '
-            'greatest possible use to the public, the best way to achieve '
-            'this is to make it free software which everyone can redistribute '
-            'and change under these terms.\n'
-            '\n'
-            'To do so, attach the following notices to the program.  It is '
-            'safest to attach them to the start of each source file to most '
-            'effectively convey the exclusion of warranty; and each file '
-            'should have at least the "copyright" line and a pointer to where '
-            'the full notice is found.\n'
-            '\n'
-            '<one line to give the program\'s name and a brief idea of what '
-            'it does.>\n'
-            'Copyright (C) <year>  <name of author>\n'
-            '\n'
-            '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; either version 2 of '
-            'the License, or (at your option) any later version.\n'
-            '\n'
-            'This program is distributed in the hope that it will be useful, '
-            'but WITHOUT ANY WARRANTY; without even the implied warranty of '
-            'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the '
-            'GNU General Public License for more details.\n'
-            '\n'
-            'You should have received a copy of the GNU General Public '
-            'License along with this program; if not, write to the Free '
-            'Software Foundation, Inc., 51 Franklin Street, Fifth Floor, '
-            'Boston, MA 02110-1301 USA.\n'
-            '\n'
-            'Also add information on how to contact you by electronic and '
-            'paper mail.\n'
-            '\n'
-            'If the program is interactive, make it output a short notice '
-            'like this when it starts in an interactive mode:\n'
-            '\n'
-            'Gnomovision version 69, Copyright (C) year name of author\n'
-            'Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type '
-            '"show w".\n'
-            'This is free software, and you are welcome to redistribute it '
-            'under certain conditions; type "show c" for details.\n'
-            '\n'
-            'The hypothetical commands "show w" and "show c" should show '
-            'the appropriate parts of the General Public License.  Of course, '
-            'the commands you use may be called something other than "show '
-            'w" and "show c"; they could even be mouse-clicks or menu items--'
-            'whatever suits your program.\n'
-            '\n'
-            'You should also get your employer (if you work as a programmer) '
-            'or your school, if any, to sign a "copyright disclaimer" for the '
-            'program, if necessary.  Here is a sample; alter the names:\n'
-            '\n'
-            'Yoyodyne, Inc., hereby disclaims all copyright interest in the '
-            'program "Gnomovision" (which makes passes at compilers) written '
-            'by James Hacker.\n'
-            '\n'
-            '<signature of Ty Coon>, 1 April 1989\n'
-            'Ty Coon, President of Vice\n'
-            '\n'
-            'This General Public License does not permit incorporating your '
-            'program into proprietary programs.  If your program is a '
-            'subroutine library, you may consider it more useful to permit '
-            'linking proprietary applications with the library.  If this is '
-            'what you want to do, use the GNU Lesser General Public License '
-            'instead of this License.'))
+            translate(u'AboutForm', u'Credits'))
+        self.LicenseTextEdit.setPlainText(translate(u'AboutForm', 
+            u'Copyright \xa9 2004-2010 Raoul Snyman\n'
+            u'Portions copyright \xa9 2004-2010 '
+            u'Tim Bentley, Jonathan Corwin, Michael Gorven, Scott Guerrieri, '
+            u'Christian Richter, Maikel Stuivenberg, Martin Thompson, Jon '
+            u'Tibble, Carsten Tinggaard\n'
+            u'\n'
+            u'This program is free software; you can redistribute it and/or '
+            u'modify it under the terms of the GNU General Public License as '
+            u'published by the Free Software Foundation; version 2 of the '
+            u'License.\n'
+            u'\n'
+            u'This program is distributed in the hope that it will be useful, '
+            u'but WITHOUT ANY WARRANTY; without even the implied warranty of '
+            u'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See below '
+            u'for more details.\n'
+            u'\n'
+            u'\n'
+            u'GNU GENERAL PUBLIC LICENSE\n'
+            u'Version 2, June 1991\n'
+            u'\n'
+            u'Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 '
+            u'Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. '
+            u'Everyone is permitted to copy and distribute verbatim copies of '
+            u'this license document, but changing it is not allowed.\n'
+            u'\n'
+            u'Preamble\n'
+            u'\n'
+            u'The licenses for most software are designed to take away your '
+            u'freedom to share and change it.  By contrast, the GNU General '
+            u'Public License is intended to guarantee your freedom to share '
+            u'and change free software--to make sure the software is free for '
+            u'all its users.  This General Public License applies to most of '
+            u'the Free Software Foundation\'s software and to any other '
+            u'program whose authors commit to using it.  (Some other Free '
+            u'Software Foundation software is covered by the GNU Lesser '
+            u'General Public License instead.)  You can apply it to your '
+            u'programs, too.\n'
+            u'\n'
+            u'When we speak of free software, we are referring to freedom, not '
+            u'price.  Our General Public Licenses are designed to make sure '
+            u'that you have the freedom to distribute copies of free software '
+            u'(and charge for this service if you wish), that you receive '
+            u'source code or can get it if you want it, that you can change '
+            u'the software or use pieces of it in new free programs; and that '
+            u'you know you can do these things.\n'
+            u'\n'
+            u'To protect your rights, we need to make restrictions that forbid '
+            u'anyone to deny you these rights or to ask you to surrender the '
+            u'rights. These restrictions translate to certain responsibilities '
+            u'for you if you distribute copies of the software, or if you '
+            u'modify it.\n'
+            u'\n'
+            u'For example, if you distribute copies of such a program, whether '
+            u'gratis or for a fee, you must give the recipients all the rights '
+            u'that you have.  You must make sure that they, too, receive or '
+            u'can get the source code.  And you must show them these terms so '
+            u'they know their rights.\n'
+            u'\n'
+            u'We protect your rights with two steps: (1) copyright the '
+            u'software, and (2) offer you this license which gives you legal '
+            u'permission to copy, distribute and/or modify the software.\n'
+            u'\n'
+            u'Also, for each author\'s protection and ours, we want to make '
+            u'certain that everyone understands that there is no warranty for '
+            u'this free software.  If the software is modified by someone else '
+            u'and passed on, we want its recipients to know that what they '
+            u'have is not the original, so that any problems introduced by '
+            u'others will not reflect on the original authors\' reputations.\n'
+            u'\n'
+            u'Finally, any free program is threatened constantly by software '
+            u'patents.  We wish to avoid the danger that redistributors of a '
+            u'free program will individually obtain patent licenses, in effect '
+            u'making the program proprietary.  To prevent this, we have made '
+            u'it clear that any patent must be licensed for everyone\'s free '
+            u'use or not licensed at all.\n'
+            u'\n'
+            u'The precise terms and conditions for copying, distribution and '
+            u'modification follow.\n'
+            u'\n'
+            u'GNU GENERAL PUBLIC LICENSE\n'
+            u'TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n'
+            u'\n'
+            u'0. This License applies to any program or other work which '
+            u'contains a notice placed by the copyright holder saying it may '
+            u'be distributed under the terms of this General Public License.  '
+            u'The "Program", below, refers to any such program or work, and a '
+            u'"work based on the Program" means either the Program or any '
+            u'derivative work under copyright law: that is to say, a work '
+            u'containing the Program or a portion of it, either verbatim or '
+            u'with modifications and/or translated into another language.  '
+            u'(Hereinafter, translation is included without limitation in the '
+            u'term "modification".)  Each licensee is addressed as "you".\n'
+            u'\n'
+            u'Activities other than copying, distribution and modification are '
+            u'not covered by this License; they are outside its scope.  The '
+            u'act of running the Program is not restricted, and the output '
+            u'from the Program is covered only if its contents constitute a '
+            u'work based on the Program (independent of having been made by '
+            u'running the Program). Whether that is true depends on what the '
+            u'Program does.\n'
+            u'\n'
+            u'1. You may copy and distribute verbatim copies of the Program\'s '
+            u'source code as you receive it, in any medium, provided that you '
+            u'conspicuously and appropriately publish on each copy an '
+            u'appropriate copyright notice and disclaimer of warranty; keep '
+            u'intact all the notices that refer to this License and to the '
+            u'absence of any warranty; and give any other recipients of the '
+            u'Program a copy of this License along with the Program.\n'
+            u'\n'
+            u'You may charge a fee for the physical act of transferring a '
+            u'copy, and you may at your option offer warranty protection in '
+            u'exchange for a fee.\n'
+            u'\n'
+            u'2. You may modify your copy or copies of the Program or any '
+            u'portion of it, thus forming a work based on the Program, and '
+            u'copy and distribute such modifications or work under the terms '
+            u'of Section 1 above, provided that you also meet all of these '
+            u'conditions:\n'
+            u'\n'
+            u'a) You must cause the modified files to carry prominent notices '
+            u'stating that you changed the files and the date of any change.\n'
+            u'\n'
+            u'b) You must cause any work that you distribute or publish, that '
+            u'in whole or in part contains or is derived from the Program or '
+            u'any part thereof, to be licensed as a whole at no charge to all '
+            u'third parties under the terms of this License.\n'
+            u'\n'
+            u'c) If the modified program normally reads commands interactively '
+            u'when run, you must cause it, when started running for such '
+            u'interactive use in the most ordinary way, to print or display an '
+            u'announcement including an appropriate copyright notice and a '
+            u'notice that there is no warranty (or else, saying that you '
+            u'provide a warranty) and that users may redistribute the program '
+            u'under these conditions, and telling the user how to view a copy '
+            u'of this License.  (Exception: if the Program itself is '
+            u'interactive but does not normally print such an announcement, '
+            u'your work based on the Program is not required to print an '
+            u'announcement.)\n'
+            u'\n'
+            u'These requirements apply to the modified work as a whole.  If '
+            u'identifiable sections of that work are not derived from the '
+            u'Program, and can be reasonably considered independent and '
+            u'separate works in themselves, then this License, and its terms, '
+            u'do not apply to those sections when you distribute them as '
+            u'separate works.  But when you distribute the same sections as '
+            u'part of a whole which is a work based on the Program, the '
+            u'distribution of the whole must be on the terms of this License, '
+            u'whose permissions for other licensees extend to the entire '
+            u'whole, and thus to each and every part regardless of who wrote '
+            u'it.\n'
+            u'\n'
+            u'Thus, it is not the intent of this section to claim rights or '
+            u'contest your rights to work written entirely by you; rather, the '
+            u'intent is to exercise the right to control the distribution of '
+            u'derivative or collective works based on the Program.\n'
+            u'\n'
+            u'In addition, mere aggregation of another work not based on the '
+            u'Program with the Program (or with a work based on the Program) '
+            u'on a volume of a storage or distribution medium does not bring '
+            u'the other work under the scope of this License.\n'
+            u'\n'
+            u'3. You may copy and distribute the Program (or a work based on '
+            u'it, under Section 2) in object code or executable form under the '
+            u'terms of Sections 1 and 2 above provided that you also do one of '
+            u'the following:\n'
+            u'\n'
+            u'a) Accompany it with the complete corresponding machine-readable '
+            u'source code, which must be distributed under the terms of '
+            u'Sections 1 and 2 above on a medium customarily used for software '
+            u'interchange; or,\n'
+            u'\n'
+            u'b) Accompany it with a written offer, valid for at least three '
+            u'years, to give any third party, for a charge no more than your '
+            u'cost of physically performing source distribution, a complete '
+            u'machine-readable copy of the corresponding source code, to be '
+            u'distributed under the terms of Sections 1 and 2 above on a '
+            u'medium customarily used for software interchange; or,\n'
+            u'\n'
+            u'c) Accompany it with the information you received as to the '
+            u'offer to distribute corresponding source code.  (This '
+            u'alternative is allowed only for noncommercial distribution and '
+            u'only if you received the program in object code or executable '
+            u'form with such an offer, in accord with Subsection b above.)\n'
+            u'\n'
+            u'The source code for a work means the preferred form of the work '
+            u'for making modifications to it.  For an executable work, '
+            u'complete source code means all the source code for all modules '
+            u'it contains, plus any associated interface definition files, '
+            u'plus the scripts used to control compilation and installation of '
+            u'the executable.  However, as a special exception, the source '
+            u'code distributed need not include anything that is normally '
+            u'distributed (in either source or binary form) with the major '
+            u'components (compiler, kernel, and so on) of the operating system '
+            u'on which the executable runs, unless that component itself '
+            u'accompanies the executable.\n'
+            u'\n'
+            u'If distribution of executable or object code is made by offering '
+            u'access to copy from a designated place, then offering equivalent '
+            u'access to copy the source code from the same place counts as '
+            u'distribution of the source code, even though third parties are '
+            u'not compelled to copy the source along with the object code.\n'
+            u'\n'
+            u'4. You may not copy, modify, sublicense, or distribute the '
+            u'Program except as expressly provided under this License.  Any '
+            u'attempt otherwise to copy, modify, sublicense or distribute the '
+            u'Program is void, and will automatically terminate your rights '
+            u'under this License. However, parties who have received copies, '
+            u'or rights, from you under this License will not have their '
+            u'licenses terminated so long as such parties remain in full '
+            u'compliance.\n'
+            u'\n'
+            u'5. You are not required to accept this License, since you have '
+            u'not signed it.  However, nothing else grants you permission to '
+            u'modify or distribute the Program or its derivative works.  These '
+            u'actions are prohibited by law if you do not accept this '
+            u'License.  Therefore, by modifying or distributing the Program '
+            u'(or any work based on the Program), you indicate your acceptance '
+            u'of this License to do so, and all its terms and conditions for '
+            u'copying, distributing or modifying the Program or works based on '
+            u'it.\n'
+            u'\n'
+            u'6. Each time you redistribute the Program (or any work based on '
+            u'the Program), the recipient automatically receives a license '
+            u'from the original licensor to copy, distribute or modify the '
+            u'Program subject to these terms and conditions.  You may not '
+            u'impose any further restrictions on the recipients\' exercise of '
+            u'the rights granted herein. You are not responsible for enforcing '
+            u'compliance by third parties to this License.\n'
+            u'\n'
+            u'7. If, as a consequence of a court judgment or allegation of '
+            u'patent infringement or for any other reason (not limited to '
+            u'patent issues), conditions are imposed on you (whether by court '
+            u'order, agreement or otherwise) that contradict the conditions of '
+            u'this License, they do not excuse you from the conditions of this '
+            u'License.  If you cannot distribute so as to satisfy '
+            u'simultaneously your obligations under this License and any other '
+            u'pertinent obligations, then as a consequence you may not '
+            u'distribute the Program at all.  For example, if a patent license '
+            u'would not permit royalty-free redistribution of the Program by '
+            u'all those who receive copies directly or indirectly through you, '
+            u'then the only way you could satisfy both it and this License '
+            u'would be to refrain entirely from distribution of the Program.\n'
+            u'\n'
+            u'If any portion of this section is held invalid or unenforceable '
+            u'under any particular circumstance, the balance of the section is '
+            u'intended to apply and the section as a whole is intended to '
+            u'apply in other circumstances.\n'
+            u'\n'
+            u'It is not the purpose of this section to induce you to infringe '
+            u'any patents or other property right claims or to contest '
+            u'validity of any such claims; this section has the sole purpose '
+            u'of protecting the integrity of the free software distribution '
+            u'system, which is implemented by public license practices.  Many '
+            u'people have made generous contributions to the wide range of '
+            u'software distributed through that system in reliance on '
+            u'consistent application of that system; it is up to the '
+            u'author/donor to decide if he or she is willing to distribute '
+            u'software through any other system and a licensee cannot impose '
+            u'that choice.\n'
+            u'\n'
+            u'This section is intended to make thoroughly clear what is '
+            u'believed to be a consequence of the rest of this License.\n'
+            u'\n'
+            u'8. If the distribution and/or use of the Program is restricted '
+            u'in certain countries either by patents or by copyrighted '
+            u'interfaces, the original copyright holder who places the Program '
+            u'under this License may add an explicit geographical distribution '
+            u'limitation excluding those countries, so that distribution is '
+            u'permitted only in or among countries not thus excluded.  In such '
+            u'case, this License incorporates the limitation as if written in '
+            u'the body of this License.\n'
+            u'\n'
+            u'9. The Free Software Foundation may publish revised and/or new '
+            u'versions of the General Public License from time to time.  Such '
+            u'new versions will be similar in spirit to the present version, '
+            u'but may differ in detail to address new problems or concerns.\n'
+            u'\n'
+            u'Each version is given a distinguishing version number.  If the '
+            u'Program specifies a version number of this License which applies '
+            u'to it and \"any later version\', you have the option of '
+            u'following the terms and conditions either of that version or of '
+            u'any later version published by the Free Software Foundation.  If '
+            u'the Program does not specify a version number of this License, '
+            u'you may choose any version ever published by the Free Software '
+            u'Foundation.\n'
+            u'\n'
+            u'10. If you wish to incorporate parts of the Program into other '
+            u'free programs whose distribution conditions are different, write '
+            u'to the author to ask for permission.  For software which is '
+            u'copyrighted by the Free Software Foundation, write to the Free '
+            u'Software Foundation; we sometimes make exceptions for this.  Our '
+            u'decision will be guided by the two goals of preserving the free '
+            u'status of all derivatives of our free software and of promoting '
+            u'the sharing and reuse of software generally.\n'
+            u'\n'
+            u'NO WARRANTY\n'
+            u'\n'
+            u'11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO '
+            u'WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE '
+            u'LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT '
+            u'HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT '
+            u'WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, '
+            u'BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY '
+            u'AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE '
+            u'QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE '
+            u'PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY '
+            u'SERVICING, REPAIR OR CORRECTION.\n'
+            u'\n'
+            u'12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO '
+            u'IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY '
+            u'MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE '
+            u'LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, '
+            u'INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR '
+            u'INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS '
+            u'OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY '
+            u'YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH '
+            u'ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN '
+            u'ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n'
+            u'\n'
+            u'END OF TERMS AND CONDITIONS\n'
+            u'\n'
+            u'How to Apply These Terms to Your New Programs\n'
+            u'\n'
+            u'If you develop a new program, and you want it to be of the '
+            u'greatest possible use to the public, the best way to achieve '
+            u'this is to make it free software which everyone can redistribute '
+            u'and change under these terms.\n'
+            u'\n'
+            u'To do so, attach the following notices to the program.  It is '
+            u'safest to attach them to the start of each source file to most '
+            u'effectively convey the exclusion of warranty; and each file '
+            u'should have at least the "copyright" line and a pointer to where '
+            u'the full notice is found.\n'
+            u'\n'
+            u'<one line to give the program\'s name and a brief idea of what '
+            u'it does.>\n'
+            u'Copyright (C) <year>  <name of author>\n'
+            u'\n'
+            u'This program is free software; you can redistribute it and/or '
+            u'modify it under the terms of the GNU General Public License as '
+            u'published by the Free Software Foundation; either version 2 of '
+            u'the License, or (at your option) any later version.\n'
+            u'\n'
+            u'This program is distributed in the hope that it will be useful, '
+            u'but WITHOUT ANY WARRANTY; without even the implied warranty of '
+            u'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the '
+            u'GNU General Public License for more details.\n'
+            u'\n'
+            u'You should have received a copy of the GNU General Public '
+            u'License along with this program; if not, write to the Free '
+            u'Software Foundation, Inc., 51 Franklin Street, Fifth Floor, '
+            u'Boston, MA 02110-1301 USA.\n'
+            u'\n'
+            u'Also add information on how to contact you by electronic and '
+            u'paper mail.\n'
+            u'\n'
+            u'If the program is interactive, make it output a short notice '
+            u'like this when it starts in an interactive mode:\n'
+            u'\n'
+            u'Gnomovision version 69, Copyright (C) year name of author\n'
+            u'Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type '
+            u'"show w".\n'
+            u'This is free software, and you are welcome to redistribute it '
+            u'under certain conditions; type "show c" for details.\n'
+            u'\n'
+            u'The hypothetical commands "show w" and "show c" should show '
+            u'the appropriate parts of the General Public License.  Of course, '
+            u'the commands you use may be called something other than "show '
+            u'w" and "show c"; they could even be mouse-clicks or menu items--'
+            u'whatever suits your program.\n'
+            u'\n'
+            u'You should also get your employer (if you work as a programmer) '
+            u'or your school, if any, to sign a "copyright disclaimer" for the '
+            u'program, if necessary.  Here is a sample; alter the names:\n'
+            u'\n'
+            u'Yoyodyne, Inc., hereby disclaims all copyright interest in the '
+            u'program "Gnomovision" (which makes passes at compilers) written '
+            u'by James Hacker.\n'
+            u'\n'
+            u'<signature of Ty Coon>, 1 April 1989\n'
+            u'Ty Coon, President of Vice\n'
+            u'\n'
+            u'This General Public License does not permit incorporating your '
+            u'program into proprietary programs.  If your program is a '
+            u'subroutine library, you may consider it more useful to permit '
+            u'linking proprietary applications with the library.  If this is '
+            u'what you want to do, use the GNU Lesser General Public License '
+            u'instead of this License.'))
         self.AboutNotebook.setTabText(
             self.AboutNotebook.indexOf(self.LicenseTab),
-            translate('AboutForm', 'License'))
-        self.ContributeButton.setText(translate('AboutForm', 'Contribute'))
-        self.CloseButton.setText(translate('AboutForm', 'Close'))
+            translate(u'AboutForm', u'License'))
+        self.ContributeButton.setText(translate(u'AboutForm', u'Contribute'))
+        self.CloseButton.setText(translate(u'AboutForm', u'Close'))

=== modified file 'openlp/core/ui/aboutform.py'
--- openlp/core/ui/aboutform.py	2010-06-01 17:13:54 +0000
+++ openlp/core/ui/aboutform.py	2010-06-06 21:33:27 +0000
@@ -26,6 +26,7 @@
 from PyQt4 import QtCore, QtGui
 
 from aboutdialog import Ui_AboutDialog
+from openlp.core.lib import translate
 
 class AboutForm(QtGui.QDialog, Ui_AboutDialog):
     """
@@ -43,7 +44,7 @@
         about_text = about_text.replace(u'<version>',
             self.applicationVersion[u'version'])
         if self.applicationVersion[u'build']:
-            build_text = u' %s %s' % (self.trUtf8('build'),
+            build_text = u' %s %s' % (translate(u'AboutForm', u'build'),
                 self.applicationVersion[u'build'])
         else:
             build_text = u''

=== modified file 'openlp/core/ui/amendthemedialog.py'
--- openlp/core/ui/amendthemedialog.py	2010-06-01 17:13:54 +0000
+++ openlp/core/ui/amendthemedialog.py	2010-06-06 21:33:27 +0000
@@ -749,6 +749,7 @@
             self.VerticalComboBox)
 
     def retranslateUi(self, AmendThemeDialog):
+<<<<<<< TREE
         AmendThemeDialog.setWindowTitle(
             translate('AmendThemeForm', 'Theme Maintenance'))
         self.ThemeNameLabel.setText(translate('AmendThemeForm', 'Theme Name:'))
@@ -775,8 +776,40 @@
             translate('AmendThemeForm', 'Vertical'))
         self.GradientComboBox.setItemText(2,
             translate('AmendThemeForm', 'Circular'))
+=======
+        AmendThemeDialog.setWindowTitle(
+            translate(u'AmendThemeForm', u'Theme Maintenance'))
+        self.ThemeNameLabel.setText(
+            translate(u'AmendThemeForm', u'Theme Name:'))
+        self.BackgroundLabel.setText(
+            translate(u'AmendThemeForm', u'Background:'))
+        self.BackgroundComboBox.setItemText(0,
+            translate(u'AmendThemeForm', u'Opaque'))
+        self.BackgroundComboBox.setItemText(1, 
+            translate(u'AmendThemeForm', u'Transparent'))
+        self.BackgroundTypeLabel.setText(
+            translate(u'AmendThemeForm', u'Background Type:'))
+        self.BackgroundTypeComboBox.setItemText(0,
+            translate(u'AmendThemeForm', u'Solid Color'))
+        self.BackgroundTypeComboBox.setItemText(1, 
+            translate(u'AmendThemeForm', u'Gradient'))
+        self.BackgroundTypeComboBox.setItemText(2, 
+            translate(u'AmendThemeForm', u'Image'))
+        self.Color1Label.setText(
+            translate(u'AmendThemeForm', u'<Color1>'))
+        self.Color2Label.setText(translate(u'AmendThemeForm', u'<Color2>'))
+        self.ImageLabel.setText(translate(u'AmendThemeForm', u'Image:'))
+        self.GradientLabel.setText(translate(u'AmendThemeForm', u'Gradient :'))
+        self.GradientComboBox.setItemText(0, 
+            translate(u'AmendThemeForm', u'Horizontal'))
+        self.GradientComboBox.setItemText(1, 
+            translate(u'AmendThemeForm', u'Vertical'))
+        self.GradientComboBox.setItemText(2, 
+            translate(u'AmendThemeForm', u'Circular'))
+>>>>>>> MERGE-SOURCE
         self.ThemeTabWidget.setTabText(
             self.ThemeTabWidget.indexOf(self.BackgroundTab),
+<<<<<<< TREE
             translate('AmendThemeForm', 'Background'))
         self.FontMainGroupBox.setTitle(translate('AmendThemeForm', 'Main Font'))
         self.FontMainlabel.setText(translate('AmendThemeForm', 'Font:'))
@@ -810,8 +843,50 @@
         self.FontMainYSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
         self.FontMainWidthSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
         self.FontMainHeightSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
+=======
+            translate(u'AmendThemeForm', u'Background'))
+        self.FontMainGroupBox.setTitle(
+            translate(u'AmendThemeForm', u'Main Font'))
+        self.FontMainlabel.setText(translate(u'AmendThemeForm', u'Font:'))
+        self.FontMainColorLabel.setText(
+            translate(u'AmendThemeForm', u'Font Color:'))
+        self.FontMainSize.setText(translate(u'AmendThemeForm', u'Size:'))
+        self.FontMainSizeSpinBox.setSuffix(translate(u'AmendThemeForm', u'pt'))
+        self.FontMainWrapIndentationLabel.setText(
+            translate(u'AmendThemeForm', u'Wrap Indentation'))
+        self.FontMainWrapLineAdjustmentLabel.setText(
+            translate(u'AmendThemeForm', u'Adjust Line Spacing'))
+        self.FontMainWeightComboBox.setItemText(0, 
+            translate(u'AmendThemeForm', u'Normal'))
+        self.FontMainWeightComboBox.setItemText(1, 
+            translate(u'AmendThemeForm', u'Bold'))
+        self.FontMainWeightComboBox.setItemText(2, 
+            translate(u'AmendThemeForm', u'Italics'))
+        self.FontMainWeightComboBox.setItemText(3, 
+            translate(u'AmendThemeForm', u'Bold/Italics'))
+        self.FontMainWeightLabel.setText(
+            translate(u'AmendThemeForm', u'Font Weight:'))
+        self.MainLocationGroupBox.setTitle(
+            translate(u'AmendThemeForm', u'Display Location'))
+        self.DefaultLocationLabel.setText(
+            translate(u'AmendThemeForm', u'Use Default Location:'))
+        self.FontMainXLabel.setText(
+            translate(u'AmendThemeForm', u'X Position:'))
+        self.FontMainYLabel.setText(
+            translate(u'AmendThemeForm', u'Y Position:'))
+        self.FontMainWidthLabel.setText(
+            translate(u'AmendThemeForm', u'Width:'))
+        self.FontMainHeightLabel.setText(
+            translate(u'AmendThemeForm', u'Height:'))
+        self.FontMainXSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
+        self.FontMainYSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
+        self.FontMainWidthSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
+        self.FontMainHeightSpinBox.setSuffix(
+            translate(u'AmendThemeForm', u'px'))
+>>>>>>> MERGE-SOURCE
         self.ThemeTabWidget.setTabText(
             self.ThemeTabWidget.indexOf(self.FontMainTab),
+<<<<<<< TREE
             translate('AmendThemeForm', 'Font Main'))
         self.FooterFontGroupBox.setTitle(
             translate('AmendThemeForm', 'Footer Font'))
@@ -846,8 +921,49 @@
         self.FontFooterWidthSpinBox.setSuffix(translate('AmendThemeForm', 'px'))
         self.FontFooterHeightSpinBox.setSuffix(
             translate('AmendThemeForm', 'px'))
+=======
+            translate(u'AmendThemeForm', u'Font Main'))
+        self.FooterFontGroupBox.setTitle(
+            translate(u'AmendThemeForm', u'Footer Font'))
+        self.FontFooterLabel.setText(translate(u'AmendThemeForm', u'Font:'))
+        self.FontFooterColorLabel.setText(
+            translate(u'AmendThemeForm', u'Font Color:'))
+        self.FontFooterSizeLabel.setText(translate(u'AmendThemeForm', u'Size:'))
+        self.FontFooterSizeSpinBox.setSuffix(translate(u'AmendThemeForm', u'pt'))
+        self.FontFooterWeightComboBox.setItemText(0, 
+            translate(u'AmendThemeForm', u'Normal'))
+        self.FontFooterWeightComboBox.setItemText(1,
+            translate(u'AmendThemeForm', u'Bold'))
+        self.FontFooterWeightComboBox.setItemText(2, 
+            translate(u'AmendThemeForm', u'Italics'))
+        self.FontFooterWeightComboBox.setItemText(3, 
+            translate(u'AmendThemeForm', u'Bold/Italics'))
+        self.FontFooterWeightLabel.setText(
+            translate(u'AmendThemeForm', u'Font Weight:'))
+        self.LocationFooterGroupBox.setTitle(
+            translate(u'AmendThemeForm', u'Display Location'))
+        self.FontFooterDefaultLabel.setText(
+            translate(u'AmendThemeForm', u'Use Default Location:'))
+        self.FontFooterXLabel.setText(
+            translate(u'AmendThemeForm', u'X Position:'))
+        self.FontFooterYLabel.setText(
+            translate(u'AmendThemeForm', u'Y Position:'))
+        self.FontFooterWidthLabel.setText(
+            translate(u'AmendThemeForm', u'Width:'))
+        self.FontFooterHeightLabel.setText(
+            translate(u'AmendThemeForm', u'Height:'))
+        self.FontFooterXSpinBox.setSuffix(
+            translate(u'AmendThemeForm', u'px'))
+        self.FontFooterYSpinBox.setSuffix(
+            translate(u'AmendThemeForm', u'px'))
+        self.FontFooterWidthSpinBox.setSuffix(
+            translate(u'AmendThemeForm', u'px'))
+        self.FontFooterHeightSpinBox.setSuffix(
+            translate(u'AmendThemeForm', u'px'))
+>>>>>>> MERGE-SOURCE
         self.ThemeTabWidget.setTabText(
             self.ThemeTabWidget.indexOf(self.FontFooterTab),
+<<<<<<< TREE
             translate('AmendThemeForm', 'Font Footer'))
         self.OutlineGroupBox.setTitle(translate('AmendThemeForm', 'Outline'))
         self.OutlineSpinBoxLabel.setText(
@@ -886,8 +1002,55 @@
             translate('AmendThemeForm', 'Slide Transition'))
         self.SlideTransitionCheckedBoxLabel.setText(
             translate('AmendThemeForm', 'Transition Active:'))
+=======
+            translate(u'AmendThemeForm', u'Font Footer'))
+        self.OutlineGroupBox.setTitle(translate(u'AmendThemeForm', u'Outline'))
+        self.OutlineSpinBoxLabel.setText(
+            translate(u'AmendThemeForm', u'Outline Size:'))
+        self.OutlineSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
+        self.OutlineColorLabel.setText(
+            translate(u'AmendThemeForm', u'Outline Color:'))
+        self.OutlineEnabledLabel.setText(
+            translate(u'AmendThemeForm', u'Show Outline:'))
+        self.ShadowGroupBox.setTitle(
+            translate(u'AmendThemeForm', u'Shadow'))
+        self.ShadowSpinBoxLabel.setText(
+            translate(u'AmendThemeForm', u'Shadow Size:'))
+        self.ShadowSpinBox.setSuffix(translate(u'AmendThemeForm', u'px'))
+        self.ShadowColorLabel.setText(
+            translate(u'AmendThemeForm', u'Shadow Color:'))
+        self.ShadowEnabledLabel.setText(
+            translate(u'AmendThemeForm', u'Show Shadow:'))
+        self.AlignmentGroupBox.setTitle(
+            translate(u'AmendThemeForm', u'Alignment'))
+        self.HorizontalLabel.setText(
+            translate(u'AmendThemeForm', u'Horizontal Align:'))
+        self.HorizontalComboBox.setItemText(0, 
+            translate(u'AmendThemeForm', u'Left'))
+        self.HorizontalComboBox.setItemText(1, 
+            translate(u'AmendThemeForm', u'Right'))
+        self.HorizontalComboBox.setItemText(2, 
+            translate(u'AmendThemeForm', u'Center'))
+        self.VerticalLabel.setText(
+            translate(u'AmendThemeForm', u'Vertical Align:'))
+        self.VerticalComboBox.setItemText(0, 
+            translate(u'AmendThemeForm', u'Top'))
+        self.VerticalComboBox.setItemText(1, 
+            translate(u'AmendThemeForm', u'Middle'))
+        self.VerticalComboBox.setItemText(2, 
+            translate(u'AmendThemeForm', u'Bottom'))
+        self.TransitionGroupBox.setTitle(
+            translate(u'AmendThemeForm', u'Slide Transition'))
+        self.SlideTransitionCheckedBoxLabel.setText(
+            translate(u'AmendThemeForm', u'Transition Active:'))
+>>>>>>> MERGE-SOURCE
         self.ThemeTabWidget.setTabText(
             self.ThemeTabWidget.indexOf(self.OtherOptionsTab),
+<<<<<<< TREE
             translate('AmendThemeForm', 'Other Options'))
         self.PreviewGroupBox.setTitle(translate('AmendThemeForm', 'Preview'))
 
+=======
+            translate(u'AmendThemeForm', u'Other Options'))
+        self.PreviewGroupBox.setTitle(translate(u'AmendThemeForm', u'Preview'))
+>>>>>>> MERGE-SOURCE

=== modified file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py	2010-05-27 14:41:47 +0000
+++ openlp/core/ui/amendthemeform.py	2010-06-06 21:33:27 +0000
@@ -29,7 +29,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import ThemeXML
+from openlp.core.lib import ThemeXML, translate
 from amendthemedialog import Ui_AmendThemeDialog
 
 log = logging.getLogger(u'AmendThemeForm')
@@ -210,7 +210,7 @@
 
     def onImageToolButtonClicked(self):
         filename = QtGui.QFileDialog.getOpenFileName(
-            self, self.trUtf8(u'Open file'))
+            self, translate(u'AmendThemeForm', u'Open file'))
         if filename:
             self.ImageLineEdit.setText(filename)
             self.theme.background_filename = filename
@@ -629,7 +629,7 @@
             if theme.background_type == u'solid':
                 self.Color1PushButton.setStyleSheet(
                     u'background-color: %s' % unicode(theme.background_color))
-                self.Color1Label.setText(self.trUtf8('Background Color:'))
+                self.Color1Label.setText(translate(u'AmendThemeForm', u'Background Color:'))
                 self.Color1Label.setVisible(True)
                 self.Color1PushButton.setVisible(True)
                 self.Color2Label.setVisible(False)
@@ -644,8 +644,8 @@
                     % unicode(theme.background_startColor))
                 self.Color2PushButton.setStyleSheet(u'background-color: %s' \
                     % unicode(theme.background_endColor))
-                self.Color1Label.setText(self.trUtf8('First  Color:'))
-                self.Color2Label.setText(self.trUtf8('Second Color:'))
+                self.Color1Label.setText(translate(u'AmendThemeForm', u'First Color:'))
+                self.Color2Label.setText(translate(u'AmendThemeForm', u'Second Color:'))
                 self.Color1Label.setVisible(True)
                 self.Color1PushButton.setVisible(True)
                 self.Color2Label.setVisible(True)
@@ -713,7 +713,7 @@
             log.debug(u'Page Length area height %s, metrics %s, lines %s' %
                 (self.FontMainHeightSpinBox.value(), metrics.height(),
                 page_length))
-            page_length_text = unicode(self.trUtf8('Slide Height is %s rows'))
+            page_length_text = unicode(translate(u'AmendThemeForm', u'Slide Height is %s rows'))
             self.FontMainLinesPageLabel.setText(page_length_text % page_length)
             frame = self.thememanager.generateImage(self.theme)
             self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))

=== modified file 'openlp/core/ui/displaytab.py'
--- openlp/core/ui/displaytab.py	2010-05-25 16:16:43 +0000
+++ openlp/core/ui/displaytab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtGui, QtCore
 
-from openlp.core.lib import SettingsTab, Receiver
+from openlp.core.lib import SettingsTab, Receiver, translate
 
 class DisplayTab(SettingsTab):
     """
@@ -39,7 +39,7 @@
         SettingsTab.__init__(self, u'Display')
 
     def setupUi(self):
-        self.tabTitleVisible = self.trUtf8('Displays')
+        self.tabTitleVisible = translate(u'DisplayTab', u'Displays')
         self.layoutWidget = QtGui.QWidget(self)
         self.layoutWidget.setGeometry(QtCore.QRect(0, 40, 241, 79))
         self.layoutWidget.setObjectName(u'layoutWidget')
@@ -159,22 +159,22 @@
             self.onOverrideCheckBoxChanged)
 
     def retranslateUi(self):
-        self.setWindowTitle( self.trUtf8(u'Amend Display Settings'))
-        self.CurrentGroupBox.setTitle( self.trUtf8(u'Default Settings'))
-        self.XLabel.setText(self.trUtf8(u'X'))
+        self.setWindowTitle(translate(u'DisplayTab', u'Amend Display Settings'))
+        self.CurrentGroupBox.setTitle(translate(u'DisplayTab', u'Default Settings'))
+        self.XLabel.setText(translate(u'DisplayTab', u'X'))
         self.Xpos.setText(u'0')
-        self.YLabel.setText( self.trUtf8(u'Y'))
+        self.YLabel.setText(translate(u'DisplayTab', u'Y'))
         self.Ypos.setText(u'0')
-        self.HeightLabel.setText( self.trUtf8(u'Height'))
+        self.HeightLabel.setText(translate(u'DisplayTab', u'Height'))
         self.Height.setText(u'0')
-        self.WidthLabel.setText( self.trUtf8(u'Width'))
+        self.WidthLabel.setText(translate(u'DisplayTab', u'Width'))
         self.Width.setText(u'0')
-        self.CurrentGroupBox_2.setTitle( self.trUtf8(u'Amend Settings'))
-        self.XAmendLabel.setText( self.trUtf8(u'X'))
-        self.YAmendLabel.setText( self.trUtf8(u'Y'))
-        self.HeightAmendLabel.setText( self.trUtf8(u'Height'))
-        self.WidthAmendLabel.setText( self.trUtf8(u'Width'))
-        self.OverrideCheckBox.setText( self.trUtf8(u'Override Output Display'))
+        self.CurrentGroupBox_2.setTitle(translate(u'DisplayTab', u'Amend Settings'))
+        self.XAmendLabel.setText(translate(u'DisplayTab', u'X'))
+        self.YAmendLabel.setText(translate(u'DisplayTab', u'Y'))
+        self.HeightAmendLabel.setText(translate(u'DisplayTab', u'Height'))
+        self.WidthAmendLabel.setText(translate(u'DisplayTab', u'Width'))
+        self.OverrideCheckBox.setText(translate(u'DisplayTab', u'Override Output Display'))
 
     def load(self):
         settings = QtCore.QSettings()

=== modified file 'openlp/core/ui/generaltab.py'
--- openlp/core/ui/generaltab.py	2010-05-05 17:35:11 +0000
+++ openlp/core/ui/generaltab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, Receiver
+from openlp.core.lib import SettingsTab, Receiver, translate
 
 class GeneralTab(SettingsTab):
     """
@@ -54,7 +54,7 @@
 
     def setupUi(self):
         self.setObjectName(u'GeneralTab')
-        self.tabTitleVisible = self.trUtf8('General')
+        self.tabTitleVisible = translate(u'GeneralTab', u'General')
         self.GeneralLayout = QtGui.QHBoxLayout(self)
         self.GeneralLayout.setSpacing(8)
         self.GeneralLayout.setMargin(8)
@@ -177,25 +177,32 @@
             QtCore.SIGNAL(u'editingFinished()'), self.onPasswordEditLostFocus)
 
     def retranslateUi(self):
-        self.MonitorGroupBox.setTitle(self.trUtf8('Monitors'))
+        self.MonitorGroupBox.setTitle(translate(u'GeneralTab', u'Monitors'))
         self.MonitorLabel.setText(
-            self.trUtf8('Select monitor for output display:'))
+            translate(u'GeneralTab', u'Select monitor for output display:'))
         self.DisplayOnMonitorCheck.setText(
-            self.trUtf8('Display if a single screen'))
-        self.StartupGroupBox.setTitle(self.trUtf8('Application Startup'))
-        self.WarningCheckBox.setText(self.trUtf8('Show blank screen warning'))
+            translate(u'GeneralTab', u'Display if a single screen'))
+        self.StartupGroupBox.setTitle(
+            translate(u'GeneralTab', u'Application Startup'))
+        self.WarningCheckBox.setText(
+            translate(u'GeneralTab', u'Show blank screen warning'))
         self.AutoOpenCheckBox.setText(
-            self.trUtf8('Automatically open the last service'))
-        self.ShowSplashCheckBox.setText(self.trUtf8('Show the splash screen'))
-        self.SettingsGroupBox.setTitle(self.trUtf8('Application Settings'))
+            translate(u'GeneralTab', u'Automatically open the last service'))
+        self.ShowSplashCheckBox.setText(
+            translate(u'GeneralTab', u'Show the splash screen'))
+        self.SettingsGroupBox.setTitle(
+            translate(u'GeneralTab', u'Application Settings'))
         self.SaveCheckServiceCheckBox.setText(
-            self.trUtf8('Prompt to save Service before starting New'))
+            translate(u'GeneralTab', 
+            u'Prompt to save Service before starting New'))
         self.AutoPreviewCheckBox.setText(
-            self.trUtf8('Preview Next Song from Service Manager'))
-        self.CCLIGroupBox.setTitle(self.trUtf8('CCLI Details'))
-        self.NumberLabel.setText(self.trUtf8('CCLI Number:'))
-        self.UsernameLabel.setText(self.trUtf8('SongSelect Username:'))
-        self.PasswordLabel.setText(self.trUtf8('SongSelect Password:'))
+            translate(u'GeneralTab', u'Preview Next Song from Service Manager'))
+        self.CCLIGroupBox.setTitle(translate(u'GeneralTab', u'CCLI Details'))
+        self.NumberLabel.setText(translate(u'GeneralTab', u'CCLI Number:'))
+        self.UsernameLabel.setText(
+            translate(u'GeneralTab', u'SongSelect Username:'))
+        self.PasswordLabel.setText(
+            translate(u'GeneralTab', u'SongSelect Password:'))
 
     def onMonitorComboBoxChanged(self):
         self.MonitorNumber = self.MonitorComboBox.currentIndex()
@@ -231,10 +238,11 @@
         settings = QtCore.QSettings()
         settings.beginGroup(self.settingsSection)
         for screen in self.screens.screen_list:
-            screen_name = u'%s %d' % (self.trUtf8('Screen'),
+            screen_name = u'%s %d' % (translate(u'GeneralTab', u'Screen'),
                 screen[u'number'] + 1)
             if screen[u'primary']:
-                screen_name = u'%s (%s)' % (screen_name, self.trUtf8('primary'))
+                screen_name = u'%s (%s)' % (screen_name, 
+                    translate(u'GeneralTab', u'primary'))
             self.MonitorComboBox.addItem(screen_name)
         # Get the configs
         self.Warning = settings.value(

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2010-05-28 00:18:26 +0000
+++ openlp/core/ui/mainwindow.py	2010-06-06 21:33:27 +0000
@@ -354,111 +354,113 @@
         """
         Set up the translation system
         """
-        MainWindow.mainTitle = translate('MainWindow', 'OpenLP 2.0')
-        MainWindow.language = translate('MainWindow', 'English')
-        MainWindow.defaultThemeText = translate('MainWindow',
-            'Default Theme: ')
+        MainWindow.mainTitle = translate(u'MainWindow', u'OpenLP 2.0')
+        MainWindow.language = translate(u'MainWindow', u'English')
+        MainWindow.defaultThemeText = translate(u'MainWindow', 
+            u'Default Theme: ')
         MainWindow.setWindowTitle(MainWindow.mainTitle)
-        self.FileMenu.setTitle(translate('MainWindow', '&File'))
-        self.FileImportMenu.setTitle(translate('MainWindow', '&Import'))
-        self.FileExportMenu.setTitle(translate('MainWindow', '&Export'))
-        self.OptionsMenu.setTitle(translate('MainWindow', '&Options'))
-        self.OptionsViewMenu.setTitle(translate('MainWindow', '&View'))
-        self.ViewModeMenu.setTitle(translate('MainWindow', 'M&ode'))
-        self.OptionsLanguageMenu.setTitle(translate('MainWindow',
+        self.FileMenu.setTitle(translate(u'MainWindow', u'&File'))
+        self.FileImportMenu.setTitle(translate(u'MainWindow', u'&Import'))
+        self.FileExportMenu.setTitle(translate(u'MainWindow', u'&Export'))
+        self.OptionsMenu.setTitle(translate(u'MainWindow', u'&Options'))
+        self.OptionsViewMenu.setTitle(translate(u'MainWindow', u'&View'))
+        self.ViewModeMenu.setTitle(translate(u'MainWindow', u'M&ode'))
+        self.OptionsLanguageMenu.setTitle(translate(u'MainWindow',
             u'&Language'))
-        self.ToolsMenu.setTitle(translate('MainWindow', '&Tools'))
-        self.HelpMenu.setTitle(translate('MainWindow', '&Help'))
+        self.ToolsMenu.setTitle(translate(u'MainWindow', u'&Tools'))
+        self.HelpMenu.setTitle(translate(u'MainWindow', u'&Help'))
         self.MediaManagerDock.setWindowTitle(
-            translate('MainWindow', 'Media Manager'))
+            translate(u'MainWindow', u'Media Manager'))
         self.ServiceManagerDock.setWindowTitle(
-            translate('MainWindow', 'Service Manager'))
+            translate(u'MainWindow', u'Service Manager'))
         self.ThemeManagerDock.setWindowTitle(
-            translate('MainWindow', 'Theme Manager'))
-        self.FileNewItem.setText(translate('MainWindow', '&New'))
-        self.FileNewItem.setToolTip(translate('MainWindow', 'New Service'))
+            translate(u'MainWindow', u'Theme Manager'))
+        self.FileNewItem.setText(translate(u'MainWindow', u'&New'))
+        self.FileNewItem.setToolTip(translate(u'MainWindow', u'New Service'))
         self.FileNewItem.setStatusTip(
-            translate('MainWindow', 'Create a new Service'))
-        self.FileNewItem.setShortcut(translate('MainWindow', 'Ctrl+N'))
-        self.FileOpenItem.setText(translate('MainWindow', '&Open'))
-        self.FileOpenItem.setToolTip(translate('MainWindow', 'Open Service'))
+            translate(u'MainWindow', u'Create a new Service'))
+        self.FileNewItem.setShortcut(translate(u'MainWindow', u'Ctrl+N'))
+        self.FileOpenItem.setText(translate(u'MainWindow', u'&Open'))
+        self.FileOpenItem.setToolTip(translate(u'MainWindow', u'Open Service'))
         self.FileOpenItem.setStatusTip(
-            translate('MainWindow', 'Open an existing service'))
-        self.FileOpenItem.setShortcut(translate('MainWindow', 'Ctrl+O'))
-        self.FileSaveItem.setText(translate('MainWindow', '&Save'))
-        self.FileSaveItem.setToolTip(translate('MainWindow', 'Save Service'))
+            translate(u'MainWindow', u'Open an existing service'))
+        self.FileOpenItem.setShortcut(translate(u'MainWindow', u'Ctrl+O'))
+        self.FileSaveItem.setText(translate(u'MainWindow', u'&Save'))
+        self.FileSaveItem.setToolTip(translate(u'MainWindow', u'Save Service'))
         self.FileSaveItem.setStatusTip(
-            translate('MainWindow', 'Save the current service to disk'))
-        self.FileSaveItem.setShortcut(translate('MainWindow', 'Ctrl+S'))
-        self.FileSaveAsItem.setText(translate('MainWindow', 'Save &As...'))
+            translate(u'MainWindow', u'Save the current service to disk'))
+        self.FileSaveItem.setShortcut(translate(u'MainWindow', u'Ctrl+S'))
+        self.FileSaveAsItem.setText(translate(u'MainWindow', u'Save &As...'))
         self.FileSaveAsItem.setToolTip(
-            translate('MainWindow', 'Save Service As'))
-        self.FileSaveAsItem.setStatusTip(translate('MainWindow',
-            'Save the current service under a new name'))
-        self.FileSaveAsItem.setShortcut(translate('MainWindow', 'F12'))
-        self.FileExitItem.setText(translate('MainWindow', 'E&xit'))
-        self.FileExitItem.setStatusTip(translate('MainWindow', 'Quit OpenLP'))
-        self.FileExitItem.setShortcut(translate('MainWindow', 'Alt+F4'))
-        self.ImportThemeItem.setText(translate('MainWindow', '&Theme'))
-        self.ImportLanguageItem.setText(translate('MainWindow', '&Language'))
-        self.ExportThemeItem.setText(translate('MainWindow', '&Theme'))
-        self.ExportLanguageItem.setText(translate('MainWindow', '&Language'))
-        self.actionLook_Feel.setText(translate('MainWindow', 'Look && &Feel'))
-        self.OptionsSettingsItem.setText(translate('MainWindow', '&Settings'))
+            translate(u'MainWindow', u'Save Service As'))
+        self.FileSaveAsItem.setStatusTip(translate(u'MainWindow',
+            u'Save the current service under a new name'))
+        self.FileSaveAsItem.setShortcut(translate(u'MainWindow', u'F12'))
+        self.FileExitItem.setText(translate(u'MainWindow', u'E&xit'))
+        self.FileExitItem.setStatusTip(translate(u'MainWindow', u'Quit OpenLP'))
+        self.FileExitItem.setShortcut(translate(u'MainWindow', u'Alt+F4'))
+        self.ImportThemeItem.setText(translate(u'MainWindow', u'&Theme'))
+        self.ImportLanguageItem.setText(translate(u'MainWindow', u'&Language'))
+        self.ExportThemeItem.setText(translate(u'MainWindow', u'&Theme'))
+        self.ExportLanguageItem.setText(translate(u'MainWindow', u'&Language'))
+        self.actionLook_Feel.setText(translate(u'MainWindow', u'Look && &Feel'))
+        self.OptionsSettingsItem.setText(translate(u'MainWindow', u'&Settings'))
         self.ViewMediaManagerItem.setText(
-            translate('MainWindow', '&Media Manager'))
+            translate(u'MainWindow', u'&Media Manager'))
         self.ViewMediaManagerItem.setToolTip(
-            translate('MainWindow', 'Toggle Media Manager'))
-        self.ViewMediaManagerItem.setStatusTip(translate('MainWindow',
-            'Toggle the visibility of the Media Manager'))
-        self.ViewMediaManagerItem.setShortcut(translate('MainWindow', 'F8'))
+            translate(u'MainWindow', u'Toggle Media Manager'))
+        self.ViewMediaManagerItem.setStatusTip(translate(u'MainWindow',
+            u'Toggle the visibility of the Media Manager'))
+        self.ViewMediaManagerItem.setShortcut(translate(u'MainWindow', u'F8'))
         self.ViewThemeManagerItem.setText(
-            translate('MainWindow', '&Theme Manager'))
+            translate(u'MainWindow', u'&Theme Manager'))
         self.ViewThemeManagerItem.setToolTip(
-            translate('MainWindow', 'Toggle Theme Manager'))
-        self.ViewThemeManagerItem.setStatusTip(translate('MainWindow',
-            'Toggle the visibility of the Theme Manager'))
-        self.ViewThemeManagerItem.setShortcut(translate('MainWindow', 'F10'))
+            translate(u'MainWindow', u'Toggle Theme Manager'))
+        self.ViewThemeManagerItem.setStatusTip(translate(u'MainWindow',
+            u'Toggle the visibility of the Theme Manager'))
+        self.ViewThemeManagerItem.setShortcut(translate(u'MainWindow', u'F10'))
         self.ViewServiceManagerItem.setText(
-            translate('MainWindow', '&Service Manager'))
+            translate(u'MainWindow', u'&Service Manager'))
         self.ViewServiceManagerItem.setToolTip(
-            translate('MainWindow', 'Toggle Service Manager'))
-        self.ViewServiceManagerItem.setStatusTip(translate('MainWindow',
-            'Toggle the visibility of the Service Manager'))
-        self.ViewServiceManagerItem.setShortcut(translate('MainWindow', 'F9'))
+            translate(u'MainWindow', u'Toggle Service Manager'))
+        self.ViewServiceManagerItem.setStatusTip(translate(u'MainWindow',
+            u'Toggle the visibility of the Service Manager'))
+        self.ViewServiceManagerItem.setShortcut(translate(u'MainWindow', u'F9'))
         self.action_Preview_Panel.setText(
-            translate('MainWindow', '&Preview Panel'))
+            translate(u'MainWindow', u'&Preview Panel'))
         self.action_Preview_Panel.setToolTip(
-            translate('MainWindow', 'Toggle Preview Panel'))
-        self.action_Preview_Panel.setStatusTip(translate('MainWindow',
-            'Toggle the visibility of the Preview Panel'))
-        self.action_Preview_Panel.setShortcut(translate('MainWindow', 'F11'))
-        self.PluginItem.setText(translate('MainWindow', '&Plugin List'))
+            translate(u'MainWindow', u'Toggle Preview Panel'))
+        self.action_Preview_Panel.setStatusTip(translate(u'MainWindow',
+            u'Toggle the visibility of the Preview Panel'))
+        self.action_Preview_Panel.setShortcut(translate(u'MainWindow', u'F11'))
+        self.PluginItem.setText(translate(u'MainWindow', u'&Plugin List'))
         self.PluginItem.setStatusTip(
-            translate('MainWindow', 'List the Plugins'))
-        self.PluginItem.setShortcut(translate('MainWindow', 'Alt+F7'))
+            translate(u'MainWindow', u'List the Plugins'))
+        self.PluginItem.setShortcut(translate(u'MainWindow', u'Alt+F7'))
         self.HelpDocumentationItem.setText(
-            translate('MainWindow', '&User Guide'))
-        self.HelpAboutItem.setText(translate('MainWindow', '&About'))
+            translate(u'MainWindow', u'&User Guide'))
+        self.HelpAboutItem.setText(translate(u'MainWindow', u'&About'))
         self.HelpAboutItem.setStatusTip(
-            translate('MainWindow', 'More information about OpenLP'))
-        self.HelpAboutItem.setShortcut(translate('MainWindow', 'Ctrl+F1'))
-        self.HelpOnlineHelpItem.setText(translate('MainWindow', '&Online Help'))
-        self.HelpWebSiteItem.setText(translate('MainWindow', '&Web Site'))
+            translate(u'MainWindow', u'More information about OpenLP'))
+        self.HelpAboutItem.setShortcut(translate(u'MainWindow', u'Ctrl+F1'))
+        self.HelpOnlineHelpItem.setText(
+            translate(u'MainWindow', u'&Online Help'))
+        self.HelpWebSiteItem.setText(translate(u'MainWindow', u'&Web Site'))
         #i18n
-        self.AutoLanguageItem.setText(translate('MainWindow', '&Auto Detect'))
+        self.AutoLanguageItem.setText(translate(u'MainWindow', u'&Auto Detect'))
         self.AutoLanguageItem.setStatusTip(
-            translate('MainWindow', 'Choose System language, if available'))
+            translate(u'MainWindow', u'Choose System language, if available'))
         for item in self.LanguageGroup.actions():
             item.setText(item.objectName())
-            item.setStatusTip(translate('MainWindow',
-                'Set the interface language to %1').arg(item.objectName()))
-        self.ToolsAddToolItem.setText(translate('MainWindow', 'Add &Tool...'))
+            item.setStatusTip(translate(u'MainWindow',
+                u'Set the interface language to %1').arg(item.objectName()))
+        self.ToolsAddToolItem.setText(translate(u'MainWindow', u'Add &Tool...'))
         self.ToolsAddToolItem.setStatusTip(
-            translate('MainWindow', 'Add an application to the list of tools'))
+            translate(u'MainWindow', 
+                u'Add an application to the list of tools'))
         self.action_Preview_Panel.setText(
-            translate('MainWindow', '&Preview Pane'))
-        self.ModeLiveItem.setText(translate('MainWindow', '&Live'))
+            translate(u'MainWindow', u'&Preview Pane'))
+        self.ModeLiveItem.setText(translate(u'MainWindow', u'&Live'))
 
 
 class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
@@ -618,11 +620,12 @@
         Triggered by delay thread.
         """
         app_version = self.applicationVersion[u'full']
-        version_text = unicode(self.trUtf8('Version %s of OpenLP is now '
-            'available for download (you are currently running version %s).'
-            '\n\nYou can download the latest version from http://openlp.org'))
+        version_text = unicode(translate(u'MainWindow', u'Version %s of OpenLP '
+            u'is now available for download (you are currently running version '
+            u' %s). \n\nYou can download the latest version from '
+            u'http://openlp.org'))
         QtGui.QMessageBox.question(self,
-            self.trUtf8('OpenLP Version Updated'),
+            translate(u'MainWindow', u'OpenLP Version Updated'),
             version_text % (version, app_version),
             QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
             QtGui.QMessageBox.Ok)
@@ -653,8 +656,9 @@
         and settings.value(u'blank warning', QtCore.QVariant(False)).toBool():
             self.LiveController.onBlankDisplay(True)
             QtGui.QMessageBox.question(self,
-                self.trUtf8('OpenLP Main Display Blanked'),
-                self.trUtf8('The Main Display has been blanked out'),
+                translate(u'MainWindow', u'OpenLP Main Display Blanked'),
+                translate(u'MainWindow', 
+                     u'The Main Display has been blanked out'),
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
                 QtGui.QMessageBox.Ok)
         settings.endGroup()
@@ -709,9 +713,9 @@
         """
         if self.serviceNotSaved:
             ret = QtGui.QMessageBox.question(self,
-                self.trUtf8('Save Changes to Service?'),
-                self.trUtf8('Your service has changed.  '
-                    'Do you want to save those changes?'),
+                translate(u'MainWindow', u'Save Changes to Service?'),
+                translate(u'MainWindow', u'Your service has changed. '
+                    u'Do you want to save those changes?'),
                 QtGui.QMessageBox.StandardButtons(
                     QtGui.QMessageBox.Cancel |
                     QtGui.QMessageBox.Discard |

=== modified file 'openlp/core/ui/plugindialog.py'
--- openlp/core/ui/plugindialog.py	2010-05-29 19:50:50 +0000
+++ openlp/core/ui/plugindialog.py	2010-06-06 21:33:27 +0000
@@ -99,6 +99,7 @@
         QtCore.QMetaObject.connectSlotsByName(PluginViewDialog)
 
     def retranslateUi(self, PluginViewDialog):
+<<<<<<< TREE
         PluginViewDialog.setWindowTitle(translate('PluginForm', 'Plugin List'))
         self.PluginInfoGroupBox.setTitle(
             translate('PluginForm', 'Plugin Details'))
@@ -109,3 +110,17 @@
         self.StatusComboBox.setItemText(0, translate('PluginForm', 'Active'))
         self.StatusComboBox.setItemText(1, translate('PluginForm', 'Inactive'))
 
+=======
+        PluginViewDialog.setWindowTitle(
+            translate(u'PluginForm', u'Plugin List'))
+        self.PluginInfoGroupBox.setTitle(
+            translate(u'PluginForm', u'Plugin Details'))
+        self.VersionLabel.setText(
+            translate(u'PluginForm', u'Version:'))
+        self.VersionNumberLabel.setText(translate(u'PluginForm', u'TextLabel'))
+        self.AboutLabel.setText(translate(u'PluginForm', u'About:'))
+        self.StatusLabel.setText(translate(u'PluginForm', u'Status:'))
+        self.StatusComboBox.setItemText(0, translate(u'PluginForm', u'Active'))
+        self.StatusComboBox.setItemText(1, 
+            translate(u'PluginForm', u'Inactive'))
+>>>>>>> MERGE-SOURCE

=== modified file 'openlp/core/ui/serviceitemeditdialog.py'
--- openlp/core/ui/serviceitemeditdialog.py	2010-05-29 19:50:50 +0000
+++ openlp/core/ui/serviceitemeditdialog.py	2010-06-06 21:33:27 +0000
@@ -67,9 +67,17 @@
         QtCore.QMetaObject.connectSlotsByName(ServiceItemEditDialog)
 
     def retranslateUi(self, ServiceItemEditDialog):
+<<<<<<< TREE
         ServiceItemEditDialog.setWindowTitle(
             translate('ServiceItemEditForm', 'Service Item Maintenance'))
         self.upButton.setText(translate('ServiceItemEditForm', 'Up'))
         self.deleteButton.setText(translate('ServiceItemEditForm', 'Delete'))
         self.downButton.setText(translate('ServiceItemEditForm', 'Down'))
+=======
+        ServiceItemEditDialog.setWindowTitle(
+            translate(u'ServiceItemEditForm', u'Service Item Maintenance'))
+        self.upButton.setText(translate(u'ServiceItemEditForm', u'Up'))
+        self.deleteButton.setText(translate(u'ServiceItemEditForm', u'Delete'))
+        self.downButton.setText(translate(u'ServiceItemEditForm', u'Down'))
+>>>>>>> MERGE-SOURCE
 

=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py	2010-06-01 17:13:54 +0000
+++ openlp/core/ui/servicemanager.py	2010-06-06 21:33:27 +0000
@@ -33,7 +33,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import OpenLPToolbar, ServiceItem, contextMenuAction, \
-    Receiver, build_icon, ItemCapabilities, SettingsManager
+    Receiver, build_icon, ItemCapabilities, SettingsManager, translate
 from openlp.core.ui import ServiceNoteForm, ServiceItemEditForm
 from openlp.core.utils import AppLocation
 
@@ -114,21 +114,27 @@
         # Create the top toolbar
         self.Toolbar = OpenLPToolbar(self)
         self.Toolbar.addToolbarButton(
-            self.trUtf8('New Service'), u':/general/general_new.png',
-            self.trUtf8('Create a new service'), self.onNewService)
-        self.Toolbar.addToolbarButton(
-            self.trUtf8('Open Service'), u':/general/general_open.png',
-            self.trUtf8('Load an existing service'), self.onLoadService)
-        self.Toolbar.addToolbarButton(
-            self.trUtf8('Save Service'), u':/general/general_save.png',
-            self.trUtf8('Save this service'), self.onSaveService)
+            translate(u'ServiceManager', u'New Service'),
+                u':/general/general_new.png',
+            translate(u'ServiceManager', u'Create a new service'),
+                self.onNewService)
+        self.Toolbar.addToolbarButton(
+            translate(u'ServiceManager', u'Open Service'),
+                u':/general/general_open.png',
+            translate(u'ServiceManager', u'Load an existing service'),
+                self.onLoadService)
+        self.Toolbar.addToolbarButton(
+            translate(u'ServiceManager', u'Save Service'),
+                u':/general/general_save.png',
+            translate(u'ServiceManager', u'Save this service'),
+                self.onSaveService)
         self.Toolbar.addSeparator()
-        self.ThemeLabel = QtGui.QLabel(self.trUtf8('Theme:'),
+        self.ThemeLabel = QtGui.QLabel(translate(u'ServiceManager', u'Theme:'),
             self)
         self.ThemeLabel.setMargin(3)
         self.Toolbar.addWidget(self.ThemeLabel)
         self.ThemeComboBox = QtGui.QComboBox(self.Toolbar)
-        self.ThemeComboBox.setToolTip(self.trUtf8(
+        self.ThemeComboBox.setToolTip(translate(u'ServiceManager',
             u'Select a theme for the service'))
         self.ThemeComboBox.setSizeAdjustPolicy(
             QtGui.QComboBox.AdjustToContents)
@@ -161,22 +167,35 @@
         # Add the bottom toolbar
         self.OrderToolbar = OpenLPToolbar(self)
         self.OrderToolbar.addToolbarButton(
-            self.trUtf8('Move to &top'), u':/services/service_top.png',
-            self.trUtf8('Move to top'), self.onServiceTop)
-        self.OrderToolbar.addToolbarButton(
-            self.trUtf8('Move &up'), u':/services/service_up.png',
-            self.trUtf8('Move up order'), self.onServiceUp)
-        self.OrderToolbar.addToolbarButton(
-            self.trUtf8('Move &down'), u':/services/service_down.png',
-            self.trUtf8('Move down order'), self.onServiceDown)
-        self.OrderToolbar.addToolbarButton(
-            self.trUtf8('Move to &bottom'), u':/services/service_bottom.png',
-            self.trUtf8('Move to end'), self.onServiceEnd)
+            translate(u'ServiceManager', u'Move to &top'),
+                u':/services/service_top.png',
+            translate(u'ServiceManager', u'Move to top'), self.onServiceTop)
+        self.OrderToolbar.addToolbarButton(
+            translate(u'ServiceManager', u'Move &up'),
+                u':/services/service_up.png',
+            translate(u'ServiceManager', u'Move up order'), self.onServiceUp)
+        self.OrderToolbar.addToolbarButton(
+            translate(u'ServiceManager', u'Move &down'),
+                u':/services/service_down.png',
+            translate(u'ServiceManager', u'Move down order'),
+                self.onServiceDown)
+        self.OrderToolbar.addToolbarButton(
+            translate(u'ServiceManager', u'Move to &bottom'),
+                u':/services/service_bottom.png',
+            translate(u'ServiceManager', u'Move to end'),
+                self.onServiceEnd)
         self.OrderToolbar.addSeparator()
         self.OrderToolbar.addToolbarButton(
+<<<<<<< TREE
             self.trUtf8('&Delete From Service'),
             u':/general/general_delete.png',
             self.trUtf8('Delete From Service'), self.onDeleteFromService)
+=======
+            translate(u'ServiceManager', u'&Delete From Service'),
+                u':/general/general_delete.png',
+            translate(u'ServiceManager', u'Delete From Service'),
+                self.onDeleteFromService)
+>>>>>>> MERGE-SOURCE
         self.Layout.addWidget(self.OrderToolbar)
         # Connect up our signals and slots
         QtCore.QObject.connect(self.ThemeComboBox,
@@ -206,31 +225,43 @@
         self.servicePath = AppLocation.get_section_data_path(u'servicemanager')
         #build the drag and drop context menu
         self.dndMenu = QtGui.QMenu()
-        self.newAction = self.dndMenu.addAction(self.trUtf8('&Add New Item'))
+        self.newAction = self.dndMenu.addAction(
+            translate(u'ServiceManager', u'&Add New Item'))
         self.newAction.setIcon(build_icon(u':/general/general_edit.png'))
+<<<<<<< TREE
         self.addToAction = self.dndMenu.addAction(
             self.trUtf8('&Add to Selected Item'))
+=======
+        self.addToAction = self.dndMenu.addAction(
+            translate(u'ServiceManager', u'&Add to Selected Item'))
+>>>>>>> MERGE-SOURCE
         self.addToAction.setIcon(build_icon(u':/general/general_edit.png'))
         #build the context menu
         self.menu = QtGui.QMenu()
-        self.editAction = self.menu.addAction(self.trUtf8('&Edit Item'))
+        self.editAction = self.menu.addAction(
+            translate(u'ServiceManager', u'&Edit Item'))
         self.editAction.setIcon(build_icon(u':/general/general_edit.png'))
-        self.maintainAction = self.menu.addAction(self.trUtf8('&Maintain Item'))
+        self.maintainAction = self.menu.addAction(
+            translate(u'ServiceManager', u'&Maintain Item'))
         self.maintainAction.setIcon(build_icon(u':/general/general_edit.png'))
-        self.notesAction = self.menu.addAction(self.trUtf8('&Notes'))
+        self.notesAction = self.menu.addAction(
+            translate(u'ServiceManager', u'&Notes'))
         self.notesAction.setIcon(build_icon(u':/services/service_notes.png'))
         self.deleteAction = self.menu.addAction(
-            self.trUtf8('&Delete From Service'))
+            translate(u'ServiceManager', u'&Delete From Service'))
         self.deleteAction.setIcon(build_icon(u':/general/general_delete.png'))
         self.sep1 = self.menu.addAction(u'')
         self.sep1.setSeparator(True)
-        self.previewAction = self.menu.addAction(self.trUtf8('&Preview Verse'))
+        self.previewAction = self.menu.addAction(
+            translate(u'ServiceManager', u'&Preview Verse'))
         self.previewAction.setIcon(build_icon(u':/general/general_preview.png'))
-        self.liveAction = self.menu.addAction(self.trUtf8('&Live Verse'))
+        self.liveAction = self.menu.addAction(
+            translate(u'ServiceManager', u'&Live Verse'))
         self.liveAction.setIcon(build_icon(u':/general/general_live.png'))
         self.sep2 = self.menu.addAction(u'')
         self.sep2.setSeparator(True)
-        self.themeMenu = QtGui.QMenu(self.trUtf8(u'&Change Item Theme'))
+        self.themeMenu = QtGui.QMenu(
+            translate(u'ServiceManager', u'&Change Item Theme'))
         self.menu.addMenu(self.themeMenu)
 
     def supportedSuffixes(self, suffix):
@@ -462,9 +493,10 @@
             self.parent.generalSettingsSection + u'/save prompt',
             QtCore.QVariant(False)).toBool():
             ret = QtGui.QMessageBox.question(self,
-                self.trUtf8('Save Changes to Service?'),
-                self.trUtf8('Your service is unsaved, do you want to save '
-                            'those changes before creating a new one?'),
+                translate(u'ServiceManager', u'Save Changes to Service?'),
+                translate(u'ServiceManager', 
+                    u'Your service is unsaved, do you want to save '
+                    u'those changes before creating a new one?'),
                 QtGui.QMessageBox.StandardButtons(
                     QtGui.QMessageBox.Cancel |
                     QtGui.QMessageBox.Save),
@@ -547,9 +579,9 @@
         log.debug(u'onSaveService')
         if not quick or self.isNew:
             filename = QtGui.QFileDialog.getSaveFileName(self,
-            self.trUtf8(u'Save Service'),
+            translate(u'ServiceManager', u'Save Service'),
             SettingsManager.get_last_dir(self.parent.serviceSettingsSection),
-            self.trUtf8(u'OpenLP Service Files (*.osz)'))
+            translate(u'ServiceManager', u'OpenLP Service Files (*.osz)'))
         else:
             filename = SettingsManager.get_last_dir(
                 self.parent.serviceSettingsSection)
@@ -606,7 +638,7 @@
                 self.parent.serviceSettingsSection)
         else:
             filename = QtGui.QFileDialog.getOpenFileName(
-                self, self.trUtf8('Open Service'),
+                self, translate(u'ServiceManager', u'Open Service'),
                 SettingsManager.get_last_dir(
                 self.parent.serviceSettingsSection), u'Services (*.osz)')
         self.loadService(filename)
@@ -619,9 +651,10 @@
         """
         if self.parent.serviceNotSaved:
             ret = QtGui.QMessageBox.question(self,
-                self.trUtf8('Save Changes to Service?'),
-                self.trUtf8('Your current service is unsaved, do you want to '
-                            'save the changes before opening a new one?'),
+                translate(u'ServiceManager', u'Save Changes to Service?'),
+                translate(u'ServiceManager',
+                    u'Your current service is unsaved, do you want to '
+                    u'save the changes before opening a new one?'),
                 QtGui.QMessageBox.StandardButtons(
                     QtGui.QMessageBox.Discard |
                     QtGui.QMessageBox.Save),
@@ -783,9 +816,9 @@
                 self.serviceItems[item][u'service_item'], count)
         else:
             QtGui.QMessageBox.critical(self,
-                self.trUtf8('Missing Display Handler'),
-                self.trUtf8('Your item cannot be displayed as '
-                            'there is no handler to display it'),
+                translate(u'ServiceManager', u'Missing Display Handler'),
+                translate(u'ServiceManager', u'Your item cannot be displayed '
+                    u'as there is no handler to display it'),
                 QtGui.QMessageBox.StandardButtons(
                     QtGui.QMessageBox.Ok),
                 QtGui.QMessageBox.Ok)
@@ -819,9 +852,9 @@
                         self.serviceItems[item][u'service_item'], 0)
         else:
             QtGui.QMessageBox.critical(self,
-                self.trUtf8('Missing Display Handler'),
-                self.trUtf8('Your item cannot be displayed as '
-                            'there is no handler to display it'),
+                translate(u'ServiceManager', u'Missing Display Handler'),
+                translate(u'ServiceManager', u'Your item cannot be displayed '
+                    u'as there is no handler to display it'),
                 QtGui.QMessageBox.StandardButtons(
                     QtGui.QMessageBox.Ok),
                 QtGui.QMessageBox.Ok)

=== modified file 'openlp/core/ui/servicenotedialog.py'
--- openlp/core/ui/servicenotedialog.py	2010-06-01 17:13:54 +0000
+++ openlp/core/ui/servicenotedialog.py	2010-06-06 21:33:27 +0000
@@ -39,8 +39,13 @@
         self.textEdit.setObjectName(u'textEdit')
         self.verticalLayout.addWidget(self.textEdit)
         self.buttonBox = QtGui.QDialogButtonBox(self.widget)
+<<<<<<< TREE
         self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel |
             QtGui.QDialogButtonBox.Save)
+=======
+        self.buttonBox.setStandardButtons(
+            QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Save)
+>>>>>>> MERGE-SOURCE
         self.buttonBox.setObjectName(u'buttonBox')
         self.verticalLayout.addWidget(self.buttonBox)
 
@@ -48,6 +53,11 @@
         QtCore.QMetaObject.connectSlotsByName(ServiceNoteEdit)
 
     def retranslateUi(self, ServiceNoteEdit):
+<<<<<<< TREE
         ServiceNoteEdit.setWindowTitle(
             translate('ServiceNoteForm', 'Service Item Notes'))
 
+=======
+        ServiceNoteEdit.setWindowTitle(
+            translate(u'ServiceNoteForm', u'Service Item Notes'))
+>>>>>>> MERGE-SOURCE

=== modified file 'openlp/core/ui/settingsdialog.py'
--- openlp/core/ui/settingsdialog.py	2010-05-01 19:45:06 +0000
+++ openlp/core/ui/settingsdialog.py	2010-06-06 21:33:27 +0000
@@ -60,4 +60,4 @@
         QtCore.QMetaObject.connectSlotsByName(SettingsDialog)
 
     def retranslateUi(self, SettingsDialog):
-        SettingsDialog.setWindowTitle(translate('SettingsForm', 'Settings'))
+        SettingsDialog.setWindowTitle(translate(u'SettingsForm', u'Settings'))

=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py	2010-06-05 15:31:07 +0000
+++ openlp/core/ui/slidecontroller.py	2010-06-06 21:33:27 +0000
@@ -32,7 +32,7 @@
 
 from openlp.core.ui import HideMode
 from openlp.core.lib import OpenLPToolbar, Receiver, resize_image, \
-ItemCapabilities
+    ItemCapabilities, translate
 
 log = logging.getLogger(__name__)
 
@@ -127,11 +127,11 @@
         # Type label for the top of the slide controller
         self.TypeLabel = QtGui.QLabel(self.Panel)
         if self.isLive:
-            self.TypeLabel.setText(self.trUtf8('Live'))
+            self.TypeLabel.setText(translate(u'SlideController', u'Live'))
             self.split = 1
             self.typePrefix = u'live'
         else:
-            self.TypeLabel.setText(self.trUtf8('Preview'))
+            self.TypeLabel.setText(translate(u'SlideController', u'Preview'))
             self.split = 0
             self.typePrefix = u'preview'
         self.TypeLabel.setStyleSheet(u'font-weight: bold; font-size: 12pt;')
@@ -178,75 +178,92 @@
         if self.isLive:
             self.Toolbar.addToolbarButton(
                 u'First Slide', u':/slides/slide_first.png',
-                self.trUtf8('Move to first'), self.onSlideSelectedFirst)
+                translate(u'SlideController', u'Move to first'),
+                    self.onSlideSelectedFirst)
         self.Toolbar.addToolbarButton(
             u'Previous Slide', u':/slides/slide_previous.png',
-            self.trUtf8('Move to previous'), self.onSlideSelectedPrevious)
+            translate(u'SlideController', u'Move to previous'),
+                self.onSlideSelectedPrevious)
         self.Toolbar.addToolbarButton(
             u'Next Slide', u':/slides/slide_next.png',
-            self.trUtf8('Move to next'), self.onSlideSelectedNext)
+            translate(u'SlideController', u'Move to next'),
+                self.onSlideSelectedNext)
         if self.isLive:
             self.Toolbar.addToolbarButton(
                 u'Last Slide', u':/slides/slide_last.png',
-                self.trUtf8('Move to last'), self.onSlideSelectedLast)
+                translate(u'SlideController', u'Move to last'),
+                    self.onSlideSelectedLast)
         if self.isLive:
             self.Toolbar.addToolbarSeparator(u'Close Separator')
             self.blankButton = self.Toolbar.addToolbarButton(
                 u'Blank Screen', u':/slides/slide_blank.png',
-                self.trUtf8('Blank Screen'), self.onBlankDisplay, True)
+                translate(u'SlideController', u'Blank Screen'),
+                    self.onBlankDisplay, True)
             self.themeButton = self.Toolbar.addToolbarButton(
                 u'Display Theme', u':/slides/slide_theme.png',
-                self.trUtf8('Theme Screen'), self.onThemeDisplay, True)
+                translate(u'SlideController', u'Theme Screen'),
+                    self.onThemeDisplay, True)
             self.hideButton = self.Toolbar.addToolbarButton(
                 u'Hide screen', u':/slides/slide_desktop.png',
-                self.trUtf8('Hide Screen'), self.onHideDisplay, True)
+                translate(u'SlideController', u'Hide Screen'),
+                    self.onHideDisplay, True)
         if not self.isLive:
             self.Toolbar.addToolbarSeparator(u'Close Separator')
             self.Toolbar.addToolbarButton(
                 u'Go Live', u':/general/general_live.png',
-                self.trUtf8('Move to live'), self.onGoLive)
+                translate(u'SlideController', u'Move to live'), self.onGoLive)
             self.Toolbar.addToolbarSeparator(u'Close Separator')
             self.Toolbar.addToolbarButton(
                 u'Edit Song', u':/general/general_edit.png',
-                self.trUtf8('Edit and re-preview Song'), self.onEditSong)
+                translate(u'SlideController', u'Edit and re-preview Song'),
+                    self.onEditSong)
         if isLive:
             self.Toolbar.addToolbarSeparator(u'Loop Separator')
             self.Toolbar.addToolbarButton(
                 u'Start Loop', u':/media/media_time.png',
-                self.trUtf8('Start continuous loop'), self.onStartLoop)
+                translate(u'SlideController', u'Start continuous loop'),
+                    self.onStartLoop)
             self.Toolbar.addToolbarButton(
                 u'Stop Loop', u':/media/media_stop.png',
-                self.trUtf8('Stop continuous loop'), self.onStopLoop)
+                translate(u'SlideController', u'Stop continuous loop'),
+                    self.onStopLoop)
             self.DelaySpinBox = QtGui.QSpinBox()
             self.DelaySpinBox.setMinimum(1)
             self.DelaySpinBox.setMaximum(180)
             self.Toolbar.addToolbarWidget(
                 u'Image SpinBox', self.DelaySpinBox)
-            self.DelaySpinBox.setSuffix(self.trUtf8('s'))
+            self.DelaySpinBox.setSuffix(translate(u'SlideController', u's'))
             self.DelaySpinBox.setToolTip(
-                self.trUtf8('Delay between slides in seconds'))
+                translate(u'SlideController',
+                    u'Delay between slides in seconds'))
         self.ControllerLayout.addWidget(self.Toolbar)
         #Build a Media ToolBar
         self.Mediabar = OpenLPToolbar(self)
         self.Mediabar.addToolbarButton(
             u'Media Start', u':/slides/media_playback_start.png',
-            self.trUtf8('Start playing media'), self.onMediaPlay)
+            translate(u'SlideController', u'Start playing media'),
+                self.onMediaPlay)
         self.Mediabar.addToolbarButton(
             u'Media Pause', u':/slides/media_playback_pause.png',
-            self.trUtf8('Start playing media'), self.onMediaPause)
+            translate(u'SlideController', u'Start playing media'),
+                self.onMediaPause)
         self.Mediabar.addToolbarButton(
             u'Media Stop', u':/slides/media_playback_stop.png',
-            self.trUtf8('Start playing media'), self.onMediaStop)
+            translate(u'SlideController', u'Start playing media'),
+                self.onMediaStop)
         if self.isLive:
             self.blankButton = self.Mediabar.addToolbarButton(
                 u'Blank Screen', u':/slides/slide_blank.png',
-                self.trUtf8('Blank Screen'), self.onBlankDisplay, True)
+                translate(u'SlideController', u'Blank Screen'),
+                    self.onBlankDisplay, True)
             self.themeButton = self.Mediabar.addToolbarButton(
                 u'Display Theme', u':/slides/slide_theme.png',
-                self.trUtf8('Theme Screen'), self.onThemeDisplay, True)
+                translate(u'SlideController', u'Theme Screen'),
+                    self.onThemeDisplay, True)
             self.hideButton = self.Mediabar.addToolbarButton(
                 u'Hide screen', u':/slides/slide_desktop.png',
-                self.trUtf8('Hide Screen'), self.onHideDisplay, True)
+                translate(u'SlideController', u'Hide Screen'),
+                    self.onHideDisplay, True)
         if not self.isLive:
             self.seekSlider = Phonon.SeekSlider()
             self.seekSlider.setGeometry(QtCore.QRect(90, 260, 221, 24))
@@ -262,11 +279,11 @@
         # Build the Song Toolbar
         if isLive:
             self.SongMenu = QtGui.QToolButton(self.Toolbar)
-            self.SongMenu.setText(self.trUtf8('Go to Verse'))
+            self.SongMenu.setText(translate(u'SlideController', u'Go to Verse'))
             self.SongMenu.setPopupMode(QtGui.QToolButton.InstantPopup)
             self.Toolbar.addToolbarWidget(u'Song Menu', self.SongMenu)
-            self.SongMenu.setMenu(QtGui.QMenu(self.trUtf8('Go to Verse'),
-                self.Toolbar))
+            self.SongMenu.setMenu(QtGui.QMenu(
+                translate(u'SlideController', u'Go to Verse'), self.Toolbar))
             self.Toolbar.makeWidgetsInvisible([u'Song Menu'])
         # Screen preview area
         self.PreviewFrame = QtGui.QFrame(self.Splitter)
@@ -537,16 +554,31 @@
             if self.serviceItem.is_text():
                 if frame[u'verseTag']:
                     bits = frame[u'verseTag'].split(u':')
+<<<<<<< TREE
                     tag = u'%s\n%s' % (bits[0][0], bits[1][0:] )
                     tag1 = u'%s%s' % (bits[0][0], bits[1][0:] )
                     row = tag
+=======
+                    tag = None
+                    #If verse handle verse number else tag only
+                    if bits[0] == translate(u'SlideController', u'Verse') or \
+                        bits[0] == translate(u'SlideController', u'Chorus'):
+                        tag = u'%s\n%s' % (bits[0][0], bits[1][0:] )
+                        tag1 = u'%s%s' % (bits[0][0], bits[1][0:] )
+                        row = tag
+                    else:
+                        tag = bits[0]
+                        tag1 = tag
+                        row = bits[0][0:1]
+>>>>>>> MERGE-SOURCE
                 else:
                     row += 1
                 if self.isLive and frame[u'verseTag'] is not None:
                     if tag1 not in self.slideList:
                         self.slideList[tag1] = framenumber
-                        self.SongMenu.menu().addAction(self.trUtf8(u'%s'%tag1),
-                            self.onSongBarHandler)
+                        self.SongMenu.menu().addAction(
+                            translate(u'SlideController', u'%s'%tag1),
+                                self.onSongBarHandler)
                 item.setText(frame[u'text'])
             else:
                 label = QtGui.QLabel()

=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py	2010-05-29 19:50:50 +0000
+++ openlp/core/ui/thememanager.py	2010-06-06 21:33:27 +0000
@@ -35,7 +35,7 @@
 from openlp.core.theme import Theme
 from openlp.core.lib import OpenLPToolbar, contextMenuAction, \
     ThemeXML, str_to_bool, get_text_file_string, build_icon, Receiver, \
-    contextMenuSeparator, SettingsManager
+    contextMenuSeparator, SettingsManager,  translate
 from openlp.core.utils import AppLocation
 
 log = logging.getLogger(__name__)
@@ -54,21 +54,25 @@
         self.amendThemeForm = AmendThemeForm(self)
         self.Toolbar = OpenLPToolbar(self)
         self.Toolbar.addToolbarButton(
-            self.trUtf8('New Theme'), u':/themes/theme_new.png',
-            self.trUtf8('Create a new theme'), self.onAddTheme)
-        self.Toolbar.addToolbarButton(
-            self.trUtf8('Edit Theme'), u':/themes/theme_edit.png',
-            self.trUtf8('Edit a theme'), self.onEditTheme)
-        self.Toolbar.addToolbarButton(
-            self.trUtf8('Delete Theme'), u':/general/general_delete.png',
-            self.trUtf8('Delete a theme'), self.onDeleteTheme)
+            translate(u'ThemeManager', u'New Theme'), u':/themes/theme_new.png',
+            translate(u'ThemeManager', u'Create a new theme'), self.onAddTheme)
+        self.Toolbar.addToolbarButton(
+            translate(u'ThemeManager', u'Edit Theme'),
+                u':/themes/theme_edit.png',
+            translate(u'ThemeManager', u'Edit a theme'), self.onEditTheme)
+        self.Toolbar.addToolbarButton(
+            translate(u'ThemeManager', u'Delete Theme'),
+                u':/general/general_delete.png',
+            translate(u'ThemeManager', u'Delete a theme'), self.onDeleteTheme)
         self.Toolbar.addSeparator()
         self.Toolbar.addToolbarButton(
-            self.trUtf8('Import Theme'), u':/general/general_import.png',
-            self.trUtf8('Import a theme'), self.onImportTheme)
+            translate(u'ThemeManager', u'Import Theme'), 
+                u':/general/general_import.png',
+            translate(u'ThemeManager', u'Import a theme'), self.onImportTheme)
         self.Toolbar.addToolbarButton(
-            self.trUtf8('Export Theme'), u':/general/general_export.png',
-            self.trUtf8('Export a theme'), self.onExportTheme)
+            translate(u'ThemeManager', u'Export Theme'),
+                u':/general/general_export.png',
+            translate(u'ThemeManager', u'Export a theme'), self.onExportTheme)
         self.ThemeWidget = QtGui.QWidgetAction(self.Toolbar)
         self.Layout.addWidget(self.Toolbar)
         self.ThemeListWidget = QtGui.QListWidget(self)
@@ -78,23 +82,23 @@
         self.ThemeListWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
         self.ThemeListWidget.addAction(
             contextMenuAction(self.ThemeListWidget, u':/themes/theme_edit.png',
-            self.trUtf8('Edit a theme'), self.onEditTheme))
+            translate(u'ThemeManager', u'Edit a theme'), self.onEditTheme))
         self.ThemeListWidget.addAction(
             contextMenuSeparator(self.ThemeListWidget))
         self.ThemeListWidget.addAction(
             contextMenuAction(self.ThemeListWidget,
                 u':/general/general_delete.png',
-                self.trUtf8('Delete theme'),
+                translate(u'ThemeManager', u'Delete theme'),
             self.onDeleteTheme))
         self.ThemeListWidget.addAction(
             contextMenuAction(self.ThemeListWidget,
                 u':/general/general_export.png',
-                self.trUtf8('Make Global'),
+                translate(u'ThemeManager', u'Make Global'),
             self.changeGlobalFromScreen))
         self.ThemeListWidget.addAction(
             contextMenuAction(self.ThemeListWidget,
                 u':/general/general_export.png',
-                self.trUtf8('Export theme'),
+                translate(u'ThemeManager', u'Export theme'),
             self.onExportTheme))
         self.ThemeListWidget.addAction(
             contextMenuSeparator(self.ThemeListWidget))
@@ -127,7 +131,8 @@
                 self.ThemeListWidget.item(count).setText(newName)
             #Set the new name
             if themeName == newName:
-                name = u'%s (%s)' % (newName, self.trUtf8('default'))
+                name = u'%s (%s)' % (newName,
+                    translate(u'ThemeManager', u'default'))
                 self.ThemeListWidget.item(count).setText(name)
 
     def changeGlobalFromScreen(self, index = -1):
@@ -144,7 +149,8 @@
             if count == selected_row:
                 self.global_theme = unicode(
                     self.ThemeListWidget.item(count).text())
-                name = u'%s (%s)' % (self.global_theme, self.trUtf8('default'))
+                name = u'%s (%s)' % (self.global_theme, 
+                    translate(u'ThemeManager', u'default'))
                 self.ThemeListWidget.item(count).setText(name)
                 QtCore.QSettings().setValue(
                     self.settingsSection + u'/global theme',
@@ -178,20 +184,38 @@
             # should be the same unless default
             if theme != unicode(item.data(QtCore.Qt.UserRole).toString()):
                 QtGui.QMessageBox.critical(
-                    self, self.trUtf8('Error'),
-                    self.trUtf8('You are unable to delete the default theme.'),
+                    self, translate(u'ThemeManager', u'Error'),
+                    translate(u'ThemeManager',
+                        u'You are unable to delete the default theme.'),
                     QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
             else:
                 for plugin in self.parent.plugin_manager.plugins:
                     if not plugin.can_delete_theme(theme):
+<<<<<<< TREE
                         QtGui.QMessageBox.critical(self, self.trUtf8('Error'),
                             self.trUtf8('Theme %s is use in %s plugin' % (theme,
                             plugin.name)))
+=======
+                        QtGui.QMessageBox.critical(
+                            self, translate(u'ThemeManager', u'Error'),
+                            translate(u'ThemeManager',
+                                u'Theme %s is use in %s plugin' 
+                                % (theme, plugin.name)),
+                            QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+>>>>>>> MERGE-SOURCE
                         return
                 if unicode(self.parent.ServiceManagerContents.ThemeComboBox.currentText()) == theme:
+<<<<<<< TREE
                     QtGui.QMessageBox.critical(self, self.trUtf8('Error'),
                         self.trUtf8('Theme %s is use by Service Manager' %
                         theme))
+=======
+                    QtGui.QMessageBox.critical(
+                        self, translate('ThemeManager','Error'),
+                        translate(u'ThemeManager',
+                            u'Theme %s is use by Service Manager' % theme),
+                        QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+>>>>>>> MERGE-SOURCE
                     return
                 self.themelist.remove(theme)
                 th = theme + u'.png'
@@ -215,13 +239,14 @@
         """
         item = self.ThemeListWidget.currentItem()
         if item is None:
-            QtGui.QMessageBox.critical(self, self.trUtf8('Error'),
-                self.trUtf8('You have not selected a theme.'),
+            QtGui.QMessageBox.critical(self, 
+                translate(u'ThemeManager', u'Error'),
+                translate(u'ThemeManager', u'You have not selected a theme.'),
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
             return
         theme = unicode(item.data(QtCore.Qt.UserRole).toString())
         path = QtGui.QFileDialog.getExistingDirectory(self,
-            unicode(self.trUtf8('Save Theme - (%s)')) %  theme,
+            unicode(translate(u'ThemeManager', u'Save Theme - (%s)')) %  theme,
             SettingsManager.get_last_dir(self.settingsSection, 1))
         path = unicode(path)
         if path:
@@ -244,7 +269,7 @@
 
     def onImportTheme(self):
         files = QtGui.QFileDialog.getOpenFileNames(
-            self, self.trUtf8('Select Theme Import File'),
+            self, translate(u'ThemeManager', u'Select Theme Import File'),
             SettingsManager.get_last_dir(self.settingsSection), u'Theme (*.*)')
         log.info(u'New Themes %s', unicode(files))
         if files:
@@ -272,7 +297,12 @@
                 if os.path.exists(theme):
                     textName = os.path.splitext(name)[0]
                     if textName == self.global_theme:
+<<<<<<< TREE
                         name = u'%s (%s)' % (textName, self.trUtf8('default'))
+=======
+                        name = u'%s (%s)' % (textName,
+                            translate(u'ThemeManager', u'default'))
+>>>>>>> MERGE-SOURCE
                     else:
                         name = textName
                     thumb = os.path.join(self.thumbPath, u'%s.png' % textName)
@@ -358,8 +388,14 @@
             self.generateAndSaveImage(dir, themename, filexml)
         except IOError:
             QtGui.QMessageBox.critical(
+<<<<<<< TREE
                 self, self.trUtf8('Error'),
                 self.trUtf8('File is not a valid theme.'))
+=======
+                self, translate(u'ThemeManager', u'Error'),
+                translate(u'ThemeManager', u'File is not a valid theme.'),
+                QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+>>>>>>> MERGE-SOURCE
             log.exception(u'Importing theme from zip file failed %s' % filename)
         finally:
             if zip:
@@ -440,9 +476,10 @@
         if self.saveThemeName != name:
             if os.path.exists(theme_file):
                 result = QtGui.QMessageBox.question(
-                    self, self.trUtf8('Theme Exists'),
-                    self.trUtf8('A theme with this name already exists, '
-                        'would you like to overwrite it?'),
+                    self, translate(u'ThemeManager', u'Theme Exists'),
+                    translate(u'ThemeManager',
+                        u'A theme with this name already exists, '
+                        u'would you like to overwrite it?'),
                     (QtGui.QMessageBox.Yes | QtGui.QMessageBox.No),
                     QtGui.QMessageBox.No)
         if result == QtGui.QMessageBox.Yes:
@@ -498,7 +535,7 @@
     def baseTheme(self):
         log.debug(u'base theme created')
         newtheme = ThemeXML()
-        newtheme.new_document(unicode(self.trUtf8('New Theme')))
+        newtheme.new_document(unicode(translate(u'ThemeManager', u'New Theme')))
         newtheme.add_background_solid(unicode(u'#000000'))
         newtheme.add_font(unicode(QtGui.QFont().family()), unicode(u'#FFFFFF'),
             unicode(30), u'False')

=== modified file 'openlp/core/ui/themestab.py'
--- openlp/core/ui/themestab.py	2010-04-30 22:38:15 +0000
+++ openlp/core/ui/themestab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, Receiver, ThemeLevel
+from openlp.core.lib import SettingsTab, Receiver, ThemeLevel, translate
 
 class ThemesTab(SettingsTab):
     """
@@ -37,7 +37,7 @@
 
     def setupUi(self):
         self.setObjectName(u'ThemesTab')
-        self.tabTitleVisible = self.trUtf8('Themes')
+        self.tabTitleVisible = translate(u'ThemesTab', u'Themes')
         self.ThemesTabLayout = QtGui.QHBoxLayout(self)
         self.ThemesTabLayout.setSpacing(8)
         self.ThemesTabLayout.setMargin(8)
@@ -106,21 +106,26 @@
             QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
 
     def retranslateUi(self):
-        self.GlobalGroupBox.setTitle(self.trUtf8('Global theme'))
-        self.LevelGroupBox.setTitle(self.trUtf8('Theme level'))
-        self.SongLevelRadioButton.setText(self.trUtf8('Song level'))
-        self.SongLevelLabel.setText(self.trUtf8('Use the theme from each song '
-            'in the database. If a song doesn\'t have a theme associated with '
-            'it, then use the service\'s theme. If the service doesn\'t have '
-            'a theme, then use the global theme.'))
-        self.ServiceLevelRadioButton.setText(self.trUtf8('Service level'))
-        self.ServiceLevelLabel.setText(self.trUtf8('Use the theme from the '
-            'service, overriding any of the individual songs\' themes. If the '
-            'service doesn\'t have a theme, then use the global theme.'))
-        self.GlobalLevelRadioButton.setText(self.trUtf8('Global level'))
-        self.GlobalLevelLabel.setText(self.trUtf8('Use the global theme, '
-            'overriding any themes associated with either the service or the '
-            'songs.'))
+        self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme'))
+        self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level'))
+        self.SongLevelRadioButton.setText(
+            translate(u'ThemesTab', u'Song level'))
+        self.SongLevelLabel.setText(
+            translate(u'ThemesTab', u'Use the theme from each song '
+            u'in the database. If a song doesn\'t have a theme associated with '
+            u'it, then use the service\'s theme. If the service doesn\'t have '
+            u'a theme, then use the global theme.'))
+        self.ServiceLevelRadioButton.setText(
+            translate(u'ThemesTab', u'Service level'))
+        self.ServiceLevelLabel.setText(
+            translate(u'ThemesTab', u'Use the theme from the service, '
+            u'overriding any of the individual songs\' themes. If the '
+            u'service doesn\'t have a theme, then use the global theme.'))
+        self.GlobalLevelRadioButton.setText(
+            translate(u'ThemesTab', u'Global level'))
+        self.GlobalLevelLabel.setText(
+            translate(u'ThemesTab', u'Use the global theme, overriding any '
+            u'themes associated with either the service or the songs.'))
 
     def load(self):
         settings = QtCore.QSettings()

=== modified file 'openlp/core/utils/languagemanager.py'
--- openlp/core/utils/languagemanager.py	2010-05-11 21:05:08 +0000
+++ openlp/core/utils/languagemanager.py	2010-06-06 21:33:27 +0000
@@ -89,9 +89,9 @@
             u'general/language', QtCore.QVariant(language))
         log.info(u'Language file: \'%s\' written to conf file' % language)
         QtGui.QMessageBox.information(None,  
-                    translate('LanguageManager', 'Language'), 
-                    translate('LanguageManager', 
-                        'After restart new Language settings will be used.'))
+                    translate(u'LanguageManager', u'Language'), 
+                    translate(u'LanguageManager', 
+                        u'After restart new Language settings will be used.'))
 
     @staticmethod
     def init_qm_list():

=== modified file 'openlp/plugins/alerts/alertsplugin.py'
--- openlp/plugins/alerts/alertsplugin.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/alerts/alertsplugin.py	2010-06-06 21:33:27 +0000
@@ -27,7 +27,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, build_icon, PluginStatus
+from openlp.core.lib import Plugin, build_icon, PluginStatus,  translate
 from openlp.plugins.alerts.lib import AlertsManager, AlertsTab, DBManager
 from openlp.plugins.alerts.forms import AlertForm
 
@@ -63,8 +63,10 @@
         AlertIcon = build_icon(u':/tools/tools_alert.png')
         self.toolsAlertItem.setIcon(AlertIcon)
         self.toolsAlertItem.setObjectName(u'toolsAlertItem')
-        self.toolsAlertItem.setText(self.trUtf8('&Alert'))
-        self.toolsAlertItem.setStatusTip(self.trUtf8('Show an alert message'))
+        self.toolsAlertItem.setText(
+            translate('AlertsPlugin.AlertsPlugin', u'&Alert'))
+        self.toolsAlertItem.setStatusTip(
+            translate('AlertsPlugin.AlertsPlugin', u'Show an alert message'))
         self.toolsAlertItem.setShortcut(u'F7')
         self.service_manager.parent.ToolsMenu.addAction(self.toolsAlertItem)
         QtCore.QObject.connect(self.toolsAlertItem,
@@ -92,6 +94,7 @@
         self.alertForm.exec_()
 
     def about(self):
-        about_text = self.trUtf8('<b>Alerts Plugin</b><br>This plugin '
+        about_text = translate('AlertsPlugin.AlertsPlugin', 
+            u'<b>Alerts Plugin</b><br>This plugin '
             'controls the displaying of alerts on the presentations screen')
         return about_text

=== modified file 'openlp/plugins/alerts/forms/alertdialog.py'
--- openlp/plugins/alerts/forms/alertdialog.py	2010-06-01 17:13:54 +0000
+++ openlp/plugins/alerts/forms/alertdialog.py	2010-06-06 21:33:27 +0000
@@ -147,6 +147,7 @@
         AlertDialog.setTabOrder(self.DisplayCloseButton, self.CloseButton)
 
     def retranslateUi(self, AlertDialog):
+<<<<<<< TREE
         AlertDialog.setWindowTitle(translate('AlertForm', 'Alert Message'))
         self.AlertEntryLabel.setText(translate('AlertForm', 'Alert &text:'))
         self.AlertParameter.setText(translate('AlertForm', '&Parameter(s):'))
@@ -157,4 +158,24 @@
         self.DisplayCloseButton.setText(
             translate('AlertForm', 'Display && Cl&ose'))
         self.CloseButton.setText(translate('AlertForm', '&Close'))
+=======
+        AlertDialog.setWindowTitle(
+            translate(u'AlertsPlugin.AlertForm', u'Alert Message'))
+        self.AlertEntryLabel.setText(
+            translate(u'AlertsPlugin.AlertForm', u'Alert &text:'))
+        self.AlertParameter.setText(
+            translate(u'AlertsPlugin.AlertForm', u'&Parameter(s):'))
+        self.NewButton.setText(
+            translate(u'AlertsPlugin.AlertForm', u'&New'))
+        self.SaveButton.setText(
+            translate(u'AlertsPlugin.AlertForm', u'&Save'))
+        self.DeleteButton.setText(
+            translate(u'AlertsPlugin.AlertForm', u'&Delete'))
+        self.DisplayButton.setText(
+            translate(u'AlertsPlugin.AlertForm', u'Displ&ay'))
+        self.DisplayCloseButton.setText(
+            translate(u'AlertsPlugin.AlertForm', u'Display && Cl&ose'))
+        self.CloseButton.setText(
+            translate(u'AlertsPlugin.AlertForm', u'&Close'))
+>>>>>>> MERGE-SOURCE
 

=== modified file 'openlp/plugins/alerts/forms/alertform.py'
--- openlp/plugins/alerts/forms/alertform.py	2010-04-21 17:21:56 +0000
+++ openlp/plugins/alerts/forms/alertform.py	2010-06-06 21:33:27 +0000
@@ -26,6 +26,7 @@
 from PyQt4 import QtGui, QtCore
 
 from openlp.plugins.alerts.lib.models import AlertItem
+from openlp.core.lib import translate
 
 from alertdialog import Ui_AlertDialog
 
@@ -101,8 +102,8 @@
     def onNewClick(self):
         if len(self.AlertTextEdit.text()) == 0:
             QtGui.QMessageBox.information(self,
-                self.trUtf8('Item selected to Add'),
-                self.trUtf8('Missing data'))
+                translate(u'AlertsPlugin.AlertForm', u'Item selected to Add'),
+                translate(u'AlertsPlugin.AlertForm', u'Missing data'))
         else:
             alert = AlertItem()
             alert.text = unicode(self.AlertTextEdit.text())

=== modified file 'openlp/plugins/alerts/lib/alertsmanager.py'
--- openlp/plugins/alerts/lib/alertsmanager.py	2010-05-25 16:16:43 +0000
+++ openlp/plugins/alerts/lib/alertsmanager.py	2010-06-06 21:33:27 +0000
@@ -27,7 +27,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver
+from openlp.core.lib import Receiver, translate
 
 log = logging.getLogger(__name__)
 
@@ -93,7 +93,8 @@
         self.alertList.append(text)
         if self.timer_id != 0:
             Receiver.send_message(u'maindisplay_status_text',
-                self.trUtf8(u'Alert message created and delayed'))
+                translate(u'AlertsPlugin.AlertsManager',
+                u'Alert message created and delayed'))
             return
         Receiver.send_message(u'maindisplay_status_text', u'')
         self.generateAlert()

=== modified file 'openlp/plugins/alerts/lib/alertstab.py'
--- openlp/plugins/alerts/lib/alertstab.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/alerts/lib/alertstab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab
+from openlp.core.lib import SettingsTab, translate
 
 class AlertsTab(SettingsTab):
     """
@@ -38,7 +38,7 @@
 
     def setupUi(self):
         self.setObjectName(u'AlertsTab')
-        self.tabTitleVisible = self.trUtf8('Alerts')
+        self.tabTitleVisible = translate(u'AlertsPlugin.AlertsTab', u'Alerts')
         self.AlertsLayout = QtGui.QHBoxLayout(self)
         self.AlertsLayout.setSpacing(8)
         self.AlertsLayout.setMargin(8)
@@ -186,19 +186,32 @@
             QtCore.SIGNAL(u'valueChanged(int)'), self.onFontSizeSpinBoxChanged)
 
     def retranslateUi(self):
-        self.FontGroupBox.setTitle(self.trUtf8('Font'))
-        self.FontLabel.setText(self.trUtf8('Font Name:'))
-        self.FontColorLabel.setText(self.trUtf8('Font Color:'))
-        self.BackgroundColorLabel.setText(self.trUtf8('Background Color:'))
-        self.FontSizeLabel.setText(self.trUtf8('Font Size:'))
-        self.FontSizeSpinBox.setSuffix(self.trUtf8('pt'))
-        self.TimeoutLabel.setText(self.trUtf8('Alert timeout:'))
-        self.TimeoutSpinBox.setSuffix(self.trUtf8('s'))
-        self.LocationLabel.setText(self.trUtf8('Location:'))
-        self.PreviewGroupBox.setTitle(self.trUtf8('Preview'))
-        self.FontPreview.setText(self.trUtf8('openlp.org'))
-        self.LocationComboBox.setItemText(0, self.trUtf8('Top'))
-        self.LocationComboBox.setItemText(1, self.trUtf8('Bottom'))
+        self.FontGroupBox.setTitle(
+            translate(u'AlertsPlugin.AlertsTab', u'Font'))
+        self.FontLabel.setText(
+            translate(u'AlertsPlugin.AlertsTab', u'Font Name:'))
+        self.FontColorLabel.setText(
+            translate(u'AlertsPlugin.AlertsTab', u'Font Color:'))
+        self.BackgroundColorLabel.setText(
+            translate(u'AlertsPlugin.AlertsTab', u'Background Color:'))
+        self.FontSizeLabel.setText(
+            translate(u'AlertsPlugin.AlertsTab', u'Font Size:'))
+        self.FontSizeSpinBox.setSuffix(
+            translate(u'AlertsPlugin.AlertsTab', u'pt'))
+        self.TimeoutLabel.setText(
+            translate(u'AlertsPlugin.AlertsTab', u'Alert timeout:'))
+        self.TimeoutSpinBox.setSuffix(
+            translate(u'AlertsPlugin.AlertsTab', u's'))
+        self.LocationLabel.setText(
+            translate(u'AlertsPlugin.AlertsTab', u'Location:'))
+        self.PreviewGroupBox.setTitle(
+            translate(u'AlertsPlugin.AlertsTab', u'Preview'))
+        self.FontPreview.setText(
+            translate(u'AlertsPlugin.AlertsTab', u'openlp.org'))
+        self.LocationComboBox.setItemText(0, 
+            translate(u'AlertsPlugin.AlertsTab', u'Top'))
+        self.LocationComboBox.setItemText(1, 
+            translate(u'AlertsPlugin.AlertsTab', u'Bottom'))
 
     def onBackgroundColorButtonClicked(self):
         self.bg_color = QtGui.QColorDialog.getColor(

=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py	2010-04-27 16:27:57 +0000
+++ openlp/plugins/bibles/bibleplugin.py	2010-06-06 21:33:27 +0000
@@ -27,7 +27,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, build_icon, PluginStatus
+from openlp.core.lib import Plugin, build_icon, PluginStatus, translate
 from openlp.plugins.bibles.lib import BibleManager, BiblesTab, BibleMediaItem
 
 log = logging.getLogger(__name__)
@@ -88,9 +88,10 @@
             self.media_item.onImportClick()
 
     def about(self):
-        about_text = self.trUtf8('<strong>Bible Plugin</strong><br />This '
-            'plugin allows bible verses from different sources to be '
-            'displayed on the screen during the service.')
+        about_text = translate(u'BiblesPlugin.BiblePlugin',
+            u'<strong>Bible Plugin</strong><br />This '
+            u'plugin allows bible verses from different sources to be '
+            u'displayed on the screen during the service.')
         return about_text
 
     def can_delete_theme(self, theme):

=== modified file 'openlp/plugins/bibles/forms/bibleimportwizard.py'
--- openlp/plugins/bibles/forms/bibleimportwizard.py	2010-06-01 17:13:54 +0000
+++ openlp/plugins/bibles/forms/bibleimportwizard.py	2010-06-06 21:33:27 +0000
@@ -308,12 +308,19 @@
         QtCore.QMetaObject.connectSlotsByName(BibleImportWizard)
 
     def retranslateUi(self, BibleImportWizard):
+<<<<<<< TREE
         BibleImportWizard.setWindowTitle(
             translate('ImportWizardForm', 'Bible Import Wizard'))
+=======
+        BibleImportWizard.setWindowTitle(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Bible Import Wizard'))
+>>>>>>> MERGE-SOURCE
         self.TitleLabel.setText(
             u'<span style="font-size:14pt; font-weight:600;">%s</span>' % \
-            translate('ImportWizardForm', 'Welcome to the Bible Import Wizard'))
+            translate(u'BiblesPlugin.ImportWizardForm', 
+            u'Welcome to the Bible Import Wizard'))
         self.InformationLabel.setText(
+<<<<<<< TREE
             translate('ImportWizardForm',
                 'This wizard will help you to import Bibles from a '
                 'variety of formats. Click the next button below to start the '
@@ -344,14 +351,55 @@
         self.LocationComboBox.setItemText(1,
             translate('ImportWizardForm', 'BibleGateway'))
         self.BibleLabel.setText(translate('ImportWizardForm', 'Bible:'))
+=======
+            translate(u'BiblesPlugin.ImportWizardForm', 
+            u'This wizard will help you to import Bibles from a '
+            u'variety of formats. Click the next button below to start the '
+            u'process by selecting a format to import from.'))
+        self.SelectPage.setTitle(translate(u'BiblesPlugin.ImportWizardForm', 
+            u'Select Import Source'))
+        self.SelectPage.setSubTitle(
+            translate(u'BiblesPlugin.ImportWizardForm', 
+            u'Select the import format, and where to import from.'))
+        self.FormatLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Format:'))
+        self.FormatComboBox.setItemText(0, 
+            translate(u'BiblesPlugin.ImportWizardForm', u'OSIS'))
+        self.FormatComboBox.setItemText(1, 
+            translate(u'BiblesPlugin.ImportWizardForm', u'CSV'))
+        self.FormatComboBox.setItemText(2, 
+            translate(u'BiblesPlugin.ImportWizardForm', u'OpenSong'))
+        self.FormatComboBox.setItemText(3,
+            translate(u'BiblesPlugin.ImportWizardForm', u'Web Download'))
+        self.OsisLocationLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'File Location:'))
+        self.BooksLocationLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Books Location:'))
+        self.VerseLocationLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Verse Location:'))
+        self.OpenSongFileLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Bible Filename:'))
+        self.LocationLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Location:'))
+        self.LocationComboBox.setItemText(0, 
+            translate(u'BiblesPlugin.ImportWizardForm', u'Crosswalk'))
+        self.LocationComboBox.setItemText(1, 
+            translate(u'BiblesPlugin.ImportWizardForm', u'BibleGateway'))
+        self.BibleLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Bible:'))
+>>>>>>> MERGE-SOURCE
         self.WebDownloadTabWidget.setTabText(
             self.WebDownloadTabWidget.indexOf(self.DownloadOptionsTab),
-            translate('ImportWizardForm', 'Download Options'))
-        self.AddressLabel.setText(translate('ImportWizardForm', 'Server:'))
-        self.UsernameLabel.setText(translate('ImportWizardForm', 'Username:'))
-        self.PasswordLabel.setText(translate('ImportWizardForm', 'Password:'))
+            translate(u'BiblesPlugin.ImportWizardForm', u'Download Options'))
+        self.AddressLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Server:'))
+        self.UsernameLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Username:'))
+        self.PasswordLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Password:'))
         self.WebDownloadTabWidget.setTabText(
             self.WebDownloadTabWidget.indexOf(self.ProxyServerTab),
+<<<<<<< TREE
             translate('ImportWizardForm', 'Proxy Server (Optional)'))
         self.LicenseDetailsPage.setTitle(
             translate('ImportWizardForm', 'License Details'))
@@ -367,5 +415,27 @@
             'Please wait while your Bible is imported.'))
         self.ImportProgressLabel.setText(
             translate('ImportWizardForm', 'Ready.'))
+=======
+            translate(u'BiblesPlugin.ImportWizardForm', 
+            u'Proxy Server (Optional)'))
+        self.LicenseDetailsPage.setTitle(
+            translate(u'BiblesPlugin.ImportWizardForm', u'License Details'))
+        self.LicenseDetailsPage.setSubTitle(
+            translate(u'BiblesPlugin.ImportWizardForm', 
+            u'Set up the Bible\'s license details.'))
+        self.VersionNameLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Version Name:'))
+        self.CopyrightLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Copyright:'))
+        self.PermissionLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Permission:'))
+        self.ImportPage.setTitle(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Importing'))
+        self.ImportPage.setSubTitle(
+            translate(u'BiblesPlugin.ImportWizardForm',
+            u'Please wait while your Bible is imported.'))
+        self.ImportProgressLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Ready.'))
+>>>>>>> MERGE-SOURCE
         self.ImportProgressBar.setFormat(u'%p%')
 

=== modified file 'openlp/plugins/bibles/forms/importwizardform.py'
--- openlp/plugins/bibles/forms/importwizardform.py	2010-06-01 17:13:54 +0000
+++ openlp/plugins/bibles/forms/importwizardform.py	2010-06-06 21:33:27 +0000
@@ -31,7 +31,7 @@
 from PyQt4 import QtCore, QtGui
 
 from bibleimportwizard import Ui_BibleImportWizard
-from openlp.core.lib import Receiver, SettingsManager
+from openlp.core.lib import Receiver, SettingsManager,  translate
 from openlp.core.utils import AppLocation, variant_to_unicode
 from openlp.plugins.bibles.lib.manager import BibleFormat
 
@@ -123,8 +123,8 @@
             if self.field(u'source_format').toInt()[0] == BibleFormat.OSIS:
                 if self.field(u'osis_location').toString() == u'':
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('Invalid Bible Location'),
-                        self.trUtf8('You need to specify a file to import your '
+                        translate(u'BiblesPlugin.ImportWizardForm', u'Invalid Bible Location'),
+                        translate(u'BiblesPlugin.ImportWizardForm', u'You need to specify a file to import your '
                             'Bible from.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.OSISLocationEdit.setFocus()
@@ -132,16 +132,16 @@
             elif self.field(u'source_format').toInt()[0] == BibleFormat.CSV:
                 if self.field(u'csv_booksfile').toString() == u'':
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('Invalid Books File'),
-                        self.trUtf8('You need to specify a file with books of '
+                        translate(u'BiblesPlugin.ImportWizardForm', u'Invalid Books File'),
+                        translate(u'BiblesPlugin.ImportWizardForm', u'You need to specify a file with books of '
                             'the Bible to use in the import.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.BooksLocationEdit.setFocus()
                     return False
                 elif self.field(u'csv_versefile').toString() == u'':
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('Invalid Verse File'),
-                        self.trUtf8('You need to specify a file of Bible '
+                        translate(u'BiblesPlugin.ImportWizardForm', u'Invalid Verse File'),
+                        translate(u'BiblesPlugin.ImportWizardForm', u'You need to specify a file of Bible '
                             'verses to import.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.CsvVerseLocationEdit.setFocus()
@@ -150,8 +150,8 @@
                 BibleFormat.OpenSong:
                 if self.field(u'opensong_file').toString() == u'':
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('Invalid OpenSong Bible'),
-                        self.trUtf8('You need to specify an OpenSong Bible '
+                        translate(u'BiblesPlugin.ImportWizardForm', u'Invalid OpenSong Bible'),
+                        translate(u'BiblesPlugin.ImportWizardForm', u'You need to specify an OpenSong Bible '
                             'file to import.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.OpenSongFileEdit.setFocus()
@@ -164,16 +164,16 @@
                 self.field(u'license_copyright'))
             if license_version == u'':
                 QtGui.QMessageBox.critical(self,
-                    self.trUtf8('Empty Version Name'),
-                    self.trUtf8('You need to specify a version name for your '
+                    translate(u'BiblesPlugin.ImportWizardForm', u'Empty Version Name'),
+                    translate(u'BiblesPlugin.ImportWizardForm', u'You need to specify a version name for your '
                         'Bible.'),
                     QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                 self.VersionNameEdit.setFocus()
                 return False
             elif license_copyright == u'':
                 QtGui.QMessageBox.critical(self,
-                    self.trUtf8('Empty Copyright'),
-                    self.trUtf8('You need to set a copyright for your Bible! '
+                    translate(u'BiblesPlugin.ImportWizardForm', u'Empty Copyright'),
+                    translate(u'BiblesPlugin.ImportWizardForm', u'You need to set a copyright for your Bible! '
                         'Bibles in the Public Domain need to be marked as '
                         'such.'),
                     QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
@@ -181,8 +181,8 @@
                 return False
             elif self.manager.exists(license_version):
                 QtGui.QMessageBox.critical(self,
-                    self.trUtf8('Bible Exists'),
-                    self.trUtf8('This Bible already exists! Please import '
+                    translate(u'BiblesPlugin.ImportWizardForm', u'Bible Exists'),
+                    translate(u'BiblesPlugin.ImportWizardForm', u'This Bible already exists! Please import '
                         'a different Bible or first delete the existing one.'),
                     QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                 self.VersionNameEdit.setFocus()
@@ -202,34 +202,40 @@
         """
         self.BibleComboBox.clear()
         for bible in self.web_bible_list[index].keys():
-            self.BibleComboBox.addItem(unicode(self.trUtf8(bible)))
+            self.BibleComboBox.addItem(unicode(
+                translate(u'BiblesPlugin.ImportWizardForm', bible)))
 
     def onOsisFileButtonClicked(self):
         """
         Show the file open dialog for the OSIS file.
         """
-        self.getFileName(self.trUtf8('Open OSIS File'),
+        self.getFileName(
+                translate(u'BiblesPlugin.ImportWizardForm', u'Open OSIS File'),
             self.OSISLocationEdit)
 
     def onBooksFileButtonClicked(self):
         """
         Show the file open dialog for the books CSV file.
         """
-        self.getFileName(self.trUtf8('Open Books CSV File'),
+        self.getFileName(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Open Books CSV File'),
             self.BooksLocationEdit)
 
     def onCsvVersesFileButtonClicked(self):
         """
         Show the file open dialog for the verses CSV file.
         """
-        self.getFileName(self.trUtf8('Open Verses CSV File'),
+        self.getFileName(
+            translate(u'BiblesPlugin.ImportWizardForm', 
+            u'Open Verses CSV File'),
             self.CsvVerseLocationEdit)
 
     def onOpenSongBrowseButtonClicked(self):
         """
         Show the file open dialog for the OpenSong file.
         """
-        self.getFileName(self.trUtf8('Open OpenSong Bible'),
+        self.getFileName(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Open OpenSong Bible'),
             self.OpenSongFileEdit)
 
     def onCancelButtonClicked(self, checked):
@@ -365,7 +371,8 @@
         self.ImportProgressBar.setMinimum(0)
         self.ImportProgressBar.setMaximum(1188)
         self.ImportProgressBar.setValue(0)
-        self.ImportProgressLabel.setText(self.trUtf8('Starting import...'))
+        self.ImportProgressLabel.setText(
+            translate(u'BiblesPlugin.ImportWizardForm', u'Starting import...'))
         Receiver.send_message(u'openlp_process_events')
 
     def performImport(self):
@@ -422,10 +429,13 @@
             self.manager.save_meta_data(license_version, license_version,
                 license_copyright, license_permission)
             self.manager.reload_bibles()
-            self.ImportProgressLabel.setText(self.trUtf8('Finished import.'))
+            self.ImportProgressLabel.setText(
+                translate(u'BiblesPlugin.ImportWizardForm',
+                u'Finished import.'))
         else:
             self.ImportProgressLabel.setText(
-                self.trUtf8('Your Bible import failed.'))
+                translate(u'BiblesPlugin.ImportWizardForm',
+                u'Your Bible import failed.'))
             importer.delete()
 
     def postImport(self):

=== modified file 'openlp/plugins/bibles/lib/biblestab.py'
--- openlp/plugins/bibles/lib/biblestab.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/bibles/lib/biblestab.py	2010-06-06 21:33:27 +0000
@@ -27,7 +27,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Receiver, SettingsTab
+from openlp.core.lib import Receiver, SettingsTab,  translate
 
 log = logging.getLogger(__name__)
 
@@ -45,7 +45,7 @@
 
     def setupUi(self):
         self.setObjectName(u'BiblesTab')
-        self.tabTitleVisible = self.trUtf8('Bibles')
+        self.tabTitleVisible = translate(u'BiblesPlugin,BiblesTab', u'Bibles')
         self.BibleLayout = QtGui.QHBoxLayout(self)
         self.BibleLayout.setSpacing(8)
         self.BibleLayout.setMargin(8)
@@ -149,22 +149,35 @@
             QtCore.SIGNAL(u'theme_update_list'), self.updateThemeList)
 
     def retranslateUi(self):
-        self.VerseDisplayGroupBox.setTitle(self.trUtf8('Verse Display'))
+        self.VerseDisplayGroupBox.setTitle(
+            translate(u'BiblesPlugin,BiblesTab', u'Verse Display'))
         self.NewChaptersCheckBox.setText(
-            self.trUtf8('Only show new chapter numbers'))
-        self.LayoutStyleLabel.setText(self.trUtf8('Layout Style:'))
-        self.DisplayStyleLabel.setText(self.trUtf8('Display Style:'))
-        self.BibleThemeLabel.setText(self.trUtf8('Bible Theme:'))
-        self.LayoutStyleComboBox.setItemText(0, self.trUtf8('verse per slide'))
-        self.LayoutStyleComboBox.setItemText(1, self.trUtf8('verse per line'))
-        self.LayoutStyleComboBox.setItemText(2, self.trUtf8('continuous'))
-        self.DisplayStyleComboBox.setItemText(0, self.trUtf8('No brackets'))
-        self.DisplayStyleComboBox.setItemText(1, self.trUtf8('( and )'))
-        self.DisplayStyleComboBox.setItemText(2, self.trUtf8('{ and }'))
-        self.DisplayStyleComboBox.setItemText(3, self.trUtf8('[ and ]'))
-        self.ChangeNoteLabel.setText(self.trUtf8(
-            'Note:\nChanges don\'t affect verses already in the service'))
-        self.BibleDualCheckBox.setText(self.trUtf8('Display Dual Bible Verses'))
+            translate(u'BiblesPlugin,BiblesTab', 
+            u'Only show new chapter numbers'))
+        self.LayoutStyleLabel.setText(
+            translate(u'BiblesPlugin,BiblesTab', u'Layout Style:'))
+        self.DisplayStyleLabel.setText(
+            translate(u'BiblesPlugin,BiblesTab', u'Display Style:'))
+        self.BibleThemeLabel.setText(
+            translate(u'BiblesPlugin,BiblesTab', u'Bible Theme:'))
+        self.LayoutStyleComboBox.setItemText(0, 
+            translate(u'BiblesPlugin,BiblesTab', u'verse per slide'))
+        self.LayoutStyleComboBox.setItemText(1, 
+            translate(u'BiblesPlugin,BiblesTab', u'verse per line'))
+        self.LayoutStyleComboBox.setItemText(2, 
+            translate(u'BiblesPlugin,BiblesTab', u'continuous'))
+        self.DisplayStyleComboBox.setItemText(0, 
+            translate(u'BiblesPlugin,BiblesTab', u'No brackets'))
+        self.DisplayStyleComboBox.setItemText(1, 
+            translate(u'BiblesPlugin,BiblesTab', u'( and )'))
+        self.DisplayStyleComboBox.setItemText(2,
+            translate(u'BiblesPlugin,BiblesTab', u'{ and }'))
+        self.DisplayStyleComboBox.setItemText(3, 
+            translate(u'BiblesPlugin,BiblesTab', u'[ and ]'))
+        self.ChangeNoteLabel.setText(translate(u'BiblesPlugin.BiblesTab',
+            u'Note:\nChanges don\'t affect verses already in the service'))
+        self.BibleDualCheckBox.setText(
+            translate(u'BiblesPlugin,BiblesTab', u'Display Dual Bible Verses'))
 
     def onBibleThemeComboBoxChanged(self):
         self.bible_theme = self.BibleThemeComboBox.currentText()

=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py	2010-05-31 23:23:08 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py	2010-06-06 21:33:27 +0000
@@ -29,7 +29,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, Receiver, BaseListWithDnD, \
-    ItemCapabilities
+    ItemCapabilities,  translate
 from openlp.plugins.bibles.forms import ImportWizardForm
 
 log = logging.getLogger(__name__)
@@ -71,7 +71,7 @@
         return unicode(obj)
 
     def initPluginNameVisible(self):
-        self.PluginNameVisible = self.trUtf8('Bible')
+        self.PluginNameVisible = translate(u'BiblesPlugin,MediaItem', u'Bible')
 
     def requiredIcons(self):
         MediaManagerItem.requiredIcons(self)
@@ -147,7 +147,7 @@
         self.QuickMessage = QtGui.QLabel(self.QuickTab)
         self.QuickMessage.setObjectName(u'QuickMessage')
         self.QuickLayout.addWidget(self.QuickMessage, 6, 0, 1, 3)
-        self.SearchTabWidget.addTab(self.QuickTab, self.trUtf8('Quick'))
+        self.SearchTabWidget.addTab(self.QuickTab, translate(u'BiblesPlugin,MediaItem', u'Quick'))
         QuickSpacerItem = QtGui.QSpacerItem(20, 35, QtGui.QSizePolicy.Minimum,
             QtGui.QSizePolicy.Expanding)
         self.QuickLayout.addItem(QuickSpacerItem, 6, 2, 1, 1)
@@ -231,7 +231,7 @@
         self.AdvancedMessage = QtGui.QLabel(self.AdvancedTab)
         self.AdvancedMessage.setObjectName(u'AdvancedMessage')
         self.AdvancedLayout.addWidget(self.AdvancedMessage, 8, 0, 1, 3)
-        self.SearchTabWidget.addTab(self.AdvancedTab, self.trUtf8('Advanced'))
+        self.SearchTabWidget.addTab(self.AdvancedTab, translate(u'BiblesPlugin,MediaItem', u'Advanced'))
         # Add the search tab widget to the page layout
         self.PageLayout.addWidget(self.SearchTabWidget)
         # Combo Boxes
@@ -289,27 +289,27 @@
 
     def retranslateUi(self):
         log.debug(u'retranslateUi')
-        self.QuickVersionLabel.setText(self.trUtf8('Version:'))
-        self.QuickSecondVersionLabel.setText(self.trUtf8('Dual:'))
-        self.QuickSearchLabel.setText(self.trUtf8('Search Type:'))
-        self.QuickSearchLabel.setText(self.trUtf8('Find:'))
-        self.QuickSearchButton.setText(self.trUtf8('Search'))
-        self.QuickClearLabel.setText(self.trUtf8('Results:'))
-        self.AdvancedVersionLabel.setText(self.trUtf8('Version:'))
-        self.AdvancedSecondBibleLabel.setText(self.trUtf8('Dual:'))
-        self.AdvancedBookLabel.setText(self.trUtf8('Book:'))
-        self.AdvancedChapterLabel.setText(self.trUtf8('Chapter:'))
-        self.AdvancedVerseLabel.setText(self.trUtf8('Verse:'))
-        self.AdvancedFromLabel.setText(self.trUtf8('From:'))
-        self.AdvancedToLabel.setText(self.trUtf8('To:'))
-        self.AdvancedClearLabel.setText(self.trUtf8('Results:'))
-        self.AdvancedSearchButton.setText(self.trUtf8('Search'))
-        self.QuickSearchComboBox.addItem(self.trUtf8('Verse Search'))
-        self.QuickSearchComboBox.addItem(self.trUtf8('Text Search'))
-        self.ClearQuickSearchComboBox.addItem(self.trUtf8('Clear'))
-        self.ClearQuickSearchComboBox.addItem(self.trUtf8('Keep'))
-        self.ClearAdvancedSearchComboBox.addItem(self.trUtf8('Clear'))
-        self.ClearAdvancedSearchComboBox.addItem(self.trUtf8('Keep'))
+        self.QuickVersionLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Version:'))
+        self.QuickSecondVersionLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Dual:'))
+        self.QuickSearchLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Search Type:'))
+        self.QuickSearchLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Find:'))
+        self.QuickSearchButton.setText(translate(u'BiblesPlugin,MediaItem', u'Search'))
+        self.QuickClearLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Results:'))
+        self.AdvancedVersionLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Version:'))
+        self.AdvancedSecondBibleLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Dual:'))
+        self.AdvancedBookLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Book:'))
+        self.AdvancedChapterLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Chapter:'))
+        self.AdvancedVerseLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Verse:'))
+        self.AdvancedFromLabel.setText(translate(u'BiblesPlugin,MediaItem', u'From:'))
+        self.AdvancedToLabel.setText(translate(u'BiblesPlugin,MediaItem', u'To:'))
+        self.AdvancedClearLabel.setText(translate(u'BiblesPlugin,MediaItem', u'Results:'))
+        self.AdvancedSearchButton.setText(translate(u'BiblesPlugin,MediaItem', u'Search'))
+        self.QuickSearchComboBox.addItem(translate(u'BiblesPlugin,MediaItem', u'Verse Search'))
+        self.QuickSearchComboBox.addItem(translate(u'BiblesPlugin,MediaItem', u'Text Search'))
+        self.ClearQuickSearchComboBox.addItem(translate(u'BiblesPlugin,MediaItem', u'Clear'))
+        self.ClearQuickSearchComboBox.addItem(translate(u'BiblesPlugin,MediaItem', u'Keep'))
+        self.ClearAdvancedSearchComboBox.addItem(translate(u'BiblesPlugin,MediaItem', u'Clear'))
+        self.ClearAdvancedSearchComboBox.addItem(translate(u'BiblesPlugin,MediaItem', u'Keep'))
 
     def initialise(self):
         log.debug(u'bible manager initialise')
@@ -363,8 +363,8 @@
 
     def onNoBookFound(self):
         QtGui.QMessageBox.critical(self,
-            self.trUtf8('No Book Found'),
-            self.trUtf8('No matching book could be found in this Bible.'),
+            translate(u'BiblesPlugin,MediaItem', u'No Book Found'),
+            translate(u'BiblesPlugin,MediaItem', u'No matching book could be found in this Bible.'),
             QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
             QtGui.QMessageBox.Ok
         )
@@ -532,9 +532,9 @@
                     bible_text = u''
             if not service_item.title:
                 service_item.title = u'%s %s' % (book, verse_text)
-            elif service_item.title.find(self.trUtf8(u'etc')) == -1:
+            elif service_item.title.find(translate('MediaItem',u'etc')) == -1:
                 service_item.title = u'%s, %s' \
-                    % (service_item.title, self.trUtf8(u'etc'))
+                    % (service_item.title, translate('MediaItem',u'etc'))
         if  len(self.parent.settings_tab.bible_theme) == 0:
             service_item.theme = None
         else:
@@ -583,7 +583,7 @@
         self.verses = self.parent.manager.get_verse_count(bible, book, 1)
         if self.verses == 0:
             self.AdvancedSearchButton.setEnabled(False)
-            self.AdvancedMessage.setText(self.trUtf8('Bible not fully loaded'))
+            self.AdvancedMessage.setText(translate(u'BiblesPlugin,MediaItem', u'Bible not fully loaded'))
         else:
             self.AdvancedSearchButton.setEnabled(True)
             self.AdvancedMessage.setText(u'')

=== modified file 'openlp/plugins/bibles/lib/opensong.py'
--- openlp/plugins/bibles/lib/opensong.py	2010-05-29 19:50:50 +0000
+++ openlp/plugins/bibles/lib/opensong.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 from lxml import objectify
 from PyQt4 import QtCore
 
-from openlp.core.lib import Receiver
+from openlp.core.lib import Receiver,  translate
 from db import BibleDB
 
 log = logging.getLogger(__name__)
@@ -94,7 +94,8 @@
                         )
                         Receiver.send_message(u'openlp_process_events')
                     self.wizard.incrementProgressBar(
-                        QtCore.QString('%s %s %s' % (self.trUtf8('Importing'),\
+                        QtCore.QString('%s %s %s' % (
+                            translate(u'BiblesPlugin.Opensong',  u'Importing'),\
                             db_book.name, chapter.attrib[u'n'])))
                     self.commit()
         except IOError:

=== modified file 'openlp/plugins/custom/customplugin.py'
--- openlp/plugins/custom/customplugin.py	2010-04-27 16:27:57 +0000
+++ openlp/plugins/custom/customplugin.py	2010-06-06 21:33:27 +0000
@@ -26,7 +26,7 @@
 import logging
 
 from forms import EditCustomForm
-from openlp.core.lib import Plugin, build_icon, PluginStatus
+from openlp.core.lib import Plugin, build_icon, PluginStatus,  translate
 from openlp.plugins.custom.lib import CustomManager, CustomMediaItem, CustomTab
 
 log = logging.getLogger(__name__)
@@ -67,10 +67,11 @@
         self.remove_toolbox_item()
 
     def about(self):
-        about_text = self.trUtf8('<b>Custom Plugin</b><br>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.<br>')
+        about_text = translate(u'CustomPlugin.CustomPlugin',
+            u'<b>Custom Plugin</b><br>This plugin '
+            u'allows slides to be displayed on the screen in the same way '
+            u'songs are. This plugin provides greater freedom over the '
+            u'songs plugin.<br>')
         return about_text
 
     def can_delete_theme(self, theme):

=== modified file 'openlp/plugins/custom/forms/editcustomdialog.py'
--- openlp/plugins/custom/forms/editcustomdialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/custom/forms/editcustomdialog.py	2010-06-06 21:33:27 +0000
@@ -153,23 +153,46 @@
         customEditDialog.setTabOrder(self.DownButton, self.ThemeComboBox)
 
     def retranslateUi(self, customEditDialog):
-        customEditDialog.setWindowTitle(translate('EditCustomForm', 'Edit Custom Slides'))
-        self.UpButton.setToolTip(translate('EditCustomForm', 'Move slide Up 1'))
-        self.DownButton.setToolTip(translate('EditCustomForm', 'Move slide down 1'))
-        self.TitleLabel.setText(translate('EditCustomForm', 'Title:'))
-        self.AddButton.setText(translate('EditCustomForm', 'Add New'))
-        self.AddButton.setToolTip(translate('EditCustomForm', 'Add new slide at bottom'))
-        self.EditButton.setText(translate('EditCustomForm', 'Edit'))
-        self.EditButton.setToolTip(translate('EditCustomForm', 'Edit selected slide'))
-        self.EditAllButton.setText(translate('EditCustomForm', 'Edit All'))
-        self.EditAllButton.setToolTip(translate('EditCustomForm', 'Edit all slides'))
-        self.SaveButton.setText(translate('EditCustomForm', 'Save'))
-        self.SaveButton.setToolTip(translate('EditCustomForm', 'Replace edited slide'))
-        self.DeleteButton.setText(translate('EditCustomForm', 'Delete'))
-        self.DeleteButton.setToolTip(translate('EditCustomForm', 'Delete selected slide'))
-        self.ClearButton.setText(translate('EditCustomForm', 'Clear'))
-        self.ClearButton.setToolTip(translate('EditCustomForm', 'Clear edit area'))
-        self.SplitButton.setText(translate('EditCustomForm', 'Split Slide'))
-        self.SplitButton.setToolTip(translate('EditCustomForm', 'Add slide split'))
-        self.ThemeLabel.setText(translate('EditCustomForm', 'Theme:'))
-        self.CreditLabel.setText(translate('EditCustomForm', 'Credits:'))
+        customEditDialog.setWindowTitle(translate(u'CustomPlugin.EditCustomForm',
+            u'Edit Custom Slides'))
+        self.UpButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm'
+                u'CustomPlugin.EditCustomForm', 
+                u'Move slide Up 1'))
+        self.DownButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm', u'Move slide down 1'))
+        self.TitleLabel.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Title:'))
+        self.AddButton.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Add New'))
+        self.AddButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm',
+            u'Add new slide at bottom'))
+        self.EditButton.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Edit'))
+        self.EditButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm', u'Edit selected slide'))
+        self.EditAllButton.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Edit All'))
+        self.EditAllButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm', u'Edit all slides'))
+        self.SaveButton.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Save'))
+        self.SaveButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm', u'Replace edited slide'))
+        self.DeleteButton.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Delete'))
+        self.DeleteButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm', u'Delete selected slide'))
+        self.ClearButton.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Clear'))
+        self.ClearButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm', u'Clear edit area'))
+        self.SplitButton.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Split Slide'))
+        self.SplitButton.setToolTip(
+            translate(u'CustomPlugin.EditCustomForm', u'Add slide split'))
+        self.ThemeLabel.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Theme:'))
+        self.CreditLabel.setText(
+            translate(u'CustomPlugin.EditCustomForm', u'Credits:'))

=== modified file 'openlp/plugins/custom/forms/editcustomform.py'
--- openlp/plugins/custom/forms/editcustomform.py	2010-05-25 00:48:42 +0000
+++ openlp/plugins/custom/forms/editcustomform.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 from PyQt4 import QtCore, QtGui
 
 from editcustomdialog import Ui_customEditDialog
-from openlp.core.lib import SongXMLBuilder, SongXMLParser, Receiver
+from openlp.core.lib import SongXMLBuilder, SongXMLParser, Receiver,  translate
 from openlp.plugins.custom.lib.models import CustomSlide
 
 log = logging.getLogger(__name__)
@@ -47,7 +47,8 @@
         self.setupUi(self)
         # Connecting signals and slots
         self.previewButton = QtGui.QPushButton()
-        self.previewButton.setText(self.trUtf8('Save && Preview'))
+        self.previewButton.setText(translate(u'CustomPlugin.EditCustomForm',
+            u'Save && Preview'))
         self.buttonBox.addButton(
             self.previewButton, QtGui.QDialogButtonBox.ActionRole)
         QtCore.QObject.connect(self.buttonBox,
@@ -84,7 +85,8 @@
 
     def onPreview(self, button):
         log.debug(u'onPreview')
-        if button.text() == unicode(self.trUtf8('Save && Preview')) \
+        if button.text() == unicode(translate(u'CustomPlugin.EditCustomForm',
+            u'Save && Preview')) \
             and self.saveCustom():
             Receiver.send_message(u'custom_preview')
 
@@ -147,7 +149,8 @@
     def saveCustom(self):
         valid, message = self._validate()
         if not valid:
-            QtGui.QMessageBox.critical(self, self.trUtf8('Error'), message,
+            QtGui.QMessageBox.critical(self, 
+                translate(u'CustomPlugin.EditCustomForm', u'Error'), message,
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
             return False
         sxml = SongXMLBuilder()
@@ -263,12 +266,15 @@
     def _validate(self):
         if len(self.TitleEdit.displayText()) == 0:
             self.TitleEdit.setFocus()
-            return False, self.trUtf8('You need to enter a title')
+            return False, translate(u'CustomPlugin.EditCustomForm',
+                u'You need to enter a title')
         # must have 1 slide
         if self.VerseListView.count() == 0:
             self.VerseTextEdit.setFocus()
-            return False, self.trUtf8('You need to enter a slide')
+            return False, translate(u'CustomPlugin.EditCustomForm',
+                u'You need to enter a slide')
         if self.VerseTextEdit.toPlainText():
             self.VerseTextEdit.setFocus()
-            return False, self.trUtf8('You have unsaved data, please save or clear')
+            return False, translate(u'CustomPlugin.editCustomForm',
+                u'You have unsaved data, please save or clear')
         return True, u''

=== modified file 'openlp/plugins/custom/lib/customtab.py'
--- openlp/plugins/custom/lib/customtab.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/custom/lib/customtab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab
+from openlp.core.lib import SettingsTab,  translate
 
 class CustomTab(SettingsTab):
     """
@@ -36,7 +36,7 @@
 
     def setupUi(self):
         self.setObjectName(u'CustomTab')
-        self.tabTitleVisible = self.trUtf8('Custom')
+        self.tabTitleVisible = translate(u'CustomPlugin.CustomTab', u'Custom')
         self.CustomLayout = QtGui.QFormLayout(self)
         self.CustomLayout.setObjectName(u'CustomLayout')
         self.CustomModeGroupBox = QtGui.QGroupBox(self)
@@ -55,9 +55,10 @@
             self.onDisplayFooterCheckBoxChanged)
 
     def retranslateUi(self):
-        self.CustomModeGroupBox.setTitle(self.trUtf8('Custom Display'))
+        self.CustomModeGroupBox.setTitle(translate(u'CustomPlugin.CustomTab', 
+            u'Custom Display'))
         self.DisplayFooterCheckBox.setText(
-            self.trUtf8('Display Footer'))
+            translate(u'CustomPlugin.CustomTab', u'Display Footer'))
 
     def onDisplayFooterCheckBoxChanged(self, check_state):
         self.displayFooter = False

=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/custom/lib/mediaitem.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, SongXMLParser, BaseListWithDnD, \
-    Receiver, ItemCapabilities
+    Receiver, ItemCapabilities,  translate
 
 log = logging.getLogger(__name__)
 
@@ -66,7 +66,7 @@
             QtCore.SIGNAL(u'custom_preview'), self.onPreviewClick)
 
     def initPluginNameVisible(self):
-        self.PluginNameVisible = self.trUtf8('Custom')
+        self.PluginNameVisible = translate(u'CustomPlugin.MediaItem', u'Custom')
 
     def requiredIcons(self):
         MediaManagerItem.requiredIcons(self)

=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py	2010-03-21 23:58:01 +0000
+++ openlp/plugins/images/imageplugin.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 import logging
 
-from openlp.core.lib import Plugin, build_icon, PluginStatus
+from openlp.core.lib import Plugin, build_icon, PluginStatus,  translate
 from openlp.plugins.images.lib import ImageMediaItem, ImageTab
 
 log = logging.getLogger(__name__)
@@ -56,11 +56,12 @@
         return ImageMediaItem(self, self.icon, self.name)
 
     def about(self):
-        about_text = self.trUtf8('<b>Image Plugin</b><br>Allows images of '
-            'all types to be displayed.  If a number of images are selected '
-            'together and presented on the live controller it is possible '
-            'to turn them into a timed loop.<br<br>From the plugin if the '
-            '<i>Override background</i> is chosen and an image is selected '
-            'any songs which are rendered will use the selected image from '
-            'the background instead of the one provied by the theme.<br>')
+        about_text = translate(u'ImagePlugin.ImagePlugin', u'<b>Image Plugin'
+            u'</b><br>Allows images of all types to be displayed. If a number '
+            u'of images are selected together and presented on the live '
+            u'controller it is possible to turn them into a timed loop.<br<br>'
+            u'From the plugin if the <i>Override background</i> is chosen and '
+            u'an image is selected any songs which are rendered will use the '
+            u'selected image from the background instead of the one provied by '
+            u'the theme.<br>')
         return about_text

=== modified file 'openlp/plugins/images/lib/imagetab.py'
--- openlp/plugins/images/lib/imagetab.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/images/lib/imagetab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab, Receiver
+from openlp.core.lib import SettingsTab, Receiver,  translate
 
 class ImageTab(SettingsTab):
     """
@@ -36,7 +36,7 @@
 
     def setupUi(self):
         self.setObjectName(u'ImageTab')
-        self.tabTitleVisible = self.trUtf8('Images')
+        self.tabTitleVisible = translate(u'ImagePlugin.ImageTab', u'Images')
         self.ImageLayout = QtGui.QFormLayout(self)
         self.ImageLayout.setObjectName(u'ImageLayout')
         self.ImageSettingsGroupBox = QtGui.QGroupBox(self)
@@ -63,9 +63,12 @@
             QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged)
 
     def retranslateUi(self):
-        self.ImageSettingsGroupBox.setTitle(self.trUtf8('Image Settings'))
-        self.TimeoutLabel.setText(self.trUtf8('Slide Loop Delay:'))
-        self.TimeoutSpinBox.setSuffix(self.trUtf8('sec'))
+        self.ImageSettingsGroupBox.setTitle(
+            translate(u'ImagePlugin.ImageTab', u'Image Settings'))
+        self.TimeoutLabel.setText(
+            translate(u'ImagePlugin.ImageTab', u'Slide Loop Delay:'))
+        self.TimeoutSpinBox.setSuffix(
+            translate(u'ImagePlugin.ImageTab', u'sec'))
 
     def onTimeoutSpinBoxChanged(self):
         self.loop_delay = self.TimeoutSpinBox.value()

=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py	2010-05-29 19:50:50 +0000
+++ openlp/plugins/images/lib/mediaitem.py	2010-06-06 21:33:27 +0000
@@ -29,7 +29,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
-    contextMenuAction, ItemCapabilities, SettingsManager
+    contextMenuAction, ItemCapabilities, SettingsManager,  translate
 from openlp.core.utils import AppLocation
 
 log = logging.getLogger(__name__)
@@ -56,12 +56,13 @@
         MediaManagerItem.__init__(self, parent, icon, title)
 
     def initPluginNameVisible(self):
-        self.PluginNameVisible = self.trUtf8('Image')
+        self.PluginNameVisible = translate(u'ImagePlugin.MediaItem', u'Image')
 
     def retranslateUi(self):
-        self.OnNewPrompt = self.trUtf8('Select Image(s)')
-        self.OnNewFileMasks = self.trUtf8(
-            'Images (*.jpg *.jpeg *.gif *.png *.bmp);; All files (*)')
+        self.OnNewPrompt = translate(u'ImagePlugin.MediaItem',
+            u'Select Image(s)')
+        self.OnNewFileMasks = translate(u'ImagePlugin.MediaItem',
+            u'Images (*.jpg *.jpeg *.gif *.png *.bmp);; All files (*)')
 
     def requiredIcons(self):
         MediaManagerItem.requiredIcons(self)
@@ -90,7 +91,7 @@
         self.ListView.addAction(
             contextMenuAction(
                 self.ListView, u':/slides/slide_blank.png',
-                self.trUtf8('Replace Live Background'),
+                translate(u'ImagePlugin.MediaItem', u'Replace Live Background'),
                 self.onReplaceClick))
 
     def addEndHeaderBar(self):
@@ -105,7 +106,8 @@
         self.ImageWidget.setObjectName(u'ImageWidget')
         self.blankButton = self.Toolbar.addToolbarButton(
             u'Replace Background', u':/slides/slide_blank.png',
-            self.trUtf8('Replace Live Background'), self.onReplaceClick, False)
+            translate(u'ImagePlugin.MediaItem', u'Replace Live Background'),
+                self.onReplaceClick, False)
         # Add the song widget to the page layout
         self.PageLayout.addWidget(self.ImageWidget)
 
@@ -143,7 +145,8 @@
     def generateSlideData(self, service_item, item=None):
         items = self.ListView.selectedIndexes()
         if items:
-            service_item.title = unicode(self.trUtf8('Image(s)'))
+            service_item.title = unicode(
+                translate(u'ImagePlugin.MediaItem', u'Image(s)'))
             service_item.add_capability(ItemCapabilities.AllowsMaintain)
             service_item.add_capability(ItemCapabilities.AllowsPreview)
             service_item.add_capability(ItemCapabilities.AllowsLoop)
@@ -161,8 +164,8 @@
     def onReplaceClick(self):
         if not self.ListView.selectedIndexes():
             QtGui.QMessageBox.information(self,
-                self.trUtf8('No item selected'),
-                self.trUtf8('You must select one item'))
+                translate(u'ImagePlugin.MediaItem', u'No item selected'),
+                translate(u'ImagePlugin.MediaItem', u'You must select one item'))
         items = self.ListView.selectedIndexes()
         for item in items:
             bitem = self.ListView.item(item.row())

=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py	2010-05-27 14:41:47 +0000
+++ openlp/plugins/media/lib/mediaitem.py	2010-06-06 21:33:27 +0000
@@ -29,7 +29,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
-    ItemCapabilities, SettingsManager, contextMenuAction,  Receiver
+    ItemCapabilities, SettingsManager, contextMenuAction,  Receiver,  translate
 
 log = logging.getLogger(__name__)
 
@@ -58,13 +58,14 @@
         self.ServiceItemIconName = u':/media/media_video.png'
 
     def initPluginNameVisible(self):
-        self.PluginNameVisible = self.trUtf8('Media')
+        self.PluginNameVisible = translate(u'MediaPlugin.MediaItem', u'Media')
 
     def retranslateUi(self):
-        self.OnNewPrompt = self.trUtf8('Select Media')
-        self.OnNewFileMasks = self.trUtf8('Videos (%s);;'
-            'Audio (%s);;'
-            'All files (*)' % (self.parent.video_list, self.parent.audio_list))
+        self.OnNewPrompt = translate(u'MediaPlugin.MediaItem', u'Select Media')
+        self.OnNewFileMasks = translate(u'MediaPlugin.MediaItem',
+            u'Videos (%s);;'
+            u'Audio (%s);;'
+            u'All files (*)' % (self.parent.video_list, self.parent.audio_list))
 
     def requiredIcons(self):
         MediaManagerItem.requiredIcons(self)
@@ -78,7 +79,7 @@
         self.ListView.addAction(
             contextMenuAction(
                 self.ListView, u':/slides/slide_blank.png',
-                self.trUtf8('Replace Live Background'),
+                translate(u'MediaPlugin.MediaItem', u'Replace Live Background'),
                 self.onReplaceClick))
 
     def addEndHeaderBar(self):
@@ -93,7 +94,8 @@
         self.ImageWidget.setObjectName(u'ImageWidget')
         self.blankButton = self.Toolbar.addToolbarButton(
             u'Replace Background', u':/slides/slide_blank.png',
-            self.trUtf8('Replace Live Background'), self.onReplaceClick, False)
+            translate(u'MediaPlugin.MediaItem', u'Replace Live Background'),
+                self.onReplaceClick, False)
         # Add the song widget to the page layout
         self.PageLayout.addWidget(self.ImageWidget)
 
@@ -105,8 +107,10 @@
             self.background = True
             if not self.ListView.selectedIndexes():
                 QtGui.QMessageBox.information(self,
-                    self.trUtf8('No item selected'),
-                    self.trUtf8('You must select one item'))
+                    translate(u'MediaPlugin.MediaItem',
+                        u'No item selected'),
+                    translate(u'MediaPlugin.MediaItem',
+                        u'You must select one item'))
             items = self.ListView.selectedIndexes()
             for item in items:
                 bitem = self.ListView.item(item.row())
@@ -119,7 +123,8 @@
             if item is None:
                 return False
         filename = unicode((item.data(QtCore.Qt.UserRole)).toString())
-        service_item.title = unicode(self.trUtf8('Media'))
+        service_item.title = unicode(
+            translate(u'MediaPlugin.MediaItem', u'Media'))
         service_item.add_capability(ItemCapabilities.RequiresMedia)
         frame = u':/media/image_clapperboard.png'
         (path, name) = os.path.split(filename)

=== modified file 'openlp/plugins/media/mediaplugin.py'
--- openlp/plugins/media/mediaplugin.py	2010-05-06 16:49:12 +0000
+++ openlp/plugins/media/mediaplugin.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 import logging
 
-from openlp.core.lib import Plugin, build_icon, PluginStatus
+from openlp.core.lib import Plugin, build_icon, PluginStatus, translate
 from openlp.plugins.media.lib import MediaMediaItem
 from PyQt4.phonon import Phonon
 
@@ -76,6 +76,7 @@
         return MediaMediaItem(self, self.icon, self.name)
 
     def about(self):
-        about_text = self.trUtf8('<b>Media Plugin</b><br>This plugin '
-            'allows the playing of audio and video media')
+        about_text = translate(u'MediaPlugin.MediaPlugin',
+            u'<b>Media Plugin</b><br>This plugin '
+            u'allows the playing of audio and video media')
         return about_text

=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py	2010-05-27 14:41:47 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py	2010-06-06 21:33:27 +0000
@@ -29,7 +29,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, BaseListWithDnD, build_icon, \
-    SettingsManager
+    SettingsManager, translate
 from openlp.core.utils import AppLocation
 from openlp.plugins.presentations.lib import MessageListener
 
@@ -61,11 +61,14 @@
         self.message_listener = MessageListener(self)
 
     def initPluginNameVisible(self):
-        self.PluginNameVisible = self.trUtf8('Presentation')
+        self.PluginNameVisible = translate(u'PresentationPlugin.MediaItem',
+            u'Presentation')
 
     def retranslateUi(self):
-        self.OnNewPrompt = self.trUtf8('Select Presentation(s)')
-        self.Automatic = self.trUtf8('Automatic')
+        self.OnNewPrompt = translate(u'PresentationPlugin.MediaItem',
+            u'Select Presentation(s)')
+        self.Automatic = translate(u'PresentationPlugin.MediaItem',
+            u'Automatic')
         fileType = u''
         for controller in self.controllers:
             if self.controllers[controller].enabled:
@@ -75,7 +78,8 @@
                     if fileType.find(type) == -1:
                         fileType += u'*%s ' % type
                         self.parent.service_manager.supportedSuffixes(type)
-        self.OnNewFileMasks = self.trUtf8('Presentations (%s)' % fileType)
+        self.OnNewFileMasks = translate(u'PresentationPlugin.MediaItem',
+            u'Presentations (%s)' % fileType)
 
     def requiredIcons(self):
         MediaManagerItem.requiredIcons(self)
@@ -101,7 +105,8 @@
         self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget)
         self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel')
         self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1)
-        self.DisplayTypeLabel.setText(self.trUtf8('Present using:'))
+        self.DisplayTypeLabel.setText(
+            translate(u'PresentationPlugin.MediaItem', u'Present using:'))
         # Add the Presentation widget to the page layout
         self.PageLayout.addWidget(self.PresentationWidget)
 
@@ -134,8 +139,10 @@
             filename = os.path.split(unicode(file))[1]
             if titles.count(filename) > 0:
                 QtGui.QMessageBox.critical(
-                    self, self.trUtf8('File exists'), self.trUtf8(
-                        'A presentation with that filename already exists.'),
+                    self, translate(u'PresentationPlugin.MediaItem',
+                    u'File exists'), 
+                        translate(u'PresentationPlugin.MediaItem',
+                        u'A presentation with that filename already exists.'),
                     QtGui.QMessageBox.Ok)
             else:
                 icon = None

=== modified file 'openlp/plugins/presentations/lib/presentationtab.py'
--- openlp/plugins/presentations/lib/presentationtab.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/presentations/lib/presentationtab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab
+from openlp.core.lib import SettingsTab, translate
 
 class PresentationTab(SettingsTab):
     """
@@ -37,7 +37,8 @@
 
     def setupUi(self):
         self.setObjectName(u'PresentationTab')
-        self.tabTitleVisible = self.trUtf8('Presentations')
+        self.tabTitleVisible = translate(u'PresentationPlugin.PresentationTab',
+            u'Presentations')
         self.PresentationLayout = QtGui.QHBoxLayout(self)
         self.PresentationLayout.setSpacing(8)
         self.PresentationLayout.setMargin(8)
@@ -88,12 +89,15 @@
         self.PresentationLayout.addWidget(self.PresentationRightWidget)
 
     def retranslateUi(self):
-        self.VerseDisplayGroupBox.setTitle(self.trUtf8('Available Controllers'))
+        self.VerseDisplayGroupBox.setTitle(
+            translate(u'PresentationPlugin.PresentationTab',
+            u'Available Controllers'))
         for key in self.controllers:
             controller = self.controllers[key]
             checkbox = self.PresenterCheckboxes[controller.name]
             checkbox.setText(
-                u'%s %s' % (controller.name, self.trUtf8('available')))
+                u'%s %s' % (controller.name, 
+                translate(u'PresentationPlugin.PresentationTab', u'available')))
 
     def load(self):
         for key in self.controllers:

=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py	2010-05-26 15:52:33 +0000
+++ openlp/plugins/presentations/presentationplugin.py	2010-06-06 21:33:27 +0000
@@ -26,7 +26,7 @@
 import os
 import logging
 
-from openlp.core.lib import Plugin, build_icon, PluginStatus
+from openlp.core.lib import Plugin, build_icon, PluginStatus, translate
 from openlp.core.utils import AppLocation
 from openlp.plugins.presentations.lib import *
 
@@ -108,9 +108,10 @@
             return False
 
     def about(self):
-        about_text = self.trUtf8('<b>Presentation Plugin</b> <br> 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.')
+        about_text = translate(u'PresentationPlugin.PresentationPlugin', 
+            u'<b>Presentation Plugin</b> <br> Delivers '
+            u'the ability to show presentations using a number of different '
+            u'programs. The choice of available presentation programs is '
+            u'available to the user in a drop down box.')
         return about_text
 

=== modified file 'openlp/plugins/remotes/lib/remotetab.py'
--- openlp/plugins/remotes/lib/remotetab.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/remotes/lib/remotetab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab
+from openlp.core.lib import SettingsTab, translate
 
 class RemoteTab(SettingsTab):
     """
@@ -36,7 +36,7 @@
 
     def setupUi(self):
         self.setObjectName(u'RemoteTab')
-        self.tabTitleVisible = self.trUtf8('Remotes')
+        self.tabTitleVisible = translate(u'RemotePlugin.RemoteTab', u'Remotes')
         self.RemoteLayout = QtGui.QFormLayout(self)
         self.RemoteLayout.setObjectName(u'RemoteLayout')
         self.RemoteModeGroupBox = QtGui.QGroupBox(self)
@@ -53,7 +53,8 @@
             0, QtGui.QFormLayout.LabelRole, self.RemoteModeGroupBox)
 
     def retranslateUi(self):
-        self.RemoteModeGroupBox.setTitle(self.trUtf8('Remotes Receiver Port'))
+        self.RemoteModeGroupBox.setTitle(
+            translate(u'RemotePlugin.RemoteTab', u'Remotes Receiver Port'))
 
     def load(self):
         self.RemotePortSpinBox.setValue(

=== modified file 'openlp/plugins/remotes/remoteplugin.py'
--- openlp/plugins/remotes/remoteplugin.py	2010-05-04 21:19:40 +0000
+++ openlp/plugins/remotes/remoteplugin.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 import logging
 
-from openlp.core.lib import Plugin
+from openlp.core.lib import Plugin, translate
 from openlp.plugins.remotes.lib import RemoteTab, HttpServer
 
 log = logging.getLogger(__name__)
@@ -69,8 +69,9 @@
         """
         Information about this plugin
         """
-        about_text = self.trUtf8('<b>Remote Plugin</b><br>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<br>'
-            'The Primary use for this would be to send alerts from a creche')
+        about_text = translate(u'RemotePlugin.RemotePlugin',
+            u'<b>Remote Plugin</b><br>This plugin '
+            u'provides the ability to send messages to a running version of '
+            u'openlp on a different computer via a web browser or other app<br>'
+            u'The Primary use for this would be to send alerts from a creche')
         return about_text

=== modified file 'openlp/plugins/songs/forms/authorsdialog.py'
--- openlp/plugins/songs/forms/authorsdialog.py	2010-05-27 20:56:34 +0000
+++ openlp/plugins/songs/forms/authorsdialog.py	2010-06-06 21:33:27 +0000
@@ -74,9 +74,20 @@
         QtCore.QMetaObject.connectSlotsByName(AuthorsDialog)
 
     def retranslateUi(self, AuthorsDialog):
+<<<<<<< TREE
         AuthorsDialog.setWindowTitle(
             translate('AuthorsForm', 'Author Maintenance'))
         self.DisplayLabel.setText(translate('AuthorsForm', 'Display name:'))
         self.FirstNameLabel.setText(translate('AuthorsForm', 'First name:'))
         self.LastNameLabel.setText(translate('AuthorsForm', 'Last name:'))
 
+=======
+        AuthorsDialog.setWindowTitle(
+            translate(u'SongsPlugin.AuthorsForm', u'Author Maintenance'))
+        self.DisplayLabel.setText(
+            translate(u'SongsPlugin.AuthorsForm', u'Display name:'))
+        self.FirstNameLabel.setText(
+             translate(u'SongsPlugin.AuthorsForm', u'First name:'))
+        self.LastNameLabel.setText(
+            translate(u'SongsPlugin.AuthorsForm', u'Last name:'))
+>>>>>>> MERGE-SOURCE

=== modified file 'openlp/plugins/songs/forms/authorsform.py'
--- openlp/plugins/songs/forms/authorsform.py	2010-05-27 20:56:34 +0000
+++ openlp/plugins/songs/forms/authorsform.py	2010-06-06 21:33:27 +0000
@@ -25,8 +25,10 @@
 
 from PyQt4 import QtGui, QtCore
 
+from openlp.core.lib import translate
 from openlp.plugins.songs.forms.authorsdialog import Ui_AuthorsDialog
 
+
 class AuthorsForm(QtGui.QDialog, Ui_AuthorsDialog):
     """
     Class to control the Maintenance of Authors Dialog
@@ -77,21 +79,38 @@
 
     def accept(self):
         if not self.FirstNameEdit.text():
+<<<<<<< TREE
             QtGui.QMessageBox.critical(self, self.trUtf8('Error'), self.trUtf8(
                 'You need to type in the first name of the author.'))
+=======
+            QtGui.QMessageBox.critical(
+                self, translate(u'SongsPlugin.AuthorsForm', u'Error'),
+                translate(u'SongsPlugin.AuthorsForm',
+                    u'You need to type in the first name of the author.'),
+                QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+>>>>>>> MERGE-SOURCE
             self.FirstNameEdit.setFocus()
             return False
         elif not self.LastNameEdit.text():
+<<<<<<< TREE
             QtGui.QMessageBox.critical(self, self.trUtf8('Error'),
                 self.trUtf8('You need to type in the last name of the author.'))
+=======
+            QtGui.QMessageBox.critical(
+                self, translate(u'SongsPlugin.AuthorsForm', u'Error'),
+                translate(u'SongsPlugin.AuthorsForm',
+                    u'You need to type in the last name of the author.'),
+                QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
+>>>>>>> MERGE-SOURCE
             self.LastNameEdit.setFocus()
             return False
         elif not self.DisplayEdit.text():
             if QtGui.QMessageBox.critical(
-                    self, self.trUtf8('Error'),
-                    self.trUtf8('You haven\'t set a display name for the '
-                        'author, would you like me to combine the first and '
-                        'last names for you?'),
+                    self, translate(u'SongsPlugin.AuthorsForm', u'Error'),
+                    translate(u'SongsPlugin.AuthorsForm',
+                        u'You haven\'t set a display name for the '
+                        u'author, would you like me to combine the first and '
+                        u'last names for you?'),
                     QtGui.QMessageBox.StandardButtons(
                         QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
                     ) == QtGui.QMessageBox.Yes:

=== modified file 'openlp/plugins/songs/forms/editsongdialog.py'
--- openlp/plugins/songs/forms/editsongdialog.py	2010-05-17 18:39:28 +0000
+++ openlp/plugins/songs/forms/editsongdialog.py	2010-06-06 21:33:27 +0000
@@ -423,36 +423,60 @@
         EditSongDialog.setTabOrder(self.CommentsEdit, self.ButtonBox)
 
     def retranslateUi(self, EditSongDialog):
-        EditSongDialog.setWindowTitle(translate('EditSongForm', 'Song Editor'))
-        self.TitleLabel.setText(translate('EditSongForm', 'Title:'))
-        self.AlternativeTitleLabel.setText(translate('EditSongForm', 'Alternative Title:'))
-        self.LyricsLabel.setText(translate('EditSongForm', 'Lyrics:'))
-        self.VerseOrderLabel.setText(translate('EditSongForm', 'Verse Order:'))
-        self.VerseAddButton.setText(translate('EditSongForm', 'Add'))
-        self.VerseEditButton.setText(translate('EditSongForm', 'Edit'))
-        self.VerseEditAllButton.setText(translate('EditSongForm', 'Edit All'))
-        self.VerseDeleteButton.setText(translate('EditSongForm', 'Delete'))
+        EditSongDialog.setWindowTitle(
+            translate(u'SongsPlugin.EditSongForm', u'Song Editor'))
+        self.TitleLabel.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Title:'))
+        self.AlternativeTitleLabel.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Alternative Title:'))
+        self.LyricsLabel.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Lyrics:'))
+        self.VerseOrderLabel.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Verse Order:'))
+        self.VerseAddButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Add'))
+        self.VerseEditButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Edit'))
+        self.VerseEditAllButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Edit All'))
+        self.VerseDeleteButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Delete'))
         self.SongTabWidget.setTabText(
             self.SongTabWidget.indexOf(self.LyricsTab),
-            translate('EditSongForm', 'Title && Lyrics'))
-        self.AuthorsGroupBox.setTitle(translate('EditSongForm', 'Authors'))
-        self.AuthorAddButton.setText(translate('EditSongForm', '&Add to Song'))
-        self.AuthorRemoveButton.setText(translate('EditSongForm', '&Remove'))
+            translate(u'SongsPlugin.EditSongForm', u'Title && Lyrics'))
+        self.AuthorsGroupBox.setTitle(
+            translate(u'SongsPlugin.EditSongForm', u'Authors'))
+        self.AuthorAddButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'&Add to Song'))
+        self.AuthorRemoveButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'&Remove'))
         self.MaintenanceButton.setText(
-            translate('EditSongForm', '&Manage Authors, Topics, Books'))
-        self.TopicGroupBox.setTitle(translate('EditSongForm', 'Topic'))
-        self.TopicAddButton.setText(translate('EditSongForm', 'A&dd to Song'))
-        self.TopicRemoveButton.setText(translate('EditSongForm', 'R&emove'))
-        self.SongBookGroup.setTitle(translate('EditSongForm', 'Song Book'))
+            translate(u'SongsPlugin.EditSongForm',
+            u'&Manage Authors, Topics, Books'))
+        self.TopicGroupBox.setTitle(
+            translate(u'SongsPlugin.EditSongForm', u'Topic'))
+        self.TopicAddButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'A&dd to Song'))
+        self.TopicRemoveButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'R&emove'))
+        self.SongBookGroup.setTitle(
+            translate(u'SongsPlugin.EditSongForm', u'Song Book'))
         self.SongTabWidget.setTabText(
             self.SongTabWidget.indexOf(self.AuthorsTab),
-            translate('EditSongForm', 'Authors, Topics && Book'))
-        self.ThemeGroupBox.setTitle(translate('EditSongForm', 'Theme'))
-        self.ThemeAddButton.setText(translate('EditSongForm', 'Add a Theme'))
-        self.CopyrightGroupBox.setTitle(translate('EditSongForm', 'Copyright Information'))
-        self.CopyrightInsertButton.setText(translate('EditSongForm', u'\xa9'))
-        self.CCLILabel.setText(translate('EditSongForm', 'CCLI Number:'))
-        self.CommentsGroupBox.setTitle(translate('EditSongForm', 'Comments'))
+            translate(u'SongsPlugin.EditSongForm', u'Authors, Topics && Book'))
+        self.ThemeGroupBox.setTitle(
+            translate(u'SongsPlugin.EditSongForm', u'Theme'))
+        self.ThemeAddButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Add a Theme'))
+        self.CopyrightGroupBox.setTitle(
+            translate(u'SongsPlugin.EditSongForm', u'Copyright Information'))
+        self.CopyrightInsertButton.setText(
+            translate('EditSongForm', u'\xa9'))
+        self.CCLILabel.setText(
+            translate(u'SongsPlugin.EditSongForm', u'CCLI Number:'))
+        self.CommentsGroupBox.setTitle(
+            translate(u'SongsPlugin.EditSongForm', u'Comments'))
         self.SongTabWidget.setTabText(
             self.SongTabWidget.indexOf(self.ThemeTab),
-            translate('EditSongForm', 'Theme, Copyright Info && Comments'))
+            translate(u'SongsPlugin.EditSongForm',
+            u'Theme, Copyright Info && Comments'))

=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py	2010-06-06 15:59:01 +0000
+++ openlp/plugins/songs/forms/editsongform.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SongXMLBuilder, SongXMLParser, Receiver
+from openlp.core.lib import SongXMLBuilder, SongXMLParser, Receiver, translate
 from openlp.plugins.songs.forms import EditVerseForm
 from openlp.plugins.songs.lib.models import Song
 from editsongdialog import Ui_EditSongDialog
@@ -101,8 +101,13 @@
         QtCore.QObject.connect(self.VerseOrderEdit,
             QtCore.SIGNAL(u'lostFocus()'), self.onVerseOrderEditLostFocus)
         self.previewButton = QtGui.QPushButton()
+<<<<<<< TREE
         self.previewButton.setObjectName(u'previewButton')
         self.previewButton.setText(self.trUtf8('Save && Preview'))
+=======
+        self.previewButton.setText(
+            translate(u'SongsPlugin.EditSongForm', u'Save && Preview'))
+>>>>>>> MERGE-SOURCE
         self.ButtonBox.addButton(
             self.previewButton, QtGui.QDialogButtonBox.ActionRole)
         QtCore.QObject.connect(self.ButtonBox,
@@ -462,27 +467,55 @@
         if len(self.TitleEditItem.displayText()) == 0:
             self.SongTabWidget.setCurrentIndex(0)
             self.TitleEditItem.setFocus()
-            return False, self.trUtf8('You need to enter a song title.')
+            return False, translate(u'SongsPlugin.EditSongForm',
+                u'You need to enter a song title.')
         if self.VerseListWidget.rowCount() == 0:
             self.SongTabWidget.setCurrentIndex(0)
             self.VerseListWidget.setFocus()
-            return False, self.trUtf8('You need to enter some verses.')
+            return False, translate(u'SongsPlugin.EditSongForm',
+                u'You need to enter some verses.')
         if self.AuthorsListView.count() == 0:
             self.SongTabWidget.setCurrentIndex(1)
             self.AuthorsListView.setFocus()
         #split the verse list by space and mark lower case for testing
+<<<<<<< TREE
         taglist = unicode(self.trUtf8(' bitpeovc'))
+=======
+        taglist = unicode(translate(u'SongsPlugin.EditSongForm', u' bitped'))
+>>>>>>> MERGE-SOURCE
         for verse in unicode(self.VerseOrderEdit.text()).lower().split(u' '):
             if len(verse) > 1:
+<<<<<<< TREE
                 if taglist.find(verse[0:1]) > -1 \
+=======
+                if (verse[0:1] == u'%s' % translate(u'SongsPlugin.EditSongForm',
+                        u'v') or
+                    verse[0:1] == u'%s' % translate(u'SongsPlugin.EditSongForm',
+                        u'c')) \
+>>>>>>> MERGE-SOURCE
                     and verse[1:].isdigit():
                     pass
                 else:
                     self.SongTabWidget.setCurrentIndex(0)
                     self.VerseOrderEdit.setFocus()
                     return False, \
+<<<<<<< TREE
                         self.trUtf8(\
                         'Invalid verse entry, values must be I,B,T,P,E,O,V,C followed by a number')
+=======
+                        translate(u'SongsPlugin.EditSongForm',
+                            u'Invalid verse entry - Vx or Cx')
+            else:
+                if taglist.find(verse) > -1:
+                    pass
+                else:
+                    self.SongTabWidget.setCurrentIndex(0)
+                    self.VerseOrderEdit.setFocus()
+                    return False, \
+                        translate(u'SongsPlugin.EditSongForm',\
+                        u'Invalid verse entry, values must be '
+                        u'I,B,T,P,E,O,Vx,Cx')
+>>>>>>> MERGE-SOURCE
         return True, u''
 
     def onTitleEditItemLostFocus(self):
@@ -517,7 +550,13 @@
         The Song is valid so as the plugin to add it to preview to see.
         """
         log.debug(u'onPreview')
+<<<<<<< TREE
         if unicode(button.objectName()) == u'previewButton' and self.saveSong():
+=======
+        if button.text() == unicode(
+            translate(u'SongsPlugin.EditSongForm', u'Save && Preview')) \
+            and self.saveSong():
+>>>>>>> MERGE-SOURCE
             Receiver.send_message(u'songs_preview')
 
     def closePressed(self):
@@ -534,7 +573,7 @@
         valid, message = self._validate_song()
         if not valid:
             QtGui.QMessageBox.critical(
-                self, self.trUtf8('Error'), message,
+                self, translate(u'SongsPlugin.EditSongForm', u'Error'), message,
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
             return False
         self.song.title = unicode(self.TitleEditItem.text())

=== modified file 'openlp/plugins/songs/forms/editversedialog.py'
--- openlp/plugins/songs/forms/editversedialog.py	2010-06-06 06:40:08 +0000
+++ openlp/plugins/songs/forms/editversedialog.py	2010-06-06 21:33:27 +0000
@@ -92,6 +92,7 @@
         QtCore.QMetaObject.connectSlotsByName(EditVerseDialog)
 
     def retranslateUi(self, EditVerseDialog):
+<<<<<<< TREE
         EditVerseDialog.setWindowTitle(translate('EditVerseForm', 'Edit Verse'))
         self.VerseTypeLabel.setText(translate('EditVerseForm', 'Verse Type:'))
         self.VerseTypeComboBox.setItemText(0, VerseType.to_string(VerseType.Verse))
@@ -102,4 +103,26 @@
         self.VerseTypeComboBox.setItemText(5, VerseType.to_string(VerseType.Ending))
         self.VerseTypeComboBox.setItemText(6, VerseType.to_string(VerseType.Other))
         self.InsertButton.setText(translate('EditVerseForm', 'Insert'))
+=======
+        EditVerseDialog.setWindowTitle(
+            translate(u'SongsPlugin.EditVerseForm', u'Edit Verse'))
+        self.VerseTypeLabel.setText(
+            translate(u'SongsPlugin.EditVerseForm', u'Verse Type:'))
+        self.VerseTypeComboBox.setItemText(0, 
+            translate(u'SongsPlugin.EditVerseForm', u'Verse'))
+        self.VerseTypeComboBox.setItemText(1, 
+            translate(u'SongsPlugin.EditVerseForm', u'Chorus'))
+        self.VerseTypeComboBox.setItemText(2, 
+            translate(u'SongsPlugin.EditVerseForm', u'Bridge'))
+        self.VerseTypeComboBox.setItemText(3, 
+            translate(u'SongsPlugin.EditVerseForm', u'Pre-Chorus'))
+        self.VerseTypeComboBox.setItemText(4, 
+            translate(u'SongsPlugin.EditVerseForm', u'Intro'))
+        self.VerseTypeComboBox.setItemText(5, 
+            translate(u'SongsPlugin.EditVerseForm', u'Ending'))
+        self.VerseTypeComboBox.setItemText(6, 
+            translate(u'SongsPlugin.EditVerseForm', u'Other'))
+        self.InsertButton.setText(
+            translate(u'SongsPlugin.EditVerseForm', u'Insert'))
+>>>>>>> MERGE-SOURCE
 

=== modified file 'openlp/plugins/songs/forms/openlpexportdialog.py'
--- openlp/plugins/songs/forms/openlpexportdialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songs/forms/openlpexportdialog.py	2010-06-06 21:33:27 +0000
@@ -286,21 +286,41 @@
         QtCore.QMetaObject.connectSlotsByName(OpenLPExportDialog)
 
     def retranslateUi(self, OpenLPExportDialog):
-        OpenLPExportDialog.setWindowTitle(translate('OpenLPExportForm', 'openlp.org Song Exporter'))
-        self.ExportFileLabel.setText(translate('OpenLPExportForm', 'Select openlp.org export filename:'))
-        self.ExportListLabel.setText(translate('OpenLPExportForm', 'Full Song List'))
-        self.ExportListTable.horizontalHeaderItem(0).setText(translate('OpenLPExportForm', 'Song Title'))
-        self.ExportListTable.horizontalHeaderItem(1).setText(translate('OpenLPExportForm', 'Author'))
-        self.ExportSelectAllPushButton.setText(translate('OpenLPExportForm', 'Select All'))
-        self.ExportFilterComboBox.setItemText(0, translate('OpenLPExportForm', 'Lyrics'))
-        self.ExportFilterComboBox.setItemText(1, translate('OpenLPExportForm', 'Title'))
-        self.ExportFilterComboBox.setItemText(2, translate('OpenLPExportForm', 'Author'))
-        self.SelectedListLabel.setText(translate('OpenLPExportForm', 'Song Export List'))
-        self.SelectedListTable.horizontalHeaderItem(0).setText(translate('OpenLPExportForm', 'Song Title'))
-        self.SelectedListTable.horizontalHeaderItem(1).setText(translate('OpenLPExportForm', 'Author'))
-        self.SelectedSelectAllPushButton.setText(translate('OpenLPExportForm', 'Select All'))
-        self.SelectedRemoveSelectedButton.setText(translate('OpenLPExportForm', 'Remove Selected'))
-        self.ProgressGroupBox.setTitle(translate('OpenLPExportForm', 'Progress:'))
-        self.ProgressLabel.setText(translate('OpenLPExportForm', 'Ready to export'))
-        self.ExportPushButton.setText(translate('OpenLPExportForm', 'Export'))
-        self.ClosePushButton.setText(translate('OpenLPExportForm', 'Close'))
+        OpenLPExportDialog.setWindowTitle(
+            translate(u'SongsPlugin.OpenLPExportForm',
+                u'openlp.org Song Exporter'))
+        self.ExportFileLabel.setText(
+            translate(u'SongsPlugin.OpenLPExportForm',
+                u'Select openlp.org export filename:'))
+        self.ExportListLabel.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Full Song List'))
+        self.ExportListTable.horizontalHeaderItem(0).setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Song Title'))
+        self.ExportListTable.horizontalHeaderItem(1).setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Author'))
+        self.ExportSelectAllPushButton.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Select All'))
+        self.ExportFilterComboBox.setItemText(0, 
+            translate(u'SongsPlugin.OpenLPExportForm', u'Lyrics'))
+        self.ExportFilterComboBox.setItemText(1, 
+            translate(u'SongsPlugin.OpenLPExportForm', u'Title'))
+        self.ExportFilterComboBox.setItemText(2, 
+            translate(u'SongsPlugin.OpenLPExportForm', u'Author'))
+        self.SelectedListLabel.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Song Export List'))
+        self.SelectedListTable.horizontalHeaderItem(0).setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Song Title'))
+        self.SelectedListTable.horizontalHeaderItem(1).setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Author'))
+        self.SelectedSelectAllPushButton.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Select All'))
+        self.SelectedRemoveSelectedButton.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Remove Selected'))
+        self.ProgressGroupBox.setTitle(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Progress:'))
+        self.ProgressLabel.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Ready to export'))
+        self.ExportPushButton.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Export'))
+        self.ClosePushButton.setText(
+            translate(u'SongsPlugin.OpenLPExportForm', u'Close'))

=== modified file 'openlp/plugins/songs/forms/openlpimportdialog.py'
--- openlp/plugins/songs/forms/openlpimportdialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songs/forms/openlpimportdialog.py	2010-06-06 21:33:27 +0000
@@ -286,21 +286,42 @@
         QtCore.QMetaObject.connectSlotsByName(OpenLPImportDialog)
 
     def retranslateUi(self, OpenLPImportDialog):
-        OpenLPImportDialog.setWindowTitle(translate('OpenLPImportForm', 'openlp.org Song Importer'))
-        self.ImportFileLabel.setText(translate('OpenLPImportForm', 'Select openlp.org songfile to import:'))
-        self.ImportListLabel.setText(translate('OpenLPImportForm', 'Import File Song List'))
-        self.ImportListTable.horizontalHeaderItem(0).setText(translate('OpenLPImportForm', 'Song Title'))
-        self.ImportListTable.horizontalHeaderItem(1).setText(translate('OpenLPImportForm', 'Author'))
-        self.ImportSelectAllPushButton.setText(translate('OpenLPImportForm', 'Select All'))
-        self.ImportFilterComboBox.setItemText(0, translate('OpenLPImportForm', 'Lyrics'))
-        self.ImportFilterComboBox.setItemText(1, translate('OpenLPImportForm', 'Title'))
-        self.ImportFilterComboBox.setItemText(2, translate('OpenLPImportForm', 'Author'))
-        self.SelectedListLabel.setText(translate('OpenLPImportForm', 'Song Import List'))
-        self.SelectedListTable.horizontalHeaderItem(0).setText(translate('OpenLPImportForm', 'Song Title'))
-        self.SelectedListTable.horizontalHeaderItem(1).setText(translate('OpenLPImportForm', 'Author'))
-        self.SelectedSelectAllPushButton.setText(translate('OpenLPImportForm', 'Select All'))
-        self.SelectedRemoveSelectedButton.setText(translate('OpenLPImportForm', 'Remove Selected'))
-        self.ProgressGroupBox.setTitle(translate('OpenLPImportForm', 'Progress:'))
-        self.ProgressLabel.setText(translate('OpenLPImportForm', 'Ready to import'))
-        self.ImportPushButton.setText(translate('OpenLPImportForm', 'Import'))
-        self.ClosePushButton.setText(translate('OpenLPImportForm', 'Close'))
+        OpenLPImportDialog.setWindowTitle(
+            translate(u'SongsPlugin.OpenLPImportForm',
+                u'openlp.org Song Importer'))
+        self.ImportFileLabel.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', 
+                u'Select openlp.org songfile to import:'))
+        self.ImportListLabel.setText(
+            translate(u'SongsPlugin.OpenLPImportForm',
+                u'Import File Song List'))
+        self.ImportListTable.horizontalHeaderItem(0).setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Song Title'))
+        self.ImportListTable.horizontalHeaderItem(1).setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Author'))
+        self.ImportSelectAllPushButton.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Select All'))
+        self.ImportFilterComboBox.setItemText(0, 
+            translate(u'SongsPlugin.OpenLPImportForm', u'Lyrics'))
+        self.ImportFilterComboBox.setItemText(1, 
+            translate(u'SongsPlugin.OpenLPImportForm', u'Title'))
+        self.ImportFilterComboBox.setItemText(2, 
+            translate(u'SongsPlugin.OpenLPImportForm', u'Author'))
+        self.SelectedListLabel.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Song Import List'))
+        self.SelectedListTable.horizontalHeaderItem(0).setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Song Title'))
+        self.SelectedListTable.horizontalHeaderItem(1).setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Author'))
+        self.SelectedSelectAllPushButton.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Select All'))
+        self.SelectedRemoveSelectedButton.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Remove Selected'))
+        self.ProgressGroupBox.setTitle(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Progress:'))
+        self.ProgressLabel.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Ready to import'))
+        self.ImportPushButton.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Import'))
+        self.ClosePushButton.setText(
+            translate(u'SongsPlugin.OpenLPImportForm', u'Close'))

=== modified file 'openlp/plugins/songs/forms/opensongexportdialog.py'
--- openlp/plugins/songs/forms/opensongexportdialog.py	2010-05-01 20:01:32 +0000
+++ openlp/plugins/songs/forms/opensongexportdialog.py	2010-06-06 21:33:27 +0000
@@ -286,21 +286,39 @@
         QtCore.QMetaObject.connectSlotsByName(OpenSongExportDialog)
 
     def retranslateUi(self, OpenSongExportDialog):
-        OpenSongExportDialog.setWindowTitle(translate('OpenSongExportForm', 'OpenSong Song Exporter'))
-        self.ExportFileLabel.setText(translate('OpenSongExportForm', 'Select OpenSong song folder:'))
-        self.ExportListLabel.setText(translate('OpenSongExportForm', 'Full Song List'))
-        self.ExportListTable.horizontalHeaderItem(0).setText(translate('OpenSongExportForm', 'Song Title'))
-        self.ExportListTable.horizontalHeaderItem(1).setText(translate('OpenSongExportForm', 'Author'))
-        self.ExportSelectAllPushButton.setText(translate('OpenSongExportForm', 'Select All'))
-        self.ExportFilterComboBox.setItemText(0, translate('OpenSongExportForm', 'Lyrics'))
-        self.ExportFilterComboBox.setItemText(1, translate('OpenSongExportForm', 'Title'))
-        self.ExportFilterComboBox.setItemText(2, translate('OpenSongExportForm', 'Author'))
-        self.SelectedListLabel.setText(translate('OpenSongExportForm', 'Song Export List'))
-        self.SelectedListTable.horizontalHeaderItem(0).setText(translate('OpenSongExportForm', 'Song Title'))
-        self.SelectedListTable.horizontalHeaderItem(1).setText(translate('OpenSongExportForm', 'Author'))
-        self.SelectedSelectAllPushButton.setText(translate('OpenSongExportForm', 'Select All'))
-        self.SelectedRemoveSelectedButton.setText(translate('OpenSongExportForm', 'Remove Selected'))
-        self.ProgressGroupBox.setTitle(translate('OpenSongExportForm', 'Progress:'))
-        self.ProgressLabel.setText(translate('OpenSongExportForm', 'Ready to export'))
-        self.ExportPushButton.setText(translate('OpenSongExportForm', 'Export'))
-        self.ClosePushButton.setText(translate('OpenSongExportForm', 'Close'))
+        OpenSongExportDialog.setWindowTitle(
+            translate(u'SongsPlugin.OpenSongExportForm', u'OpenSong Song Exporter'))
+        self.ExportFileLabel.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Select OpenSong song folder:'))
+        self.ExportListLabel.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Full Song List'))
+        self.ExportListTable.horizontalHeaderItem(0).setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Song Title'))
+        self.ExportListTable.horizontalHeaderItem(1).setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Author'))
+        self.ExportSelectAllPushButton.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Select All'))
+        self.ExportFilterComboBox.setItemText(0, 
+            translate(u'SongsPlugin.OpenSongExportForm', u'Lyrics'))
+        self.ExportFilterComboBox.setItemText(1, 
+            translate(u'SongsPlugin.OpenSongExportForm', u'Title'))
+        self.ExportFilterComboBox.setItemText(2, 
+            translate(u'SongsPlugin.OpenSongExportForm', u'Author'))
+        self.SelectedListLabel.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Song Export List'))
+        self.SelectedListTable.horizontalHeaderItem(0).setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Song Title'))
+        self.SelectedListTable.horizontalHeaderItem(1).setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Author'))
+        self.SelectedSelectAllPushButton.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Select All'))
+        self.SelectedRemoveSelectedButton.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Remove Selected'))
+        self.ProgressGroupBox.setTitle(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Progress:'))
+        self.ProgressLabel.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Ready to export'))
+        self.ExportPushButton.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Export'))
+        self.ClosePushButton.setText(
+            translate(u'SongsPlugin.OpenSongExportForm', u'Close'))

=== modified file 'openlp/plugins/songs/forms/opensongimportdialog.py'
--- openlp/plugins/songs/forms/opensongimportdialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songs/forms/opensongimportdialog.py	2010-06-06 21:33:27 +0000
@@ -101,9 +101,15 @@
         QtCore.QMetaObject.connectSlotsByName(OpenSongImportDialog)
 
     def retranslateUi(self, OpenSongImportDialog):
-        OpenSongImportDialog.setWindowTitle(translate('OpenSongImportForm', 'OpenSong Song Importer'))
-        self.ImportFileLabel.setText(translate('OpenSongImportForm', 'OpenSong Folder:'))
-        self.ProgressGroupBox.setTitle(translate('OpenSongImportForm', 'Progress:'))
-        self.ProgressLabel.setText(translate('OpenSongImportForm', 'Ready to import'))
-        self.ImportPushButton.setText(translate('OpenSongImportForm', 'Import'))
-        self.ClosePushButton.setText(translate('OpenSongImportForm', 'Close'))
+        OpenSongImportDialog.setWindowTitle(
+            translate(u'SongsPlugin.OpenSongImportForm', u'OpenSong Song Importer'))
+        self.ImportFileLabel.setText(
+            translate(u'SongsPlugin.OpenSongImportForm', u'OpenSong Folder:'))
+        self.ProgressGroupBox.setTitle(
+            translate(u'SongsPlugin.OpenSongImportForm', u'Progress:'))
+        self.ProgressLabel.setText(
+            translate(u'SongsPlugin.OpenSongImportForm', u'Ready to import'))
+        self.ImportPushButton.setText(
+            translate(u'SongsPlugin.OpenSongImportForm', u'Import'))
+        self.ClosePushButton.setText(
+            translate(u'SongsPlugin.OpenSongImportForm', u'Close'))

=== modified file 'openlp/plugins/songs/forms/songbookdialog.py'
--- openlp/plugins/songs/forms/songbookdialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songs/forms/songbookdialog.py	2010-06-06 21:33:27 +0000
@@ -66,6 +66,8 @@
         QtCore.QMetaObject.connectSlotsByName(SongBookDialog)
 
     def retranslateUi(self, SongBookDialog):
-        SongBookDialog.setWindowTitle(translate('SongBookForm', 'Edit Book'))
-        self.NameLabel.setText(translate('SongBookForm', 'Name:'))
-        self.PublisherLabel.setText(translate('SongBookForm', 'Publisher:'))
+        SongBookDialog.setWindowTitle(
+            translate(u'SongsPlugin.SongBookForm', u'Edit Book'))
+        self.NameLabel.setText(translate(u'SongsPlugin.SongBookForm', u'Name:'))
+        self.PublisherLabel.setText(
+            translate(u'SongsPlugin.SongBookForm', u'Publisher:'))

=== modified file 'openlp/plugins/songs/forms/songbookform.py'
--- openlp/plugins/songs/forms/songbookform.py	2010-03-21 23:58:01 +0000
+++ openlp/plugins/songs/forms/songbookform.py	2010-06-06 21:33:27 +0000
@@ -25,8 +25,10 @@
 
 from PyQt4 import QtGui
 
+from openlp.core.lib import translate
 from openlp.plugins.songs.forms.songbookdialog import Ui_SongBookDialog
 
+
 class SongBookForm(QtGui.QDialog, Ui_SongBookDialog):
     """
     Class documentation goes here.
@@ -48,8 +50,9 @@
     def accept(self):
         if not self.NameEdit.text():
             QtGui.QMessageBox.critical(
-                self, self.trUtf8('Error'),
-                self.trUtf8('You need to type in a book name!'),
+                self, translate(u'SongsPlugin.SongBookForm', u'Error'),
+                translate(u'SongsPlugin.SongBookForm', 
+                    u'You need to type in a book name!'),
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
             self.NameEdit.setFocus()
             return False

=== modified file 'openlp/plugins/songs/forms/songimportform.py'
--- openlp/plugins/songs/forms/songimportform.py	2010-05-20 16:49:47 +0000
+++ openlp/plugins/songs/forms/songimportform.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 from PyQt4 import QtCore, QtGui
 
 from songimportwizard import Ui_SongImportWizard
-from openlp.core.lib import Receiver, SettingsManager
+from openlp.core.lib import Receiver, SettingsManager, translate
 #from openlp.core.utils import AppLocation, variant_to_unicode
 from openlp.plugins.songs.lib.manager import SongFormat
 
@@ -104,36 +104,43 @@
             if source_format == SongFormat.OpenLyrics:
                 if self.OpenLyricsFileListWidget.count() == 0:
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('No OpenLyrics Files Selected'),
-                        self.trUtf8('You need to add at least one OpenLyrics '
-                            'song file to import from.'),
+                        translate(u'SongsPlugin.SongImportForm',
+                            u'No OpenLyrics Files Selected'),
+                        translate(u'SongsPlugin.SongImportForm',
+                            u'You need to add at least one OpenLyrics '
+                            u'song file to import from.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.OpenLyricsAddButton.setFocus()
                     return False
             elif source_format == SongFormat.OpenSong:
                 if self.OpenSongFileListWidget.count() == 0:
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('No OpenSong Files Selected'),
-                        self.trUtf8('You need to add at least one OpenSong '
-                            'song file to import from.'),
+                        translate(u'SongsPlugin.SongImportForm',
+                            u'No OpenSong Files Selected'),
+                        translate(u'SongsPlugin.SongImportForm', 
+                            u'You need to add at least one OpenSong '
+                            u'song file to import from.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.OpenSongAddButton.setFocus()
                     return False
             elif source_format == SongFormat.CCLI:
                 if self.CCLIFileListWidget.count() == 0:
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('No CCLI Files Selected'),
-                        self.trUtf8('You need to add at least one CCLI file '
-                            'to import from.'),
+                        translate(u'SongsPlugin.SongImportForm', 
+                            u'No CCLI Files Selected'),
+                        translate(u'SongsPlugin.SongImportForm', 
+                            u'You need to add at least one CCLI file '
+                            u'to import from.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.CCLIAddButton.setFocus()
                     return False
             elif source_format == SongFormat.CSV:
                 if self.CSVFilenameEdit.text().isEmpty():
                     QtGui.QMessageBox.critical(self,
-                        self.trUtf8('No CSV File Selected'),
-                        self.trUtf8('You need to specify a CSV file to import '
-                            'from.'),
+                        translate(u'SongsPlugin.SongImportForm', 
+                            u'No CSV File Selected'),
+                        translate(u'SongsPlugin.SongImportForm', 
+                            u'You need to specify a CSV file to import from.'),
                         QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
                     self.CSVFilenameEdit.setFocus()
                     return False
@@ -184,7 +191,8 @@
         self.ImportProgressBar.setMinimum(0)
         self.ImportProgressBar.setMaximum(1188)
         self.ImportProgressBar.setValue(0)
-        self.ImportProgressLabel.setText(self.trUtf8('Starting import...'))
+        self.ImportProgressLabel.setText(
+            translate(u'SongsPlugin.SongImportForm', u'Starting import...'))
         Receiver.send_message(u'process_events')
 
     def performImport(self):
@@ -235,10 +243,10 @@
 #            self.manager.save_meta_data(license_version, license_version,
 #                license_copyright, license_permission)
 #            self.manager.reload_bibles()
-#            self.ImportProgressLabel.setText(self.trUtf8('Finished import.'))
+#            self.ImportProgressLabel.setText(translate(u'SongsPlugin.SongImportForm', u'Finished import.'))
 #        else:
 #            self.ImportProgressLabel.setText(
-#                self.trUtf8('Your Bible import failed.'))
+#                translate(u'SongsPlugin.SongImportForm', u'Your Bible import failed.'))
 #            importer.delete()
 
     def postImport(self):

=== modified file 'openlp/plugins/songs/forms/songimportwizard.py'
--- openlp/plugins/songs/forms/songimportwizard.py	2010-04-02 20:03:51 +0000
+++ openlp/plugins/songs/forms/songimportwizard.py	2010-06-06 21:33:27 +0000
@@ -25,6 +25,8 @@
 
 from PyQt4 import QtCore, QtGui
 
+from openlp.core.lib import translate
+
 class Ui_SongImportWizard(object):
     def setupUi(self, SongImportWizard):
         SongImportWizard.setObjectName(u'SongImportWizard')
@@ -224,32 +226,55 @@
         QtCore.QMetaObject.connectSlotsByName(SongImportWizard)
 
     def retranslateUi(self, SongImportWizard):
-        SongImportWizard.setWindowTitle(self.trUtf8('Song Import Wizard'))
+        SongImportWizard.setWindowTitle(
+            translate(u'SongsPlugin.SongImportWizard', u'Song Import Wizard'))
         self.TitleLabel.setText(
             '<span style="font-size:14pt; font-weight:600;">%s</span>' % \
-            self.trUtf8('Welcome to the Song Import Wizard'))
-        self.InformationLabel.setText(self.trUtf8('This wizard will help you '
-            'to import songs from a variety of formats. Click the next button '
-            'below to start the process by selecting a format to import from.'))
-        self.SourcePage.setTitle(self.trUtf8('Select Import Source'))
-        self.SourcePage.setSubTitle(self.trUtf8('Select the import format, '
-            'and where to import from.'))
-        self.FormatLabel.setText(self.trUtf8('Format:'))
-        self.FormatComboBox.setItemText(0, self.trUtf8('OpenLyrics'))
-        self.FormatComboBox.setItemText(1, self.trUtf8('OpenSong'))
-        self.FormatComboBox.setItemText(2, self.trUtf8('CCLI'))
-        self.FormatComboBox.setItemText(3, self.trUtf8('CSV'))
-        self.OpenLyricsAddButton.setText(self.trUtf8('Add Files...'))
-        self.OpenLyricsRemoveButton.setText(self.trUtf8('Remove File(s)'))
-        self.OpenSongAddButton.setText(self.trUtf8('Add Files...'))
-        self.OpenSongRemoveButton.setText(self.trUtf8('Remove File(s)'))
-        self.CCLIAddButton.setText(self.trUtf8('Add Files...'))
-        self.CCLIRemoveButton.setText(self.trUtf8('Remove File(s)'))
-        self.CSVFilenameLabel.setText(self.trUtf8('Filename:'))
-        self.CSVBrowseButton.setText(self.trUtf8('Browse...'))
-        self.ImportPage.setTitle(self.trUtf8('Importing'))
-        self.ImportPage.setSubTitle(self.trUtf8('Please wait while your songs '
-            'are imported.'))
-        self.ImportProgressLabel.setText(self.trUtf8('Ready.'))
-        self.ImportProgressBar.setFormat(self.trUtf8('%p%'))
+            translate(u'SongsPlugin.SongImportWizard',
+                u'Welcome to the Song Import Wizard'))
+        self.InformationLabel.setText(
+            translate(u'SongsPlugin.SongImportWizard',
+                u'This wizard will help you to import songs from a variety of '
+                u'formats. Click the next button below to start the process by '
+                u'selecting a format to import from.'))
+        self.SourcePage.setTitle(
+            translate(u'SongsPlugin.SongImportWizard', u'Select Import Source'))
+        self.SourcePage.setSubTitle(
+            translate(u'SongsPlugin.SongImportWizard',
+            u'Select the import format, and where to import from.'))
+        self.FormatLabel.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Format:'))
+        self.FormatComboBox.setItemText(0, 
+            translate(u'SongsPlugin.SongImportWizard', u'OpenLyrics'))
+        self.FormatComboBox.setItemText(1, 
+            translate(u'SongsPlugin.SongImportWizard', u'OpenSong'))
+        self.FormatComboBox.setItemText(2, 
+            translate(u'SongsPlugin.SongImportWizard', u'CCLI'))
+        self.FormatComboBox.setItemText(3, 
+            translate(u'SongsPlugin.SongImportWizard', u'CSV'))
+        self.OpenLyricsAddButton.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Add Files...'))
+        self.OpenLyricsRemoveButton.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Remove File(s)'))
+        self.OpenSongAddButton.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Add Files...'))
+        self.OpenSongRemoveButton.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Remove File(s)'))
+        self.CCLIAddButton.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Add Files...'))
+        self.CCLIRemoveButton.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Remove File(s)'))
+        self.CSVFilenameLabel.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Filename:'))
+        self.CSVBrowseButton.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Browse...'))
+        self.ImportPage.setTitle(
+            translate(u'SongsPlugin.SongImportWizard', u'Importing'))
+        self.ImportPage.setSubTitle(
+            translate(u'SongsPlugin.SongImportWizard',
+                u'Please wait while your songs are imported.'))
+        self.ImportProgressLabel.setText(
+            translate(u'SongsPlugin.SongImportWizard', u'Ready.'))
+        self.ImportProgressBar.setFormat(
+            translate(u'SongsPlugin.SongImportWizard', u'%p%'))
 

=== modified file 'openlp/plugins/songs/forms/songmaintenancedialog.py'
--- openlp/plugins/songs/forms/songmaintenancedialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songs/forms/songmaintenancedialog.py	2010-06-06 21:33:27 +0000
@@ -208,16 +208,29 @@
         QtCore.QMetaObject.connectSlotsByName(SongMaintenanceDialog)
 
     def retranslateUi(self, SongMaintenanceDialog):
-        SongMaintenanceDialog.setWindowTitle(translate('SongMaintenanceForm', 'Song Maintenance'))
-        self.TypeListWidget.item(0).setText(translate('SongMaintenanceForm', 'Authors'))
-        self.TypeListWidget.item(1).setText(translate('SongMaintenanceForm', 'Topics'))
-        self.TypeListWidget.item(2).setText(translate('SongMaintenanceForm', 'Books/Hymnals'))
-        self.AuthorAddButton.setText(translate('SongMaintenanceForm', 'Add'))
-        self.AuthorEditButton.setText(translate('SongMaintenanceForm', 'Edit'))
-        self.AuthorDeleteButton.setText(translate('SongMaintenanceForm', 'Delete'))
-        self.TopicAddButton.setText(translate('SongMaintenanceForm', 'Add'))
-        self.TopicEditButton.setText(translate('SongMaintenanceForm', 'Edit'))
-        self.TopicDeleteButton.setText(translate('SongMaintenanceForm', 'Delete'))
-        self.BookAddButton.setText(translate('SongMaintenanceForm', 'Add'))
-        self.BookEditButton.setText(translate('SongMaintenanceForm', 'Edit'))
-        self.BookDeleteButton.setText(translate('SongMaintenanceForm', 'Delete'))
+        SongMaintenanceDialog.setWindowTitle(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Song Maintenance'))
+        self.TypeListWidget.item(0).setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Authors'))
+        self.TypeListWidget.item(1).setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Topics'))
+        self.TypeListWidget.item(2).setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Books/Hymnals'))
+        self.AuthorAddButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Add'))
+        self.AuthorEditButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Edit'))
+        self.AuthorDeleteButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete'))
+        self.TopicAddButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Add'))
+        self.TopicEditButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Edit'))
+        self.TopicDeleteButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete'))
+        self.BookAddButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Add'))
+        self.BookEditButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Edit'))
+        self.BookDeleteButton.setText(
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete'))

=== modified file 'openlp/plugins/songs/forms/songmaintenanceform.py'
--- openlp/plugins/songs/forms/songmaintenanceform.py	2010-06-02 15:33:55 +0000
+++ openlp/plugins/songs/forms/songmaintenanceform.py	2010-06-06 21:33:27 +0000
@@ -30,6 +30,7 @@
 from authorsform import AuthorsForm
 from topicsform import TopicsForm
 from songbookform import SongBookForm
+from openlp.core.lib import translate
 
 class SongMaintenanceForm(QtGui.QDialog, Ui_SongMaintenanceDialog):
     """
@@ -136,8 +137,10 @@
                 self.resetAuthors()
             else:
                 QtGui.QMessageBox.critical(
-                    self, self.trUtf8('Error'),
-                    self.trUtf8('Couldn\'t add your author.'))
+                    self, translate(u'SongsPlugin.SongMaintenanceForm', 
+                        u'Error'),
+                    translate(u'SongsPlugin.SongMaintenanceForm', 
+                        u'Couldn\'t add your author.'))
 
     def onTopicAddButtonClick(self):
         if self.topicform.exec_():
@@ -146,8 +149,10 @@
                 self.resetTopics()
             else:
                 QtGui.QMessageBox.critical(
-                    self, self.trUtf8('Error'),
-                    self.trUtf8('Couldn\'t add your topic.'))
+                    self, translate(u'SongsPlugin.SongMaintenanceForm', 
+                        u'Error'),
+                    translate(u'SongsPlugin.SongMaintenanceForm', 
+                        u'Couldn\'t add your topic.'))
 
     def onBookAddButtonClick(self):
         if self.bookform.exec_():
@@ -158,8 +163,10 @@
                 self.resetBooks()
             else:
                 QtGui.QMessageBox.critical(
-                    self, self.trUtf8('Error'),
-                    self.trUtf8('Couldn\'t add your book.'))
+                    self, translate(u'SongsPlugin.SongMaintenanceForm', 
+                        u'Error'),
+                    translate(u'SongsPlugin.SongMaintenanceForm',
+                        u'Couldn\'t add your book.'))
 
     def onAuthorEditButtonClick(self):
         author_id = self._getCurrentItemId(self.AuthorsListWidget)
@@ -179,8 +186,10 @@
                     self.resetAuthors()
                 else:
                     QtGui.QMessageBox.critical(
-                        self, self.trUtf8('Error'),
-                        self.trUtf8('Couldn\'t save your author.'))
+                        self, translate(u'SongsPlugin.SongMaintenanceForm', 
+                            u'Error'),
+                        translate(u'SongsPlugin.SongMaintenanceForm', 
+                            u'Couldn\'t save your author.'))
 
     def onTopicEditButtonClick(self):
         topic_id = self._getCurrentItemId(self.TopicsListWidget)
@@ -193,8 +202,10 @@
                     self.resetTopics()
                 else:
                     QtGui.QMessageBox.critical(
-                        self, self.trUtf8('Error'),
-                        self.trUtf8('Couldn\'t save your topic.'))
+                        self, translate(u'SongsPlugin.SongMaintenanceForm', 
+                            u'Error'),
+                        translate(u'SongsPlugin.SongMaintenanceForm', 
+                            u'Couldn\'t save your topic.'))
 
     def onBookEditButtonClick(self):
         book_id = self._getCurrentItemId(self.BooksListWidget)
@@ -209,8 +220,10 @@
                     self.resetBooks()
                 else:
                     QtGui.QMessageBox.critical(
-                        self, self.trUtf8('Error'),
-                        self.trUtf8('Couldn\'t save your book.'))
+                        self, translate(u'SongsPlugin.SongMaintenanceForm', 
+                            u'Error'),
+                        translate(u'SongsPlugin.SongMaintenanceForm', 
+                            u'Couldn\'t save your book.'))
 
     def onAuthorDeleteButtonClick(self):
         """
@@ -219,11 +232,13 @@
         self._deleteItem(
             self.AuthorsListWidget, self.songmanager.get_author,
             self.songmanager.delete_author, self.resetAuthors,
-            self.trUtf8('Delete Author'),
-            self.trUtf8('Are you sure you want to delete the selected author?'),
-            self.trUtf8('This author can\'t be deleted, they are currently '
-                'assigned to at least one song.'),
-            self.trUtf8('No author selected!'))
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete Author'),
+            translate(u'SongsPlugin.SongMaintenanceForm', 
+                u'Are you sure you want to delete the selected author?'),
+            translate(u'SongsPlugin.SongMaintenanceForm',
+                u'This author can\'t be deleted, they are currently '
+                u'assigned to at least one song.'),
+            translate(u'SongsPlugin.SongMaintenanceForm', u'No author selected!'))
 
     def onTopicDeleteButtonClick(self):
         """
@@ -232,11 +247,13 @@
         self._deleteItem(
             self.TopicsListWidget, self.songmanager.get_topic,
             self.songmanager.delete_topic, self.resetTopics,
-            self.trUtf8('Delete Topic'),
-            self.trUtf8('Are you sure you want to delete the selected topic?'),
-            self.trUtf8('This topic can\'t be deleted, it is currently '
-                'assigned to at least one song.'),
-            self.trUtf8('No topic selected!'))
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete Topic'),
+            translate(u'SongsPlugin.SongMaintenanceForm', 
+                u'Are you sure you want to delete the selected topic?'),
+            translate(u'SongsPlugin.SongMaintenanceForm', 
+                u'This topic can\'t be deleted, it is currently '
+                u'assigned to at least one song.'),
+            translate(u'SongsPlugin.SongMaintenanceForm', u'No topic selected!'))
 
     def onBookDeleteButtonClick(self):
         """
@@ -245,8 +262,10 @@
         self._deleteItem(
             self.BooksListWidget, self.songmanager.get_book,
             self.songmanager.delete_book, self.resetBooks,
-            self.trUtf8('Delete Book'),
-            self.trUtf8('Are you sure you want to delete the selected book?'),
-            self.trUtf8('This book can\'t be deleted, it is currently '
-                'assigned to at least one song.'),
-            self.trUtf8('No book selected!'))
+            translate(u'SongsPlugin.SongMaintenanceForm', u'Delete Book'),
+            translate(u'SongsPlugin.SongMaintenanceForm',
+                u'Are you sure you want to delete the selected book?'),
+            translate(u'SongsPlugin.SongMaintenanceForm', 
+                u'This book can\'t be deleted, it is currently '
+                u'assigned to at least one song.'),
+            translate(u'SongsPlugin.SongMaintenanceForm', u'No book selected!'))

=== modified file 'openlp/plugins/songs/forms/topicsdialog.py'
--- openlp/plugins/songs/forms/topicsdialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songs/forms/topicsdialog.py	2010-06-06 21:33:27 +0000
@@ -60,5 +60,7 @@
         QtCore.QMetaObject.connectSlotsByName(TopicsDialog)
 
     def retranslateUi(self, TopicsDialog):
-        TopicsDialog.setWindowTitle(translate('TopicsForm', 'Topic Maintenance'))
-        self.NameLabel.setText(translate('TopicsForm', 'Topic name:'))
+        TopicsDialog.setWindowTitle(
+            translate(u'SongsPlugin.TopicsForm', u'Topic Maintenance'))
+        self.NameLabel.setText(
+            translate(u'SongsPlugin.TopicsForm', u'Topic name:'))

=== modified file 'openlp/plugins/songs/forms/topicsform.py'
--- openlp/plugins/songs/forms/topicsform.py	2010-03-21 23:58:01 +0000
+++ openlp/plugins/songs/forms/topicsform.py	2010-06-06 21:33:27 +0000
@@ -25,8 +25,10 @@
 
 from PyQt4 import QtGui
 
+from openlp.core.lib import translate
 from openlp.plugins.songs.forms.topicsdialog import Ui_TopicsDialog
 
+
 class TopicsForm(QtGui.QDialog, Ui_TopicsDialog):
     """
     Class documentation goes here.
@@ -47,8 +49,9 @@
     def accept(self):
         if not self.NameEdit.text():
             QtGui.QMessageBox.critical(
-                self, self.trUtf8('Error'),
-                self.trUtf8('You need to type in a topic name!'),
+                self, translate(u'SongsPlugin.TopicsForm', u'Error'),
+                translate(u'SongsPlugin.TopicsForm',
+                u'You need to type in a topic name!'),
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok))
             self.NameEdit.setFocus()
             return False

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2010-06-06 16:25:39 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, SongXMLParser, \
-    BaseListWithDnD, Receiver, ItemCapabilities
+    BaseListWithDnD, Receiver, ItemCapabilities, translate
 from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm, \
     ImportWizardForm
 
@@ -60,7 +60,7 @@
         self.remoteSong = -1
 
     def initPluginNameVisible(self):
-        self.PluginNameVisible = self.trUtf8('Song')
+        self.PluginNameVisible = translate(u'SongsPlugin.MediaItem', u'Song')
 
     def requiredIcons(self):
         MediaManagerItem.requiredIcons(self)
@@ -69,8 +69,10 @@
     def addEndHeaderBar(self):
         self.addToolbarSeparator()
         ## Song Maintenance Button ##
-        self.addToolbarButton(self.trUtf8('Song Maintenance'),
-            self.trUtf8('Maintain the lists of authors, topics and books'),
+        self.addToolbarButton(
+            translate(u'SongsPlugin.MediaItem', u'Song Maintenance'),
+            translate(u'SongsPlugin.MediaItem',
+            u'Maintain the lists of authors, topics and books'),
             ':/songs/song_maintenance.png', self.onSongMaintenanceClick)
         self.PageLayout.setSpacing(4)
         self.SearchLayout = QtGui.QFormLayout()
@@ -139,15 +141,22 @@
             QtCore.QVariant(u'False')).toBool()
 
     def retranslateUi(self):
-        self.SearchTextLabel.setText(self.trUtf8('Search:'))
-        self.SearchTypeLabel.setText(self.trUtf8('Type:'))
-        self.ClearTextButton.setText(self.trUtf8('Clear'))
-        self.SearchTextButton.setText(self.trUtf8('Search'))
+        self.SearchTextLabel.setText(
+            translate(u'SongsPlugin.MediaItem', u'Search:'))
+        self.SearchTypeLabel.setText(
+            translate(u'SongsPlugin.MediaItem', u'Type:'))
+        self.ClearTextButton.setText(
+            translate(u'SongsPlugin.MediaItem', u'Clear'))
+        self.SearchTextButton.setText(
+            translate(u'SongsPlugin.MediaItem', u'Search'))
 
     def initialise(self):
-        self.SearchTypeComboBox.addItem(self.trUtf8('Titles'))
-        self.SearchTypeComboBox.addItem(self.trUtf8('Lyrics'))
-        self.SearchTypeComboBox.addItem(self.trUtf8('Authors'))
+        self.SearchTypeComboBox.addItem(
+            translate(u'SongsPlugin.MediaItem', u'Titles'))
+        self.SearchTypeComboBox.addItem(
+            translate(u'SongsPlugin.MediaItem', u'Lyrics'))
+        self.SearchTypeComboBox.addItem(
+            translate(u'SongsPlugin.MediaItem', u'Authors'))
         self.configUpdated()
 
     def onSearchTextButtonClick(self):
@@ -198,8 +207,14 @@
         self.ListView.clear()
         for author in searchresults:
             for song in author.songs:
+<<<<<<< TREE
                 song_detail = unicode(self.trUtf8('%s (%s)') %
                     (author.display_name, song.title))
+=======
+                song_detail = unicode(
+                    translate(u'SongsPlugin.MediaItem', u'%s (%s)' % \
+                    (unicode(author.display_name), unicode(song.title))))
+>>>>>>> MERGE-SOURCE
                 song_name = QtGui.QListWidgetItem(song_detail)
                 song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
                 self.ListView.addItem(song_name)
@@ -276,12 +291,15 @@
         items = self.ListView.selectedIndexes()
         if items:
             if len(items) == 1:
-                del_message = self.trUtf8('Delete song?')
+                del_message = translate(u'SongsPlugin.MediaItem',
+                    u'Delete song?')
             else:
                 del_message = unicode(
-                    self.trUtf8('Delete %d songs?')) % len(items)
+                    translate(u'SongsPlugin.MediaItem',
+                        u'Delete %d songs?'))  % len(items)
             ans = QtGui.QMessageBox.question(self,
-                self.trUtf8('Delete Confirmation'), del_message,
+                translate(u'SongsPlugin.MediaItem', u'Delete Confirmation'),
+                del_message,
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok|
                      QtGui.QMessageBox.Cancel),
                 QtGui.QMessageBox.Ok)
@@ -353,7 +371,7 @@
         raw_footer.append(author_list)
         raw_footer.append(song.copyright )
         raw_footer.append(unicode(
-            self.trUtf8('CCLI Licence: ') + ccli))
+            translate(u'SongsPlugin.MediaItem', u'CCLI Licence: ') + ccli))
         service_item.raw_footer = raw_footer
         service_item.audit = [
             song.title, author_audit, song.copyright, song.ccli_number

=== modified file 'openlp/plugins/songs/lib/songimport.py'
--- openlp/plugins/songs/lib/songimport.py	2010-06-06 07:28:07 +0000
+++ openlp/plugins/songs/lib/songimport.py	2010-06-06 21:33:27 +0000
@@ -64,9 +64,9 @@
         self.versecount = 0
         self.choruscount = 0
         self.copyright_string = unicode(QtGui.QApplication.translate( \
-            u'SongImport', u'copyright'))
+            u'SongsPlugin.SongImport', u'copyright'))
         self.copyright_symbol = unicode(QtGui.QApplication.translate( \
-            u'SongImport', u'©'))
+            u'SongsPlugin.SongImport', u'©'))
 
     @staticmethod
     def process_songs_text(manager, text):

=== modified file 'openlp/plugins/songs/lib/songstab.py'
--- openlp/plugins/songs/lib/songstab.py	2010-04-30 22:38:15 +0000
+++ openlp/plugins/songs/lib/songstab.py	2010-06-06 21:33:27 +0000
@@ -25,7 +25,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsTab
+from openlp.core.lib import SettingsTab, translate
 
 class SongsTab(SettingsTab):
     """
@@ -36,7 +36,7 @@
 
     def setupUi(self):
         self.setObjectName(u'SongsTab')
-        self.tabTitleVisible = self.trUtf8('Songs')
+        self.tabTitleVisible = translate(u'SongsPlugin.SongsTab', u'Songs')
         self.SongsLayout = QtGui.QFormLayout(self)
         self.SongsLayout.setObjectName(u'SongsLayout')
         self.SongsModeGroupBox = QtGui.QGroupBox(self)
@@ -61,11 +61,12 @@
             self.SongBarActiveCheckBoxChanged)
 
     def retranslateUi(self):
-        self.SongsModeGroupBox.setTitle(self.trUtf8('Songs Mode'))
+        self.SongsModeGroupBox.setTitle(
+            translate(u'SongsPlugin.SongsTab', u'Songs Mode'))
         self.SearchAsTypeCheckBox.setText(
-            self.trUtf8('Enable search as you type'))
+            translate(u'SongsPlugin.SongsTab', u'Enable search as you type'))
         self.SongBarActiveCheckBox.setText(
-            self.trUtf8('Display Verses on Live Tool bar'))
+            translate(u'SongsPlugin.SongsTab', u'Display Verses on Live Tool bar'))
 
     def onSearchAsTypeCheckBoxChanged(self, check_state):
         self.song_search = False

=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py	2010-05-18 21:32:58 +0000
+++ openlp/plugins/songs/songsplugin.py	2010-06-06 21:33:27 +0000
@@ -27,7 +27,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, build_icon, PluginStatus, Receiver
+from openlp.core.lib import Plugin, build_icon, PluginStatus, Receiver, translate
 from openlp.plugins.songs.lib import SongManager, SongMediaItem, SongsTab, \
     SofImport, OooImport
 
@@ -150,7 +150,8 @@
 
     def onImportSofItemClick(self):
         filenames = QtGui.QFileDialog.getOpenFileNames(
-            None, self.trUtf8('Open Songs of Fellowship file'),
+            None, translate(u'SongsPlugin.Songsplugin',
+                u'Open Songs of Fellowship file'),
             u'', u'Songs of Fellowship file (*.rtf *.RTF)')
         try:
             for filename in filenames:
@@ -170,15 +171,17 @@
 
     def onImportOooItemClick(self):
         filenames = QtGui.QFileDialog.getOpenFileNames(
-            None, self.trUtf8('Open documents or presentations'),
+            None, translate(u'SongsPlugin.Songsplugin',
+            u'Open documents or presentations'),
             u'', u'All Files(*.*)')
         oooimport = OooImport(self.manager)        
         oooimport.import_docs(filenames)
         Receiver.send_message(u'songs_load_list')
 
     def about(self):
-        about_text = self.trUtf8('<strong>Song Plugin</strong><br />'
-            'This plugin allows songs to be managed and displayed.')
+        about_text = translate(u'SongsPlugin.Songsplugin',
+            u'<strong>Song Plugin</strong><br />'
+            u'This plugin allows songs to be managed and displayed.')
         return about_text
 
     def can_delete_theme(self, theme):

=== modified file 'openlp/plugins/songusage/forms/songusagedeletedialog.py'
--- openlp/plugins/songusage/forms/songusagedeletedialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songusage/forms/songusagedeletedialog.py	2010-06-06 21:33:27 +0000
@@ -58,4 +58,5 @@
         QtCore.QMetaObject.connectSlotsByName(SongUsageDeleteDialog)
 
     def retranslateUi(self, SongUsageDeleteDialog):
-        SongUsageDeleteDialog.setWindowTitle(translate('AuditDeleteDialog', 'Song Usage Delete'))
+        SongUsageDeleteDialog.setWindowTitle(
+            translate(u'SongsPlugin.AuditDeleteDialog', u'Song Usage Delete'))

=== modified file 'openlp/plugins/songusage/forms/songusagedeleteform.py'
--- openlp/plugins/songusage/forms/songusagedeleteform.py	2010-03-21 23:58:01 +0000
+++ openlp/plugins/songusage/forms/songusagedeleteform.py	2010-06-06 21:33:27 +0000
@@ -26,6 +26,7 @@
 from PyQt4 import QtGui
 
 from songusagedeletedialog import Ui_SongUsageDeleteDialog
+from openlp.core.lib import translate
 
 class SongUsageDeleteForm(QtGui.QDialog, Ui_SongUsageDeleteDialog):
     """
@@ -41,8 +42,10 @@
 
     def accept(self):
         ret = QtGui.QMessageBox.question(self,
-            self.trUtf8('Delete Selected Song Usage Events?'),
-            self.trUtf8('Are you sure you want to delete selected Song Usage data?'),
+            translate(u'SongsPlugin.SongUsageDeleteForm',
+                u'Delete Selected Song Usage Events?'),
+            translate(u'SongsPlugin.SongUsageDeleteForm',
+                u'Are you sure you want to delete selected Song Usage data?'),
             QtGui.QMessageBox.StandardButtons(
                 QtGui.QMessageBox.Ok |
                 QtGui.QMessageBox.Cancel),

=== modified file 'openlp/plugins/songusage/forms/songusagedetaildialog.py'
--- openlp/plugins/songusage/forms/songusagedetaildialog.py	2010-05-01 19:45:06 +0000
+++ openlp/plugins/songusage/forms/songusagedetaildialog.py	2010-06-06 21:33:27 +0000
@@ -87,7 +87,12 @@
         QtCore.QMetaObject.connectSlotsByName(SongUsageDetailDialog)
 
     def retranslateUi(self, SongUsageDetailDialog):
-        SongUsageDetailDialog.setWindowTitle(translate('AuditDetailDialog', 'Song Usage Extraction'))
-        self.DateRangeGroupBox.setTitle(translate('AuditDetailDialog', 'Select Date Range'))
-        self.ToLabel.setText(translate('AuditDetailDialog', 'to'))
-        self.FileGroupBox.setTitle(translate('AuditDetailDialog', 'Report Location'))
+        SongUsageDetailDialog.setWindowTitle(
+            translate(u'SongsPlugin.AuditDetailDialog',
+            u'Song Usage Extraction'))
+        self.DateRangeGroupBox.setTitle(
+            translate(u'SongsPlugin.AuditDetailDialog', u'Select Date Range'))
+        self.ToLabel.setText(
+            translate(u'SongsPlugin.AuditDetailDialog', u'to'))
+        self.FileGroupBox.setTitle(
+            translate(u'SongsPlugin.AuditDetailDialog', u'Report Location'))

=== modified file 'openlp/plugins/songusage/forms/songusagedetailform.py'
--- openlp/plugins/songusage/forms/songusagedetailform.py	2010-05-29 19:50:50 +0000
+++ openlp/plugins/songusage/forms/songusagedetailform.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import SettingsManager
+from openlp.core.lib import SettingsManager, translate
 
 from songusagedetaildialog import Ui_SongUsageDetailDialog
 
@@ -61,7 +61,8 @@
 
     def defineOutputLocation(self):
         path = QtGui.QFileDialog.getExistingDirectory(self,
-            self.trUtf8('Output File Location'),
+            translate(u'SongsPlugin.SongUsageDetailForm',
+                u'Output File Location'),
             SettingsManager.get_last_dir(self.parent.settingsSection, 1))
         path = unicode(path)
         if path != u'':

=== modified file 'openlp/plugins/songusage/songusageplugin.py'
--- openlp/plugins/songusage/songusageplugin.py	2010-05-01 08:46:06 +0000
+++ openlp/plugins/songusage/songusageplugin.py	2010-06-06 21:33:27 +0000
@@ -28,7 +28,7 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import Plugin, Receiver, build_icon
+from openlp.core.lib import Plugin, Receiver, build_icon, translate
 from openlp.plugins.songusage.lib import SongUsageManager
 from openlp.plugins.songusage.forms import SongUsageDetailForm, \
     SongUsageDeleteForm
@@ -156,7 +156,8 @@
         self.SongUsagedetailform.exec_()
 
     def about(self):
-        about_text = self.trUtf8('<b>SongUsage Plugin</b><br>This plugin '
-            'records the use of songs and when they have been used during '
-            'a live service')
+        about_text = translate(u'SongsPlugin.SongUsagePlugin',
+            u'<b>SongUsage Plugin</b><br>This plugin '
+            u'records the use of songs and when they have been used during '
+            u'a live service')
         return about_text


Follow ups