[Python-modules-commits] [django-recurrence] 01/01: New upstream version 1.5.0

Michael Fladischer fladi at moszumanska.debian.org
Tue Oct 31 08:04:28 UTC 2017


This is an automated email from the git hooks/post-receive script.

fladi pushed a commit to branch upstream
in repository django-recurrence.

commit 022d3b8069b62eb76ae4c44d58997804cbec747d
Author: Michael Fladischer <FladischerMichael at fladi.at>
Date:   Tue Oct 31 08:22:28 2017 +0100

    New upstream version 1.5.0
---
 PKG-INFO                                           |   2 +-
 django_recurrence.egg-info/PKG-INFO                |   2 +-
 django_recurrence.egg-info/SOURCES.txt             |   4 +
 docs/changelog.rst                                 |  16 +
 docs/conf.py                                       |   4 +-
 docs/installation.rst                              |   5 +-
 docs/usage/recurrence_field.rst                    |  36 ++
 recurrence/base.py                                 |  55 ++-
 recurrence/fields.py                               |   6 +-
 recurrence/locale/de/LC_MESSAGES/django.mo         | Bin 4385 -> 4442 bytes
 recurrence/locale/de/LC_MESSAGES/django.po         | 247 +++++-----
 recurrence/locale/de/LC_MESSAGES/djangojs.mo       | Bin 4822 -> 5375 bytes
 recurrence/locale/de/LC_MESSAGES/djangojs.po       | 301 +++++++-----
 recurrence/locale/en/LC_MESSAGES/django.mo         | Bin 367 -> 378 bytes
 recurrence/locale/en/LC_MESSAGES/django.po         | 215 +++++----
 recurrence/locale/en/LC_MESSAGES/djangojs.mo       | Bin 367 -> 378 bytes
 recurrence/locale/en/LC_MESSAGES/djangojs.po       | 299 +++++++-----
 recurrence/locale/es/LC_MESSAGES/django.mo         | Bin 4454 -> 4537 bytes
 recurrence/locale/es/LC_MESSAGES/django.po         | 238 ++++-----
 recurrence/locale/es/LC_MESSAGES/djangojs.mo       | Bin 4365 -> 4967 bytes
 recurrence/locale/es/LC_MESSAGES/djangojs.po       | 312 +++++++-----
 recurrence/locale/eu/LC_MESSAGES/django.mo         | Bin 4161 -> 4160 bytes
 recurrence/locale/eu/LC_MESSAGES/django.po         | 144 ++++--
 recurrence/locale/eu/LC_MESSAGES/djangojs.mo       | Bin 5187 -> 5187 bytes
 recurrence/locale/eu/LC_MESSAGES/djangojs.po       | 306 +++++++-----
 recurrence/locale/fr/LC_MESSAGES/django.mo         | Bin 4359 -> 4705 bytes
 recurrence/locale/fr/LC_MESSAGES/django.po         | 133 +++--
 recurrence/locale/fr/LC_MESSAGES/djangojs.mo       | Bin 5249 -> 5579 bytes
 recurrence/locale/fr/LC_MESSAGES/djangojs.po       | 293 ++++++-----
 recurrence/locale/nl/LC_MESSAGES/django.mo         | Bin 4467 -> 4544 bytes
 recurrence/locale/nl/LC_MESSAGES/django.po         | 239 ++++-----
 recurrence/locale/nl/LC_MESSAGES/djangojs.mo       | Bin 4793 -> 5342 bytes
 recurrence/locale/nl/LC_MESSAGES/djangojs.po       | 309 +++++++-----
 recurrence/locale/pt_BR/LC_MESSAGES/django.mo      | Bin 4437 -> 4510 bytes
 recurrence/locale/pt_BR/LC_MESSAGES/django.po      | 237 ++++-----
 recurrence/locale/pt_BR/LC_MESSAGES/djangojs.mo    | Bin 4805 -> 5380 bytes
 recurrence/locale/pt_BR/LC_MESSAGES/djangojs.po    | 305 +++++++-----
 recurrence/locale/sk/LC_MESSAGES/django.mo         | Bin 0 -> 4547 bytes
 recurrence/locale/sk/LC_MESSAGES/django.po         | 403 ++++++++++++++++
 recurrence/locale/sk/LC_MESSAGES/djangojs.mo       | Bin 0 -> 5589 bytes
 recurrence/locale/sk/LC_MESSAGES/djangojs.po       | 537 +++++++++++++++++++++
 recurrence/static/recurrence/css/recurrence.css    |  11 +-
 .../static/recurrence/js/recurrence-widget.js      |  35 +-
 recurrence/static/recurrence/js/recurrence.js      |  37 +-
 setup.py                                           |   2 +-
 tests/test_fields.py                               |  63 ++-
 tests/test_serialization.py                        |  47 ++
 47 files changed, 3304 insertions(+), 1539 deletions(-)

diff --git a/PKG-INFO b/PKG-INFO
index 785df83..2445cce 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-recurrence
-Version: 1.4.1
+Version: 1.5.0
 Summary: Django utility wrapping dateutil.rrule
 Home-page: UNKNOWN
 Author: Tamas Kemenczy
diff --git a/django_recurrence.egg-info/PKG-INFO b/django_recurrence.egg-info/PKG-INFO
index 785df83..2445cce 100644
--- a/django_recurrence.egg-info/PKG-INFO
+++ b/django_recurrence.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-recurrence
-Version: 1.4.1
+Version: 1.5.0
 Summary: Django utility wrapping dateutil.rrule
 Home-page: UNKNOWN
 Author: Tamas Kemenczy
diff --git a/django_recurrence.egg-info/SOURCES.txt b/django_recurrence.egg-info/SOURCES.txt
index 211c94a..f6c3348 100644
--- a/django_recurrence.egg-info/SOURCES.txt
+++ b/django_recurrence.egg-info/SOURCES.txt
@@ -59,6 +59,10 @@ recurrence/locale/pt_BR/LC_MESSAGES/django.mo
 recurrence/locale/pt_BR/LC_MESSAGES/django.po
 recurrence/locale/pt_BR/LC_MESSAGES/djangojs.mo
 recurrence/locale/pt_BR/LC_MESSAGES/djangojs.po
+recurrence/locale/sk/LC_MESSAGES/django.mo
+recurrence/locale/sk/LC_MESSAGES/django.po
+recurrence/locale/sk/LC_MESSAGES/djangojs.mo
+recurrence/locale/sk/LC_MESSAGES/djangojs.po
 recurrence/migrations/0001_initial.py
 recurrence/migrations/__init__.py
 recurrence/static/recurrence/css/recurrence.css
diff --git a/docs/changelog.rst b/docs/changelog.rst
index 4cc634d..e580155 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -1,6 +1,22 @@
 Changelog
 =========
 
+1.5.0 (pending)
+---------------
+
+* Add Slovakian translations (:issue:`98`);
+* Add support for events occurring at a fixed point before the
+  end of the month - e.g. the second last Tuesday before the end of
+  the month (:issue:`88`);
+* Add minor style changes to make django-recurrence compatible with
+  Wagtail (:issue:`100`);
+* Allow changing the behaviour of generating recurrences on
+  ``dtstart`` by default. You can opt in to this by setting
+  ``include_dtstart=False`` on your ``RecurrenceField``
+  (:issue:`93`);
+* Ensure broken values raise ``DeserializationError`` where expected
+  (:issue:`103`).
+
 1.4.1
 -----
 
diff --git a/docs/conf.py b/docs/conf.py
index 5f94a0c..42681c7 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -60,9 +60,9 @@ copyright = u'2014, django-recurrence developers'
 # built documents.
 #
 # The short X.Y version.
-version = '1.4.1'
+version = '1.5.0'
 # The full version, including alpha/beta/rc tags.
-release = '1.4.1'
+release = '1.5.0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/docs/installation.rst b/docs/installation.rst
index 90637b5..ef17d62 100644
--- a/docs/installation.rst
+++ b/docs/installation.rst
@@ -30,7 +30,7 @@ Supported Django and Python versions
 Currently, django-recurrence supports Python 2.7, Python 3.3, Python
 3.4 and Python 3.5.
 
-django-recurrence works with Django from versions 1.7 to 1.9.
+django-recurrence works with Django from versions 1.7 to 1.11.
 
 Set up internationalization
 ---------------------------
@@ -95,4 +95,5 @@ to ensure you also have ``django.contrib.staticfiles`` in your
     python manage.py collectstatic
 
 .. note::
-   After collecting static files, you can use {{ form.media }} to include recurrence's static files within your templates.
+   After collecting static files, you can use {{ form.media }} to
+   include recurrence's static files within your templates.
diff --git a/docs/usage/recurrence_field.rst b/docs/usage/recurrence_field.rst
index 76c999c..ca293bb 100644
--- a/docs/usage/recurrence_field.rst
+++ b/docs/usage/recurrence_field.rst
@@ -76,6 +76,42 @@ The effective starting date for any recurrence pattern is essentially
 the later of the first argument and ``dtstart``. To minimize
 confusion, you probably want to set them both to the same value.
 
+.. warning::
+
+   Note that per default ``dtstart`` will be the first occurence in
+   your list if specified, according to RFC 2445. This practice
+   deviates from how ``dateutil.rrule`` handles ``dtstart`` and can
+   therefore lead to confusion. Read on for how you can control this
+   behavior for your own recurrence patterns.
+
+To switch off the automatic inclusion of ``dtstart`` into the
+occurence list, set ``include_dtstart=False`` as an argument for the
+``RecurrenceField`` whose behavior you want to change:
+
+.. code-block:: python
+    :emphasize-lines: 3
+
+    class Course(models.Model):
+        title = models.CharField(max_length=200)
+        recurrences = RecurrenceField(include_dtstart=False)
+
+With this change any ``dtstart`` value will only be an occurence if
+it matches the pattern specified in ``recurrences``. This also works
+for instantiating ``Recurrence`` objects directly:
+
+.. code-block:: python
+    :emphasize-lines: 3
+
+    pattern = recurrence.Recurrence(
+       rrules=[recurrence.Rule(recurrence.WEEKLY, byday=recurrence.MONDAY)],
+       include_dtstart=False).between(
+          datetime(2010, 1, 1, 0, 0, 0),
+          datetime(2014, 12, 31, 0, 0, 0),
+          dtstart=datetime(2010, 1, 1, 0, 0, 0),
+          inc=True
+       )
+    )
+
 .. _occurrences:
 
 Getting all occurrences
diff --git a/recurrence/base.py b/recurrence/base.py
index 03c8eb2..95c7040 100644
--- a/recurrence/base.py
+++ b/recurrence/base.py
@@ -249,7 +249,7 @@ class Recurrence(object):
 
     A `Recurrence` instance provides the combined behavior of the
     rfc2445 `DTSTART`, `DTEND`, `RRULE`, `EXRULE`, `RDATE`, and
-    `EXDATE` propeties in generating recurring date/times.
+    `EXDATE` properties in generating recurring date/times.
 
     This is a wrapper around the `dateutil.rrule.rruleset` class while
     adhering to the rfc2445 spec. Notably a `dtstart` parameter can be
@@ -286,10 +286,18 @@ class Recurrence(object):
             occurrence set generation. Dates included that way will
             not be generated, even if some inclusive `Rule` or
             `datetime.datetime` instances matches them.
+
+        `include_dtstart` : bool
+            Defines if `dtstart` is included in the recurrence set as
+            the first occurrence. With `include_dtstart == True` it is
+            both the starting point for recurrences and the first
+            recurrence in the set (according to the rfc2445 spec).
+            With `include_dtstart == False` `dtstart` is only the rule's
+            starting point like in python's `dateutil.rrule`.
     """
     def __init__(
-        self, dtstart=None, dtend=None,
-        rrules=(), exrules=(), rdates=(), exdates=()
+        self, dtstart=None, dtend=None, rrules=(), exrules=(),
+            rdates=(), exdates=(), include_dtstart=True
     ):
         """
         Create a new recurrence.
@@ -306,6 +314,7 @@ class Recurrence(object):
         self.exrules = list(exrules)
         self.rdates = list(rdates)
         self.exdates = list(exdates)
+        self.include_dtstart = include_dtstart
 
     def __iter__(self):
         return self.occurrences()
@@ -535,6 +544,8 @@ class Recurrence(object):
 
         dtstart = dtstart or self.dtstart
         dtend = dtend or self.dtend
+        include_dtstart = self.include_dtstart
+
         if dtend:
             dtend = normalize_offset_awareness(dtend or self.dtend, dtstart)
 
@@ -552,7 +563,7 @@ class Recurrence(object):
         for exrule in self.exrules:
             rruleset.exrule(exrule.to_dateutil_rrule(dtstart, dtend, cache))
 
-        if dtstart is not None:
+        if include_dtstart and dtstart is not None:
             rruleset.rdate(dtstart)
         for rdate in self.rdates:
             rdate = normalize_offset_awareness(rdate, dtstart)
@@ -783,7 +794,7 @@ def validate(rule_or_recurrence):
             elif param == 'bymonth':
                 validate_iterable_ints(rule, param, 1, 12)
             elif param == 'bymonthday':
-                validate_iterable_ints(rule, param, 1, 31)
+                validate_iterable_ints(rule, param, -4, 31)
             elif param == 'byhour':
                 validate_iterable_ints(rule, param, 0, 23)
             elif param == 'byminute':
@@ -921,7 +932,7 @@ def serialize(rule_or_recurrence):
     return u'\n'.join(u'%s:%s' % i for i in items)
 
 
-def deserialize(text):
+def deserialize(text, include_dtstart=True):
     """
     Deserialize a rfc2445 formatted string.
 
@@ -991,9 +1002,8 @@ def deserialize(text):
     for label, param_text in tokens:
         if not param_text:
             raise exceptions.DeserializationError('empty property: %r' % label)
-        if u'=' not in param_text:
-            params = param_text
-        else:
+
+        if label in (u'RRULE', u'EXRULE'):
             params = {}
             param_tokens = filter(lambda p: p, param_text.split(u';'))
             for item in param_tokens:
@@ -1006,7 +1016,6 @@ def deserialize(text):
                 params[param_name] = list(map(
                     lambda i: i.strip(), param_value.split(u',')))
 
-        if label in (u'RRULE', u'EXRULE'):
             kwargs = {}
             for key, value in params.items():
                 if key == u'FREQ':
@@ -1064,15 +1073,15 @@ def deserialize(text):
             else:
                 exrules.append(Rule(**kwargs))
         elif label == u'DTSTART':
-            dtstart = deserialize_dt(params)
+            dtstart = deserialize_dt(param_text)
         elif label == u'DTEND':
-            dtend = deserialize_dt(params)
+            dtend = deserialize_dt(param_text)
         elif label == u'RDATE':
-            rdates.append(deserialize_dt(params))
+            rdates.append(deserialize_dt(param_text))
         elif label == u'EXDATE':
-            exdates.append(deserialize_dt(params))
+            exdates.append(deserialize_dt(param_text))
 
-    return Recurrence(dtstart, dtend, rrules, exrules, rdates, exdates)
+    return Recurrence(dtstart, dtend, rrules, exrules, rdates, exdates, include_dtstart)
 
 
 def rule_to_text(rule, short=False):
@@ -1101,6 +1110,12 @@ def rule_to_text(rule, short=False):
             -2: _('2nd last %(weekday)s'),
             -3: _('3rd last %(weekday)s'),
         }
+        last_of_month_display = {
+            -1: _('last'),
+            -2: _('2nd last'),
+            -3: _('3rd last'),
+            -4: _('4th last'),
+        }
         weekdays_display = (
             _('Mon'), _('Tue'), _('Wed'),
             _('Thu'), _('Fri'), _('Sat'), _('Sun'),
@@ -1121,6 +1136,12 @@ def rule_to_text(rule, short=False):
             -2: _('second last %(weekday)s'),
             -3: _('third last %(weekday)s'),
         }
+        last_of_month_display = {
+            -1: _('last'),
+            -2: _('second last'),
+            -3: _('third last'),
+            -4: _('fourth last'),
+        }
         weekdays_display = (
             _('Monday'), _('Tuesday'), _('Wednesday'),
             _('Thursday'), _('Friday'), _('Saturday'), _('Sunday'),
@@ -1175,8 +1196,8 @@ def rule_to_text(rule, short=False):
     if rule.freq == MONTHLY:
         if rule.bymonthday:
             items = _(', ').join([
-                dateformat.format(
-                    datetime.datetime(1, 1, day), 'jS')
+                dateformat.format(datetime.datetime(1, 1, day), 'jS') if day > 0
+                else last_of_month_display.get(day, day)
                 for day in rule.bymonthday])
             parts.append(_('on the %(items)s') % {'items': items})
         elif rule.byday:
diff --git a/recurrence/fields.py b/recurrence/fields.py
index d4652cb..fed705a 100644
--- a/recurrence/fields.py
+++ b/recurrence/fields.py
@@ -18,6 +18,10 @@ except ImportError:
 class RecurrenceField(fields.Field):
     """Field that stores a `recurrence.base.Recurrence` to the database."""
 
+    def __init__(self, include_dtstart=True, **kwargs):
+        self.include_dtstart = include_dtstart
+        super(RecurrenceField, self).__init__(**kwargs)
+
     def get_internal_type(self):
         return 'TextField'
 
@@ -25,7 +29,7 @@ class RecurrenceField(fields.Field):
         if value is None or isinstance(value, recurrence.Recurrence):
             return value
         value = super(RecurrenceField, self).to_python(value) or u''
-        return recurrence.deserialize(value)
+        return recurrence.deserialize(value, self.include_dtstart)
 
     def from_db_value(self, value, *args, **kwargs):
         return self.to_python(value)
diff --git a/recurrence/locale/de/LC_MESSAGES/django.mo b/recurrence/locale/de/LC_MESSAGES/django.mo
index bfbd33c..87ed42b 100644
Binary files a/recurrence/locale/de/LC_MESSAGES/django.mo and b/recurrence/locale/de/LC_MESSAGES/django.mo differ
diff --git a/recurrence/locale/de/LC_MESSAGES/django.po b/recurrence/locale/de/LC_MESSAGES/django.po
index 9018a95..8e73816 100644
--- a/recurrence/locale/de/LC_MESSAGES/django.po
+++ b/recurrence/locale/de/LC_MESSAGES/django.po
@@ -7,336 +7,332 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Django Recurrence 1.4.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-05 13:25-0600\n"
-"PO-Revision-Date: 2016-11-22 01:09+0100\n"
+"POT-Creation-Date: 2017-02-24 23:21+0100\n"
+"PO-Revision-Date: 2017-02-24 23:22+0100\n"
 "Last-Translator: Denis Anuschewski\n"
 "Language-Team: \n"
+"Language: German\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: German\n"
 
-#: base.py:871
+#: base.py:1087
 msgid "annually"
 msgstr "jährlich"
 
-#: base.py:871
+#: base.py:1087
 msgid "monthly"
 msgstr "monatlich"
 
-#: base.py:871
+#: base.py:1087
 msgid "weekly"
 msgstr "wöchentlich"
 
-#: base.py:871
+#: base.py:1087
 msgid "daily"
 msgstr "täglich"
 
-#: base.py:872
+#: base.py:1088
 msgid "hourly"
 msgstr "stündlich"
 
-#: base.py:872
+#: base.py:1088
 msgid "minutely"
 msgstr "minütlich"
 
-#: base.py:872
+#: base.py:1088
 msgid "secondly"
 msgstr "sekündlich"
 
-#: base.py:875
-msgid "year"
-msgstr "Jahr"
-
-#: base.py:875
-msgid "month"
-msgstr "Monat"
-
-#: base.py:875
-msgid "week"
-msgstr "Woche"
-
-#: base.py:875
-msgid "day"
-msgstr "Tag"
-
-#: base.py:876
-msgid "hour"
-msgstr "Stunde"
-
-#: base.py:876
-msgid "minute"
-msgstr "Minute"
-
-#: base.py:876
-msgid "second"
-msgstr "Sekunde"
-
-#: base.py:879
+#: base.py:1091
 msgid "years"
 msgstr "Jahre"
 
-#: base.py:879
+#: base.py:1091
 msgid "months"
 msgstr "Monate"
 
-#: base.py:879
+#: base.py:1091
 msgid "weeks"
 msgstr "Wochen"
 
-#: base.py:879
+#: base.py:1091
 msgid "days"
 msgstr "Tage"
 
-#: base.py:880
+#: base.py:1092
 msgid "hours"
 msgstr "Stunden"
 
-#: base.py:880
+#: base.py:1092
 msgid "minutes"
 msgstr "Minuten"
 
-#: base.py:880
+#: base.py:1092
 msgid "seconds"
 msgstr "Sekunden"
 
-#: base.py:885
+#: base.py:1097
 #, python-format
 msgid "1st %(weekday)s"
 msgstr "1. %(weekday)s"
 
-#: base.py:886
+#: base.py:1098
 #, python-format
 msgid "2nd %(weekday)s"
 msgstr "2. %(weekday)s"
 
-#: base.py:887
+#: base.py:1099
 #, python-format
 msgid "3rd %(weekday)s"
 msgstr "3. %(weekday)s"
 
-#: base.py:888 base.py:907
+#: base.py:1100 base.py:1126
 #, python-format
 msgid "last %(weekday)s"
 msgstr "letzten %(weekday)s"
 
-#: base.py:889
+#: base.py:1101
 #, python-format
 msgid "2nd last %(weekday)s"
-msgstr "zweitletzten %(weekday)s"
+msgstr "2. letzten %(weekday)s"
 
-#: base.py:890
+#: base.py:1102
 #, python-format
 msgid "3rd last %(weekday)s"
-msgstr "drittletzten %(weekday)s"
+msgstr "3. letzten %(weekday)s"
+
+#: base.py:1105 base.py:1131
+msgid "last"
+msgstr "letzten"
+
+#: base.py:1106
+msgid "2nd last"
+msgstr "2. letzten"
 
-#: base.py:893
+#: base.py:1107
+msgid "3rd last"
+msgstr "3. letzten"
+
+#: base.py:1108
+msgid "4th last"
+msgstr "4. letzten"
+
+#: base.py:1111
 msgid "Mon"
 msgstr "Mo"
 
-#: base.py:893
+#: base.py:1111
 msgid "Tue"
 msgstr "Di"
 
-#: base.py:893
+#: base.py:1111
 msgid "Wed"
 msgstr "Mi"
 
-#: base.py:894
+#: base.py:1112
 msgid "Thu"
 msgstr "Do"
 
-#: base.py:894
+#: base.py:1112
 msgid "Fri"
 msgstr "Fr"
 
-#: base.py:894
+#: base.py:1112
 msgid "Sat"
 msgstr "Sa"
 
-#: base.py:894
+#: base.py:1112
 msgid "Sun"
 msgstr "So"
 
-#: base.py:897
+#: base.py:1115
 msgid "Jan"
 msgstr "Jan"
 
-#: base.py:897
+#: base.py:1115
 msgid "Feb"
 msgstr "Feb"
 
-#: base.py:897
+#: base.py:1115
 msgid "Mar"
 msgstr "Mrz"
 
-#: base.py:897
+#: base.py:1115
 msgid "Apr"
 msgstr "Apr"
 
-#: base.py:898 base.py:917 choices.py:31
-msgid "May"
-msgstr "Mai"
-
-#: base.py:898
+#: base.py:1116
 msgid "Jun"
 msgstr "Jun"
 
-#: base.py:898
+#: base.py:1116
 msgid "Jul"
 msgstr "Jul"
 
-#: base.py:898
+#: base.py:1116
 msgid "Aug"
 msgstr "Aug"
 
-#: base.py:899
+#: base.py:1117
 msgid "Sep"
 msgstr "Sep"
 
-#: base.py:899
+#: base.py:1117
 msgid "Oct"
 msgstr "Okt"
 
-#: base.py:899
+#: base.py:1117
 msgid "Nov"
 msgstr "Nov"
 
-#: base.py:899
+#: base.py:1117
 msgid "Dec"
 msgstr "Dez"
 
-#: base.py:904
+#: base.py:1122
 #, python-format
 msgid "first %(weekday)s"
 msgstr "ersten %(weekday)s"
 
-#: base.py:905
+#: base.py:1123
 #, python-format
 msgid "second %(weekday)s"
 msgstr "zweiten %(weekday)s"
 
-#: base.py:906
+#: base.py:1124
 #, python-format
 msgid "third %(weekday)s"
 msgstr "dritten %(weekday)s"
 
-#: base.py:906
+#: base.py:1125
 #, python-format
 msgid "fourth %(weekday)s"
 msgstr "vierten %(weekday)s"
 
-#: base.py:908
+#: base.py:1127
 #, python-format
 msgid "second last %(weekday)s"
-msgstr "zweitletzten %(weekday)s"
+msgstr "vorletzten %(weekday)s"
 
-#: base.py:909
+#: base.py:1128
 #, python-format
 msgid "third last %(weekday)s"
 msgstr "drittletzten %(weekday)s"
 
-#: base.py:912 choices.py:17
+#: base.py:1132
+msgid "second last"
+msgstr "vorletzten"
+
+#: base.py:1133
+msgid "third last"
+msgstr "drittletzten"
+
+#: base.py:1134
+msgid "fourth last"
+msgstr "viertletzten"
+
+#: base.py:1137 choices.py:17
 msgid "Monday"
 msgstr "Montag"
 
-#: base.py:912 choices.py:18
+#: base.py:1137 choices.py:18
 msgid "Tuesday"
 msgstr "Dienstag"
 
-#: base.py:912 choices.py:19
+#: base.py:1137 choices.py:19
 msgid "Wednesday"
 msgstr "Mittwoch"
 
-#: base.py:913 choices.py:20
+#: base.py:1138 choices.py:20
 msgid "Thursday"
 msgstr "Donnerstag"
 
-#: base.py:913 choices.py:21
+#: base.py:1138 choices.py:21
 msgid "Friday"
 msgstr "Freitag"
 
-#: base.py:913 choices.py:22
+#: base.py:1138 choices.py:22
 msgid "Saturday"
 msgstr "Samstag"
 
-#: base.py:913 choices.py:23
+#: base.py:1138 choices.py:23
 msgid "Sunday"
 msgstr "Sonntag"
 
-#: base.py:916 choices.py:27
+#: base.py:1141 choices.py:27
 msgid "January"
 msgstr "Januar"
 
-#: base.py:916 choices.py:28
+#: base.py:1141 choices.py:28
 msgid "February"
 msgstr "Februar"
 
-#: base.py:916 choices.py:29
+#: base.py:1141 choices.py:29
 msgid "March"
 msgstr "März"
 
-#: base.py:916 choices.py:30
+#: base.py:1141 choices.py:30
 msgid "April"
 msgstr "April"
 
-#: base.py:917 choices.py:32
+#: base.py:1142 choices.py:32
 msgid "June"
 msgstr "Juni"
 
-#: base.py:917 choices.py:33
+#: base.py:1142 choices.py:33
 msgid "July"
 msgstr "Juli"
 
-#: base.py:917 choices.py:34
+#: base.py:1142 choices.py:34
 msgid "August"
 msgstr "August"
 
-#: base.py:918 choices.py:35
+#: base.py:1143 choices.py:35
 msgid "September"
 msgstr "September"
 
-#: base.py:918 choices.py:36
+#: base.py:1143 choices.py:36
 msgid "October"
 msgstr "Oktober"
 
-#: base.py:918 choices.py:37
+#: base.py:1143 choices.py:37
 msgid "November"
 msgstr "November"
 
-#: base.py:918 choices.py:38
+#: base.py:1143 choices.py:38
 msgid "December"
 msgstr "Dezember"
 
-#: base.py:936 base.py:951 base.py:974 base.py:992
+#: base.py:1161 base.py:1178 base.py:1189 base.py:1202 base.py:1220
 msgid ", "
 msgstr ""
 
-#: base.py:942
+#: base.py:1167
 #, python-format
 msgid "every %(number)s %(freq)s"
 msgstr "alle %(number)s %(freq)s"
 
-#: base.py:953 base.py:977
+#: base.py:1181 base.py:1205
 #, python-format
 msgid "each %(items)s"
 msgstr "jeden %(items)s"
 
-#: base.py:956 base.py:965 base.py:969
+#: base.py:1184 base.py:1193 base.py:1197
 #, python-format
 msgid "on the %(items)s"
 msgstr "am %(items)s"
 
-#: base.py:984
+#: base.py:1212
 msgid "occuring once"
 msgstr "einmalig"
 
-#: base.py:986
+#: base.py:1214
 #, python-format
 msgid "occuring %(number)s times"
 msgstr "bis zum %(number)s. Mal"
 
-#: base.py:989
+#: base.py:1217
 #, python-format
 msgid "until %(date)s"
 msgstr "bis %(date)s"
@@ -369,6 +365,10 @@ msgstr "Monatlich"
 msgid "Yearly"
 msgstr "Jährlich"
 
+#: choices.py:31
+msgid "May"
+msgstr "Mai"
+
 #: choices.py:44
 msgid "Inclusion"
 msgstr "Einschließlich"
@@ -377,27 +377,48 @@ msgstr "Einschließlich"
 msgid "Exclusion"
 msgstr "Ohne"
 
-#: forms.py:64
+#: forms.py:72
 msgid "Invalid frequency."
 msgstr "Ungültige Frequenz."
 
-#: forms.py:66
+#: forms.py:74
 #, python-format
 msgid "Max rules exceeded. The limit is %(limit)s"
 msgstr "Maximale Anzahl an %(limit)s Regeln ist überschritten."
 
-#: forms.py:68
+#: forms.py:76
 #, python-format
 msgid "Max exclusion rules exceeded. The limit is %(limit)s"
 msgstr "Maximale Anzahl an %(limit)s Ausschlussregeln ist überschritten."
 
-#: forms.py:70
+#: forms.py:78
 #, python-format
 msgid "Max dates exceeded. The limit is %(limit)s"
 msgstr "Maximale Anzahl an %(limit)s Datumsangaben ist überschritten."
 
-#: forms.py:72
+#: forms.py:80
 #, python-format
 msgid "Max exclusion dates exceeded. The limit is %(limit)s"
-msgstr "Maximale Anzahl an %(limit)s ausschließenden Datumsangaben ist überschritten."
+msgstr ""
+"Maximale Anzahl an %(limit)s ausschließenden Datumsangaben ist überschritten."
+
+#~ msgid "year"
+#~ msgstr "Jahr"
+
+#~ msgid "month"
+#~ msgstr "Monat"
+
+#~ msgid "week"
+#~ msgstr "Woche"
+
+#~ msgid "day"
+#~ msgstr "Tag"
+
+#~ msgid "hour"
+#~ msgstr "Stunde"
+
+#~ msgid "minute"
+#~ msgstr "Minute"
 
+#~ msgid "second"
+#~ msgstr "Sekunde"
diff --git a/recurrence/locale/de/LC_MESSAGES/djangojs.mo b/recurrence/locale/de/LC_MESSAGES/djangojs.mo
index b263240..fd4c6c8 100644
Binary files a/recurrence/locale/de/LC_MESSAGES/djangojs.mo and b/recurrence/locale/de/LC_MESSAGES/djangojs.mo differ
diff --git a/recurrence/locale/de/LC_MESSAGES/djangojs.po b/recurrence/locale/de/LC_MESSAGES/djangojs.po
index fdc5da4..6a73735 100644
--- a/recurrence/locale/de/LC_MESSAGES/djangojs.po
+++ b/recurrence/locale/de/LC_MESSAGES/djangojs.po
@@ -7,476 +7,533 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Django Recurrence 1.4.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-05 13:25-0600\n"
-"PO-Revision-Date: 2016-11-22 01:10+0100\n"
+"POT-Creation-Date: 2017-02-24 23:11+0100\n"
+"PO-Revision-Date: 2017-02-24 23:10+0100\n"
 "Last-Translator: Denis Anuschewski\n"
 "Language-Team: \n"
+"Language: German\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: German\n"
 
-#: recurrence-widget.js:1610
+#: static/recurrence/js/recurrence-widget.js:1609
 msgctxt "date"
 msgid "%l, %F %j, %Y"
 msgstr "%l, %j. %F %Y"
 
-#: recurrence-widget.js:1732
+#: static/recurrence/js/recurrence-widget.js:1774
 msgid "including"
 msgstr "einschließend"
 
-#: recurrence-widget.js:1732
+#: static/recurrence/js/recurrence-widget.js:1774
 msgid "excluding"
 msgstr "ohne"
 
-#: recurrence-widget.js:1736
+#: static/recurrence/js/recurrence-widget.js:1778
 msgid "Frequency"
 msgstr "Frequenz"
 
-#: recurrence-widget.js:1737
+#: static/recurrence/js/recurrence-widget.js:1779
 msgid "On the"
 msgstr "Am"
 
-#: recurrence-widget.js:1738
+#: static/recurrence/js/recurrence-widget.js:1780
 msgid "Each"
 msgstr "Jeden"
 
-#: recurrence-widget.js:1739
+#: static/recurrence/js/recurrence-widget.js:1781
 msgid "Every"
 msgstr "Alle"
 
-#: recurrence-widget.js:1740
+#: static/recurrence/js/recurrence-widget.js:1782
 msgid "Until"
 msgstr "Bis"
 
-#: recurrence-widget.js:1741
+#: static/recurrence/js/recurrence-widget.js:1783
 msgid "Occurs %(number)s time"
 msgstr "Bis zum %(number)s. Mal"
 
-#: recurrence-widget.js:1742
+#: static/recurrence/js/recurrence-widget.js:1784
 msgid "Occurs %(number)s times"
 msgstr "Bis zum %(number)s. Mal"
 
-#: recurrence-widget.js:1743
+#: static/recurrence/js/recurrence-widget.js:1785
 msgid "Date"
 msgstr "Datum"
 
-#: recurrence-widget.js:1744
+#: static/recurrence/js/recurrence-widget.js:1786
 msgid "Time"
 msgstr "Zeit"
 
-#: recurrence-widget.js:1745
+#: static/recurrence/js/recurrence-widget.js:1787
 msgid "Repeat until"
 msgstr "Wiederholen bis"
 
-#: recurrence-widget.js:1746
+#: static/recurrence/js/recurrence-widget.js:1788
 msgid "Exclude these occurences"
 msgstr "Diese Vorkommen ausschließen"
 
-#: recurrence-widget.js:1747
+#: static/recurrence/js/recurrence-widget.js:1789
 msgid "Exclude this date"
 msgstr "Dieses Datum ausschließen"
 
-#: recurrence-widget.js:1748
+#: static/recurrence/js/recurrence-widget.js:1790
 msgid "Add rule"
 msgstr "Regel hinzufügen"
... 8475 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/django-recurrence.git



More information about the Python-modules-commits mailing list