]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Add format_list function 269/head
authorMichael Birtwell <michael.birtwell@starleaf.com>
Thu, 1 Oct 2015 13:38:58 +0000 (14:38 +0100)
committerMichael Birtwell <michael.birtwell@starleaf.com>
Tue, 13 Oct 2015 13:54:03 +0000 (14:54 +0100)
babel/lists.py [new file with mode: 0644]
tests/test_lists.py [new file with mode: 0644]

diff --git a/babel/lists.py b/babel/lists.py
new file mode 100644 (file)
index 0000000..6e6fbd1
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+"""
+    babel.lists
+    ~~~~~~~~~~~
+
+    Locale dependent formatting of lists.
+
+    The default locale for the functions in this module is determined by the
+    following environment variables, in that order:
+
+     * ``LC_ALL``, and
+     * ``LANG``
+
+    :copyright: (c) 2015 by the Babel Team.
+    :license: BSD, see LICENSE for more details.
+"""
+
+from babel.core import Locale, default_locale
+
+DEFAULT_LOCALE = default_locale()
+
+
+def format_list(lst, locale=DEFAULT_LOCALE):
+    """ Formats `lst` as a list
+
+    e.g.
+    >>> format_list(['apples', 'oranges', 'pears'], 'en')
+    u'apples, oranges, and pears'
+    >>> format_list(['apples', 'oranges', 'pears'], 'zh')
+    u'apples\u3001oranges\u548cpears'
+
+    :param lst: a sequence of items to format in to a list
+    :param locale: the locale
+    """
+    locale = Locale.parse(locale)
+    if not lst:
+        return ''
+    if len(lst) == 1:
+        return lst[0]
+    if len(lst) == 2:
+        return locale.list_patterns['2'].format(*lst)
+
+    result = locale.list_patterns['start'].format(lst[0], lst[1])
+    for elem in lst[2:-1]:
+        result = locale.list_patterns['middle'].format(result, elem)
+    result = locale.list_patterns['end'].format(result, lst[-1])
+
+    return result
diff --git a/tests/test_lists.py b/tests/test_lists.py
new file mode 100644 (file)
index 0000000..f5021ea
--- /dev/null
@@ -0,0 +1,14 @@
+# coding=utf-8
+from babel import lists
+
+
+def test_format_list():
+    for list, locale, expected in [
+        ([], 'en', ''),
+        ([u'string'], 'en', u'string'),
+        (['string1', 'string2'], 'en', u'string1 and string2'),
+        (['string1', 'string2', 'string3'], 'en', u'string1, string2, and string3'),
+        (['string1', 'string2', 'string3'], 'zh', u'string1、string2和string3'),
+        (['string1', 'string2', 'string3', 'string4'], 'ne', u'string1 र string2, string3 र string4'),
+    ]:
+        assert lists.format_list(list, locale=locale) == expected