]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
CLDR: Import interval format data
authorAarni Koskela <akx@iki.fi>
Sun, 3 Jan 2016 22:25:48 +0000 (00:25 +0200)
committerAarni Koskela <akx@iki.fi>
Sat, 23 Jan 2016 10:51:04 +0000 (12:51 +0200)
Refs #276

babel/core.py
scripts/import_cldr.py

index 4a284e893fbeb73d396938b7a73897cf7655f9cf..8764360ab7aec382acafba6d7bd5172f43823411 100644 (file)
@@ -798,6 +798,28 @@ class Locale(object):
         """
         return self._data['datetime_skeletons']
 
+    @property
+    def interval_formats(self):
+        """Locale patterns for interval formatting.
+
+        .. note:: The format of the value returned may change between
+                  Babel versions.
+
+        How to format date intervals in Finnish when the day is the
+        smallest changing component:
+
+        >>> Locale('fi_FI').interval_formats['MEd']['d']
+        [u'E d. \u2013 ', u'E d.M.']
+
+        .. seealso::
+
+           The primary API to use this data is :py:func:`babel.dates.format_interval`.
+
+
+        :rtype: dict[str, dict[str, list[str]]]
+        """
+        return self._data['interval_formats']
+
     @property
     def plural_form(self):
         """Plural rules for the locale.
index 8c0e7f7a5b00c68976d46aa91a56c574ef8a937f..8e151f7d38bc022e2ed7c4c8c71ac58c5c230404 100755 (executable)
@@ -16,6 +16,7 @@ from optparse import OptionParser
 import os
 import re
 import sys
+
 try:
     from xml.etree import cElementTree as ElementTree
 except ImportError:
@@ -25,9 +26,10 @@ except ImportError:
 sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), '..'))
 
 from babel import dates, numbers
-from babel.plural import PluralRule
-from babel.localedata import Alias
 from babel._compat import pickle, text_type
+from babel.dates import split_interval_pattern
+from babel.localedata import Alias
+from babel.plural import PluralRule
 
 parse = ElementTree.parse
 weekdays = {'mon': 0, 'tue': 1, 'wed': 2, 'thu': 3, 'fri': 4, 'sat': 5,
@@ -608,6 +610,8 @@ def main():
                             datetime_skeletons[datetime_skeleton.attrib['id']] = \
                                 dates.parse_pattern(text_type(datetime_skeleton.text))
 
+            parse_interval_formats(data, calendar)
+
         # <numbers>
 
         number_symbols = data.setdefault('number_symbols', {})
@@ -693,6 +697,23 @@ def main():
         write_datafile(data_filename, data, dump_json=dump_json)
 
 
+def parse_interval_formats(data, tree):
+    # http://www.unicode.org/reports/tr35/tr35-dates.html#intervalFormats
+    interval_formats = data.setdefault("interval_formats", {})
+    for elem in tree.findall("dateTimeFormats/intervalFormats/*"):
+        if 'draft' in elem.attrib:
+            continue
+        if elem.tag == "intervalFormatFallback":
+            interval_formats[None] = elem.text
+        elif elem.tag == "intervalFormatItem":
+            skel_data = interval_formats.setdefault(elem.attrib["id"], {})
+            for item_sub in elem.getchildren():
+                if item_sub.tag == "greatestDifference":
+                    skel_data[item_sub.attrib["id"]] = split_interval_pattern(item_sub.text)
+                else:
+                    raise NotImplementedError("Not implemented: %s(%r)" % (item_sub.tag, item_sub.attrib))
+
+
 def parse_currency_formats(data, tree):
     currency_formats = data.setdefault('currency_formats', {})
     for length_elem in tree.findall('.//currencyFormats/currencyFormatLength'):