From: Aarni Koskela Date: Sun, 3 Jan 2016 22:25:48 +0000 (+0200) Subject: CLDR: Import interval format data X-Git-Tag: 2.3.1~26^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2744fd7cc819db1e158510287971526cf843143b;p=thirdparty%2Fbabel.git CLDR: Import interval format data Refs #276 --- diff --git a/babel/core.py b/babel/core.py index 4a284e89..8764360a 100644 --- a/babel/core.py +++ b/babel/core.py @@ -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. diff --git a/scripts/import_cldr.py b/scripts/import_cldr.py index 8c0e7f7a..8e151f7d 100755 --- a/scripts/import_cldr.py +++ b/scripts/import_cldr.py @@ -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) + # 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'):