← Back to team overview

openlp-core team mailing list archive

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

 

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

Requested reviews:
  OpenLP Core (openlp-core)
Related bugs:
  Bug #802166 in OpenLP: "Allow different scripture notations"
  https://bugs.launchpad.net/openlp/+bug/802166

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

Displayed listed items are shown more natural type (Jack, René and Maria).

Displaying names in localized lists is possible by QLocale::createSeparatedList(QStringList). As this function is introduced in Qt 4.8 we will not be able to use it in near future. Therefore I implemented the routine by myself according to http://www.unicode.org/reports/tr35/#ListPatterns . I put this information in the function description, that we know about the fact, that we can replace it later with Qts function. This will save four strings for our translators.

The use of Qt 4.8 is untested. Can someone please try it. It is available for development branches of Fedora, openSUSE, Arch, Ubuntu, and others.
-- 
https://code.launchpad.net/~m2j/openlp/i18n/+merge/93633
Your team OpenLP Core is requested to review the proposed merge of lp:~m2j/openlp/i18n into lp:openlp.
=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py	2012-01-29 22:13:51 +0000
+++ openlp/core/lib/__init__.py	2012-02-17 18:57:25 +0000
@@ -32,7 +32,7 @@
 import os.path
 import types
 
-from PyQt4 import QtCore, QtGui
+from PyQt4 import QtCore, QtGui, Qt
 
 log = logging.getLogger(__name__)
 
@@ -318,6 +318,34 @@
     except IOError:
         pass
 
+def create_separated_list(stringlist):
+    """
+    Returns a string that represents a join of a list of strings with a
+    localized separator. This function corresponts to
+    QLocale::createSeparatedList which was introduced in Qt 4.8 and implements
+    the algorithm from http://www.unicode.org/reports/tr35/#ListPatterns
+
+    ``stringlist``
+        List of unicode strings
+    """
+    if Qt.qVersion() >= u'4.8':
+        return unicode(QtCore.QLocale.createSeparatedList(stringlist))
+    if not stringlist:
+        return u''
+    elif len(stringlist) == 1:
+        return stringlist[0]
+    elif len(stringlist) == 2:
+        return unicode(translate('OpenLP.core.lib', '%1 and %2',
+            'Locale list separator: 2 items').arg(stringlist[0], stringlist[1]))
+    else:
+        merged = unicode(translate('OpenLP.core.lib', '%1, and %2',
+            u'Locale list separator: end').arg(stringlist[-2], stringlist[-1]))
+        for index in reversed(range(1, len(stringlist) - 2)):
+            merged = unicode(translate('OpenLP.core.lib', '%1, %2',
+            u'Locale list separator: middle').arg(stringlist[index], merged))
+        return unicode(translate('OpenLP.core.lib', '%1, %2',
+            u'Locale list separator: start').arg(stringlist[0], merged))
+
 from eventreceiver import Receiver
 from listwidgetwithdnd import ListWidgetWithDnD
 from formattingtags import FormattingTags

=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py	2012-01-18 17:52:48 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py	2012-02-17 18:57:25 +0000
@@ -31,7 +31,7 @@
 from PyQt4 import QtCore, QtGui
 
 from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \
-    translate
+    translate, create_separated_list
 from openlp.core.lib.searchedit import SearchEdit
 from openlp.core.lib.ui import UiStrings, add_widget_completer, \
     media_item_combo_box, critical_error_message_box, \
@@ -868,7 +868,7 @@
         service_item.add_capability(ItemCapabilities.CanLoop)
         service_item.add_capability(ItemCapabilities.CanWordSplit)
         # Service Item: Title
-        service_item.title = u', '.join(raw_title)
+        service_item.title = create_separated_list(raw_title)
         # Service Item: Theme
         if len(self.settings.bible_theme) == 0:
             service_item.theme = None

=== modified file 'openlp/plugins/songs/forms/editsongform.py'
--- openlp/plugins/songs/forms/editsongform.py	2011-12-27 10:33:55 +0000
+++ openlp/plugins/songs/forms/editsongform.py	2012-02-17 18:57:25 +0000
@@ -32,7 +32,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import PluginStatus, Receiver, MediaType, translate
+from openlp.core.lib import PluginStatus, Receiver, MediaType, translate, \
+    create_separated_list
 from openlp.core.lib.ui import UiStrings, add_widget_completer, \
     critical_error_message_box, find_and_set_in_combo_box
 from openlp.core.utils import AppLocation
@@ -633,7 +634,7 @@
                         VerseType.translated_tag(verse[0]), verse[1:]))
             for count, item in enumerate(order):
                 if item not in verses:
-                    valid = u', '.join(verse_names)
+                    valid = create_separated_list(verse_names)
                     critical_error_message_box(
                         message=unicode(translate('SongsPlugin.EditSongForm',
                         'The verse order is invalid. There is no verse '

=== modified file 'openlp/plugins/songs/forms/songexportform.py'
--- openlp/plugins/songs/forms/songexportform.py	2012-01-18 13:50:06 +0000
+++ openlp/plugins/songs/forms/songexportform.py	2012-02-17 18:57:25 +0000
@@ -33,7 +33,8 @@
 
 from PyQt4 import QtCore, QtGui
 
-from openlp.core.lib import build_icon, Receiver, SettingsManager, translate
+from openlp.core.lib import build_icon, Receiver, SettingsManager, translate, \
+    create_separated_list
 from openlp.core.lib.ui import UiStrings, critical_error_message_box
 from openlp.core.ui.wizard import OpenLPWizard, WizardStrings
 from openlp.plugins.songs.lib.db import Song
@@ -255,7 +256,7 @@
             # No need to export temporary songs.
             if song.temporary:
                 continue
-            authors = u', '.join([author.display_name
+            authors = create_separated_list([author.display_name
                 for author in song.authors])
             title = u'%s (%s)' % (unicode(song.title), authors)
             item = QtGui.QListWidgetItem(title)

=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py	2012-01-18 13:50:06 +0000
+++ openlp/plugins/songs/lib/mediaitem.py	2012-02-17 18:57:25 +0000
@@ -35,7 +35,7 @@
 from sqlalchemy.sql import or_
 
 from openlp.core.lib import MediaManagerItem, Receiver, ItemCapabilities, \
-    translate, check_item_selected, PluginStatus
+    translate, check_item_selected, PluginStatus, create_separated_list
 from openlp.core.lib.ui import UiStrings, context_menu_action, \
     context_menu_separator
 from openlp.core.utils import AppLocation
@@ -247,7 +247,8 @@
                 continue
             author_list = [author.display_name for author in song.authors]
             song_title = unicode(song.title)
-            song_detail = u'%s (%s)' % (song_title, u', '.join(author_list))
+            song_detail = u'%s (%s)' % (song_title,
+                create_separated_list(author_list))
             song_name = QtGui.QListWidgetItem(song_detail)
             song_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(song.id))
             self.listView.addItem(song_name)
@@ -469,7 +470,7 @@
         service_item.title = song.title
         author_list = [unicode(author.display_name) for author in song.authors]
         service_item.raw_footer.append(song.title)
-        service_item.raw_footer.append(u', '.join(author_list))
+        service_item.raw_footer.append(create_separated_list(author_list))
         service_item.raw_footer.append(song.copyright)
         if QtCore.QSettings().value(u'general/ccli number',
             QtCore.QVariant(u'')).toString():


Follow ups